C++ 求助5
本帖最后由 隐藏英雄 于 2022-12-27 22:16 编辑ShellExecute(0, "open", "cmd.exe", "/C ping 192.168.1.1 -n 20 > D:\\ping.t", 0, SW_HIDE);//这货是异步执行CMD 程序不会等待它,需要用WaitForSingleObject 但是不会用
想执在程序运行的过程中执行CMD命令,并且不弹黑窗,找了很多办法 觉得ShellExecute还可行,但是这货是异步执行CMD 程序不会等待它执行完毕以后再执行后面的代码,导致CMD输出的内容还没完整 它程序都执行完毕了。
找了很多网页 最靠谱的应该是用WaitForSingleObject 等待异步线程,但是这个涉及到了句柄什么的,我就不会写了,谁帮我个忙?
或者有什么简单一点的CMD执行命令隐藏黑窗,而且等CMD执行完毕再继续执行其他代码的方法? 您可以使用 CreateProcess 函数来执行 CMD 命令,并且等待执行完毕后继续执行其他代码。
下面是一个示例代码#include <Windows.h>
#include <iostream>
int main()
{
// 创建一个新的进程
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// 在新进程中执行 CMD 命令
const char* command = "cmd.exe /C ping 192.168.1.1 -n 20 > D:\\ping.txt";
if (!CreateProcess(NULL, const_cast<char*>(command), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
std::cerr << "CreateProcess failed: " << GetLastError() << '\n';
return 1;
}
// 等待进程结束
WaitForSingleObject(pi.hProcess, INFINITE);
// 关闭句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
std::cout << "CMD command finished\n";
return 0;
}
在这段代码中,使用 CreateProcess 函数创建了一个新的进程,并在新进程中执行了 CMD 命令。然后使用 WaitForSingleObject 函数等待新进程结束,最后关闭句柄。这样就可以保证 CMD 命令在程序中执行完毕后再继续执行其他代码。
请注意,在使用 CreateProcess 函数时需要包含 Windows.h 头文件。 system("start /min /wait cmd");
cmd那块可以加指令或运行个bat什么的
编译不了加system.h头文件 或者你写一个回调然后CreateThread,用WaitForSingleObject等这个线程
或者也可以用ShellExecuteEx然后用WaitForSingleObject等 本帖最后由 隐藏英雄 于 2022-12-27 21:50 编辑
yushiwen 发表于 2022-12-27 21:24
您可以使用 CreateProcess 函数来执行 CMD 命令,并且等待执行完毕后继续执行其他代码。
下面是一个示例代 ...
此方法看起来非常不错, si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
增加这2句就可以隐藏黑窗了 学习一下。
本帖最后由 qylisten 于 2022-12-28 17:39 编辑
RainPPR 发表于 2022-12-27 21:18
cmd那块可以加指令或运行个bat什 ...system("cmd.exe /C ping 192.168.1.1 -n 2 > D:\\ping.txt");
亲测,这个可以!无窗口。
页:
[1]