004
30.06.2003, 09:53 Uhr
Tody
|
Hallo zusammen!
ich habe eben diesen thread hier gefunden und wollte da mal drin rum bohren. ich möchte nämlich auch was in eine konsole schreiben nachdem ich darin eine programm gestartet hab. ich habe das problem schon in einem anderen thread geäußert aber ich bin erst kürzlich auf das thema pipes gestoßen.
bis jetzt habe ich es geschafft, mir nach ausführen eines createprocess() die "antwort" über eine pipe ausgeben zu lassen. allerdings schaffe ich es nicht die pipe zu erstellen, mit der ich dann wieder, zu einem bestimmten zeitpunkt, in die mit createprocess erstellte konsole schreiben kann.
hier ist mein bisheriger code:
C++: |
#include "stdafx.h"
int cmd(char *cmd, char *output, DWORD maxbuffer);
int _tmain(int argc, _TCHAR* argv[]) { char output[50000];
cmd("plink + parameter",output, 50000);
MessageBox(0,output,"PipeTest",0);
return 0; }
int cmd(char *cmd, char *output, DWORD maxbuffer) { HANDLE readHandle; HANDLE writeHandle; HANDLE stdHandle; DWORD bytesRead; SECURITY_ATTRIBUTES sa; PROCESS_INFORMATION pi; STARTUPINFO si; ZeroMemory(&sa,sizeof(SECURITY_ATTRIBUTES)); ZeroMemory(&pi,sizeof(PROCESS_INFORMATION)); ZeroMemory(&si,sizeof(STARTUPINFO));
sa.bInheritHandle=true; sa.lpSecurityDescriptor=NULL; sa.nLength=sizeof(SECURITY_ATTRIBUTES); si.cb=sizeof(STARTUPINFO); si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=SW_HIDE;
if (!CreatePipe(&readHandle,&writeHandle,&sa,NULL)) { OutputDebugString("cmd: CreatePipe failed!\n"); return 0; } stdHandle=GetStdHandle(STD_OUTPUT_HANDLE);
if (!SetStdHandle(STD_OUTPUT_HANDLE,writeHandle)) { OutputDebugString("cmd: SetStdHandle(writeHandle) failed!\n"); return 0; } if (!CreateProcess(NULL,cmd,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi)) { OutputDebugString("cmd: CreateProcess failed!\n"); return 0; } //Sleep(2000);
if (!ReadFile(readHandle,output,maxbuffer,&bytesRead,NULL)) { OutputDebugString("cmd: ReadFile failed!\n"); return 0; } output[bytesRead]='\0';
if (!SetStdHandle(STD_OUTPUT_HANDLE,stdHandle)) { OutputDebugString("cmd: SetStdHandle(stdHandle) failed!\n"); return 0; } if (!CloseHandle(readHandle)) { OutputDebugString("cmd: CloseHandle(readHandle) failed!\n"); } if (!CloseHandle(writeHandle)) { OutputDebugString("cmd: CloseHandle(writeHandle) failed!\n"); } return 1; }
|
|