Probleme mit der aktuellen PBosl

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Tombi
Beiträge: 369
Registriert: 05.03.2008 22:05

Probleme mit der aktuellen PBosl

Beitrag von Tombi »

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
Bild Bild Bild
Intel Pentium 4 630 (3 GHZ)
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Probleme mit der aktuellen PBosl

Beitrag von Bisonte »

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

PureBasic 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

Re: Probleme mit der aktuellen PBosl

Beitrag von Tombi »

Ist es dennoch irgendwie möglich die PBosl so hinzubekommen, das sie ohne weiteres funktioniert.
D.h. den obigen Fehler beheben?
Bild Bild Bild
Intel Pentium 4 630 (3 GHZ)
Tombi
Beiträge: 369
Registriert: 05.03.2008 22:05

Re: Probleme mit der aktuellen PBosl

Beitrag von Tombi »

~ Push ~
Gibts inzwischen eine Lösung? ^^
Bild Bild Bild
Intel Pentium 4 630 (3 GHZ)
Antworten