[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

Przechwytywanie wyjscia procesu potomnego

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

1 Answer

Jan Kowalski

8/17/2007 7:33:00 AM

0


U¿ytkownik <adamskrodzki@gmail.com> napisa³ w wiadomo¶ci
news:1187265939.912928.163390@r29g2000hsg.googlegroups.com...
>Problem wygl±da tak:
>
> Mam aplikacjê, która ma uruchomiæ drug± i przechwyciæ
>to co ta druga wyrzuci³a na STDOUT
> W oparciu o google znalaz³em taki kawa³ek kodu (+
>trochê w³asnych modyfikacji)
(...)
> w output spodziewam siê wyj¶cia, tymczasem niema tam
>nic,
> dodam ¿e Okno.exe to skompilowana aplikacja MFC z jednym
>dialogiem
>
> jak z linii poleceñ wpiszê Okno.exe > a.txt
> to do pliku wyj¶cie trafia, dlaczego nie mogê zrobiæ
>tego programowo?

Zastosuj CreatePipe, CreateProcess z parametrami w STARTUPINFO wskazujacymi
na deskryptory z CreatePipe
a potem PeekPipe i ReadPipe i w³ala.
To powy¿ej to bardzo du¿e uproszczenie. Bardzo.