Personalizzazione di tastiera e mouse
MFC consente all'utente dell'applicazione di personalizzare la gestione dell'input della tastiera e del mouse. L'utente può personalizzare l'input della tastiera assegnando dei tasti di scelta rapida ai comandi. L'utente può personalizzare anche l'input del mouse selezionando il comando da eseguire quando fa doppio clic nelle finestre specifiche dell'applicazione. In questo argomento viene illustrato come personalizzare l'input per l'applicazione.
Nella finestra di dialogo Personalizzazione l'utente può modificare i controlli personalizzati per il mouse e la tastiera. Per visualizzare questa finestra di dialogo, l'utente punta a Personalizza dal menu Visualizza e quindi fa clic su Barre degli strumenti e ancoraggio. Nella finestra di dialogo l'utente fa clic sulla scheda Tastiera o sulla scheda Mouse .
Personalizzazione della tastiera
La figura seguente mostra la scheda Tastiera della finestra di dialogo Personalizzazione .
Scheda di personalizzazione della tastiera
L'utente interagisce con la scheda della tastiera per assegnare uno o più tasti di scelta rapida a un comando. I comandi disponibili sono elencati sul lato sinistro della scheda. L'utente può selezionare qualsiasi comando disponibile dal menu. Solo i comandi di menu possono essere associati a un tasto di scelta rapida. Dopo che l'utente immette un nuovo collegamento, il pulsante Assegna diventa abilitato. Quando l'utente fa clic su questo pulsante, il comando selezionato viene automaticamente associato al tasto di scelta rapida.
Tutte le scelte rapide da tastiera correntemente assegnate sono elencate nella casella di riepilogo nella colonna di destra. L'utente può inoltre selezionare singoli tasti di scelta rapida e rimuoverli o reimpostare tutti i mapping per l'applicazione.
Se si vuole supportare questa personalizzazione nell'applicazione, è necessario creare un oggetto CKeyboardManager . Per creare un CKeyboardManager
oggetto, chiamare la funzione CWinAppEx::InitKeyboardManager. Questo metodo crea e inizializza un gestore della tastiera. Se si crea un gestore della tastiera manualmente, è comunque necessario chiamare CWinAppEx::InitKeyboardManager
per inizializzarlo.
Se si utilizza la procedura guidata per creare l'applicazione, il gestore della tastiera verrà inizializzato dalla procedura guidata. Dopo che l'applicazione inizializza il gestore della tastiera, il framework aggiunge una scheda Tastiera alla finestra di dialogo Personalizzazione .
Personalizzazione del mouse
La figura seguente mostra la scheda Mouse della finestra di dialogo Personalizzazione .
Scheda di personalizzazione del mouse
L'utente interagisce con questa scheda per assegnare un comando di menu all'azione di doppio clic del mouse. L'utente seleziona una visualizzazione dalla parte sinistra della finestra e utilizza i controlli sulla parte destra per associare un comando all'azione di doppio clic. Dopo che l'utente fa clic su Chiudi, l'applicazione esegue il comando associato ogni volta che l'utente fa doppio clic in qualsiasi punto della visualizzazione.
Per impostazione predefinita, la personalizzazione del mouse non è abilitata quando si crea un'applicazione tramite la procedura guidata.
Per abilitare la personalizzazione del mouse
Inizializzare un oggetto CMouseManager chiamando CWinAppEx::InitMouseManager.
Ottenere un puntatore al gestore del mouse usando CWinAppEx::GetMouseManager.
Aggiungere visualizzazioni al gestore del mouse usando il metodo CMouseManager::AddView . Eseguire questa operazione per ogni visualizzazione che si desidera aggiungere al gestore del mouse.
Dopo che l'applicazione inizializza il gestore del mouse, il framework aggiunge la scheda Mouse alla finestra di dialogo Personalizza . Se non si aggiungono visualizzazioni, il tentativo di accedere alla scheda genererà un'eccezione non gestita. Dopo aver creato un elenco di visualizzazioni, la scheda Mouse è disponibile per l'utente.
Quando si aggiunge una nuova visualizzazione al gestore del mouse, le viene assegnato un ID univoco. Se si desidera supportare la personalizzazione del mouse per una finestra, è necessario elaborare il messaggio di WM_LBUTTONDBLCLICK e chiamare la funzione CWinAppEx::OnViewDoubleClick . Quando si chiama questa funzione, uno dei parametri è l'ID per tale finestra. È responsabilità del programmatore tenere traccia dei numeri ID e degli oggetti ad essi associati.
Problemi di sicurezza
Come descritto in Strumenti definiti dall'utente, l'utente può associare un ID strumento definito dall'utente all'evento con doppio clic. Quando l'utente fa doppio clic su una visualizzazione, nell'applicazione viene eseguita la ricerca di uno strumento dell'utente che corrisponda all'ID associato. Se viene individuato uno strumento corrispondente, tale strumento sarà avviato. Se nell'applicazione non viene trovato uno strumento corrispondente, viene inviato un messaggio WM_COMMAND con l'ID alla visualizzazione nella quale è stato fatto doppio clic.
Le impostazioni personalizzate vengono archiviate nel Registro di sistema. Modificando il Registro di sistema, un utente malintenzionato può sostituire un ID strumento dell'utente valido con un comando arbitrario. Quando l'utente fa doppio clic su una visualizzazione, nella visualizzazione viene elaborato il comando selezionato dall'utente malintenzionato. Ciò potrebbe causare un comportamento imprevisto e potenzialmente pericoloso.
Inoltre, questo tipo di attacco può superare le misure di sicurezza dell'interfaccia utente. Ad esempio, si supponga che la funzione di stampa in un'applicazione sia disabilitata. Ovvero, nell'interfaccia utente, il menu Stampa e il pulsante non sono disponibili. In genere ciò impedisce all'applicazione di eseguire la stampa. Ma se un utente malintenzionato modifica il Registro di sistema, un utente può inviare il comando di stampa direttamente facendo doppio clic sulla visualizzazione, ignorando gli elementi dell'interfaccia utente che non sono disponibili.
Per proteggere il sistema da questo tipo di attacco, aggiungere del codice al gestore del comando dell'applicazione per verificare la validità di un comando prima dell'esecuzione. Non dipendere dall'interfaccia utente per impedire a un comando di essere inviato all'applicazione.
Vedi anche
Personalizzazione per MFC
Classe CKeyboardManager
Classe CMouseManager
Implicazioni relative alla sicurezza della personalizzazione