隐藏控制台程序的dos窗口
有时侯写一个控制台程序,不需要在前台出现类似DOS窗口的console窗口,这就要隐藏它;隐藏它很简单,只需在程序前面加上
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
就可以了。
此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是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(),在默认情况下该应用程序就是一个控制台应用程序
WINDOWS:类型的应用程序不产生console窗口,该类型的应用程序的窗口由用户自己创建。简而言之就是一个标准的Win32 application,其入口地址为WinMain()函数或者wWinMain()函数的地址。如果你在应用程序中定义的主函数为WinMain或者wWinMain,在默认情况下该应用程序就是一个 Win32 Application。
从上面可以看出如果我们建立一个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\"" ) // 设置入口地址
但我们强制指定入口地址,这样运行程序的时候默认的console窗口就会隐藏!
上面是在代码中使用#pragma指令来设置,还有一种就是直接在开发环境的
project->setting->link->project option中手工改动!
隐藏控制台程序的dos窗口相关推荐
- 隐藏控制台程序的窗口
网上有很多的例子都说可以修改linker的subsystem熟悉来实现. #pragma comment( linker, "/subsystem:\"windows\" ...
- 隐藏控制台(console)窗口
隐藏控制台(console)窗口 #pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" ) // ...
- powershell 调用API显示或隐藏指定程序的主窗口
powershell 调用API显示或隐藏指定程序的主窗口 001. 前言 一同事碰上这种情况:某个单实例的程序不知为何挂在后台运行,托盘中也找不到图标(一般是有的),但可以在任务管理器中看到该程序处 ...
- VC++ 隐藏控制台程序窗口
转自:http://hi.baidu.com/sicceer/blog/item/d9c35a810d15c4c8bc3e1ec8.html 设置 #pragma comment( linker, & ...
- 如何隐藏控制台程序的窗口
方法一:(会有闪一下黑屏) 在main入口处调用一下FreeConsole ()试试 要显示的时候调用一下AllocConsole ()就可以了 方法二 我说的两个缺点 1.可 ...
- tomat服务器启动startup.bat程序,解决dos窗口中文乱码问题
安装tomcat后,解压之后,在安装包的bin目录的 startup.bat程序点击启动时,电脑弹出的dos窗口的信息中文乱码 . 解决方案步骤: 1.找到tomcat安装包下的conf目录下的log ...
- 计算机怎么隐藏应用程序,在窗口中隐藏 RemoteApp 程序弹出窗口
修补程序信息 可以从 Microsoft 获得受支持的修复程序.然而,此修补程序仅用于解决本文中描述的问题.此修复程序仅适用于遇到本文中描述的问题的系统.此修补程序可能会接受进一步的测试.因此,如果这 ...
- C++ 控制台程序,窗口程序,静态库,动态库的区别
创建C++程序 控制台程序 创建完成发现编译器给我们生成了一个.cpp文件,并且存在main函数(说明可以运行) 按F5编译链接并运行 出现DOS窗口(但我们说写与窗口相关的代码,说明是操作系统提供 ...
- 关于如何用od反汇编win32 控制台程序
*********************************************************** 如何用od反汇编win32 控制台程序(类似dos程序)呢? ********* ...
最新文章
- Depends, python2.7-minimal (= 2.7.15_rc1-1) 问题解决方法使用 aptitude 安装以及与 apt-get 的区别
- 关于ccflow的编译错误
- Design Pattern Strategy C
- php和python哪个学起来简单一点-python和php哪个容易学
- Dubbo生产者消费者配置
- Django model反向关联名称的方法(转)
- visual studio可以开发python吗_Visual Studio上开发Python六大功能
- Struts2中 Path (getContextPath与basePath)
- 绝地求生大逃杀,改配置
- 跨平台、跨语言应用开发工具,Elements 介绍
- 质数之和c语言编程,C程序检查一个数字是否可以表示为两个质数之和
- vs2017修改服务器地址大全,vs2017更改默认pip安装服务器地址
- 30分钟 带你浅入seajs源码
- 操作系统概念第四章部分作业题答案
- 计算机word表格求和怎么操作,Word中的表格如何自动求和
- 微调电位器命名规则_电位器
- 大宗商品交易平台支持多种交易模式,你了解多少?
- Spring5基础知识
- BT结束,高宽带有何用?
- 常见软件设计原则总结
热门文章
- html的鼠标手怎么去掉,flex htmlText属性和Label设置鼠标手形状
- 你知道map,filter,sort,reduct,every, some 的用法吗?
- 如何用计算机求素数,在线质数(素数)计算器
- Python爬虫-安某某客新房和二手房
- 从网课安全到多场景挑战,网易云信构建全方位安全合规屏障
- C语言_钩子函数(回调函数)
- 换挡周期下,谁将成为厨电品牌的进取者?
- beego使用API自动化文档生成swagger时,routers目录下无法生成commentsRouter_controllers.go文件
- 一文了解新型AMM方案Caspian,解决L2导致的流动性碎片化问题
- [PTA]练习5-3 数字金字塔