![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Винда десятка
|