【问题标题】:Keyboard messages Windows flow problem and doubt键盘消息Windows流程问题及疑问
【发布时间】: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


【解决方案1】:

当您的应用获得焦点时,您可以将十字键注册为热键 (RegisterHotkey API),然后在您的应用失去焦点后立即取消注册。

【讨论】:

    猜你喜欢
    • 2013-03-30
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多