2010-04-25 14 views
7

Próbuję uzyskać wniosek, aby coś zrobić po naciśnięciu CTRL + S. Po prostu nie jestem pewien, jak działają parametry W i L dla WM_KEYDOWN. MSDN ma coś o polach bitowych, których nie jestem pewien. Jak mogę wykryć CTRL i S? DziękiWM_KEYDOWN zamieszanie

Co mam zrobić, jeśli fokus ma inną kontrolę niż hWnd?

Odpowiedz

16

Cóż, this to duża lista kodów kluczy wirtualnych.

CTRL-S ma być wysłany przez jako 2 WM_KEYDOWN wiadomości - wiadomość, gdy zostanie naciśnięty klawisz Ctrl (VK_LCONTROL lub VK_RCONTROL), a następnie przez 0x53 dla klucza „S”.

Zamiast przetwarzać oba komunikaty, poczekaj na wiadomość o naciśnięciu klawisza dla przycisku "S", a następnie zadzwoń pod numer GetKeyState, używając magicznej wartości VK_CONTROL (sprawdź, czy należy testować osobno dla lewego i prawego klawisza sterującego), aby sprawdzić, czy S został naciśnięty przy wciśniętym CTRL.

-

Oczywiście, wiadomości klawiatury są przesyłane bezpośrednio do okna, które ma ostrości. Aby uzyskać kombinacje akceleratorów do pracy w zakresie aplikacji, musisz sprawdzić komunikaty przed ich wysłaniem do okna aktywności - tj. Do pompy komunikatów. Zobacz dokumentację dla TranslateAccelerator.

Jeśli chcesz obsługiwać klawisze o szerokości całego systemu, druga odpowiedź wskazuje na skrót klawiszowy APi.

+0

Co mogę zrobić, to inna kontrola poza hWnd ma ostrości? – jmasterx

+0

Aby obsłużyć szeroką aplikację Ctrl-X, używałbyś api akceleratora. Systemwide - skrót klawiaturowy. –

-2

Gdy WPARAM jest równy kodowi VRL CTRL, ustaw wartość bool w stanie obiektu. Następnie, kiedy pojawia się S, jeśli Ctrlbool, masz CTRL-S.

+1

Co się stanie, jeśli opuści klawisz Ctrl przed naciśnięciem S? Następnie musisz zarządzać wiadomościami kluczowymi, aby je śledzić. Odpowiedź Chrisa jest właściwym podejściem. –