Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 1 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



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

Использование фуекции 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;
 
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS