生成的Qt文档为for QWidget::activateWindow()状态:

在Windows上,如果你打电话给这个 当前申请目前 活跃的一个,那么它就不会制作 它是活动窗口。它会改变 任务栏输入的颜色 表示窗口已更改 某种程度上来说。这是因为微软 不允许申请 中断用户目前的内容 在另一个应用程序中进行。

但是,Skype似乎违反了此规则。如果Skype正在运行但不是活动应用程序,我可以从“开始”菜单启动它,它将现有实例带到前景中,激活它并抓取输入焦点。

以及如何 i 这样做?

有帮助吗?

解决方案

注意:这是特定于QTSingLeapplication如何工作

解决方案对于我的问题是愚蠢的简单。只需在应用程序的开头呼叫生成的AllowSetForegroundWindow(ASF_ANY);,因此将允许原始过程通过使用SetForegroundWindow()将自己带到前景。没有奇怪的黑客,只需添加一行代码,无法修改qtsingleapplication。

其他提示

我不认为你可以单独使用Qt API可靠地完成。

Windows有多种解决方案。例如。 这里,和这里,和这里

之前使用的方法是声明共享内存部分,并在那里写下应用程序的窗口句柄。稍后,当程序的第二个实例开始时,您可以找到第一个并激活它的窗口句柄。

我不认为您有Windows的问题,防止您在这种情况下执行此操作,因为您的第二个实例是活动应用程序,因此允许它“将焦点”传递给其他窗口。

可以将setwindowopacity设置为0到1。唯一的是您可以随时打开它

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top