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

时间:2022-09-02 22:13:22
用vs2008  win32 console 编写了一个程序,然后编译成动态库,在MFC程序中调用,程序运行时常出现dos窗口,闪一下就没了,如何才能隐藏控制台程序窗口,使时不出现突闪的情况?
谢谢!望高手指点!

24 个解决方案

#1


WinExec("cmd /c dir",SW_HIDE);

#2


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

学习,MARK

#3


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


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

#4


网上说有用#pragma comment(linker,"/subsystem:windows /entry:mainCRTStartup")来解决的,可是试了几次都不成功,什么原因呢?

#5


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


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

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

#include "stdafx.h"

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    // TODO: Place code here.
    WinExec("cmd /c dir c:\\new\\*.txt >c:\\new\\txtlist",SW_HIDE);
    return 0;
}
测试通过。
不过在DLL里面调用不知道有没有问题。


#6


该回复于2011-03-14 16:58:58被版主删除

#7


引用 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……

学习了!

#8


引用 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……


谢谢!我运行环境是vs2008,按照你说的我试试看

#9


引用 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……


网上有的说WinExec只支持ANSI,不支持Unicode,是吗?

#10


你只是做了个DLL  怎么会闪出黑屏呢?
如果是打开某个应用程序 有好几种方法  百度吧!

#11


引用 10 楼 qq282881515 的回复:
你只是做了个DLL 怎么会闪出黑屏呢?
如果是打开某个应用程序 有好几种方法 百度吧!


dll里面用到了system来删除文件夹,所以闪出黑屏

#12


通过project配置修改链接方式:
VS支持两种链接方式,一种是console,一种是windows,你把console修改为windows连接方式就OK了。

#13


用start命令试试
start /min /b "" path\filename 可以让某个程序在打开的时候是以最小化方式运行.

#14


该回复于2011-03-15 10:28:17被版主删除

#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

#16


引用 15 楼 loaden 的回复:
下面的方法适合VC编译器。

C/C++ code

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

using namespace std;

int main()
{
    cout << "Hello world!" <……


谢谢,试过你说的,不过还是不行

#17


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即可

#18


引用 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……


谢谢!

#19


将main或WinMain删除,指定编译选项为Dll,并且编写DLLMain函数。

#20


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


这样能防止突闪的情况吗?

#21


它们都没有搞清楚你的问题,黑框不是你的程序的,是cmd.exe的

#22


删除文件不要用system,C++语言提供这样的方法的吧。

#23


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


这样能防止突闪的情况吗?


当然可以

#24



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

int main(int argc, _TCHAR* argv[])
{
while(1);
return 0;
}

#1


WinExec("cmd /c dir",SW_HIDE);

#2


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

学习,MARK

#3


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


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

#4


网上说有用#pragma comment(linker,"/subsystem:windows /entry:mainCRTStartup")来解决的,可是试了几次都不成功,什么原因呢?

#5


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


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

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

#include "stdafx.h"

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    // TODO: Place code here.
    WinExec("cmd /c dir c:\\new\\*.txt >c:\\new\\txtlist",SW_HIDE);
    return 0;
}
测试通过。
不过在DLL里面调用不知道有没有问题。


#6


该回复于2011-03-14 16:58:58被版主删除

#7


引用 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……

学习了!

#8


引用 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……


谢谢!我运行环境是vs2008,按照你说的我试试看

#9


引用 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……


网上有的说WinExec只支持ANSI,不支持Unicode,是吗?

#10


你只是做了个DLL  怎么会闪出黑屏呢?
如果是打开某个应用程序 有好几种方法  百度吧!

#11


引用 10 楼 qq282881515 的回复:
你只是做了个DLL 怎么会闪出黑屏呢?
如果是打开某个应用程序 有好几种方法 百度吧!


dll里面用到了system来删除文件夹,所以闪出黑屏

#12


通过project配置修改链接方式:
VS支持两种链接方式,一种是console,一种是windows,你把console修改为windows连接方式就OK了。

#13


用start命令试试
start /min /b "" path\filename 可以让某个程序在打开的时候是以最小化方式运行.

#14


该回复于2011-03-15 10:28:17被版主删除

#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

#16


引用 15 楼 loaden 的回复:
下面的方法适合VC编译器。

C/C++ code

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

using namespace std;

int main()
{
    cout << "Hello world!" <……


谢谢,试过你说的,不过还是不行

#17


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即可

#18


引用 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……


谢谢!

#19


将main或WinMain删除,指定编译选项为Dll,并且编写DLLMain函数。

#20


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


这样能防止突闪的情况吗?

#21


它们都没有搞清楚你的问题,黑框不是你的程序的,是cmd.exe的

#22


删除文件不要用system,C++语言提供这样的方法的吧。

#23


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


这样能防止突闪的情况吗?


当然可以

#24



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

int main(int argc, _TCHAR* argv[])
{
while(1);
return 0;
}