用在程序里用Creatprocess启动另外的进程,而且不显示那个进程的窗口,那个进程是一个小的命令行程序,输出是在命令行窗口输出。
怎么才能得到那个进程的输出,用重定向可以吗?怎么重定向?
我在第二个参数里command line用"程序名+命令参数+>>tmp.txt",可是没法重定向。
怎么才能得到那个进程的输出,用重定向可以吗?怎么重定向?
我在第二个参数里command line用"程序名+命令参数+>>tmp.txt",可是没法重定向。
解决方案 »
- 如何实现所见即所得的打印效果????
- 怎样在窗体最大化时控件也跟着改变大小啊?
- 如何修改CTabCtrl的类属性,各位帮忙啊!!
- 我在自己的程序中引入了共享内存,部分程序如下,在调试到(*)所注的那步时系统报错,这是为什么?谢谢大侠了!!!
- 如何取得某局域网内的带宽占用率?以及如何取得本机占用的网络带宽?
- 为什么我的字符串传不过去呀!?
- 请问谁有文件传输的程序,要基于udp协议的,请提供网址或mail给我,收到后立即给分!
- 请问updateData函数的作用!
- 快疯了 有关BT的开发
- MFC中SQLie编程遇到问题,急求解决,谢谢!
- 这是怎么回事啊?
- 五一节前最后的疯狂:别人程序窗口右击后会出现一个上下文菜单,请问怎样
在默认情况下/subsystem 和/entry开关是匹配的,也就是:
"console"对应"mainCRTStartup"或者"wmainCRTStartup"
"windows"对应"WinMain"或者"wWinMain"
我们可以通过手动修改的方法使他们不匹配。例如:#include "windows.h"
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 设置入口地址
void main(void)
{
MessageBox(NULL, "hello", "Notice", MB_OK);
}这个Console程序就不会显示Console窗口。如果选/MLd的话,这个程序只需要链接LIBCD.LIB user32.lib kernel32.lib。http://search.csdn.net/Expert/topic/2490/2490731.xml?temp=.5557978
HANDLE hWritePipe;
SECURITY_ATTRIBUTES sat;
STARTUPINFO startupinfo;
PROCESS_INFORMATION pinfo;
BYTE buffer[1024];
DWORD byteRead;
CString rString;UpdateData();
if(m_Host=="")
{
MessageBox("主机地址不能为空!");
return;
}
m_Host="c:\\windows\\ping.exe "+m_Host;sat.nLength=sizeof(SECURITY_ATTRIBUTES);
sat.bInheritHandle=true;
sat.lpSecurityDescriptor=NULL;
if(!CreatePipe(&hReadPipe,&hWritePipe,&sat,NULL))
{
MessageBox("Create Pipe Error!");
return;
}
startupinfo.cb=sizeof(STARTUPINFO);
GetStartupInfo(&startupinfo);
startupinfo.hStdError=hWritePipe;
startupinfo.hStdOutput=hWritePipe;
startupinfo.dwFlags=STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
startupinfo.wShowWindow=SW_HIDE;
if(!CreateProcess(NULL,m_Host.GetBuffer(m_Host.GetLength()+1),NULL, NULL, TRUE, NULL, NULL, NULL,&startupinfo,&pinfo))
{
MessageBox("create process error!");
return;
}
CloseHandle(hWritePipe);
while(true)
{
RtlZeroMemory(buffer,1024);
if(ReadFile(hReadPipe,buffer,1023,&byteRead,NULL)==NULL)
break;
::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,EM_SETSEL,-1,0);
::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,EM_REPLACESEL,false,(long)buffer);
}
CloseHandle(hReadPipe);
m_Host.ReleaseBuffer();
为控制台程序输入输出重定向的问题
http://community.csdn.net/Expert/topic/3474/3474250.xml?temp=.3331568
不显示子程序窗口,加上SW_HIDE属性即可。