Chinaunix首页 | 论坛 | 博客
  • 博客访问: 86938
  • 博文数量: 38
  • 博客积分: 350
  • 博客等级: 一等列兵
  • 技术积分: 365
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-30 09:14
个人简介

每一种技术都有其诱人之处。

文章分类

全部博文(38)

文章存档

2016年(2)

2014年(23)

2011年(13)

我的朋友

分类: C/C++

2011-10-19 23:59:06

AnsiString __fastcall TMainForm::RunShell (AnsiString sCommand){
    SECURITY_ATTRIBUTES sa = {0};
    sa.lpSecurityDescriptor = NULL;                        // 使用系统默认的安全描述符
    sa.bInheritHandle = TRUE;                               // 是否继承句柄

    HANDLE hRead, hWrite;                                    // 指向读写端句柄的指针
    if (!CreatePipe (&hRead, &hWrite, &sa, 0))
        return Exception ();                                // 创建管道

    STARTUPINFO si = {0};
    GetStartupInfo(&si);

    si.hStdError = hWrite;                                  // 重定向错误管道
    si.hStdOutput = hWrite;                                 // 重定向输出管道
    si.wShowWindow = SW_HIDE;                              // 隐藏 CMD 窗口
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

    PROCESS_INFORMATION pi = {0};
    if (!CreateProcess (NULL, sCommand.c_str () ,NULL, NULL, TRUE,
        NULL, NULL, NULL, &si, &pi))return Exception(); // 创建进程
    CloseHandle (hWrite);                                  // 关闭句柄

    CHAR szReadBuf[1024];                                  // 创建缓冲区
    DWORD dwByteRead = 0;                                  // 字符串读取游标
    AnsiString Data;
    while (ReadFile (hRead, szReadBuf, sizeof (szReadBuf) - 1, &dwByteRead, NULL)){
        szReadBuf[dwByteRead] = '\0';                     // 填充末尾
        Data += (AnsiString)szReadBuf;                    // 连接字符串
    }
    CloseHandle(hRead);                                     // 关闭句柄
    return Data;
}

阅读(855) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~