Windows中的活动窗口和QWidget :: activateWindow()

时间:2010-07-23 08:02:48

标签: windows qt window-managers foreground

QWidget::activateWindow()州的Qt文档:

  

在Windows上,如果您正在调用它   当申请目前不在时   那个活跃的那个就没有了   它是活动窗口。它会改变   任务栏条目的颜色   表示窗口已更改   某种程度上来说。这是因为微软   不允许申请   中断用户当前的状态   在另一个应用程序中做。

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

怎么能这样做?

4 个答案:

答案 0 :(得分:6)

答案 1 :(得分:1)

我不认为你可以单独用Qt API可靠地做到这一点。

Windows有多种解决方案。例如。 hereherehere

我之前使用的方法是声明shared memory section,然后在那里编写应用程序的窗口句柄。稍后,当程序的第二个实例启动时,您可以找到第一个程序的窗口句柄并将其激活。

我不认为你在这种情况下会出现阻止你这样做的问题,因为你的第二个实例是活动应用程序,所以允许它将“焦点”传递给其他窗口。

答案 2 :(得分:0)

在Qt解决方案中使用Single Application

  

对于某些应用程序,它很有用或   甚至批评它们已经开始了   任何用户只能使用一次。未来的尝试   应该启动应用程序   激活任何已经运行的实例,   并可能执行请求   行动,例如加载文件,在那里   实例

答案 3 :(得分:-1)

你可以将setWindowOpacity从0设置为1.你唯一可以随时打开它