明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6358|回复: 71

[源码] 输入法解决方案

    [复制链接]
发表于 2024-7-1 13:54:48 | 显示全部楼层 |阅读模式
本帖最后由 自贡黄明儒 于 2024-7-18 14:45 编辑

;|*********************************************************************************************;
软件作者: 自贡黄明儒                                                                         ;
软件用途: 为AutoCAD BricsCAD 的LISP输入法解决方案               ;
日期地点: 2024.7.9四川自贡                                                               ;
程序语言: AutoLISP,Visual LISP                                                             ;
版本号:   Ver.20                                                    ;
===============================================================================================;
本软件为开源软件: 以下是开源申明:                                                                  
-----------------------------------------------------------------------------------------------;
本页面的软件遵照GPL协议开放源代码,您可以自由传播和修改,在遵照下面的约束条件的前提下:         
                                                                                                
一. 只要你在本开源软件的每一副本上明显和恰当地出版版权声明,保持此许可证的声明和没有担保的声明完
整无损,并和程序一起给每个其他的程序接受者一份许可证的副本,你就可以用任何媒体复制和发布你收到的
原始的程序的源代码。你也可以为转让副本的实际行动收取一定费用,但必须事先得到的同意。               
                                                                                                
二. 你可以修改本开源一个的或几个副本或程序的任何部分,以此形成基于程序的作品。只要你同时满足
下面的所有条件,你就可软件以按前面第一款的要求复制和发布这一经过修改的程序或作品。                  
1.你必须在修改的
文件中附有明确的说明: 你修改了这一文件及具体的修改日期。                        
2.你必须使你发布或出版的作品(它包含程序的全部或一部分,或包含由程序的全部或部分衍生的作品)允许
  第三方作为整体按许可证条款免费使用。                                                               
3.如果修改的程序在运行时以交互方式读取命令,你必须使它在开始进入常规的交互使用方式时打印或显示声
  明: 包括适当的版权声明和没有担保的声明(或者你提供担保的声明);用户可以按此许可证条款重新发布
  程序的说明;并告诉用户如何看到这一许可证的副本。(例外的情况: 如果原始程序以交互方式工作,它并
  不打印这样的声明,你的基于程序的作品也就不用打印声明。                                       
                                                                                                
三. 只要你遵循一、二条款规定,您就可以自由使用并传播本源代码,但必须原封不动地保留原作者信息。  


Autocad的命令栏出现中文,使我烦得要命,开始纠结这个问题。
明经上有很多解决办法,但我希望的是:0设置,加载就行了。
1 win7下我曾用highflybird大师推荐的dwx,效果不错。后来出现了注册问题,在edata的帮助下解决了。
        我白度到一篇文章《autocad效率革命的提升》,也是信用dwx写的。也很容易搜到小蜜蜂用dwx写的。
2 但后来我用win10,dwx注册又出现了问题,没法使用了。幸好惊惊给我写了一个程序,不管输入法是什么
        状态,总是可以输入英文。但是要根据autocad版本加载。
3 baitang36盛老师这个http://bbs.mjtd.com/thread-190245-1-1.html应该是autocad下最好版本了。
        加载就可以,不需要区分autocad的版本。
4 现在不使用autocad了,在bricsCAD下,上面的办法都不灵了。
   我注意到,不管输入法是什么状态,只要CapsLock锁定,命令栏就不会出现中文。autocad、bricsCAD都可使用

  今天输入法基本解决,
        分享给大家
==============================================
以上方案只是锁定大写键,用起来不爽。
在红日和Ocean的帮助下,完善程序。
   安装了VBA的情况下,可以判断输入法是否处理中文状态,此时,wscript.shell按下Ctrl+空格,不影响其它应用程序;
如果没有安装VBA,wscript.shell锁定CapsLock.这个影响其它程序。
我是在win7、win10bricscad 和autocad下通过的,win11不行
使用方法:加载即可,无需设置。
  1. Public Sub GetIMEStatus()’<span style="background-color: rgb(255, 255, 255);">VB内容如下---by 红日</span>
  2. ThisDrawing.SetVariable "useri1", IMEStatus
  3. End Sub



实践证明:wscript.shell按下Ctrl+空格同手工按Ctrl+空格是不同的,这也是不能在win11下使用的原因。其实在win10下使用也不完美。
简单地,wscript.shell锁定CapsLock,是可行的,无论bcad、acad,也无论win11 win10


==另一方法 win11 bcad下通过=========附件《输入法B》=================================
1 VB编辑器打开->插入Module,在其中插入代码
  1. #If VBA7 Then
  2.     Public Declare PtrSafe Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
  3.     Public Declare PtrSafe Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As LongPtr, ByVal flags As Long) As Long
  4.     Public Declare PtrSafe Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, lpList As Long) As Long
  5.     Public Declare PtrSafe Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
  6.     Public Declare PtrSafe Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal hkl As LongPtr, ByVal lpsz As String, ByVal uBufLen As Long) As Long
  7.     Public Declare PtrSafe Function ImmIsIME Lib "imm32.dll" (ByVal hkl As LongPtr) As Long
  8. #Else
  9.     Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
  10.     Public Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal flags As Long) As Long
  11.     Public Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, lpList As Long) As Long
  12.     Public Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
  13.     Public Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long
  14.     Public Declare Function ImmIsIME Lib "imm32.dll" (ByVal hkl As Long) As Long
  15. #End If

  16. Public Sub KeyboardLayoutEn()
  17.     Dim a
  18.     a = LoadKeyboardLayout("00000809", 0)
  19.     ActivateKeyboardLayout a, KLF_UNLOADPREVLOUS
  20. End Sub

  21. Public Sub KeyboardLayoutCh()
  22.     Dim a
  23.     a = LoadKeyboardLayout("00000804", 0)
  24.     ActivateKeyboardLayout a, KLF_UNLOADPREVLOUS
  25. End Sub

  26. Private Sub AcadDocument_BeginClose()
  27.     Call KeyboardLayoutCh '启用中文输入法
  28. End Sub

然后文件->保存为“Imputting.dvb”

2 反应器有两种方式,可选其中一种
2.1 在ThisDrawing插入代码
  1. '特定命令开始前切换为中文
  2. Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
  3.     On Error Resume Next
  4.     If InStr("MTEDIT,TEXTEDIT,DIMREASSOCIATE,OPTIONS,MTEXT,PC_TEXT,PC_JSTJ,SETTINGS,PC_BTLEDIT,PC_FJLEDIT,PC_CSLEDIT,PC_XHBJ,PC_CCD,PC_CCD2,PC_DIMTOL,PC_HJFH,PC_ZXKBZ,PC_CREATECARD,PC_BZXG", CommandName) Then
  5.         Call KeyboardLayoutCh '启用中文输入法
  6.     End If
  7. End Sub

  8. '命令结束后切换为英文
  9. Private Sub AcadDocument_EndCommand(ByVal CommandName As String)
  10.     Call KeyboardLayoutEn '启用英文输入法
  11. End Sub

2.2 用vlide打开,写入以下代码
  1. ;;;输入法==========================================================
  2. (if (findfile "Imputting.dvb")
  3.   (progn
  4.     (VL-vbaload (findfile "Imputting.dvb"))

  5.     (defun command-will-End (reactor command-list)
  6.       (VL-vbarun "KeyboardLayoutEn")
  7.     )

  8.     (defun command-will-start (reactor command-list / USERI1)
  9.       (VL-vbarun "KeyboardLayoutCh")
  10.     )

  11.     (VLR-editor-Reactor
  12.       nil
  13.       '((:VLR-commandWillStart . command-will-start)
  14.   (:vlr-commandEnded . command-will-End)
  15.   (:VLR-beginClose . command-will-start)
  16.        )
  17.     )   

  18.     ;;让命令运行一次
  19.     (command-will-End nil nil)
  20.   )
  21. )
  22. ;;;输入法==========================================================

















