【问题标题】:Single instance application in Qt [duplicate]Qt中的单实例应用程序[重复]
【发布时间】:2013-08-29 05:14:51
【问题描述】:

我想将 .exe 文件(更具体地说是控制台应用程序)集中到第一次启动它可以工作的一个正常运行的程序,但是当第二次执行时(当第一个存在时)它可以将焦点转向第一个启动的程序。这在Qt中可能吗?

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    对于单个实例,请阅读 Run only one instance of a Qt application

    不考虑可移植性,如果您在 Windows 上运行,另一种常见的方法是在应用程序启动时创建 named pipe(或 named mutex),并在退出前将其销毁。如果命名管道已存在,则另一个实例已在运行。您甚至可以写信给命名管道,要求其他实例将其窗口置于前面,尽管控制台应用程序可能不会特别从中受益。

    另一种关注现有实例的方法是找到已经运行的实例的窗口,然后在其HWND上调用SetFocus,或在您的平台上调用相应的函数。

    【讨论】:

    • 非常感谢,但我没有解决 named_pipe 问题。
    • 你调用CreateNamedPipe创建了一个命名管道,如果失败(返回值为INVALID_HANDLE_VALUE),说明另一个实例已经创建了同名管道名称,因此您知道另一个实例已经在运行。
    猜你喜欢
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    相关资源
    最近更新 更多