如何检测当前机器中是否安装Office 及其版本??

原创 2006年06月21日 10:32:00

'作者:CSDN 许仙
'Homepage : jjweb.126.com
'MSN :Coderxu#hotmail.com
'QQ:19030300
'转载请保持文章完整,保存以上作者信息 请珍惜他人劳动成果

Option Explicit

Const REG_EXPAND_SZ = 2
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_PERFORMANCE_DATA = &H80000004
Const ERROR_SUCCESS = 0&

Const RegLocation = "software/UnpreXisten/Online Code Browser/"
Const RegKey = HKEY_LOCAL_MACHINE
Dim AppVer As String * 8

Declare Function RegCloseKey Lib "advapi32.dll" (ByVal Hkey As Long) As Long

Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal Hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal Hkey As Long, ByVal lpSubKey As String) As Long

Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal Hkey As Long, ByVal lpValueName As String) As Long

Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal Hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal Hkey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long

Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal Hkey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Const REG_SZ = 1
Const REG_DWORD = 4

Public Enum OfficeVer
    Office_97
    Office_2000
    Office_xp
    Office_2003
End Enum
'<CSCM>
'--------------------------------------------------------------------------------
' 工 程 名:  工程1
' 函 数 名: GetString
' 变    量 :  OfKind (OfficeVer)
' 输    入:无
' 输    出:OFFICE 的路径
'我的机器没有OFFICE xp 根据97 200 2003的关系
'可以看出键值为"HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Office/10.0/Common/InstallRoot"
' 日    期 : 2005-7-5
' 作    者 :    许仙
'--------------------------------------------------------------------------------
'</CSCM>
Public Function GetOfficePath(OfKind As OfficeVer) As String

    Dim lValueType
    Dim keyhand As Long, r
    Dim datatype As Long
    Dim lResult As Long
    Dim strBuf As String
    Dim lDataBufSize As Long
    Dim intZeroPos As Integer, StrKeyName$

    Select Case OfKind

        Case 0
            r = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE/Microsoft/Office/8.0/Common/InstallRoot", keyhand)
            StrKeyName = "OfficeBin"

        Case 1
            r = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE/Microsoft/Office/9.0/Common/InstallRoot", keyhand)
            StrKeyName = "Path"

        Case 2
            r = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE/Microsoft/Office/10.0/Common/InstallRoot", keyhand)
            StrKeyName = "Path"

        Case 3
            r = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE/Microsoft/Office/11.0/Common/InstallRoot", keyhand)
            StrKeyName = "Path"

    End Select

    lResult = RegQueryValueEx(keyhand, StrKeyName, 0&, lValueType, ByVal 0&, lDataBufSize)

    If lValueType = REG_SZ Then

        strBuf = String(lDataBufSize, " ")
        lResult = RegQueryValueEx(keyhand, StrKeyName, 0&, 0&, ByVal strBuf, lDataBufSize)

        If lResult = ERROR_SUCCESS Then

            intZeroPos = InStr(strBuf, Chr$(0))

            If intZeroPos > 0 Then

                GetOfficePath = Left$(strBuf, intZeroPos - 1)

            Else

                GetOfficePath = strBuf

            End If

        End If

    End If

End Function

 

 

 

其他人写的方法  很不错的 方法 :)

http://blog.csdn.net/tanaya/archive/2005/04/29/368504.aspx

本函数运行不需要机器上安装过Office

获取当前Office版本的函数

Private Sub Command1_Click()
    MsgBox GetInstalledOfficeVersion()
End Sub

