要记录按键,我将挂钩安装为:
BOOL WINAPI installHook(HINSTANCE hinstDLL, DWORD fwdReason, LPVOID lpvReserved) {
handleKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hinstDLL, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
// write here
}
我有什么办法可以知道当前正在敲击密钥的应用程序名称?就像我打开记事本中写东西一样,我能否获得应用程序的名称,即记事本以及按键?某些其他应用程序(例如mozilla firefox)也是如此。
最佳答案
挂钩的内部应如下所示:
static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// if it is not a keydown event, continue the chain
if(HC_ACTION != nCode || WM_KEYDOWN != wParam)
return CallNextHookEx(0, nCode, wParam, lParam);
const KBDLLHOOKSTRUCT* messageInfo = reinterpret_cast<const KBDLLHOOKSTRUCT*>(lParam);
// add more code here...
// tell Windows we processed the hook
return 1;
}
messageinfo.vkCode
将包含您要查找的密钥代码。这些代码的正式列表位于:http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx通常,将键输入到前台窗口中(尽管有时会发生奇怪的窗口布局)。您可以像这样获取前台窗口的标题:
TCHAR title[100]; // increase size for longer titles
GetWindowText(GetForegroundWindow(), title, 100);
如果要获取程序的名称,请使用:
TCHAR title[100]; // increase size for longer program names
GetWindowModuleFileName(GetForegroundWindow(), title, 100);
并且,请记住添加错误检查并检查文档。