怎么样才能使基于console的程序创建或不显示新console?
在一个基于GUI的程序中创建一个新的进程,此新进程用于执行一个基于console的程序。 问题是怎么样才能使基于console的程序创建或不显示新console? 问题点数:300、回复次数:13Top
1 楼lgs(老臭虫)回复于 2000-09-23 19:00:00 得分 50
执行一个基于console的程序Windows会给它一个console窗口,你可以将窗口隐藏:
ShellExecute(NULL,_T("open"),_T("abc.exe"),NULL,NULL,SW_HIDE);Top
2 楼lu0(lu0.126.com)回复于 2000-09-23 19:26:00 得分 50
在WIN9X中,
tty
是CONSOLE的类名字.你可以搜索类tty的窗口并隐藏之.
http://lu0.126.comTop
3 楼Holly()回复于 2000-09-23 21:01:00 得分 50
STARTUPINFO StartInfo;
PROCESS_INFORMATION ProcessInfo;
memset( &StartInfo, 0, sizeof(STARTUPINFO) );
StartInfo.cb = sizeof(STARTUPINFO);
StartInfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
StartInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
StartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
StartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
StartInfo.wShowWindow = SW_HIDE; //隐藏窗口!
StartInfo.lpReserved = NULL;
StartInfo.cbReserved2 = 0;
StartInfo.lpReserved2 = NULL;
//szProcess 是要执行的程序的全路径(包含文件名),szCommandLine是程序的命令行参数;
if(!CreateProcess(szProcess, szCommandLine,
NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL,
&StartInfo, &ProcessInfo))
{
CloseHandle(m_hConnectRead);
CloseHandle(m_hConnectWrite);
m_dwErrorCode = ERROR_FAIL_CREATE_PROCESS;
return FALSE;
}
CloseHandle(ProcessInfo.hThread);
CloseHandle(m_hConnectWrite);
Top
4 楼Holly()回复于 2000-09-23 21:03:00 得分 50
Sorry!下列的语句没用!
...
CloseHandle(m_hConnectRead);
CloseHandle(m_hConnectWrite);
...
CloseHandle(m_hConnectWrite);
Top
5 楼FBStudio(飞鸟)回复于 2000-09-23 23:14:00 得分 50
对Holly的代码做一些修改
STARTUPINFO StartInfo;
PROCESS_INFORMATION ProcessInfo;
memset( &StartInfo, 0, sizeof(STARTUPINFO) );
StartInfo.cb = sizeof(STARTUPINFO);
StartInfo.dwFlags = STARTF_USESTDHANDLES¦STARTF_USESHOWWINDOW;
StartInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
StartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
StartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
StartInfo.wShowWindow = SW_HIDE; //隐藏窗口!
StartInfo.lpReserved = NULL;
StartInfo.cbReserved2 = 0;
StartInfo.lpReserved2 = NULL;
//szProcess 是要执行的程序的全路径(包含文件名),szCommandLine是程序的命令行参数;
if(!CreateProcess(szProcess, szCommandLine,
NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL,
&StartInfo, &ProcessInfo)) return FALSE;
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
Top
6 楼sanhan()回复于 2000-09-25 16:28:00 得分 0
Visual Studio 的集成环境调用cl,link等console程序的时候将输出送到一个
子窗口里而不创建新窗口。这又是怎么实现的呢?
hStdxxx设置为NULL为什么没有效果呢?Top
7 楼sanhan()回复于 2000-09-25 16:37:00 得分 0
另外,以上Console程序要在NT4.0下运行。Top
8 楼Holly()回复于 2000-09-25 19:05:00 得分 50
声明我的代码是我做的C的IDE项目中的代码!
...
CloseHandle(m_hConnectRead);
CloseHandle(m_hConnectWrite);
...
CloseHandle(m_hConnectWrite);
因为与项目相关,所以没有通用性,但这几句是将“集成环境调用cl,link等console程序的时候将输出送到一个子窗口里而不创建新窗口”的关键!
我的项目软件是WIN95/98,WINNT/2000系列操作系统全部可以使用的!
Top
9 楼FireAngel(土豆)回复于 2000-09-27 20:11:00 得分 0
既然用下面的方法可以实现:
ShellExecute(NULL,_T("open"),_T("abc.exe"),NULL,NULL,SW_HIDE);
干吗要用:
STARTUPINFO StartInfo;
PROCESS_INFORMATION ProcessInfo;
memset( &StartInfo, 0, sizeof(STARTUPINFO) );
StartInfo.cb = sizeof(STARTUPINFO);
StartInfo.dwFlags = STARTF_USESTDHANDLES¦STARTF_USESHOWWINDOW;
StartInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
StartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
StartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
StartInfo.wShowWindow = SW_HIDE; //隐藏窗口!
StartInfo.lpReserved = NULL;
StartInfo.cbReserved2 = 0;
StartInfo.lpReserved2 = NULL;
//szProcess 是要执行的程序的全路径(包含文件名),szCommandLine是程序的命令行参数;
if(!CreateProcess(szProcess, szCommandLine,
NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL,
&StartInfo, &ProcessInfo)) return FALSE;
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
Top
10 楼FireAngel(土豆)回复于 2000-09-27 20:18:00 得分 0
不就是将特定窗口隐藏吗,搞得这么复杂干什么??Top
11 楼FireAngel(土豆)回复于 2000-09-27 21:19:00 得分 0
不就是隐藏一个窗口吗?搞得这么乱七八糟干什么?Top
12 楼sanhan()回复于 2001-01-11 21:00:00 得分 0
抱歉让大家等这么久才给分。Top
相关问题
- GUI程序创建console窗口问题
- 请教,单文档或是多文档程序中,怎样才能在启动时不让程序自动创建新文档?
- 求救:怎样才能在console mode 的格式下编C++程序? 谢谢! 急!
- 调试console程序时,怎么才能传入命令行参数啊,急!!!
- 如何在GUI程序中监控自己创建的Console窗口的Close Button消息?高手进
- 我在程序中创建了十个动态控件BUTTON,怎样定义他们的ONCLICK,才能分别的响应不同的BUTTON!!!!
- 想了好久,没解决,郁闷!请教各位大虾,win32程序中怎样才能将菜单加进自己创建的窗口中去?
- 如何在程序中创建TADOConnection
- 如何程序创建Access 数据库
- 如何通过程序创建OU??




