明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 14373|回复: 33

[求助]关于通过注册表自动加载FAS文件的 奇怪问题(已解决)

    [复制链接]
发表于 2009-6-30 19:18:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-7-6 23:16:41 编辑

我写了一些LISP程序,并编译为FAS文件,想在CAD启动时自动加载我的程序,于是在用VBS程序在注册表中HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:409\Profiles\<<Unnamed Profile>>\Dialogs\Appload\Startup子键下的1Startup和NumStartup写入了相应的内容。(其作用与在启动组中加入相同,但我为了能方便别人使用,故用程序写入)

但打开AutoCAD2007后,没有按预期的那样自动加载指定的FAS文件,反复多次依然无果。直到我在CAD命令行输入AP(即手动加载应用程序的命令)后,即使不用任何操作就退出该命令,再打开另一DWG文件,奇迹发生了,FAS文件被加载了。以后每次打开CAD时FAS文件都能被正常的加载了。这是为什么呢?

有没有高手能解释一下呢?

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-7-3 15:02:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2009-7-4 03:46:00 | 显示全部楼层

没问题!我用的VBS文件,指定加载同目录下的Load.fas文件,全部代码如下:

Dim WshShell, REG, Path, Key, SubKey, Value
Set WshShell = WScript.CreateObject("WScript.Shell")
'HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:409\Profiles\<<Unnamed Profile>>\Dialogs\Appload\Startup
Boot = "HKCU\"
Key = "Software\Autodesk\AutoCAD\"
Value = WshShell.RegRead(Boot & Key & "CurVer")
Key = Key & Value & "\"
Value = WshShell.RegRead(Boot & Key & "CurVer")
Key = Key & Value & "\"
SubKey = "Profiles\"
Value = WshShell.RegRead(Boot & Key & SubKey)
SubKey = SubKey & Value & "\Dialogs\Appload\Startup\"
Value = WshShell.RegRead(Boot & Key & SubKey)
IF Value<>"" Then
  Set REG = GetObject("winmgmts:\\.\root\default:StdRegProv")
  Item = Value & "Startup"
  REG.GetStringValue &H80000001, Key & SubKey, Item, Value
  If IsNull(Value) Then
    Value = ""
  Else
    Value = WshShell.RegRead(Boot & Key & SubKey & Item)
    If UCase(Right(Value,9))<>"\LOAD.FAS" Then Value = ""
  End If
End IF
IF Value<>"" Then
  MsgBox "TB Tools 已在自动加载列表中!"
Else
  Path = WshShell.CurrentDirectory & "\Load.fas"
  Value = WshShell.RegRead(Boot & Key & SubKey & "NumStartup")
  Value = CStr(CInt(Value)+1)
  WshShell.RegWrite Boot & Key & SubKey, Value, "REG_SZ"
  WshShell.RegWrite Boot & Key & SubKey & "NumStartup", Value, "REG_SZ"
  WshShell.RegWrite Boot & Key & SubKey & Value & "Startup", Path, "REG_SZ"
  'HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:409\Applications\AcadAppload
  Path = Boot & Key & "Applications\AcadAppload\LOADCTRLS"
  Value = WshShell.RegRead(Path)
  Value = Value or 2
  WshShell.RegWrite Path, Value, "REG_DWORD"
  MsgBox "成功加入自动加载列表!"
End IF

评分

参与人数 1威望 +1 明经币 +2 收起 理由
mccad + 1 + 2 【好评】表扬一下

查看全部评分

回复 支持 0 反对 1

使用道具 举报

发表于 2009-6-30 20:36:00 | 显示全部楼层

为了保证你的程序能加载,还需要通知AutoCAD启动时加载Appload模块。

在安装程序中读取注册表 'HKEY_LOCAL_MACHINE\\.....\\Autodesk\\....\\Applications\\AcadAppload'

 'LOADCTRLS'这个值

将其与十进制数字2(二进制为10)作“OR”运算。然后写回,覆盖之。

这样可以保证AutoCAD启动时会加载Appload.arx模块。

 楼主| 发表于 2009-6-30 20:53:00 | 显示全部楼层

谢谢xshrimp,你的方法我试了,还是不行。

补充一点:在输入AP命令后,在loaded applications列表中有我要加载的FAS文件,刷新几次后又消失了。

 楼主| 发表于 2009-7-2 21:59:00 | 显示全部楼层
问题解决了,还是用的xshrimp的方法。不过不是'HKEY_LOCAL_MACHINE,而是HKEY_CURRENT_USER。
发表于 2009-7-4 15:49:00 | 显示全部楼层
我来个lsp版的。
  1. ;(gps->appload-addfile "d:\\12.lsp")
  2. (defun gps->appload-addfile (AppName / $akey $skey loadctrlnum numstartup)
  3. (if (= (type appname) 'STR)
  4. (progn
  5.   (setq
  6.    $skey (strcat "HKEY_CURRENT_USER\" (vlax-product-key) "\\Profiles\" (getvar "CPROFILE") "\\Dialogs\\Appload\\Startup")
  7.    $akey (strcat "HKEY_CURRENT_USER\" (vlax-product-key) "\\Applications\\AcadAppload" )
  8.   )
  9.   (setq NumStartup (vl-registry-read $skey "NumStartup"))
  10.   (if NumStartup
  11.     (progn
  12.     (vl-registry-write $skey "NumStartup" (itoa (+ 1 (atoi NumStartup))))
  13.     (vl-registry-write $skey (strcat (itoa (+ 1 (atoi NumStartup))) "Startup") AppName )
  14.     )
  15.     (progn
  16.     (vl-registry-write $skey "NumStartup" "1")
  17.     (vl-registry-write $skey "1Startup" AppName )
  18.     )
  19.   )
  20. ;读取LoadCtrls的值,将这个值与2作“或”运算,再写回。这样可以保证AutoCAD启动时会加载Appload.arx模块。
  21. (setq loadctrlnum (vl-registry-read $akey "LOADCTRLS"))
  22. (if loadctrlnum
  23.   (vl-registry-write $akey "LOADCTRLS" (Boole 7 loadctrlnum 2))
  24.   (vl-registry-write $akey "LOADCTRLS" 15)
  25. )  
  26. T
  27. )
  28. nil
  29. );end if
  30. )

评分

参与人数 2明经币 +2 金钱 +10 收起 理由
zctao1966 + 1 很给力!
xyz2009xyz + 1 + 10

查看全部评分

发表于 2009-7-4 19:43:00 | 显示全部楼层

呵呵,不错呀我正想编这个程序,正好被我找到了,不用编了,谢谢分享

发表于 2009-7-5 17:28:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-7-6 08:55:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-6 09:55 , Processed in 0.198620 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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