【发布时间】:2014-06-20 12:02:08
【问题描述】:
我正在为客户开发一个应用程序,但遇到了问题。
应用程序与手机通话并进行大量呼叫处理。它所做的其中一件事是显示“接听电话”按钮。用鼠标单击它可以正常工作。
但是客户想要为此设置键盘快捷键,这是个问题。如果应用程序中的窗口有焦点,我可以获得焦点。但是,如果用户在不同的应用程序中,Windows 焦点窃取防护不允许我获得焦点。
请不要在这里讨论焦点窃取的利弊。我已经认识它们,并且已经将它们交给了我的客户。不管错与否,他们仍然想这样做,而且他们正在支付账单,所以他们可以做出决定。
对此有许多解决方法,但它们似乎不再起作用。例如,我将 HKEY_CURRENT_USER\Control Panel\Desktop\ForegroundFlashCount 设置为 3 并将 ...\ForegroundLockTimeout 设置为 0。
那么我有哪些选择?这是不可能的吗?还是我必须构建一个病毒检查器会讨厌的键盘挂钩应用程序?
这是一个 Qt/C++ 应用程序,但如果您有可以执行此操作的 C# 示例代码,那就太好了。
希望你能帮忙。
【问题讨论】:
-
你可以查看这个解决方案:stackoverflow.com/questions/17403511/…
-
如果您只需要一个特定的快捷方式,最好保留焦点窃取保护并注册一个系统范围的快捷方式。 Qt 不提供此功能,但您可以使用
QxtGlobalShortcut或基于 WinAPI 的解决方案。 -
您想将焦点移回您的应用程序,还是只想捕捉快捷方式?是的,这是一个令人震惊的想法,但如果客户坚持,你能做什么?
-
其他一切都失败了,您可以使用 SystemParametersInfo 将 SPI_GETFOREGROUNDLOCKTIMEOUT 设置为零;这会完全关闭焦点窃取保护。请注意,您当前必须拥有焦点才能更改此设置。