zoukankan      html  css  js  c++  java
  • VC++中调用cmd的集中方式

    1. system方法:

    原型:

    [cpp] view plain copy
     
    1. int __cdecl system(const char *);  

    例如:

    [cpp] view plain copy
     
    1. system("ipconfig");  

    2. WinExec方法:

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

    原型:

    [cpp] view plain copy
     
    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等方法的操作:

    原型:

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

    例如:

    [cpp] view plain copy
     
    1. ShellExecute(NULL,"open","abc.xls",NULL,NULL,SW_HIDE);//打开默认路径的abc.xls文件  

    4.可回显的调用方法:

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

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

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

  • 相关阅读:
    程序员跳槽到对手公司,被前老板设计陷害
    创业码农被公司套路最惨的一次经历
    记录一次由屁股决定研发的狗血经历
    不去培训班,你凭什么觉得自己能学会编程,嗯?!
    毕业生是怎么一步步给培训班骗去学编程的
    我的一次被骗去培训班狗血的经历
    不去培训班,你凭什么觉得自己能学会编程
    Phabricatori 之项目管理软件
    kvm之virt-manage 管理功能
    debian 10 安装apache 和php
  • 原文地址:https://www.cnblogs.com/micro-chen/p/5894938.html
Copyright © 2011-2022 走看看