曰微言薄论 发表于 2018-12-6 09:21:22

获取LSIP、FAS、VLX程序自身加载路劲

本帖最后由 曰微言薄论 于 2018-12-11 08:57 编辑

      距离上次发布CAD批量打印软件SmartBatchPlot的帖子之后,很久没有发表过帖子了,即使SmartBatchPlot更新到6.2.3版本了,我也没有在明经论坛上发布了,有两个原因,一是明经似乎太容易被黑了,经常无法访问,第二就是太多的人只喜欢源码。

      关于获取LSIP、FAS、VLX程序自身加载路劲,之前有很多人都问过这个问题,说明大家很关注,我自己通过查阅相关资料,发现没有一步到位的方法,最后找到一个还算比较靠谱的方法,今天就把源码发出来,让大家参考一下。

   原理比较简单,我们加载程序有两种方式,一是拖入加载,而是AP加载。对于拖入加载,可以通过 (getvar "lastprompt")获取;AP加载可以通过查询注册表获取,查询注册表需要考虑CAD版本问题。下面就贴出源码吧。;;; 字符分割函数,delm为分割符号
(defun parse (str delim / LST POS sl)
(setq sl (+ (strlen delim) 1))
(while (setq pos (vl-string-search delim str))
    (setq lst (cons (substr str 1 pos) lst)
    str (substr str (+ pos sl))
    )
)
(if (> (strlen str) 0)
    (setq lst (cons str lst))
)
(reverse lst)
)

(princ "\n即将获取加载目录……")
(setq lsp_path nil)
(if (wcmatch (setq lsp_path (getvar "lastprompt")) "*(LOAD \"*\")")
(progn
    (setq lsp_path (cadr (parse lsp_path "\"")))
    (while (vl-string-search "/" lsp_path)
      (setq lsp_path (vl-string-subst "\\" "/" lsp_path))
      )
    (alert (strcat "\n拖入方式加载目录:" lsp_path))
    )
(progn
    (setq lsp_path (vl-registry-read (strcat "HKEY_CURRENT_USER\\" (vlax-product-key) "\\Profiles\\" (getvar "CPROFILE") "\\Dialogs\\Appload") "MainDialog"))
    (alert (strcat "\nAPPLOAD方式加载目录:" lsp_path))
    )
)
(princ "请大家多多支持我的CAD批量打印软件SmartBatchPlot")
(princ)
      最后还是希望大家多多支持我的CAD批量打印软件SmartBatchPlot,该软件适用于不同图框不同比例的打图情况,能极大提高出图效率。
      
      前面的源码缺少字符串分割函数parse,现在补齐了。(20181211)

附件下载地址:




念悬工具箱 发表于 2019-12-23 12:56:13

(defun c:nx_jzcx ( / str1 nn str html adver    )

(if (not (menugroup "念悬工具箱"))            
    (progn
(princ "\n程序正在加载中……");乱世江湖,只需一句不需愁

;acad也可以用lastprompt的方法的,这里只是展示_.copyhist的用法,但是浩辰无法用lastprompt
                   (setq
                     str1 (getvar "lastprompt")         ;获得最后一行命令
                     nn (vl-string-search "(LOAD \"" str1);在字符串中搜索指定子串
                   )
                   (if nn
(progn ;是执行
            ;字符串处理,得到完整路径:

                  (command "_.copyhist")
                     (setq html (vlax-create-object "htmlfile"))
                     (setq str (vlax-invoke-method (vlax-get (vlax-get html 'parentwindow) 'clipboarddata) 'getdata "text")
                           str (strcase (if (= (type str) 'variant) (vlax-variant-value str) str))
                     )

                  (setq str (vl-string-right-trim " " str))
                  (while (vl-string-search "\r\n" str)
                           (setq str (vl-string-subst "" "\r\n" str))
                  )

                  (while (setq nn (vl-string-search "(LOAD \"" str))
                           (setq str (substr str (+ nn 8)))
                  )

                  (and (setq nn (vl-string-search "\")" str))
                         (setq str (substr str 1 (1+ nn))) ;file name
                  )

                  (setq str (vl-filename-directory (vl-string-translate "/" "\\" str)))
                  (setq str ( strcat str "\\"))
                  (setq *nxljpa* str)
                  (and html (vlax-release-object html))
                );progn

(progn
    (setq str (vl-registry-read (strcat "HKEY_CURRENT_USER\\" (vlax-product-key) "\\Profiles\\" (getvar "CPROFILE") "\\Dialogs\\Appload") "MainDialog"))
                  (setq *nxljpa* str)
    )

                   );if

;;********
(setq adver (atof (getvar "acadver")))
(if(>= adver 19.1)
    (progn
(nx:tj_trustedpaths)
(nx:add_sfsp)
(nx:createnxgjx)
   )
    (progn
(nx:add_sfsp)
(nx:createnxgjx)
   )
)
;;********


)
)
(princ)
);end

曰微言薄论 发表于 2018-12-6 09:53:28

小菜123 发表于 2018-12-6 09:40
(getvar "lastprompt")永远返回:"Command: (getvar \"lastprompt\")"
CAD2005

cad2005确实没有试过,可能不支持这个变量。另外"lastprompt"含义是获取命令行最后显示内容,所以要合理控制PRINC函数的使用。

小菜123 发表于 2018-12-6 09:40:00

(getvar "lastprompt")永远返回:"Command: (getvar \"lastprompt\")"
CAD2005

BaoWSE 发表于 2018-12-7 12:32:28

谢谢楼主分享宝贵经验!

flowerson 发表于 2018-12-7 15:35:32

楼主,好像确实了PARSE 函数。

Bao_lai 发表于 2018-12-7 22:27:09

appload方式提示正常,拖入方式不正确。
cad2014x64

耳东志新 发表于 2018-12-8 07:14:29

谢谢楼主分享宝贵经验!

szygyue 发表于 2018-12-10 21:10:00

呵呵,论坛还是都喜欢免费的。

pengfei2010 发表于 2018-12-11 08:27:00

谢谢楼主分享,学习了

taoyi0727 发表于 2018-12-15 21:05:22

子函数补上2014 64 没毛病
页: [1] 2 3
查看完整版本: 获取LSIP、FAS、VLX程序自身加载路劲