我需要实现当用户任何时间按下鼠标中键就做一件事,我用一个DLL设置鼠标钩子来测试时发现有些问题,当我很快地点击鼠标中键时,没有任何反应,慢一点点击,又会弹出好几个消息框,请问是怎么一回事?
LRESULT CALLBACK MyMouseHook(int code, WPARAM wParam, LPARAM lParam)
{
  if(code==HC_ACTION) {
    if(wParam==WM_MBUTTONUP) {
      AfxMessageBox("MBUTTONUP");
    }
  }
  return ::CallNextHookEx(g_hHookMouse, code, wParam, lParam);
}

解决方案 »

  1.   

    你在这个MyMouseHook里设个断点调试下
    是不是WM_MBUTTONDOWN啊,你是WM_MBUTTONUP处理,可能有抖动动的可能吧
      

  2.   

    又试了一会,发现问题所在,我是想用一个全局钩子实现当用户按下鼠标中键时就打开指定的网页,源代码如下:
    LRESULT CALLBACK MyMouseHook(int code, WPARAM wParam, LPARAM lParam)
    {
    if(code==HC_ACTION) {
    if(wParam==WM_MBUTTONUP) {
      ShellExecute(NULL,NULL,"http://www.sina.com.cn",NULL,NULL,SW_SHOWNORMAL);
    }
    return ::CallNextHookEx(g_hHookMouse, code, wParam, lParam);
    }
    但测试时发现每次按下鼠标中键ShellExecute会被执行很多遍,换用AfxMessage测试也是这样,后再换为写文件测试就是正常的,请问为什么会这样,如何解决?