prozesspfade ermitteln?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
redboy
Beiträge: 17
Registriert: 28.09.2004 19:43

prozesspfade ermitteln?

Beitrag von redboy »

Hallo

ich würde das gerne so erweitern das auch die pfade zu den dateien angezeigt werden. gibt es da eine möglichkeit ohne alle laufwerke zu durchsuchen?

kann mir jemand helfen oder einen tipp geben... das beispiel ist nicht von mir, aber dafür übersichtlich...

Code: Alles auswählen

#TH32CS_SNAPHEAPLIST = $1
#TH32CS_SNAPPROCESS = $2
#TH32CS_SNAPTHREAD = $4
#TH32CS_SNAPMODULE = $8
#TH32CS_SNAPALL = #TH32CS_SNAPHEAPLIST | #TH32CS_SNAPPROCESS | #TH32CS_SNAPTHREAD | #TH32CS_SNAPMODULE
#TH32CS_INHERIT = $80000000
#INVALID_HANDLE_VALUE = -1
#PROCESS32LIB = 9999

Structure PROCESSENTRY32
   dwSize.l
   cntUsage.l
   th32ProcessID.l
   th32DefaultHeapID.l
   th32ModuleID.l
   cntThreads.l
   th32ParentProcessID.l
   pcPriClassBase.l
   dwFlags.l
   szExeFile.b [#MAX_PATH]
EndStructure

NewList Process32.PROCESSENTRY32()

If OpenLibrary(#PROCESS32LIB,"kernel32.dll")

    snap = CallFunction(#PROCESS32LIB,"CreateToolhelp32Snapshot",#TH32CS_SNAPPROCESS,0)
    If snap
        DefType.PROCESSENTRY32 Proc32
        Proc32\dwSize = SizeOf(PROCESSENTRY32)
        
        If CallFunction(#PROCESS32LIB,"Process32First",snap,@Proc32)
            AddElement(Process32())
            CopyMemory(@Proc32,@Process32(),SizeOf(PROCESSENTRY32))
            
            While CallFunction(#PROCESS32LIB,"Process32Next",snap,@Proc32)
                AddElement(Process32())
                CopyMemory(@Proc32,@Process32(),SizeOf(PROCESSENTRY32))
            Wend
        EndIf
        CloseHandle_(snap)
    EndIf
    CloseLibrary(#PROCESS32LIB)
EndIf

ResetList(Process32())

While NextElement(Process32())
   Debug PeekS(@Process32()\szExeFile) +" : "+Str(PeekL(@Process32()\th32ProcessID))
Wend
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Hol dir die PBOSL von http://pbosl.purearea.net und benutz die
Prozess-Lib. Funktioniert wunderbar.
redboy
Beiträge: 17
Registriert: 28.09.2004 19:43

Beitrag von redboy »

hatte mir die hilfe der lib auch schon angeschaut, stand aber nichts vom pfad drin. aber wenn du sagst der pfad ist dabei, dann glaube ich dir das :-)

danke für den tipp...
Benutzeravatar
Programie
Beiträge: 1280
Registriert: 06.08.2005 22:56
Computerausstattung: https://www.sysprofile.de/id160800
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von Programie »

Das sind nur die Dateinamen (z.B. PureBasic.exe)
Wie bekommt man den Pfad raus? :shock:
BildBildBildBild
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

GetProcessDLLFileName(PID)

Hier ein TaskmanagerCode (Nur mit PBOSL):

Code: Alles auswählen

; Process library examples 
; 
; (C) 2004 by Siegfried Rings 
; 
;Following Commands are not implemented in this Testapp , but Fully in the Library: 
;pPokeB(PID,Offset,Value) 
;pPeekw(PID,Offset) 
;pPokew(PID,Offset,Value) 
;pPeekL(PID,Offset) 
;pPokeL(PID,Offset,Value) 
;pReadMemory(handle,addr, DestinationMemoryID, Length) 
;pWriteMemory(handle,addr, SourceMemoryID, Length) 

Enumeration 
  #MainWindow 
  #MainPanel 
  #DeviceDriver 
  #Processes 
  #Process_Info 
  #KillButton 
  #KillButtonAll 
  #Button_Refresh 
  #ButtonSetPrio 
  #ButtonRemovePagefaults 
  #ButtonDump2Screen 
  #MenuPriority 
  #MenuReal 
  #MenuHigh 
  #MenuNormal 
  #MenuLow 
  #MenuWatch 
  #MenuDump2Screen 
  #MenuDump2File 
  #MenuSearchString 
EndEnumeration 

Procedure Open_MainWindow() 
  hwnd=OpenWindow(#MainWindow, 200, 100, 800, 800,  #PB_Window_SystemMenu | #PB_Window_TitleBar , "PB System Info") 
  If hwnd 
    If CreateGadgetList(WindowID()) 
      PanelGadget(#MainPanel, 0, 0, 800, 800) 
      AddGadgetItem(#MainPanel, -1, "General") 
      AddGadgetItem(#MainPanel, -1, "Processes") 
      ListViewGadget(#Processes, 8, 8, 210, 720) 
      TreeGadget(#Process_Info, 218, 8, 560, 720) 
      ButtonGadget(#Button_Refresh, 0, 738, 80, 20, "Refresh List") 
      ButtonGadget(#KillButton, 80, 738, 80, 20, "Kill Process") 
      ButtonGadget(#KillButtonAll, 160, 738, 80, 20, "Kill All") 
      ButtonGadget(#ButtonSetPrio, 240, 738, 80, 20, "Set new Priority") 
      ButtonGadget(#ButtonRemovePagefaults, 320, 738, 80, 20, "Del Pagefaults") 
      ButtonGadget(#ButtonDump2Screen,400, 738, 80, 20, "Dump Hex") 
      DisableGadget(#ButtonDump2Screen,1) 
      AddGadgetItem(#MainPanel, -1, "DeviceDriver") 
      TreeGadget(#DeviceDriver, 8, 8, 460, 310) 
      ;CloseGadgetList() 

     If CreatePopupMenu(#MenuPriority)      
        MenuItem(#MenuReal, "Real") 
        MenuItem(#MenuHigh, "High") 
        MenuItem(#MenuNormal, "Normal") 
        MenuItem(#MenuLow, "Low") 
     EndIf 
     If CreatePopupMenu(#MenuWatch)    
        MenuItem(#MenuDump2Screen, "Dump to Screen") 
        MenuItem(#MenuDump2File, "Dump to File") 
        MenuItem(#MenuSearchString, "Search for String") 
     EndIf 
      

    EndIf 
  EndIf 
  ProcedureReturn hwnd  
EndProcedure 


;From Froggerprogger 
Procedure GetValueFromHEXString(str.s)  
  If Len(str) = 0  
    ProcedureReturn -1  
  EndIf  
    
  str = UCase(str)  
    
  Protected actCharAsc.l, result.l  
  Protected strLen.l      : strLen = Len(str)  
  Protected parseAct.l    : parseAct = @str + strLen - 1  
  Protected parseEnd.l    : parseEnd = parseStart - 7  
  Protected posFact.l     : posFact = 1  
  Protected radix.l       : radix = 16  
      
  actCharAsc = PeekB(parseAct)&$FF  
    
  While ((actCharAsc >= 48 And actCharAsc <= 57) Or (actCharAsc >= 65 And actCharAsc <= 70)) And parseAct >= parseEnd  
    If actCharAsc >= 65  
      actCharAsc - 7  
    EndIf  
    actCharAsc - 48 ; so '0'-'F' has values 0 - 15  
    result + posFact * actCharAsc  
    parseAct - 1  
    posFact * 16  
    actCharAsc = PeekB(parseAct)&$FF  
  Wend  
    
  ProcedureReturn result  
EndProcedure  

Procedure UpdateProcessList() 
 ClearGadgetItemList(#Processes) 
 ProcessCount=ExamineProcesses() 
 For I=1 To ProcessCount 
  NextProcess() 
  AddGadgetItem(#Processes, -1, GetProcessName()) 
 Next I 
EndProcedure 

Procedure Detaillist(PID) 
 ClearGadgetItemList(#Process_Info) 
 AddGadgetItem(#Process_Info, -1, "PID=" + Str(PID)) 
 Prio=GetProcessPrio(PID) 
 Select Prio 
 Case #NORMAL_PRIORITY_CLASS 
  PR.s= "NORMAL" 
 Case #HIGH_PRIORITY_CLASS 
  PR.s= "High" 
 Case #IDLE_PRIORITY_CLASS 
  PR.s= "Idle" 
 Case #REALTIME_PRIORITY_CLASS 
  PR.s= "REALTIME" 
 EndSelect 
 AddGadgetItem(#Process_Info, -1, "Priority=" + PR.s) 
 AddGadgetItem(#Process_Info, -1, "Location=" + GetProcessFileName(PID)) 
  
 a.s="Memory used=" + Str(GetProcessMem(PID)/1024)+" kb" 
 a.s=a.s + "  (Max. " + Str(GetProcessPeakWorkingSetSize(PID)/1024)+" kb)"    
 AddGadgetItem(#Process_Info, -1, a.s ) 

 a.s="Memory Pagefile used=" + Str(GetProcessPagefileUsage(PID)/1024)+" kb" 
 a.s=a.s + "  (Max. " + Str(GetProcessPeakPagefileUsage(PID)/1024)+" kb)"    
 AddGadgetItem(#Process_Info, -1, a.s ) 

 a.s="Pagefaults=" + Str(GetProcessPageFaultCount(PID)) 
 AddGadgetItem(#Process_Info, -1, a.s ) 

 a.s="QuotaPagedPool=" + Str(GetProcessQuotaPagedPoolUsage(PID)) 
 a.s=a.s + "  (Max. " + Str(GetProcessQuotaPeakPagedPoolUsage(PID)) +")"    
 AddGadgetItem(#Process_Info, -1, a.s ) 

 a.s="QuotaNonPagedPool=" + Str(GetProcessQuotaNonPagedPoolUsage(PID)) 
 a.s=a.s + "  (Max. " + Str(GetProcessQuotaPeakNonPagedPoolUsage(PID)) +")"    
 AddGadgetItem(#Process_Info, -1, a.s ) 

  
 dlls= ExamineProcessDLLS(PID) 
 AddGadgetItem(#Process_Info, -1, "DLL's in use ("+Str(dlls) +")") 
 OpenTreeGadgetNode(#Process_Info) 
  For T=1 To dlls 
   NextProcessDLL() 
   name.s=GetProcessDLLName(PID) 
   AddGadgetItem(#Process_Info, -1, name.s) 
   OpenTreeGadgetNode(#Process_Info) 
    AddGadgetItem(#Process_Info, -1, "Memorybase= $" + Hex(GetProcessDLLBase(PID)) ) 
    AddGadgetItem(#Process_Info, -1, "Location=" + GetProcessDLLFileName(PID)) 
   CloseTreeGadgetNode(#Process_Info) 
  Next T 
 CloseTreeGadgetNode(#Process_Info) 
EndProcedure 



Procedure UpdateDeviceList() 
ClearGadgetItemList(#DeviceDriver) 
DevicesCount=ExamineDrivers() 
For I=1 To DevicesCount 
 NextDriver() 
 AddGadgetItem(#DeviceDriver, -1, GetDriverName()) 
 OpenTreeGadgetNode(#DeviceDriver) 
 AddGadgetItem(#DeviceDriver, -1, "Base= $" + Hex(GetDriverBase())) 
 AddGadgetItem(#DeviceDriver, -1, "Location=" + GetDriverFileName()) 
 CloseTreeGadgetNode(#DeviceDriver) 

Next I 
EndProcedure 

hwnd=Open_MainWindow() 
UpdateProcessList() 
UpdateDeviceList() 
PID=GetProcessPIDfromHWND(hwnd) 
MyP.s=GetProcessName(PID) 
If Trim(MyP)<>"" 
 For I= 0 To CountGadgetItems(#Processes) -1 
  SetGadgetState(#Processes,I) 
  Pname0.s=GetGadgetText(#Processes) 
  If LCase(Pname0.s)=LCase(MyP.s) 
   Break 
  EndIf  
 Next 
EndIf 
SetGadgetState(#MainPanel,1) 
Detaillist(PID) 

Repeat 
  Event = WaitWindowEvent() 
  If Event=#PB_EventMenu 
   Select EventMenuID() 
    Case #MenuReal 
     PID=GetProcessPID(GetGadgetText(#Processes)) 
     SetProcessPrio(PID,#REALTIME_PRIORITY_CLASS) 
     Detaillist(PID) 
    Case #MenuHigh 
     PID=GetProcessPID(GetGadgetText(#Processes)) 
     SetProcessPrio(PID,#HIGH_PRIORITY_CLASS) 
     Detaillist(PID) 
    Case #MenuNormal 
     PID=GetProcessPID(GetGadgetText(#Processes)) 
     SetProcessPrio(PID,#NORMAL_PRIORITY_CLASS) 
     Detaillist(PID) 
    Case #MenuLow 
     PID=GetProcessPID(GetGadgetText(#Processes)) 
     SetProcessPrio(PID,#IDLE_PRIORITY_CLASS) 
     Detaillist(PID) 
    
    Case #MenuDump2Screen 
     Gosub Dump2Screen 
    Case #MenuDump2File 

    Case #MenuSearchString 

   EndSelect 
    
  EndIf 
  If Event = #PB_EventGadget 
    
    GadgetID = EventGadgetID() 
    Select GadgetID 
     Case #MainPanel 
      ;Debug "GadgetID: #MainPanel" 
     Case #Processes 
      pName2.s=GetGadgetText(#Processes) 
      PID=GetProcessPID(pName2.s) 
      DisableGadget(#ButtonDump2Screen,1) 
      Detaillist(PID) 
     Case #Process_Info 
      evt=EventType() 
      If evt=#PB_EventType_LeftClick        
       Entry.s=GetGadgetText(#Process_Info) 
       If Right(LCase(Entry.s),4)=".dll" Or Right(LCase(Entry.s),4)=".exe" 
        z1=GetGadgetState(#Process_Info) 
        z1+1:SetGadgetState(#Process_Info,z1) 
        Modulebase.s=GetGadgetText(#Process_Info) 
        z1+1:SetGadgetState(#Process_Info,z1) 
        FullFilename.s=GetGadgetText(#Process_Info) 
        I=FindString(FullFilename.s,"=",1) 
        If I>0 
         FullFilename=Right(FullFilename,Len(FullFilename)-I) 
        EndIf 
        I=FindString(Modulebase.s,"$",1) 
        If I>0 
         Modulebase=Trim(Right(Modulebase,Len(Modulebase)-I)) 
        EndIf 
        pName2.s=GetGadgetText(#Processes) 
        gPID=GetProcessPID(pName2.s) 
        z1-2:SetGadgetState(#Process_Info,z1) 
        DisableGadget(#ButtonDump2Screen,0) 
       Else 
        DisableGadget(#ButtonDump2Screen,1) 
       EndIf 
      EndIf 
      If evt=#PB_EventType_RightClick        
       Entry.s=GetGadgetText(#Process_Info) 
       If Right(LCase(Entry.s),4)=".dll" Or Right(LCase(Entry.s),4)=".exe" 
        z1=GetGadgetState(#Process_Info) 
        z1+1:SetGadgetState(#Process_Info,z1) 
        Modulebase.s=GetGadgetText(#Process_Info) 
        z1+1:SetGadgetState(#Process_Info,z1) 
        FullFilename.s=GetGadgetText(#Process_Info) 
        I=FindString(FullFilename.s,"=",1) 
        If I>0 
         FullFilename=Right(FullFilename,Len(FullFilename)-I) 
        EndIf 
        I=FindString(Modulebase.s,"$",1) 
        If I>0 
         Modulebase=Trim(Right(Modulebase,Len(Modulebase)-I)) 
        EndIf 
        pName2.s=GetGadgetText(#Processes) 
        gPID=GetProcessPID(pName2.s) 
;        Debug entry 
;        Debug ModuleBase 
;        Debug Fullfilename 
        z1-2:SetGadgetState(#Process_Info,z1) 
        GetCursorPos_(L1.Point) 
        DisplayPopupMenu(#MenuWatch, WindowID() ,L1\x, L1\y) 
       EndIf 
      EndIf 
      
     Case #DeviceDriver 
      ;Debug "GadgetID: #DeviceDriver" 
     Case #Process_Info 
      ;Debug "GadgetID: #Process_Info" 
     Case #ButtonDump2Screen 
      Gosub Dump2Screen 
     Case #KillButton 
      PID=GetProcessPID(GetGadgetText(#Processes)) 
      KillPID(PID,0) 
      UpdateProcessList() 
      ClearGadgetItemList(#Process_Info) 
    
     Case #KillButtonall 
      KillAllProcess(GetGadgetText(#Processes),0) 
      DisableGadget(#ButtonDump2Screen,1) 
      UpdateProcessList() 
      ClearGadgetItemList(#Process_Info) 
      
     Case #ButtonRemovePagefaults 
      PID=GetProcessPID(GetGadgetText(#Processes)) 
      result=RemovePagefaults(PID); 
      Debug result 
      DisableGadget(#ButtonDump2Screen,1) 
      Detaillist(PID) 
      
     Case #Button_Refresh 
      DisableGadget(#ButtonDump2Screen,1) 
      UpdateProcessList() 
      ClearGadgetItemList(#Process_Info) 
     Case #ButtonSetPrio 
      GetCursorPos_(L1.Point) 
      DisplayPopupMenu(#MenuPriority, WindowID() ,L1\x, L1\y) 
        
    EndSelect 
  EndIf 
Until Event = #PB_EventCloseWindow 
End 

Dump2Screen: 
;If GetProcessRights(gpid) 

     Offset=GetValueFromHEXString(Modulebase.s) 
     ;Debug Offset 
     Nop.s="$"+RSet(Hex(0), 4, "0") +"    " 
     For I=0 To 511 
      wert.b= pPeekB(gPID,Offset+I) 
     ; Debug wert 
     ; Debug Hex(wert) 
      Nop.s=Nop.s + Right("00"+Hex(wert.b),2) 
      If wert.b>30 
       Nop2.s=Nop2.s+Chr(wert.b) 
      Else 
       Nop2.s=Nop2.s+" " 
      EndIf 
      T=T+1 
      If T=16 
       Nop.s=Nop.s+Space(4)+Nop2.s+Chr(13)+Chr(10) +"$"+RSet(Hex(I), 4, "0") + "    " 
       T=0 
       Nop2.s="" 
      EndIf 
     Next I  
     MessageRequester("Info for "+FullFilename.s+" at $"+Modulebase.s,Nop.s,0) 
;Else 
; MessageRequester("Info for "+Fullfilename.s+" at $"+Modulebase.s,"Sorry, no rights to acess this process!",0) 
;EndIf 
Return
Antworten