RT
解决方案 »
- 急!!!' Unknow database.Alias : SymInt ' . Process stopped,use step or r
- DELPHI中调用C++写的DLL的问题
- Firebird数据库连接不上
- 请问我做以TStringList为元素的数组是Array of TStirngList还是把TStringList放到TStringList里面去?
- 怎么实现从dbgrid中复选的记录一下子修改某一字段的值
- 闪烁问题
- 问一个问题:如何直接设置打印机横向打印而不通过对话框。
- 希望一个grid的某列最下面一行显示总计
- 怎么判断一个变量是何种类型?
- 把按钮的风格设为点击后嵌入再次点击后弹起的样式?
- adoquery生成标准XML问题
- 请教多线程连接数据库问题
library MyHook;uses
SysUtils,
Windows,
Messages,
Classes;{$R *.res}var
hook: HHOOK;
function MouseHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
if wParam = WM_LBUTTONDOWN then
begin
//发现系统有Mouse点击事件
//DoEvent()
end;
Result := CallNextHookEx(hook, nCode, wParam, lParam);
end;
function SetHook: Boolean; stdcall;
begin
hook := SetWindowsHookEx(WH_MOUSE, @MouseHook, HInstance, 0);
Result := hook <> 0;
end;
function DelHook: Boolean; stdcall;
begin
Result := UnhookWindowsHookEx(hook);
end;
exports
SetHook name 'SetHook',
DelHook name 'DelHook',
MouseHook name 'MouseHook'; begin
end.
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
implementationfunction 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.