baitang36 发表于 2024-5-25 08:38:29

[原创]用纯lsp切换键盘布局(已增加自动切换输入法源码)

本帖最后由 baitang36 于 2024-5-30 16:11 编辑

Windows是支持多国语言的,每种语言对应一种键盘布局(KeyboardLayout),在英文键盘布局下只能输入英文,在中文键盘布局下可以切换输入法,可以输入中文,也可以输入英文。

经过试验,我用保留函数实现了切换键盘布局的操作函数。用途吗,就是让lsp爱好者能够方便的打造自己的自动切换输入法。
在syz-kb_pro.fas中定义了三个函数:syz-currentKeyboardLayoutsyz-setKeyboardLayout-chnsyz-setKeyboardLayout-eng
(syz-currentKeyboardLayout)是获取系统当前使用的键盘布局,英文返回字符串"ENG",中文返回"CHN"
(syz-setKeyboardLayout-chn)是设置键盘布局为中文
(syz-setKeyboardLayout-eng)是设置键盘布局为英文
因为是用的纯lisp,因此不挑版本,支持所有autocad版本,32位和64位同样支持,包括最新的acad2025,也支持lispsys=1的情况。

请参考yxp大侠的这个帖子CAD输入法自动切换程序(V1.02) - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)

帖子发表后,有的朋友说不会用。我写了个使用它的例子,是参考上述yxp大侠的代码修改的,请下载试用。
例子中(setq *COM_DEF# '("MTEDIT" "MTEXT" "DDEDIT" "TEXT" "TEXTEDIT"))是自动切换到中文的命令,可以按自己需要增减。

autoim.lsp源码如下:
(vl-load-com)
(load "c:/00/syz-kb_pro.fas")
(setq *COM_DEF# '("MTEDIT" "MTEXT" "DDEDIT" "TEXT" "TEXTEDIT"))
(defun ime-shift()
(defun *fun_str#(x y)(if (member(car y) *com_def#)(syz-setKeyboardLayout-chn)))
(defun *fun_end#(x y)(syz-setKeyboardLayout-eng))
(vlr-command-reactor nil '((:vlr-commandWillStart . *fun_str#)))
(foreach x '(:vlr-commandEnded :vlr-commandCancelled)(vlr-command-reactor nil (list(cons x (quote *fun_end#)))))
(syz-setKeyboardLayout-eng)(princ))
(ime-shift)
(princ)




baitang36 发表于 2024-5-25 15:46:37

本帖最后由 baitang36 于 2024-5-26 16:18 编辑

按惯例,没币的在这里下载

qazxswk 发表于 2024-5-27 12:04:02

本帖最后由 qazxswk 于 2024-5-27 12:13 编辑

moranyuyan 发表于 2024-5-27 08:05
我是在(setq *COM_DEF# '("MTEDIT" "MTEXT" "DDEDIT" "TEXT" "TEXTEDIT""ERN" "ZML"))这一句添加新的指 ...
不是这样的,是在你的插件中,写入切换输入法的代码:lol
比如:


(defun c:11(/ )
(syz-setKeyboardLayout-chn)
(你的插件内容)
(if(= (syz-currentKeyboardLayout) "CHN") (syz-setKeyboardLayout-eng))
(princ)
)

baitang36 发表于 2024-5-28 05:39:27

本帖最后由 baitang36 于 2024-5-28 05:45 编辑

e2002 发表于 2024-5-27 17:25
有没有办法,使切换到中文键盘布局时,使用的中文输入法,就是设置为中文输入状态?

Windows中的中文输 ...
试验过,win10会记忆你的输入法状态,你设置成中文,切换到英文布局后再切换成中文布局,输入法状态会恢复你原来的中文状态的。
WINDOWS在键盘输入这块搞得非常复杂,语言区域下有键盘布局,键盘布局下有输入法,输入法下有英文和中文,中文输入法又有好多种,常用的有搜狗、微软、百度、讯飞、微信。还有人喜欢五笔。
要精准控制输入法状态,就要去研究各种输入法,针对各种输入法去写程序。对于个人来说,这几乎是不可能完成的任务。
目前的输入法自动切换,都存在这样那样的问题,根本原因就是对现有的众多输入法没有研究透彻。没有从深层次去研究,只是根据使用习惯去编程,用户的使用习惯五花八门,就会出各种状况。
我用的方法是避开具体的输入法,不会受用户习惯影响。思路清晰且固定,状态就两种,我不管用户怎么用,让用户去适应我。

moranyuyan 发表于 2024-5-25 12:32:52

2个币,不舍得:dizzy:

jun353835273 发表于 2024-5-29 16:47:37


用老师的这个模拟按键

http://bbs.mjtd.com/thread-187076-1-1.html
可以把用shift切换,比如搜狗。这样win7系统可以的
(defun Press-Shift( / VK_SHIFT)
(setq VK_SHIFT 16 );Shift键
(if (null syz_press)
(alert "需加载按键插件")
(syz_press VK_SHIFT);需加载按键插件
)
)

tigcat 发表于 2024-5-25 08:41:01

哈哈,谢谢楼主分享,沙发

lileiaj 发表于 2024-5-25 08:56:22

大神又出精品了!

dcl1214 发表于 2024-5-25 09:42:25

配合命令反应器就可以实现切换了

潘成祥2015 发表于 2024-5-25 09:48:57

下载了,
不会用

tomonkey239 发表于 2024-5-25 10:14:25

没有币下载不了:$

XIAO890325 发表于 2024-5-25 10:35:07


下载了,
不会用

自贡黄明儒 发表于 2024-5-25 10:42:17

我试了一下,确实爽

cchessbd 发表于 2024-5-25 11:11:55

试了下 Win11下有用 这下不用每次开cad都去切换输入法了。

gaics 发表于 2024-5-25 11:50:33

重启CAD还是恢复中文布局?如何记忆?
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: [原创]用纯lsp切换键盘布局(已增加自动切换输入法源码)