明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1506|回复: 2

[讨论] Autocad 自动切换输入法 源码修改

[复制链接]
发表于 2019-7-18 22:22 | 显示全部楼层 |阅读模式
本帖最后由 happy336 于 2019-7-18 22:22 编辑

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

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


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


源码如下

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

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

  28. (defun Test2(a b)
  29.         (if (or (= (car b) "DDEDIT") (= (car b) "MTEDIT") (= (car b) "TEXT") (= (car b) "MTEXT"))               
  30.                         (progn (vlax-invoke shell "SendKeys" "+^0")
  31.                                  )
  32. )
  33. ;(vlax-invoke shell "SendKeys" "+^0")
  34.         (princ)
  35.    
  36.         )
  37. ;;cad命令完成反应器
  38. (if (not command_reactor1)(setq command_reactor1
  39.         (vlr-command-reactor NIL '((:vlr-commandEnded . Test3)))
  40. ))
  41. (defun test3(a b)
  42.         (if (not (= (car b) "QSAVE"))
  43.                 (progn (vlax-invoke shell "SendKeys" "+^0");ctrl+shift+1为中文,ctrl+shift+0为英文
  44.                 )
  45.         )
  46.         ;(vlax-invoke shell "SendKeys" "+^0")
  47.         (princ)
  48. )  

  49.                              



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2019-7-19 11:46 | 显示全部楼层
ㄘ丶转裑ㄧ灬 发表于 2019-7-19 11:22
http://bbs.mjtd.com/thread-176996-1-1.html

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

  1. ;封小风20160923,20180129加入鼠标双击反应器20180331增加了快速添加命令
  2. ;cad输入法自动切换程序
  3. (vl-load-reactors)
  4. (vl-load-com)
  5. ;加密注册程序
  6. (setq shell (vlax-create-object "WScript.Shell"))
  7. (vlax-invoke shell "SendKeys" "+^0")
  8. (if (not mouse_reactor) (setq mouse_reactor (vlr-mouse-reactor nil '((:vlr-beginDoubleClick . test11)))))
  9. (defun test11(a b)
  10.         (vlax-invoke shell "SendKeys" "+^1")
  11. )
  12. ;;;设计的输入切换命令
  13. ;;;x参数命令集合
  14. (defun mlh(c)
  15.         (setq mljh '("FIND" "MTEDIT" "DDEDIT" "TEXT" "TEXTEDIT" "MTEXT" "_saveas"))
  16.         (setq mljh1 (mapcar '(lambda (x) (= (car c) x)) mljh))
  17.         (apply 'or mljh1)
  18.         )
  19. ;cad命令输入反应器
  20. (if (not command_reactor)(setq command_reactor
  21.         (vlr-command-reactor NIL '((:vlr-commandWillStart . Test_12)))
  22. ))
  23. (defun test_12(a b)
  24.         (if (mlh b)       
  25.                         (progn (vlax-invoke shell "SendKeys" "+^1")
  26.                                 )
  27.         (princ)   
  28.         ))
  29. ;;取消CAD命令反应器
  30. (if (not command_reactor3)(setq command_reactor3
  31.         (vlr-command-reactor nil '((:vlr-commandCancelled . Test2)))
  32. ))

  33. (defun Test2(a b)
  34.         (if (mlh b)                       
  35.                         (progn (vlax-invoke shell "SendKeys" "+^0")
  36.                                  )
  37.         (princ)
  38.    
  39.         ))
  40. ;;;无法完成CAD命令反应器
  41. (if (not command_reactor2)(setq command_reactor2
  42.         (vlr-command-reactor nil '((:vlr-commandFailed . Test5)))
  43. ))

  44. (defun Test5(a b)
  45.         (if (mlh b)               
  46.                         (progn (vlax-invoke shell "SendKeys" "+^0")
  47.                                  )
  48.         (princ)
  49.    
  50.         ))
  51. ;;;cad命令完成反应器
  52. (if (not command_reactor1)(setq command_reactor1
  53.         (vlr-command-reactor NIL '((:vlr-commandEnded . Test3)))
  54. ))
  55. (defun test3(a b)
  56.         (if (not (= (car b) "QSAVE"))
  57.                 (progn (vlax-invoke shell "SendKeys" "+^0");ctrl+shift+1为中文,ctrl+shift+0为英文
  58.                 )
  59.         )
  60.         ;(vlax-invoke shell "SendKeys" "+^0")
  61.         (princ)
  62. )  


  63.                              
  64. (defun c:bangzhu()
  65.         (alert "输入法设置ctrl+shift+1为中文,ctrl+shift+0为英文")
  66. )
回复 支持 1 反对 0

使用道具 举报

发表于 2019-7-19 11:22 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-26 20:38 , Processed in 0.275005 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表