尘缘一生 发表于 2021-12-3 19:30:14

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加启动组方式
[*])









流浪的军刀 发表于 2021-12-4 08:25:39

感谢楼主的探索精神。

999999 发表于 2021-12-4 09:15:08

谢谢楼主的尝试

e2002 发表于 2021-12-4 10:33:56

本帖最后由 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:24:23

本帖最后由 尘缘一生 于 2021-12-5 19:27 编辑

e2002 发表于 2021-12-4 10:33
不建议去改这些系统文件,
要自动加载你的工具,不如直接提供.cuix,然后把加载vlx(fas,lsp)/arx/dll等的 ...经过几天测试,代码解决我的问题,
MNL文件还是得放CAD支持路径?还是任何一个支持路径?

尘缘一生 发表于 2021-12-6 21:07:08

本帖最后由 尘缘一生 于 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)

尘缘一生 发表于 2021-12-8 19:46:33

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)

ynhh 发表于 2022-4-24 16:11:53

大师说的对

有些电脑启动加载失效
不知何因?
CAD启动组不自动加载?同一个文件有的电脑能自动加载,有的电脑无法加载,
大师能指点一下?谢谢


页: [1]
查看完整版本: ACADXXXX.LSP ACADXXXXDOC.LSP 启动组--加载自适应