键盘和鼠标自定义项

MFC 如何允许您的应用程序的用户定义它处理键盘和鼠标输入。 用户可以通过分配键盘快捷方式自定义键入到命令。 用户还可以自定义选择输入的鼠标应执行的命令,当用户双击在应用程序的特定窗口中。 本主题说明如何自定义应用程序的输入。

自定义 对话框,用户可以更改鼠标和键盘的自定义控件。 若要显示此对话框,用户指向在 查看 菜单的 自定义 然后单击 工具栏和停靠。 在对话框中,用户单击 键盘 选项或 鼠标 选项。

键盘自定义项

下图显示 自定义 对话框的 键盘 选项。

键盘自定义选项

“自定义”对话框的“键盘”选项卡

用户与键盘选项将一个或多个键盘快捷键绑定到一个命令。 可用的命令在选项卡上的左侧列表。 用户可以选择所有可用命令从菜单。 仅菜单命令可能与键盘快捷键。 在用户输入新的快捷键后, 分配 按钮将启用。 当用户单击此按钮后,应用程序能够将选定的命令与该快捷方式。

所有当前分配的键盘快捷键在右列的列表框中列出。 用户可以选择相应的快捷键和还移除或为应用程序重置所有映射。

如果希望支持在应用程序的此自定义,您必须创建 CKeyboardManager 对象。 若要创建 CKeyboardManager 对象,请调用函数 CWinAppEx::InitKeyboardManager。 此方法创建并初始化一个键盘管理器。 如果手动创建一个键盘经理,您仍然必须调用 CWinAppEx::InitKeyboardManager 将其初始化。

如果您使用向导创建应用程序,向导将初始化键盘管理器。 在应用程序中初始化键盘管理器后,框架添加一个 键盘 选项。 自定义 对话框。

鼠标自定义项

下图显示 自定义 对话框的 鼠标 选项。

鼠标自定义选项

“自定义”对话框的“鼠标”选项卡

用户与此选项将菜单命令添加到鼠标双击事件。 用户选择一个视图从窗口左侧的然后使用右侧的控件关联的命令与双击事件。 在用户单击 关闭后,应用程序执行该关联的命令,只要用户的任意位置在视图中双击。

默认情况下,使用向导时,,那么,当您创建应用程序中自定义未启用。

启用鼠标自定义项

  1. 通过调用 CWinAppEx::InitMouseManager初始化 CMouseManager 对象。

  2. 使用 CWinAppEx::GetMouseManager,获取一个指向鼠标管理器。

  3. 使用 CMouseManager::AddView 方法,将视图添加到光标管理器。 执行此要添加到鼠标管理器的每个视图的。

在应用程序中初始化管理器后,框架添加 鼠标 选项。 自定义 对话框。 如果不添加任何视图,访问此选项将引发未经处理的异常。 当您生成了视图后列表中, 鼠标 选项可由用户。

在添加新视图到光标管理器时,您可以为唯一 ID. 如果要支持 windows 的鼠标自定义项,您必须处理 WM_LBUTTONDBLCLICK 消息和调用 CWinAppEx::OnViewDoubleClick 功能。 当调用此功能时,有一个参数为该窗口的 ID。 为程序员负责记录 ID 号和对象与它们。

安全因素

用户定义的工具所述,用户可以将一个用户定义的工具 ID 与双击事件。 当用户双击视图时,应用程序查找与关联的 ID. 的用户工具 如果应用程序找到匹配的工具,它执行工具。 如果应用程序未能找到匹配的工具,其发送与 id(-4) 的 WM_COMMAND 消息给中双击的视图。

自定义的设置存储在注册表中。 通过编辑注册表,攻击者可以使用任意命令替换有效用户工具 ID。 当用户双击视图时,视图处理攻击者种植的命令。 这可能导致意外和潜在危险的行为。

此外,这种攻击可以跳过用户界面安全保护。 例如,假设应用程序已禁用的打印。 即在其用户界面, 打印 菜单和按钮不可用。 通常这样可防止应用程序打印。 ,但是,如果攻击者编辑注册表,用户可能直接通过双击视图现在发送打印 " 命令,跳过不可用的用户界面元素。

若要防止这种攻击,请将代码添加到您的应用程序命令处理程序验证命令有效,则在执行之前。 不要依赖于用户界面以阻止命令发送到应用程序。

请参见

参考

CKeyboardManager 类

CMouseManager 类

概念

MFC的自定义项

自定义的安全问题