|
|
滚轮上弹菜单失效大概率是钩子过程里弹出菜单导致钩子超时被系统卸了。直接在钩子里别弹菜单,投递消息到窗口再弹。
代码示例:
.版本 2
.程序集 窗口程序集1
.全局变量 钩子句柄, 整数型
.常量 WM_USER = 1024
.子程序 _按钮1_被单击
钩子句柄 = SetWindowsHookEx(14, 取地址(鼠标钩子回调), GetModuleHandle(0), 0)
.子程序 鼠标钩子回调, 整数型
参数 nCode, wParam, lParam
如果 nCode < 0 则 返回 CallNextHookEx(钩子句柄, nCode, wParam, lParam)
如果 wParam = 522 ' WM_MOUSEWHEEL
' 从lParam指向的MSLLHOOKSTRUCT取mouseData高位判断方向
' 简化:用API GetMessageExtraInfo? 或者直接读内存:
如果 (取字节集数据(指针到字节集(lParam, 8), #整数型, 7) = 7864320)
PostMessageA (取窗口句柄(), WM_USER + 100, 0, 0)
否则
返回 CallNextHookEx(钩子句柄, nCode, wParam, lParam)
如果结束
否则
返回 CallNextHookEx(钩子句柄, nCode, wParam, lParam)
如果结束
.子程序 _启动窗口_消息事件, 整数型
参数 消息号, wParam, lParam
如果 消息号 = WM_USER + 100
弹出菜单 (菜单1, , )
注意:菜单1是事先画好的弹出菜单。记得声明API函数:SetWindowsHookEx, CallNextHookEx, PostMessageA, GetModuleHandle, 取窗口句柄。钩子句柄全局变量。按钮1只负责安装钩子,不用循环。 |
|