Dostosowywanie klawiatury i myszy

MFC umożliwia użytkownikowi aplikacji dostosowanie sposobu obsługi klawiatury i wprowadzania myszy. Użytkownik może dostosować dane wejściowe klawiatury, przypisując skróty klawiaturowe do poleceń. Użytkownik może również dostosować dane wejściowe myszy, wybierając polecenie, które powinno zostać wykonane, gdy użytkownik kliknie dwukrotnie wewnątrz określonych okien aplikacji. W tym temacie opisano sposób dostosowywania danych wejściowych dla aplikacji.

W oknie dialogowym Dostosowywanie użytkownik może zmienić niestandardowe kontrolki myszy i klawiatury. Aby wyświetlić to okno dialogowe, użytkownik wskazuje polecenie Dostosuj w menu Widok , a następnie kliknij pozycję Paski narzędzi i Dokowanie. W oknie dialogowym użytkownik klika kartę Klawiatura lub mysz .

Dostosowywanie klawiatury

Poniższa ilustracja przedstawia kartę Klawiatura okna dialogowego Dostosowywanie .

Keyboard tab in the Customize dialog box.
Karta Dostosowywanie klawiatury

Użytkownik wchodzi w interakcję z kartą klawiatury, aby przypisać jeden lub więcej skrótów klawiaturowych do polecenia. Dostępne polecenia są wyświetlane po lewej stronie karty. Użytkownik może wybrać dowolne dostępne polecenie z menu. Tylko polecenia menu można skojarzyć ze skrótem klawiaturowym. Gdy użytkownik wprowadzi nowy skrót, przycisk Przypisz zostanie włączony. Gdy użytkownik kliknie ten przycisk, aplikacja skojarzy wybrane polecenie z tym skrótem.

Wszystkie aktualnie przypisane skróty klawiaturowe są wyświetlane w polu listy w prawej kolumnie. Użytkownik może również wybrać poszczególne skróty i usunąć je lub zresetować wszystkie mapowania aplikacji.

Jeśli chcesz obsługiwać to dostosowanie w aplikacji, musisz utworzyć obiekt CKeyboardManager . Aby utworzyć CKeyboardManager obiekt, wywołaj funkcję CWinAppEx::InitKeyboardManager. Ta metoda tworzy i inicjuje menedżera klawiatury. Jeśli ręcznie utworzysz menedżera klawiatury, nadal musisz wywołać CWinAppEx::InitKeyboardManager metodę , aby ją zainicjować.

Jeśli użyjesz Kreatora do utworzenia aplikacji, Kreator zainicjuje menedżera klawiatury. Po zainicjowaniu aplikacji menedżera klawiatury platforma dodaje kartę Klawiatura do okna dialogowego Dostosowywanie .

Dostosowywanie myszy

Na poniższej ilustracji przedstawiono kartę Mysz okna dialogowego Dostosowywanie .

Mouse tab in the Customize dialog box.
Karta Dostosowywanie myszy

Użytkownik wchodzi w interakcję z tą kartą, aby przypisać polecenie menu do akcji dwukrotnego kliknięcia myszy. Użytkownik wybiera widok z lewej strony okna, a następnie używa kontrolek po prawej stronie, aby skojarzyć polecenie z akcją dwukrotnego kliknięcia. Gdy użytkownik kliknie przycisk Zamknij, aplikacja wykonuje skojarzone polecenie za każdym razem, gdy użytkownik kliknie dwukrotnie w dowolnym miejscu w widoku.

Domyślnie dostosowywanie myszy nie jest włączone podczas tworzenia aplikacji przy użyciu Kreatora.

Aby włączyć dostosowywanie myszy

  1. Zainicjuj obiekt CMouseManager , wywołując element CWinAppEx::InitMouseManager.

  2. Uzyskaj wskaźnik do menedżera myszy przy użyciu CWinAppEx::GetMouseManager.

  3. Dodaj widoki do menedżera myszy przy użyciu metody CMouseManager::AddView . Zrób to dla każdego widoku, który chcesz dodać do menedżera myszy.

Po zainicjowaniu menedżera myszy platforma dodaje kartę Mysz do okna dialogowego Dostosowywanie . Jeśli nie dodasz żadnych widoków, uzyskanie dostępu do karty spowoduje nieobsługiwany wyjątek. Po utworzeniu listy widoków karta Mysz jest dostępna dla użytkownika.

Po dodaniu nowego widoku do menedżera myszy należy nadać mu unikatowy identyfikator. Jeśli chcesz obsługiwać dostosowywanie myszy dla okna, musisz przetworzyć komunikat WM_LBUTTONDBLCLICK i wywołać funkcję CWinAppEx::OnViewDoubleClick . Po wywołaniu tej funkcji jeden z parametrów jest identyfikatorem tego okna. Obowiązkiem programisty jest śledzenie numerów identyfikatorów i skojarzonych z nimi obiektów.

Obawy dotyczące zabezpieczeń

Zgodnie z opisem w sekcji Narzędzia zdefiniowane przez użytkownika użytkownik może skojarzyć identyfikator narzędzia zdefiniowanego przez użytkownika ze zdarzeniem dwukrotnego kliknięcia. Gdy użytkownik kliknie dwukrotnie widok, aplikacja szuka narzędzia użytkownika zgodnego ze skojarzonym identyfikatorem. Jeśli aplikacja znajdzie pasujące narzędzie, uruchamia narzędzie. Jeśli aplikacja nie może znaleźć pasującego narzędzia, wysyła komunikat WM_COMMAND z identyfikatorem do widoku, który został dwukrotnie kliknięty.

Dostosowane ustawienia są przechowywane w rejestrze. Edytując rejestr, osoba atakująca może zastąpić prawidłowy identyfikator narzędzia użytkownika dowolnym poleceniem. Gdy użytkownik kliknie dwukrotnie widok, widok przetwarza polecenie, które osoba atakująca zasiądła. Może to spowodować nieoczekiwane i potencjalnie niebezpieczne zachowanie.

Ponadto ten rodzaj ataku może pominąć zabezpieczenia interfejsu użytkownika. Załóżmy na przykład, że aplikacja ma wyłączone drukowanie. Oznacza to, że w interfejsie użytkownika menu Drukuj i przycisk są niedostępne. Zwykle uniemożliwia to drukowanie aplikacji. Jednak jeśli osoba atakująca edytowała rejestr, użytkownik może teraz wysłać polecenie drukowania bezpośrednio, klikając dwukrotnie widok, pomijając elementy interfejsu użytkownika, które są niedostępne.

Aby chronić przed tego rodzaju atakiem, dodaj kod do programu obsługi poleceń aplikacji, aby sprawdzić, czy polecenie jest prawidłowe przed jego wykonaniem. Nie należy zależeć od interfejsu użytkownika, aby zapobiec wysyłaniu polecenia do aplikacji.

Zobacz też

Dostosowywanie na potrzeby MFC
Klasa CKeyboardManager
Klasa CMouseManager
Konsekwencje dostosowania związane z zabezpieczeniami