【发布时间】:2013-08-29 05:14:51
【问题描述】:
我想将 .exe 文件(更具体地说是控制台应用程序)集中到第一次启动它可以工作的一个正常运行的程序,但是当第二次执行时(当第一个存在时)它可以将焦点转向第一个启动的程序。这在Qt中可能吗?
【问题讨论】:
我想将 .exe 文件(更具体地说是控制台应用程序)集中到第一次启动它可以工作的一个正常运行的程序,但是当第二次执行时(当第一个存在时)它可以将焦点转向第一个启动的程序。这在Qt中可能吗?
【问题讨论】:
对于单个实例,请阅读 Run only one instance of a Qt application。
不考虑可移植性,如果您在 Windows 上运行,另一种常见的方法是在应用程序启动时创建 named pipe(或 named mutex),并在退出前将其销毁。如果命名管道已存在,则另一个实例已在运行。您甚至可以写信给命名管道,要求其他实例将其窗口置于前面,尽管控制台应用程序可能不会特别从中受益。
另一种关注现有实例的方法是找到已经运行的实例的窗口,然后在其HWND上调用SetFocus,或在您的平台上调用相应的函数。
【讨论】:
INVALID_HANDLE_VALUE),说明另一个实例已经创建了同名管道名称,因此您知道另一个实例已经在运行。