'本函数运行不需要机器上安装过Office
'经典的判断Office版本函数,原创!
'支持到Office 2003
Function GetInstalledOfficeVersion() As String
    On Error Resume Next
    Dim WD
    Dim OfficeVer As String
    OfficeVer = 0
    GetInstalledOfficeVersion = ""
    Set WD = CreateObject("Word.Application.8")
    OfficeVer = CStr(WD.Version)
    WD.quit
    If Not WD Is Nothing Then Set WD = Nothing
    If InStr(OfficeVer, "8") <> 0 Then
       GetInstalledOfficeVersion = "Office 97"
    ElseIf InStr(OfficeVer, "9") <> 0 Then
       GetInstalledOfficeVersion = "Office 2000"
    ElseIf InStr(OfficeVer, "10") <> 0 Then
       GetInstalledOfficeVersion = "Office XP 2002"
    ElseIf InStr(OfficeVer, "11") <> 0 Then
       GetInstalledOfficeVersion = "Office 2003"
    End If
    If Err.Number = 424 Then
       Err.Clear
       GetInstalledOfficeVersion = "没有安装 Microsoft Office"
    End If
End Function


C++判断Office版本

头文件如下: #pragma once #include #include class CJudgeOfficeVersion { public: CJudgeOfficeVersion(...
  • Lpc_china
  • Lpc_china
  • 2014年01月16日 15:24
  • 2404

VC检测Office版本

现在做的一个软件,里边用到了ActiveX控件,内嵌了Word,在安装Word的电脑运行是没问题的,但是在没有Word环境的电脑上就出问题,所以需要检测一下当前机器是否安装了Office,然后做出友好...
  • shenshen211
  • shenshen211
  • 2016年03月17日 17:05
  • 376

无法安装64位office,因为已有32位版本的完美解决方法

今天在安装office2013 64位版本的时候,出现了“无法安装64位版本的Office,因为在您的PC上找到了以下32位程序:Office 15 Click-to-Run Extensibilit...
  • u013519551
  • u013519551
  • 2017年04月27日 16:22
  • 871

Office安装时提示有32位版本

问题: 无法安装64位版本的Office,因为在您的PC上找到了以下32位程序:Office 15 Click-to-Run Extensibility Component ,请卸载所有32位Off...
  • qq_36568192
  • qq_36568192
  • 2016年11月10日 13:13
  • 849

"无法安装64位版本的Office,因为在您的PC上找到了以下32位程序"的解决办法

今天在帮助一个同学安装office2013 64位版本的时候,出现“无法安装64位版本的Office,因为在您的PC上找到了以下32位程序:Office 15 Click-to-Run Extensi...
  • xiaobaiing
  • xiaobaiing
  • 2016年05月03日 16:23
  • 8248

theano安装(一)windows配置安装theano环境(非GPU版)、keras

配置安装非GPU版本的theano
  • tina_ttl
  • tina_ttl
  • 2016年05月14日 09:05
  • 5510

解决“不能安装 64 位版本的 Office 2010,因为已安装 32 位 Office 产品”问题

在64位电脑上安装Microsoft Office Professional Plus 2010,遇到“不能安装 64 位版本的 Office 2010,因为已安装 32 位 Office 产品”或“...
  • arackethis
  • arackethis
  • 2015年04月27日 11:39
  • 9540

C#winform检测电脑安装的.netframework版本和是否安装了某软件

代码如下: //C#获取已安装 .NET Framework 版本 private static string[] GetDotNetVersions() ...
  • myesn
  • myesn
  • 2016年06月21日 22:49
  • 2290

不安装OFFICE实现服务器读取EXCEL(ASP.NET)

前段时间用asp.net做了一简单的游戏管理后台,其中涉及到了上传Excel导入数据的功能,本来在本地开发实现都好好的,可已上传的服务器上就悲剧了。服务器是阿里云 Windows Server 200...
  • wangqiuyun
  • wangqiuyun
  • 2014年03月17日 15:57
  • 10127

检测当前是否联网

一、 尝试进行网络连接   要用的函数:InternetAttemptConnect   函数原形:DWORD InternetAttemptConnect(DWORD dwREserved); ...
  • xiaoqi030611a
  • xiaoqi030611a
  • 2014年09月30日 14:26
  • 297
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何检测当前机器中是否安装Office 及其版本??
举报原因:
原因补充:

(最多只允许输入30个字)