Entwickler-Ecke
Dateizugriff - CreateProcess versus ShellExecute ??!!
SonEr - Di 23.09.03 16:24
Titel: CreateProcess versus ShellExecute ??!!
Hallo...
kann ich eigentlich in CreateProcess, so wie es in Shellexecute ist, Parameter für den zu startenden Programm mit übergeben. Wenn ja, wie würde zum Beispiel der untere ShellExecute-Aufruf mit CreateProcess aussehen?
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| ShellExecute(Application.Handle, 'open', 'C:\Programme\MeinProg.exe', '-u ICH -b Modul.dxl', nil, SW_HIDE); |
Mein eigentliches Problem ist nämlich auf das Ende eines aus Delphi heraus mit ShellExecute gestartetes Program zu warten, der die Struktur einer Datenbank liest und in eine Datei schreibt. Da ich aber dann im nächsten Schritt die Datei auswerten möchte, muss ich eben warten bis das Programm (mit der entsprechenden Parameterliste) fertig ist.
Ich habe hier im Forum einige Beispiele gesehen, bei denen das Problem ein ähnliches ist. Aber alle Beispiele sind mit CreateProcess und die zu startenden Programme hatten auch keine Parameter; zumindest habe ich sie nicht erkennen können.
Bin am verzweifeln.... :cry:
Und da ich auch noch keine Antwort auf meine andere Frage habe, möchte ich hier auch auf dieses Problem hinweisen. Es liegt in :
VCL (Visual Component Library)
TrreView: geänderte ImageIndexe werden nicht angezeigt
UC-Chewie - Di 23.09.03 18:16
Du kannst statt CreateProcess auch ShellExecuteEx benutzen.
Delete - Di 23.09.03 21:12
Oder du benutzt die gefundenen CreateProcess-Lösungen und hängst den oder die Parameter nach einem Leerzeichen an den Namen des Programms (den du ja bei CreateProcess auch angibst) an.
SonEr - Mi 24.09.03 11:00
Hallo Mathias,
Danke für den Tip. Hat wunderbar funktioniert. :D
Hast Du vielleicht auch eine Lösung für mein anderes Problem ? :?:
Zu finden in :
-->VCL (Visual Component Library) -->TrreView: geänderte ImageIndexe werden nicht angezeigt
P.S.: Leider weiß ich nicht wie man den Link zu dem Beitrag macht. Deshalb die obige Angabe.
Licki - Mi 24.09.03 15:19
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| ShellExecute(Application.Handle, 'open', 'C:\Programme\MeinProg.exe', '-u ICH -b Modul.dxl', nil, SW_HIDE); |
Wie geht es, dass man als Parameter auch den Wert von einem Edit- Feld übergeben kann?
Kann jemand den Code ergänzen?
Delete - Mi 24.09.03 15:23
Weißt du denn, wie man an den Text eines Eingabefeldes herankommt? Und weißt du, was man tun muss, damit ShellExecute nicht meckert, weil du einen String übergibst, wo doch PChars erwartet werden ...
Wenn du die Fragen beantworten kannst, dann hast du die Lösung selbst gefunden ...
Licki - Mi 24.09.03 15:29
An den Text von Edit1 komme ich ja:
Und in phar müsste es ja so gehen, oder?
Also komplett doch so, oder? Aber warum geht das nicht?
Delphi-Quelltext
1: 2: 3: 4: 5:
| ShellExecute(Application.Handle, 'open', 'C:\out\vomhost.exe', 'pchar(Edit1.text)', nil, SW_SHOW); end; |
MSCH - Mi 24.09.03 16:30
Schau mal auf die Zeile
'pchar(Edit1.text)'
....
gefunden? HOCHKOMMAS ! Erster Fehler.
auch so wirds nicht funktionieren. String+Pchar geht nicht. Zweiter Fehler.
also versuchs mal so:
var
Cmd: array[0..265] of Char;
StrPCopy(CMD,'C:\out\vomhost.exe'+Edit1.text);
shellex...(...,...,CMD,....)
grez
msch
Delete - Mi 24.09.03 19:33
@Licki: Ich empfehle ein Grundlagenbuch oder -tutorial. Fertigen Quellcode würdest du nur abschreiben aber nicht verstehen. Spätestens beim Versuch, den kopierten Code eigenständig zu erweitern, scheiterst du ohne vernünftiges Grundwissen.
Motzi - Do 25.09.03 08:21
@MSCH: da braucht man kein StrPCopy! Delphi führt alle Zwischenschritte komplett transparent durch, du kannst also auch ohne Probleme zusammengesetzte Strings nach PChar casten und übergeben:
Delphi-Quelltext
1:
| ShellExecute(..., PChar('C:\out\vomhost.exe'+Edit1.text), ...); |
Licki - Do 25.09.03 08:38
Danke für den Tipp. Leider funktioniert es immernoch nicht. Delphi startet zwar und meckert nicht, aber es passiert nichts. Ich nehme an, dass der Pfad nicht übergeben wird, den selbst wenn ich + Edit1.text weglasse, startet nicht einmal die Anwendung. Was mach ich nun falsch?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.SpeedButton1Click(Sender: TObject); var cmd: array[0..265] of Char; begin StrPCopy(cmd, 'C:\out\vomhost.exe' + Edit1.text); ShellExecute(Application.Handle, 'open', 'cmd', nil, nil, SW_SHOW); end; |
@MathiasSimmack
Jau, da magst du wohl recht haben. Ich wühle mich auch oft durch die Tutorials und habe ein Delphi-Buch, sogar drei (zwei Stück vom BHV- Verlag und eines von der "Blauen Reihe . Delphi 3). Habe alle schon durch und auch im Netz wühle ich micht durch Tutorials und mache Beispiele dazu. Nur leider bleibe ich meist bei kleinen Aufgaben wie dies hier hängen, da ich einfach nie in meinem Leben verstehe werde, mit den ganzen Variablenformaten umzugehen. ;) Natürlich versuche ich es zu lernen... Also bitte nicht böse sein, wegen meinen doofen Fragen... :(
Licki - Do 25.09.03 08:43
@Motzi
Also laut deinem Beispiel so, oder?
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.SpeedButton1Click(Sender: TObject); begin ShellExecute(Application.Handle, 'open', PChar('C:\out\vomhost.exe' + Edit1.text), nil, nil, SW_SHOW); end; |
Funktioniert aber auch nur teilweise... Wenn ich in das Edit Feld nichts eingebe, dann startet die EXE. Wenn ich aber was eingeben passiert gar nichts. Woran legt das?
Motzi - Do 25.09.03 09:14
Angenommen der Parameter den du übergeben willst heißt "param" - was entsteht dann aus 'C:\out\vomhost.exe' + 'param'?
C:\out\vomhost.exeparam
und ich glaub kaum, dass die exe so heißt! ;) Du musst also noch ein Leerzeichen zwischen Pfad und Parameter reinquetschen!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!