乐筑天下

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

VBA 等效于 (vlax-product-key)?

[复制链接]

10

主题

63

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
103
发表于 2009-4-13 17:19:29 | 显示全部楼层 |阅读模式
有没有办法使用VBA获取注册表项?谢谢。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2009-4-13 18:12:41 | 显示全部楼层
给你,凯莉。
  1. ' Returns the AutoCAD Product Key
  2. ''''''''''''''''''''''''''''''''''''''''''''''''''''
  3. Private Function VBA_Acad_Product_Key() As String
  4. On Error Resume Next
  5. ' Code suggested by Tony Zanzillo & Autodesk as posted by Laurie Comerford.
  6. ' Note that the code posted in 2005 does not appear to work in the 2009 products, edited to work
  7. ' in 2009 and also to output similar results as the Lisp function (vla-product-key) by Jeff Mishler
  8. Dim oReg As Object
  9. Dim sVer1 As String
  10. Dim sVer2 As String
  11. Dim sver3 As String
  12. Dim sProduct As String
  13. Set oReg = CreateObject("WScript.Shell")
  14. sVer1 = oReg.RegRead("HKEY_CURRENT_USER\SOFTWARE\Autodesk\Autocad\curver")
  15. sVer2 = oReg.RegRead("HKEY_CURRENT_USER\SOFTWARE\Autodesk\Autocad" & sVer1 & "\curver")
  16. 'sver3 = "HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\Autocad" & sVer1 & "" & sVer2 & "\ProductName"
  17. ' ' As well as product name, there are a whole series of other aspects of AutoCAD which can be recovered with this code
  18. '' In 2009 the 2 CurVer keys are found under Current_User NOT Local_Machine as was posted. However, the Key "ProductName" IS in HKLM.
  19. ''sProduct = oReg.RegRead(sver3)
  20. ''Edited to return the key instead of the Product Name.
  21. sver3 = "SOFTWARE\Autodesk\Autocad" & sVer1 & "" & sVer2
  22. sProduct = sver3
  23. Set oReg = Nothing
  24. If Err  0 Or sProduct = "" Then
  25. Err.Clear
  26. GoTo CantFindAutoCAD
  27. End If
  28. VBA_Acad_Product_Key = sProduct
  29. Exit Function
  30. CantFindAutoCAD:
  31. sProduct = "Unable to find AutoCAD in the computer registry." & vbCrLf
  32. MsgBox sProduct, vbCritical
  33. End Function ' VBA_Acad_Product_Key

回复

使用道具 举报

10

主题

63

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
103
发表于 2009-4-13 18:30:57 | 显示全部楼层
谢谢杰夫!我不知道这两个曲线。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2009-4-13 18:39:14 | 显示全部楼层
等一下,别这么快.....我刚刚做了一点测试,这得到了最新的版本开始。换句话说,启动一个2009年的会话,它会返回正确的版本。在2009年运行时开始2008年的一个会话,曲线返回2008年,直到2009年的另一个会话开始。在会话之间切换不会更新曲线,关闭2008会话也不会。(vlax-product-key)能够识别这种变化。
如果这会导致问题,也许有人有更好的主意。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2009-4-13 19:58:12 | 显示全部楼层
我刚刚做了一个快速的ATL/ARX项目...
也许如果你知道如何在VBA使用COM,你可能想试试这个ARX(如果它有用,我可以把它改成Release并再次上传)。
由于我对VBA了解不多,这里是用visual lisp的解释,加载注册COM服务器后:
我只是添加了对acrxProductKey()的访问;功能-它与visual lisp中的vlax-product-key相同
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-4-13 20:21:02 | 显示全部楼层
谢谢路易斯。这很有效:
  1. Function ProductKey() As String
  2. Dim oCom As Object
  3. Dim progID As String
  4. progID = "TheSwampCOM.CTheSwamp.1"
  5. Application.LoadArx "TheSwampCOM.arx"
  6. Set oCom = Application.GetInterfaceObject(progID)
  7. Dim path As String
  8. oCom.ProductKey path
  9. Application.UnloadArx "TheSwampCOM.arx"
  10. ProductKey = path
  11. End Function
  12. Sub arxtest()
  13. Debug.Print ProductKey
  14. End Sub

回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2009-4-13 20:27:02 | 显示全部楼层

那很好,杰夫。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2009-4-13 20:38:49 | 显示全部楼层
它不需要加载arx了——试一试,看看是否可行。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2009-4-13 22:15:57 | 显示全部楼层
如果您想避免COM(如果C#不提供此函数,并且您还希望它使用此语言),您可以使用以下内容:
  1. [DllImport("acdb17.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode, EntryPoint = "?acrxProductKey@@YAPB_WXZ")]
  2. static extern string ProductKey();
  3. [CommandMethod("GetRegPath")]
  4. public void regPathVerCurrentlyLoaded()
  5. {
  6.     string path = ProductKey();
  7.     Document doc = acadApp.DocumentManager.MdiActiveDocument;
  8.     Editor ed = doc.Editor;
  9.     ed.WriteMessage(path);
  10. }

HTH
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2009-4-14 08:59:32 | 显示全部楼层
另一个....
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-2 06:29 , Processed in 1.568245 second(s), 72 queries .

© 2020-2025 乐筑天下

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