mandala 发表于 2011-9-8 09:32:41

这样是否可以得到当前使用的vlx或lsp文件所在路径?

本帖最后由 mandala 于 2011-9-8 16:06 编辑

拼凑的这个lsp貌似可以获得当前运行的vlx或lsp所在的路径,请各位大侠看看是否靠得住?

注:主贴的程序很烂,看8楼的就可以。




;;返回:一个字符串。
(defun vlxpath()
(last(StrParse (GetLspPath) ";")))
;;子程序GetLspPath,寻找当前使用的vlx文件路径:
;;如果需要lsp文件的路径,将子程序中两个vlx改成lsp。
(defun GetLspPath()
(setq lsppath
   (vl-registry-read
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU\\vlx"
(substr
   (vl-registry-read
   "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU\\vlx"
   "MRUList"
   )
   1
   1
)
   )
)
(setenv "ACAD" (strcat (getenv "ACAD") ";" (vl-filename-directory lsppath)))
)
;;子程序strparse,将由某字符分隔的字串组成表
;;参数:
;;Str:字符串
;;Delimiter:分隔符号
;;;用法 (StrParse "0001   566786.336   3378751.937    5.014" " ")
;;; 返回:("0001" "566786.336" "3378751.937" "5.014")
(defun strparse
       (str delimiter / searchstr stringlen return n char nn)
(setq searchstr str)
(setq stringlen (strlen searchstr)
nn   stringlen) ;_ 结束setq
(setq return '())
(while (> stringlen 0)
    (setq n 1)
    (setq char (substr searchstr 1 1))
    (while (and (/= char delimiter) (<= n nn))
      (setq n (1+ n))
      (setq char (substr searchstr n 1))) ;_ end of while
    (setq return (cons (substr searchstr 1 (1- n)) return))
    (setq searchstr (substr searchstr (1+ n) stringlen))
    (setq stringlen (strlen searchstr))) ;_ end of while
(if (= " " delimiter)
    (setq return (vl-remove "" return))) ;_ 结束if
(reverse return)) ;_ 结束defun

xianaihua 发表于 2011-9-8 11:57:33

试了一下,还行,得到的全路径文件名称,稍作处理就很好。

自贡黄明儒 发表于 2011-9-8 13:39:53

xianaihua 发表于 2011-9-8 11:57 static/image/common/back.gif
试了一下,还行,得到的全路径文件名称,稍作处理就很好。

请教“稍作处理就很好”是什么意思?

bright1 发表于 2011-9-8 13:49:16

不能解决不是通过对话框加载的程序。

xshrimp 发表于 2011-9-8 14:32:45

windows7 下不行.拖入文件到图面应该也不行.

mandala 发表于 2011-9-8 15:33:21

xianaihua 发表于 2011-9-8 11:57 static/image/common/back.gif
试了一下,还行,得到的全路径文件名称,稍作处理就很好。

也请教一下,啥叫“稍作处理就很好啊”?

mandala 发表于 2011-9-8 15:35:36

xshrimp 发表于 2011-9-8 14:32 static/image/common/back.gif
windows7 下不行.拖入文件到图面应该也不行.

嗯,拖入文件到cad不行。不知道为什么。windows7下不行大概是因为windows7的注册表不同吧。

mandala 发表于 2011-9-8 16:02:32

本帖最后由 mandala 于 2011-9-8 16:05 编辑

靠,只记得拼凑了,根本没来得及看lsp的内容。
其实根本不必这么麻烦,只要这样就可以了:


;;子程序GetLspPath,寻找当前使用的vlx文件路径:
;;如果需要lsp文件的路径,将子程序中两个vlx改成lsp。
(defun GetLspPath()
(setq lsppath
   (vl-registry-read
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU\\vlx"
(substr
   (vl-registry-read
   "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU\\vlx"
   "MRUList"
   )
   1
   1
)
   )
)
(vl-filename-directory lsppath)
)

mandala 发表于 2011-9-8 23:06:07

申明一下,这个程序是zzxxqq版主写滴,我只是打打酱油。

自贡黄明儒 发表于 2011-9-9 09:53:46

mandala 发表于 2011-9-8 16:02 static/image/common/back.gif
靠,只记得拼凑了,根本没来得及看lsp的内容。
其实根本不必这么麻烦,只要这样就可以了:

我查看了我的注册表,这个方法不对。
我也试过了。
页: [1] 2
查看完整版本: 这样是否可以得到当前使用的vlx或lsp文件所在路径?