Culture.KeyboardLayoutId

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Culture.KeyboardLayoutId

    Moin,

    Um die gedrückten Tasten der Tastatur auslesen zu können, muss man ja erstmal wissen, welche Taste welche Belegung hat. Das ist ja auch erstmal einfach.
    Nur muss man dann ja auch noch bestimmen, welches Keyboard man jetzt eigentlich hat.

    Dabei kann mir denk ich mal

    VB.NET-Quellcode

    1. My.Application.Culture.KeyboardLayoutId

    weiterhelfen, bloß weiß ich nicht genau wie...

    Gibt es eine Liste, welche IDs welches Keyboard bedeuten?
    Ich hab bei Google irgendwie nix hilfreiches gefunden...
    Das geht auf mit Windows Forms genauso...
    Weil die doch ebenso gleich sind. Nur die Belegung ist doch anders...Heißt zum Beispiel eine Taste mit der ID=211 könnte auf einem deutschen Layout "|" sein, während es in USAmerika "[" sein kann... und es heißt im Code beides "OEMQuestion" (war nur ein Beispiel, stimmt nicht)
    mhh kann ich dir leider auch nicht weiter helfen hab noch nie sowas gebraucht (finds auch leicht sinnlos) aber google doch mal?

    EDIT: vlt. hilft das:

    VB.NET-Quellcode

    1. Dim chr As Char = Convert.ToChar(e.KeyCode)
    2. If chr = "ä" Then
    3. Label1.Text = "ok"
    4. Else
    5. MessageBox.Show(chr)
    6. End If
    Warum konvertierst du den Char nicht dann in nen String, suchst in ner For-Schleife nach dem ASCII-Code, packst den in nen Integer und guckst dann, welche Taste gedrückt wurde? :)

    Im Ernst, du musst eig. nur auf zwei Layouts Acht nehmen, auf das QWERTZ- und das QWERTY-Layout. Und wenn die IDs für die Tasten sich für verschiedene Layouts nicht ändern (z.B. ID 211, in deinem Post beschrieben), musst du eig. nur noch ne Möglichkeit finden, für eine ID das richtige Zeichen zum Anzeigen finden.
    Naja...Ich habe wie gesagt keinen KeyCode in XNA und das ganze ist ganz bestimmt nicht sinnlos 8|

    Es geht einfach nur darum, dass ich eine Liste mit den IDs für die Keyboards suche und sie nicht finden kann.

    Und @SamusAran: Ich habe eine Helferklasse geschrieben, die den Char mit Shift, ohne Shift und mit Alt hält und dann den richtigen zurückgibt. Eine Liste dieser Klasse wird dann im Konstruktor gefüllt. Nur was genau in dieser Klasse stehen muss ist das Problem. Sie wird in etwa so befüllt:
    QWERTZ Keyboard:

    VB.NET-Quellcode

    1. New ChatCharacter("ä","Ä",Keys.OEMQuotes)


    QWERTY Keyboard:

    VB.NET-Quellcode

    1. New ChatCharacter("'","""",Keys.OEMQuotes)


    Das ganze wird dann in einer Schleife abgefragt und funktioniert schon alles. Das ist ja auch gar nicht mein Problem.
    Es geht halt einfach nur darum, zu bestimmen, WELCHES von den beiden oben genannten Versionen nun genutzt werden soll.
    Und um das zu bestimmen, muss das KeyboardLayout per

    VB.NET-Quellcode

    1. KeyboardLayoutId
    bestimmt werden. Und da würde ich gerne die Werte für QWERTZ und QWERTY wissen.
    System.Globalization.CultureInfo.GetCultureInfo("de") gibt ein Objekt zurück, das in etwa so aussieht:

    Quellcode

    1. Calendar: {System.Globalization.GregorianCalendar}
    2. CompareInfo: {CompareInfo - de}
    3. CultureTypes: NeutralCultures | InstalledWin32Cultures | FrameworkCultures
    4. DateTimeFormat: {System.Globalization.DateTimeFormatInfo}
    5. DisplayName: "German"
    6. EnglishName: "German"
    7. IetfLanguageTag: "de"
    8. IsNeutralCulture: true
    9. IsReadOnly: true
    10. KeyboardLayoutId: 7
    11. LCID: 7
    12. Name: "de"
    13. NativeName: "Deutsch"
    14. NumberFormat: {System.Globalization.NumberFormatInfo}
    15. OptionalCalendars: {System.Globalization.Calendar[1]}
    16. Parent: {}
    17. TextInfo: {TextInfo - de}
    18. ThreeLetterISOLanguageName: "deu"
    19. ThreeLetterWindowsLanguageName: "DEU"
    20. TwoLetterISOLanguageName: "de"
    21. UseUserOverride: false

    Wie du siehst, ist KeyboardLayoutId 7.
    So würdest du an den Namen hinter der ID kommen:

    VB.NET-Quellcode

    1. CultureInfo.CurrentCulture.DisplayName
    Meinen Glückwunsch, wenn Du dann nämlich eine andere Tastatur an Deinem Rechner hast, ist Dein Programm das einzige, das diese richtig bedient.
    Mein System sagt mir, welche Tastatur dran ist (DE)

    oder ich sage meinem System, was für eine Tastatur dran sein soll (DE oder EN)

    Da m uss ich mich um solch Scheiß nicht kümmern, selbst wenn meine Programme auf anderen Rechnern laufen, und das tun sie, weltweit. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    APPIX schrieb:

    Dein Post ist etwas unschlüssig...

    Wozu brauchst Du das Zeugs?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn jemand auf einer QWERTY Tastatur die Taste drückt, auf der auf der QWERTZ Tastatur ein "ä" eingefügt wird, soll in QWERTY ein ' eingefügt werden. Und um zu wissen, ob jetzt QWERTZ oder QWERTY dran ist, braucht man diese ID. Denk ich mal. Oder gibts nen anderen Weg?

    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    2. If e.KeyCode = Keys.Oem7 Then
    3. MessageBox.Show("ä")
    4. End If
    5. End Sub
    6. Private Sub Form1_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
    7. If e.KeyChar = "ä"c Then
    8. MessageBox.Show("ä")
    9. End If
    10. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Mir kommts leider so vor als hättest du meinen Post #13 nicht gelesen.
    Denn der Rechner, auf dem Dein XNA-Programm läuft, weiß bzw. lässt sich sagen, mit welcher Tastatur er betrieben wird.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!