设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 6405|回复: 10
打印 上一主题 下一主题

[其它] 外部程序(如VB)如何判断是否安装Office及其版本和路径

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2007-9-13 23:43:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求不使用CreateObject 函数
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2007-9-14 10:31:03 | 只看该作者
读注册表信息吧。

点击这里给我发消息

3#
 楼主| 发表于 2007-9-14 11:00:01 | 只看该作者
问题是不知道在注册表的哪个位置,也不知道各个版本的操作系统和各个版本的Office在注册表中的注册位置是否都相同。
还请版主赐教。

[ 本帖最后由 t小宝 于 2007-9-14 11:01 编辑 ]
4#
发表于 2007-9-15 00:10:58 | 只看该作者
获取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 编辑 ]

点击这里给我发消息

5#
 楼主| 发表于 2007-9-15 00:27:25 | 只看该作者
太感谢了!!
andymark版主这个时候还不休息,真是精神可嘉!

点击这里给我发消息

6#
 楼主| 发表于 2007-9-16 09:35:19 | 只看该作者
使用上面andymark版主提供的函数的朋友要注意哦!
里面的用法漏了一个字母:  OfficePath "Access.Aplication"
应该是: OfficePath "Access.Application"
7#
发表于 2007-9-16 10:49:26 | 只看该作者
你通过 WMI的software里面判断也是可以的
8#
发表于 2007-9-16 11:14:19 | 只看该作者
原帖由 t小宝 于 2007-9-16 09:35 发表
使用上面andymark版主提供的函数的朋友要注意哦!
里面的用法漏了一个字母:  OfficePath "Access.Aplication"
应该是: OfficePath "Access.Application"


注解里少写了一个P,已更正
9#
发表于 2008-3-15 10:35:02 | 只看该作者
留个脚印先~~~~~~~``
10#
发表于 2012-3-18 20:11:18 | 只看该作者
好像有更简单的方溘
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-1-11 04:16 , Processed in 0.119232 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表