2010-11-29 7 views
1

In einer Anwendung, in der ich viele Schlüssel anders behandeln muss, möchte ich alle Fälle in WM_KEYDOWN behandeln und WM_CHAR überhaupt nicht verwenden. Ist es möglich, das korrekte ASCII/UNICODE-Zeichen aus einer Sequenz von WM_KEYDOWN angegebenen virtuellen Schlüsseln zu erhalten, anstatt auf dem regulären TranslateMsg/WM_CHAR zu vertrauen?Unicode-Zeichen in WM_KEYDOWN erhalten

Als ein Beispiel: die Anwendung sollte in der Lage sein, Shift-B auf eine völlig andere Art und Weise zu handhaben, die ein reguläres B von CTRL-B drückt.

Mit MapVirtualKey verwenden Sie nicht den Status der Tasten Umschalt, Strg und Alt, oder zumindest nicht, dass ich sehen kann.

Als Leo Davidson antwortete: Sie können den ToUnicode-Aufruf verwenden, um die VK -> Unicode-Konvertierung selbst durchzuführen.

Antwort

6

WM_KEYDOWN befasst sich mit Zeichencodes, die im Grunde physikalische Tasten auf der Tastatur bedeutet.

Wenn Sie mit Unicode-Zeichen umgehen möchten, behandeln Sie WM_CHAR (16-Bit-Unicode-Zeichen, vorausgesetzt, Ihr Fenster selbst ist Unicode) oder WM_UNICHAR (32-Bit-Unicode-Zeichen) stattdessen.

EDIT: Wenn Sie die Konvertierung selbst durchführen möchten, verwenden Sie die ToUnicode API.

+2

Das weiß ich. Ich stellte die Frage, um zu sehen, ob die Logik von TranslateMsg, die das WM_CHAR sendet, auch mit einem anderen Pfad erreichbar ist, der keine Windows-Nachrichten verwendet (wie ein API-Aufruf) –

+0

@Ritsaert Hornstra: Fair genug. Siehe meine Bearbeitung. –

+1

Das sieht vielversprechend aus: Wird es direkt ausprobieren! Einen neuen WinAPI Anruf jeden Tag erlernen. –