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位版本的可以无视了