AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi ShellExecute funktioniert nicht korrekt (Parameter wird nicht angenommen)

ShellExecute funktioniert nicht korrekt (Parameter wird nicht angenommen)

Ein Thema von fringer · begonnen am 13. Mär 2018 · letzter Beitrag vom 13. Mär 2018
Antwort Antwort
fringer

Registriert seit: 25. Feb 2018
15 Beiträge
 
#1

ShellExecute funktioniert nicht korrekt (Parameter wird nicht angenommen)

  Alt 13. Mär 2018, 18:06
Delphi-Version: 7
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.758 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

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

  Alt 13. Mär 2018, 18:12
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
fringer

Registriert seit: 25. Feb 2018
15 Beiträge
 
#3

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

  Alt 13. Mär 2018, 18:35
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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
4.580 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

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

  Alt 13. Mär 2018, 18:41
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 ShellExecute(..) aufgerufene Anwendung arbeiten soll. In deinem Fall ist das c:\test . Dann kannst du als Parameter auch ganz einfach export.bmp übergeben.


Was er weiterhin meinte ist dass 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 ShellExecute(..) schon oft gezeigt worden sein, schau am besten nochmal.
  Mit Zitat antworten Zitat
fringer

Registriert seit: 25. Feb 2018
15 Beiträge
 
#5

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

  Alt 13. Mär 2018, 18:43
Ok, vielen Dank. Ich werde mich noch weiter belesen.
Trotzdem vielen Dank an euch zwei.
  Mit Zitat antworten Zitat
fringer

Registriert seit: 25. Feb 2018
15 Beiträge
 
#6

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

  Alt 13. Mär 2018, 19:18
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
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg
Online

Registriert seit: 1. Feb 2018
1.631 Beiträge
 
Delphi 2009 Professional
 
#7

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

  Alt 13. Mär 2018, 20:48
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.
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.758 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

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

  Alt 13. Mär 2018, 21:47
Delphi-Referenz durchsuchenAlle Verzeichnisse wurden nicht geändert. Alles liegt da wie angegeben.
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf