baitang36 发表于 2023-10-19 14:17:44

【原创】用lsp检查按键状态

本帖最后由 baitang36 于 2023-11-8 08:27 编辑

定义了一个函数 syz_getkeystate,用法如下:

(syz_getkeystate 144) 返回numlock键的状态,按下灯亮时为1,否则为0.
(syz_getkeystate 145) 返回scrollLock键的状态,按下灯亮时为1,否则为0.
(syz_getkeystate 20) 返回CapsLock键的状态,按下灯亮时为1,否则为0.
本程序是【原创】用lsp模拟按键 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)的升级版,功能包括了以前内容。
这函数是通过调用windows系统的api实现的,当然也可以检测其它键的状态,关于返回值的说明,准确的说法搜到的是英文的,请自己翻译:
The return value specifies the status of the specified virtual key, as follows:

[*]If the high-order bit is 1, the key is down; otherwise, it is up.
[*]If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled.

paulpipi 发表于 2023-10-19 22:24:34

高人,太牛了,感谢分享

baitang36 发表于 2023-10-20 08:30:05

caoliu023 发表于 2023-10-19 17:35
是不是用了内部函数

是的,用lsp调用windows的dll

abing214539880 发表于 7 天前

各位老师好,如何实现,按一下SHIFT键,就直接切换到中文状态啊,下面这段,我还没按键就直接切换过去了,我要的是手动按SHIFT键,再切换成中文

(defun shiftRUN ()
(if (syz_press VK_SHIFT)   (syz-setKeyboardLayout-chn))
)
(shiftRUN)

magicheno 发表于 2023-10-19 14:28:14

感谢大佬分享

p-3-ianlcc 发表于 2023-10-19 14:41:53

谢谢哥分享!
支持+1

kozmosovia 发表于 2023-10-19 15:22:46

方向键也能检测到?

baitang36 发表于 2023-10-19 15:37:26

本帖最后由 baitang36 于 2023-10-20 08:29 编辑

kozmosovia 发表于 2023-10-19 15:22
方向键也能检测到?
试了一下,可以的

行天下 发表于 2023-10-19 16:11:22

感谢大佬分享

caoliu023 发表于 2023-10-19 17:35:29

是不是用了内部函数

lxl217114 发表于 2023-10-19 19:36:13

盛老师出手,必属精品
页: [1] 2
查看完整版本: 【原创】用lsp检查按键状态