Re: IsAdobeReaderInstalled
Zitat:
|
Re: IsAdobeReaderInstalled
Da bei nichtvorhandensein der Klasse CreateOLEObject eine Exception ausgibt, würde ich die zweite Variante bevorzugen; schließlich sollten Execption Ausnahmen bleiben.
|
Re: IsAdobeReaderInstalled
@ andreash: du hast recht, hab eben noch mal nachgesehen.
hier ein beispiel was ich mal für den zugriff auf word genutzt habe. dann halt doch mit try except :-)
Delphi-Quellcode:
try
word := GetActiveOleObject('Word.Application'); except // Läuft Word noch nicht, wird eine neue Verbindung aufgebaut try Word := CreateOleObject('Word.Application'); except // Schlägt dies fehl (Word nicht installiert), gibt es eine Fehlermeldung MessageDlg( 'Microsoft Word kann nicht starten. Ist Microsoft Word überhaupt installiert?', mtWarning, [mbOK],0); Word := unassigned; end; end; |
Re: IsAdobeReaderInstalled
Zitat:
Grüße Klaus |
Re: IsAdobeReaderInstalled
Zitat:
Begründung: Es wird nicht versucht, den PDF-Reader tatsächlich zu erzeugen, nur um ihn 5 Millisekunden später wieder zu schliessen. Es sollte klar sein, dass die 2. Variante wesentlich weniger Resourcen (RAM, Proz.Zyklen) benötigt, da nur überprüft wird, ob die Prog-ID vorhanden ist. |
Re: IsAdobeReaderInstalled
Zitat:
a) mit der productguid b) per iteration durch alle pakete und per suchen im "installed product name" |
Re: IsAdobeReaderInstalled
Zitat:
Code:
Funktioniert natürlich mit fast allen gängigen Anwendungen (*.doc;*.xls, usw...)function CleanOpenCmd(Cmd:String):String; var i,j:integer; begin result:=''; for i:=1 to length(Cmd) do begin for j:=i to length(Cmd) do begin result:=result+Cmd[j]; if FileExists(Result) then begin exit; end; end; result:=''; end; end; // Ermittelt die Anwendung mit der standardgemäß die Dateien verknüpft sind. function IsAppOnBoard(FileExt:string):String; var Reg:TRegistry; tmp:String; begin Result:=''; Reg:=TRegistry.Create(KEY_READ); try Reg.RootKey:=HKEY_CLASSES_ROOT; // False, weil der Schlüssel nicht automatisch erstellt werden soll if Reg.OpenKey(FileExt, False) then begin tmp:=Reg.ReadString(''); Reg.CloseKey; if Reg.OpenKey(tmp+'\Shell\Open\Command', False) then begin tmp:=Reg.ReadString(''); Reg.CloseKey; Result:=CleanOpenCmd(tmp); end; end; finally Reg.Free; end; end; // Beispiel procedure TForm1.Button1Click(Sender: TObject); begin showmessage(IsAppOnBoard('.pdf')); end; all the best Alexander |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz