明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3657|回复: 8

求助:VB调用CAD时,如何读注册表检测是否安装CAD?

[复制链接]
发表于 2009-10-28 20:48:00 | 显示全部楼层 |阅读模式

在VB程序里,调用CAD,但是不能确定别人电脑上安装了CAD,怎么判断是否安装CAD,保证程序能运行?查看资料提示读注册表信息,但还是不知道怎么下手,望各位高手赐教哈,感激不尽!!

发表于 2009-10-29 20:24:00 | 显示全部楼层

返回值

1.用getobject,如果返回错误,就创建,再错误,应该就是没有安装了。

2.检查注册表是否有HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\等

供参考

发表于 2009-11-3 17:51:00 | 显示全部楼层

可以通过vb判断是否安装了cad,并判断是哪个版本

Dim Info As Variant
Private Sub Form_Load()
Dim Location(11) As String, i As Integer

Info = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
Location(0) = "SOFTWARE\Autodesk\AutoCAD\R15.0\ACAD-1:804" '2002中文版
Location(1) = "SOFTWARE\Autodesk\AutoCAD\R15.0\ACAD-1:409" '2002英文版
Location(2) = "SOFTWARE\Autodesk\AutoCAD\R16.0\ACAD-201:804" '2004中文版
Location(3) = "SOFTWARE\Autodesk\AutoCAD\R16.0\ACAD-201:409" '2004英文版
Location(4) = "SOFTWARE\Autodesk\AutoCAD\R16.1\ACAD-301:804" '2005中文版
Location(5) = "SOFTWARE\Autodesk\AutoCAD\R16.1\ACAD-301:409" '2005英文版
Location(6) = "SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:804" '2006中文版
Location(7) = "SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:409" '2006英文版
Location(8) = "SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6001:804" '2008中文版
Location(9) = "SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6001:409" '2008英文版
Location(10) = "SOFTWARE\Autodesk\AutoCAD\R17.2\ACAD-7001:804" '2009中文版
Location(11) = "SOFTWARE\Autodesk\AutoCAD\R17.2\ACAD-7001:409" '2009英文版
    For i = 0 To 11
        Info(i) = SearchCADversion(Location(i))
        Option1(i).Enabled = Info(i)(0)
    Next


End Sub

'判断注册项是否存在
Public Function IsSubKeyName(RootKey As Long, SubKeyName As String, Optional hKey As Long) As Boolean
    If RegOpenKey(RootKey, SubKeyName, hKey) = 0& Then
        IsSubKeyName = True
    Else
        IsSubKeyName = False
    End If
End Function
Public Function SearchCADversion(Location As String)
    Dim Name As String * 255
    Dim lngTypeData As Long  '返回注册表值的数据类型
    Dim intname As String '文件名所在的位置
    Dim Being As Boolean
    Dim result(1)
    If IsSubKeyName(HKEY_LOCAL_MACHINE, Location, hKey) Then '判断是否存在项目
        RegQueryValueEx hKey, "AcadLocation", 0&, lngTypeData, ByVal Name, Len(Name) '读到"AcadLocation"下数据
        intname = Left(Name, InStr(Name, Chr(0)) - 1)
        If Len(intname) = 0 Then '如果存在这个大项目,但是里面AcadLocation没有,就表示可能卸载过,也没有安装这个版本的CAD
            Being = False
        Else '即存在大项,又有程序位置,说明存在这个版本的CAD
            Being = True
        End If
    Else '注册项不存在,表示没有这个版本的CAD
        Being = False
    End If
    result(0) = Being: result(1) = intname
     SearchCADversion = result
End Function

发表于 2009-11-8 15:41:00 | 显示全部楼层

VBA.NET某些时候需要这样判断版本 并得到版本号

 楼主| 发表于 2009-11-9 10:52:00 | 显示全部楼层
本帖最后由 作者 于 2009-11-9 11:50:01 编辑

非常感谢楼上各位的回答, 还是不能解决这个问题

请问home兄, “If IsSubKeyName(HKEY_LOCAL_MACHINE, Location, hKey) Then '判断是否存在项目”  HKEY_LOCAL_MACHINE一直是空值,“Location(2) = "SOFTWARE\Autodesk\AutoCAD\R16.0\ACAD-201:804" '2004中文版”     这个路径到底是什么啊?是自动找路径吗?我查找了一下 没有这个。

迷茫中。。。。。。。。。

发表于 2009-11-9 15:21:00 | 显示全部楼层
这是cad在注册表中的注册路径,每个版本在注册表中都有不同的名称,这样是每个版面都检索一下,来判断安装了哪个版本。
发表于 2009-11-9 18:59:00 | 显示全部楼层
三楼的只摘录了一部分,详细的见http://hi.baidu.com/kakanimo/blog/item/22f6fed2185887d8a9ec9ac8.html
发表于 2009-11-9 20:57:00 | 显示全部楼层

读取注册表的最快的了,用createobject和getobject比较慢

 楼主| 发表于 2009-11-9 20:58:00 | 显示全部楼层

非常感谢各位的解答,这个问题终于解决了,还有楼上给出的那个博客很不错,里面很多文章都非常受用,

谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 00:29 , Processed in 0.188219 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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