Para encontrar la ventana de un proceso debes enumerar todas las ventanas top-level hasta encontrar una del proceso requerido. Luego debes navegar hasta encontrar la ventana principal.
Código Delphi
[-]
function GetWindowFromPId(PId: DWORD; var WText, WClass: String): THandle;
type
TWinParam = record
Handle: THandle;
PId: DWORD;
end;
PWinParam = ^TWinParam;
var
WinParam: TWinParam;
Buffer: array [1..255] of char;
function EnumWindowsProc(Handle: Thandle; lParam: LPARAM): BOOL; stdcall;
var
PId: DWORD;
begin
Result:= true;
PId:= 0;
GetWindowThreadProcessId(Handle, PId);
if PWinParam(lParam).PId = PId then
begin
PWinParam(lParam).Handle:= Handle;
Result:= false;
end;
end;
begin
WinParam.PId:= PId;
EnumWindows(@EnumWindowsProc, LPARAM(@WinParam));
repeat
Result:= WinParam.Handle;
WinParam.Handle:= Windows.GetParent(Result);
until WinParam.Handle = 0;
GetWindowText(Result, @Buffer, 255);
WText:= Buffer;
GetClassName(Result, @Buffer, 255);
WClass:= Buffer;
end;
Forma de uso:
Código Delphi
[-]
var
Caption: String;
Clase: String;
HWin: THandle;
begin
HWin:= GetWindowFromPId(PID, Caption, Clase);
end;
Más información
aquí
Saludos.