吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 802|回复: 6
收起左侧

[已解决] C++ 求助5

[复制链接]
隐藏英雄 发表于 2022-12-27 21:09
本帖最后由 隐藏英雄 于 2022-12-27 22:16 编辑

[Asm] 纯文本查看 复制代码
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执行完毕再继续执行其他代码的方法?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

yushiwen 发表于 2022-12-27 21:24
您可以使用 CreateProcess 函数来执行 CMD 命令,并且等待执行完毕后继续执行其他代码。
下面是一个示例代码
[C++] 纯文本查看 复制代码
#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 头文件。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
隐藏英雄 + 1 + 1 吾爱大神就是多!非常奈斯哦!

查看全部评分

RainPPR 发表于 2022-12-27 21:18
[C++] 纯文本查看 复制代码
system("start /min /wait cmd");

cmd那块可以加指令或运行个bat什么的
编译不了加system.h头文件

免费评分

参与人数 1吾爱币 +1 收起 理由
隐藏英雄 + 1 此方法不能隐藏黑窗

查看全部评分

DEATHTOUCH 发表于 2022-12-27 21:42
或者你写一个回调然后CreateThread,用WaitForSingleObject等这个线程
或者也可以用ShellExecuteEx然后用WaitForSingleObject等

免费评分

参与人数 1热心值 +1 收起 理由
隐藏英雄 + 1 我很赞同!

查看全部评分

 楼主| 隐藏英雄 发表于 2022-12-27 21:43
本帖最后由 隐藏英雄 于 2022-12-27 21:50 编辑
yushiwen 发表于 2022-12-27 21:24
您可以使用 CreateProcess 函数来执行 CMD 命令,并且等待执行完毕后继续执行其他代码。
下面是一个示例代 ...

此方法看起来非常不错,        si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
增加这2句就可以隐藏黑窗了
ytfrdfiw 发表于 2022-12-28 12:01
学习一下。
qylisten 发表于 2022-12-28 17:37
本帖最后由 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");
亲测,这个可以!无窗口。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 03:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表