3

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

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

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

我有一个系统托盘应用程序,它使用这个答案HotKeyManager中的类来注册热键。当按下特定键(例如 F2)时,我使用 Windows API 检查闭源应用程序是否已打开并获得焦点,如果是,则向其发送一系列SendKeys

4

2 回答 2

2

RegisterHotKey 是全局的,因此它将捕获所有这些击键(换句话说,我认为不可能完全按照您的要求进行操作)。

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

澄清一下:RegisterHotKey 将最适合诸如托盘应用程序之类的东西以及您想要不依赖于应用程序焦点的操作系统范围键盘快捷方式的任何其他地方。

Application.AddMessageFilter() 是您想要一致处理特定击键时想要的,但前提是您的应用程序已经获得焦点。

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

于 2012-09-05T13:02:38.320 回答
2

据我了解,您希望您的全局热键仅在一个或多个选定应用程序集中时才起作用。SendKeys如果您确定不兼容的应用程序在前台,您不能简单地截取笔画吗?

例如,

if (IsSpecificWindowFocused())
{
    // Do work
}
else
{
    // Resend the key to whatever window is current
    SendKeys.Send("{F2}");
}
于 2012-09-05T16:05:22.180 回答