在c++中打开Shell/CMD
Open Shell/CMD in C++
我想使用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 ...
}
相关文章:
- 如何使用ndk-build.cmd构建Android.so文件
- 如何通过cpp程序运行shell脚本
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- shell排序中的交换和比较
- 在由Sublime文本3编译后在cmd上显示Java程序输出
- 如何在使用Makefile构建后在cmd中运行该程序?
- 我适合在我的构建系统中使用 shell 脚本而不是AX_CHECK_COMPILE_FLAG吗?
- 为什么下面的Hello World程序在PowerShell上没有显示任何输出?同一程序在CMD上显示正确的输出
- 使用提升过程获取 shell 命令的标准输出
- 父进程意外被子 cmd 杀死.exe运行 java jar 的进程 - WINDOWS 7 问题 - C++
- 使用 CreateProcessWithTokenW 在 CMD 中启动 CMD
- 使用 system() 函数在C++程序中运行 cmd 命令
- 终端如何在 shell 提示符下以编程方式阻止退格,以便您无法在其上退格,例如 $ 表示 bash 或 C:\blah\>
- CMake 引用我在 ~/bin 中创建的随机 shell 脚本(即使我删除了它)?
- cmd.exe与Powershell中C++程序的不同执行时间
- 如何在 Linux 下执行 shell 命令 unsing QProcess?
- 程序在cmd中工作,在cygwin中立即以状态127退出,在emacs shell中没有输出
- C++ 通过 cmd 或 shell 执行函数
- 在c++中打开Shell/CMD
- 如何在没有弹出cmd窗口的情况下以c ++静默方式执行shell程序