VC中调用cmd命令的四种方式
1. system方法:
原型:
int __cdecl system(const char *);
例如:
system("ipconfig");
2. WinExec方法:
相比于system方法,WinExec方法多了一个窗口参数:
原型:
UINT WinExec(LPCSTR lpCmdLine,UINT uCmdShow
);
例如:
WinExec("ipconfig", SW_SHOW);
参数可以是:SW_SHOW,,SW_SHOWMAXIMIZED,SW_SHOWMINIMIZED等等,总体用法是差不多的。
3. ShellExecute方法:
这个方法主要用于open,edit,find等方法的操作:
原型:
HINSTANCE ShellExecute( HWND hwnd,LPCTSTR lpOperation,LPCTSTR lpFile,LPCTSTR lpParameters,LPCTSTR lpDirectory,INT nShowCmd
);
例如:
ShellExecute(NULL,"open","abc.xls",NULL,NULL,SW_HIDE);//打开默认路径的abc.xls文件
4.可回显的调用方法:
这个方法步骤比较复杂,是通过创建一个新进程来模拟cmd命令行,将写命令行和回显通过管道的方式呈现。
例如:
void CTestMFCDlg::OnOK()
{// TODO: Add extra validation hereSECURITY_ATTRIBUTES sa;HANDLE hRead,hWrite;sa.nLength = sizeof(SECURITY_ATTRIBUTES);sa.lpSecurityDescriptor = NULL;sa.bInheritHandle = TRUE;if(!CreatePipe(&hRead,&hWrite,&sa,0)){MessageBox("CreatePipe Failed");return;}STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si,sizeof(STARTUPINFO));si.cb = sizeof(STARTUPINFO);GetStartupInfo(&si);si.hStdError = hWrite;si.hStdOutput = hWrite;si.wShowWindow = SW_HIDE;si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;char cmdline[200];CString tmp,stredit2;GetDlgItemText(IDC_EDIT_CMD,stredit2);tmp.Format("cmd /C %s",stredit2);sprintf(cmdline,"%s",tmp);if(!CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)){MessageBox("CreateProcess failed!");return;}CloseHandle(hWrite);char buffer[4096] = {0};CString strOutput;DWORD bytesRead;while(1){if(NULL == ReadFile(hRead,buffer,4095,&bytesRead,NULL)){break;}strOutput += buffer;SetDlgItemText(IDC_EDIT_TEXT,strOutput);UpdateWindow();Sleep(1000);}CloseHandle(hRead);
}
以上是在一个MFC中点击OnOK按钮后,将IDC_EDIT_CMD编辑框中的命令执行,并将1秒内cmd命令的回显答应到IDC_EDIT_TEXT编辑框中的实现。
VC中调用cmd命令的四种方式相关推荐
- JavaScript中字符串连接/拼接的四种方式
JavaScript中连接字符串的方式有4种,分别是使用加号运算符连接.使用${}配合反引号连接.使用concat()函数连接.使用join()函数连接. 1. 使用加号运算符 示例代码如下: let ...
- Java中数组转List的四种方式
第一种方式(未必最佳):使用ArrayList.asList(strArray) 使用Arrays工具类Arrays.asList(strArray)方式,转换完成后,只能对List数组进行查改,不能 ...
- java 执行cmd 堵塞_java中调用cmd命令被阻塞无法返回和继续执行
在项目中用到了数据库的备份和恢复功能,就通过java的Runtime.getRuntime().exec()来调用cmd或者linux命令来导出和导入.sql文件.但是在执行恢复时,程序一直被阻塞,没 ...
- android java调用_关于Android中Java调用外部命令的三种方式
此所谓三种方式,只是个人认为.本人还是菜鸟初涉,所以有所错误,请指正. 个人认为,Java调用外部命令.无非三种情况: 一.是只执行命令,不考虑返回值. 二.是执行命令的同时,还需要得到返回值. 三. ...
- 在python代码中调用vba宏的四种方法
在python代码中调用vba宏 工作以python为主体,但是遇到了一些word操作的需求(详见上一篇),这个需求用word自带的功能会很容易实现,于是就想着能不能用python调用宏来处理. 网上 ...
- Spring中配置Hibernate事务的四种方式
2019独角兽企业重金招聘Python工程师标准>>> 为了保证数据的一致性,在编程的时候往往需要引入事务这个概念.事务有4个特性:原子性.一致性.隔离性.持久性. 事务的种类有两种 ...
- 【Matlab系列】MATLAB中显示输出数据的四种方式
DATE: 2019-11-13 1.参考 MATLAB 显示输出数据的三种方式 Matlab之print,fprint,fscanf,disp函数 2.改变数据格式 当数据重复再命令行窗口时,整数以 ...
- JAVA中的arraylist集合_java中遍历ArrayList集合的四种方式
详细内容 ArrayList遍历:取出ArrayList集合中的数据 方式一:for循环 方式二:增强for循环:foreach 方式三:Iterator:迭代器 方式四:ListIterator:双 ...
- java中遍历集合_java中遍历ArrayList集合的四种方式
ArrayList遍历:取出ArrayList集合中的数据 方式一:for循环 方式二:增强for循环:foreach 方式三:Iterator:迭代器 方式四:ListIterator:双向迭代器 ...
最新文章
- Machine Learning | (11) 回归性能评估与欠拟合、过拟合
- Microsoft Dynamics CRM 2013 试用之系统篇 正式安装 Microsoft Dynamics CRM Server 2013
- Syntax error, annotations are only available if source level is 1.5 or greater.
- Django-请求与响应
- 3.2.7.1 替换细节
- requests爬取免费代理2
- [转载] Java获取嵌套的json串里的返回结果
- 【Alpha】Scrum Meeting 10
- SCORM的对手——LOM
- Python应用之批量打水印
- 删除桌面上出现无文件名图标的方法
- 主播直播时如何选择合适的内容?如何打造主播人设?
- aj1黑白反转价格_除了倒勾配色AJ1,更有反转配色WHITE MOCHA同步发售
- 电子技术——伪NMOS逻辑电路
- 学习初步练习基于c语言的socket编程
- Kafka启动失败异常-InconsistentClusterIdException
- Mac平台直播推流搭建
- A trip to InterSpeech2012 (Part II)
- window7属于计算机硬件吗,win7最低配置要求是什么?
- 本证方程的本征值 与 特征方程的特征值 的 区别 辨析
热门文章
- 【Python】使用pdfkit报错:OSError: wkhtmltopdf exited with non-zero code 1. error:
- c++中opencv对图片旋转镜像并调整尺寸显示
- Tuxera Disk Manager是什么软件,Tuxera Disk Manager怎么用
- Java安全编程需要考虑的问题
- 区块链读书笔记01-区块链基础
- Linux 多线程(附带线程池代码加注释)
- Bone Collector(01背包问题-两种写法)
- canvas使用硬件加速
- 如何设置交易滑点?精确到tick 测算期货冲击成本(附源码)
- mac电脑开机是出现安全启动