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. oracle用户解锁和改密

    alter user hs_user account unlock; alter user hs_asset account unlock; alter user hs_his account unl ...

  2. C#获取时间属于第几周

    int getWeek(DateTime dt)    {        DateTime time = Convert.ToDateTime(dt.ToString("yyyy" ...

  3. swift学习资料初探

    1.  http://code.csdn.net/news/2820075

  4. Android Toast 提示按两次返回键退出

    public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceS ...

  5. hdu3724Encoded Barcodes(Trie tree)

    题目请戳这里 题目大意:给n个字符串,给m个询问,每个询问给k个条形码.每个条形码由8个小码组成,每个小码有相应的宽度,已知一个条形码的宽度只有2种,宽的表示1,窄的表示0.并且宽的宽度是窄的宽度的2 ...

  6. linux vim 个性化设置(.vimrc)

    set sw=4   set ts=4   set et   set smarttab   set smartindent   set lbr   set fo+=mB   set sm   set ...

  7. hdu 1869

    题意是给m组人物关系,然后判断是否符合六度分离,代码主要就是三个for那里 然后要记得后面判断的时候是大于7,这题除了Florde算法,还有另外一种算法,不过我没记.... #include < ...

  8. YII框架路由和URL生成

    路由和URL生成 当一个YII应用开始处理一个请求的时候,它首先要做的便是将请求的URL转化成一个路由.路由的作用是用于后续实例化相应的控制器和操作,以便处理请求,整个处理过程便叫做路由.路由的逆过程 ...

  9. Linux命令行文本处理工具

    关键字搜索: grep  关键字  指定文件 -i   搜索时忽略大小写 -n  显示结果所在行 -v  显示不包含关键字的行 基于列的文本处理: cut -d: -f1 /etc/passwd -d ...

  10. PHP编程规范

    好的编程规范不仅是对阅读者的负责,也是对自身的负责: ----割---- 一直以来我都是以php函数的风格来写php,所有变量,函数,类都使用小写,单词之间以下划线隔开,一直比较排斥驼峰式的代码规范, ...