Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2024, 16:17   #1
t232006
Пользователь
 
Регистрация: 30.03.2024
Сообщений: 15
По умолчанию Перехватить событие получения фокуса окном

Привет всем! Возникла задача получить дескриптор активного окна в рабочее окно приложения. Для этого соорудил простейшую dll
Код:
library WinFocus;

{$R *.res}
uses
  windows,
  Messages;

Type
TWinHandle = class
  private
  Fwnd: Hwnd;
  protected
  property hWnd: HWnd read Fwnd write Fwnd;
end;

var SysHook: hHook = 0;
    WindowHandle: TWinHandle;
    MyOwnHandle: HWnd;

function GetWinHandle:Hwnd export; stdcall;
begin
  result:=WindowHandle.hWnd;
end;

function CBTProc(Code: Integer; wParam: WParam; LParam: LParam):longint; export; stdcall;
var temp:Hwnd;
begin
   if code=HC_ACTION then
   begin
     temp:=getforegroundwindow;
     if temp<>MyOwnHandle then
       WindowHandle.hWnd:=temp;       //<------
        //TMsg(Pointer(lParam)^).hwnd;    
   end;
   result:=CallNexthookEx(SysHook, code, Wparam, LParam);
end;

procedure RunHook(hdl: HWnd) export; stdcall;
begin
    MyOwnHandle:=hdl;
    WindowHandle:=TWinHandle.Create;
    SysHook := SetWindowsHookEx(WH_GETMESSAGE, @CBTProc, hInstance, 0);
end;

procedure StopHook export; stdcall;
begin
  WindowHandle.Destroy;
  UnhookWindowsHookEx(SysHook);
  SysHook:=0;
end;

exports StopHook, RunHook, GetWinHandle;

end.
(я хотел сделать это через WH_CBT, но сообщение HCBT_SETFOCUS у меня в библиотеке не срабатывает).
Суть такова: когда происходит какая-то активность в каком-то стороннем окне, ловится его дескриптор. Пришлось завести класс, т.к. глобальная переменная внутри библиотеки постоянно обнуляется. Но с классом другая беда - эта конструкция срабатывает только тогда, когда строка, помеченная стрелкой, закомментирована. А в таком виде ловушка не срабатывает. Кто-нибудь в курсе, почему?
t232006 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехватить событие нажатия кнопки в браузере VB Sparkman Помощь студентам 3 19.07.2012 16:58
Как перехватить событие сортировки столбцов в cxGrid'е? Istrafiloff БД в Delphi 1 12.07.2011 07:15
Как перехватить событие формы (Движение) ImmortalAlexSan Общие вопросы Delphi 12 02.01.2011 11:36
перехватить событие Windows 7 HotGod Общие вопросы Delphi 1 10.06.2010 15:33
Как перехватить событие родительского компонента? postal2 Компоненты Delphi 3 28.08.2009 12:31