当特定应用程序打开并聚焦时按下F2键时,我使用Window的API RegisterHotKey函数来运行宏。
问题是,这会使F2键无法用于其他应用程序,如Excel。
如何阻止RegisterHotKey
停止默认操作?
我有一个系统托盘应用程序,它使用这个答案中的HotKeyManager
类来注册热键。当按下一个特定的键(例如,F2)时,我使用Windows API来检查一个封闭源代码应用程序是否打开并聚焦,如果是,则向其发送一系列SendKeys。
据我所知,您希望您的全局热键仅在一个或多个选定的应用程序集中时才能工作。如果你确定前台有一个不兼容的应用程序,你就不能简单地SendKeys
截取的笔划吗?
例如,
if (IsSpecificWindowFocused())
{
// Do work
}
else
{
// Resend the key to whatever window is current
SendKeys.Send("{F2}");
}
RegisterHotKey是全局的,所以它会捕获所有的击键(换句话说,我认为不可能完全按照你的要求执行)。
但是,这个线程全局键盘挂钩(C#)谈到创建一个键盘消息过滤器,这(我相信)更像你想要的。
澄清:RegisterHotKey将最适合托盘应用程序和其他任何你想要全操作系统键盘快捷方式的地方,而不依赖于应用程序的焦点。
Application.AddMessageFilter()是当您希望对特定击键进行一致处理时所需要的,但仅当您的应用程序已经具有焦点时。
一种方法是监视操作系统上运行的进程,并且只在应用程序运行时启用全局挂钩,这样可以完成您所描述的操作并保持在.NET中。