MFC怎么获取命令行返回参数,怎么获取cmd或powershell.exe命令返回值,请详细写出代码
时间: 2024-03-17 19:45:55 浏览: 164
获取命令行返回参数:
可以使用 `GetCommandLine()` 函数获取命令行字符串,然后使用 `CommandLineToArgvW()` 函数将其转换为参数列表,最后获取对应的参数即可。
下面是一个示例代码:
```cpp
LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc);
if (argv != NULL) {
for (int i = 1; i < argc; ++i) {
wprintf(L"参数 %d:%s\n", i, argv[i]);
}
LocalFree(argv);
}
```
获取 cmd 或 powershell.exe 命令返回值:
可以使用 `CreateProcess()` 函数创建一个新进程,并设置其输出流为管道。然后读取管道中的数据即可。
下面是一个示例代码:
```cpp
// 创建匿名管道
HANDLE hReadPipe, hWritePipe;
SECURITY_ATTRIBUTES saAttr;
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
CreatePipe(&hReadPipe, &hWritePipe, &saAttr, 0);
// 创建进程
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo;
ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.hStdError = hWritePipe;
siStartInfo.hStdOutput = hWritePipe;
siStartInfo.dwFlags |= STARTF_USESTDHANDLES;
CreateProcess(NULL, L"cmd.exe /c dir", NULL, NULL, TRUE, 0, NULL, NULL, &siStartInfo, &piProcInfo);
// 读取管道中的数据
char szBuf[1024];
DWORD dwRead;
while (ReadFile(hReadPipe, szBuf, sizeof(szBuf) - 1, &dwRead, NULL) == TRUE) {
if (dwRead == 0) {
break;
}
szBuf[dwRead] = '\0';
printf("%s", szBuf);
}
// 关闭管道和进程句柄
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
CloseHandle(piProcInfo.hProcess);
CloseHandle(piProcInfo.hThread);
```
以上代码是使用 cmd.exe 执行 `dir` 命令,并将输出结果打印到控制台。如果要使用 powershell.exe 执行命令,则将命令改为 `powershell.exe -Command "Get-Process"`。
阅读全文