======[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}}