如何隐藏 Windows 程序的控制台 window?

How can one hide the console window of a Windows program?

我正在使用 wxWidget 框架。当我设置 System/Subsystem: Console (/SUBSYSTEM:CONSOLE) 时,我的程序将启动,但会同时显示 GUI 和控制台。这是它的样子:https://i.stack.imgur.com/G83PR.png

当我更改 System/Subsystem: Windows (/SUBSYSTEM:WINDOWS) 然后它显示错误:

LNK2019 unresolved external symbol _WinMain@16 referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)

这是我的代码:

int main(int argc, char** argv) {
    Gui_AutoPokemon* gui = new Gui_AutoPokemon();
    wxApp::SetInstance(gui);

    mainArgc = argc;
    mainArgv = argv;

    return wxEntry(argc, argv);
}

如何隐藏控制台window?

GUI Windows 程序使用与控制台不同的入口点函数。您使用 /SUBSYSTEM:WINDOWS 是正确的,但是您需要更改为使用 WinMain:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR cmdLine, int nCmdShow) {
    ....

然后使用适当的wxEntry重载:

return wxEntry(hInstance, NULL, cmdLine, nCmdShow);

我建议打电话给 FreeConsole()。它将控制台与任何 window 分离。作为我的应用程序的示例: