Seite 1 von 1

Probleme mit der aktuellen PBosl

Verfasst: 28.07.2010 14:57
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

Re: Probleme mit der aktuellen PBosl

Verfasst: 28.07.2010 16:27
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


Re: Probleme mit der aktuellen PBosl

Verfasst: 28.07.2010 17:05
von Tombi
Ist es dennoch irgendwie möglich die PBosl so hinzubekommen, das sie ohne weiteres funktioniert.
D.h. den obigen Fehler beheben?

Re: Probleme mit der aktuellen PBosl

Verfasst: 01.08.2010 15:19
von Tombi
~ Push ~
Gibts inzwischen eine Lösung? ^^