Entwickler-Ecke

Windows API - shellexecute öffnen


anno - Sa 04.10.08 14:51
Titel: shellexecute öffnen
hallo zusammen.

ich habe versucht folgendes batchscript in Delphi umzuschreiben.


allerdings funktioniert der aufruf nicht richtig.


Quelltext
1:
2:
start ..\OpenOfficePortable\App\Java\bin\javaw -Dfile.encoding=UTF-8 -jar bin\wiki.in.a.jar 3003
start http://localhost:3003/wiki



Delphi-Quelltext
1:
2:
3:
ShellExecute(Handle, 'open''Java\bin\javaw -Dfile.encoding=UTF-8 -jar bin\wiki.in.a.jar 3003'nilnil, SW_SHOWMINIMIZED);

ShellExecute(Handle, 'open''http://localhost:3003/wiki'nilnil, SW_SHOWMINIMIZED);


Bei diesem Aufruf wird zwar irgednwas gemacht, allerdings wird der java server nicht gestartet.

gruß anno


LexXis - Sa 04.10.08 15:06

Guck dir mal die offizielle Doku [http://msdn.microsoft.com/en-us/library/bb762153.aspx] zu ShellExecute an!


Delphi-Quelltext
1:
ShellExecute(Handle, PChar('open'), PChar('Java\bin\javaw'), PChar('-Dfile.encoding=UTF-8 -jar bin\wiki.in.a.jar 3003'), nil, SW_SHOWMINIMIZED);                    


Wichtig ist, die Parameter nicht als String, sondern als PChar zu übergeben und die Parameter die das gestartet Programm erwartet müssen separat übergeben werden!
BTW: Zu ShellExecute gibt es genügend Threads, die das schon erklärt haben ;)


jaenicke - Sa 04.10.08 15:38

Außerdem fehlt die Pfadangabe, wenn es so funktioniert, dann nur mit Glück.


Yogu - Sa 04.10.08 15:38

user profile iconLexXis hat folgendes geschrieben Zum zitierten Posting springen:
Wichtig ist, die Parameter nicht als String, sondern als PChar zu übergeben

IMHO ist das bei String-Konstanten nicht notwendig. Die werden automatisch als PChar übergeben.

user profile iconLexXis hat folgendes geschrieben Zum zitierten Posting springen:
die Parameter die das gestartet Programm erwartet müssen separat übergeben werden!

Das ist wohl eher der Fehler.


LexXis - Sa 04.10.08 15:40

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
IMHO ist das bei String-Konstanten nicht notwendig. Die werden automatisch als PChar übergeben.


Werden sie? Man lernt nie aus... :gruebel:


jaenicke - Sa 04.10.08 15:43

Ja, werden sie, deshalb gibt es ja auch keine Fehlermeldung an der Stelle, ein Typecast ist nur dann nötig, wenn du eine Stringvariable benutzt oder deine konstanten Zeichenketten mit einer verkettest. Denn dann ist das Ergebnis wirklich ein String und damit der falsche Typ.

Eine konstante Zeichenkette im Code hat ja keinen speziellen Typ wie String oder PChar und wird daher automatisch entsprechend des benötigten Typs interpretiert.