共用方式為


鍵盤和滑鼠自訂

MFC 可讓您自訂鍵盤及滑鼠輸入,它的處理方式的應用程式的使用者。使用者可以自訂鍵盤輸入的命令指派鍵盤快速鍵。使用者也可以自訂滑鼠輸入,選取當使用者按兩下特定的應用程式視窗內執行的命令。本主題說明如何自訂您的應用程式的輸入。

自訂對話方塊中,使用者可以變更滑鼠和鍵盤的自訂控制項。若要顯示此對話方塊,使用者指向這自訂檢視 ] 功能表,然後按下 工具列和停駐。在對話方塊中,在使用者按一下其中一個鍵盤 ] 索引標籤或 the 滑鼠 ] 索引標籤。

鍵盤自訂

下圖顯示鍵盤 索引標籤上的 自訂對話方塊。

自訂鍵盤] 索引標籤

自訂對話方塊的鍵盤索引標籤

使用者若要將一或多個鍵盤快速鍵指派給指令的 [鍵盤] 索引標籤進行互動。可用的命令列在 [[] 索引標籤的左邊。使用者可以從功能表中選取任何有效的命令。只有功能表命令可以使用鍵盤快速鍵關聯。使用者輸入新的捷徑之後, 指派 ] 按鈕已啟用。當使用者按一下此按鈕時,應用程式就會將所選取的命令與該捷徑。

在右欄中的清單方塊中,會列出所有目前所指派的鍵盤快速鍵。使用者也可以選取個別的捷徑,並移除它們,或重新設定應用程式的所有對應。

如果您想要支援這項自訂應用程式中,您必須建立 CKeyboardManager 物件。若要建立CKeyboardManager物件,來呼叫該函數CWinAppEx::InitKeyboardManager。這個方法會建立並初始化鍵盤管理員。如果您建立鍵盤管理員以手動方式,您仍必須呼叫CWinAppEx::InitKeyboardManager以進行初始化。

如果您使用精靈來建立您的應用程式時,精靈就會起始鍵盤管理員。您的應用程式初始化鍵盤管理員之後,架構會將加入鍵盤 tab 鍵移至 自訂對話方塊。

設定自訂滑鼠

下圖顯示滑鼠 索引標籤上的 自訂對話方塊。

自訂滑鼠] 索引標籤

自訂對話方塊的滑鼠索引標籤

在使用者互動與這個索引標籤,若要指定一個功能表命令,以滑鼠連按兩下的動作。使用者選取檢視] 視窗的左側,然後再使用相關於連按兩下動作的指令的 [右邊顯示的控制項。在使用者按下關閉,每當使用者按兩下儲存在檢視中的任何地方,應用程式執行相關聯的命令。

預設情況下,您使用精靈建立的應用程式時,不會啟用滑鼠自訂。

若要啟用滑鼠自訂

  1. 初始化 CMouseManager 物件藉由呼叫CWinAppEx::InitMouseManager

  2. 取得變數的指標,滑鼠管理員藉由使用CWinAppEx::GetMouseManager

  3. 將檢視新增到滑鼠管理員中,使用CMouseManager::AddView方法。每個檢視您想要加入至 [滑鼠管理員執行這項操作。

您的應用程式初始化滑鼠管理員之後,架構會將加入滑鼠 tab 鍵移至 自訂對話方塊。如果您沒有加入任何檢視,存取] 索引標籤會導致未處理的例外狀況。建立一份檢視表之後滑鼠 ] 索引標籤是供使用者使用。

當您新增新的檢視給專案經理,滑鼠時,您為其指定唯一的識別碼。如果您想要支援滑鼠自訂視窗,您必須處理WM_LBUTTONDBLCLICK訊息和呼叫CWinAppEx::OnViewDoubleClick函式。當您呼叫此函式時,其中一個參數會是該視窗的識別碼。若要追蹤的 ID 編號和與其相關的物件,程式設計人員必須負責。

安全性考量

如所述使用者定義工具,使用者可與 double-click 事件項目相關聯的使用者自訂工具的 ID。當使用者按兩下檢視時,應用程式會尋找一個使用者工具,以符合相關聯的識別碼。如果應用程式中,找出符合的工具,則會執行此工具。如果應用程式找不到符合的工具,它會在已按兩下檢視傳送 WM_COMMAND 訊息識別碼。

自訂的設定會儲存在登錄中。藉由編輯登錄,攻擊者可以使用任意的命令取代有效的使用者工具 ID。當使用者按兩下檢視時,檢視處理所種植的攻擊者的命令。這可能會造成非預期且有潛在危險的行為。

此外,這類攻擊可以略過使用者介面保護措施。例如,假設應用程式已經停用列印。也就是在其使用者介面, 列印功能表與按鈕才會無法使用。通常,這可避免應用程式無法列印。但如果攻擊者可編輯登錄,使用者無法立即均可傳送的列印命令直接藉由連按兩下檢視中,略過的使用者介面項目無法使用。

若要防止這類攻擊,加入您的應用程式命令處理常式,以便確認命令是有效的會在執行之前的程式碼。不要依靠使用者介面,以防止命令傳送到應用程式。

請參閱

參考

CKeyboardManager 類別

CMouseManager 類別

概念

MFC 的自訂

自訂的安全性含意