mit nachfolgendem Code starte ich Notepad.exe und ermittel dessen
Fensterhandle. Klappt auch soweit ganz gut.
Wenn ich allerdings anstelle von Notepad den Explorer starten will
(RunProgram("explorer.exe", ...)), dann bekomme ich kein Fensterhandle.
Das liegt anscheinend daran, dass beim Starten des Explorers keine
gültige Prozess-ID zurückgeliefert wird, sondern lediglich ein neues
Fenster geöffnet wird. (wer den ProcessExplorer von Sysinternals
verwendet, kann das ganz gut beobachten).
Meine Frage: Wie bekomme ich das Fensterhandle eines von mir
gestarteten Explorers heraus? FindWindow_(Fenstername...) möchte ich
nicht verwenden.
Code: Alles auswählen
EnableExplicit
Define Prog_ID.l
Define Prog_PID.l
Define Prog_hWnd.l
Procedure.l ProcID2hWnd(ProcID.l)
Protected hwnd.l
Protected ProcTaskID.l
hwnd = FindWindow_(#Null, #Null)
While hwnd <> 0
GetWindowThreadProcessId_(hwnd, @ProcTaskID)
If ProcTaskID = ProcID
ProcedureReturn hwnd
EndIf
hwnd = GetWindow_(hwnd, #GW_HWNDNEXT)
Wend
EndProcedure
Prog_ID = RunProgram("notepad.exe", "", "", #PB_Program_Open)
If Prog_ID
Prog_PID = ProgramID(Prog_ID)
Debug "Prog_ID: " + Str(Prog_ID)
Debug "Prog_PID: " + Str(Prog_PID)
Repeat
Prog_hWnd = ProcID2hWnd(Prog_PID)
If Prog_hWnd : Break : EndIf
ForEver
Debug "Prog_hWnd: " + Str(Prog_hWnd)
EndIf