Ahankhah 发表于 2022-7-6 08:45:05

不可能的任务?通缉Com

大家好,
 
谁知道如何通过反应堆取消命令
 
这是我捕捉启动命令事件的代码。我想阻止AutoCAD继续执行某些命令,但没有成功:
 
(VLR-Command-Reactor
nil
(list
(cons
:VLR-commandWillStart
'Reactor:commandWillStart
)
)
)
(defun Reactor:commandWillStart (-calling-reactor- -info- / *cmdname*)
(setq *cmdname* (read (car -info-)))   
(cond
((member *cmdname* '(STYLE DIMSTYLE DDIM ))
(command); it doesn't work
)
(T (mapcar 'princ (list *cmdname* " will start.")))
)   
)
 
如有任何建议,我们将不胜感激

Lee Mac 发表于 2022-7-6 08:53:37

(if (null *command-reactor*)
   (setq *command-reactor*
       (vlr-command-reactor nil '((:vlr-commandwillstart . commandreactorcallback)))
   )
)

(defun commandreactorcallback ( reactor params / cmd wsh )
   (cond
       (   (member (setq cmd (strcase (car params))) '("STYLE" "DIMSTYLE" "DDIM"))
         (if (setq wsh (vlax-create-object "WScript.Shell"))
               (progn
                   (vl-catch-all-apply 'vlax-invoke (list wsh 'sendkeys "{ESC}"))
                   (vlax-release-object wsh)
               )
         )
       )
       (   (princ cmd)
         (princ " will start.")
       )
   )
   (princ)
)

pBe 发表于 2022-7-6 08:55:45

“你的使命李,如果你决定接受它”。。。。。。。看阿汗哈的帖子
 
“一如既往,如果您或您的任何代码出现故障或崩溃,论坛将否认您的任何行为”
 
---不可能完成的任务----
 

Lee Mac 发表于 2022-7-6 09:02:52

........

Ahankhah 发表于 2022-7-6 09:04:42

 
李,我总是对你的知识感到惊讶。
 
阿洛特

Ahankhah 发表于 2022-7-6 09:12:40

 
其中一个不可能完成的任务就是在CADTutor论坛上发帖子。

Lee Mac 发表于 2022-7-6 09:16:43

 
谢谢阿汉哈
 
您可能需要考虑将WSH对象绑定到全局变量,然后在会话结束时通过另一个reactor释放它,而不是每次调用这些命令时都创建对象。

Ahankhah 发表于 2022-7-6 09:20:52

李,好老师总是把班级水平带得越来越高。
 
所以我最好的老师,请继续。。。

Ahankhah 发表于 2022-7-6 09:25:57

李,请你再解释一下全局变量及其与反应堆的关系好吗?

Lee Mac 发表于 2022-7-6 09:29:28

 
我想你可以从我的提示和指点中找到答案。。。
 
无论如何,这里有一个例子:
 
(if (null *command-reactor*)
   (setq *command-reactor*
       (vlr-command-reactor nil '((:vlr-commandwillstart . commandreactorcallback)))
   )
)

(if (null *editor-reactor*)
   (setq *editor-reactor*
       (vlr-editor-reactor nil '((:vlr-beginclose . editorreactorcallback)))
   )
)

(defun commandreactorcallback ( reactor params )
   (if (member (strcase (car params)) '("STYLE" "DIMSTYLE" "DDIM"))
       (if (setq *wsh* (cond (*wsh*) ((vlax-create-object "WScript.Shell"))))
         (vl-catch-all-apply 'vlax-invoke (list *wsh* 'sendkeys "{ESC}"))
       )
   )
   (princ)
)

(defun editorreactorcallback ( reactor params )
   (if (and *wsh* (eq 'VLA-OBJECT (type *wsh*)) (not (vlax-object-released-p *wsh*)))
       (vl-catch-all-apply 'vlax-release-object (list *wsh*))
   )
   (if (and *command-reactor* (eq 'VLA-OBJECT (type *command-reactor*)))
       (vlr-remove *command-reactor*)
   )
   (vlr-remove reactor)
   (princ)
)
页: [1] 2
查看完整版本: 不可能的任务?通缉Com