2016-03-22 23 views
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にパラメータが2つの言語で同じ値を持っていることがわかりました。

アイデア?

ありがとうございます!

+0

キーの接続を停止するか、結果を表示しないだけですか? – Jacobr365

+0

キーロガーがこの特定の組み合わせを認識し、それが発生したら言語を切り替えることができるフックを作れますか?または、生のキー入力を記録した後に、スイッチが作成されたときにラベル付けした後に生データを操作することができます。 – VermillionAzure

+0

キーをフックするのを止めません...キーを第1言語で表示します現在の言語。私は窓があります8 – 1337

答えて

0

WM_INPUTLANGCHANGEREQUESTメッセージを処理したいと思います。あなたは常に言語の変更を受け入れたいと思います。