File an Exe übergeben

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
michael76
Beiträge: 24
Registriert: Fr 18. Dez 2020, 21:56

File an Exe übergeben

Beitrag von michael76 »

Hallo zusammen!

Erstmal ein gutes neues Jahr!
Ich hätte mal eine Frage, wie ich eine Textdatei an mein EXE-File schicken kann (im Explorer mit Senden an oder öffnen mit) und dieses File dann in meinem Programm verarbeiten kann. Wo finde ich den Parameter ob eine Datei übergebenen wurde? Und den Pfad der Datei.

Grüße Michael

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: File an Exe übergeben

Beitrag von PascalDragon »

Der Dateipfad ist als ParamStr(1) zu finden (es sei denn in der Registry wurde was anderes für Öffnen mit angegeben, aber dazu muss das in der Registry manuell angelegt werden).
FPC Compiler Entwickler

michael76
Beiträge: 24
Registriert: Fr 18. Dez 2020, 21:56

Re: File an Exe übergeben

Beitrag von michael76 »

Okay, schon mal vielen Dank für Info. Ehrlich gesagt kann ich jetzt damit jetzt nicht wirklich was anfangen. Was muss ich in Lazarus tun, um an diese Info zu kommen? Wie kann ich den Wert auslesen?

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: File an Exe übergeben

Beitrag von theo »

Was verstehst du denn daran nicht?
Der gesuchte Pfad wird von der Funktion ParamStr(1) zurückgegeben, wie PascalDragon schon sagte.
https://www.freepascal.org/docs-html/rt ... amstr.html
https://www.freepascal.org/docs-html/rt ... count.html

Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Re: File an Exe übergeben

Beitrag von Epcop »

Im Explorer, als Verknüpfen, o.ä. startest du dein Programm " deinprogramm.exe 'pfadzurdatei.txt' "

deinprogramm.exe kann dann mit ParamStr() den Pfad (pfadzurdatei.txt) lesen. Und mit diesen kannst du dann weiterarbeiten (Datei auslesen o.ä.). Bei den Parametern gilt es einiges zu beachten. Einlesen ist sinnvoll.

Wenn du mittels "Öffnen mit..." arbeiten willst, musst du in Windows das in den Einstellungen angeben. Je nachdem welches Windows du hast... Glaube bei Win 10 ist es bei Einstellungen/System/Standard-Apps

Dein Programm muss aber trotzdem mit ParamStr() erst auslesen und weiterverarbeiten...

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 331
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: File an Exe übergeben

Beitrag von Niesi »

Moin,

dazu habe ich auch mal eine Frage: wie "kompatibel" ist das zu anderen OS oder anderen Windows-Versionen? (Du schriebst: "Je nachdem welches Windows du hast... ")

Herzlichen Gruß
Niesi
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: File an Exe übergeben

Beitrag von MacWomble »

Das Öffnen über die Datei via 'öffnen mit ...` ist unabhängig von deinem Programm, wird aber je nach BS an unterschiedlichen Stellen eingerichtet. Funktionieren müsste es immer. (Damit ist die Funktion gemein, welche in Abhängigkeit der Dateiendung ein Programm startet).
Du musst in deinem Programm lediglich den Parameter (ParamStr) verarbeitten.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: File an Exe übergeben

Beitrag von PascalDragon »

Niesi hat geschrieben:
Sa 2. Jan 2021, 01:50
dazu habe ich auch mal eine Frage: wie "kompatibel" ist das zu anderen OS oder anderen Windows-Versionen? (Du schriebst: "Je nachdem welches Windows du hast... ")
Wie geschrieben wurde ist der Mechanismus über ParamStr eigentlich immer der gleiche (unabhängig vom Betriebssystem; unter Windows gäbe es aber zusätzlich noch das von Win3.11 stammende DDE, falls man sich wirklich quälen möchte ;) ). Auch wie in der Windows Registry die Einträge für „Öffnen mit...” angelegt werden müssen ist zwischen den Windowsversionen gleich. Nur wie man es in der UI macht hat sich im Laufe der Zeit geändert (wobei die UI auch nur für die trivialen Fälle geeignet ist; wenn du gleichzeitig noch mehr Parameter angeben möchtest, dann musst du es sowieso manuell einrichten).
FPC Compiler Entwickler

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: File an Exe übergeben

Beitrag von Timm Thaler »

Fallstricke sind noch:

- mehrere Parameter übergeben
- Paramter mit Sonderzeichen übergeben
- Dateinamen und Pfade mit Leerzeichen übergeben vs. mehrere Parameter übergeben
- Dateinamen in Anführungszeichen oder ohne

Lazarus / FPC konnte man lange nicht in "C:\Programme" installieren, weil das auf "C:\Program Files" verweist und der Compiler regelmäßig am Leerzeichen im Pfad gescheitert ist. Ebenso machten Projekte in "Eigene Dateien" Ärger.

Also auch "große" Programme haben damit ihre Problemchen.

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: File an Exe übergeben

Beitrag von PascalDragon »

Timm Thaler hat geschrieben:
Sa 2. Jan 2021, 16:27
Lazarus / FPC konnte man lange nicht in "C:\Programme" installieren, weil das auf "C:\Program Files" verweist und der Compiler regelmäßig am Leerzeichen im Pfad gescheitert ist. Ebenso machten Projekte in "Eigene Dateien" Ärger.
Bitte die Schuld auf den schieben, der tatsächlich Schuld ist: manche der GNU Utilities, die bei FPC mitgeliefert werden, sind an den Leerzeichen gescheitert (ich glaube es war (bzw. ist noch immer) windres). Weder FPC noch Lazarus selbst haben Probleme mit Leerzeichen.
FPC Compiler Entwickler

michael76
Beiträge: 24
Registriert: Fr 18. Dez 2020, 21:56

Re: File an Exe übergeben

Beitrag von michael76 »

Vielen Dank!
Jetzt hab ich es Verstanden. ParamStr() ist eine Systemfunktion die ich einfach aufrufen kann.....

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: File an Exe übergeben

Beitrag von PascalDragon »

Systemfunktion ist etwas übertrieben... Sie ist Teil der Runtime Library von Free Pascal und auf jedem System verfügbar. Aber die eigentlichen Betriebssysteme kochen da ihr eigenes Süppchen, was diese Funktion eben abstrahiert.
FPC Compiler Entwickler

Antworten