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)
)
ㄘ丶转裑ㄧ灬 发表于 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为英文")
)
http://bbs.mjtd.com/thread-176996-1-1.html
页:
[1]