目录
1.代码运行时动态隐藏
依赖 Windows API,包含头文件 <windows.h>,两种常用 API:
1.隐藏控制台窗口(窗口看不见,但进程仍绑定控制台)
cpp
#include <windows.h>
#include <iostream>
int main()
{
// 获取控制台窗口句柄
HWND hWnd = GetConsoleWindow();
// SW_HIDE 隐藏;SW_SHOW 恢复显示
ShowWindow(hWnd, SW_HIDE);
// 你的业务逻辑
Sleep(5000);
return 0;
}
2.分离控制台(彻底解绑控制台,关闭 CMD 不影响程序)
cpp
#include <windows.h>
int main()
{
FreeConsole(); // 脱离控制台终端
MessageBox(NULL, L"控制台已分离", L"提示", MB_OK);
Sleep(5000);
return 0;
}
缺点:程序运行瞬间会闪现一下黑框,因为操作系统先创建控制台再执行隐藏代码。
2.编译层面彻底移除控制台
修改链接器子系统为Windows 窗口程序,从根源不生成 CMD 黑窗口。
2.1.MSVC (VS 编译器)
代码添加编译指令(不用改项目配置)
cpp
#include <windows.h>
// 链接器参数:子系统Windows,入口仍使用main
#pragma comment(linker, "/SUBSYSTEM:WINDOWS")
#pragma comment(linker, "/ENTRY:mainCRTStartup")
int main()
{
MessageBox(NULL, L"无控制台窗口", L"提示", MB_OK);
return 0;
}
2.2.MinGW (g++ 编译器)
编译时添加 -mwindows 参数:
cpp
g++ main.cpp -o app.exe -mwindows
2.3.CMake工程
CMake 内置属性 WIN32_EXECUTABLE,开启后自动配置链接器 /SUBSYSTEM:WINDOWS,保留 main() 入口不用改成 WinMain,编译出来直接无控制台黑窗,是 CMake 标准方案。
cpp
cmake_minimum_required(VERSION 3.16)
project(HideConsoleDemo)
# 生成可执行程序
add_executable(App main.cpp)
# 核心配置:开启Windows子系统,取消控制台黑框
set_target_properties(App PROPERTIES
WIN32_EXECUTABLE TRUE
)
原理:CMake 自动追加链接参数:
/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup,代码照常写int main()。
按需配置:Debug 调试保留黑框,Release 隐藏(常用)
调试时想看日志留控制台,发布版本隐藏:
cpp
add_executable(App main.cpp)
# Release隐藏控制台,Debug正常显示控制台
if (CMAKE_BUILD_TYPE MATCHES "Release|RelWithDebInfo|MinSizeRel")
set_target_properties(App PROPERTIES WIN32_EXECUTABLE TRUE)
endif()
不想用WIN32_EXECUTABLE,手动指定链接选项:
cpp
target_link_options(App PRIVATE
"/SUBSYSTEM:WINDOWS"
"/ENTRY:mainCRTStartup"
)
缺
/ENTRY:mainCRTStartup会报无法解析外部符号 WinMain。
3.总结
WIN32_EXECUTABLE TRUE= MSVC/SUBSYSTEM:WINDOWS,最优方案- 代码入口永远用
main,不用 WinMain - 只在 Windows 平台生效,Linux/Mac 编译不受该属性影响。
相关链接
- CMake 官网 CMake - Upgrade Your Software Build System
- CMake 官方文档:CMake Tutorial --- CMake 4.1.0-rc1 Documentation
- CMake 源码:https://github.com/Kitware/CMake
- CMake 源码:CMake · GitLab
- 中文版基础介绍: CMake 入门实战 | HaHack
- wiki: Home · Wiki · CMake / Community · GitLab
- Modern CMake 简体中文版: Introduction · Modern CMake