求助:如何隐藏控制台程序窗口?

fengbingchun
博客专家认证
2011-03-14 10:18:36
用vs2008 win32 console 编写了一个程序,然后编译成动态库,在MFC程序中调用,程序运行时常出现dos窗口,闪一下就没了,如何才能隐藏控制台程序窗口,使时不出现突闪的情况?
谢谢!望高手指点!
...全文
906 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2011-11-29
  • 打赏
  • 举报
回复

#include "stdafx.h"
#pragma comment(linker,"/subsystem:windows /entry:mainCRTStartup")

int main(int argc, _TCHAR* argv[])
{
while(1);
return 0;
}
fengbingchun 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 chzhn 的回复:]
将main或WinMain删除,指定编译选项为Dll,并且编写DLLMain函数。
[/Quote]

这样能防止突闪的情况吗?
chzhn 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 fengbingchun 的回复:]

引用 19 楼 chzhn 的回复:
将main或WinMain删除,指定编译选项为Dll,并且编写DLLMain函数。


这样能防止突闪的情况吗?
[/Quote]

当然可以
greex 2011-03-16
  • 打赏
  • 举报
回复
删除文件不要用system,C++语言提供这样的方法的吧。
Lactoferrin 2011-03-16
  • 打赏
  • 举报
回复 1
它们都没有搞清楚你的问题,黑框不是你的程序的,是cmd.exe的
fengbingchun 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 loaden 的回复:]
下面的方法适合VC编译器。

C/C++ code

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#include <iostream>

using namespace std;

int main()
{
cout << "Hello world!" <……
[/Quote]

谢谢,试过你说的,不过还是不行
「已注销」 2011-03-15
  • 打赏
  • 举报
回复
下面的方法适合VC编译器。

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#include <iostream>

using namespace std;

int main()
{
cout << "Hello world!" << endl;
return 0;
}


或者:ALT+F7后手动调整连接器子系统为subsystem:\windows解决问题。
GCC可用类似subsystem:\windows的方法来解决。

如果是MinGW编译器,则可以指定链接选项:-mwindows
delphiwcdj 2011-03-15
  • 打赏
  • 举报
回复
用start命令试试
start /min /b "" path\filename 可以让某个程序在打开的时候是以最小化方式运行.
fengqiao1999 2011-03-15
  • 打赏
  • 举报
回复
通过project配置修改链接方式:
VS支持两种链接方式,一种是console,一种是windows,你把console修改为windows连接方式就OK了。

fengbingchun 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qq282881515 的回复:]
你只是做了个DLL 怎么会闪出黑屏呢?
如果是打开某个应用程序 有好几种方法 百度吧!
[/Quote]

dll里面用到了system来删除文件夹,所以闪出黑屏
chzhn 2011-03-15
  • 打赏
  • 举报
回复
将main或WinMain删除,指定编译选项为Dll,并且编写DLLMain函数。
fengbingchun 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 lactoferrin 的回复:]
dll里面用到了system来删除文件夹,所以闪出黑屏
这个和什么子系统没关系,system("aaa")就是运行cmd.exe /c aaa
cmd.exe是console子系统的,你不能改变。
比如你system("rd c:\\a"),就换成WinExec("cmd.exe /c rd c:\\a",0);
但WinExec是被废弃的函数,所以应该使用CreateProcess,把d……
[/Quote]

谢谢!
Lactoferrin 2011-03-15
  • 打赏
  • 举报
回复
dll里面用到了system来删除文件夹,所以闪出黑屏
这个和什么子系统没关系,system("aaa")就是运行cmd.exe /c aaa
cmd.exe是console子系统的,你不能改变。
比如你system("rd c:\\a"),就换成WinExec("cmd.exe /c rd c:\\a",0);
但WinExec是被废弃的函数,所以应该使用CreateProcess,把dwCreationFlags设置为CREATE_NO_WINDOW即可
fengbingchun 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhao4zhong1 的回复:]
WinExec("cmd /c dir",SW_HIDE);
[/Quote]

谢谢,请问这句应该加在程序的什么地方呢?
sxqinge 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhao4zhong1 的回复:]
WinExec("cmd /c dir",SW_HIDE);
[/Quote]
学习,MARK
赵4老师 2011-03-14
  • 打赏
  • 举报
回复
WinExec("cmd /c dir",SW_HIDE);
QQ282881515 2011-03-14
  • 打赏
  • 举报
回复
你只是做了个DLL 怎么会闪出黑屏呢?
如果是打开某个应用程序 有好几种方法 百度吧!
fengbingchun 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhao4zhong1 的回复:]
引用 3 楼 fengbingchun 的回复:
引用 1 楼 zhao4zhong1 的回复:
WinExec("cmd /c dir",SW_HIDE);


谢谢,请问这句应该加在程序的什么地方呢?

在VC6新建Win32 Application、a simple application
// tmp.cpp : Defines the entry point for th……
[/Quote]

网上有的说WinExec只支持ANSI,不支持Unicode,是吗?
fengbingchun 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhao4zhong1 的回复:]
引用 3 楼 fengbingchun 的回复:
引用 1 楼 zhao4zhong1 的回复:
WinExec("cmd /c dir",SW_HIDE);


谢谢,请问这句应该加在程序的什么地方呢?

在VC6新建Win32 Application、a simple application
// tmp.cpp : Defines the entry point for th……
[/Quote]

谢谢!我运行环境是vs2008,按照你说的我试试看
pathuang68 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhao4zhong1 的回复:]

引用 3 楼 fengbingchun 的回复:
引用 1 楼 zhao4zhong1 的回复:
WinExec("cmd /c dir",SW_HIDE);


谢谢,请问这句应该加在程序的什么地方呢?

在VC6新建Win32 Application、a simple application
// tmp.cpp : Defines the entry point for t……
[/Quote]
学习了!
加载更多回复(2)

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