Anpassen von Tastatur und Maus

MFC ermöglicht es dem Benutzer Ihrer Anwendung, die Behandlung von Tastatur- und Mauseingaben anzupassen. Der Benutzer kann tastatureingaben durch Zuweisen von Tastenkombinationen zu Befehlen anpassen. Der Benutzer kann die Mauseingabe auch anpassen, indem er den Befehl auswählt, der ausgeführt werden soll, wenn der Benutzer innerhalb bestimmter Fenster der Anwendung doppelklicken soll. In diesem Thema wird erläutert, wie Sie die Eingabe für Ihre Anwendung anpassen.

Im Dialogfeld "Anpassung" kann der Benutzer die benutzerdefinierten Steuerelemente für die Maus und die Tastatur ändern. Um dieses Dialogfeld anzuzeigen, zeigt der Benutzer im Menü "Ansicht" auf "Anpassen" und klickt dann auf Symbolleisten und Andocken. Im Dialogfeld klickt der Benutzer entweder auf die Registerkarte "Tastatur " oder auf die Registerkarte "Maus ".

Tastaturanpassung

Die folgende Abbildung zeigt die Registerkarte "Tastatur " des Dialogfelds "Anpassung ".

Keyboard tab in the Customize dialog box.
Registerkarte "Tastaturanpassung"

Der Benutzer interagiert mit der Tastaturregisterkarte, um einem Befehl eine oder mehrere Tastenkombinationen zuzuweisen. Die verfügbaren Befehle werden auf der linken Seite der Registerkarte aufgelistet. Der Benutzer kann über das Menü einen beliebigen verfügbaren Befehl auswählen. Nur Menübefehle können einer Tastenkombination zugeordnet werden. Nachdem der Benutzer eine neue Verknüpfung eingegeben hat, wird die Schaltfläche "Zuweisen " aktiviert. Wenn der Benutzer auf diese Schaltfläche klickt, ordnet die Anwendung den ausgewählten Befehl dieser Verknüpfung zu.

Alle aktuell zugewiesenen Tastenkombinationen werden im Listenfeld in der rechten Spalte aufgelistet. Der Benutzer kann auch einzelne Tastenkombinationen auswählen und entfernen oder alle Zuordnungen für die Anwendung zurücksetzen.

Wenn Sie diese Anpassung in Ihrer Anwendung unterstützen möchten, müssen Sie ein CKeyboardManager-Objekt erstellen. Rufen Sie zum Erstellen eines CKeyboardManager Objekts die Funktion CWinAppEx::InitKeyboardManager auf. Diese Methode erstellt und initialisiert einen Tastatur-Manager. Wenn Sie manuell einen Tastatur-Manager erstellen, müssen Sie ihn trotzdem aufrufen CWinAppEx::InitKeyboardManager , um ihn zu initialisieren.

Wenn Sie den Assistenten zum Erstellen Ihrer Anwendung verwenden, initialisiert der Assistent den Tastatur-Manager. Nachdem Die Anwendung den Tastatur-Manager initialisiert hat, fügt das Framework dem Dialogfeld "Anpassung" eine Registerkarte "Tastatur" hinzu.

Mausanpassung

Die folgende Abbildung zeigt die Registerkarte "Maus " des Dialogfelds "Anpassung ".

Mouse tab in the Customize dialog box.
Registerkarte "Mausanpassung"

Der Benutzer interagiert mit dieser Registerkarte, um der Doppelklickaktion mit der Maus einen Menübefehl zuzuweisen. Der Benutzer wählt eine Ansicht von der linken Seite des Fensters aus und verwendet dann die Steuerelemente auf der rechten Seite, um einen Befehl mit der Doppelklickaktion zu verknüpfen. Nachdem der Benutzer auf "Schließen" geklickt hat, führt die Anwendung den zugeordneten Befehl aus, wenn der Benutzer an einer beliebigen Stelle in der Ansicht doppelklicken kann.

