使用 C/C++ 创建 "invisible"windows 程序

标签 c winapi background silent

好的,这是这个问题的延续:How to make a simple Hello World "invisible" in Windows (C/C++)

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

做了一些研究后,我再次陷入困境。网上有人声称,只要创建一个 win32 应用程序,就不会出现图形指示。

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

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

//code
return 0;
}

所以在main中输入的代码不会显示。我真的不明白他们的意思是什么,但例如:

#include <windows.h>

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

    while (1) {
    }
}

这个程序弹出一个 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;

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

最佳答案

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

转到项目属性>配置属性>链接器>系统>子系统并将其设置为Windows。如果您执行此操作并运行程序,例如将程序置于无限循环中,则必须从任务管理器中终止它。

我不知道如何在 GCC 上执行此操作。 Gerald 在评论中告诉我使用 --subsystem,windows-mwindows 将为 GCC 执行此操作。请注意,-mwindows 也链接 GDI 库。

关于使用 C/C++ 创建 "invisible"windows 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9492470/

相关文章:

代码错误地计算辅音。如何解决这个问题?

c++ - 使用 __asm 从十六进制偏移调用函数

windows - 如何获取 IShellItem 的系统图像列表图标索引?

css - 浏览器滚动截断内容

iphone - 从其他应用返回到应用后会触发哪些功能?

c - C 中的静态变量不是 "working"

c - 如何在for循环中输入if语句?

c - 为什么宏函数ListView_GetSelectedColumn()不起作用?它什么也不返回

java - 更改 Windows 中特定文件的图标(例如 Dropbox)

multithreading - 显式加入 python 线程?