- 积分
- 64288
- 明经币
- 个
- 注册时间
- 2010-5-9
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 自贡黄明儒 于 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、win10下bricscad 和autocad下通过的,win11不行。
使用方法:加载即可,无需设置。
- Public Sub GetIMEStatus()’<span style="background-color: rgb(255, 255, 255);">VB内容如下---by 红日</span>
- ThisDrawing.SetVariable "useri1", IMEStatus
- End Sub
实践证明:wscript.shell按下Ctrl+空格同手工按Ctrl+空格是不同的,这也是不能在win11下使用的原因。其实在win10下使用也不完美。
简单地,wscript.shell锁定CapsLock,是可行的,无论bcad、acad,也无论win11 win10
==另一方法 win11 bcad下通过=========附件《输入法B》=================================
1 VB编辑器打开->插入Module,在其中插入代码
- #If VBA7 Then
- Public Declare PtrSafe Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
- Public Declare PtrSafe Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As LongPtr, ByVal flags As Long) As Long
- Public Declare PtrSafe Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, lpList As Long) As Long
- Public Declare PtrSafe Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
- Public Declare PtrSafe Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal hkl As LongPtr, ByVal lpsz As String, ByVal uBufLen As Long) As Long
- Public Declare PtrSafe Function ImmIsIME Lib "imm32.dll" (ByVal hkl As LongPtr) As Long
- #Else
- Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
- Public Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal flags As Long) As Long
- Public Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, lpList As Long) As Long
- Public Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
- Public Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long
- Public Declare Function ImmIsIME Lib "imm32.dll" (ByVal hkl As Long) As Long
- #End If
- Public Sub KeyboardLayoutEn()
- Dim a
- a = LoadKeyboardLayout("00000809", 0)
- ActivateKeyboardLayout a, KLF_UNLOADPREVLOUS
- End Sub
- Public Sub KeyboardLayoutCh()
- Dim a
- a = LoadKeyboardLayout("00000804", 0)
- ActivateKeyboardLayout a, KLF_UNLOADPREVLOUS
- End Sub
- Private Sub AcadDocument_BeginClose()
- Call KeyboardLayoutCh '启用中文输入法
- End Sub
然后文件->保存为“Imputting.dvb”
2 反应器有两种方式,可选其中一种
2.1 在ThisDrawing插入代码
- '特定命令开始前切换为中文
- Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
- On Error Resume Next
- 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
- Call KeyboardLayoutCh '启用中文输入法
- End If
- End Sub
- '命令结束后切换为英文
- Private Sub AcadDocument_EndCommand(ByVal CommandName As String)
- Call KeyboardLayoutEn '启用英文输入法
- End Sub
2.2 用vlide打开,写入以下代码
- ;;;输入法==========================================================
- (if (findfile "Imputting.dvb")
- (progn
- (VL-vbaload (findfile "Imputting.dvb"))
- (defun command-will-End (reactor command-list)
- (VL-vbarun "KeyboardLayoutEn")
- )
- (defun command-will-start (reactor command-list / USERI1)
- (VL-vbarun "KeyboardLayoutCh")
- )
- (VLR-editor-Reactor
- nil
- '((:VLR-commandWillStart . command-will-start)
- (:vlr-commandEnded . command-will-End)
- (:VLR-beginClose . command-will-start)
- )
- )
- ;;让命令运行一次
- (command-will-End nil nil)
- )
- )
- ;;;输入法==========================================================
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
评分
-
查看全部评分
|