Tastatur Buchstabe bestimmen
lima-city → Forum → Programmiersprachen → C/C++ und D
ausgeben
buffer
byte
code
datei
datum
eingabe
funktion
jemand
konsole
message
not
programm
switch
tab
umlaut
umwandeln
url
zeichen
zeichensatz
-
Hi Leute,
Ich möchte mithilfe von WindowProcedure die Windows Events abfangen und über WM_CHAR auslesen, welcher Buchstabe eingegeben wurde, um nicht selbst das Tastaturlayout und so berücksichtigen zu müssen.
Nun ist es aber so, dass ich auch gerne deutsche Umlaute erkennen möchte, bei mir wParam jedoch stets höchstens 255, also ein SingleByte-Char ist und somit nicht UTF-16 codiert sein kann..
Kann mir jemand sagen, wie ich bei der WM_CHAR-message dann an den expliziten Character komme, sodass ich diesen auch in der Konsole ausgeben lassen könnte, so als Test?
Die WndProc ist:
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ switch (uMsg) // parse pending messages { case WM_CHAR: { switch(wParam){ case 0x08: // backspace case 0x0A: // linefeed case 0x1B: // escape cout << "Not supported" << endl; return 1; case 0x09: // tab cout << "Tab Not supported" << endl; return 0; case 0x0D: // carriage return cout <<"New Line" << endl; default: cout << (wchar_t)wParam << "detected" << endl; return 1; } return DefWindowProc(hWnd,uMsg,wParam,lParam); }
Wenn ich ä,ö oder ü drücke, erhalte ich nur ein Byte an Daten in wParam und kann über die Konsole nur kryptische Zeichen ausgeben...
Die cin-Eingabe von Umlauten klappt aber...
Kann mir jemand erklären, wie ich auch umlaute etc. korrekt abfangen und darstellen kann?
Danke im Voraus,
Chatstory -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
chatstory schrieb:
Das ist ein Problem der Console... denn die nutzt immer noch den uralten unter DOS eingeführten OEM-Zeichensatz (zb Codepage 850).
Wenn ich ä,ö oder ü drücke, erhalte ich nur ein Byte an Daten in wParam und kann über die Konsole nur kryptische Zeichen ausgeben...
Die cin-Eingabe von Umlauten klappt aber...
Wenn du dein Zeichen richtig ausgebeb willst kannst du eine MessageBox verwenden... dort stimmt dann der Zeichensatz. -
Ich möchte die Sache vielleicht noch etwas verallgemeinert stellen, also:
In welchem Datentyp muss ich das WParam ablegen, damit dann auch wirklich ein passender char herauskommt, denn char ist mit nur einem Byte eigentlich zu kruz für utf-16, wenn ich das richtig sehe...
@hackyourlife:
Das mit dem zeichensatz der Console stimmt sogar, aber in welchen Datentyp muss ich das wParam casten, damit ich dann in der MessageBox-Funktion wieder in den richtigen String-typ casten kann?
also wie kann ich wParam in einen passenden character umwandeln, der sich auch ausgeben ließe? (auf einer moderneren Console ;) ) -
chatstory schrieb:
Da würdest du sowas in die Art machen (C-Code, C++ kann ich kaum):
Das mit dem zeichensatz der Console stimmt sogar, aber in welchen Datentyp muss ich das wParam casten, damit ich dann in der MessageBox-Funktion wieder in den richtigen String-typ casten kann?char buffer[32]; sprintf(buffer, "Character: \"%c\"", wParam); // in buffer ist dein String den du an MessageBox übergeben kannst
chatstory schrieb:
Versuch mal die Ausgabe deineb Programms in eine Datei umzuleiten und öffne dann diese Datei mit einem Editor. Was siehst du? Die richtigen Zeichen?
also wie kann ich wParam in einen passenden character umwandeln, der sich auch ausgeben ließe? (auf einer moderneren Console ;) ) -
vielen Dank für die Methode mit dem char buffer, die hat das gewünschte Ergebnis geliefert, wchar_t hat bei WPARAM nämlich fehler hervorgerufen ^^
jetzt wird in der Message-Box tatsächlich der richtige Buchstabe angezeigt und um es auf der Konsole anzuzeigen, müsste ich von meinem Programm die Werte durch die Hexadezimalcodes ersetzen lassen... da ich dazu keine Lust habe, denke ich, ich bleibe bei der Datei/Textboxausgabe :)
insofern herzlichen Dank für den Lösungsvorschlag :D
hat funktioniert :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage