CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

怎么样才能使基于console的程序创建或不显示新console?

楼主sanhan()2000-09-23 18:20:00 在 VC/MFC / 基础类 提问

在一个基于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??

关键词

  • 文件名
  • 执行
  • 命令行
  • startinfo
  • hconnectwrite
  • szprocess
  • szcommandline
  • 程序
  • getstdhandle
  • processinfo

得分解答快速导航

  • 帖主:sanhan
  • lgs
  • lu0
  • Holly
  • Holly
  • FBStudio
  • Holly

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo