ProcessID eines anderen Programms ermitteln?

Anfängerfragen zum Programmieren mit PureBasic.
IcedCoffee
Beiträge: 115
Registriert: 09.07.2005 12:11
Wohnort: Fürstenwald [Internat], Berlin[wen keine lust auf Internat], Wildau[Einfamilienhaus]
Kontaktdaten:

ProcessID eines anderen Programms ermitteln?

Beitrag 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
Benutzeravatar
iF
Beiträge: 84
Registriert: 17.07.2005 20:20
Wohnort: Berlin
Kontaktdaten:

Beitrag von iF »

Hier helfen Dir die APIS: ProcessSnapshot, ProcessFirst & ProcessNext.

Salve.
Achtung: kein PB'ler - habt bitte erbarmen. :mrgreen: /:->
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Dafür kannste die PBOSL_Process Lib anwenden, Link findeste in meiner Signatur
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
IcedCoffee
Beiträge: 115
Registriert: 09.07.2005 12:11
Wohnort: Fürstenwald [Internat], Berlin[wen keine lust auf Internat], Wildau[Einfamilienhaus]
Kontaktdaten:

Beitrag von IcedCoffee »

@ts-soft: und wie kann ich mir die da runterladen?
edit: schon gefunden THX
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
IcedCoffee
Beiträge: 115
Registriert: 09.07.2005 12:11
Wohnort: Fürstenwald [Internat], Berlin[wen keine lust auf Internat], Wildau[Einfamilienhaus]
Kontaktdaten:

Beitrag von IcedCoffee »

IcedCoffee hat geschrieben:edit: schon gefunden THX
aber trotzdem THX
IcedCoffee
Beiträge: 115
Registriert: 09.07.2005 12:11
Wohnort: Fürstenwald [Internat], Berlin[wen keine lust auf Internat], Wildau[Einfamilienhaus]
Kontaktdaten:

Beitrag 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?
Benutzeravatar
PAMKKKKK
Beiträge: 321
Registriert: 21.04.2005 22:08
Wohnort: Braunschweig
Kontaktdaten:

Beitrag 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
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Debug ExamineProcesses()
Das sollte so funktionieren. Teste mal mit der normalen IDE obs damit geht.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
IcedCoffee
Beiträge: 115
Registriert: 09.07.2005 12:11
Wohnort: Fürstenwald [Internat], Berlin[wen keine lust auf Internat], Wildau[Einfamilienhaus]
Kontaktdaten:

Beitrag 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)
Antworten