键盘记录之RawInput

C/C++代码 blackfeather

 

键盘记录都已经被用烂了,最近涉及到这方便的东西,挑了半天选了rawinput这个方法。

大致流程就是先注册一个原始输入设备并制定消息回调窗口的句柄:

 

BOOL RegisitKeyBord(HWND hwnd)
{
    if(NULL == hwnd)
        return false;
        
    PRegisterRawInputDevices RegisterRawInputDevices = (PRegisterRawInputDevices)GetApiAdd("User32.dll", "RegisterRawInputDevices");
    if(NULL == RegisterRawInputDevices)
        return false;
        
    RAWINPUTDEVICE rid;
    rid.usUsagePage = 0x01;
    rid.usUsage = 0x06;   //0x02是鼠标消息
    rid.dwFlags = RIDEV_INPUTSINK;  //不管怎样都截取 具体说明看MSDN
    rid.hwndTarget = hwnd;
    return RegisterRawInputDevices(&rid, 1, sizeof(RAWINPUTDEVICE));
}


 

然后在这个窗口的消息循环中获取WM_INPUT消息并调用GetRawInputData获取原始输入数据即可。

 

rawinput键盘记录代码下载:201303131846186678

 

最后总结一下ring3下常用的键盘记录方法有(如果各位还有补充可以留言):

1.键盘钩子,分wh_keyboard钩子和wh_keyboard_ll底层钩子

2.消息回调,setwindowlongptr回调窗口消息后分析wm_keydown消息

3.directInput设备

4.rawinput

5.hook sendinput等输入函数

6.GetKeyState和GetAsyncKeyState函数遍历获取

 

驱动的方法也有很多,本人很少用驱动,这里就不提了,省的误导了各位观众。

 

 

评论列表:

发表评论: