Fehler beim Laden von DLL-Funktionen



  • Dir fehlt im Zweig WM_USER+2 (sowas definiert man sich normalerweise mit einer Konstante, z. b. so: #define WM_MEINEMESSAGE WM_USER+2) auch ein return 0;

    Was Du da vorhast (das ausgeben des unteren Wertes von wParam zum char gecastet in einer MessageBox) geht zwar dennoch in die Hose, aber sonst...



  • MapVirtualKey könnte dir auch behilflich sein 🙂



  • Also die Buchstaben gibt er so aus, hatte anfangs nicht mehr dran gedacht, dass ich das Programm ja irgendwie schließen können muss 🤡

    Danke, dann bau ich das return 0 ein und schau mich mal nach MapVirtualKey um



  • Mit MapVirtualKey funktioniert es einwandfrei 🙂

    Nur würd ich auch gerne die Alternativbelegungen(strg und altr gr), groß- und kleinbuchstaben haben.
    Wie kann ich das machen?



  • Evtl. brauchst du dann doch wieder ToAscii 🙄



  • Würdest du (oder jdm anders) mir nen kleines Beispiel schreiben? Wenn ich das richtig verstehe setzt die Funktion in einem Array mit 256 Einträgen je nachdem welche Taste gedrückt wird ein Bit, aber wie les ich das dann aus und muss ich nach jedem Tastendruck das Array wieder leeren?



  • SirLant schrieb:

    Würdest du (oder jdm anders) mir nen kleines Beispiel schreiben?

    Ich bin gerade zu faul dazu 🙄

    SirLant schrieb:

    Wenn ich das richtig verstehe setzt die Funktion in einem Array mit 256 Einträgen je nachdem welche Taste gedrückt wird ein Bit, aber wie les ich das dann aus und muss ich nach jedem Tastendruck das Array wieder leeren?

    Nein, wenn du genau schaust, siehst du, dass lpKeyState als [in] markiert ist, das heitßt, dass du den Buffer gefüllt übergeben sollst. Diesen Buffer kannst du dir mit GetKeyboardState füllen lassen und dann an die Funktion übergeben. Das Ergebnis (also das oder die Zeichen) bekommst du dann über lpChar.
    Ist alles nur theoretisch angedacht - ich hoffe mal, dass das auch so klappt 🤡



  • Ok das hilft mir schonmal weiter, aber die Ausgabe ist immernoch nicht sauber, wenn ich z.B. HALLO WELT (also groß) schreibe dann steht in meiner Textdatei folgendes

    Ìhallo welt

    Mein Code sieht so aus:

    BYTE buf[256];
    WORD p;
    GetKeyboardState (&buf[0]);
    ToAscii (wparam, MapVirtualKey (wparam, 0), &buf[0], &p, 0);
    
    log << (char)p;
    


  • Versuch es mal mit lParam für den 2. Parameter (uScanCode) 😕
    Also so:

    BYTE buf[256];
    WORD p;
    GetKeyboardState(buf);
    ToAscii(wparam,lparam,buf,&p,0);
    


  • Danke jetzt klappt es 🙂


Anmelden zum Antworten