[gelöst] Unbekanntes ext. Programm starten

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

[gelöst] Unbekanntes ext. Programm starten

Beitrag von catweasel »

Moin

Ich benutze aus einem Wiki-Beispiel nachstehenden Code um ein PDF-Dokument mit dem angegeben PDF-Reader anzeigen zu lassen. Das funktioniert auch so weit.
Wie kann ich aber vorgehen, wenn ich nicht weis welchen PDF-Reader ein Benutzer hat, also zB. den Foxit, oder den Adobe oder noch einen ganz anderen?
Ich hatte schon getestet nur das PDF-File ohne den Reader in der Command-Zeile anzugeben, in der Hoffnung das Betriebssystem sucht sich den eingestellten PDF-Reader raus, aber das funktionierte nicht.

Gruß
Michael


Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
   AProcess: TProcess;
 
 begin
   AProcess := TProcess.Create(nil);
   AProcess.CommandLine := 'c:\Programme\Foxit\Foxit Reader.exe base-einfuehrung.pdf';
   AProcess.Options := AProcess.Options + [poWaitOnExit];
   AProcess.Execute;
   AProcess.Free;
 end;
Zuletzt geändert von catweasel am Mo 12. Apr 2010, 15:49, insgesamt 1-mal geändert.

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

Re: Unbekanntes ext. Programm starten

Beitrag von theo »

Soweit ich weiss, müsste der ab 0.9.29 vorhandene OpenURL Befehl in LCLProc dies plattformübergreifend leisten:
http://lazarus-ccr.sourceforge.net/docs ... enurl.html

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: Unbekanntes ext. Programm starten

Beitrag von catweasel »

theo hat geschrieben:Soweit ich weiss, müsste der ab 0.9.29 vorhandene OpenURL Befehl in LCLProc dies plattformübergreifend leisten:
http://lazarus-ccr.sourceforge.net/docs ... enurl.html

Dann ist meine Version wohl zu alt (0.9.28.2 beta)
Ich habe "lclproc" in die uses eingebaut, aber Lazarus weis nicht was openurl() ist.

Mir ist auch noch nicht ganz klar wie der Befehle zu nutzen ist.
Ist es so das ich quasi in die Klammer den Namen/Pfad des PDF-Files angeben muß und der Reader wird dann damit gestartet?
Also z.B.:

Code: Alles auswählen

if not OpenURL('meine.pdf') then ShowMessage('kein PDF-Reader gefunden');

startet entweder der Reader mit PDF-File oder Fehlermeldung?!

Gruß
Michael

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

Re: Unbekanntes ext. Programm starten

Beitrag von theo »

catweasel hat geschrieben:startet entweder der Reader mit PDF-File oder Fehlermeldung?!


Wahrscheinlich.
Wenn du nur eine Lösung für Windows brauchst, kannst du auch ShellExecute nehmen.

z.B. so afaik:
uses windows;

ShellExecute(Handle, 'OPEN', 'http://www.deineURL.de', nil, nil,
SW_SHOWNORMAL);

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Unbekanntes ext. Programm starten

Beitrag von Targion »

Lösung für Linux:

Code: Alles auswählen

function OpenFileAndWait(fname: String): Boolean;
var
   AProcess: TProcess;
 begin
   AProcess := TProcess.Create(nil);
   AProcess.CommandLine := 'xdg-open '+fname;
   AProcess.Options := AProcess.Options + [poWaitOnExit];
   AProcess.Execute;
   if AProcess.ExitStatus>0 then Result:=false else Result:=true;
   AProcess.Free;
 end;

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: Unbekanntes ext. Programm starten

Beitrag von catweasel »

theo hat geschrieben:
catweasel hat geschrieben:startet entweder der Reader mit PDF-File oder Fehlermeldung?!

Wenn du nur eine Lösung für Windows brauchst, kannst du auch ShellExecute nehmen.

Es sollte idealerweise sowohl für Linux als auch für Windows funktionieren...

Antworten