本帖子中包含更多资源

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

x

评分

参与人数 11明经币 +12 金钱 +10 收起 理由
zhoupeng220 + 1 很给力!
rocking2008 + 1 未来可期。
hhh454 + 1 + 10 很给力!
a405692168 + 1 赞一个!
baitang36 + 1 很给力!
JANHNG + 1 很给力!
cghdy + 1
1291500406 + 1 很给力!
仲文玉 + 2 赞一个!
ssyfeng + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-7-1 14:50:03 | 显示全部楼层
阅读权限: 80
即使是钻石会员也无法下载
回复 支持 4 反对 0

使用道具 举报

发表于 2024-7-2 04:07:56 | 显示全部楼层
`中微子 发表于 2024-7-2 00:47
事实上,BricsCAD 打开 500 多个 DWG 文件的速度提高了 2.7 倍,运行高级 LISP 例程的速度提高了 2.8 倍 ...

别想了,autodesk重心已经不在cad上面,就连Maya在大版本没啥更新然后被骂了...
还是自己动手丰衣足食,我又不是没有多线程处理图元的教程,并行遍历句柄,并行任务,分批保存dwg,再聚合.还得构造索引,放弃选择集过滤.超多技巧的,只是你们不玩c#或者c++.
至于lisp加速,这不很简单嘛,先把链表改动态数组,再上一些hashmap,hashset,R树,四叉树...要不上SIMD?我并不觉得你们会细心研究咯...
回复 支持 1 反对 0

使用道具 举报

发表于 2024-7-2 00:47:31 | 显示全部楼层
gzcsun 发表于 2024-7-1 15:59
请问bricsCAD 好用吗?
发觉bricsCAD打开大文件dwg(80M以上)最快,选择两图元时显示尺寸驱动,其它就没了 ...

事实上,BricsCAD 打开 500 多个 DWG 文件的速度提高了 2.7 倍,运行高级 LISP 例程的速度提高了 2.8 倍。

作为行业领先的 CAD 软件,BricsCAD 支持多线程、多处理器操作,以加快文件加载和绘图生成及渲染的产品性能。

享受各种高性能功能,例如包含数十万个实体的图形中的平滑缩放和平移操作、多分辨率、持久图像缓存以显示 PDF 底图,实现超快速缩放和平移操作,以及 BricsCAD 的更好平移和缩放性能,即使是巨大的 64 位 BigTIFF 文件也是如此。

发再BricsCAD支持多线程,AutoCAD以后有没有可能支持多线程?
发表于 2024-7-1 14:08:13 | 显示全部楼层
感谢作者的分享!
发表于 2024-7-1 14:15:41 | 显示全部楼层
写个lisp可以根据版本自动netload,嘻嘻
 楼主| 发表于 2024-7-1 14:19:15 | 显示全部楼层
你有种再说一遍 发表于 2024-7-1 14:15
写个lisp可以根据版本自动netload,嘻嘻

是呀,关键是您帮我写的那个,在bricscad下不能用了。
发表于 2024-7-1 14:27:09 | 显示全部楼层
感谢黄总程序分享
可惜没办法下载
发表于 2024-7-1 14:27:09 | 显示全部楼层
这个是自动锁定大写键盘,一直英文状态,还是根据用户使用情况,文字编辑时自动切换为中文,其余时候均是英文状态呢?

点评

文字编辑时,CapsLock解锁  发表于 2024-7-1 14:30
发表于 2024-7-1 14:48:59 | 显示全部楼层
感谢分享,请问支持浩辰吗?
发表于 2024-7-1 14:50:04 | 显示全部楼层
抱歉,只有特定用户可以下载。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-14 05:33 , Processed in 0.199950 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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