如何隐藏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]][www.openeim.com]

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

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中手工改动!

如何隐藏win32 console application的console窗口相关推荐

  1. Win32 Application和Win32 Console Application的区别

    Win32 Application和Win32 Console Application都是工作在32位Windows环境的程序. 其中Win32 Application就是普通的常见的窗口应用程序,当 ...

  2. vc++6.0中创建工程时选Win32 Application和Win32 console Application的区别

    我想好多朋友在刚使用vc++6.0创建工程时不知道是选Win32 Application或是选Win32 console Application,有的就选择了 Win32 Application,然而 ...

  3. Win32 Application 、Win32 Console Application、MFC工程项目

    Win32 Application和Win32 Console Application 都是工作在32位Windows环境的程序. Win32  Application 是标准 windows程序,完 ...

  4. 在VC 6.0里Win32 Application和Win32 console Application的区别

    我们用Visual C++在创建工程的时候有Win32 Application和Win32 console Application,下面我们就了解下他们的区别. 在VC 6.0里Win32 Appli ...

  5. 隐藏win32控制台程序的窗口

    有时侯写一个控制台程序,不需要在前台出现类似DOS窗口的console窗口,这就要隐藏它:隐藏它很简单,只需在程序前面加上 #pragma comment( linker, "/subsys ...

  6. Qt Console Application 与 Qt GUI Application互转

    在桌面开发中,总的来说,包含两种类型的应用程序:无界面的Console程序和有界面的GUI程序.Qt也不例外,包含Qt Console Application和Qt GUI Application. ...

  7. C# Console Application 带参数调试

    1. 双击 Console Application 的 "Properties" 2. 单击左侧 "Debug"("调试")选项卡 3. 在 ...

  8. 在C#中调用Win32函数EnumWindows枚举所有窗口。

    原文 http://www.cnblogs.com/mfm11111/archive/2009/06/30/1514322.html 开发旺旺群发软件,难点及重要技术点分析(一) 一.        ...

  9. 图解C# Console 输出和Console相关编程复习总结

    1 基本控制台输出 首先进入 SharpDevelop ,新建一个控制台工程: SharpDevelop简介: http://blog.csdn.net/bcbobo21cn/article/deta ...

最新文章

  1. 前后端分离的探索(四)
  2. (二)pycharm上创建虚拟环境--virtualenv
  3. centos7 开启 关闭 NetworkManager
  4. 数据库学习笔记6--MySQL多表查询之外键、表连接、子查询、索引
  5. 树的宽度 递归法和非递归法
  6. 量子计算机迷宫,一个简单的例子,带你读懂量子计算机
  7. RIDE在linux系统下运行,在linux上执行robotframework用例
  8. hystrix 源码 线程池隔离_“池”的思想:从java线程池到数据库连接池的源码解读(1)...
  9. 机器学习之SVM调参实例
  10. ZooKeeper 基本操作
  11. Leetcode-233-数字1的个数
  12. Sublime Text 模板插件SublimeTmpl
  13. Maven Pom文件详解
  14. UL电子线标准规格说明书
  15. linux 命令查看内存和cpu信息
  16. linux6 64位,CentOS 6.0 X64官方正式版系统(64位)
  17. 阿里云香港服务器解析后域名无法访问
  18. 全球首款机场专用自动驾驶纯电动大巴在东京实地测试
  19. 聊聊这8种单例模式的优缺点
  20. 百度云链接使用迅雷下载时提示有误的问题解决

热门文章

  1. cdn需要备案吗_cdn需要备案么
  2. ElasticSearch和solr的对比
  3. 使用 bind 搭建DNS 服务器
  4. MyBatis嵌套查询解析
  5. 2020年中国餐饮配送机器人行业研究报告
  6. websocket 业务提醒 .net_7年.NET 面试 Java 的尴尬历程
  7. 虚拟专题:知识图谱 | 频谱知识图谱:面向未来频谱管理的智能引擎
  8. 作者:陶克(1988-),男,博士,北京系统工程研究所助理研究员。
  9. 作者:男,博士,西南财经大学经济数学学院讲师、硕士生导师
  10. 洛谷入门题P1422、P1085、P1089、P1909题解(Java语言描述)