关键词WH_MOUSE,MOUSEHOOKSTRUCTEX,64位

ysai 2011-01-14 02:28:46
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位版本的可以无视了
...全文
261 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wg961423 2013-02-27
  • 打赏
  • 举报
回复
恭喜~!恭喜~!
Eleven 2011-01-15
  • 打赏
  • 举报
回复
恭喜~!
ysai 2011-01-14
  • 打赏
  • 举报
回复
有人来领分吗
ysai 2011-01-14
  • 打赏
  • 举报
回复
NND自己解决了,国外的网站找了个方法试了下成
遇到不等于120/-120的,unhook再hook下次就行了
应该算个BUG

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