• 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编辑框中的实现

  • 相关阅读:
    Hadoop专有名词
    mapreduce的cleanUp和setUp的特殊用法(TopN问题)和常规用法
    Hadoop 中文编码相关问题 -- mapreduce程序处理GBK编码数据并输出GBK编码数据
    MapReduce核心
    技术提升
    Linq使用group by
    C#中DllImport用法
    mysql分组后将未分组的列合并成行GROUP BY,GROUP_CONCAT
    MVC之CodeFirst
    MVC的Forms登录验证
  • 原文地址:https://www.cnblogs.com/micro-chen/p/5894938.html
Copyright © 2020-2023  润新知