Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Tombi
Beiträge: 369 Registriert: 05.03.2008 22:05
Beitrag
von Tombi » 28.07.2010 14:57
Liebe Community,
nutze die aktuelle Pbosl und PB 4.40 (ja ich weiß, muss mal updaten...)
Nur nimmt er eine Prozedure nicht so ganz.
Woran liegts?
Fehlermeldung:
Ungültiger Speicherzugriff (Lesefehler an der Adresse 0)
Betroffene Zeile:
Code: Alles auswählen
Result=EnumProcessModules(hProcess, @BaseModule, 4, @cbNeeded)
Komplette Prozedure:
Code: Alles auswählen
ProcedureDLL.s GetProcessName2(PID);get the name of the process
;MessageRequester("Info",Str(PID),0)
hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, 0, PID)
If hProcess
Result=EnumProcessModules(hProcess, @BaseModule, 4, @cbNeeded)
LName3$ = Space(255)
Result=GetModuleBaseName(hProcess, BaseModule, LName3$, Len(LName3$))
CloseHandle_(hProcess)
; MessageRequester("Info " +Str(Result),LNAme3$,0)
ProcedureReturn LName3$
Else
ProcedureReturn "Unknow process"
EndIf
EndProcedure
MFG,
Tombi
Bisonte
Beiträge: 2468 Registriert: 01.04.2007 20:18
Beitrag
von Bisonte » 28.07.2010 16:27
Um mir eine Liste aller verfügbaren laufenden Prozesse zu generieren (a'la Taskmanager)
nutze ich von Thorium eine Variante....
Dort kann man dann auch diverse andere Sachen als nur den Namen auslesen... (siehe Structure ProcessInfo)
Die ganze PBOSL_Process.pbi war mir für den zweck zu heftig
Code: Alles auswählen
Structure ProcessInfo
Name.s
Path.s
ID.l
ParentID.l
ThreadsCnt.l
PriorityClass.l
Icon.l
EndStructure
Structure PROCESSENTRY33
dwSize.l
cntUsage.l
th32ProcessID.l
th32DefaultHeapID.l
th32ModuleID.l
cntThreads.l
th32ParentProcessID.l
pcPriClassBase.l
dwFlags.l
szExeFile.b[#MAX_PATH]
EndStructure
Procedure.i Proc_GetProcessList(List ProcessList.ProcessInfo());legt in die Linkliste.ProcessInfo() alle laufenden Tasks ab
;######
;###### Author : Thorium
;###### Quelle : http://www.purebasic.fr/german/viewtopic.php?f=11&t=12401
;###### Modifiziert von Array auf LinkList
;######
ClearList(ProcessList())
Define.l ProcessSnapHandle,ModuleSnapHandle,RetVal,i,ProcessID,ExePath,IconHandle
Define.PROCESSENTRY32 ProcessEntry
Define.MODULEENTRY32 ModuleEntry
ProcessListCnt = 0
ProcessEntry\dwSize = SizeOf(ProcessEntry)
ModuleEntry\dwSize = SizeOf(ModuleEntry)
;laufende Prozesse ermitteln
ExePath = AllocateMemory(1024)
ProcessSnapHandle = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS,0)
RetVal = Process32First_(ProcessSnapHandle,ProcessEntry)
While RetVal = #True
ProcessListCnt = ProcessListCnt + 1
AddElement(ProcessList())
ProcessList()\Name = PeekS(@ProcessEntry\szExeFile)
ProcessList()\ID = ProcessEntry\th32ProcessID
ProcessList()\ParentID = ProcessEntry\th32ParentProcessID
ProcessList()\ThreadsCnt = ProcessEntry\cntThreads
ProcessList()\PriorityClass = ProcessEntry\pcPriClassBase
If ProcessEntry\th32ProcessID <> 0
ModuleSnapHandle = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE,ProcessEntry\th32ProcessID)
If ModuleSnapHandle
If Module32First_(ModuleSnapHandle,ModuleEntry)
ProcessList()\Path = GetPathPart(Trim(PeekS(@ModuleEntry\szExePath)))
EndIf
CloseHandle_(ModuleSnapHandle)
EndIf
EndIf
PokeS(ExePath,ProcessList()\Path + ProcessList()\Name)
IconHandle = ExtractIcon_(0,ExePath,0)
If IconHandle = 0
IconHandle = SystemAppIcon
EndIf
ProcessList()\Icon = IconHandle
RetVal = Process32Next_(ProcessSnapHandle,ProcessEntry)
Wend
CloseHandle_(ProcessSnapHandle)
FreeMemory(ExePath)
ProcedureReturn ListSize(ProcessList())
EndProcedure
NewList Prozesse.ProcessInfo()
Proc_GetProcessList(Prozesse())
ForEach Prozesse()
Debug Prozesse()\Name
Next
P ureB asic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Tombi
Beiträge: 369 Registriert: 05.03.2008 22:05
Beitrag
von Tombi » 28.07.2010 17:05
Ist es dennoch irgendwie möglich die PBosl so hinzubekommen, das sie ohne weiteres funktioniert.
D.h. den obigen Fehler beheben?
Tombi
Beiträge: 369 Registriert: 05.03.2008 22:05
Beitrag
von Tombi » 01.08.2010 15:19
~ Push ~
Gibts inzwischen eine Lösung? ^^