KeyboardProc()这个函数里的内容如下:
if(nCode>=0)
{
if(wParam==VK_HOME)
{
  CDialogDll dlg;  //创建一个自己的对话框
                    dlg.DoModal()    //这里是显示出来.
}
} LRESULT RetVal=CallNextHookEx(g_hHook,nCode,wParam,lParam);
return RetVal;
不知道为什么每次按HOME键的时候,都会弹出两个对话框来
狂急,,,,谢谢高手回答。。附;VC QQ技术群:5478989

解决方案 »

  1.   

    恩,我做的也是这样,按一次就弹出两个窗口。
    我现在的解决办法是在dlg.DoModal()前加上一个if语句判断是否已经有了弹出窗口。
    但问题怎么会出现到现在还不清楚
      

  2.   

    hHook = SetWindowsHookEx(WH_GETMESSAGE,&GetMsgProc,hModDll,dwTID);
    用WH_GETMESSAGE消息钩子把,他没有这个问题的, 我就是这样做的
      

  3.   

    哈哈,搞了几天,终于明白问题出在哪了!
    键盘钩子接受键盘信号有两个,一个是KEYDOWN,一个是KEYUP,你只判断if(wParam==VK_HOME),当你按下HOME键时,键盘函数自然会响应两次!当然会弹出两个对话框!
    改成:
    BOOL bKeyUp = lParam & (1 << 31);//这是响应WM_KEYUPR的。
    if(wParam==VK_HOME && bKeyUp)
    问题解决。
    接分。
      

  4.   

    bKeyUp = ((lParam >> 16 ) & KF_UP == 0x8000);
      

  5.   

    KEYDOWN和KEYUP都会响应的,所以有两个。
      

  6.   

    if(lParam & 0x80000000)  
    {
    //代表按下某键
    }
      

  7.   

    if(lParam >0)  
    {
    //代表按下某键
    }