2009-06-10 12 views
0

Ich habe einen Tastatur-Hook für einen Dialog hinzugefügt, den ich nicht kontrolliere (er führt seine eigene DialogProc-Funktion in einer Bibliothek mit geschlossener Quelle aus). Ich kann die Schlüsselstriche erfassen, aber der Schlüsselstrich wird immer an den Dialog gesendet. Dies führt sowohl zu Fehlertönen als auch zu merkwürdigem Verhalten.Tastenanschläge im Dialogfeld unterdrücken

Installation der Haken:

hKeyHook=SetWindowsHookEx(WH_KEYBOARD, KeyHookProc, hInst, GetCurrentThreadId()); 

Die Hook-Funktion:

LRESULT CALLBACK KeyHookProc(int code, WPARAM wParam, LPARAM lParam) 
{ 
    if(!(lParam & 0x80000000)) 
    { 
     if(wParam == VK_mykey) 
     { 
      // Do my stuff 

      return 0; // Don't continue the hook chain 
     } 
    } 

    // Continue with next hook 
    return CallNextHookEx(hKeyHook, code, wParam, lParam); 
} 

Lösen der Haken:

UnhookWindowsHookEx(hKeyHook); 

Gibt es eine Möglichkeit, die Tastendruck, um zu verhindern gesendet werden das Steuerelement, das den Fokus im Dialogfeld hat?

Antwort

3

Sie könnten das fragliche Steuerelement untergliedern, indem Sie seinen Wert GWLP_WNDPROC (siehe remarks section of this page) ersetzen. Das Grundkonzept besteht darin, dass Sie die Nachrichten WM_KEY* herausfiltern und den Rest an das ursprüngliche WndProc weitergeben.

0

Diese

if(!(lParam & 0x80000000)) 

gilt, wenn die Taste gedrückt wird. Wenn es veröffentlicht wird, tun Sie nichts.

KeyHookProc wird aufgerufen, wenn die Tasten gedrückt gehalten werden oder wenn sie losgelassen werden.

0

Hmm. Erster Punkt: Sind Sie sicher, dass Sie hier Ihre eigene Prozess-Thread-ID verwenden möchten? Steht der Dialog definitiv unter deinem Prozess-Thread?

+0

In diesem Fall ist es eigentlich mein Thread, aber ich stimme zu, es ist nicht klar aus der Frage. –

Verwandte Themen