Получить дескриптор окна другого приложения и сделать его активным

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Использование фуекции Windows API FindWindow() — простейший способ нахождение окна, при условии, что известен его заголовок или имя оконного класса. Если Вам известна только часть заголовка окна (например ‘Netscape — ‘ ‘какой-то неизвестный URL’), Ва м нужно использовать функцию EnumWindows() для получения всех окон, затем вызывать функцию GetWindowsText() и GetClassName для поиска нужного окна. Следующий пример находит первое окно, содержащее совпадающую часть заголовка окна и полностью совпадающее название оконного класса (если он задан) и делает это окно активным.

type

PFindWindowStruct = ^TFindWindowStruct;

TFindWindowStruct = record

Caption : string;

ClassName : string;

WindowHandle : THandle;

end;

function EnumWindowsProc(hWindow : hWnd; lParam : LongInt) : Bool {$IFDEF Win32} stdcall; {$ELSE} ; export; {$ENDIF}

var

lpBuffer: PChar;

WindowCaptionFound: bool;

ClassNameFound: bool;

begin

GetMem(lpBuffer, 255);

Result := True;

WindowCaptionFound := False;

ClassNameFound := False;

try

if GetWindowText(hWindow, lpBuffer, 255) > 0 then

if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer)) > 0 then

WindowCaptionFound := true;

if PFindWindowStruct(lParam).ClassName = » then

ClassNameFound := True

else

if GetClassName(hWindow, lpBuffer, 255) > 0 then

if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer)) > 0 then

ClassNameFound := True;

if (WindowCaptionFound and ClassNameFound) then

begin

PFindWindowStruct(lParam).WindowHandle := hWindow;

Result := False;

end;

finally

FreeMem(lpBuffer, sizeof(lpBuffer^));

end;

end;

function FindAWindow(Caption : string; ClassName : string) : THandle;

var

WindowInfo : TFindWindowStruct;

begin

with WindowInfo do begin

Caption := Caption;

ClassName := ClassName;

WindowHandle := 0;

EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo));

FindAWindow := WindowHandle;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

TheWindowHandle : THandle;

begin

TheWindowHandle := FindAWindow(‘Netscape — ‘, »);

if TheWindowHandle = 0 then

ShowMessage(‘Window Not Found!’)

else

BringWindowToTop(TheWindowHandle);

end;

{/codecitation}

Добавить комментарий