In dem Fall irrst du, MrKnogge. "paramstr(0)" ist die Anwendung selbst (sprich: Pfad und Name der Exe), ab "paramstr(1)" bis "paramcount" folgen die Parameter. Das hat mit den null-basierenden Geschichten von Delphi nichts zu tun, darum sieht die Abfrage der Parameter immer so aus:
Delphi-Quellcode:
for i := 1 to paramcount do
{ ... }
Bei der Lösung dieses Problems:
Zitat von
Alex_ITA01:
Also mehrere markieren und sagen öffnen mit...
muss man den Vorgang bedenken, der intern abläuft -
Wenn du einen Dateityp registrierst (bzw. wenn du einfach nur "Öffnen mit ..." wählst), dann ruft Windows das zugeordnete/ausgewählte Programm auf und übergibt die Datei als Parameter. Wenn du mehrere Dateien auswählst, dann wird nur dein Programm
mehrfach gestartet, und jeder Instanz wird wieder jede ausgewählte Datei als Parameter übergeben.
Im Klartext: Wählst du 10 Dateien aus, startet Windows normalerweise dein Programm 10x und übergibt jedem Programm
eine Datei als
ersten Parameter (sofern in der Registry nicht anders angegeben, wenn du den Dateityp registriert hast).
Um das zu verhindern musst du drei Sachen machen -
- Dafür sorgen, dass nur eine Instanz deines Programms starten kann ([dp]"Mutex"[/dp], [dp]"Semaphore"[/dp])
- Dafür sorgen, dass jede zusätzliche Instanz ihren Parameter an die bereits laufende weiterreicht (bspw. mit [dp]"WM_COPYDATA"[/dp]) und sich dann beendet.
- Intern dafür sorgen, dass dein Programm auch mit vielen Dateien umgehen kann, aber das versteht sich sicher von selbst.
Falls sich im Forum keine Lösungen finden (was ich aber nicht glaube), hänge ich mal Code an.