如何在控制台程序中执行外部命令,并把结果回显到控制台 比如我的控制台程序调用dir.exe,并把结果在当前窗口进行显示呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用管道即可http://www.cnblogs.com/ahuo/archive/2007/09/03/879961.html 使用管道http://www.cnblogs.com/ahuo/archive/2007/09/03/879961.html #include <stdio.h>#include "windows.h"DWORD DoMyCmd(char *cmdline,char *msg);int main(){ char buff[MAX_PATH]; char msg[4096]; DWORD nLen; while(true) { memset(buff,0,MAX_PATH); gets(buff); nLen = DoMyCmd(buff,msg); *(msg+nLen) = '\0'; printf(msg); } return 0; } DWORD DoMyCmd(char *cmdline,char *msg){ SECURITY_ATTRIBUTES sa; HANDLE hRead,hWrite; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; if (!CreatePipe(&hRead,&hWrite,&sa,0)) { printf("Error On CreatePipe()"); return 0; } STARTUPINFO si; PROCESS_INFORMATION pi; si.cb = sizeof(STARTUPINFO); GetStartupInfo(&si); si.hStdError = hWrite; si.hStdOutput = hWrite; si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; char stmp[MAX_PATH] = {0}; GetSystemDirectory(stmp,MAX_PATH); strcat(stmp,"\\cmd.exe /c "); strcat(stmp,cmdline); if (!CreateProcess(NULL,stmp,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) { printf("Error on CreateProcess()"); return 0; } CloseHandle(hWrite) ; DWORD bytesRead; DWORD nLen = 0; while (true) { char buffer[100] = {0}; if (ReadFile(hRead,buffer,100,&bytesRead,NULL) == NULL) { memcpy(msg+nLen,buffer,bytesRead); nLen+=bytesRead; CloseHandle(hRead); break; } memcpy(msg+nLen,buffer,bytesRead); nLen+=bytesRead; if(nLen>(4096-101) ) { CloseHandle(hRead); break; } } CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return nLen;} 不知道变量个数,怎么动态的创建变量,并随时都可以知道创建了多少个变量? 程序调试时,出错在debugbreak()出?请问原因 寒寒的问下!!! 求助:关于mfc80.dll的问题 请高手指点一下:如何在单文档中调用报表控件(cell2000)?? 我有四个数据,需要是个文档显示。我怎么样初始化时就生成4个文档?? 请问怎样在window应用程序中包含(使用)c51编译器? 重载运算符= 的问题 菜鸟系列:视频卡的控制? 请高手来拿分 MFC 中,图形的绘制机制 子窗口切分问题 使用WebBrowser时,怎样使其不接受图片文件,只接受html和javascript?
http://www.cnblogs.com/ahuo/archive/2007/09/03/879961.html
http://www.cnblogs.com/ahuo/archive/2007/09/03/879961.html
#include <stdio.h>
#include "windows.h"
DWORD DoMyCmd(char *cmdline,char *msg);
int main()
{
char buff[MAX_PATH];
char msg[4096];
DWORD nLen;
while(true)
{
memset(buff,0,MAX_PATH);
gets(buff);
nLen = DoMyCmd(buff,msg);
*(msg+nLen) = '\0';
printf(msg);
}
return 0;
} DWORD DoMyCmd(char *cmdline,char *msg)
{
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
printf("Error On CreatePipe()");
return 0;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
char stmp[MAX_PATH] = {0};
GetSystemDirectory(stmp,MAX_PATH);
strcat(stmp,"\\cmd.exe /c ");
strcat(stmp,cmdline);
if (!CreateProcess(NULL,stmp,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
printf("Error on CreateProcess()");
return 0;
}
CloseHandle(hWrite) ;
DWORD bytesRead;
DWORD nLen = 0;
while (true)
{
char buffer[100] = {0};
if (ReadFile(hRead,buffer,100,&bytesRead,NULL) == NULL)
{
memcpy(msg+nLen,buffer,bytesRead);
nLen+=bytesRead;
CloseHandle(hRead);
break;
}
memcpy(msg+nLen,buffer,bytesRead);
nLen+=bytesRead;
if(nLen>(4096-101) )
{
CloseHandle(hRead);
break;
}
}
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return nLen;
}