c++ 调用cmd命令行函数 可隐藏黑框 四种方法总结
在很多情况下,不得不调用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命令行函数 可隐藏黑框 四种方法总结相关推荐
- ant调用cmd命令行
<?xml version="1.0" encoding="utf-8" ?> <!-- ant调用cmd命令行,ant运行参数有空格的jar ...
- java cmd 返回结果_Java调用cmd命令行并返回执行结果
命令提示符是在操作系统中,提示进行命令输入的一种工作提示符.在windows环境下,命令行程序为cmd.exe,是一个32位的命令行程序,微软Windows系统基于Windows上的命令解释程序,类似 ...
- bash shell函数中返回任意值的四种方法
From: http://www.jbxue.com/article/11322.html 本文介绍下,在bash shell编程中,从函数中返回任意值的几种方法,有需要的朋友参考下. 在bash中, ...
- Windows cmd命令行窗口 查看局域网所有IP的简单方法
进入命令行提示符窗口后 执行net view,显示计算机名,再ping计算机名即可显示ip 计算机名是//之后的内容
- HTML和CSS隐藏元素的四种方法
第一种:display:none 特点:不占据屏幕空间 显示:display:block <!DOCTYPE html> <html lang="en">& ...
- js 调用c语言函数看,JS函数调用的四种方法
js的函数调用会免费奉送两个而外的参数就是 this 和 arguments .arguments是参数组,他并不是一个真实的数组,但是可以使用.length方法获得长度. 书上有说4中调用方式: 方 ...
- CMD命令行升级pip失败解决方法
CMD命令行升级pip因网络问题失败解决方法: (pip更新的前提是你的电脑中已经安装有pip) python -m -pip install --upgrade pip python -m pip ...
- [vb]利用WScript.Shell对象隐藏cmd命令行运行
1. WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:\WINDOWS\system32\wshom.ocx,Wscri ...
- win10,win11后在cmd命令行输入python自动调用微软应用商店
项目场景: 更新win11后命令行输入python无法调用 问题描述 升级win11后在cmd命令行输入python自动调用微软应用商店 解决方案: 一开始在网上查的方案,删除这个微软应用商店的方案无 ...
最新文章
- 关于.NET前后台提示框的那点事
- 广西大学计算机科学与技术中法,广西大学
- python函数五要素_Python安装及关键要素
- 【springboot】静态资源设置缓存时间
- 0x80070659系统策略禁止这个安装_教你如何将电脑C盘设置成禁止安装任何软件
- 微信小程序 3 岁:日活超 3 亿,交易额超 8000 亿
- Ubuntu安装文泉驿-微米黑字体
- 九度OnlineJudge之1001:A+B for Matrices
- PDF怎么编辑修改,如何编辑PDF文字内容
- synchronized偏向锁
- CUDA各版本官方下载地址
- MATLAB内外插值
- Vue:刷新页面 且只刷新一次
- Nginx配置使用upstream负载均衡和proxy_cache缓存
- Failed to process import candidates for configuration class :Annotation-specified bean name ‘XXX‘ fo
- 钢铁厂计算机相关岗位需要倒班吗,钢铁厂车间倒班,听听他们的心声!
- 计算机桌面图标怎样缩小,win10系统桌面图标太大如何缩小?win10系统将桌面图标缩小的方法...
- 极客时间 Redis核心技术与实战 笔记(实践篇 集群)
- android下开启AP热点
- 5.4 BGP地址聚合
热门文章
- 海尔智家股市被看好,增长逻辑令人深思
- 浏览器中xhr选项是做什么用的呢_XHR和AJAX终于搞懂了!!
- openlayers地图旋转_OpenLayers教程二:实现简单的地图显示
- java finally 抛出异常_java抛出异常与finally实例解析
- php sprintf u,PHP sprintf()格式化用法详解
- linux mint 时间不对,LinuxMint 20:发布日期和新功能
- gazebo卡了_ardupilot gazebo打开卡死解决办法
- Python基础教程:字典(当索引不好用时)
- Python的一些特殊用法总结
- oracle备份片校验,oracle rman 备份日志单独备份和交叉校验