Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ShellExecute funktioniert nicht korrekt (Parameter wird nicht angenommen) (https://www.delphipraxis.net/195609-shellexecute-funktioniert-nicht-korrekt-parameter-wird-nicht-angenommen.html)

fringer 13. Mär 2018 18:06

Delphi-Version: 7

ShellExecute funktioniert nicht korrekt (Parameter wird nicht angenommen)
 
Hallo Leute,

ich habe mal wieder eine Frage bzw. eine Sache die ich mir nicht erklären kann und hoffe ihr könnt mir
da wieder weiterhelfen.

Ich möchte gern ein externes Commandline Programm starten. Bei dem Programm handelt es sich um ein
Bildconverter und es wird wie folgt benutzt: "bildconverter.exe export.bmp". Die Export BMP ist das Quellbild welches
im gleichen Verzeichnis liegt.
Der Bildconverter wandelt dann diese BMP in ein anderes Format (nur dieses eine)
um und legt diese neue Datei "export.TGA" ebenfalls im Verzeichnis der exe ab.

Das funktioniert prima. Nun wollte ich das ganze etwas komfortabler gestalten und ein kleines Delphi-Programm
dafür schreiben.

Egal was ich mich ShellExecute anstelle, er konvertiert mir das Bild einfach nicht.
Das Programm wird zwar gestartet aber irgendwie scheint es nicht zu funktionieren das er den Paramater richtig verwendet.


ShellExecute(0,'open','C:\TEST\bildconverter.exe', 'export.bmp',nil,SW_SHOW);
oder
ShellExecute(0,'open','C:\TEST\bildconverter.exe', 'C:\TEST\export.bmp',nil,SW_SHOW);


Habe auch schon die Suche bemüht und viele Beiträge zu dem Thema gelesen und eigentlich müsste es funktionieren,
tut es aber nicht. Was kann der Fehler sein? Wenn ich es in der Eingabeaufforderung eingebe funktioniert alles
super: "C:\TEST\bildconverter.exe export.bmp" oder "C:\TEST\bildconverter.exe C:\TEST\export.bmp".

Vielleicht habt ihr ja noch eine Idee.
Vielen Dank schonmal.
fringer

himitsu 13. Mär 2018 18:12

AW: ShellExecute funktioniert nicht korrekt (Parameter wird nicht angenommen)
 
Zitat:

Die Export BMP ist das Quellbild welches im gleichen Verzeichnis liegt.
Nein, nicht im "gleichen" Verzeichnis, sondern im "aktuellen" Arbeitsverzeichnis.
Wer weiß wo dein Programm liegt (wir nicht, wurde auch nicht genannt) und welches Verzeichnis dort gerade aktiv ist (wie wurde dein Programm gestartet und wurde das Verzeichnis zwischendurch geändert)


Dir ist nicht zufällig der vorletzte Parameter beim ShellExecute aufgefallen?

Außerdem hat MSDN-Library durchsuchenShellExecute ein Result und es kann nicht schaden das auszuwerten.

fringer 13. Mär 2018 18:35

AW: ShellExecute funktioniert nicht korrekt (Parameter wird nicht angenommen)
 
Hallo himitsu,
vielen Dank für deine Antwort. Ich verstehe diese nur leider nicht.

In meiner Ausführung hatte ich geschrieben das die zu startende Anwendung
auf meiner Festplatte unter folgenden Pfad liegt "'C:\TEST\bildconverter.exe" und die zu konvertierende Datei ebenfalls
"C:\TEST\export.bmp".

Mein Delphiprogramm welches die ShellExecute Funktion auf einem
Button ausführt liegt im Pfad "C:\Delphi\Projekte\Bmptest\" und
nennt sich "Projekt1.exe".

Alle Verzeichnisse wurden nicht geändert. Alles liegt da wie angegeben.

Wenn ich übrigens "shellexecute" im Codefenster in Delphi eingebe und
dann F1 drücke findet er diesen Begriff nicht einmal. Auch in der Delphi-Hilfe kein Suchtreffer.

Mit letzten Parameter meinst du sicher: SW_SHOWNORMAL, SW_MINIMIZE, SW_MAXIMIZE oder SW_HIDE. Diese haben leider auch keinen Einfluss.

Der schöne Günther 13. Mär 2018 18:41

AW: ShellExecute funktioniert nicht korrekt (Parameter wird nicht angenommen)
 
Hallo-

Nein, der gute Mann meint den vorletzten Parameter. Schau mal in der Doku für diese Funktion:
Zitat:

A pointer to a null-terminated string that specifies the default (working) directory for the action. If this value is NULL, the current working directory is used. If a relative path is provided at lpFile, do not use a relative path for lpDirectory.
Heißt: Steck dort das Verzeichnis rein in welchem deine mit
Delphi-Quellcode:
ShellExecute(..)
aufgerufene Anwendung arbeiten soll. In deinem Fall ist das
Delphi-Quellcode:
c:\test
. Dann kannst du als Parameter auch ganz einfach
Delphi-Quellcode:
export.bmp
übergeben.


Was er weiterhin meinte ist dass
Delphi-Quellcode:
ShellExecute(..)
keine Prozedur sondern eine Funktion ist. Sie gibt dir einen Wert zurück der dir sagt ob es aus Windows-Sicht geklappt hat oder nicht. Wenn es nicht geklappt hat, kannst du diesen Fehler auslesen. Hier im Forum müsste das mit
Delphi-Quellcode:
ShellExecute(..)
schon oft gezeigt worden sein, schau am besten nochmal.

fringer 13. Mär 2018 18:43

AW: ShellExecute funktioniert nicht korrekt (Parameter wird nicht angenommen)
 
Ok, vielen Dank. Ich werde mich noch weiter belesen. :)
Trotzdem vielen Dank an euch zwei.

