相关文章推荐
光明磊落的南瓜  ·  QT使用全局db,提示QSqlDatabas ...·  2 月前    · 
勤奋的长颈鹿  ·  matlab heatmap更改颜色 - ...·  1 年前    · 
还单身的熊猫  ·  Linux如何查找文件的创建时间_51CTO ...·  2 年前    · 
Code  ›  VC++ 隐藏控制台程序窗口-天翼云
云主机 控制台程序 天翼云 天翼
https://www.ctyun.cn/zhishi/p-171700
高大的春卷
2 年前

最新活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
查看全部活动
热门活动
  • 618翼购节 HOT S2云主机1核2G只要33.9元起/3个月
  • 云上钜惠 HOT 限制抢购 爆款云主机畅享3个月只要33元起!
  • 中小企业上云场景组合购 NEW 建站、域名等场景一站式购齐,组合购9元起!
  • 天翼云·创新直播间 NEW 与专家共同解读云计算领域前沿趋势
  • 新客特惠 NEW 热销云主机秒杀低至0.85折!
  • 天翼云电脑专场 HOT 移动办公神器天翼云电脑4核8G畅享3个月只要130元起!
  • 云主机特惠 HOT 新老同享云主机2.5折起,升级高性能云主机更划算!
免费活动
  • 企业免费试用专区 HOT 数十款产品免费试用,完成企业实名认证领取2000元试用金!
  • 个人免费试用专区 HOT 完成个人实名认证即可获得1000元试用金!
  • 新客特惠 爆款云主机0.85折起
  • 云上安全专场 安全产品全场6折起!

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务。
进入甄选商城 进入云市场
办公协同
  • WPS云文档天翼云版 翼企云( License版) 天翼云企业云盘(标准服务版) 蓝信安全移动工作平台(SAAS) SSL证书 新域名服务 税务风控云 商企云财税(SAAS版) 翼云加速-标准版包月套餐 天翼云管家2.0 天翼云管家 翼备份(SaaS版)300G 智慧工厂_生产流程管理解决方案 天翼智慧工地 天翼全栈混合云敏捷版(软件) 天翼全栈混合云敏捷版(一体机)

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云技术合作伙伴
  • 天翼云OpenAPI中心 天翼云诸葛AI平台 天翼云EasyCoding平台
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云培训认证
  • 天翼云学堂 天翼云市场商学院
天翼云服务合作伙伴
  • 天翼云MSP合作伙伴
天翼云合作计划
  • 央企云合作计划
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴 天翼云甄选商城合作伙伴

开发者

开发者相关功能入口汇聚
技术社区
资源与工具
  • 天翼云OpenAPI EasyCoding敏捷开发平台 AI创作间
培训与认证
  • 天翼云学堂 天翼云认证

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • OpenAPI中心 客户支持计划

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云 天翼云4.0 天翼云APP 全球基础设施 分析师和白皮书 2023云生态大会 2022云生态大会 天翼云中国行 支持与服务 了解天翼云
    • 弹性云主机
    • 天翼云电脑(公众版)
    • 对象存储
    搜索发现
    弹性云主机 天翼云电脑(公众版) 对象存储 云硬盘 边缘安全加速平台 云专线CDA 服务器安全卫士 云堡垒机 关系数据库MySQL版 关系数据库PostgreSQL版
  • 站点切换
    • 中国站
  • 文档
  • 控制中心
  • 备案中心
  • 管理中心

VC++ 隐藏控制台程序窗口

首页 知识中心 软件开发 文章详情页

VC++ 隐藏控制台程序窗口

2023-3-22 阅读次数:75

转自:http://hi.baidu.com/sicceer/blog/item/d9c35a810d15c4c8bc3e1ec8.html

设置
#pragma comment( linker, "/subsystem:/ "windows/ " /entry:/ "mainCRTStartup/ " " ) // 设置入口地址
这样就ok了


在控制台程序中隐藏控制台窗口!
大家都知道,当编写一个win32 console application时,当运行此类程序的时候
默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只想在程序
中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自
动退出.

下面就介绍一下,如何隐藏win32 console application的console窗口

因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译
器的链接开关选项(也就是linker选项).

首先我们来看一下linker的 /subsystem 选项

该选项的语法形式如下:
/SUBSYSTEM:{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|
EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|WINDOWSCE}
[,major[.minor]]

这个链接选项告诉操作系统如何运行可执行文件

