Rubrik: System/Windows · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 21.05.02 |
Welche Office-Version ist installiert? Eine Funktion, mit der sich schnell prüfen lässt, ob eine bestimmte Office-Version installiert ist. | ||
Autor: Dieter Otter | Bewertung: | Views: 23.762 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Immer wieder taucht die Frage vor: "Wie kann ich ermitteln, welche Word-Version auf dem System installiert ist?", oder "Wie kann ich ermitteln, ob Microsoft Office 2000 installiert ist?"
Das ganze lässt sich schnell ermitteln, indem man in der Registry-Datenbank nachschaut. Und genau das tut nachfolgende Funktion. Als Rückgabewert erhalten Sie dann den Installationspfad. Ist die geforderte Office-Version nicht installiert, wird ein Leerstring zurückgegeben.
Fügen Sie nachfolgenden Code bitte vollständig in ein MODUL ein:
Option Explicit ' benötigte API-Deklarationen Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _ Alias "RegOpenKeyExA" ( _ ByVal hKey As Long, _ ByVal lpSubKey As String, _ ByVal ulOptions As Long, _ ByVal samDesired As Long, _ phkResult As Long) As Long Private Declare Function RegQueryValueEx Lib "advapi32.dll" _ Alias "RegQueryValueExA" ( _ ByVal hKey As Long, _ ByVal lpValueName As String, _ ByVal lpReserved As Long, _ lpType As Long, _ ByVal lpData As String, _ lpcbData As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" ( _ ByVal hKey As Long) As Long ' Konstanten Private Const HKEY_LOCAL_MACHINE = &H80000002 Private Const ERROR_SUCCESS = 0& Private Const REG_SZ = 1 Private Const KEY_QUERY_VALUE = &H1 ' Auflistung Public Enum OfficeVersion Office95 = 7 Office97 = 8 Office2000 = 9 OfficeXP = 10 End Enum
' Prüft, ob eine bestimmte Office-Version installiert ' ist und gibt ggf. den Installationspfad zurück Public Function Office_InstallPath( _ ByVal iVersion As OfficeVersion) As String Dim sBuffer As String Dim lhKeyOpen As Long Dim lResult As Long Dim lByte As Long Dim sKeyName As String Dim sPath As String ' Rückgabe-Puffer sBuffer = Space$(255) ' Registry-Zweig sKeyName = "SOFTWARE\Microsoft\Office\" & _ CStr(iVersion) & ".0\Common\InstallRoot" ' Registry öffnen lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sKeyName, _ 0, KEY_QUERY_VALUE, lhKeyOpen) If lResult = ERROR_SUCCESS Then ' Wert lesen lResult = RegQueryValueEx(lhKeyOpen, "Path", 0, _ REG_SZ, sBuffer, Len(sBuffer)) If lResult <> ERROR_SUCCESS Then ' "Path" nicht gefunden ' 2. Versuch: "OfficeBin" lResult = RegQueryValueEx(lhKeyOpen, "OfficeBin", _ 0, REG_SZ, sBuffer, Len(sBuffer)) End If If lResult = ERROR_SUCCESS Then ' OK - Wert gefunden If InStr(sBuffer, Chr$(0)) > 0 Then _ sBuffer = Left$(sBuffer, InStr(sBuffer, Chr$(0)) - 1) sPath = RTrim$(sBuffer) Else sPath = "" End If RegCloseKey lhKeyOpen End If Office_InstallPath = sPath End Function
Beispiel
Sie möchten wissen, ob Office97 auf dem System installiert ist - und wenn ja, in welchem Verzeichnis:
' Office97 vorhanden? Dim sPath As String sPath = Office_InstallPath(Office97) If sPath <> "" Then MsgBox "JA, Office97 ist vorhanden: " & _ vbCrLf & "Installationspfad: " & sPath Else MsgBox "NEIN, Office97 ist nicht vorhanden!" End If