本文参照了http://topic.youkuaiyun.com/t/20040826/20/3313485.html
原来是一段vb的代码,我把它重写成 BCB
/××××××××××××××××将控制台的输入重定位到Memo 的函数×××××××××××××××××××××××××××××××××××××/
#ifndef PipeToMemoH
#define PipeToMemoH
#include <StdCtrls.hpp>
void PipeToMemo(String cmd, TMemo* mmo1)
{
SECURITY_ATTRIBUTES sa;
HANDLE hRead;
HANDLE hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor=NULL;
sa.bInheritHandle=true;
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox(NULL,"创建管道失败","错误",MB_OK);
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcess(NULL,cmd.c_str() ,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
MessageBox0(NULL,"启动控制台失败","错误",MB_OK);
return;
}
CloseHandle(hWrite);
char buffer[4096] = {0};
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
mmo1->Lines->Add(buffer);
Sleep(200);
}
::CloseHandle(hRead);
}
#endif
/********************************测试代码***************************************************************/
void __fastcall TForm1::btn1Click(TObject *Sender)
{
char dir[256]="d://蓝威//ljf";
SetCurrentDirectory(dir);
PipeToMemo("cmd.exe /c /"rar e D://蓝威//123.rar -o+ /"",mmo1);
}
原来是一段vb的代码,我把它重写成 BCB
/××××××××××××××××将控制台的输入重定位到Memo 的函数×××××××××××××××××××××××××××××××××××××/
#ifndef PipeToMemoH
#define PipeToMemoH
#include <StdCtrls.hpp>
void PipeToMemo(String cmd, TMemo* mmo1)
{
SECURITY_ATTRIBUTES sa;
HANDLE hRead;
HANDLE hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor=NULL;
sa.bInheritHandle=true;
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox(NULL,"创建管道失败","错误",MB_OK);
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcess(NULL,cmd.c_str() ,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
MessageBox0(NULL,"启动控制台失败","错误",MB_OK);
return;
}
CloseHandle(hWrite);
char buffer[4096] = {0};
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
mmo1->Lines->Add(buffer);
Sleep(200);
}
::CloseHandle(hRead);
}
#endif
/********************************测试代码***************************************************************/
void __fastcall TForm1::btn1Click(TObject *Sender)
{
char dir[256]="d://蓝威//ljf";
SetCurrentDirectory(dir);
PipeToMemo("cmd.exe /c /"rar e D://蓝威//123.rar -o+ /"",mmo1);
}