unit PobieranieUchwytuOkna;

interface

uses Windows;

function GetMainWindowHandle(ProcessId :Cardinal) :THandle;

implementation

type
  StrukturaPomocnicza=record
  identyfikatorSzukanegoProcesu :Cardinal;
  uchwytSzukanegoOkna :THandle;
  end;

function ZbadajOkno(uchwytBadanegoOkna :THandle;lParam :Integer) :Boolean; StdCall; Export;
var
  identyfikatorBadanegoProcesu :Cardinal; //[in]
  wskaznik :^StrukturaPomocnicza;
  identyfikatorSzukanegoProcesu :Cardinal;
begin
wskaznik:=Pointer(lParam);
identyfikatorSzukanegoProcesu:=wskaznik^.identyfikatorSzukanegoProcesu;
Result:=True;
if not uchwytBadanegoOkna=0 then Exit;
GetWindowThreadProcessId(uchwytBadanegoOkna,identyfikatorBadanegoProcesu);
if identyfikatorSzukanegoProcesu=identyfikatorBadanegoProcesu then
  begin
  wskaznik^.uchwytSzukanegoOkna:=uchwytBadanegoOkna;
  Result:=False;
  end;
end;

function GetMainWindowHandle(ProcessId :Cardinal) :THandle;
var
  daneSzukanegoOkna :StrukturaPomocnicza;
  wskaznik :^StrukturaPomocnicza;
begin
daneSzukanegoOkna.identyfikatorSzukanegoProcesu:=ProcessId;
daneSzukanegoOkna.uchwytSzukanegoOkna:=0;
wskaznik:=@daneSzukanegoOkna;
EnumWindows(@ZbadajOkno,Integer(wskaznik));
Result:=daneSzukanegoOkna.uchwytSzukanegoOkna;
end;

end.
