GetAsyncKeyState/GetKeyState unter win98



  • hallo,

    #define ID_HOTKEY1 1
    ...
    case WM_CREATE:
         RegisterHotKey(hwnd, ID_HOTKEY1, 0, 'A');
    ...
    case WM_HOTKEY:
    {
         BYTE b  = HIBYTE (GetAsyncKeyState('B'));
         BYTE c  = HIBYTE (GetAsyncKeyState('C'));
    
         if (b && c)
         MessageBox(blablabla);
         return 0;
    }
    

    funktioniert auch alles prima: wenn ich 'b' 'c' und 'a' gleichzeitig drücke kommt die messagebox. (unter winXP und ME) wenn ich das prog allerdings auf einem laptop mit win98 se ausführe reagiert es nicht auf die tastenkombi 😞

    GetKeyState statt GetAsyncKeyState habe ich auch schon probiert



  • Bekommst du denn die WM_HOTKEY-Message? Falls nicht: was liefert GetLastError() nach RegisterHotKey?



  • ja die message bekomme ich... ich weiß inzwischen, dass es an dem HIBYTE liegen muss. alles andere funktioniert (auch ohne HIBYTE) aber ich will ja wissen ob die tasten gedrückt sind, und nicht, ob sie schonmal gedrückt wurden 😉

    also an win98 kann es auch nicht liegen... hab es an einem anderen rechner getestet... muss ich bei den tasten beim lap top was beachten? sind die tasten da anders belegt oder so??? es geht auf allen rechnern, die ich getesten habe (XP, ME, 98) nur halt auf dem laptop (98) nich 😞
    weiß jemand rat???



  • muss ich bei notebook tastaturen denn irgendwas beachten oder so??? ich weiß echt nicht woran das liegen kann... der will diesen HIBYTE einfach nicht 😞



  • möglicherweise kann die Laptop-Tastatur konstruktionsbedingt die Zeichen nicht unterscheiden



  • naja irgendwie so... aber ich mein a b und c is ja nicht zu viel verlangt (dachte ich)...

    wie kann ich das abfangen?



  • Hallo!
    Versuchs mal mit GetAsyncKeyState (VK_A) für Taste A (VK_B) für B und so weiter. Im Petzold steht ausserdem, dass ein gesetztes Bit 0 dafür steht, dass die angegebene Taste gedrückt ist.

    Habs noch nicht getestet, aber wenn du folgendes probierst, könnte es funktionieren:

    if ((GetAsyncKeyState(VK_A)&1)==TRUE) 
        //Taste A gedrückt
    

    GetKeyState und GetAsyncKeyState erwarten einen Virtual Keycode als Parameter, daher hier noch mal ne Liste aller Keycodes:
    http://www.spontz.org/LeftFrame/Knowledge/C/Virtual-KeyCodes.html



  • Einfache Keyboard controller können nicht jede beliebige tastenkombination "verstehen".


Anmelden zum Antworten