qiuhai1991 发表于 2016-2-28 17:48:33

自动启动的方法有哪些?

我知道有这么几种方法:
1、用appload放到启动组里面,但似乎无法用lisp自动实现
2、修改acad.lsp文件
3、修改acad.mnl文件
之前用了学院派工具箱,发现它没有动这3个地方,后来发现它修改了注册表,但是这个注册表的位置是如何确定的,比如我在CASS里面加载,它是修改了HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.2\ACAD-4001:804\Profiles\CASS80\General里面的ACAD项,但是如果在CAD2002里面加载,它是修改了HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R15.0\ACAD-1:804\Profiles\<<未命名配置>>\General里面的ACAD项,这个注册表的位置是如何确定的呢?

vectra 发表于 2016-2-28 17:48:34

楼主要求的注册表位置可以通过下面的代码读到

(vl-registry-read
(strcat "HKEY_CURRENT_USER\\"
          (vlax-product-key)
          "\\Profiles\\"
          (getvar "CPROFILE")
          "\\General"
)
"ACAD"
)

再用vl-registry-write就可以修改了

bikeboy 发表于 2016-2-29 11:37:48

做个标记 坐等答案。

ludaweb 发表于 2016-2-29 12:38:01

下面是我的工具箱的安装程序,看看能用上吗




;;将此文件拖入ACAD绘图区即可自动安装L工具箱
(vl-load-com)

