例如Windows,记事本->帮助->关于记事本->Click事件。
请不要简单的说SetWindowsHookEx以及WH_CALLWNDPROC因为我试过很多办法,根本无法HOOK住菜单的点击事件,无法得到WM_COMMAND消息以及wParam传的菜单ID号。
请不要简单的说SetWindowsHookEx以及WH_CALLWNDPROC因为我试过很多办法,根本无法HOOK住菜单的点击事件,无法得到WM_COMMAND消息以及wParam传的菜单ID号。
解决方案 »
- delphi gina code
- 访问远程数据库使用哪种控件比较好?
- 如何做 安装程序
- 为什么用adoquery查询oracle数据表时,会出现:maximum open cursors exceeded
- 照着李维的《高效数据库编程》抄代码,遇到错误过不去,请帮助
- blob 与memory的问题
- 怎样通过combo.text 得到其对应的combo.item[]的值
- 请教各位!如何在StringGrid中只让用户输入'A'..'D'中的一个字符??
- TAdoDataset当其数据集为空时 不能插入(append)??怎么办
- 本版建设的重大提议
- sqlserver:客户端连接不上数据库
- RTTI问题,挑战所有高手,直指核心
Windows,Messages,ShareMem;{$R *.RES}Const
HookHND : integer = 0;
DescCaption : String = 'Form1';
Function MouseHookProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;
var
MouseHookStruct: ^TMOUSEHOOKSTRUCT;
begin
if nCode<0 then Result := CallNextHookEx(HookHND,nCode,WParam,LParam)
else begin
MouseHookStruct := Pointer(LParam);
//这个MouseHookStruct.hwnd 就是当前的HWND了。
Result := CallNextHookEx(HookHND,nCode,WParam,LParam);;
end;
end;Function OpenMouseHook(Caption:pchar) : Boolean; stdcall;
begin
if HookHND<>0 then Result := False
else begin
DescCaption := Caption;
HookHND := SetWindowsHookEx(WH_MOUSE,@MouseHookProc,Hinstance,0);
Result := True;
end;
end;Procedure CloseMouseHook;Stdcall;
begin
if HookHND <> 0 then begin//如果有钩子就卸掉他。
UnHookWindowsHookEx(HookHND);
HookHND := 0;
end;
end;exports
OpenMouseHook,CloseMouseHook;beginend.