ACADXXXX.LSP ACADXXXXDOC.LSP 启动组--加载自适应
本帖最后由 尘缘一生 于 2021-12-3 23:39 编辑如题:
程序自启动,有几种方式,其中ACADXXXX.LSPACADXXXXDOC.LSP启动组加载方式,也是难以取舍。
比如:启动组方式吧,发现确实有些电脑,注册表BUG,造成启动组方式失败,
为此写了这段程序进行尝试,求得安装BUG烦心,完善与优化之路还需时日。。。
程序会选择 上述方式之一,启动组方式作为备选,
由于我没有使用CAD2022,版本号是否是24.1,如果不是,或者其他版本号有误,请告知下
题外话:为什么我在发帖,每次都得退出一次,再登录进来才成呢?
[*];;cad版本判断-------(一级)----------
[*](defun slcadver (/ num str)
[*](setq num (atof (substr (getvar "ACADVER") 1 4)))
[*](cond
[*] ((= num 15.0) (setq str "acad2000.lsp")) ;_CAD2000
[*] ((= num 15.1) (setq str "acad2002.lsp")) ;_CAD2002
[*] ((= num 16.0) (setq str "acad2004.lsp")) ;_CAD2004
[*] ((= num 16.1) (setq str "acad2005.lsp")) ;_CAD2005
[*] ((= num 16.2) (setq str "acad2006.lsp")) ;_CAD2006
[*] ((= num 17.0) (setq str "acad2007.lsp")) ;_CAD2007
[*] ((= num 17.1) (setq str "acad2008.lsp")) ;_CAD2008
[*] ((= num 17.2) (setq str "acad2009.lsp")) ;_CAD2009
[*] ((= num 18.0) (setq str "acad2010.lsp")) ;_CAD2010
[*] ((= num 18.2) (setq str "acad2012.lsp")) ;_CAD2012
[*] ((= num 19.0) (setq str "acad2013.lsp")) ;_CAD2013
[*] ((= num 19.1) (setq str "acad2014.lsp")) ;_CAD2014
[*] ((= num 20.0) (setq str "acad2015.lsp")) ;_CAD2015
[*] ((= num 20.1) (setq str "acad2016.lsp")) ;_CAD2016
[*] ((= num 21.0) (setq str "acad2017.lsp")) ;_CAD2017
[*] ((= num 22.0) (setq str "acad2018.lsp")) ;_CAD2018
[*] ((= num 23.1) (setq str "acad2020.lsp")) ;_CAD2020
[*] ((= num 24.1) (setq str "acad2022.lsp")) ;_CAD2022
[*])
[*](if (= str nil)
[*] (cond
[*] ((= num 15.0) (setq str "acad2000doc.lsp")) ;_CAD2000
[*] ((= num 15.1) (setq str "acad2002doc.lsp")) ;_CAD2002
[*] ((= num 16.0) (setq str "acad2004doc.lsp")) ;_CAD2004
[*] ((= num 16.1) (setq str "acad2005doc.lsp")) ;_CAD2005
[*] ((= num 16.2) (setq str "acad2006doc.lsp")) ;_CAD2006
[*] ((= num 17.0) (setq str "acad2007doc.lsp")) ;_CAD2007
[*] ((= num 17.1) (setq str "acad2008doc.lsp")) ;_CAD2008
[*] ((= num 17.2) (setq str "acad2009doc.lsp")) ;_CAD2009
[*] ((= num 18.0) (setq str "acad2010doc.lsp")) ;_CAD2010
[*] ((= num 18.2) (setq str "acad2012doc.lsp")) ;_CAD2012
[*] ((= num 19.0) (setq str "acad2013doc.lsp")) ;_CAD2013
[*] ((= num 19.1) (setq str "acad2014doc.lsp")) ;_CAD2014
[*] ((= num 20.0) (setq str "acad2015doc.lsp")) ;_CAD2015
[*] ((= num 20.1) (setq str "acad2016doc.lsp")) ;_CAD2016
[*] ((= num 21.0) (setq str "acad2017doc.lsp")) ;_CAD2017
[*] ((= num 22.0) (setq str "acad2018doc.lsp")) ;_CAD2018
[*] ((= num 23.1) (setq str "acad2020doc.lsp")) ;_CAD2020
[*] ((= num 24.1) (setq str "acad2022doc.lsp")) ;_CAD2022
[*] )
[*])
[*]str
[*])
[*];;写acadxxxx.lsp 自启动语句-----0000级加载---
[*](defun writsetup (/ files lst k strk i str)
[*](if (setq files (findfile (slcadver)))
[*] (progn
[*] (setq lst (sl_getfile files))
[*] (repeat (setq i (length lst))
[*] (setq strk (nth (setq i (1- i)) lst))
[*] (if (wcmatch strk (strcat "*" "三领设计" "*"))
[*] (setq k t)
[*] )
[*] )
[*] (if (/= k t)
[*] (progn
[*] (setq str (T-string-subst "/" "\\" (strcat "(load " "\"" (slpath sl-path0) "\\" "三领设计.VLX" "\"" ")")))
[*] (writeendstr files str)
[*] )
[*] )
[*] )
[*])
[*])
[*];;主程序部分
[*](if (setq files (findfile (slcadver))) ;;判断acadxxxx.lsp有无启动语句
[*](progn
[*] (setq lst (sl_getfile files))
[*] (repeat (setq i (length lst))
[*] (setq strk (nth (setq i (1- i)) lst))
[*] (if (not (wcmatch strk (strcat "*" "三领设计" "*")))
[*] (progn
[*] (writsetup) ;;没有写入
[*] (delStartupSuite (strcat (slpath sl-path0) "\\" "三领设计.VLX") "三领设计");删除启动组方式
[*] )
[*] )
[*] )
[*])
[*](addToStartupSuite (strcat (slpath sl-path0) "\\" "三领设计.VLX")) ;没有acadxxxx.lsp加启动组方式
[*])
感谢楼主的探索精神。 谢谢楼主的尝试 本帖最后由 e2002 于 2021-12-4 10:36 编辑
不建议去改这些系统文件,
要自动加载你的工具,不如直接提供<YourTools>.cuix,然后把加载vlx(fas,lsp)/arx/dll等的语句写在同名的<YourTools>.mnl 中。
另外:1. 每个版本对应的 VerNum可以在帮助文档中查到。
2. 这个版本与VerNum的对应关系,设为一个 list ,在代码中用assoc获取对应的sYear值,而不是一行又一行的重复写语句。
本帖最后由 尘缘一生 于 2021-12-5 19:27 编辑
e2002 发表于 2021-12-4 10:33
不建议去改这些系统文件,
要自动加载你的工具,不如直接提供.cuix,然后把加载vlx(fas,lsp)/arx/dll等的 ...经过几天测试,代码解决我的问题,
MNL文件还是得放CAD支持路径?还是任何一个支持路径? 本帖最后由 尘缘一生 于 2021-12-6 21:08 编辑
e2002 发表于 2021-12-4 10:33
不建议去改这些系统文件,
要自动加载你的工具,不如直接提供.cuix,然后把加载vlx(fas,lsp)/arx/dll等的 ...
作个万一失败,补救的,慢慢测试
[*];创建自启动slmenu.mnl文件-----(一级)-----
[*](defun create_mnl (/ mnlpath str)
[*](setq mnlpath (strcat (slpath sl-path0) "\\" "SLMENU.mnl"))
[*](setq str (t-string-subst "/" "\\" (strcat "(load " "\"" (slpath sl-path0) "\\" "三领设计.VLX" "\"" ")")))
[*](rewritefile mnlpath (list str))
[*])
;;!!!!!!!!!!!!!!!!0000级加载!!!!!!!!!!!!!!!!!!
(defun sl0000 (/ files lst i)
;; (vla-put-displayscrollbars (vla-get-display (vla-get-preferences *Acad*)) 0) ;_关闭滚动条,浩辰测试错误
(sl-lujing) ;;加载三领设计到搜索路径
;;(quzds) ;;运行一次,把记录数据增加1次,已移动到绘图比例
(slcsh0);;变量设置1
(if (/= sl-path0 nil)
(progn
(slcsh);;变量设置2
(set-dimsty 0) ;;标注变量设置并置为当前
;;(xlr-autolayer);------防止天正崩溃(舍弃自动图层)----
(menu00) ;;菜单系统
(load (strcat (slpath sl-path0)"\\" "实用程序" "\\" "slsystem.vlx"))
(if (/= (setq files (findfile (slcadver))) nil);;判断acadxxxx.lsp有无启动语句
(progn
(setq lst (sl_getfile files))
(repeat (setq i (length lst))
(setq strk (nth (setq i (1- i)) lst))
(if (not (wcmatch strk (strcat "*" "三领设计" "*")))
(progn
(writsetup) ;;没有写入
(delstartupsuite (strcat (slpath sl-path0) "\\" "三领设计.VLX") "三领设计") ;删除启动组方式
)
)
)
)
(if (/= (addtostartupsuite (strcat (slpath sl-path0) "\\" "三领设计.VLX")) nil) ;没有acadxxxx.lsp加启动组方式
(princ)
(create_mnl)
)
)
(yhstartcx);;加载用户目录下程序
(slwg);;自检
)
(sl-lujing)
)
)
(sl0000) e2002 发表于 2021-12-4 10:33
不建议去改这些系统文件,
要自动加载你的工具,不如直接提供.cuix,然后把加载vlx(fas,lsp)/arx/dll等的 ...
经测试,发现MNL方式还是不大好,最后还是选择,两种
[*];;!!!!!!!!!!!!!!!!0000级加载!!!!!!!!!!!!!!!!!!
[*](defun sl0000 (/ files lst i)
[*];; (vla-put-displayscrollbars (vla-get-display (vla-get-preferences *Acad*)) 0) ;_关闭滚动条,浩辰测试错误
[*](sl-lujing) ;;加载三领设计到搜索路径
[*];;(quzds) ;;运行一次,把记录数据增加1次,已移动到绘图比例
[*](slcsh0);;变量设置1
[*](if (/= sl-path0 nil)
[*] (progn
[*] (slcsh);;变量设置2
[*] (set-dimsty 0) ;;标注变量设置并置为当前
[*] ;;(xlr-autolayer);------防止天正崩溃(舍弃自动图层)----
[*] (menu00) ;;菜单系统
[*] (load (strcat (slpath sl-path0)"\\" "实用程序" "\\" "slsystem.vlx"))
[*] (if (/= (setq files (findfile (slcadver))) nil);;判断acadxxxx.lsp有无启动语句
[*] (progn
[*] (setq lst (sl_getfile files))
[*] (repeat (setq i (length lst))
[*] (setq strk (nth (setq i (1- i)) lst))
[*] (if (not (wcmatch strk (strcat "*" "三领设计" "*")))
[*] (progn
[*] (writsetup) ;;没有写入
[*] (delstartupsuite (strcat (slpath sl-path0) "\\" "三领设计.VLX") "三领设计");删除启动组方式
[*] )
[*] )
[*] )
[*] )
[*] (if (/= (addtostartupsuite (strcat (slpath sl-path0) "\\" "三领设计.VLX")) nil) ;没有acadxxxx.lsp加启动组方式
[*] (princ)
[*] (create_mnl)
[*] )
[*] )
[*] (yhstartcx);;加载用户目录下程序
[*] (slwg);;自检
[*] )
[*] (sl-lujing)
[*])
[*])
[*](sl0000)
大师说的对
有些电脑启动加载失效
不知何因?
CAD启动组不自动加载?同一个文件有的电脑能自动加载,有的电脑无法加载,
大师能指点一下?谢谢
页:
[1]