ich starte eine Excel Datei. von der habe ich die ProcessID, nun will ich das Mainwindow rausfinden, aber welches ist es ????
Dummerweise gibt es mehrere HAndles zu dieser ProcessID ....
folgender Code liefert das Ergebnis:
Fensterhandle : 3152256 Parent: 0 Owner : 0
Fensterhandle : 2429158 Parent: 0 Owner : 0
Fensterhandle : 2693338 Parent: 0 Owner : 0
Fensterhandle : 2431246 Parent: 65556 Owner : 0
Fensterhandle : 3021012 Parent: 0 Owner : 0
Fensterhandle : 2824432 Parent: 2429158 Owner : 2429158
Fensterhandle : 2103562 Parent: 2824432 Owner : 2824432
Delphi-Quellcode:
type
TEnumWinData = record
WinHandle: HWND;
WinClassName: string;
WinCaption: WideString;
CaptionCount: word;
ParentHandle: HWND;
ProcessID: DWORD;
end;
PEnumWinData = ^TEnumWinData;
var sDebug : STring;
function MyEnumWindowProc(AHandle: THandle; EWD: PEnumWinData): boolean; stdcall;
var
ProcessID: THandle;
hWnd_Owner : THandle;
hWnd_Parent : THAndle;
begin
ProcessID := 0;
GetWindowThreadProcessID(AHandle, ProcessID);
if (ProcessID = EWD.ProcessID) and
IsWindow(AHAndle) then begin
EWD.WinHandle := AHandle;
hwnd_Parent := GetParent(AHandle);
hWnd_Owner := GetWindow(AHandle, GW_OWNER);
sDebug := sDebug
+ 'Fensterhandle : ' + inttostr(AHandle) +
' Parent: ' + inttostr(GetParent(AHandle)) +
' Owner : ' + inttostr(hwnd_Owner) + #13#10;
result := true;
end else
result := true;
end;
function GetWindowHandleByProcessID(ProcessID : DWORD) : THandle;
var EWD : pENumWinData;
begin
sDebug := '';
result := 0;
new(EWD);
EWD.WinHandle := 0;
EWD.ProcessID := ProcessID;
EnumWindows(@MyEnumWindowProc, Integer(EWD));
result := EWD.WinHandle;
sendDebug(sDebug);
dispose(EWD);
end; // getWindowHandleByProcessID
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.