EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 652|回复: 0
打印 上一主题 下一主题

[资料] 在注册表中为CAD增加“支持文件搜索路径

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 14:07:16 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
思路:1.读取注册表得到CAD“支持文件搜索路径”中的所有路径(在注册表中的位置见http://hi.baidu.com/kakanimo/blog/item/68171331079f5391a9018e91.html);2.把路径分开(按;分开,注册表中的“ACAD”的值就是这个样式)3.判断所要添加路径在不在其中,在、不添加写回注册表,不在、就添加进去然后写回注册表。需要注意的是。修改的时候一定要把CAD关闭(判断是否在运行见http://hi.baidu.com/kakanimo/blog/item/47272439f2e0022cb9998f6e.html),否则又会回到修改前的样子。   下面是代码:分为几个小部分
    1.得到本机上安装的所有CAD的“支持文件搜索路径”在注册表中的位置;2.读取注册表某个键的值;3.把读取的值分析是否加入新的路径信息。
    先搜索出本机上安装的CAD版本,代码我就省了,见“如何搜索出本机上安装的AutoCAD版本”http://hi.baidu.com/kakanimo/blo ... 5887d8a9ec9ac8.html,然后根据搜索出的版本得到相应版本在注册表中的位置:

  1. Sub AddSupportPath()
  2. Dim LocationEx(13) As String, i As Integer
  3. For i = 0 To 13
  4.     If Check1(i).Value = 1 Then
  5.         Select Case i
  6.             Case 0 To 1
  7.                 '"AutoCAD 2002"
  8.                 LocationEx(i) = Location(i) & "\Profiles\<<Unnamed Profile>>\General"
  9.             Case 2 To 3
  10.                 ' "AutoCAD 2004"
  11.                 LocationEx(i) = Location(i) & "\Profiles\<<未命名配置>>\General"
  12.             Case 4 To 5
  13.                 ' "AutoCAD 2005"
  14.                 LocationEx(i) = Location(i) & "\Profiles\<<未命名配置>>\General"
  15.             Case 6 To 7
  16.                 '"AutoCAD 2006"
  17.                 LocationEx(i) = Location(i) & "\Profiles\<<未命名配置>>\General"
  18.             Case 8 To 9
  19.                 '"AutoCAD 2007"
  20.                 LocationEx(i) = Location(i) & "\Profiles\<<未命名配置>>\General"
  21.             Case 10 To 11
  22.                 ' "AutoCAD 2008"
  23.                 LocationEx(i) = Location(i) & "\Profiles\<<未命名配置>>\General"
  24.             Case 12 To 13
  25.                 '"AutoCAD 2009"
  26.                 LocationEx(i) = Location(i) & "\Profiles\<<未命名配置>>\General"
  27.         End Select
  28.     End If
  29. Next
复制代码
'接下来读取支持目录
  1. Dim temp As String
  2. For i = 0 To 13
  3.     If Check1(i).Value = 1 Then
  4.         temp = GetKeyValue(HKEY_CURRENT_USER, LocationEx(i), hKey) '得到字符串
  5.         'MsgBox "前" & temp
复制代码
        '判断并修改这个字符串'写入注册表
      
  1.   If AddSupportPathtoString(App.Path, temp) = False Then
  2.             '写入注册表写入字符串值
  3.             RegSetValueEx hKey, "ACAD", 0, REG_SZ, ByVal temp, LenB(StrConv(temp, vbFromUnicode)) + 1
  4.         End If
  5.     End If
  6. Next
  7. End Sub
复制代码
见上面代码。先根据搜索出来的CAD版本加上相应版本字符串得到CAD在注册表中“支持文件搜索路径”的完整位置,然后temp = GetKeyValue(HKEY_CURRENT_USER, LocationEx(i), hKey) 得到里面的值。然后用AddSupportPathtoString判断并写入,以下是上面代码中用到得函数:
Private Function GetKeyValue(RootKey As Long, SubKeyName As String, Optional hKey As Long) As String
    Dim intname As String '读取的字符串
    Dim Name As String * 1024 '这里要非常注意,后面这个1024如果设置小的画会下面读不出值
    Dim lngTypeData As Long '返回注册表值的数据类型
    Call RegOpenKey(RootKey, SubKeyName, hKey) '打开
    Call RegQueryValueEx(hKey, "ACAD", 0&, lngTypeData, ByVal Name, Len(Name))   '读到"ACAD"下数据
    intname = Left(Name, InStr(Name, Chr(0)) - 1)
    GetKeyValue = intname
    'MsgBox intname
End Function
'***********************************
'设置支持路径,
'****************************************
'入口:1.文件夹路径。2.ACAD支持路径在注册表中的位置

  1. Function AddSupportPathtoString(ByVal Path As String, AcadFiles As String) As Boolean
  2. Dim curSupportPath As Variant
  3. Dim i As Integer
  4. Dim Support As Boolean
  5. Support = False
  6. curSupportPath = VBA.Split(AcadFiles, ";")
  7. For i = 0 To UBound(curSupportPath)
  8.     If StrConv(curSupportPath(i), vbUpperCase) = StrConv(Path, vbUpperCase) Then '已经存在就不添加
  9.         Support = True
  10.         Exit For
  11.     End If
  12. Next
  13. If Not Support Then
  14.     AcadFiles = Path & ";" & AcadFiles
  15. End If
  16. AddSupportPathtoString = Support
  17. End Function
复制代码
当然上面用到了API,你需要先声明下,这里就省了。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-24 19:55

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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