|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Отловить событие получения фокуса стороннего окна
Здравствуйте! Есть задача передать сообщение чужому окну. Для этого соорудил ловушку.
Код:
library WinFocus; {$R *.res} uses windows, Messages; var SysHook: hHook = 0; WindowHandle: HWnd; function GetWinHandle:Hwnd export; stdcall; begin result:=WindowHandle; end; function CBTProc(Code: Integer; wParam: WParam; LParam: LParam):integer; begin WindowHandle:=GetForegroundWindow; result:=CallNexthookEx(SysHook, code, Wparam, LParam); end; procedure RunHook(wnd:Hwnd) export; stdcall; begin SysHook := SetWindowsHookEx(HCBT_SETFOCUS, @CBTProc, hInstance, 0); end; procedure StopHook export; stdcall; begin UnhookWindowsHookEx(SysHook); SysHook:=0; end; exports StopHook, RunHook, GetWinHandle; end. |
#2
|
|||
|
|||
Что-то мне кажется, что ты неправильно хук ставишь. По описанию фунуции, тебе надо ставить хук на сообщения окна (WH_CALLWNDPROC) и отлавливать соответсвнно WM_SETFOCUS уже внутри CBTProc.
|
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
T232006 (14.04.2024)
|
#3
|
|||
|
|||
да, верно. я уже немного почитал и исправил у себя. А всё равно не получается. Я решил ловить окна через таймер (хотел этого избежать, но самый простой в реализации и ловушки не нужны).
|
#4
|
|||
|
|||
А, кстати, какая винда. Там в 11ой опять что-то накрутили...
|
#5
|
|||
|
|||
Винда десятка
|