CONSOLE:
win32 字符模式应用程序,此种类型的应用程序在运行的时候会产生一个类似DOS
窗口的控制台窗口,如果在应用程序的主函数为main()或者wmain(),在默认情况下
该应用程序就是一个控制台应用程序

Extensible Firmware Interface
和CPU具体架构相关的一个参数选项,并不常用,在这里暂不详细介绍.
如果对此有兴趣的可以访问intel主页来查看相关内容

NATIVE;
设备驱动器选项,如果/DRIVER:WDM选项被设定的话,该链接选项(NATIVE)就为默认选项

POSIX:
在windows NT 种运行在POSIX子系统上的应用程序

WINDOWS:
该类型的应用程序不产生console窗口,该类型的应用程序的窗口由用户自己创建,简而言之
就是一个标准的Win32 application,其入口地址为WinMain()函数或者wWinMain()函数的地址
如果你在应用程序种定义的主函数为WinMain或者wWinMain,在默认情况下该应用程序就是一个
Win32 Application !

WINDOWSCE:
运行在windows CE上的应用程序

major and minor (optional):
主版本号和次版本号,该选项为可选,该选项为0~65535之间的十进制整数

从上面可以看出如果我们建立一个win32 console application的话,linker的/subsystem选项应该为
CONSOLE,可以在VC开发环境的project-> setting-> link-> project option中看到!

接下来我们再看看应用程序是如何运行的!
我们知道用VC编写的程序,运行的时候是需要 C/C++运行库支持的.当我们运行一个C/C++程序的时候
链接器会首先寻找应用程序的启动函数,例如:
如果你建立了一个console程序的话,编译器得链接开关会是以下这种形式
/subsystem: "console " /entry: "mainCRTStartup " (ANSI)
/subsystem: "console " /entry: "wmainCRTStartuup " (UNICODE)

如果你建立了一个win32 application,编译器得链接开关则会是一下形式
/subsystem: "windows " /entry: "WinMain " (ANSI)
/sbusystem: "windows " /entry: "wWinMain " (UINCODE)

上面的两种形式可以再project-> setting-> link-> project option中看到
上面的subsystem和entry并不需要都设置,如果你只设置了/subsystem: "console "
的话,那么默认的entry开关在默认情况下应为/entry: "mainCRTStartup "
反之,如果你在应用程序中定义了main函数的话,默认情况下,你的/subsystem开关
应该为/system: "console "


在默认情况下/subsystem 和/entry开关是匹配的,也就是
console对应mainCRTStartup或者wmainCRTStartup
windows对应WinMain或者wWinMain

但是我们也可以通过手动改动的方式使他们不匹配

例如我们可以这样改动

#pragma comment( linker, "/subsystem:/ "windows/ " /entry:/ "mainCRTStartup/ " " ) // 设置入口地址

int main(int argc, char* argv[])
{
MessageBox(NULL, "hello ", "Notice ", MB_OK);
return 0;
}

在默认情况下链接器看到/subsystem下是windows选项的时候,它会自动寻找WinMain或者wWinMain

但我们强制指定入口地址,这样运行程序的时候默认的console窗口就会隐藏!

上面是在代码中使用#pragma指令来设置,还有一种就是直接在开发环境的
project-> setting-> link-> project option中手工改动!1:如果console程序已经写好了,不能改了,也可以。写一个API程序,不要画窗口,然后用CreateProcess调用写好的console程序,把属性设成SW_HIDE即可。
2:不能用控制台来写(CONSLOE),要用WINMAIN做入口就可以了,不画窗口,别人就都看不见了. 你只用想想办法把你的进程在任务栏里面隐藏住就可以.
3:如果是console程序,用API函数GetStdHandle()获得控制台程序的窗口句柄,然后在隐藏窗口
4://这一句隐藏控制台
#pragma   comment(linker,   "/subsystem:/"windows/"   /entry:/"mainCRTStartup/""   )
你要写控制台程序就用这个
在控制台程序中隐藏控制台窗口!

转自:http://blog.csdn.net/lostangels/archive/2008/01/06/2027642.aspx

操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点实际上是由连接程序设置的,不同的连接器选择的入口函数也不尽相同。在VC++下,连接器对控制台程序设置的入口函数是 mainCRTStartup,mainCRTStartup 再调用你自己编写的 main 函数;对图形用户界面(GUI)程序设置的入口函数是 WinMainCRTStartup,WinMainCRTStartup 调用你自己写的 WinMain 函数。而具体设置哪个入口点是由连接器的“/subsystem:”选项参数确定的,它告诉操作系统如何运行编译生成的.EXE文件。可以指定四种方式:“CONSOLE|WINDOWS|NATIVE|POSIX”如果这个选项参数的值为“WINDOWS”,则表示该应用程序运行时不需要控制台,有关连接器参数选项的详细说明请参考 MSDN 库。

