zoukankan      html  css  js  c++  java
  • 管道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

  • 相关阅读:
    6、scala面向对象-对象
    C# App.config配置文件的讲解
    abstract、override、new、virtual、sealed使用和示例
    C# 枚举的使用
    深入浅出面向对象分析与设计
    数据契约(DataContract)的作用
    C# 启动停止SQLServer数据库服务器
    C# 定时器计划任务
    C# 程序只能执行一次
    WPF dataGrid中的check的改变事件
  • 原文地址:https://www.cnblogs.com/qiyueliuguang/p/3496586.html
Copyright © 2011-2022 走看看