happy336 发表于 2019-7-18 22:22:27

Autocad 自动切换输入法 源码修改

本帖最后由 happy336 于 2019-7-18 22:22 编辑

autocad文字和命令经常需要来回切换,在网上找到一段源码,目前不完美,先寻求帮助
设置前提:

1.ctrl+shift+0 英文
2.ctrl+shift+1 中文(搜狗输入法需要在搜狗自己程序设置菜单)


目前问题
1.目前自动切换只有mtext和mtedit能够完全识别(命令输入开始切中文,命令结束后切英文),ddedit无法完全识别(命令开始切中文,命令结束后无法切换英文)
2.其他问题待续。


源码如下

;;;自定义弹出式对话框
;;(AlertDiy 显示内容 标题内容)
(defun AlertDiy (str titlestr / shell a)
(setq shell (vlax-create-object "WScript.Shell"))
(setq a (vlax-invoke-method shell "Popup" str 0 titlestr 1));;确定取消按钮a=2,取消,a=1确定
)
;cad输入法自动切换程序
(vl-load-reactors)
(vl-load-com)
;加密注册程序
(setq shell (vlax-create-object "WScript.Shell"))
(vlax-invoke shell "SendKeys" "+^0")
;cad命令输入反应器
(if (not command_reactor)(setq command_reactor
      (vlr-command-reactor NIL '((:vlr-commandWillStart . Test1)))
))

(defun test1(a b)
      (if (or (= (car b) "DDEDIT") (= (car b) "MTEDIT") (= (car b) "TEXT") (= (car b) "MTEXT"))               
                        (progn (vlax-invoke shell "SendKeys" "+^1")
                              )
      (princ)
   
      ))
;;取消CAD命令反应器
(if (not command_reactor)(setq command_reactor
      (vlr-command-reactor nil '((:vlr-commandCancelled . Test2)))
))

(defun Test2(a b)
      (if (or (= (car b) "DDEDIT") (= (car b) "MTEDIT") (= (car b) "TEXT") (= (car b) "MTEXT"))               
                        (progn (vlax-invoke shell "SendKeys" "+^0")
                                 )
)
;(vlax-invoke shell "SendKeys" "+^0")
      (princ)
   
      )
;;cad命令完成反应器
(if (not command_reactor1)(setq command_reactor1
      (vlr-command-reactor NIL '((:vlr-commandEnded . Test3)))
))
(defun test3(a b)
      (if (not (= (car b) "QSAVE"))
                (progn (vlax-invoke shell "SendKeys" "+^0");ctrl+shift+1为中文,ctrl+shift+0为英文
                )
      )
      ;(vlax-invoke shell "SendKeys" "+^0")
      (princ)
)

                           



happy336 发表于 2019-7-19 11:46:21

ㄘ丶转裑ㄧ灬 发表于 2019-7-19 11:22
http://bbs.mjtd.com/thread-176996-1-1.html

谢谢了,最新的源码查询到了
原版参见:http://bbs.mjtd.com/thread-176934-1-1.html

;封小风20160923,20180129加入鼠标双击反应器20180331增加了快速添加命令
;cad输入法自动切换程序
(vl-load-reactors)
(vl-load-com)
;加密注册程序
(setq shell (vlax-create-object "WScript.Shell"))
(vlax-invoke shell "SendKeys" "+^0")
(if (not mouse_reactor) (setq mouse_reactor (vlr-mouse-reactor nil '((:vlr-beginDoubleClick . test11)))))
(defun test11(a b)
        (vlax-invoke shell "SendKeys" "+^1")
)
;;;设计的输入切换命令
;;;x参数命令集合
(defun mlh(c)
        (setq mljh '("FIND" "MTEDIT" "DDEDIT" "TEXT" "TEXTEDIT" "MTEXT" "_saveas"))
        (setq mljh1 (mapcar '(lambda (x) (= (car c) x)) mljh))
        (apply 'or mljh1)
        )
;cad命令输入反应器
(if (not command_reactor)(setq command_reactor
        (vlr-command-reactor NIL '((:vlr-commandWillStart . Test_12)))
))
(defun test_12(a b)
        (if (mlh b)       
                        (progn (vlax-invoke shell "SendKeys" "+^1")
                                )
        (princ)   
        ))
;;取消CAD命令反应器
(if (not command_reactor3)(setq command_reactor3
        (vlr-command-reactor nil '((:vlr-commandCancelled . Test2)))
))

(defun Test2(a b)
        (if (mlh b)                       
                        (progn (vlax-invoke shell "SendKeys" "+^0")
                               )
        (princ)
   
        ))
;;;无法完成CAD命令反应器
(if (not command_reactor2)(setq command_reactor2
        (vlr-command-reactor nil '((:vlr-commandFailed . Test5)))
))

(defun Test5(a b)
        (if (mlh b)               
                        (progn (vlax-invoke shell "SendKeys" "+^0")
                               )
        (princ)
   
        ))
;;;cad命令完成反应器
(if (not command_reactor1)(setq command_reactor1
        (vlr-command-reactor NIL '((:vlr-commandEnded . Test3)))
))
(defun test3(a b)
        (if (not (= (car b) "QSAVE"))
                (progn (vlax-invoke shell "SendKeys" "+^0");ctrl+shift+1为中文,ctrl+shift+0为英文
                )
        )
        ;(vlax-invoke shell "SendKeys" "+^0")
        (princ)
)


                           
(defun c:bangzhu()
        (alert "输入法设置ctrl+shift+1为中文,ctrl+shift+0为英文")
)

ㄘ丶转裑ㄧ灬 发表于 2019-7-19 11:22:56

http://bbs.mjtd.com/thread-176996-1-1.html
页: [1]
查看完整版本: Autocad 自动切换输入法 源码修改