Quizás esto te de pistas:
Código Delphi
[-]
procedure ListWinInfoFromPId(PId: DWORD; Strings: TStrings);
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));
Strings.Clear;
repeat
Strings.Add('hWnd: ' + IntToHex(WinParam.Handle, 8));
GetWindowText(WinParam.Handle, @Buffer, 255);
Strings.Add('Caption: ' + Buffer);
GetClassName(WinParam.Handle, @Buffer, 255);
Strings.Add('Clase: ' + Buffer);
Strings.Add('-----------------------------------------------');
WinParam.Handle:= Windows.GetParent(WinParam.Handle);
until WinParam.Handle = 0;
end;
Ejemplo de uso:
Código Delphi
[-]
ListWinInfoFromPId(4800, Memo1.Lines);
Saludos.