VC中如何编译无Console窗口的Console程序

转载 2008年09月28日 14:23:00

 

 toplogo.gif评论:


 

doc.gif Kelvin_UV:为什么不直接用Win32 Application呢, 既然控制台程序不要命令行窗口, 又为什么用控制台程序呢?
(发表于2004-9-11 21:28:00)

doc.gif hangwire:有时需要用控制台程序做一些没有用户交互的后台批量处理,不想显示命令行窗口。
(发表于2004-9-11 22:35:00)

doc.gif Kelvin_UV:不明白!, 这样做不是更简单吗?

#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib") 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    PlaySound("SystemStart",NULL, SND_ALIAS|SND_SYNC);
    Sleep(50);
    PlaySound("SystemStart",NULL, SND_ALIAS|SND_SYNC);
    Sleep(50);
    PlaySound("SystemStart",NULL, SND_ALIAS|SND_SYNC);
    Sleep(50);
    
    return 0;
}

(发表于2004-9-11 23:23:00)

doc.gif hangwire:请问这样做,连接器如何设置?按照缺省设置link通不过。
(发表于2004-9-11 23:53:00)

doc.gif meteor135:为了不显示Console Window,必须使用/subsystem: windows Linker Option,
  但是一旦使用了它,
  如果不指定/entry:<function> Linker Option,Linker将查找WinMain作为entry point.
  此时只要为程序提供WinMain入口函数即可。
  如果不用WinMain而用main,就必须为Linker指定/entry:mainCRTStartup

  由此可见,具体方案有两个:
  
  方案1:

#pragma comment( linker, "/subsystem:windows" )
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR     lpCmdLine,
int       nCmdShow)
{
}

  方案2:

#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
int main(void)
{
}


(发表于2004-9-13 13:39:00)

doc.gif meteor135:综合方案(没多少实用价值):

    #define ENTRY_SCHEME 1 //控制使用何种方案的宏常量

    #if ENTRY_SCHEME==1
    #pragma message("------------main---------------")
    #pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
    int main( void )
    #else 
    #pragma message("-----------WinMain-------------" )
    #pragma comment( linker, "/subsystem:windows" )
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    #endif 
    {
    }

(发表于2004-9-13 13:41:00)

doc.gif s000792003:我有方法可以将一个原有的 DOS 程序变为看不见
先用 16 位编辑工具开了那个执行档
在位置 0x130~0x13f (通常是 0x13c 或 0x134) 的位置之间找个数值 03,将它变为02
原来就是这么简单喔 !!
(发表于2004-9-13 16:55:00)

doc.gif meteor135:楼上的方法果然没错,我把一个没有DOS窗口的程序,比如MFC编写的窗口程序用UltraEdit打开,然后把0x133~0x134的02改成03,然后保存,重新打开这个程序居然出现了黑窗口!为什么这个秘密之前没有人公开过呢?
(发表于2004-9-13 17:33:00)

doc.gif meteor135:上面我的说法有点错误,在MFC程序中,应该是0x144。
(发表于2004-9-13 17:35:00)

doc.gif GXHETAO:同意 Kelvin_UV 的話, 何必搞這麼麻煩, 如果只是為了說明你有多麼強, 我... ... ...
(发表于2004-9-15 12:27:00)

doc.gif wetwoo:你的那个程序根本就不是CUI程序,本质上就是GUI程序。
GUI应用程序的进入点是:WinMain/wWinMain,嵌入到可执行文件的启动函数是WinMainCRTStartup/wWinMainCRTStartup。
CUI应用程序的进入点是:main/wmain,嵌入到可执行文件的启动函数是mainCRTStartup/wmainCRTStartup。
(发表于2007-4-2 10:13:00)

..........................................................................

登陆后可以发表评论

btmlogo.gif  

windows下隐藏console窗口

1 问题想写一个程序,调用另外一个命令,双击运行时直接后台运行,执行时不弹出console黑窗口。2 解决方案最开始使用system( "your_cmd" );这样的方式,必然会有console窗口...
  • gogdizzy
  • gogdizzy
  • 2016年11月14日 19:18
  • 1267

求助(VC++) 隐藏Console窗口无效

怎么实现控制台窗口的隐藏
  • f1520107395
  • f1520107395
  • 2014年10月07日 20:19
  • 1387

Windows下Console和Win32程序差异

Windows下Console和Win32程序差异 标签:console win32 控制台 程序  原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、...
  • haiross
  • haiross
  • 2014年08月26日 13:55
  • 1140

VC创建无窗口的控制台程序

参考:http://blog.163.com/weiming886521365@126/blog/static/3311507420115292921827/#pragma comment(linke...
  • ClamReason
  • ClamReason
  • 2015年08月28日 09:29
  • 1868

VC程序重定向printf到console窗口

本方法简单易用,适用于VC6、VC.NET2003 假定你创建的VC应用程序叫做ImageFilter,那么只需添加如下代码即可: [1] 打开ImageFilter.cpp文件,增加...
  • dyzhen
  • dyzhen
  • 2014年02月26日 12:37
  • 1508

Console工程下如何不显示控制台黑窗口只显示Windows窗口

刚学习OpenGL,绘制图形的时候,如果不进行设置,运行的时候会先出现黑窗口再出现Windows窗口。 其实要去除控制台窗口非常简单,只需要修改工程设置,把子系统改成Windows,程序的入口点...
  • u011295617
  • u011295617
  • 2015年11月12日 17:28
  • 1274

如何隐藏win32 console application的console窗口

一    subsystem和可执行文件的启动LINK的时候需要指定/subsystem,这个链接选项告诉Windows如何运行可执行文件。我们知道用VC编写的程序,运行的时候是需要 C/C++运行库...
  • zhaozy55555
  • zhaozy55555
  • 2009年03月12日 11:47
  • 3358

Console程序和Dos程序的差别

主要有两方面差别: 制造方式:        在windows环境下得Dos Box中,或是在windows版本的各种C++编译器套件的整合环境(IDE)中,利用windows编译器.连接器做出来...
  • sheldon761642718
  • sheldon761642718
  • 2016年07月14日 09:25
  • 928

VC利用console调试和记录日志

#include //释放控制台窗口 FreeConsole(); //申请控制台窗口 AllocConsole(); //设置标题 SetConsoleTitle(TCHAR); //重定向输出...
  • czy463
  • czy463
  • 2015年06月05日 13:37
  • 967

如何让console程序以全屏窗口运行

有看到人问vc6,0编译生成的exe文件怎么样能让他全屏运行.
  • ClientsHome
  • ClientsHome
  • 2014年10月07日 00:30
  • 951
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC中如何编译无Console窗口的Console程序
举报原因:
原因补充:

(最多只允许输入30个字)