在很多情况下,不得不调用cmd命令行,去实现一系列功能,总结靠谱方法两种如下:

方法一:可接受cmd命令行黑框一闪(推荐星数::可传值几乎任何cmd命令)

string

string getCmdResult(const string &strCmd)//传参string格式命令,返回值string格式;
{char buf[10240] = { 0 };FILE *pf = NULL;if ((pf = _popen(strCmd.c_str(), "r")) == NULL){return "";}string strResult;while (fgets(buf, sizeof buf, pf)){strResult += buf;}_pclose(pf);unsigned int iSize = strResult.size();if (iSize > 0 && strResult[iSize - 1] == '\n')  {strResult = strResult.substr(0, iSize - 1);}return strResult;
}

方法二:隐藏CMD黑窗 (推荐星数::可传值大部分cmd命令,如ipconfig、ping等,具体请自测)

直接调用此函数string ExeCmd(string pszCmd)即可,传命令为string格式,返回值仍为 string格式。

重点:部分命令,传形参命令时必须加入 cmd.exe /c  具体请自测。(这个让我走了好几天弯路百思不得其解,最后意外发现此方法可解决,免去了把文件导出来,一行读取判断的麻烦!)

例如:改变文件编码格式命令 type 1.txt>2.txt 

传形参时应该这样传参  cmd.exe /c  type 1.txt>2.txt

#include <iostream>#include <string>
//#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )//隐藏命令行
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
using namespace std;
wstring Str2Wstr(string str)
{unsigned len = str.size() * 2;// 预留字节数setlocale(LC_CTYPE, "");     //必须调用此函数wchar_t *p = new wchar_t[len];// 申请一段内存存放转换后的字符串mbstowcs(p, str.c_str(), len);// 转换std::wstring str1(p);delete[] p;// 释放申请的内存return str1;
}
string ExeCmd(string pszCmd)
{wstring pszCmd_w = Str2Wstr(pszCmd);wcout << "pszCmd_w is " << pszCmd_w << endl;// 创建匿名管道,write->read;SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };HANDLE hRead, hWrite;if (!CreatePipe(&hRead, &hWrite, &sa, 0)){cout << "@ CreatePipe failed!" << endl;return (" ");}cout << "@0" << endl;// 设置命令行进程启动信息(以隐藏方式启动命令并定位其输出到hWriteSTARTUPINFO si = { sizeof(STARTUPINFO) }; // Pointer to STARTUPINFO structure;GetStartupInfo(&si);si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;//si.dwFlags = STARTF_USESHOWWINDOW;si.wShowWindow = SW_HIDE; //隐藏窗口;si.hStdError = hWrite;si.hStdError = hWrite;si.hStdOutput = hWrite; //管道的输入端口连接命令行的输出;// 启动命令行PROCESS_INFORMATION pi;// Pointer to PROCESS_INFORMATION structure;if (!CreateProcess(NULL,(LPWSTR)pszCmd_w.c_str(),NULL,NULL,TRUE, //FALSE,          // Set handle inheritance to FALSENULL,//0,              // No creation flagsNULL,NULL,&si,&pi)){cout << "@ CreateProcess failed!" << endl;return ("Cannot create process");}CloseHandle(hWrite);//关闭管道的输入端口;// 读取命令行返回值string strRetTmp;char buff[1024] = { 0 };DWORD dwRead = 0;strRetTmp = buff;while (ReadFile(hRead, buff, 1024, &dwRead, NULL))//从管道的输出端获取命令行写入的数据;{cout << "buff = " << buff << endl;strRetTmp += buff;}CloseHandle(hRead);//关闭管道的输出端口;cout << "strRetTmp:"<<strRetTmp << endl;return strRetTmp;
}

