使用WH_KEYBOARD_LL 后,然后做以下动作
LRESULT CALLBACK LauncherHook(int nCode,WPARAM wParam,LPARAM lParam)
{
LRESULT Result=CallNextHookEx(Hook,nCode,wParam,lParam);
if(nCode==HC_ACTION)
{
PKBDLLHOOKSTRUCT p=(PKBDLLHOOKSTRUCT)lParam;
switch(wParam)
{
case WM_KEYDOWN: 
/*case WM_SYSKEYDOWN:
case WM_KEYUP:    
case WM_SYSKEYUP:*/ switch(p->vkCode)
{
case VK_F6 :
MessageBox(0,0,0,0);
break;
...........
}
break; default:
break; } }
return Result;
}
为什么messagebox弹出来后,明显感觉有个什么问题,显示都是怪怪的,点确定也没有反应,要过几秒后才正常~
请达人讲解下~

解决方案 »

  1.   

    尽量不要在KEYBOARD HOOK中使用WINDOWS 的GUI API,特别是MESSAGEBOX这样的带阻止线程功能的函数,因为当线程被阻止后,如果继续有KEYBOARD MESSAGE产生,MESSAGEBOX会被连续调用,但是线程又是停止的,这样会产生堆栈溢出的问题,至少我是这样认为. 
    建议你用一个CONSOLE APPLICATION,然后用 printf代替MESSAGEBOX吧.
      

  2.   

    messagebog把线程阻塞了,可以写日志文件,
    这样就不会卡了
      

  3.   

    MessageBox堵塞了线程,在钩子里面做这事不好挖
    你可以MessageBeep嘛
      

  4.   

    那我要在按下F6后,产生一个Dialog对话框,应该怎么做好些呢~~~
      

  5.   

    我这样做的,当dll加载时,找到加载dll程序的窗口,然后当按下f6后,向这个窗口发自定义消息,然后我在这个窗口程序里面做相应的动作~已经试过了,可以实现,但是不知道有没有副作用