S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

键盘钩子中KBDLLHOOKSTRUCT到MSG的转换

Posted on 2010-01-13 00:30 S.l.e!ep.¢% 阅读(2296) 评论(0)  编辑 收藏 引用 所属分类: RootKit
键盘钩子中KBDLLHOOKSTRUCT到MSG的转换,
 

LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{    

    assert(hookWnd !=NULL);
    if(nCode ==HC_ACTION)
    {
        KBDLLHOOKSTRUCT *Key_Info =(KBDLLHOOKSTRUCT*)lParam;
        DWORD dwvk = Key_Info->vkCode;
        DWORD dwMsg = 1;
        dwMsg += Key_Info->scanCode << 16;
        dwMsg += Key_Info->flags << 24;     
        //str存储的即是键盘的键名。

#ifdef _DEBUG
        char str[20]={0};
        GetKeyNameText( dwMsg, str, 20);
#endif
        ::PostMessage( hookWnd, WM_USER_DEFINE,(WPARAM)dwvk,(LPARAM)dwMsg);
        if((166 <= dwvk && dwvk<=169)||(170 <= dwvk && dwvk<= 181))
            returntrue;
    }

    return CallNextHookEx(hhkHook, nCode, wParam, lParam);
}

改部分代码在断点调试的情况下并不能屏蔽一些系统扩展键!在运行时可以屏蔽!可能系统的键盘事件是异步的,在一定时间没有TRUE返回的时候将调用别的事件函数(系统事件处理函数)。导致上述情况出现 !!!


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理