KeyHook anpassen



  • Also ich hab zurzeit den KeyHook aus der FAQ allerdings, hab zwar das überspringen bei gleicher taste schon entfernt gekriegt und läuft auch recht gut ( auch wenn das was man tun musste damits läuft nicht ganz der anleitung entsprach )...

    nur ist das problem ich will es für ein spiel nutzen, und jetzt will ich das es auf einer tastertur geht und z.B. w und s für den linken spieler sind ( hoch, runter ) und i und k für den rechten, nur wenn ich bei diesem keyhook jetzt 2 tasten gleichzeitig dann wird eine davon immer blockiert... gibts da ne möglichkeit das anzupassen das ich da wirklich mit 2 tasten "gleichzeitig" umgehen kann?
    Sozusagen das er immer zwischen den beiden tasten hin und her swapt.

    hier nochmal die keyhook source.

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include <windows.h>
    #pragma hdrstop
    //---------------------------------------------------------------------------
    
    #define WM_KEYHOOK WM_USER+100
    HHOOK ghhookKB;
    HINSTANCE ghInst;
    #pragma argsused
    //---------------------------------------------------------------------------
    
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
      ghInst = hinst;
      return (1);
    }
    //---------------------------------------------------------------------------
    
    extern "C" __declspec(dllexport) __stdcall void SetHook(void);
    extern "C" __declspec(dllexport) __stdcall void RemoveHook(void);
    extern "C" __declspec(dllexport) __stdcall DWORD CheckKey(int, WORD,LONG);
    //---------------------------------------------------------------------------
    
    void __stdcall SetHook(void)
    {
      HOOKPROC lpfnHookProc = NULL;// Dll sollte so heißen wie das Projekt ( BCB 6 )
      lpfnHookProc = GetProcAddress(GetModuleHandle("Project1.dll"),"CheckKey");
      ghhookKB = SetWindowsHookEx(WH_KEYBOARD, lpfnHookProc, ghInst, NULL);
    }
    //---------------------------------------------------------------------------
    
    void __stdcall RemoveHook(void)
    {
      UnhookWindowsHookEx(ghhookKB);
    }
    //---------------------------------------------------------------------------
    
    DWORD __stdcall CheckKey(int nCode, WORD wParam, LONG lParam)
    {
      HWND ghAppWnd = FindWindow("TForm1", 0);// Name der Form an die Gesendet wird
      if((nCode < 0) || nCode == HC_NOREMOVE)
        return CallNextHookEx(ghhookKB, nCode, wParam, lParam);
    
      // Skip if it's a repeat
      //if(lParam & 0x40000000)
      //  return CallNextHookEx(ghhookKB, nCode, wParam, lParam);
    
      // Send key information to the main window
      SendMessage(ghAppWnd, WM_KEYHOOK, 0, lParam);
    
      return CallNextHookEx(ghhookKB, nCode, wParam, lParam);
    }
    //---------------------------------------------------------------------------
    


  • Die Problematik dieses FAQ-Eintrages wurde ja schon andernorts ausführlich diskutiert. Mir stellt sich hier vor allem die Frage: warum zum Kuckuck benutzt du Hooks für gewöhnliche Tastaturabfragen?



  • weil das ding sozusagen überm desktop läuft, und ich will ja das das auch geht wenn man z.B. gerade im firefox ist 😉



  • Ist denn das was ich anstrebe überhaupt möglich?



  • Hallo

    Offenbar weiß hier keiner eine konkrete Antwort. Ich verschieb dich mal ins WinAPI-Forum.

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten