用C/C++创建一个"隐形"的windows程序

Tas*_*sos 2 c winapi background silent

好的,这是这个问题的延续:如何在Windows中使一个简单的Hello World"不可见"(C/C++)

人们给了我一些指导,在这里我有一个新的问题:

在做了一些研究后我又被卡住了.互联网上的人声称,通过创建一个win32应用程序,将没有图形指示.

这是执行此操作的代码(我很确定您已经知道这一点但是没有)

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {

//code
return 0;
}
Run Code Online (Sandbox Code Playgroud)

因此不会显示在main中键入的代码.我真的不知道他们的意思是什么样的代码,例如:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {

    while (1) {
    }
}
Run Code Online (Sandbox Code Playgroud)

这个程序弹出一个Cmd窗口就好了.

我还发现通过初始化STARTUPINFO结构中的值

STARTUPINFO StartupInfo;
memset(&StartupInfo, 0, sizeof(StartupInfo));
// set the size of the structure
StartupInfo.cb = sizeof(STARTUPINFO);
// tell the application that we are setting the window display 
// information within this structure
StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
// set the window display to HIDE
StartupInfo.wShowWindow = SW_HIDE;
Run Code Online (Sandbox Code Playgroud)

会隐藏控制台窗口.这对我来说不起作用.我有这种感觉,我在这里错过了一个主要的概念,所以我需要你的知识.我想创建一个简单的.exe,类似于while循环或一个不显示东西的简单打印.我错过了什么?

Set*_*gie 5

您必须使用特定的编译器选项才能执行此操作; 它不是代码本身的属性.我假设您正在使用Visual Studio进行编译.

转到Project Properties > Configuration Properties > Linker > System > SubSystem并将其设置为Windows.如果您执行此操作并运行程序,例如,将程序置于无限循环中,则必须从任务管理器中删除它.

我不知道如何在GCC上这样做.Gerald在评论中告诉我,对GCC 使用--subsystem,windows-mwindows将会这样做.请注意,也-mwindows链接GDI库.