interface
uses
Windows,Messages;
var
HookHandle: HHOOK;//鉤子的句柄值。
function MsgHookProc(Code: Integer; WParam: Longint;Msg:Longint): LRESULT;stdcall;
//鼠標鉤子的回調函數,即是用它來處理得到消息後要干什麼。。
//nCode參數是Hook的標志,一般只關心小於0時。
//WParam參數表示鼠標消息的類型
//LParam參數是一個指向 TMOUSEHOOKSTRUCT 結構的指針。結構包含了鼠標消息的狀態,我只用了hwnd一個
//即鼠標消息要傳遞給的窗口句柄。
//返回值如果不是0的話Windows就把這個消息丟掉,其它的程序就不會再收到這個消息了。
function EnableMsgHook:Boolean; stdcall; export;
function DisableMsgHook:Boolean; stdcall; export;//兩個函數都是Boolean類型,成功都是返回True
implementation
function MsgHookProc(Code: Integer; WParam: Longint;Msg:Longint): LRESULT;stdcall;
begin
if (Code = HC_ACTION) then
if PMsg(Msg)^.Message = WM_MOUSEWHEEL then //鼠標滾動
begin
if HIWord(PMsg(Msg)^.wParam)=120 then // 上滾
begin
//做你想做的。
ShowWindow (pmsg(msg)^.hwnd,SW_MAXIMIZE );
end;
if HIWord(PMsg(Msg)^.wParam)<>120 then // 下滾
begin
//做你想做的。
ShowWindow (pmsg(msg)^.hwnd,SW_RESTORE );
end;
PMsg(Msg)^.Message := 0;
end;
Result :=CallNextHookEx(HookHandle, Code, WParam, Longint(@Msg));
end;
function EnableMsgHook:Boolean; stdcall; export;
begin
if HookHandle = 0 then //為了安全,必須判斷一下再設置鉤子。
Begin
// 第三個參數的Hinstance 在Delphi中有定義,用就可以了。第四個參數必須為0
HookHandle := SetWindowsHookEx(WH_GETMESSAGE,@MsgHookProc,Hinstance,0);
Result := True;
end
else
Result := False;
end;
function DisableMsgHook:Boolean; stdcall; export;
begin
if HookHandle <> 0 then //如果有鉤子就卸掉他。
begin
UnHookWindowsHookEx(HookHandle);
HookHandle := 0;
Result := True;
end
else
Result := False;
end;
end.
//====================================
接口函數是EnableMsgHook和,DisableMsgHook。怎麼用,大家應該清楚吧,本人對Delphi比較菜,有不好的地方望大家指出,改正!!!