以下四种组合,可以实现console和windows模式的混合,可以达到不弹出DOS窗口的效果,也可以达到在Windows程序中向控制台输出printf信息了。
#pragma comment( linker, "/subsystem:windows /entry:WinMainCRTStartup" )
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )

#pragma comment( linker, "/subsystem:console /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:WinMainCRTStartup" )


int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR     lpCmdLine,
int       nCmdShow)
{
// ... ...
}

int main(void)
{
// ... ...
}

版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/fengbingchun/article/details/6246123,作者:fengbingchun,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

上一篇: 提高C++性能的编程技术笔记:跟踪实例+测试代码

下一篇: Go 语言入门很简单 -- Go 语言解析JSON #私藏项目实操分享#

相关文章

2023-6-16

pfSense启用控制台访问保护

为了加强对pfSense控制台的保护,可以在pfSense中设定密码保护。导航到系统>高级选项>管理员访问,转到页面底部,选中“密码保护控制台菜单”。单击保存,并启用配置。这时再访问pfSense控制台,会要求输入登录信息。

pfSense
2023-3-22

控制台连接数据库乱码问题

控制台(cmd.exe)连接数据库乱码用Navicat for MySQL查出一条记录 数据库编码正常,从控制台查出来乱码 出现了这样的问题,去找解决方案,百度叫你这样 在或者这样 不知道你的问题用上面的方法能不能解决,反正我是没解决!!

作者介绍

天翼云小翼
天翼云用户

文章

19327

阅读量

857025

查看更多

热门标签

python spring SpringBoot Python springboot javascript linux mysql Spring
查看更多

相关产品

弹性云主机

随时自助获取、弹性伸缩的云服务器资源

天翼云电脑(公众版)

便捷、安全、高效的云电脑服务

对象存储

高品质、低成本的云上存储服务

云硬盘

为云上计算资源提供持久性块存储

推荐助力领好礼 邀请好友完成推荐任务 最高可得千元电信卡
查看详情
  • 7*24小时售后
  • 无忧退款
  • 免费备案
  • 专家服务
售前咨询热线
400-810-9889转1
  • 天翼云APP 微信公众号
服务与支持
  • 备案中心
  • 售前咨询
  • 智能客服
  • 自助服务
  • 工单管理
  • 客户公告
账户管理
  • 管理中心
  • 订单管理
  • 余额管理
  • 发票管理
  • 充值汇款
  • 续费管理
快速入口
  • 文档中心
  • 最新活动
  • 免费试用
  • 安全专区
  • 信任中心
  • 天翼云学堂
云网生态
  • 甄选商城
  • 渠道合作
  • 云市场合作
了解天翼云
  • 关于天翼云
  • 天翼云APP
  • 服务案例
  • 新闻资讯
  • 联系我们
  • 校园招聘
热门产品
  • 弹性云主机
  • 边缘安全加速平台
  • 天翼云电脑
  • 天翼云手机
  • 关系型数据库
  • 对象存储
  • 云硬盘
  • Web应用防火墙
  • 服务器安全卫士
  • 天翼云办公
热门推荐
  • 云服务备份
  • 云空间
  • 全站加速
  • 安全加速
  • 超融合服务-iStack
  • 智能边缘云
  • 应用编排服务
  • 微服务引擎
  • 共享流量包
更多推荐
  • web应用防火墙
  • 密钥管理
  • 等保咨询
  • 安全专区
  • 应用运维管理
  • 云日志服务
  • 云网融合
  • 云搜索服务
  • 数据湖探索
  • 数据仓库服务
友情链接
  • 天翼云盘
  • 天翼企业云盘
  • 189邮箱
  • 中国电信集团
©2023 京ICP备 2021034386号
 
推荐文章
光明磊落的南瓜  ·  QT使用全局db,提示QSqlDatabasePrivate::database: requested database does not belong to the calling thread.-
2 月前
勤奋的长颈鹿  ·  matlab heatmap更改颜色 - CSDN文库
1 年前
还单身的熊猫  ·  Linux如何查找文件的创建时间_51CTO博客_linux修改文件创建时间
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号