2016-03-22 178 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參數有兩種語言相同的值。

任何想法?

謝謝!

+0

它停止鉤住鍵或只是不會顯示結果? – Jacobr365

+0

你可以在鍵盤記錄器可以識別這個特定的組合,然後切換語言一旦發生的鉤?或者,也許只需記錄原始鍵輸入,然後在開關製作完成後對原始數據進行標記。 – VermillionAzure

+0

它不會停止按鍵...只需以第一語言顯示鍵,而不是當前的語言。我有Windows 8 – 1337

回答