1. system方法:

原型:

  1. int __cdecl system(const char *);

例如:

  1. system("ipconfig");

2. WinExec方法:

相比于system方法,WinExec方法多了一个窗口参数:

原型:

  1. UINT WinExec(
  2. LPCSTR lpCmdLine,
  3. UINT uCmdShow
  4. );

例如:

WinExec("ipconfig", SW_SHOW);

参数可以是:SW_SHOW,,SW_SHOWMAXIMIZED,SW_SHOWMINIMIZED等等,总体用法是差不多的。

3. ShellExecute方法:

这个方法主要用于open,edit,find等方法的操作:

原型:

  1. HINSTANCE ShellExecute(
  2. HWND hwnd,
  3. LPCTSTR lpOperation,
  4. LPCTSTR lpFile,
  5. LPCTSTR lpParameters,
  6. LPCTSTR lpDirectory,
  7. INT nShowCmd
  8. );

例如:

  1. ShellExecute(NULL,"open","abc.xls",NULL,NULL,SW_HIDE);//打开默认路径的abc.xls文件

4.可回显的调用方法:

这个方法步骤比较复杂,是通过创建一个新进程来模拟cmd命令行,将写命令行和回显通过管道的方式呈现。
例如:

  1. void CTestMFCDlg::OnOK()
  2. {
  3. // TODO: Add extra validation here
  4. SECURITY_ATTRIBUTES sa;
  5. HANDLE hRead,hWrite;
  6. sa.nLength = sizeof(SECURITY_ATTRIBUTES);
  7. sa.lpSecurityDescriptor = NULL;
  8. sa.bInheritHandle = TRUE;
  9. if(!CreatePipe(&hRead,&hWrite,&sa,0))
  10. {
  11. MessageBox("CreatePipe Failed");
  12. return;
  13. }
  14. STARTUPINFO si;
  15. PROCESS_INFORMATION pi;
  16. ZeroMemory(&si,sizeof(STARTUPINFO));
  17. si.cb = sizeof(STARTUPINFO);
  18. GetStartupInfo(&si);
  19. si.hStdError = hWrite;
  20. si.hStdOutput = hWrite;
  21. si.wShowWindow = SW_HIDE;
  22. si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
  23. char cmdline[200];
  24. CString tmp,stredit2;
  25. GetDlgItemText(IDC_EDIT_CMD,stredit2);
  26. tmp.Format("cmd /C %s",stredit2);
  27. sprintf(cmdline,"%s",tmp);
  28. if(!CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
  29. {
  30. MessageBox("CreateProcess failed!");
  31. return;
  32. }
  33. CloseHandle(hWrite);
  34. char buffer[4096] = {0};
  35. CString strOutput;
  36. DWORD bytesRead;
  37. while(1)
  38. {
  39. if(NULL == ReadFile(hRead,buffer,4095,&bytesRead,NULL))
  40. {
  41. break;
  42. }
  43. strOutput += buffer;
  44. SetDlgItemText(IDC_EDIT_TEXT,strOutput);
  45. UpdateWindow();
  46. Sleep(1000);
  47. }
  48. CloseHandle(hRead);
  49. }

以上是在一个MFC中点击OnOK按钮后,将IDC_EDIT_CMD编辑框中的命令执行,并将1秒内cmd命令的回显答应到IDC_EDIT_TEXT编辑框中的实现

VC++中调用cmd的集中方式的更多相关文章

  1. [转]VC中调用外部exe程序方式

    本文转自:http://blog.sina.com.cn/s/blog_486285690100ljwu.html 目前知道三种方式:WinExec,ShellExecute ,CreateProce ...

  2. VC中调用COM组件的方法(转载)

    原文参考:http://hi.baidu.com/mingyueye/item/53ebecd44da76917d80e4449 总结一下在VC中调用COM组件的方法 准备及条件: COM服务器为进程 ...

  3. vc中调用Com组件的方法详解

    vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGet ...

  4. [X264] MinGW编译x264,VC中调用libx264.dll-------------<参考转>

    1. 下载并按照MinGW,最好就缺省按照    http://sourceforge.net/projects/ ... ler/mingw-get-inst/    把C:\MinGW\bin添加 ...

  5. python中调用cmd

    1. 使用os.system("cmd") 这是最简单的一种方法,特点是执行的时候程序会打出cmd在linux上执行的信息.使用前需要import os. os.system(&q ...

  6. Python中调用其他程序的方式

    前言 在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程, 可以使用win32 ...

  7. [转]vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess

    三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,Cr ...

  8. vc 中调用COM组件的方法

    需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGetResEx--方法HelloEx() 2.在工程中导入组件或类型库  #im ...

  9. vc中调用Com组件的所有方法详解

    首先,对于Com组件的入门学习,可以看一下<Windows程序设计技术基础——MFC与.NET> 任哲编著的21世纪重点大学规划教材那本书,适合入门(虽然不一定会使用),了解些基础原理. ...

随机推荐

  1. JavaScript 阻止默认时间和冒泡时间

    <!DOCTYPE HTML><html> <head> <title>event cancel</title> </head> ...

  2. 032数值的整数次方(keep it up)

    剑指offer中题目:http://ac.jobdu.com/problem.php? pid=1514 题目描写叙述: 给定一个double类型的浮点数base和int类型的整数exponent. ...

  3. 提高你的Java代码质量吧:让我们疑惑的字符串拼接方式的选择

    一.分析  对于一个字符串进行拼接有三种方法:加号.concat方法.及StringBuiler或StringBuffer. 1."+"方法拼接字符串  str += " ...

  4. Difference between Tomcat's extraResourcePaths and aliases to access an external directory--转

    Question: Simple question: In Tomcat7, what's the difference between using extraResourcePaths and al ...

  5. 安装android studio 出现的路径问题 tools.jar' seems to be not in Android Studio classpath

    尝试一下android studio  ,谁知出现路径问题 'tools.jar' seems to be not in Android Studio classpath. Please ensure ...

  6. 选课 树形dp+路径输出

    #include<iostream> #include<cstdio> #include<cstring> #define maxn 2010 using name ...

  7. bzoj 3043 (差分序列运用)

    维护差分序列 显然要使差分序列的后n-1位为0 对于原来的区间操作 只需要单点修改或者两个点修改 就转化成了 对于差分序列但以一个数+ 或 - 或者一个+1同时一个- ans1=max(sum1,su ...

  8. css控制背景图片在浏览器中居中,下拉浏览器的时候背景图一直不变

    如 http://www.gm.com/ css样式如下 ;;} #con{ position:absolute; ; ; height:100%; width:100%; background-im ...

  9. Rolling cURL: PHP并发最佳实践

    Rolling cURL: PHP并发最佳实践 在实际项目或者自己编写小工具(比如新闻聚合,商品价格监控,比价)的过程中, 通常需要从第3方网站或者API接口获取数据, 在需要处理1个URL队列时, ...

  10. shell中if做比较

    比较两个字符串是否相等的办法是: if [ "$test"x = "test"x ]; then 这里的关键有几点: 1 使用单个等号 2 注意到等号两边各有一 ...