我目前正在开发一个名为" Key-O-Meter"的程序。该程序应跟踪Windows上用键盘输入的每个输入。跟踪的密钥将用于在其他时间创建统计信息。不幸的是,我在确定键入哪个字符方面遇到了问题。下面的代码只打印键盘上的字符(即" a"如果按下了#34;而不是" A"如果按下" a"则按下)。特殊角色根本不工作。
是否有比提供此功能的MapVirtualKeyA
更好的WinAPI功能?
#include <iostream>
#include <windows.h>
using namespace std;
LRESULT WINAPI lowLevelKeyboardProc(int nCode, WPARAM wParam,
LPARAM lParam);
/**
*
*/
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {
//add hook
HHOOK hook;
hook = SetWindowsHookEx(WH_KEYBOARD_LL,
(HOOKPROC) lowLevelKeyboardProc, NULL, 0);
//start message loop
MSG message;
while (GetMessage(&message, NULL, 0, 0) != 0) {
TranslateMessage(&message);
DispatchMessage(&message);
}
//disable hook
UnhookWindowsHookEx(hook);
return 0;
}
/**
*
*/
LRESULT WINAPI lowLevelKeyboardProc(int nCode, WPARAM wParam,
LPARAM lParam) {
if (wParam == WM_KEYDOWN) {
//handle normal keydown
PKBDLLHOOKSTRUCT hookStruct = (PKBDLLHOOKSTRUCT) lParam;
char keyChar = MapVirtualKeyA(hookStruct->vkCode, MAPVK_VK_TO_CHAR);
cout << keyChar << endl;
}
return CallNextHookEx(0, nCode, wParam, lParam);
}