![]() |
Re: Programm extern ausführen
ja ich wusste ja bisher nicht genau was du vorhast, jetzt wo du den screener gepostet hast kann ich dir schon mal sagen das "model" in dieser art dadrinne schon mal blödsinn ist, denn das prog erkennt diesen parameter so nicht, versuchs einfach mal ohne also so:
Delphi-Quellcode:
dann kannst ja noch mal schreiben..
"scip.exe xy.mod"
|
Re: Programm extern ausführen
Liste der Anhänge anzeigen (Anzahl: 1)
Funktioniert leider auch nicht. Habe außerdem leider auch die Befehle von AMPL und SCIP durchnander gebracht :oops: Kann die ja zum Glück leicht ändern..im Anhang jetzt der Versuch mit
scip.exe "read prog.zpl" Also mit diesen Eingaben funktionierts leider nicht. Gebe ich aber zuerst scip.exe ein, lande ich im "SCIP>" und dann funktioniert "read prog.zpl"... Ohne das "read" bzw. "model"/wie auch immer wird auch wieder angezeigt "invalid parameter <prog.zpl>" |
Re: Programm extern ausführen
Ist klar weil das programm nur die angegeben Parameter unterstützt, Die wären etwa -c -b -l
weder "read" noch "model" wird das Programm nie erkennen. |
Re: Programm extern ausführen
Oh mist :angel2:
Mit
Delphi-Quellcode:
funktionierts jetzt...
WinExecAndWait_32('scip.exe -c "read sudoku.zpl opt disp sol"', 1, False);
Vielen Dank an euch beide!! Hab mich ja selten doof angestellt xD Jetzt bleibt nur noch aus, wie ich die Zeilen, die das Programm ausgibt (die Lösungen) in Delphi einlese..soll ich dazu einen extra Thread erstellen? Könntet ihr mir da bitte auch noch helfen? |
Re: Programm extern ausführen
TDosCommand, CaptureCmd
|
Re: Programm extern ausführen
Hab jetzt versucht, TDoscommand.pas zu installieren, da wird aber dann angezeigt
"Could not create '(mein Verzeichnispfad von Delphi)\projects\bpl\dclusr70.bpl'" Wobei meine bpl Dateien glaub ich alle in (Delphi-Pfad)\Bin liegen.. Daraufhin hab ich ein neues Package erstellt und absolutes Chaos angerichtet.. Hab immerhin gute zwei Stunden gebraucht, um den angerichteten Schaden wieder zu reparieren bzw. herauszufinden wie ich auch wieder Dateien kompilieren kann :? Kann mir jemand bitte helfen? Ich krieg das nicht auf die Reihe :-/ |
Re: Programm extern ausführen
Morgen
Ich glaub Du hast Dein Delphi leicht verbogen. Versuch mal reparieren von Setup.
Delphi-Quellcode:
Edit1.Text -> Ist Dein Command! 'Cmd /k' musst du lassen. das sich die Console sonst nicht wiederbeendet. Schau in die Hilfe wegen dem Command (Cmd /?)
function GetConsoleOutput(const Command: String; var Output, Errors: TStringList): Boolean;
var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; SecurityAttr: TSecurityAttributes; PipeOutputRead: THandle; PipeOutputWrite: THandle; PipeErrorsRead: THandle; PipeErrorsWrite: THandle; Succeed: Boolean; Buffer: array [0..255] of Char; NumberOfBytesRead: DWORD; Stream: TMemoryStream; begin //Initialisierung ProcessInfo FillChar(ProcessInfo, SizeOf(TProcessInformation), 0); //Initialisierung SecurityAttr FillChar(SecurityAttr, SizeOf(TSecurityAttributes), 0); SecurityAttr.nLength := SizeOf(SecurityAttr); SecurityAttr.bInheritHandle := true; SecurityAttr.lpSecurityDescriptor := nil; //Pipes erzeugen CreatePipe(PipeOutputRead, PipeOutputWrite, @SecurityAttr, 0); CreatePipe(PipeErrorsRead, PipeErrorsWrite, @SecurityAttr, 0); //Initialisierung StartupInfo FillChar(StartupInfo, SizeOf(TStartupInfo), 0); StartupInfo.cb:=SizeOf(StartupInfo); StartupInfo.hStdInput := 0; StartupInfo.hStdOutput := PipeOutputWrite; StartupInfo.hStdError := PipeErrorsWrite; StartupInfo.wShowWindow := sw_Hide; StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; if CreateProcess(nil, PChar(command), nil, nil, true, CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin result:=true; //Write-Pipes schließen CloseHandle(PipeOutputWrite); CloseHandle(PipeErrorsWrite); //Ausgabe Read-Pipe auslesen Stream := TMemoryStream.Create; try while true do begin succeed := ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil); if not succeed then break; Stream.Write(Buffer, NumberOfBytesRead); end; Stream.Position := 0; Output.LoadFromStream(Stream); finally Stream.Free; end; CloseHandle(PipeOutputRead); //Fehler Read-Pipe auslesen Stream := TMemoryStream.Create; try while true do begin succeed := ReadFile(PipeErrorsRead, Buffer, 255, NumberOfBytesRead, nil); if not succeed then break; Stream.Write(Buffer, NumberOfBytesRead); end; Stream.Position := 0; Errors.LoadFromStream(Stream); finally Stream.Free; end; CloseHandle(PipeErrorsRead); WaitForSingleObject(ProcessInfo.hProcess, INFINITE); CloseHandle(ProcessInfo.hProcess); end else begin result:=false; CloseHandle(PipeOutputRead); CloseHandle(PipeOutputWrite); CloseHandle(PipeErrorsRead); CloseHandle(PipeErrorsWrite); end; end; procedure TForm1.Button1Click(Sender: TObject); var output, errors: TStringList; begin output:=TStringList.Create; try errors:=TStringList.Create; if GetConsoleOutput('cmd /K '+Edit1.Text, output, errors) then Memo1.Lines.AddStrings(output); finally output.free; errors.free; end; end; |
Re: Programm extern ausführen
Danke für die Antwort!!
Mittlerweile scheint Delphi wieder zu funktionieren, hab einfach mal reparieren lassen und meine "environment" paths zurückgesetzt, immerhin hab ich jetzt keinen fehler mit "can't find system.pas" mehr. Delphi startet das Programm ohne Fehlermeldungen. Führe ich aber den Prozess aus (klicke also auf den Button), läuft das Programm - spuckt aber nichts aus und stürzt ab (habs auch mal mehrere Minuten laufen lassen, hat nichts gebracht). Ist es außerdem möglich, statt in ein Memo-Feld eine Zeile bzw. einen Teil einer Zeile in ein Label einzulesen? An dem Programm kann es eigentlich auch nicht liegen, hab ein paar Befehle gekürzt, damit das SCIP-Fenster nicht zu viele Zeilen hat, bewirkte aber auch nichts. Woran kann das jetzt liegen? edit: hab die anderen Ausführ-Befehle wie WinExecute und so gelöscht und Edit1.Text durch 'scip.exe "r prog.zpl opt disp sol"', also meine Befehle ersetzt - richtig? Hab auch WinExecute nochmal vorher ausführen lassen aber dasselbe Ergebnis. |
Re: Programm extern ausführen
du könntest so eine zeile aus einem memo in ein label einlesen:
Delphi-Quellcode:
wobei die 4 die zeile im memo ist, die du auslesen möchtest...
label1.Caption := memo1.Lines.Strings[4];
|
Re: Programm extern ausführen
Oh man...mein Fehler war, dass ich für SCIP nicht den Befehl "quit" eingegeben habe -.-
Hmm jetzt verbleibt zuletzt (dann hör ich auch auf zu nerven ;) ), dass ich nur einen Teil der Zeile einlese, da meine Zeilen so aussehen: x#1#1#5 und ich will nur die 5 einlesen lassen und in das label bringen. Geht das? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz