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