Y mejor de esta otra forma:
Código Delphi
[-]
procedure ListWinInfoFromPId(PId: DWORD; Strings: TStrings);
type
TWinParam = record
PId: DWORD;
S: TStrings;
end;
PWinParam = ^TWinParam;
var
WinParam: TWinParam;
function EnumWindowsProc(Handle: Thandle; lParam: LPARAM): BOOL; stdcall;
var
PId: DWORD;
Buffer: array [1..255] of char;
begin
Result:= true;
PId:= 0;
GetWindowThreadProcessId(Handle, PId);
if PWinParam(lParam).PId = PId then
begin
PWinParam(lParam).S.Add('hWnd: ' + IntToHex(Handle, 8)+'h');
GetWindowText(Handle, @Buffer, 255);
PWinParam(lParam).S.Add('Caption: ' + Buffer);
GetClassName(Handle, @Buffer, 255);
PWinParam(lParam).S.Add('Clase: ' + Buffer);
PWinParam(lParam).S.Add('-----------------------------------------------');
Result:= true;
end;
end;
begin
Strings.Clear;
WinParam.PId:= PId;
WinParam.S:= Strings;
EnumWindows(@EnumWindowsProc, LPARAM(@WinParam));
end;
Con el mismo ejemplo de uso:
Código Delphi
[-]ListWinInfoFromPId(4800, Memo1.Lines);
Saludos.