屏蔽控制台应用程序的窗口#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
2015-08-06 16:05
477 查看
众所周知,控制台应用程序一般都会显示一个控制台窗口(虚拟DOS窗口),但很多时候控制台程序的执行逻辑根本不需要与用户进行交互,所以显示这个难看的窗口纯属多余,那么如何将它屏蔽掉呢?下面我向大家介绍一种方法。
操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点实际上是由连接程序设置的,不同的连接器选择的入口函数也不尽相 同。在VC下,连接器对控制台程序设置的入口函数是 mainCRTStartup,mainCRTStartup 再调用你自己编写的 main 函数;对图形用户界面(GUI)程序设置的入口函数是 WinMainCRTStartup,WinMainCRTStartup 调用你自己写的 WinMain 函数。
具体设置哪个入口点是由连接器的“/subsystem:”选项参数确定的,它告诉操作系统如何运行编译生成的.EXE文件。可以指定四种方 式:“CONSOLE|WINDOWS|NATIVE|POSIX”如果这个选项参数的值为“WINDOWS”,则表示该应用程序运行时不需要控制台,有 关连接器参数选项的详细说明请参考 MSDN 库。
下面我们将通过预编译指令来对编译器和连接器进行设置,从而达到我们的目的:例子代码运行后播放Windows系统启动声音三次,然后退出,运行后不会显示控制台窗口。
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib") // 告诉连接器与这个库连接,因为我们要播放多媒体声音
#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup") //
设置连接器选项
int main(void)
{
PlaySoundA("SystemStart",NULL, SND_ALIAS|SND_SYNC);
Sleep(50);
PlaySoundA("SystemStart",NULL, SND_ALIAS|SND_SYNC);
Sleep(50);
PlaySoundA("SystemStart",NULL, SND_ALIAS|SND_SYNC);
Sleep(50);
return 0;
}
在 IDE 环境中新建一个空的控制台程序,将上述代码添加到工程中,编译运行。
注:error C2664: “PlaySoundW”: 不能将参数 1 从“const char [12]”转换为“LPCWSTR”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换(使用PlaySound失败,参数转换出错)
操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点实际上是由连接程序设置的,不同的连接器选择的入口函数也不尽相 同。在VC下,连接器对控制台程序设置的入口函数是 mainCRTStartup,mainCRTStartup 再调用你自己编写的 main 函数;对图形用户界面(GUI)程序设置的入口函数是 WinMainCRTStartup,WinMainCRTStartup 调用你自己写的 WinMain 函数。
具体设置哪个入口点是由连接器的“/subsystem:”选项参数确定的,它告诉操作系统如何运行编译生成的.EXE文件。可以指定四种方 式:“CONSOLE|WINDOWS|NATIVE|POSIX”如果这个选项参数的值为“WINDOWS”,则表示该应用程序运行时不需要控制台,有 关连接器参数选项的详细说明请参考 MSDN 库。
下面我们将通过预编译指令来对编译器和连接器进行设置,从而达到我们的目的:例子代码运行后播放Windows系统启动声音三次,然后退出,运行后不会显示控制台窗口。
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib") // 告诉连接器与这个库连接,因为我们要播放多媒体声音
#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup") //
设置连接器选项
int main(void)
{
PlaySoundA("SystemStart",NULL, SND_ALIAS|SND_SYNC);
Sleep(50);
PlaySoundA("SystemStart",NULL, SND_ALIAS|SND_SYNC);
Sleep(50);
PlaySoundA("SystemStart",NULL, SND_ALIAS|SND_SYNC);
Sleep(50);
return 0;
}
在 IDE 环境中新建一个空的控制台程序,将上述代码添加到工程中,编译运行。
注:error C2664: “PlaySoundW”: 不能将参数 1 从“const char [12]”转换为“LPCWSTR”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换(使用PlaySound失败,参数转换出错)
相关文章推荐
- 接收对 http://192.168.1.18:8001/ObtainData/Service 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。
- HDU 5363 Key Set(2015 Multi-University Training Contest 6 2015多校联合)
- Contains Duplicate III
- 杭电1702ACboy needs your help again!
- RAID 5
- Dell-硬件Raid详细图解步骤
- NSSearchPathForDirectoriesInDomains
- constraint的用法
- Xcode6 svn check out项目出现“The operation couldn’t be completed. (NSURLErrorDomain error -1012.)”的解决方案
- 2015 Multi-University Training Contest 5(HDOJ5351)
- no project are available for deployment to this server&n
- svn cleanup failed–previous operation has not finished 解决方法
- (暴力枚举) UVa 10976 Fractions Again?!
- UVa 10986 Sending email (最短路+Dijkstra队列优化)
- poj3216Repairing Company 二分匹配之最小路径覆盖+floyd
- opencontrail本地编译定义标签
- Codeforces Round #Pi (Div. 2)567A Lineland Mail(模拟)
- tair分布式缓存
- 2015 Multi-University Training Contest 5 hdu 5348 MZL's endless loop
- http://blog.csdn.net/xiaanming/article/details/17483273