![]() |
Programm extern ausführen
Hallo erstmal :hi:
ich hoff ich bin in der richtigen Kategorie gelandet.. Ich möchte gern mit Delphi ein Programm ausführen und die Befehle angeben, nach stundenlangem Ggoglen hab ich herausgefunden, dass ShellExecute, WinExecute und TProcess geeignet wären, wobei glaube ich nur letztere Funktion auch Befehle ausführt - oder? Dabei hab ich jetzt folgendes Problem: Muss ja eingeben uses SysUtils, Classes, Process; Dann spuckt Delphi mir aus "File not found: 'Process.dcu'" - ich verzweifelt nach dieser Datei gesucht aber ich find die nicht... Wo bekomm ich die denn jetzt her? Sorry, kenne mich kaum mit Delphi aus und probiere jetzt schon ziemlich lange, das zum Laufen zu kriegen. Wäre nett, wenn mir jemand hilft! Liebe Grüße, Ariane |
Re: Programm extern ausführen
Hallo und willkomen in der Dp!
Möglichkeiten zum starten von Programmen gibt es viele. ShellExecute, WinExec oder CreateProcess und sicher noch einige mehr. Aber für Dich sich die beiden ersten interessant. bei Shellexecute musst Du die ShellApi einbinden, bei Winexec, Windows oder SysUtils. Bin mit jetzt nicht sicher. |
Re: Programm extern ausführen
Delphi-Quellcode:
function WinExecAndWait_32(FileName: string; Visibility: Integer; bWait: Boolean = False): Longword;
var { by Pat Ritchey } zAppName: array[0..512] of Char; zCurDir: array[0..255] of Char; WorkDir: string; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin StrPCopy(zAppName, FileName); GetDir(0, WorkDir); StrPCopy(zCurDir, WorkDir); FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := Visibility; if not CreateProcess(nil, zAppName, // pointer to command line string nil, // pointer to process security attributes nil, // pointer to thread security attributes False, // handle inheritance flag CREATE_NEW_CONSOLE or // creation flags NORMAL_PRIORITY_CLASS, nil, //pointer to new environment block nil, // pointer to current directory name StartupInfo, // pointer to STARTUPINFO ProcessInfo) // pointer to PROCESS_INF then Result := WAIT_FAILED else begin if bWait then WaitForSingleObject(ProcessInfo.hProcess, INFINITE); GetExitCodeProcess(ProcessInfo.hProcess, Result); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); end; end; { WinExecAndWait32 } das ist die funktion die ich immer verwende, und die ist auch kompatibel mit späteren windows versionen!!! um sie zu verwenden musst du unter uses windows einbinden aufrufen kannst du die function so: WinExecAndWait_32('c:\sin.exe +set game 2015', 1, False); wäre eine version mit parameter WinExecAndWait_32('c:\sin.exe', 1, False); und diese wäre ohne parameter!! die 1 steht für die sichtbarkeit des gestarten programms und true/false steht bei der function für das warten auf das gestartete programm |
Re: Programm extern ausführen
Erstmal danke für die Hilfe!!
Kann mit beiden Varianten das gewünschte Programm starten - aber wie lasse ich Delphi die Befehle in das Programm eingeben? Möchte, dass das Programm, sobald es gestartet wurde, immer das Selbe tut - also auch immer die selben Befehle bekommt. edit: Mir ist auch nicht so klar, was der Parameter auslöst.. edit2: ach doch, zumindest hab ich herausgefunden, dass der Parameter sich auf die Konfigurationen bezieht (wie lbccaleb ja auch mit "set" geschrieben hat, sorry..) |
Re: Programm extern ausführen
...mal andersrum gefragt: Was soll am Ende dabei rauskommen wenn "Delphi Befehle in Dein Programm eingegeben" hat?
|
Re: Programm extern ausführen
also den bsp mit dem parameter hab ich nur mal mit gepostet damit auch klar wird wie ein programm mit parametern über diese function gestartet wird, das brauchst du bei dir nicht mit eingeben wenn du keine parameter hast, desweiteren musst du natürlich die sin.exe durch dein programm austauschen, wie meinst du das mit von delphi eingeben lassen und es soll immer das selbe tun??
|
Re: Programm extern ausführen
Ok, konkretes Beispiel:
Programm: ampl.exe Befehle, die ich eingeben möchte: model test.mod; (noch weitere Befehle) quit; Es wäre doch bestimmt möglich, dass Delphi diese Befehle direkt an das Programm weiter gibt, oder? Am Ende soll Folgendes herauskommen: Beispiel: Ich möchte ein Problem mit einem Programm (SCIP) lösen. Die Informationen dazu lese ich aus Edit-Fenstern ein und speichere sie in einer externen Datei (das hab ich schon irgendwie hinbekommen, funktioniert soweit). Dann möchte ich das Lösungsprogramm starten. Dem Programm sollen die Befehle zum Lösen des Problems gegeben werden (das Programm nutzt, um die Lösung zu ermitteln, die externe Datei). Am Ende spuckt mir das Programm eine Lösung aus, die ich dann (aber erst später, erstmal sollte ich das Ausführen hinbekommen xD) wieder *äh* "einlesen" möchte, sodass sie in den Labels meines Programms erscheinen.. |
Re: Programm extern ausführen
Also Du hat (D)eine Anwendung wo du Infos in Edits hast. Jetzt soll beim Speichern gleich ein anderes programm gestarted werden, (SCIP.exe) wobei "model test.mod" an SCIP.exe übergeben wird. Richtig!?
|
Re: Programm extern ausführen
Ja genau. Ich möchte *nachzähl* 3 Befehle an scip.exe übergeben.
|
Re: Programm extern ausführen
Delphi-Quellcode:
sFileName := 'c:\path\bla.exe'
shellexecute(Handle, ExtractFileName(sFileName), 'model testy.mod', ÊxtractfilePtah(sFileName), SW_SHOW); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 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