我正在使用Window的API RegisterHotKey函数在特定应用程序打开并聚焦时按下F2键时运行宏。
问题是,这是阻止F2键用于其他应用程序,例如Excel。
如何阻止RegisterHotKey
停止默认操作?
我有一个系统托盘应用程序,它使用this answer中的HotKeyManager
类来注册热键。当按下特定键时(例如,F2),我使用Windows API检查闭源应用程序是否处于打开和聚焦状态,如果是,则发送一系列SendKeys。
答案 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}");
}