如何防止RegisterHotKey停止默认键操作?

时间:2012-09-05 12:28:41

标签: c# winapi registerhotkey

我正在使用Window的API RegisterHotKey函数在特定应用程序打开并聚焦时按下F2键时运行宏。

问题是,这是阻止F2键用于其他应用程序,例如Excel。

如何阻止RegisterHotKey停止默认操作?

我有一个系统托盘应用程序,它使用this answer中的HotKeyManager类来注册热键。当按下特定键时(例如,F2),我使用Windows API检查闭源应用程序是否处于打开和聚焦状态,如果是,则发送一系列SendKeys

2 个答案:

答案 0 :(得分:2)

RegisterHotKey是全局的,所以它会捕获所有这些击键(换句话说,我认为不可能完全按照你的要求进行)。

然而,这个帖子 Global Keyboard Hooks (C#) 谈论创建一个键盘消息过滤器,这是(我相信)更像你想要的。

澄清: RegisterHotKey最适合托盘应用程序以及其他任何您希望操作系统范围内的键盘快捷方式而不依赖于应用程序聚焦的地方。

Application.AddMessageFilter()是您想要一致处理特定击键时所需要的,但仅当您的应用已经具有焦点时才会这样。

执行您所描述的并仍然保留在.NET中的方法是监视操作系统上正在运行的进程,并仅在应用程序运行时启用全局挂钩。

答案 1 :(得分:2)

据我所知,您希望全局热键仅在关注一个或多个所选应用时才能工作。如果你确定一个不兼容的应用程序在前台,你不能简单地SendKeys截获的笔画吗?

例如,

if (IsSpecificWindowFocused())
{
    // Do work
}
else
{
    // Resend the key to whatever window is current
    SendKeys.Send("{F2}");
}
相关问题