管道Demo

使用管道实现读取DOS命令结果,界面如下:

主要代码如下:

 1     UpdateData(TRUE);
 2 
 3     //创建一个管道,用于接收命令执行结果
 4     SECURITY_ATTRIBUTES sa;
 5     ZeroMemory(&sa, sizeof(sa));
 6     sa.nLength = sizeof(SECURITY_ATTRIBUTES);
 7     sa.bInheritHandle = TRUE;
 8     sa.lpSecurityDescriptor = NULL;
 9     HANDLE hRead, hWrite;
10     if (!CreatePipe(&hRead, &hWrite, &sa, 0))
11     {
12         AfxMessageBox(_T("创建管道出错。"));
13         return;
14     }
15 
16     //创建一个没有DOS命令框的、隐藏窗口的进程来执行用户输入的命令
17     STARTUPINFO si;
18     ZeroMemory(&si, sizeof(si));
19     si.cb = sizeof(STARTUPINFO);
20     GetStartupInfo(&si);
21     si.hStdError = hWrite;
22     si.hStdOutput = hWrite;
23     si.wShowWindow = SW_HIDE;
24     si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
25 
26     PROCESS_INFORMATION pi;
27     CString strCommand;
28     strCommand.Format(_T("cmd.exe /c %s"), m_strCommand);
29     BOOL res = CreateProcess(NULL, strCommand.GetBuffer(0), NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi);
30     if (!res)
31     {
32         AfxMessageBox(_T("创建进程出错。"));
33         return;
34     }
35     CloseHandle(hWrite);
36 
37     //从管道中读取已写入的数据,并显示出来
38     CString strTemp;
39     TCHAR szBuff[4096] = { 0 };
40     DWORD dwRead = 0;
41     m_strResult = _T("");
42     while (true)
43     {
44         if (!ReadFile(hRead, szBuff, 4095, &dwRead, NULL))
45         {
46             break;
47         }
48         szBuff[dwRead] = _T('\0');
49         strTemp.Format(_T("%s"), szBuff);
50         m_strResult += strTemp;
51     }
52     UpdateData(FALSE);

下载地址:http://pan.baidu.com/s/1gdIEoJT

转载于:https://www.cnblogs.com/qiyueliuguang/p/3496586.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值