4

状态的 Qt 文档QWidget::activateWindow()

在 Windows 上,如果您在应用程序当前不是活动的应用程序时调用它,那么它不会使其成为活动窗口。它将更改任务栏条目的颜色以指示窗口已以某种方式更改。这是因为 Microsoft 不允许应用程序中断用户当前在另一个应用程序中执行的操作。

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

该怎么做?

4

4 回答 4

6

注意:这是特定于 QtSingleApplication 的工作方式

对于我的问题,解决方案非常简单。只需AllowSetForegroundWindow(ASF_ANY);在应用程序开始时调用,原始进程将因此被允许通过使用SetForegroundWindow(). 没有奇怪的 hack,只需添加一行代码,也无需修改 QtSingleApplication。

于 2010-07-23T16:56:36.303 回答
1

我认为您不能仅使用 Qt API 可靠地做到这一点。

windows有多种解决方案。例如这里这里这里

我之前使用的方法是声明一个共享内存段,并在其中写入应用程序的窗口句柄。稍后,当您的程序的第二个实例启动时,您可以找到第一个实例的窗口句柄并激活它。

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

于 2010-07-23T08:17:09.807 回答
0

在 Qt 解决方案中使用 单一应用程序

对于某些应用程序,任何用户只启动一次它们是有用的,甚至是关键的。未来启动应用程序的尝试应该激活任何已经运行的实例,并可能在该实例中执行请求的操作,例如加载文件。

于 2010-07-23T08:35:19.390 回答
-2

您可以将 setWindowOpacity 从 0 设置为 1 。唯一的事情是您可以一直打开它

于 2016-01-28T07:35:23.687 回答