(defun load_ltools(/ GetFileAtt SetFileAtt vldos-copy fl fr fw item l_str att)
(defun GetFileAtt (fp / fso fl attr)
    (if(and fp (/= "" fp))
      (progn
      (setq fso (vlax-create-object "Scripting.FileSystemObject"))
      (setq fl (vlax-invoke-method fso 'GetFile fp))
      (setq attr (vlax-get-property fl 'Attributes))
      (vlax-release-object fl)
      (vlax-release-object fso)
      )
    )
    attr
)
(defun SetFileAtt (fp flag / fso fl)
    (if(and fp (/= "" fp) flag)
      (progn
      (setq fso (vlax-create-object "Scripting.FileSystemObject"))
      (setq fl (vlax-invoke-method fso 'GetFile fp))
      (vlax-put-property fl 'Attributes flag)
      (vlax-release-object fl)
      (vlax-release-object fso)
      )
    )
)
(Defun vldos-copy (from to / sys folder)
    (if (setq sys (vlax-get-or-create-object "Shell.Application"))
      (progn
      (if (setq folder (vlax-invoke-method sys 'namespace to))
         (progn
             (vlax-invoke-method folder 'copyhere from (+ 4 16))
             (vlax-release-object folder)
         )
      )
      (vlax-release-object sys)
      )
    )
    (princ)
)

(if (not (wcmatch (strcase (getenv "ACAD")) (strcat "*" (strcase path) "*")))
    (setenv "ACAD" (strcat path ";" (getenv "ACAD")))
)
(if (>= 20 (atoi (substr (getvar "acadver") 1 4)) 17)
    (progn
    (vldos-copy (strcat path "\\DWG To PDF LT.pc3") (getenv "PrinterConfigDir"))
    (vldos-copy (strcat path "\\DWG To PDF LT.pmp") (getenv "PrinterDescDir"))
    )
)
(if (setq fl (findfile "acaddoc.lsp"))
    (progn
      (setq fr (open fl "r"))
      (while (setq item (read-line fr))
      (setq l_str (append l_str (list item)))
      )
      (close fr)
      (setq l_str (append (vl-remove "(load \"ltools\" nil)" l_str) (list "(load \"ltools\" nil)")))
      (if (setq fr (open fl "w"))
      (progn
          (foreach itm l_str (write-line itm fr))
          (close fr)
      )
      (progn
          (setq att (GetFileAtt fl))
          (SetFileAtt fl 0)
          (setq fr (open fl "w"))
          (foreach itm l_str (write-line itm fr))
          (close fr)
          (SetFileAtt fl att)
      )
      )
    )
    (if (setq fw (open (strcat path (if (wcmatch path "*\\") "" "\\") "acaddoc.lsp") "w"))
      (progn
      (write-line "(load \"ltools\" nil)" fw)
      (close fw)
      )
      (prompt "\n无法自动加载L工具箱!")
    )
)
(setenv "ltools-menuon" "0")
(load str nil)
(c:loadlt)
(prompt "\n安装成功,点击工具面板上的“卸载程序”可自动卸载!")
)

(cond
((not (>= 20.0 (atoi (substr (getvar "acadver") 1 4)) 16.0)) (prompt "\n安装失败,不支持的AutoCAD版本!"))
(c:loadlt (prompt "\n已安装了L工具箱,不需要再安装!"))
(T
    (princ "\n")
    (setq path (getvar "lastprompt"))
    (if (wcmatch (strcase path) "*(LOAD \"*")
      (setq str (vl-string-search "(LOAD \"" path)
            path (substr path (+ str 8) (- (vl-string-search "\")" path) str 7))
      )
    )
    (if (and path (setq path (vl-string-translate "/" "\\" (vl-filename-directory path)))
             (setq str (strcat path (if (wcmatch path "*\\") "" "\\") "ltools.vlx"))
             (findfile str)
      )
      (load_ltools)
      (progn
      (while (and (setq str (getfiled "请选择安装目录下的“ltools.vlx”文件" "ltools" "vlx" 0)) (not (wcmatch (strcase str) "*LTOOLS.VLX"))))
      (if str
          (progn
            (setq path (substr str 1 (- (strlen str) 12)))
            (if (not (wcmatch path "*\\*")) (setq path (strcat path "\\")))
            (load_ltools)
          )
          (prompt "\n安装失败,你已取消了L工具箱的安装!")
      )
      )
    )
)
)
(setq path nil str nil load_ltools nil)
(princ)

qiuhai1991 发表于 2016-2-29 17:25:17

ludaweb 发表于 2016-2-29 12:38 static/image/common/back.gif
下面是我的工具箱的安装程序,看看能用上吗




你采用的是修改安装目录下的acaddoc.lsp文件

ludaweb 发表于 2016-2-29 18:41:30

qiuhai1991 发表于 2016-2-29 17:25 static/image/common/back.gif
你采用的是修改安装目录下的acaddoc.lsp文件

对的,如果是原生态的CAD,是没有acaddoc.lsp文件的,这个安装文件把你的程序目录添加到CAD的支持目录里面,然后在你程序目录里面生成一个acaddoc.lsp文件并添加程序加载内容保存。
如果安装过其他的CAD软件,比方说天正,天正目录里面会有acaddoc.lsp,这个安装文件则把你的程序目录添加到CAD的支持目录里面,然后在当前的acaddoc.lsp文件内添加你的程序加载内容并保存。


这个是一个比较绿色的软件安装方法,我这里还有卸载程序的部分,也就是删除acaddoc.lsp文件内添加的内容,取消cad支持目录。

j15tty 发表于 2016-2-29 21:05:54

其实使用网上安装打包程序可以制成exe 安装文件,通过在里面编写脚步,可以自动加载和安装目录自定义及CAD搜索路径定义

陈进佳 发表于 2016-3-2 22:37:30

j15tty 发表于 2016-2-29 21:05 static/image/common/back.gif
其实使用网上安装打包程序可以制成exe 安装文件,通过在里面编写脚步,可以自动加载和安装目录自定义及CAD搜 ...

这个打包成exe程序怎么弄啊

jltx123456 发表于 2016-3-2 23:17:05

陈进佳 发表于 2016-3-2 22:37 static/image/common/back.gif
这个打包成exe程序怎么弄啊

置顶贴子
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=35156&fromuid=361828

陈进佳 发表于 2016-3-3 15:37:28

jltx123456 发表于 2016-3-2 23:17 static/image/common/back.gif
置顶贴子
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=35156&fromuid=361828

网盘崩溃..........
页: [1] 2
查看完整版本: 自动启动的方法有哪些?