Die Mausanpassung ist standardmäßig nicht aktiviert, wenn Sie eine Anwendung mithilfe des Assistenten erstellen.

So aktivieren Sie die Mausanpassung

  1. Initialisieren Sie ein CMouseManager-Objekt durch Aufrufen von CWinAppEx::InitMouseManager.

  2. Rufen Sie mit CWinAppEx::GetMouseManager einen Zeiger auf den Maus-Manager ab.

  3. Fügen Sie dem Maus-Manager Ansichten mithilfe der CMouseManager::AddView-Methode hinzu. Führen Sie dies für jede Ansicht aus, die Sie dem Maus-Manager hinzufügen möchten.

Nachdem die Anwendung den Maus-Manager initialisiert hat, fügt das Framework dem Dialogfeld "Anpassen" die Registerkarte "Maus" hinzu. Wenn Sie keine Ansichten hinzufügen, führt der Zugriff auf die Registerkarte zu einer unbehandelten Ausnahme. Nachdem Sie eine Liste der Ansichten erstellt haben, ist die Registerkarte "Maus " für den Benutzer verfügbar.

Wenn Sie dem Maus-Manager eine neue Ansicht hinzufügen, geben Sie ihm eine eindeutige ID. Wenn Sie die Mausanpassung für ein Fenster unterstützen möchten, müssen Sie die WM_LBUTTONDBLCLICK Nachricht verarbeiten und die CWinAppEx::OnViewDoubleClick-Funktion aufrufen. Wenn Sie diese Funktion aufrufen, ist einer der Parameter die ID für dieses Fenster. Es liegt in der Verantwortung des Programmierers, die ID-Nummern und die ihnen zugeordneten Objekte nachzuverfolgen.

Sicherheitsaspekte

Wie in den benutzerdefinierten Tools beschrieben, kann der Benutzer eine benutzerdefinierte Tool-ID dem Double-Click-Ereignis zuordnen. Wenn der Benutzer auf eine Ansicht doppelklicken, sucht die Anwendung nach einem Benutzertool, das der zugeordneten ID entspricht. Wenn die Anwendung ein passendes Tool findet, wird das Tool ausgeführt. Wenn die Anwendung ein Passendes Tool nicht finden kann, sendet sie eine WM_COMMAND Nachricht mit der ID an die Ansicht, auf die doppelgeklippelt wurde.

Die angepassten Einstellungen werden in der Registrierung gespeichert. Durch die Bearbeitung der Registrierung kann ein Angreifer eine gültige Benutzertool-ID durch einen beliebigen Befehl ersetzen. Wenn der Benutzer auf eine Ansicht doppelklicken, verarbeitet die Ansicht den Befehl, den der Angreifer gepflanzt hat. Dies kann zu unerwartetem und potenziell gefährlichem Verhalten führen.

Darüber hinaus kann diese Art von Angriff Sicherheitsvorkehrungen der Benutzeroberfläche umgehen. Angenommen, eine Anwendung hat das Drucken deaktiviert. Das heißt, auf der Benutzeroberfläche ist das Menü "Drucken" und die Schaltfläche nicht verfügbar. Normalerweise wird dadurch verhindert, dass die Anwendung gedruckt wird. Aber wenn ein Angreifer die Registrierung bearbeitet hat, könnte ein Benutzer den Druckbefehl jetzt direkt senden, indem er auf die Ansicht doppelklicken und die nicht verfügbaren Benutzeroberflächenelemente umgehen kann.

Um diese Art von Angriffen zu schützen, fügen Sie Ihrem Anwendungsbefehlshandler Code hinzu, um zu überprüfen, ob ein Befehl gültig ist, bevor er ausgeführt wird. Hängen Sie nicht von der Benutzeroberfläche ab, um zu verhindern, dass ein Befehl an die Anwendung gesendet wird.

Siehe auch

Anpassung für MFC
CKeyboardManager-Klasse
CMouseManager-Klasse
Sicherheitsauswirkungen der Anpassung