Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.03;
Скачать: CL | DM;

Вниз

Как определить что был сделан click из глобальной ловушки.   Найти похожие ветки 

 
AFROLOV   (2002-04-01 17:06) [0]

Subj.
Заранее спасибо.


 
AFROLOV   (2002-04-01 17:08) [1]

Извените, забыл сказать, что на левую клавишу мыши.


 
Виктор Щербаков ©   (2002-04-01 17:19) [2]

Я конечно не пробовал, но идея есть:
Должны придти 2 сообщения WM_LBUTTONDOWN и WM_LBUTTONUP.
Причем указатель мыши должен находиться над одним и тем же элементом управления. Это можно выяснить с помощью WindowFromPoint. Но работать будет только для оконных элементов управления. Т.е. для SpeedButton, например, не будет правильно работать.


 
Виктор Щербаков ©   (2002-04-01 17:22) [3]

Вышесказанное относится к хуку на мышь. Если речь о WH_CALLWNDPROC, то решение тривиально.


 
Fellomena   (2002-04-02 10:34) [4]


library hook_dll;

uses Windows, Messages;

var
SysHook : HHook = 0;
Wnd : Hwnd = 0;

{ данная ф-ия вызывается системой каждый раз, когда возникает какое-то событие в
dialog box-е, message box-е, menu, или scroll bar-е}
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin
{ Передаём сообщение дальше по цепочке hook-ов. }
CallNextHookEx(SysHook, Code, wParam, lParam);
{ флаг code определяет тип произошедшего события. }
if code = HC_ACTION then
begin
{ В wnd кладу дескриптор того окна, которое сгенерировало сообщение.}
Wnd:=TMsg(Pointer(lParam)^).hwnd;
{ Проверяю, нажата ли правая кнопка мыши}
if TMsg(Pointer(lParam)^).message = WM_RBUTTONDOWN then
begin
{ Раскрываю окно на всю клиентскую область.}
ShowWindow(wnd, SW_MAXIMIZE);
{ Вывожу сообщение.}
MessageBox(0, "HOOK is working !", "Message", 0);
end;
end;
end;

{ Процедура установки HOOK-а}

procedure hook(switch : Boolean) export; stdcall;
begin
if switch=true then
begin
{ Устанавливаю HOOK, если он не установлен (switch=true). }
SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0);
{ тут: WH_GETMESSAGE - тип hook-а ; @SysMsgProc - адрес процедуры обработки ;
HInstance - указывает на DLL, содержащую процедуру обработки hook-а; последний
параметр указывает на thread, с которым ассоциирована процедура обработки hook-а;
}
MessageBox(0, "HOOK установлен !", "Сообщение из DLL", 0);
end
else
begin
{ Снимаю HOOK, если он установлен (switch=false). }
UnhookWindowsHookEx(SysHook);
MessageBox(0, "HOOK снят !", "Сообщение из DLL", 0);
SysHook := 0;
end;
end;

exports hook;

begin
end.


Для не Win2k в CallNextHookEx придётся (для корректности) передавать дескриптор хука, который должен быть сохранён где-либо, например, отображён в своп



Страницы: 1 вся ветка

Текущий архив: 2002.06.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
1-7071
Starkom
2002-05-21 19:59
2002.06.03
Насчет TStringGrid и скролла


1-7046
phantom2040
2002-05-21 11:04
2002.06.03
Загрузка в Memo текстового файла


14-7231
Санёк
2002-04-21 20:33
2002.06.03
Не могу поставить C++ Builder 6 на Win ME. Подскажите, что такое?


1-7059
Abu
2002-05-21 19:19
2002.06.03
Соединение программ-2


1-6987
Kopachev
2002-05-22 21:51
2002.06.03
В чем я не прав