Taste deaktivieren am Beispiel der rechten Maustaste



  • Hallo zusammen,
    es gibt immer wieder Leute mit Versuchen diverse Tasten in ihren Programmen zu deaktivieren. Ich möchte euch eine Methode zeigen wie man dieses Vorhaben auch ohne expliziten Hook schnell lösen kann. Wie ihr wisst empfängt jedes Fenster (Programm) im Scope Messages über gedrückte Tasten etc... und genau diese Schnittstelle nutzen wir aus und überschreiben die struct tagMSG Packete bevor diese von unserem Programm verarbeitet werden.

    Zunächst deklarieren wir eine Memberfunktion unserer Klasse im Header die den neuen Message Handler repräsentiert:

    void __fastcall MsgHandler(tagMSG &Msg, bool &Handled);
    

    Dann weisen wir unserem Programm einen eigenen Message Handler zu:

    Application->OnMessage = MsgHandler;
    

    In der Funktion MsgHandler fangen wir die Messages der gewünschten Taste ab und überschreiben diese:

    void __fastcall UnsereKlasse::MsgHandler(tagMSG &Msg, bool &Handled)
    {
    if(Msg.wParam == VK_RBUTTON)
    	  {
    
    			Msg.message = 0x00;
    			Handled = true;
    	  }
    else
    Handled = false;
    }
    

    Und schon ist die rechte Maustaste tot. Die bearbeitete Nachricht wird nun an unsere Anwendung zur Verarbeitung übergeben.

    Schaut euch die die Struktur tagMSG genau an und man kann damit tolle Sachen machen. Mit der Funktion IsDialogMessage(HWND,tagMsg) kann man auch die Message direkt an Dialoge, Objekte,etc.. übergeben wenn man sich zuvor ein Handle darauf besorgt hat oder eben so:

    WebBrowser1->Handle
    

    In Msg.message steht die Status Nachricht ob die Taste gedrückt oder losgelassen wurde.
    Beispiel: WM_KEYDOWN / WM_KEYUP

    Virtuelle Keykonstanten gibts hier: http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx


Anmelden zum Antworten