2
我想写一个键盘记录器,但是当我切换语言时遇到问题。键盘挂钩 - 不同的语言 - C++
我的键盘上有希伯来文和英文。
它很好地识别了希伯来语和英语,问题是如果我更改 语言(alt + shift),所以它仍然是第一语言。
代码:
LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
char ch;
if (((DWORD)lParam & 0x40000000) && (HC_ACTION == nCode))
{
if ((wParam == VK_SPACE) || (wParam == VK_RETURN) || (wParam >= 0x2f) && (wParam <= 0x100))
{
std::string toPrint = "nCode = " + std::to_string(nCode);
std::string toPrint2 = "wParam = " + std::to_string(wParam);
std::string toPrint3 = "wParam = " + std::to_string(lParam);
OutputDebugStringA(toPrint.c_str());
OutputDebugStringA(toPrint2.c_str());
OutputDebugStringA(toPrint3.c_str());
f1 = fopen("c:\\a\\log.txt", "a+");
if (wParam == VK_RETURN)
{
ch = '\n';
fwrite(&ch, 1, 1, f1);
}
else
{
BYTE ks[256];
GetKeyboardState(ks);
WORD w;
UINT scan;
scan = 0;
ToAscii(wParam, scan, ks, &w, 0);
ch = char(w);
fwrite(&ch, 1, 1, f1);
}
fclose(f1);
}
}
我看到NCODE,wParam和lParam参数有两种语言相同的值。
任何想法?
谢谢!
它停止钩住键或只是不会显示结果? – Jacobr365
你可以在键盘记录器可以识别这个特定的组合,然后切换语言一旦发生的钩?或者,也许只需记录原始键输入,然后在开关制作完成后对原始数据进行标记。 – VermillionAzure
它不会停止按键...只需以第一语言显示键,而不是当前的语言。我有Windows 8 – 1337