Office中国论坛/Access中国论坛

标题: 外部程序(如VB)如何判断是否安装Office及其版本和路径 [打印本页]

作者: t小宝    时间: 2007-9-13 23:43
标题: 外部程序(如VB)如何判断是否安装Office及其版本和路径
要求不使用CreateObject 函数
作者: hi-wzj    时间: 2007-9-14 10:31
读注册表信息吧。
作者: t小宝    时间: 2007-9-14 11:00
问题是不知道在注册表的哪个位置,也不知道各个版本的操作系统和各个版本的Office在注册表中的注册位置是否都相同。
还请版主赐教。

[ 本帖最后由 t小宝 于 2007-9-14 11:01 编辑 ]
作者: andymark    时间: 2007-9-15 00:10
获取OFFICE安装路径
Public 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

Public 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

Const REG_SZ As Long = 1
Const KEY_ALL_ACCESS = &H3F
Const HKEY_LOCAL_MACHINE = &H80000002

Public Function OfficePath(OfficeID As String) As String
'用途:获取OFFICE安装路径
'用法:  OfficePath "Access.Application"
Dim hKey As Long
Dim RetVal As Long
Dim sProgId As String
Dim sCLSID As String
Dim sPath As String

   sProgId = OfficeID

   RetVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\Classes\" & _
      sProgId & "\CLSID", 0&, KEY_ALL_ACCESS, hKey)
   If RetVal = 0 Then
      Dim n As Long
      RetVal = RegQueryValueEx(hKey, "", 0&, REG_SZ, "", n)
      sCLSID = Space(n)
      RetVal = RegQueryValueEx(hKey, "", 0&, REG_SZ, sCLSID, n)
      sCLSID = Left(sCLSID, n - 1)  'drop null-terminator
      RegCloseKey hKey
   End If
   
   
    RetVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
        "Software\Classes\CLSID\" & sCLSID & "\LocalServer32", 0&, _
      KEY_ALL_ACCESS, hKey)
   If RetVal = 0 Then
      RetVal = RegQueryValueEx(hKey, "", 0&, REG_SZ, "", n)
      sPath = Space(n)

      RetVal = RegQueryValueEx(hKey, "", 0&, REG_SZ, sPath, n)
      sPath = Left(sPath, n - 1)
      OfficePath = sPath
    '  MsgBox OfficePath
      RegCloseKey hKey
   End If
End Function


判断OFFICE 版本记得曾经发表过,你找找

[ 本帖最后由 andymark 于 2007-9-16 11:12 编辑 ]
作者: t小宝    时间: 2007-9-15 00:27
太感谢了!!
andymark版主这个时候还不休息,真是精神可嘉!
作者: t小宝    时间: 2007-9-16 09:35
使用上面andymark版主提供的函数的朋友要注意哦!
里面的用法漏了一个字母:  OfficePath "Access.Aplication"
应该是: OfficePath "Access.Application"
作者: Agamemnon    时间: 2007-9-16 10:49
你通过 WMI的software里面判断也是可以的
作者: andymark    时间: 2007-9-16 11:14
原帖由 t小宝 于 2007-9-16 09:35 发表
使用上面andymark版主提供的函数的朋友要注意哦!
里面的用法漏了一个字母:  OfficePath "Access.Aplication"
应该是: OfficePath "Access.Application"


注解里少写了一个P,已更正
作者: wuheng    时间: 2008-3-15 10:35
留个脚印先~~~~~~~``
作者: danis    时间: 2012-3-18 20:11
好像有更简单的方溘
作者: 风中漫步    时间: 2012-3-19 13:13
记的有个API能干这活,主要是取得关联文件,含路径.N年前试过,现在忘了.宝版有兴趣就费点时间




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3