Seite 1 von 1

ID und alle geöffneten Fenster eines Prozesses ermitteln

Verfasst: 11.11.2012 22:29
von Sunny
Gibt es eine Möglichkeit, mit Hilfe von PB und der WinAPI anhand des Prozessnamens, die PID zu ermitteln und dazu alle geöffneten Fenster dieses Prozesses?

Edit:
OK, ich hab jetzt durch viel hin und her probieren eine Lösung für mein Problem gefunden. Falls jemanden interessiert wie ich das gemacht hab, hier mal ein etwas vereinfachtes Code-Schnipsel.

Code: Alles auswählen

Structure wnd
  hwnd.i
  pid.i
EndStructure

Global NewList Windows.wnd()

Procedure GetWindowsFromProcess(hwnd, param)
  Entry.MODULEENTRY32\dwSize = SizeOf(MODULEENTRY32)
  
  GetWindowThreadProcessId_(hwnd,@PID)
  If Module32First_(CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE,PID),Entry) And (#WS_EX_TOOLWINDOW And GetWindowLongPtr_(hwnd,#GWL_STYLE) & #WS_VISIBLE)
    ProcessPath$ = PeekS(@Entry\szExePath)
    ProcessName$ = StringField(ProcessPath$, CountString(ProcessPath$, "\") + 1, "\")
    
    If ProcessName$ = "notepad.exe"
      AddElement(Windows())
      Windows()\hwnd = hwnd
      Windows()\pid = PID
    EndIf
    
  EndIf
  
  ProcedureReturn #True
EndProcedure

EnumWindows_(@GetWindowsFromProcess(), 0)

ForEach Windows()
  Debug Windows()\hwnd
  Debug Windows()\pid
  Debug "-----"
Next