adamskrodzki
8/16/2007 12:06:00 PM
Problem wyglada tak:
Mam aplikacje, która ma uruchomic druga i przechwycic
to co ta druga wyrzucila na STDOUT
W oparciu o google znalazlem taki kawalek kodu (+
troche wlasnych modyfikacji)
char mytTmp[1000]
HANDLE stdOut = myTmp;
SetStdHandle(STD_OUTPUT_HANDLE,stdOut);
STARTUPINFO sai;
ZeroMemory( &sai, sizeof( STARTUPINFO ) );
ZeroMemory( myTmp, 1000 );
sai.hStdOutput = stdOut;
sai.hStdError = NULL;
sai.hStdInput = NULL;
sai.cb = sizeof( sai );
sai.lpReserved = NULL ;
PROCESS_INFORMATION pi;
sai.dwFlags = STARTF_USESTDHANDLES ;
if(CreateProcess( CString("c:\\Okno.exe"),_T(""), NULL, NULL, FALSE,
0, NULL, CString("C:\\"), &sai, &pi )==0)
{
DWORD Blad = GetLastError();
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,Blad,LANG_SYSTEM_DEFAULT,
(LPWSTR)tmp,1000,NULL);
CDetectDotNet::ChToUTF(tmp);
std::cout<<tmp<<std::endl;
};
WaitForSingleObject( pi.hProcess, INFINITE );
string output = "";
char* buff = new char[ 32 ];
DWORD numRead;
int bRes ;
do
{
bRes = ReadFile( stdOut, buff, 32, &numRead, NULL );
output += std::string(buff,numRead);
}
while( !bRes && numRead != 0 );
delete[32] buff;
tmp[0]=0;
output.copy(tmp,output.size(),0);
w output spodziewam sie wyjscia, tymczasem niema tam
nic,
dodam ze Okno.exe to skompilowana aplikacja MFC z jednym
dialogiem
jak z linii polecen wpisze Okno.exe > a.txt
to do pliku wyjscie trafia, dlaczego nie moge zrobic
tego programowo?
Pozdrawiam
Adam Skrodzki