• 管道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

  • 相关阅读:
    洛谷 P2695 骑士的工作
    洛谷 P2839 畅通工程
    hdu_5742_It's All In The Mind
    hdu_5734_Acperience
    hdu_5738_Eureka(脑洞)
    hdu_5724_Chess(组合博弈)
    Codeforces Round #363 (Div. 2)D. Fix a Tree(并查集)
    Codeforces Round #363 (Div. 2) B. One Bomb (水题)
    Codeforces Round #363 (Div. 2) C. Vacations(DP)
    hdu_5723_Abandoned country(最小生成树)
  • 原文地址:https://www.cnblogs.com/qiyueliuguang/p/3496586.html
Copyright © 2020-2023  润新知