win32控制台

可回显的调用方法:

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

view plain

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值