![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глобальный хук на мышку
Aric © (2002-10-02 21:14:00)Приветсвую, помогите кто чем может. Нужно перехватывать нажатие средней кнопки мыши в любом месте (не только на моей форме) и повесить на него нажатие на опред. кнопку на форме.
Делаю так
unit ms_;
interface
implementation
uses Windows, Controls, Messages, ShDocVw, un_;
var
HMouseHook:THandle;
function MouseProc(
nCode: Integer; // hook code
WP: wParam; // message identifier
LP: lParam // mouse coordinates
):Integer;stdcall;
var MHS:TMOUSEHOOKSTRUCT;
WC:TWinControl;
P:TPoint;
begin
Result:=CallNextHookEx(HMouseHook,nCode,WP,LP);
if nCode=HC_ACTION then
begin
MHS:=PMOUSEHOOKSTRUCT(LP)^;
if ((WP=WM_MBUTTONDOWN) or (WP=WM_MBUTTONUP)) then
begin
SendMessage(Form1.bitbtn1.Handle, BM_CLICK, 0, 0);
end;
end;
end;
initialization
HMouseHook:=SetWindowsHookEx(WH_MOUSE,@MouseProc,HInstance,0);
finalization
CloseHandle(HMouseHook);
end.
Вроде б при вызове SetWindowsHookEx(WH_MOUSE,@MouseProc,HInstance,0) - последний 0 означает, что перехватываются сообщения от всех потоков, однако при клике на моей форме все работает, вне вылетает с красным крестом.
Заранее спасибо.
Song (2002-10-02 23:17:00) [1]Нужна dll.
rhf (2002-10-02 21:19:00) [2]вы пользуетесь локальным хуком..... а нужен глобальный, библиотечку писать надо.
Прочитайте статью "Hooks аспекты реализации"