MFC执⾏CMD命令并获得其返回信息源代码
转载请注明出处!
MFC执⾏CMD命令并获得其返回值。
原理是利⽤管道技术,创建⼀个进程执⾏cmd命令,并将其返回信息存⼊管道中,再读出管道中的命令即可。
以下是我封装的⼀个函数,参数是要执⾏的CMD命令,多个命令之间⽤“&”号隔开,函数的返回值就是执⾏命令的返回信息。格式均为CString格式。
CString CTESTDlg::ExecuteCmd(CString str)
{
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("Error on CreatePipe()!");
return NULL;
}
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi;
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
TCHAR* cmdline=StringToChar(str);
if (!CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
MessageBox("Error on CreateProcess()!");
return NULL;
}
CloseHandle(hWrite);
char buffer[4096];
memset(buffer,0,4096);
CString output;
DWORD byteRead;
while(true)
{
if (ReadFile(hRead,buffer,4095,&byteRead,NULL) == NULL)
{
break;
}
output += buffer;
}
write的返回值return output;
}
其中⽤到⼀个外部函数:void StringToChar(&str);
这个函数的作⽤是讲CString格式的命令转化为TCHAR格式,以下是源代码:
TCHAR* CTESTDlg::StringToChar(CString& str)
{
int len=str.GetLength();
TCHAR* tr=str.GetBuffer(len);
str.ReleaseBuffer();
return tr;
}
以上两个函数都是很实⽤的函数,在做⼀些简单的⼩程序时可能⽤得着,⼤家可以直接拿去⽤。
最后附上我利⽤这两个⼩函数写的实⽤⼩程序:
1、windows⾃动定时关机程序,源码:
2、windows建⽴⽹络热点共享的源码:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论