|
|
|
|
Как
получить дескриптор окна другого приложения и сделать его активным?
Использование фуекции 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;
Источник:
Дельфи. Вокруг да
около.
|
Copyright ©
"Мастера DELPHI" E-mail:
delphi@mastak.com
http://www.delphimaster.ru |
Источник получения информации: http://www.delphimaster.ru
|
|