69,337
社区成员
发帖
与我相关
我的任务
分享
#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;
}
return nLen;
}
//每运行一条cmd命令后发现句柄数增加了,是不是我哪里没关闭句柄啊,帮忙看一下