明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3536|回复: 16

[源码] 获取LSIP、FAS、VLX程序自身加载路劲

[复制链接]
发表于 2018-12-6 09:21 | 显示全部楼层 |阅读模式
本帖最后由 曰微言薄论 于 2018-12-11 08:57 编辑

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

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

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

  14. (princ "\n即将获取加载目录……")
  15. (setq lsp_path nil)
  16. (if (wcmatch (setq lsp_path (getvar "lastprompt")) "*(LOAD "*")")
  17.   (progn
  18.     (setq lsp_path (cadr (parse lsp_path """)))
  19.     (while (vl-string-search "/" lsp_path)
  20.       (setq lsp_path (vl-string-subst "\" "/" lsp_path))
  21.       )
  22.     (alert (strcat "\n拖入方式加载目录:" lsp_path))
  23.     )
  24.   (progn
  25.     (setq lsp_path (vl-registry-read (strcat "HKEY_CURRENT_USER\" (vlax-product-key) "\\Profiles\" (getvar "CPROFILE") "\\Dialogs\\Appload") "MainDialog"))
  26.     (alert (strcat "\nAPPLOAD方式加载目录:" lsp_path))
  27.     )
  28.   )
  29. (princ "请大家多多支持我的CAD批量打印软件SmartBatchPlot")
  30. (princ)

      最后还是希望大家多多支持我的CAD批量打印软件SmartBatchPlot,该软件适用于不同图框不同比例的打图情况,能极大提高出图效率。
        
        前面的源码缺少字符串分割函数parse,现在补齐了。(20181211)

附件下载地址:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 2明经币 +2 收起 理由
Bao_lai + 1 很给力!
BaoWSE + 1 赞一个!

查看全部评分

发表于 2019-12-23 12:56 | 显示全部楼层
(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
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-12-6 09:53 | 显示全部楼层
小菜123 发表于 2018-12-6 09:40
(getvar "lastprompt")永远返回:"Command: (getvar \"lastprompt\")"
CAD2005

cad2005确实没有试过,可能不支持这个变量。另外"lastprompt"含义是获取命令行最后显示内容,所以要合理控制PRINC函数的使用。
发表于 2018-12-6 09:40 | 显示全部楼层
(getvar "lastprompt")永远返回:"Command: (getvar \"lastprompt\")"
CAD2005
发表于 2018-12-7 12:32 | 显示全部楼层
谢谢楼主分享宝贵经验!
发表于 2018-12-7 15:35 | 显示全部楼层
楼主,好像确实了PARSE 函数。
发表于 2018-12-7 22:27 | 显示全部楼层
appload方式提示正常,拖入方式不正确。
cad2014x64
发表于 2018-12-8 07:14 | 显示全部楼层
谢谢楼主分享宝贵经验!
发表于 2018-12-10 21:10 | 显示全部楼层
呵呵,论坛还是都喜欢免费的。
发表于 2018-12-11 08:27 | 显示全部楼层
谢谢楼主分享,学习了
发表于 2018-12-15 21:05 | 显示全部楼层
子函数补上  2014 64 没毛病
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-24 22:38 , Processed in 0.361114 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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