基本词WH_MOUSE,MOUSEHOOKSTRUCTEX,64位
关键词WH_MOUSE,MOUSEHOOKSTRUCTEX,64位
描述:
32位程序,在本线程挂MouseHook,非DLL
在32位系统下DWORD hi的值是正确的,可以获取120(向上滚)或-120(向下滚)
问题:
在64位系统下,上下滚hi值都固定并且与120没关系,重新启动应用程序,又会是另一固定随机值
比如第一次启动hi=12345,不管上下滚都是这样,第二次可能就变了54321,也是上下滚都一样
win7 64位下,即使用管理员执行也是一样的情况
注意,非DLL,MSDN上说的32位DLL不能注入到64位应用里,反之也不成,跟这无关
这个钩子只是为了处理本进程(32位应用)内的鼠标滚动消息
PS:语言非C++,并且编译器不支持64位操作系统,以上代码只是为了用C++重现这个问题,所以说编译64位版本的可以无视了
------解决方案--------------------
恭喜~!
HHOOK mouse;
LRESULT CALLBACK mouse_hook(int nCode, WPARAM wParam, LPARAM lParam)
{
MOUSEHOOKSTRUCTEX* mh = (MOUSEHOOKSTRUCTEX*)lParam;
if (nCode < 0)
{
return ::CallNextHookEx(mouse,nCode,wParam,lParam);
}
if (wParam == WM_MOUSEWHEEL)
{
DWORD hi = HIWORD(mh->mouseData);//问题所在行
}
return ::CallNextHookEx(mouse,nCode,wParam,lParam);
}
CMainFrame::CMainFrame()
{
mouse = SetWindowsHookEx(WH_MOUSE, mouse_hook, 0, ::GetCurrentThreadId());
}
描述:
32位程序,在本线程挂MouseHook,非DLL
在32位系统下DWORD hi的值是正确的,可以获取120(向上滚)或-120(向下滚)
问题:
在64位系统下,上下滚hi值都固定并且与120没关系,重新启动应用程序,又会是另一固定随机值
比如第一次启动hi=12345,不管上下滚都是这样,第二次可能就变了54321,也是上下滚都一样
win7 64位下,即使用管理员执行也是一样的情况
注意,非DLL,MSDN上说的32位DLL不能注入到64位应用里,反之也不成,跟这无关
这个钩子只是为了处理本进程(32位应用)内的鼠标滚动消息
PS:语言非C++,并且编译器不支持64位操作系统,以上代码只是为了用C++重现这个问题,所以说编译64位版本的可以无视了
------解决方案--------------------
恭喜~!