CCR
1
RT, 在一开始学c的时候,咱们都知道
#include <stdio.h>
int main(int argc, char *argv[]){
printf("hello world");
return 0;
}
上面这个编译出来的main.exe(只说windows平台)是会显示一个黑乎乎的窗口的,但是有时候不需要这个黑色窗口,仅凭快捷键与弹出的通知与用户交互,这时候怎么隐藏这个黑色控制台窗口呢?
不同编译器
MSVC
#include <windows.h>
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
GNU
编译时添加参数 -mwindows 即可
Clang
现在问题来了,clang怎么办呢……
奇技淫巧
使用vbs,bat等其他语言创建一个启动程序,使用windows api启动main.exe……(不予考虑,又丑陋又恶心的实现方案)
codehz
(Code Hz)
2
最佳答案:用clang-cl,然后抄msvc的
(啥,你的clang没有clang-cl?
那
-Wl,--subsystem,windows
2 个赞
w568w
(w568w)
3
没有研究过如何添加,不过有一个简单提示:
问题本质是需要指定 PE 可执行文件头部的 Subsystem 字段为 IMAGE_SUBSYSTEM_WINDOWS_GUI(The Windows graphical user interface (GUI) subsystem)。
参考:
L11
(漢故征西將軍曺侯)
4
你写的不就是控制台应用程序?不显示控制台窗口怎么看结果呢?
而且使用-mwindows时入口点是WinMain,严格说来应该是编译不能通过,而且也不能使用stdin和stdout
1 个赞
添加subsystem:windows会让入口变成mainWindows,也就是从console app变成GUI app,相关的stdin、stdout、stderr通通不会显示。
CCR
7
随手记一下,如果使用Rust,不显示控制台(隐藏控制台黑窗口)的命令如下
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
你用一些现成的 Qt, wtl, imgui, duilib 等等专业的 GUI 工具箱来开发应用程序,他们的标准流程里面都会帮你编译成没有 console 窗口的应用。
学软件和学数学一样。要找到正道,学起来才快。如果你要搞 GUI 开发,推荐你直接上手 QtWidgets. 大概半年时间就能入门,并且通常能够开发出自己想要的东东出来了。