Brenda Tanner 发表于 2022-7-7 00:04:52

“打开文件的宏”对话框

我创建了一个新的菜单项,允许用户打开“打开文件”对话框窗口。但我需要请求它在每次运行时打开到特定的默认位置,而不是上次打开的文件夹。
 
现在,这个新命令的宏是^C^C\u open。
 
是否有一种方法允许我们指定要打开的文件夹位置?

Brenda Tanner 发表于 2022-7-7 00:09:11

在这个问题上,另一位同事为我指明了正确的方向。她建议
 
她是对的。效果很好。尽管如此,我还是希望在autocad中获得真正的“打开”窗口,而不仅仅是普通的浏览器窗口。

ReMark 发表于 2022-7-7 00:13:07

感谢您与我们分享该解决方案Brenda。现在,如果每个来这里的人都能像你一样高效(问和回答你自己的问题),我们都可以休息一天,去海滩喝一杯冰镇啤酒。英雄联盟

MSasu 发表于 2022-7-7 00:15:54

那么,您希望访问映射为T的网络驱动器:?这相当于:
^C^C^C(startapp "explorer.exe” “T:\\") ^P
 
您的第一篇帖子给我的印象是,您希望打开命令的图形选择对话框指向预定义的路径,而不是默认的当前文件夹。

Brenda Tanner 发表于 2022-7-7 00:19:51

再次感谢大家。我希望OPEN命令指向预定义的路径。该宏使用Windows资源管理器,这是可以的,但它不会在Autocad中显示典型的“文件打开”窗口,而是显示Windows资源管理器的一个实例。如果可行的话。
 
我对这个宏仍然有一些问题,例如今天早上,我可以在命令行中键入:
 
它会在T:驱动器的这个文件夹位置打开Windows资源管理器。但是我为这个特定的菜单命令在CUI中复制并粘贴了相同的内容,什么都没有发生。
 
然而,这个宏可以从菜单项或命令行正常工作。
 
^C^C^P(startapp "explorer.exe "T:")

Brenda Tanner 发表于 2022-7-7 00:21:35

MSasu,
 
再次感谢您的回复,但我尝试了您提供的语法,它所做的只是将该语法的内容转储到命令行上。这件事的难点在于我可以在命令行上完成:
 
(startapp "explorer.exe" "T:\\Checker"),工作正常。但是,CUI中用于此菜单项的宏如下所示:
 
^C^C^P(startapp "explorer.exe" "T:\\Checker")不产生任何结果。。。根本没有消息或错误指示,而且大多数情况下没有打开Windows资源管理器以打开T:\Checker文件夹。这一点我真的很困惑。

MSasu 发表于 2022-7-7 00:25:42

为工具栏按钮创建宏时,应注意以空格字符结尾-它的作用类似于运行语句。

Brenda Tanner 发表于 2022-7-7 00:28:53

是的,你是对的。。。我应该说我已经意识到了这一点。我试过用一个空格,一个分号,两个分号。。。等等。只要能让它工作就行。我还可以说,如果我不使用文件夹名,只使用驱动器名“T:”,它在cui菜单宏中运行良好。除了添加文件夹名外,我还可以从命令行执行此操作。从命令行来看,这一切似乎都很好,但当它作为菜单宏的语法插入时,情况就不一样了。我不明白。

MSasu 发表于 2022-7-7 00:30:55

布伦达,如果明天之前没有人愿意测试这个,我会在AutoCAD的菜单中为你做一些测试(现在没有访问权限)。

BlackBox 发表于 2022-7-7 00:36:22

 
有多种方法可以实现这一点,例如使用GetField函数,但只是为了好玩:
 
以下是预定义位置的示例宏:
 
**注意-在宏中使用单正斜杠“/”作为双反斜杠“\\”将导致暂停用户输入。
 

^C^C^P(_OpenHere "T:/Checker");._open;^P
。。。以及支持的“_OpenHere”LISP子函数:
 
此子函数接受单个参数,将文件路径作为字符串,并在更新定义打开对话框起点的名称恰当的“InitialDirectory”注册表项之前验证文件路径是否为有效位置。该代码还解释了产品密钥的2013年之前和之后的LISP函数。
 

(vl-load-com)

(defun _OpenHere (filePath / key)

(if vlax-user-product-key                                             ; If using 2013
   (setq key (vlax-user-product-key))                                  ; Then, use new lisp function
   (setq key (vlax-product-key))                                       ; Else, use legacy function
)
;; More info here:
;; http://www.cadtutor.net/forum/showthread.php?70845-AutoLISP-API-Changes-for-AutoCAD-2013-Updated

(if (setq
       filePath (vl-string-translate
                  "\\"
                  "/"
                  (findfile (vl-string-right-trim
                              "/"
                              (vl-string-right-trim "\\" filePath)
                            )
                  )
                )
   )
   (vl-registry-write
   (strcat
       "HKEY_CURRENT_USER\\"
       key
       "\\Profiles\\"
       (vla-get-activeprofile
         (vla-get-profiles
         (vla-get-preferences (vlax-get-acad-object))
         )
       )
       "\\Dialogs\\OpenSaveAnavDialogs"
   )
   "InitialDirectory"
   filePath
   )
)
(princ)
)
HTH
页: [1] 2
查看完整版本: “打开文件的宏”对话框