获得使用者 路径
本帖最后由 啵浪鼓 于 2011-5-8 02:26 编辑(getenv "Windir") ;只能获得windows所在位置
1,下面的盘符和Administrator的用户是不确定的,有些可能在D/E/F盘,使用者也是不确定的,如何获得?
C:\Documents and Settings\Administrator
2,如何获得用户加载的指定lsp的文件路径
如:假设用户加载了1.lsp,如何返回已经加载了此文件,并获得该文件的路径(全盘搜索太慢,此方法不行)
本帖最后由 highflybird 于 2011-5-8 06:35 编辑
第一个问题
(vla-eval (vlax-get-acad-object)"ThisDrawing.setVariable \"USERS5\",Environ(\"userprofile\")")
(getvar "users5")
第二个问题你在本版块搜索,以前有人提过。 本帖最后由 caoyin 于 2011-5-8 11:02 编辑
highflybird 发表于 2011-5-8 06:34 http://bbs.mjtd.com/static/image/common/back.gif
第一个问题
第二个问题你在本版块搜索,以前有人提过。
问题1. highflybird 版主的代码在ACAD2010或以上版本存在VBA是否安装的局限,
获取当前用户路径则直接访问(getenv "userprofile")
在CAD我一般是访问roamablerootprefixlocalrootprefix 两个系统变量
问题2.好像fhxm的方法是在LSP文件中放置读取LASTPROMPT变量的代码,但对于太深的路径貌似无效,我的补救方法是通过执行 COPYHIST 命令,然后再读取剪切板
谢谢楼上2位版主的指教!
问题1: highflybird 版主的如初次加载VBA工程执行有点慢,(getenv "userprofile")这个函数好用!
问题2:具体怎样操作LASTPROMPT,放入lsp中得不到路径呀
命令: (getvar "LASTPROMPT")
"命令: (getvar \"LASTPROMPT\")"
命令: (getenv "LASTPROMPT")
nil
命令: (command "LASTPROMPT")
LASTPROMPT = "命令: (command "LASTPROMPT")" (只读)nil (findfile "acad.pgp") z版的不行呀,只能获得pgp文件位置
1.lsp有可能不在搜索路径下,通过appload的启动组来执行的 本帖最后由 highflybird 于 2011-5-8 21:24 编辑
关于第二个问题:
首先读取注册表的这个项目:得到最近的文件项目:
(vl-registry-read "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU\\lsp" "MRUList")
譬如返回: "dcba"
然后读取 (vl-registry-read "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU\\lsp" "a");或者"b" ,"c" ,"d"之类
这个方式适用于用appload方式加载的。
对于从LISPIDE中加载的,又是另外一种方式。而且对于那些拖到绘图区加载方式的,那更难判断因为用(getvar "lastprompt")也不是万能的。暂未到合适的方法。
要申明的是:LISP是加载到内存中执行的,所以有时候,你就无法判断究竟是从哪个地方加载的。譬如对某个lisp文件或者函数修改了之后,然后再动态加载,就无法找到路径。
所以要找到一个万能的,还不是一件简单的事情。如果你要交给客户使用的话,你就得考虑何种方式妥当。
加反应器呢? 注册表的读取是个好办法,我现在用的土办法,采用member和vl-directory来推,写的段子长点,但是结果是对的,呵呵!
(if (member "chs" (vl-directory-files path1)) (setq path2 "chs\\"))
(if (member "cht" (vl-directory-files path1)) (setq path2 "cht\\"))
(if (member "enu" (vl-directory-files path1)) (setq path2 "enu\\"))
页:
[1]