![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Hooks [D5, Win95/98, WinME, WinXP]
MystiX © (2002-04-12 21:38:00)Объясните пожалуйста как поставить hook на нажатие средней кнопки на мыши в любом месте экрана
т.е. вне фотмы.
----------------------------------------------------------------
Заранее спасибо!
Fantasist (2002-04-13 10:41:00) [1]Понял. Пример есть:
library hook;
uses
SysUtils,
Classes,
Windows,
Messages;
var
HookHandle: HHOOK = 0;
wHandle:HWND;
//функция обрабатывающая сообщения (мышиные)
function HookProc(Code:integer; W:WParam; l : LParam): LongInt; stdcall;
begin
///////
//здесь обрабатываем.
//не забываем, что на самом деле надо проанализировать Code,
//и делать или не делать на основании его.
/////
...
Result:=CallNextHookEx(HookHandle,Code,W,L);;
{здесь так же помним, что скорее всего следующий хук этой функцией вызван не будет, так как у нас хук глобальный, а мы не позаботились о разделении HookHanlde между процессами. Но можно на это наплевать. :) }
end;
function SetHook(Hdl:HWND;HookType:Integer;ThreadID:DWord;I:Integer): LongBool; stdcall;
begin
//последний параметр 0 - хук глобальный.
HookHandle := SetWindowsHookEx(HookType, HookProc, HInstance,0);
wHandle:=Hdl; //это просто так - я его для MessageBox"ов использовал
Result := HookHandle <> 0 ;
end;
function RemoveHook: LongBool; stdcall;
begin
Result := UnHookWindowsHookEx(HookHandle)
end;
exports
SetHook, RemoveHook, HookProc;
begin
end.
Тут есть статья на этом сайте - глянь, там правда как-то странно организованно разделение данных dll.
MystiX (2002-04-13 09:58:00) [2]Проблема в том, что я не знаю как это сделать.
Можетпример где есть?
Fantasist (2002-04-13 09:29:00) [3]А в чем проблема?
Пишишь dll, в ней ставишь свой обработчик(хук) на систему.