Как получить хэндл какого-либо определенного окна и сделать его активным?
Своим опытом делится Олег Кулабухов: В случае, если вам известен точный заголовок окна, лучше всего использовать FindWindow(). Но, к сожалению, часто приходится искать окно, зная только часть заголовка. Например 'Microsoft Word - Some Unknown Doc'. В данном случае можно воспользоваться EnumWindows(), перебрать все окна и просматривая заголовки как строки, сравнивать их со строкой поиска.
Пример:
type PFindWindowStruct = ^TFindWindowStruct; TFindWindowStruct = record Caption : string; ClassName : string; WindowHandle : THandle; end;
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;
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;