Autor Beitrag
SonEr
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
ShellExecute(Application.Handle, 
'open', 
'C:\Programme\MeinProg.exe', 
'-u ICH -b Modul.dxl',  //<-- hier sind die Parameter aufgelistet
 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 531

WinXP
D5 Ent
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 132

Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
BeitragVerfasst: Mi 24.09.03 15:19 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
ShellExecute(Application.Handle,  
'open',  
'C:\Programme\MeinProg.exe',  
'-u ICH -b Modul.dxl',  //<-- hier sind die Parameter aufgelistet 
 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 132

Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
BeitragVerfasst: Mi 24.09.03 15:29 
An den Text von Edit1 komme ich ja:

ausblenden Delphi-Quelltext
1:
Edit1.Text					


Und in phar müsste es ja so gehen, oder?

ausblenden Delphi-Quelltext
1:
pchar(Edit1.Text)					


Also komplett doch so, oder? Aber warum geht das nicht?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
 ShellExecute(Application.Handle, 'open', 'C:\out\vomhost.exe',
'pchar(Edit1.text)',
 nil,
 SW_SHOW);
end;
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 132

Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
BeitragVerfasst: 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?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 132

Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
BeitragVerfasst: Do 25.09.03 08:43 
@Motzi

Also laut deinem Beispiel so, oder?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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!