Hallo,
ich wollte mal einen Versuch starten eine externe Anwendung zu starten und den Datenstrom selbst in einer Box darzustellen.
Meine Spielwiese besteht aktuell aus zwei Edits und einem Button zum starten.
Edit 1 [ed_app] : "ipconfig"
Edit 2 [ed_para]: "/all"
Ich habe hier im Forum folgenden Code gefunden
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var StartStruct: STARTUPINFO; // Anweisungen für den Prozess-Start
ProcInfo: PROCESS_INFORMATION; // das kriegen wir zurück
WriteInput, ReadOutput: THandle; // hierüber können wir mit dem Prozess kommunizieren
SecAttr: SECURITY_ATTRIBUTES; // hiermit sagen wir, dass die Handles vererbbar werden sollen
pAppStr, pAttrStr : PAnsiChar;
begin
pAppStr := pchar(ed_app.text);
pAttrStr := pchar(ed_para.text);
FillChar(StartStruct, SizeOf(StartStruct), #0);
StartStruct.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
StartStruct.wShowWindow := SW_MAXIMIZE;
StartStruct.cb:=SizeOf(StartStruct); // Die Größenangabe muss stimmen!
StartStruct.dwFlags:=STARTF_USESTDHANDLES; // Wir wollen die Standard-Handles umleiten
SecAttr.nLength := SizeOf(SecAttr);
SecAttr.lpSecurityDescriptor := nil; // Standard-Sicherheit
SecAttr.bInheritHandle := True; // vererbbar
CreatePipe(ReadOutput, StartStruct.hStdOutput, @SecAttr, 0);
CreatePipe(StartStruct.hStdInput, WriteInput, @SecAttr, 0); //die Handles erzeugen
CreateProcess(
pAppStr, { LPCTSTR - lpApplicationName }
pAttrStr, { LPTSTR - lpCommandLine }
nil, { LPSECURITY_ATTRIBUTES - lpProcessAttributes }
nil, { LPSECURITY_ATTRIBUTES - lpThreadAttributes }
false, { BOOL - bInheritHandles }
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, { DWORD - dwCreationFlags }
nil, { LPVOID - lpEnvironment }
nil, { LPCTSTR - lpCurrentDirectory }
StartStruct, { LPSTARTUPINFO - lpStartupInfo }
ProcInfo { LPPROCESS_INFORMATION - lpProcessInformation }
);
CloseHandle(StartStruct.hStdOutput);
CloseHandle(StartStruct.hStdInput);
CloseHandle(ProcInfo.hProcess); // Nur falls du das Prozesshandle nicht brauchst
CloseHandle(ProcInfo.hThread);
//jetzt mit ReadFile/WriteFile kommunizieren
CloseHandle(WriteInput);
CloseHandle(ReadOutput);
end;
Ich durchblicke diesen Code nicht wirklich, aber er startet jedenfalls keine Anwendung.
Ich wäre schon dankbar für einen Tipp oder eine Erklärung.
Gruß Holger.
Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...