【问题标题】:Allow only a single windows messagebox for single instance application仅允许单个实例应用程序的单个 Windows 消息框
【发布时间】:2015-10-26 12:38:32
【问题描述】:

我有一个只允许运行一次的小型 Windows 应用程序。单实例检查是使用 Windows 互斥锁 (CreateMutex) 完成的。

应用程序应将已运行的应用程序置于最前面并向用户显示信息消息。

信息消息是使用 Windows 中的 MessageBox 函数创建的。但是,每次我尝试启动应用程序的新实例时,都会创建一个新的消息框(允许我打开数百个消息框)。

有没有办法将消息框的数量限制为一个(除了为消息框锁定另一个互斥体)?

【问题讨论】:

    标签: c++ windows


    【解决方案1】:

    你的程序有三种状态:

    1. 正常(一审),
    2. 通知第二次运行(第二次,现在显示有关它的消息框),
    3. 额外(多于第二个实例,它知道显示的消息框)。

    在第三状态的程序静默退出似乎是合理的。有很多方法可以做到这一点。而且由于您已经在使用互斥锁来检测第二个状态,因此也可以使用相同的逻辑来检测第三个状态。

    但你可以用另一种方式:

    1. 程序的第二个实例可以通知程序的第一个实例关于第二次运行和退出。
    2. 并且程序的主(第一个)实例将在收到此类消息后显示消息框。在这种情况下,您的程序应在关闭当前消息框之前忽略所有此类消息(以避免一一显示此类消息框)。

    在我看来,第一种方法更好(即按程序的第二个/第三个/...实例显示消息框,并且仅在它之后将主实例置于前面)。

    【讨论】:

    • 谢谢!我认为可能有一种简单的“Windows 风格”方式来做到这一点。我将使用第二个互斥锁来检查打开的消息框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多