方法三:调用vbs脚本,可隐藏黑框(推荐星数:
 

vbs脚本: 
  Set ws= CreateObject("Wscript.shell") 
  ws.run "cmd /c test.bat",vbhide 
  另做test.bat填充功能代码

set objShell=wscript.createObject("wscript.shell")
iReturn=objShell.Run("你的程序.exe", 0, FALSE)  'Run()
'第一个参数是你要执行的程序的路径,
'第二个参数是窗口的形式,0后台运行;1正常运行;2最小化;3最大化;缺省的话表示正常运行
'第三个参数是表示这个脚本是等待还是继续执行,如果设为了True,脚本就会等待调用的程序退出后再向后执行。

方法四: WinExec函数(推荐星数:,黑框可隐藏)

WinExec(cmd.c_str(),SW_HIDE);//cmd(string类型)中为我们要调用的程序名及其参数, 如 “dir *.exe ”

其第一个参数相当于system函数的参数,

其第二个参数可以设置窗口是否显示,SW_HIDE这个宏表示隐藏窗口。

重点:部分命令,传形参命令时也必须加入 cmd.exe /c  具体请自测。
    但是这个函数有一个问题,函数创建完这个进程后就返回了,也就是说它返回后,该进程不一定已经结束。

^-^自由 开源因你更精彩^-^ 。

c++ 调用cmd命令行函数 可隐藏黑框 四种方法总结相关推荐

  1. ant调用cmd命令行

    <?xml version="1.0" encoding="utf-8" ?> <!-- ant调用cmd命令行,ant运行参数有空格的jar ...

  2. java cmd 返回结果_Java调用cmd命令行并返回执行结果

    命令提示符是在操作系统中,提示进行命令输入的一种工作提示符.在windows环境下,命令行程序为cmd.exe,是一个32位的命令行程序,微软Windows系统基于Windows上的命令解释程序,类似 ...

  3. bash shell函数中返回任意值的四种方法

    From: http://www.jbxue.com/article/11322.html 本文介绍下,在bash shell编程中,从函数中返回任意值的几种方法,有需要的朋友参考下. 在bash中, ...

  4. Windows cmd命令行窗口 查看局域网所有IP的简单方法

    进入命令行提示符窗口后 执行net view,显示计算机名,再ping计算机名即可显示ip 计算机名是//之后的内容

  5. HTML和CSS隐藏元素的四种方法

    第一种:display:none 特点:不占据屏幕空间 显示:display:block <!DOCTYPE html> <html lang="en">& ...

  6. js 调用c语言函数看,JS函数调用的四种方法

    js的函数调用会免费奉送两个而外的参数就是 this 和 arguments .arguments是参数组,他并不是一个真实的数组,但是可以使用.length方法获得长度. 书上有说4中调用方式: 方 ...

  7. CMD命令行升级pip失败解决方法

    CMD命令行升级pip因网络问题失败解决方法: (pip更新的前提是你的电脑中已经安装有pip) python -m -pip install --upgrade pip python -m pip ...

  8. [vb]利用WScript.Shell对象隐藏cmd命令行运行

    1. WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:\WINDOWS\system32\wshom.ocx,Wscri ...

  9. win10,win11后在cmd命令行输入python自动调用微软应用商店

    项目场景: 更新win11后命令行输入python无法调用 问题描述 升级win11后在cmd命令行输入python自动调用微软应用商店 解决方案: 一开始在网上查的方案,删除这个微软应用商店的方案无 ...

最新文章

  1. 关于.NET前后台提示框的那点事
  2. 广西大学计算机科学与技术中法,广西大学
  3. python函数五要素_Python安装及关键要素
  4. 【springboot】静态资源设置缓存时间
  5. 0x80070659系统策略禁止这个安装_教你如何将电脑C盘设置成禁止安装任何软件
  6. 微信小程序 3 岁:日活超 3 亿,交易额超 8000 亿
  7. Ubuntu安装文泉驿-微米黑字体
  8. 九度OnlineJudge之1001:A+B for Matrices
  9. PDF怎么编辑修改,如何编辑PDF文字内容
  10. synchronized偏向锁
  11. CUDA各版本官方下载地址
  12. MATLAB内外插值
  13. Vue:刷新页面 且只刷新一次
  14. Nginx配置使用upstream负载均衡和proxy_cache缓存
  15. Failed to process import candidates for configuration class :Annotation-specified bean name ‘XXX‘ fo
  16. 钢铁厂计算机相关岗位需要倒班吗,钢铁厂车间倒班,听听他们的心声!
  17. 计算机桌面图标怎样缩小,win10系统桌面图标太大如何缩小?win10系统将桌面图标缩小的方法...
  18. 极客时间 Redis核心技术与实战 笔记(实践篇 集群)
  19. android下开启AP热点
  20. 5.4 BGP地址聚合

热门文章

  1. 海尔智家股市被看好,增长逻辑令人深思
  2. 浏览器中xhr选项是做什么用的呢_XHR和AJAX终于搞懂了!!
  3. openlayers地图旋转_OpenLayers教程二:实现简单的地图显示
  4. java finally 抛出异常_java抛出异常与finally实例解析
  5. php sprintf u,PHP sprintf()格式化用法详解
  6. linux mint 时间不对,LinuxMint 20:发布日期和新功能
  7. gazebo卡了_ardupilot gazebo打开卡死解决办法
  8. Python基础教程:字典(当索引不好用时)
  9. Python的一些特殊用法总结
  10. oracle备份片校验,oracle rman 备份日志单独备份和交叉校验