【发布时间】:2009-09-16 09:47:10
【问题描述】:
我正在开发一个必须添加键盘快捷键系统的程序。
问题是它使用第三方 OCX 作为其显示的一部分,并且它在获得焦点时会捕获一些基本的 WM_KEYDOWN 消息,例如 Ctrl+C、Ctrl+V 等。我尝试过捕获 WM_KEYDOWN 消息通过 WndProc,但消息没有传播,所以我猜键盘消息从内部容器到外部容器,不是吗?
WM_KEYUP 消息可以被捕获,但我更希望能够在 KeyDown 事件中捕获其中一些消息。我知道我可以做一些低级的钩子,但我想避免这种解决方法。
好吧,如果 WM_KEYDOWN 消息从 OCX 传递到其顶级容器,我想我将不得不在 KeyUp 事件中处理这些组合键。
【问题讨论】:
-
我比较确定您可以使用 ApplicationCommands 获得所有这些功能 - msdn.microsoft.com/en-us/library/…
-
我的应用程序是使用 Windows 窗体完成的,而不是 WPF(它是在几年前首次构建的)。无论如何,我对这种方法的工作持保留态度,因为即使将所有者表单 KeyPreview 属性设置为 true,向工具条菜单项添加快捷方式等也无法捕捉到这些特殊组合。
-
Ctrl+C 和 Ctrl+V 是剪切和粘贴的标准按键。你真的应该让这些击键进入有焦点的窗口——用户会期望他们这样做。
标签: c# .net windows vb.net winforms