乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 146|回复: 8

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

[复制链接]

2

主题

4

帖子

2

银币

初来乍到

Rank: 1

铜币
12
发表于 2009-10-28 20:48:00 | 显示全部楼层 |阅读模式
在VB程序里,调用CAD,但是不能确定别人电脑上安装了CAD,怎么判断是否安装CAD,保证程序能运行?查看资料提示读注册表信息,但还是不知道怎么下手,望各位高手赐教哈,感激不尽!!
回复

使用道具 举报

12

主题

31

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
79
发表于 2009-10-29 20:24:00 | 显示全部楼层
1.用getobject,如果返回错误,就创建,再错误,应该就是没有安装了。
2.检查注册表是否有HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\等
供参考
回复

使用道具 举报

3

主题

26

帖子

3

银币

初来乍到

Rank: 1

铜币
38
发表于 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
回复

使用道具 举报

1

主题

7

帖子

3

银币

初来乍到

Rank: 1

铜币
11
发表于 2009-11-8 15:41:00 | 显示全部楼层
VBA.NET某些时候需要这样判断版本 并得到版本号
回复

使用道具 举报

2

主题

4

帖子

2

银币

初来乍到

Rank: 1

铜币
12
发表于 2009-11-9 10:52:00 | 显示全部楼层

非常感谢楼上各位的回答, 还是不能解决这个问题
请问home兄, “If IsSubKeyName(HKEY_LOCAL_MACHINE, Location, hKey) Then '判断是否存在项目”  HKEY_LOCAL_MACHINE一直是空值,“Location(2) = "SOFTWARE\Autodesk\AutoCAD\R16.0\ACAD-201:804" '2004中文版”     这个路径到底是什么啊?是自动找路径吗?我查找了一下 没有这个。
迷茫中。。。。。。。。。
回复

使用道具 举报

3

主题

26

帖子

3

银币

初来乍到

Rank: 1

铜币
38
发表于 2009-11-9 15:21:00 | 显示全部楼层
这是cad在注册表中的注册路径,每个版本在注册表中都有不同的名称,这样是每个版面都检索一下,来判断安装了哪个版本。
回复

使用道具 举报

5

主题

23

帖子

2

银币

初来乍到

Rank: 1

铜币
43
发表于 2009-11-9 18:59:00 | 显示全部楼层
三楼的只摘录了一部分,详细的见http://hi.baidu.com/kakanimo/blog/item/22f6fed2185887d8a9ec9ac8.html
回复

使用道具 举报

23

主题

561

帖子

13

银币

中流砥柱

Rank: 25

铜币
653
发表于 2009-11-9 20:57:00 | 显示全部楼层
读取注册表的最快的了,用createobject和getobject比较慢
回复

使用道具 举报

2

主题

4

帖子

2

银币

初来乍到

Rank: 1

铜币
12
发表于 2009-11-9 20:58:00 | 显示全部楼层
非常感谢各位的解答,这个问题终于解决了,还有楼上给出的那个博客很不错,里面很多文章都非常受用,
谢谢了
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-1 19:42 , Processed in 0.260719 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表