Seite 1 von 2

ProcessID eines anderen Programms ermitteln?

Verfasst: 21.09.2005 17:30
von IcedCoffee
MOin

ich habe mal eine frage wie kann ich die ProcessID eines anderen Programms ermitteln?
und wie kann ich ALLE programme ermitteln die gerade geöffnet sind also auch alle processe und dienste die gerade lauffen

Verfasst: 21.09.2005 17:37
von iF
Hier helfen Dir die APIS: ProcessSnapshot, ProcessFirst & ProcessNext.

Salve.

Verfasst: 21.09.2005 17:42
von ts-soft
Dafür kannste die PBOSL_Process Lib anwenden, Link findeste in meiner Signatur

Verfasst: 21.09.2005 18:05
von IcedCoffee
@ts-soft: und wie kann ich mir die da runterladen?
edit: schon gefunden THX

Verfasst: 21.09.2005 18:07
von ts-soft
IcedCoffee hat geschrieben:@ts-soft: und wie kann ich mir die da runterladen?
Libraries: Windows - Binaries anklicken. Examples ist auch sehr Empfehlenswert!

Verfasst: 21.09.2005 18:16
von IcedCoffee
IcedCoffee hat geschrieben:edit: schon gefunden THX
aber trotzdem THX

Verfasst: 21.09.2005 18:54
von IcedCoffee
also irgendwie will das nicht so wie es soll weil wenn ich den code "debug ExamineProcesses()" ausfüren will kommt immer ein error mit der nachicht < no message > [ich benutze jaPBe]

warum? und wie gehts weg?

Verfasst: 21.09.2005 19:17
von PAMKKKKK
Da wo du die PBOSL bekommst da gibt es auch ein download Examples (Beispiele).
Hole dir das auch und sch au dir die Beispiele an!
Die PBOSL Dokumentation ist nicht so....

Kuck mal hier so:

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, 500, 400,  #PB_Window_SystemMenu | #PB_Window_TitleBar , "PB System Info")
  If hwnd
    If CreateGadgetList(WindowID())
      PanelGadget(#MainPanel, 0, 0, 500, 400)
      AddGadgetItem(#MainPanel, -1, "General")
      AddGadgetItem(#MainPanel, -1, "Processes")
      ListViewGadget(#Processes, 8, 8, 110, 320)
      TreeGadget(#Process_Info, 118, 8, 360, 320)
      ButtonGadget(#Button_Refresh, 0, 338, 80, 20, "Refresh List")
      ButtonGadget(#KillButton, 80, 338, 80, 20, "Kill Process")
      ButtonGadget(#KillButtonAll, 160, 338, 80, 20, "Kill All")
      ButtonGadget(#ButtonSetPrio, 240, 338, 80, 20, "Set new Priority")
      ButtonGadget(#ButtonRemovePagefaults, 320, 338, 80, 20, "Del Pagefaults")
      ButtonGadget(#ButtonDump2Screen,400, 338, 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 #KillButton
      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

Verfasst: 21.09.2005 19:26
von ts-soft
>> Debug ExamineProcesses()
Das sollte so funktionieren. Teste mal mit der normalen IDE obs damit geht.

Verfasst: 21.09.2005 19:28
von IcedCoffee
da bekomme ich den selben error < no message >
edit: ne beim standart pb editor bekomme ich die nachicht ""
als MessageRequester("PureBasic","",#MB_ICONHAND)