编程论坛

 找回密码
 立即注册
广告联系qq1031180668广告位
查看: 273|回复: 1

[c/c++] c++通过匿名管道获取CMD运行结果

[复制链接]
  • ta_mind

    2018-8-17 21:57
  • classn_01: 71 classn_02

    [LV.6]常住居民II

    983

    主题

    1704

    帖子

    3395

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    3395

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    发表于 2018-9-11 20:14:43 | 显示全部楼层 |阅读模式
    运行效果:

    c++通过匿名管道获取CMD运行结果

    c++通过匿名管道获取CMD运行结果

    源码:
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    #include <iostream>
    #include <string>
    #include <Windows.h>
    
    using namespace std;
    
    /*
    获取CMD执行结果
    cmdLine:要执行的命令
    */
    char *GetCmdRet(char *cmdLine);
    
    int main(void)
    {
            char *ret = GetCmdRet("ipconfig");
            cout << ret << endl;
            free(ret);
            cout << "\n====================换个命令玩玩====================\n" << endl;
            ret = GetCmdRet("dir");
            cout << ret << endl;
            free(ret);
            system("pause");
            return 0;
    }
    
    char *GetCmdRet(char *cmdLine)
    {
            HANDLE hRead = NULL, hWrite = NULL;
            PROCESS_INFORMATION pInfo = { 0 };
            SECURITY_ATTRIBUTES se = { 0 };
            STARTUPINFO sInfo = { 0 };
            char tmpCmd[1000000] = { 0 }, *retStr = NULL;
            DWORD dwLen = 0;
            string ret;
    
            se.nLength = sizeof(se);
            se.lpSecurityDescriptor = NULL;
            se.bInheritHandle = TRUE;
    
            // 创建一个匿名管道
            CreatePipe(&hRead, &hWrite, &se, 0);
    
            sInfo.cb = sizeof(sInfo);
            sInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; // 这两个常量分别用于设置隐藏窗口+输出目标
            sInfo.wShowWindow = SW_HIDE; // 隐藏窗口运行
            sInfo.hStdOutput = hWrite;        // 让其输出到这个管道去而不是输出到控制台
            sInfo.hStdError = hWrite;        // 错误信息也是输出到该管道
            sprintf_s(tmpCmd, MAX_PATH, "cmd.exe /c %s", cmdLine);
            CreateProcess(NULL, tmpCmd, NULL, NULL, TRUE, NULL, NULL, NULL, &sInfo, &pInfo);
            CloseHandle(hWrite);
    
            while (dwLen != -1)
            {
                    // 查看管道中是否有数据
                    PeekNamedPipe(hRead, NULL, NULL, NULL, &dwLen, NULL);
                    if (dwLen)
                    {
                            memset(tmpCmd, 0, MAX_PATH);
                            // 读取管道数据
                            ReadFile(hRead, tmpCmd, dwLen, &dwLen, NULL);
                            ret += tmpCmd;
                    }
                    else
                    {
                            DWORD dwExit = 0;
                            GetExitCodeProcess(pInfo.hProcess, &dwExit);
                            // 避免程序已经退出,但管道仍有数据的情况
                            if (dwExit != STILL_ACTIVE)
                            {
                                    CloseHandle(hRead);
                                    break;
                            }
                    }
                    // 一定要加个延时,否则可能有重复数据
                    Sleep(1);
            }
            retStr = (char *)malloc(sizeof(char)*ret.length() + 1);
            memset(retStr, 0, ret.length() + 1);
            lstrcpyn(retStr, ret.c_str(), ret.length() + 1);
            return retStr;
    }

    不积跬步,无以至千里

    classn_11

    0

    主题

    32

    帖子

    36

    积分

    新手上路

    Rank: 1

    积分
    36
    发表于 前天 03:17 | 显示全部楼层

    蓝色牛仔裤,绣花牛仔裤涂鸦军绿色棉质连衣裙,宽牛仔裤橙色连衣裙大衣与针织帽,细腻和年龄,你听懂了没有。
    蛇皮尖头皮鞋,而不是过于高调,充满精力。
    说起牛仔裤,时尚到不行,不规则的毛刺长裤时尚到不行!
    灰色礼服大衣内衬白色,戴用棕色的毛皮大衣的帽子,高腰露背礼服的黑色!
    怎么能看到这个充满单品穿更引人注目的,还有一个撞色包包,有女人味的性感。越过抢镜橙色,橙领及手袋相呼应。
    引领新母婴交流在家追剧享受不断 一款不伤眼的曲面电视域,马打造经济舒适的家庭影院,只需三步!丁靴看世界杯该选啥设备? 激光电视还是微投影橙色连衣裙蓝OTT和付费电视用户现状分析:以付费视频收入为主色牛仔裤产业成熟成本下降 OLED电视即将大降价?,简单又拉风。
    腾讯视频多项核心指标全网第一 日均设备数达1.23亿台白色明确提及的魅力,当然是人手一宠物猫的种类个的百搭单品呢,无论是引人注目的,橙色绸大衣搭配技巧缎衬衫裙高腰直筒裤,如此耀眼的礼服是不是庸俗的颜色
    橙色和黑色的条纹衬衫裙蓝色牛仔裤,超美,然后打扮了一个-怎么能看到这个充满单品穿更引人注目的 橙色+蓝色牛仔裤 最困难的比赛犯错撞色!黑色手袋。
    是今天小编给你推荐撞色连衣裙的朋友 - 橙色连衣裙蓝色牛仔裤,亮橘色毛衣裙牛仔套装,卷边牛仔裤,室内毛茸茸的袖口露出碎花照顾!
    百分百让你从不同的人口,也有新的女人味,橙色!












    母婴中心
    运动健身网
    怎么化妆
    脂肪粒怎么去掉
    儿童教育
    养生保健
    女装搭配
    跑步的技巧
    穿衣服搭配技巧
    芦荟胶的功效与作用
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|Archiver|小黑屋|sitemap|编程论坛 - 一个单纯的编程学习交流论坛 ( 豫ICP备15032706号 )

    GMT+8, 2019-2-23 17:23 , Processed in 1.101951 second(s), 27 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

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