fringer 13. Mär 2018 19:18

AW: ShellExecute funktioniert nicht korrekt (Parameter wird nicht angenommen)
 
Ich habe es hinbekommen!! :) Und jetzt auch verstanden.
Jetzt weiß ich auch ihr gemeint habt.

Die verlinkte englischsprachige Doku zu der Funktion hatte mich
erst noch mehr ins Grübeln gebracht. Eine deutschsprachige
ist hier zu finden -> https://www.delphi-treff.de/tipps-tr...ndung-oeffnen/

Dort wird es auch noch einmal super erklärt. Habt vielen Dank
für eure Geduld, wird sicher nicht das letzte mal sein das jemand
diese Fragen stellt ;)

KodeZwerg 13. Mär 2018 20:48

AW: ShellExecute funktioniert nicht korrekt (Parameter wird nicht angenommen)
 
Vieles aus der Windows.pas hat keinen Eintrag in der Delphi Hilfe da es meist Windows-Hilfsfunktionen sind wo Delphi nur die Methoden bereitstellt. In einem Windows SDK ist eine Hilfsdatei die sowas erklärt, es wäre ratsam sich einen Link dazu in der Nähe deines Delphi-Starter-Links (Verknüpfung) anzulegen. Da findest du sehr viele gute Erklärungen, zwar für Programmiersprache C++, aber Beispiele verdeutlichen es einem worum es geht und wie man es anwendet. Kann dir bei manchen normalen Delphi Operationen eine Menge Zeit (Methoden-Ausführungs-Zeit) sparen wenn man die Methoden direkt anwendet aber auch Probleme bereiten wenn Du nicht alles selbst berücksichtigst. Viel Spass beim Erkunden und Entdecken.
Alternativ kannst du auch mit einem Text-Crawler dein RTL-Source Verzeichniss nach einem Begriff durchforsten lassen, da wird man meist auch immer fündig mit einem potentem Beispiel.

himitsu 13. Mär 2018 21:47

AW: ShellExecute funktioniert nicht korrekt (Parameter wird nicht angenommen)
 
[OH]Alle Verzeichnisse wurden nicht geändert. Alles liegt da wie angegeben.[/OH]
Vorallem auf DOS und der Console kennt man es noch.
Jedes Programm hat ein persönliches aktuelles Arbeitsverzeichnis, also das was genommen wird, wenn man mit relativen Pfaden arbeitet.

https://www.delphi-treff.de/tipps-tr...hnis-arbeiten/
und
http://desktop.arcgis.com/de/arcmap/...nc-and-url.htm

Da du kein Arbeitsverzeichnis beim ShellExecute angegeben hast, nimmt Windows hier das aktuelle Arbeitsverzeichnis deines Programms.



Jupp, die Hilfe für Windows-API siehe Windows SDK (kann man sich installieren) oder online im MSDN.
Für einige wenige Windows-API ist eine ältere Hilfe im Delphi mit enthalten "Win32", zumindestens damals z.B. in Delphi 7. k.A. ob heute noch, aber da schau ich eh nicht mehr nach. Ich habe mir das MSDN als Suchprovider im Browser mit eingerichtet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz