我正在使用窗口的API RegisterHotKey函数来运行一个宏,这个宏是在特定应用程序处于打开和聚焦状态时按下F2键的。
问题是,这会阻止F2密钥在其他应用程序中工作。
如何防止RegisterHotKey停止默认操作?
我有一个系统托盘应用程序,它使用this answer的HotKeyManager类来注册热键。当按下特定的键(例如,F2)时,我会使用Windows API来检查关闭的源代码应用程序是否已打开并获得焦点,如果是,则向其发送一系列SendKeys。
发布于 2012-09-06 00:05:22
据我所知,您希望您的全局热键仅在一个或多个选定的应用程序被聚焦时才起作用。如果你确定一个不兼容的应用程序在前台,你不能简单地SendKeys截取的笔画吗?
例如,
if (IsSpecificWindowFocused())
{
// Do work
}
else
{
// Resend the key to whatever window is current
SendKeys.Send("{F2}");
}发布于 2012-09-05 21:02:38
RegisterHotKey是全局的,所以它将捕获所有这些击键(换句话说,我不相信它可以完全按照您的要求进行操作)。
然而,这个线程Global Keyboard Hooks (C#)谈到了创建一个键盘消息过滤器,这(我相信)更像是你要做的。
需要澄清的是: RegisterHotKey最适合托盘应用程序和其他任何你想要操作系统范围的键盘快捷键的地方,而不是依赖于应用程序的焦点。
当您想要一致地处理特定击键时,但仅当您的应用程序已经拥有焦点时,才需要使用Application.AddMessageFilter()。
一种方法是监视操作系统上正在运行的进程,并仅在应用程序运行时启用全局钩子,这样就可以在.NET中执行您所描述的操作。
https://stackoverflow.com/questions/12281442
复制相似问题