======[VBA] getFileTypeCommand(), getFileTypeDescription()====== Im [[http://www.tutorials.de/visual-basic-6-0/383575-standardprogramm-zum-offnen-herausfinden.html|Tutorals-Forum]] kam von DrMueller die folgende Frage. >DrMueller: >Wir haben die Dokumenterstellung so programmiert, dass wir die Endung prüfen und entsprechend das Programm initialisieren .... Ich will nicht direkt öffnen, ich muss nur wissen, mit welchem Programm die Datei standardmässig geöffnet werden soll. Soweit so gut. Zum direkt öffnen habe ich relativ schnell etwas gefunden. [[http://msdn.microsoft.com/de-de/library/bb979032.aspx|Aus Visual Basic heraus Dokumente in zugehörigen Anwendungen öffnen]] Doch nur das Programm auslesen ist nicht ganz so einfach. Nachdem Zvoni den Registry-Knoten lösen konnte, war eine Lösung nicht mehr weit. >Zvoni: >Wenn du mal beide Typen in der Class-Root (oder auch in HKLM) anschaust, dann siehst du bei ".jpg" als (Standard)-Wert "jpegfile" >Wenn du jetzt in der Registry in der Class-Root nach dem Schlüssel "jpegfile" suchst, landest du hier: >[HKEY_CLASSES_ROOT\jpegfile\shell\open\command] >Dasselbe bei ".dot": Da steht Word.Template.8 (oder sowas) genau danach weitersuchen >HKEY_CLASSES_ROOT\Word.Template.8\shell\Open\command >und dort findest unter (Standard) das jeweilige Programm, mit dem es ausgeführt wird. Darum hier diese 2 Funktionen. Die erste ermittelt den Programmstring, mit dem die Datei ausgeführt wird. Die 2te Funktion die Typenbeschreibung wie sie im Dateiexplorer angezeigt wird. ===== getFileTypeCommand() ===== '/** ' * Gibt die "Befehlszeile" aus, mit der die Datei geöffnet wird ' * @example debug.print getFileTypeCommand("help.chm") ' * -> "C:\Windows\hh.exe" %1 ' * @param String Dateiname/Dateipfad ' * @return String Pfad mit der die Datei geöffnet wird ' */ Public Function getFileTypeCommand(ByVal iFileName As String) As String Dim objReg As Object Dim extension As String Dim key As String Dim fso As New FileSystemObject Const HKEY_CLASSES_ROOT = &H80000000 'Dateiendung auslesen extension = fso.GetExtensionName(iFileName) 'Registry-Objekt anlegen Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") 'Key auslesen objReg.GetStringValue HKEY_CLASSES_ROOT, "." & extension, , key 'Aufruf ausgeben key = key & "\shell\Open\command" objReg.GetStringValue HKEY_CLASSES_ROOT, key, , getFileTypeCommand 'Registry-Objekt zerstören Set objReg = Nothing Set fso = Nothing End Function ===== getFileTypeDescription() ===== '/** ' * Gibt die Programmbeschreibung der Datei aus ' * @example debug.print getFileTypeDescription("help.chm") ' * -> Compiled HTML Help file ' * @param String Dateiname/Dateipfad ' * @return String Beschreibung ' */ Public Function getFileTypeDescription(ByVal iFileName As String) As String Dim objReg As Object Dim extension As String Dim key As String Dim fso As New FileSystemObject Const HKEY_CLASSES_ROOT = &H80000000 'Dateiendung auslesen extension = fso.GetExtensionName(iFileName) 'Registry-Objekt anlegen Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") 'Key auslesen objReg.GetStringValue HKEY_CLASSES_ROOT, "." & extension, , key 'Aufruf ausgeben objReg.GetStringValue HKEY_CLASSES_ROOT, key, , getFileTypeDescription 'Registry-Objekt zerstören Set objReg = Nothing Set fso = Nothing End Function {{tag>VBA}}