【问题标题】:how can i make a program run sillently? (without the console window appearing)我怎样才能让程序安静地运行? (没有出现控制台窗口)
【发布时间】:2023-03-21 08:09:01
【问题描述】:

例如,在 C# 中,您可以让程序运行而不会出现黑屏...所以我想:既然您可以用 .NET 做任何事情,那么您也可以用 Win32 做,也许有一个解决方案。

有什么想法吗?

【问题讨论】:

    标签: winapi console window


    【解决方案1】:

    当程序与/SUBSYSTEM:CONSOLE 链接时会出现控制台窗口,如果您没有要求其他任何内容,这是默认设置。

    如果您希望它成为“Windows 应用程序”,即“做出 GUI 贡献”,包括不可见,请与 /SUBSYSTEM:WINDOWS 链接。但是,您将需要一个 WinMain 函数,而不是通常的 main 函数。

    【讨论】:

    • 我该怎么做?我输入:#pragma comment (linker, "/SUBSYSTEM:WINDOWS") ,并将 "int main()" 替换为: int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) ,但它仍然没有工作...
    • 两种方法,正如@Alex Farber 所建议的那样,您可以通过 Visual Studio 的属性编辑器来完成 - 您正在查看 C++ 项目的链接器设置。另一种方法是,如果您手动构建,当您键入“LINK /out:exename.exe obj1.obj obj2.obj”时,将 /SUBSYSTEM:WINDOWS 添加到该行。
    • 您不需要为此将 main 函数更改为 WinMain。至少,不必这样做。
    • 谢谢,确实不需要 WinMain()...我认为它以前对我不起作用,因为我正在使用较旧的编译器...我使用了 Visual Studio 并且它有效现在:-)
    【解决方案2】:

    打开项目 - 属性,并将 /SUBSYSTEM 链接器选项设置为 WINDOWS。

    【讨论】:

      【解决方案3】:

      功能:

      开始 /b [命令]

      【讨论】:

        【解决方案4】:

        我有一个包含以下文本的头文件“MainEntryPoint.h”:

        #pragma once
        #if defined _MSC_VER 
          #if !defined _WINDLL
            #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
          #endif
        #endif
        

        我#将此文件包含在任何项目的 main.cpp 文件中

        • 需要是windows 而不是控制台应用
        • 当我从事跨平台工作时,我更喜欢在我的所有项目中使用标准 (main()) C/C++ 入口点。

        (保护宏会自动确保它仅适用于 DevStudio 构建,并排除在构建 dll 时弄乱入口点)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-30
          • 1970-01-01
          • 2021-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多