Einzelnen Beitrag anzeigen

oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Konventionen für Parameter in ShellExecute

  Alt 25. Mär 2009, 18:49
Hi nuclearping,

so, Abendbrot zu Ende. Erst mal Dank für deine Antwort.
Als erstes zum Thema ShellExecute. Warum ist das von hinten durch die Brust? OK, ich benutzte ShellExecuteEx, damit ein Handle bekomme. CreateProcess benutze ich aus einem ganz speziellen Grund nicht. Es gibt unterschiedliche Arten, wie ich mit einer Funktion Anwendungen ausführen will.
1. eine Exe soll gestartet werden,
2. eine Exe soll mit Parametern gestartet werden die sowohl Pfade wie auch Ausführungskommandos enthalten,
3. Dateien sollen mit ihren "korrespondierenden" Programmen angezeigt werden.

Da die Dateien, Programme und Parameter zur Laufzeit übergeben werden, sind mir diese vorher nicht bekannt. Die werden über eine Art ini (nur als Vergleich, wie genau ist hier egal) gelesen. Derjenige, der diese Angaben erstellt soll eigentlich unter den allgemein üblichen Konventionen für eventuelle Pfadangaben arbeiten. Da hier aber auch Pfade benutzt werden sollen, sie zur Erstellungszeit nicht bekannt sind, will Platzhalter verwenden lassen. Ein Beispiel sieht so aus:
{app}\Pictures\MyPicture.jpg
oder
{app}\My Pictures\MyPicture.jpg
Und schon habe ich mehrere Probleme. Erstens, ich muss meinen Platzhalter {app} erkennen (ok, kein Problem), diesen in den absoluten Pfad auf dem System umwandeln, in dem mein Programm liegt (ok, auch kein Problem). Dann aber auch den kompletten Pfad extrahieren. Der angegebene Parameter kann ja auch so aussehen:
/p {app}\My Pictures\MyPicture.jpg
oder korrekter weise so:
/p "{app}\My Pictures\MyPicture.jpg"
Daraus soll folgendes entstehen:
/p "F:\Programme\My Application\My Pictures\MyPicture.jpg"

Ich habe hier also mehrere Such- und Zerlegeaufgaben zu erfüllen. Um den gesamten Pfad zu finden kann ich jetzt natürlich nach {app} suchen. Kein Thema. Danach muss ich aber auch den Rest des Pfades finden um die Ersetzung vornehmen zu können. Also schauen, ob davor " steht oder was noch so erlaubt ist und dann mit dem gleichen Zeichen das Ende finden. Am Rande bemerkt, es reicht nicht, nur direkt {app} im Parameter zu ersetzen. Ich brauche auch den Rest des Pfades. app ist nur ein einfaches beispiel wo es auch ohne den Rest gehen würde.

Damit mich im Nachgang keiner belehrt was das noch so alles erlaubt ist möchte ich es gleich richtig machen und auf alle erlaubten Zeichen prüfen die einen Pfad einschließen dürfen.

Puh, langer Text.

Gruß oki
42
  Mit Zitat antworten Zitat