broncos15 发表于 2022-7-5 18:26:52

以只读方式打开

我有一个关于创建只读代码的快速问题。我知道如何创建代码来打开只读文档,但是我在修改它以使lisp例程打开当前文档文件夹中的windows资源管理器时遇到了问题。只读代码:
(defun c:openReadOnly (/ sel1)
(if (setq sel1 (getfiled "Open Drawing" "" "dwg" ) ;
   (command "vbastmt"
            (strcat
            "AcadApplication.Documents.Open"
            (chr 34)sel1(chr 34)", true"
            )
            )
   )
(princ)
)
 
 
编辑现有代码,但我有问题。
(defun c:openReadOnly (/ sel1)
(if (setq sel1 (getfiled "Open Drawing" "" "dwg" ) ;
   (startapp "explorer /e,/select," (strcat (getvar "dwgprefix")(getvar "dwgname")
            (chr 34)sel1(chr 34)", true"
            )
            )
   )
(princ)
)
 
 
我知道这个问题与我的startapp函数有关,但我对需要更改什么感到困惑。

broncos15 发表于 2022-7-5 18:31:51

我第一次尝试时犯了一个愚蠢的错误。然而,这仍然存在问题。
(defun c:openReadOnly (/ sel1)
(if (setq sel1 (startapp "explorer /e,/select," (strcat (getvar "dwgprefix")(getvar "dwgname")))
   (command "vbastmt"
            (strcat
            "AcadApplication.Documents.Open"
            (chr 34)sel1(chr 34)", true"
            )
            )
   )
(princ)
)

BIGAL 发表于 2022-7-5 18:36:22

缺少括号(setq sel1(startapp“explorer/e,/select,”(strcat(getvar“dwgprefix”)(getvar“dwgname”)))

hmsilva 发表于 2022-7-5 18:38:52

您需要使用VBA吗?
为什么不只是这样

(vl-load-com)
(defun c:demo (/ dwg)
   (if (setq dwg (getfiled "Open Drawing" (getvar 'dwgprefix) "dwg" 0))
       (vla-activate
         (vla-open (vla-get-documents (vlax-get-acad-object)) (strcat "\"" dwg "\"") :vlax-true)
       )
   )
   (princ)
)
 
亨里克

broncos15 发表于 2022-7-5 18:41:23

BigAl,哇,那是个愚蠢的错误,谢谢你指出!我现在正在运行它,它会在当前图形的文件夹中打开windows资源管理器。但是,当我单击要打开的图形时,会收到以下消息提示:“OPENREADONLY初始化VBA系统…”;错误:错误的参数类型:stringp 33
表达式:“

broncos15 发表于 2022-7-5 18:45:15

 
 
Henrique,我之所以使用VBA,是因为我知道如何在VBA中使用VBA,但我对Visual Lisp不太在行。当我上传你的代码时,我得到了一个错误:“错误:输入列表格式错误”。我想在Visual Lisp方面做得更好,所以如果您不介意的话,我对您的代码也有一些问题:
1) 为什么(vl load com)在命令定义之前?
2) 下面的部分具体做什么?
(strcat "\"" dwg "\"") :vlax-true)

ROBP 发表于 2022-7-5 18:47:07

只读文件可能以某种方式受到保护?
 
从电子邮件打开时经常看到
人们总是可以将其保存在桌面或文件夹中,然后他们从那里打开它,然后你就可以编辑了。。Threfore我没有看到它使用lisp或vba
 
随时通知我,告诉我如何在不使用密码删除保护的情况下实现此类文件保护。
 
 
最好的
 
R

broncos15 发表于 2022-7-5 18:50:12

我在以前的一个线程中找到了一个可以运行的代码,但是它没有使用windows资源管理器。有没有办法修改它,使它能够利用它?
(defun C:OPR (/ fname sd)
(or (vl-load-com))
(setq sd (getvar "sdi"))
(setvar "sdi" 0)
(setq fname (getfiled "Select drawing to open read-only"
                     (getvar "dwgprefix")
                     "dwg"
                     4)
   )
(if (vl-catch-all-error-p
            (vl-catch-all-apply
                (function (lambda()
                               (vla-activate
                                 (vla-open
                                  (vla-get-documents
                                    (vlax-get-acad-object))
                                  fname
                                  :vlax-true)
                              )
                              )
                        )
                )
            )
   (alert "Unable to open in read-only mode")
   )
   (setvar "sdi" sd)
   (princ)
   )

hmsilva 发表于 2022-7-5 18:53:33

嗨broncos15,
我发布的代码应该加载无误,确保你复制了所有代码。
(strcat "\"" dwg "\"")
是为了防止文件路径中出现空格错误,将返回如下内容
“c:/full/path/filename.dwg”
:vlax true,来自vla open函数,
:vlax true=>只读
:vlax false=>全开
 
亨里克

broncos15 发表于 2022-7-5 18:58:04

 
亨里克,谢谢你的信息,这真的很有用。我复制了你的所有代码,但不幸的是,我仍然收到了错误。
页: [1] 2
查看完整版本: 以只读方式打开