?
Hallo Zusammen,
ich hab in einem anderen Forum den Source für eine Dos-Pipe gefunden, der Quelltext sieht so aus ( bitte nicht erschrecken auch wenn er etwas lang aussieht _)
void ExecuteSE (char* szCommand, char *szDestination, int nSize, int nTimeOut)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
SECURITY_ATTRIBUTES sa;
HANDLE hPipeRead,hPipeWrite;
DWORD dwBytes;
//
// Erstellen der Pipe
sa.nLength=sizeof(sa);
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
CreatePipe(&hPipeRead,&hPipeWrite, &sa, 0);
//
// Erstellen des Prozesses
si.cb=sizeof(STARTUPINFO);
si.lpReserved=NULL;
si.lpDesktop=NULL;
si.lpTitle=NULL;
si.dwX=0;
si.dwY=0;
si.dwXSize=640;
si.dwYSize=400;
si.dwXCountChars=0;
si.dwYCountChars=0;
si.dwFillAttribute=FOREGROUND_BLUE;
si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
si.wShowWindow=SW_HIDE;
si.cbReserved2=0;
si.lpReserved2=NULL;
si.hStdInput=0;
si.hStdOutput=hPipeWrite;
si.hStdError=0;
CreateProcess(NULL, szCommand, NULL, NULL, TRUE, CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
CloseHandle (pi.hThread);
WaitForSingleObject(pi.hProcess, nTimeOut);
memset(szDestination, 0, nSize);
ReadFile(hPipeRead,szDestination, nSize,&dwBytes,NULL);
return;
}
Ich hab den Code in eine Funktion gepackt, es funktioniert auch alles einwandfrei, also ich kann im char*szCommand-Argument einen Dosbefehl angeben und bekomme dann die Ausgabe in den String, den ich dem char*szDestination-Argument übergebeben habe. Nur...=) leider bleibt die Funktion hängen wenn es sich nicht um einen Dos-Befehl handelt.Und wenn ich den "dir" Befehl von Dos verwende, so kehrt die Funktion auch nicht mehr zurück. Nur warum ??
Sry aber ich verstehs nicht-vielleicht bin ich auch einfach zu müde *grins* -ich verbringe jetzt schon 4 Stunden (is kein Witz )damit den Source wieder und wieder anzusehen und ich finde einfach den Fehler nicht. _
Wäre echt suuuuuuuuuuupernett wenn ihr mir da helfen könntet
Schönen Gruß
Christoph aka. Xzibit