在程序调用windows api启动命令行程序,并且重定向输出到文本文件
如,在cmd中输入 :
systeminfo > systeminfo.txt
下面是在C/C++程序中处理整个流程:
CString outputFile = "systeminfo.txt";
SECURITY_ATTRIBUTES sa = { sizeof(sa), NULL, TRUE };
HANDLE hFile = CreateFile(
outputFile,
GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
&sa,
OPEN_ALWAYS /*| TRUNCATE_EXISTING*/,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
//int err = GetLastError();
return;
}
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi = { 0 };
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;;
si.wShowWindow = SW_HIDE; //不显示创建的进程的窗口
si.hStdOutput = hFile;//重定向输出句柄为之前创建的文件句柄
TCHAR cmdline[] = TEXT("cmd.exe systeminfo");
if (CreateProcess(NULL, cmdline, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
{
//等待打开的进程结束并关闭相关句柄
WaitForSingleObject(pi.hProcess, INFINITE);
::CloseHandle(pi.hThread);
::CloseHandle(pi.hProcess);
}
else
{
int err = GetLastError();
}
//关闭文件句柄
CloseHandle(hFile);