| Autor |
Beitrag |
SonEr
Hält's aus hier
Beiträge: 4
|
Verfasst: Di 23.09.03 16:24
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....
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
      
Beiträge: 531
WinXP
D5 Ent
|
Verfasst: Di 23.09.03 18:16
Du kannst statt CreateProcess auch ShellExecuteEx benutzen.
_________________ Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
Hält's aus hier
Beiträge: 4
|
Verfasst: Mi 24.09.03 11:00
Hallo Mathias,
Danke für den Tip. Hat wunderbar funktioniert.
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
      
Beiträge: 132
Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
|
Verfasst: 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?
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 132
Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
|
Verfasst: Mi 24.09.03 15:29
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: 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
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: 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), ...); |
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
Licki
      
Beiträge: 132
Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
|
Verfasst: 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
      
Beiträge: 132
Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
|
Verfasst: 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
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: 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!
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
|