【问题标题】:Programmatically close Windows console application c++以编程方式关闭 Windows 控制台应用程序 C++
【发布时间】:2015-06-15 15:23:11
【问题描述】:

我需要我的 Windows 控制台应用程序只能在一个实例中运行(即一次只能运行一个应用程序实例)。 这是我所拥有的:

int _tmain(int argc, _TCHAR* argv[])
{
    PCTSTR Name = TEXT("AnyName");
    HANDLE h = CreateMutex(NULL, FALSE, Name);

    if (GetLastError() == ERROR_ALREADY_EXISTS)
    {
        _tprintf_s(TEXT("This application is already opened."));
        CloseHandle(h);
        // Close the console somehow
        return 0;
    }
    else _tprintf_s(TEXT("The application has been opened the first time."));

    _gettchar();
    return 0;
}

如果同一个程序已经初始化,我如何以编程方式关闭控制台窗口?

【问题讨论】:

  • 将另一个实例带到前面,让这个实例简单地退出。
  • 你不应该试图关闭控制台窗口——你应该退出。如果您的程序拥有它的控制台,它将自动关闭。如果没有(例如当您的程序从 dos 框启动时),则窗口将保持打开状态。
  • @PeterRuderman 感谢您的解释)

标签: c++ windows mutex handle


【解决方案1】:

你可以隐藏它

ShowWindow(GetConsoleWindow(), SW_HIDE);

虽然我真的认为你应该退出程序而不是关闭控制台。

【讨论】:

  • 那么,我该如何退出程序呢?
  • 所以我从现有控制台运行您的程序,它隐藏了我的窗口?有趣的。不好,但很有趣。
  • 这很有趣,但这也是他问的问题,他应该考虑一下。或者按照我的建议去做 - 好好退出
  • @DavidHaim 我会好好辞职的:)
【解决方案2】:

_gettchar() 用于阻止控制台关闭,因此只有在您想保持控制台打开时才允许它,这意味着如果您希望它关闭,它将:

int _tmain(int argc, _TCHAR* argv[])
{
    PCTSTR Name = TEXT("AnyName");
    HANDLE h = CreateMutex(NULL, FALSE, Name);

    if (GetLastError() == ERROR_ALREADY_EXISTS)
    {
        _tprintf_s(TEXT("This application is already opened."));
        CloseHandle(h);
        return 0;
    }
    else
    {
         _tprintf_s(TEXT("The application has been opened the first time."));
         _gettchar();
    }
    return 0;
}

【讨论】:

    猜你喜欢
    • 2016-04-25
    • 2023-04-04
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多