在c++中打开Shell/CMD

Open Shell/CMD in C++

本文关键字:Shell CMD c++      更新时间:2023-10-16

我想使用CreateProcessA(NULL, "cmd", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);打开一个标准的windows cmd

执行程序时,控制台短暂闪烁,然后消失如何以编程方式打开命令行,并使用户可以输入任意命令?

您需要使用cmd.exe/k选项,它使控制台窗口保持打开状态以供用户进入。下面的代码片段打开一个新的shell控制台,并等待用户使用exit命令退出它:

STARTUPINFOA si;   
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
char cmd_exe[32767];
GetEnvironmentVariable("COMSPEC", cmd_exe, 32767);
if (CreateProcessA(cmd_exe, "/k", NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi))
{
    CloseHandle(pi.hThread);
    WaitForSingleObject(pi.hProcess, INFINITE);
    DWORD dwExitCode = 0;
    GetExitCodeProcess(pi.hProcess, &dwExitCode);
    CloseHandle(pi.hProcess);
    std::cout << "cmd process exit code = " << dwExitCode << std::endl;
}
else
{
    DWORD dwErrorCode = GetLastError();
    std::cout << "cmd process not started, error = " << dwErrorCode << std::endl;
}

这是打开并等待进程状态更改的代码:

if (CreateProcessA(NULL, "cmd.exe",
    NULL, NULL, TRUE, 0, NULL,
    NULL, &StartupInfo, &ProcessInfo))
{
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ProcessInfo.hProcess);
}
else
{
    // Failed to launch ...
}