状态的 Qt 文档QWidget::activateWindow()
:
在 Windows 上,如果您在应用程序当前不是活动的应用程序时调用它,那么它不会使其成为活动窗口。它将更改任务栏条目的颜色以指示窗口已以某种方式更改。这是因为 Microsoft 不允许应用程序中断用户当前在另一个应用程序中执行的操作。
然而,Skype 似乎违反了这一规则。如果 Skype 正在运行但不是活动应用程序,我可以从开始菜单启动它,它将现有实例带到前台,激活它并获取输入焦点。
我该怎么做?
状态的 Qt 文档QWidget::activateWindow()
:
在 Windows 上,如果您在应用程序当前不是活动的应用程序时调用它,那么它不会使其成为活动窗口。它将更改任务栏条目的颜色以指示窗口已以某种方式更改。这是因为 Microsoft 不允许应用程序中断用户当前在另一个应用程序中执行的操作。
然而,Skype 似乎违反了这一规则。如果 Skype 正在运行但不是活动应用程序,我可以从开始菜单启动它,它将现有实例带到前台,激活它并获取输入焦点。
我该怎么做?
(注意:这是特定于 QtSingleApplication 的工作方式)
对于我的问题,解决方案非常简单。只需AllowSetForegroundWindow(ASF_ANY);
在应用程序开始时调用,原始进程将因此被允许通过使用SetForegroundWindow()
. 没有奇怪的 hack,只需添加一行代码,也无需修改 QtSingleApplication。
在 Qt 解决方案中使用 单一应用程序
对于某些应用程序,任何用户只启动一次它们是有用的,甚至是关键的。未来启动应用程序的尝试应该激活任何已经运行的实例,并可能在该实例中执行请求的操作,例如加载文件。
您可以将 setWindowOpacity 从 0 设置为 1 。唯一的事情是您可以一直打开它