Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mehre Dateien an ein Programm übergeben (https://www.delphipraxis.net/139212-mehre-dateien-ein-programm-uebergeben.html)

Marco Steinebach 25. Aug 2009 16:53


Mehre Dateien an ein Programm übergeben
 
Hallo zusammen,
Ich habe ein Prog geschrieben, dem man Dateien zur Verarbeitung übergeben kann.
Mein Problem: Wenn ich im Explorer mehrere Dateien markiere, und dann via "öffnen mit..." mein Programm aufrufe, kommt nur eine der Dateien wirklich beim Programm an. Wenn ich die Dateien nacheinander ans Programm übergebe, also alle einzeln, klappt das ganze ganz prima.
Mein Lösungsansatz war via Mutex zu verhindern, daß mehrere Instanzen aufgerufen werden, daß klappt auch, aber, wie gesagt, es kommen nicht alle Dateien an.
Hat jemand 'ne Idee, woran es liegen könnte?
Gibt es eine andere Lösungsmöglichkeit, als zu verhindern, daß mehrere Instanzen aufgerufen werden?
Für Tips wäre ich wirklich sehr dankbar!
Viele Grüße
Marco

DeddyH 25. Aug 2009 17:04

Re: Mehre Dateien an ein Programm übergeben
 
Du könntest doch alle Dateien von ParamStr(1) bis ParamStr(ParamCount) abarbeiten.

Marco Steinebach 25. Aug 2009 17:13

Re: Mehre Dateien an ein Programm übergeben
 
Zitat:

Zitat von DeddyH
Du könntest doch alle Dateien von ParamStr(1) bis ParamStr(ParamCount) abarbeiten.

nein, geht nicht, denn hier wird auch nur eine Datei übergeben, aber nicht alle markierten. *grummel!

DeddyH 25. Aug 2009 17:23

Re: Mehre Dateien an ein Programm übergeben
 
Und wenn Du die markierten Dateien mal im Explorer auf die Exe ziehst? Nur eine Idee.

Marco Steinebach 25. Aug 2009 17:34

Re: Mehre Dateien an ein Programm übergeben
 
Hallo,
Zitat:

Zitat von DeddyH
Und wenn Du die markierten Dateien mal im Explorer auf die Exe ziehst? Nur eine Idee.

;-) dann geht es, jedenfalls gibt's dann viele paramstr's.
Mein problem, da das Prog auch von blinden Menschen bedient werden soll, ist das drag-and-drop leider nicht zu gebrauchen.
Das muß doch auch irgendwie mit "öffnen mit..." gehen, oder?
Viele Grüße
Marco

DeddyH 25. Aug 2009 17:45

Re: Mehre Dateien an ein Programm übergeben
 
Ich weiß nicht, ob es auch einfacher geht, aber wie wäre es so: die zuerst gestartete Instanz erhält den Zuschlag, alle weiteren Instanzen versenden ihre Parameter per WM_COPYDATA o.ä. an die erste und beenden sich. Diese erste Instanz sammelt alles ein und beginnt dann zu arbeiten. Klingt zwar umständlich, könnte aber klappen.

Marco Steinebach 25. Aug 2009 17:53

Re: Mehre Dateien an ein Programm übergeben
 
Hallo
Zitat:

Zitat von DeddyH
Ich weiß nicht, ob es auch einfacher geht, aber wie wäre es so: die zuerst gestartete Instanz erhält den Zuschlag, alle weiteren Instanzen versenden ihre Parameter per WM_COPYDATA o.ä. an die erste und beenden sich. Diese erste Instanz sammelt alles ein und beginnt dann zu arbeiten. Klingt zwar umständlich, könnte aber klappen.

stimmt, klappt auch, so umständlich find' ich's gar nicht. Aber, hier tritt leider das selbe Problem auf. Wenn man alles nacheinander aufruft, also erst return auf Datei1, dann return auf Datei2, klappt alles ganz klasse, und alle Dateien kommen bei der ersten instanz an.
Macht man es via markieren, kommt nur eine Datei an.
Mir ist überhaupt nicht klar, wo das problem ist, und auch nicht, wie windows mehrere Dateien an eine Anwendung übergibt. Ich weiß nichtmal, wonach ich suchen soll.
Viele Grüße
Marco

DeddyH 25. Aug 2009 17:57

Re: Mehre Dateien an ein Programm übergeben
 
Es scheint, als ob sich Windows im "SendTo"-Ordner anders verhält als sonst. Da weiß ich leider im Moment auch nicht weiter, sry :(

shmia 25. Aug 2009 17:58

Re: Mehre Dateien an ein Programm übergeben
 
Zitat:

Zitat von DeddyH
... die zuerst gestartete Instanz erhält den Zuschlag, alle weiteren Instanzen versenden ihre Parameter per WM_COPYDATA o.ä. an die erste und beenden sich. Diese erste Instanz sammelt alles ein und beginnt dann zu arbeiten. Klingt zwar umständlich, könnte aber klappen.

Genau das wird von der Klasse TJclAppInstances, Unit JclAppInst aus der JCL so unterstützt.
Es gibt unter anderem die Methoden SendCmdLineParams() und SendString(), mit denen die später gestartete Instanzen
ihre Daten an die 1. Instanz übergeben kann.

Ansonsten kann man IMHO auch etwas mit DDE machen - aber schon beim Gedanken an DDE schüttelt es mich.


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