Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Paramater wärend der Laufzeit übergeben? (https://www.delphipraxis.net/101179-paramater-waerend-der-laufzeit-uebergeben.html)

Tommy1988 9. Okt 2007 16:05


Paramater wärend der Laufzeit übergeben?
 
Hallo, kann mir wer vielleicht sagen, wie ich einer normale exe-datei z.B. als Parameter den eigenen Dateinamen wärend der Laufzeit anhängen kann?

mkinzler 9. Okt 2007 16:06

Re: Paramater wärend der Laufzeit übergeben?
 
Den eigenen Dateinamen bekommst du automatisch als 1. Parameter ParamStr(0)

sirius 9. Okt 2007 16:06

Re: Paramater wärend der Laufzeit übergeben?
 
:?: Was willst?

Code:
D:\irgendetwas.exe meinDelphiProgramm.exe
?

SirThornberry 9. Okt 2007 16:06

Re: Paramater wärend der Laufzeit übergeben?
 
was meinst du mit anhängen?
Willst du die gleiche Exe nochmal aufrufen nur eben mit (anderen) Parametern?
Oder willst du für die laufende Instanz die Parameter ändern (was keinen Sinn machen würde)

Luckie 9. Okt 2007 16:08

Re: Paramater wärend der Laufzeit übergeben?
 
Parameter werden nur beim Start ausgewertet. Ein nachträgliches übergeben ist nicht möglich ohne die Anwendung neu zu starten.

Tommy1988 9. Okt 2007 16:17

Re: Paramater wärend der Laufzeit übergeben?
 
mhh.. ja da geht es eigentlich nur um einen kleinen test den ich machen möchte:

ich möchte dateiendungen mit einem testprogramm verknüpfen, damit ich die mit meinem programm halt aufrufen kann. aber so bringt das ja nix, weil nur das testprogramm (ein leeres form) zu sehen ist.

da dacht ich muss man doch irgentwe abfragen können, von was für einer datei ich aus geklickt habe
also ich mein, zur visuellen darstellung den dateinamen der geklickten datei vielleicht in ein label eintragen

marabu 9. Okt 2007 16:19

Re: Paramater wärend der Laufzeit übergeben?
 
Hallo,

den Namen der Datei solltest du in der Regel als ersten Parameter übergeben bekommen. Du hast die Art der Übergabe doch selbst in der Registry angegeben.

Grüße vom marabu

Dunkel 9. Okt 2007 16:22

Re: Paramater wärend der Laufzeit übergeben?
 
Zitat:

Zitat von Luckie
Parameter werden nur beim Start ausgewertet.

Richtig.
Zitat:

Zitat von Luckie
Ein nachträgliches übergeben ist nicht möglich ohne die Anwendung neu zu starten.

Eingeschränkt falsch.
Erste Instanz des Programms mit Parametern starten -> Programm läuft.
Zweite Instanz des selben Programms mit anderen Parametern starten -> die zweite Instanz "merkt" via Semaphore (oder eine ähnliche Technik) dass schon eine Instanz (und zwar die erste) des Programms läuft und sendet via Pipes (o.Ä.) eine Nachricht an diese in der die übergebenen Parameter übermittelt werden und schließt sich danach wieder.
Die erste Instanz empfängt die Pipe-Nachricht und verarbeitet die übergebenen Parameter entsprechend.

Fazit: Es ist möglich! Such mal nach Semaphore (CreateSemaphore), Pipes & MMF (Memory Mapped Files), damit mache ich ähnliches.

s-off 9. Okt 2007 16:44

Re: Paramater wärend der Laufzeit übergeben?
 
Zitat:

Zitat von Dunkel
Zweite Instanz des selben Programms mit anderen Parametern starten -> die zweite Instanz "merkt" via Semaphore (oder eine ähnliche Technik) dass schon eine Instanz (und zwar die erste) des Programms läuft und sendet via Pipes (o.Ä.) eine Nachricht an diese in der die übergebenen Parameter übermittelt werden und schließt sich danach wieder.
Die erste Instanz empfängt die Pipe-Nachricht und verarbeitet die übergebenen Parameter entsprechend.

Das machen Programme wie bspw. MS-Word doch genauso.

Tommy1988 9. Okt 2007 19:00

Re: Paramater wärend der Laufzeit übergeben?
 
Zitat:

was meinst du mit anhängen?
Naja, eigentich meine ich das hier:
Angenommen ich registriere eine eigene Dateiendung.

Dann klicke ich doppelt auf diese Date mit meiner Dateiendung, was passiert?
Das entsprechende Programm öffnet sich.
So, es sollte sich aber nicht "nur" das Programm öffnen, sondern entsprechend der Datei die ich doppelt geklickt habe, etwas ausführen. Ganz einfach als Beispiel z.b. den Dateinamen der doppelt-geklicketn Datei im Label anzeigen.

s-off 9. Okt 2007 19:11

Re: Paramater wärend der Laufzeit übergeben?
 
Dann schreibst Du bspw. im OnShow-Event Deiner Mainform

Delphi-Quellcode:
Label1.Caption := ParamStr(1);
Damit wird der in ParamStr(1) übergebene Dateiname in der Caption Deines Labels angezeigt.

Tommy1988 9. Okt 2007 19:15

Re: Paramater wärend der Laufzeit übergeben?
 
Ok, das habe ich jetzt technisch soweit verstanden. aber eine frage brennt mich noch:
angenommen, ich möchte nicht den dateinamen, sondern den inhalt der datei abfragen..

wie gehe ich bei soetwas vor?

mkinzler 9. Okt 2007 19:21

Re: Paramater wärend der Laufzeit übergeben?
 
Mit Hilfe des Dateinamens die Datei öffnen und Inhalt einladen

teebee 9. Okt 2007 19:29

Re: Paramater wärend der Laufzeit übergeben?
 
Damit Du den Dateinamen auch als Parameter bekommst, ist es wichtig, dass Du in der Registry im Schlüssel mit dem shell-open-Kommando, also dort wo deine Anwendung steht, die mit der Dateiendung verknüpft ist, den Parameter "%1" an die .exe hängst. Erst dann bekommt Deine Anwendung den Dateinamen vom Explorer als Parameter mit auf den Weg gegeben:
Code:
meinDateityp/shell/open (Standard) MeineAnwendung.exe "%1"

Tommy1988 9. Okt 2007 19:39

Re: Paramater wärend der Laufzeit übergeben?
 
Zitat:

Mit Hilfe des Dateinamens die Datei öffnen und Inhalt einladen
Ja, so einfach ist das für mich ja nicht.
Das Problem ist, dass wenn ich die Beispieldatei mit der Beispieldateiendung öffne, sich ja mein eigentlches Testprogramm öffnet und ein leeres Formular anzeigt.

mkinzler 9. Okt 2007 19:42

Re: Paramater wärend der Laufzeit übergeben?
 
Ja un diesem musst du mit Hilfe des übergeben Parameters (Dateiname inkl. Pfad) die Datei öffnen und Laden. Um was für eine art von Datei handelt es sich?

Tommy1988 9. Okt 2007 19:45

Re: Paramater wärend der Laufzeit übergeben?
 
Ok, jetzt habe ich verstanden. Ich werde umgehend alles testen.

Ich melde mich wenn ich mehr weis.

Tommy1988 9. Okt 2007 20:00

Re: Paramater wärend der Laufzeit übergeben?
 
Super :thumb: Ich hab kapiert wie das funktioniert. Ich habe mir vorher alles viel schwieriger vorgestellt und mich deswegen da nicht rangetraut.

Folgendes hab ich gemacht (OnShow):
Delphi-Quellcode:
var
Liste: TStringList;
begin

Label1.Caption := ParamStr(1); // Dateipfad holen plus Dateiname -und Endung

Liste := TStringlist.Create;
Liste.LoadFromFile(Label1.Caption);
Label2.Caption := Liste.Strings[Liste.Count];
In der Textdatei ist die erste Zeile mit "XXXXXXXXXXXXXXXXX" gefüllt.
XXX[...] wird folständig im Label2 angezeigt :)

Edit: Eine Frage bezüglich http://www.delphipraxis.net/internal...t=registrieren dieses Codes hätte ich aber noch. Das Icon, dass die Datei dann hat ist ja das Icon, meines Testprogramms. In meinem Fall das komische DelphiIcon da.

Kann man das via ImageList ändern? Ich lade ein Bild in eine ImageList und übergebe es an die Funktion?
Wenn das so geht, ich habe keine Ahnung, wo ich in der Funktion etwas ändern muss. Weil OpenKey('DefaultIcon'... hört sich für mich seltsam an


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 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