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 here
    SECURITY_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编辑框中的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值