如何在没有按键的情况下更改大写锁定状态
Posted
技术标签:
【中文标题】如何在没有按键的情况下更改大写锁定状态【英文标题】:How to change caps lock status without key press 【发布时间】:2011-01-11 09:36:29 【问题描述】:我正在使用一个在按下 Caps Lock 键时激活的 python 程序,我希望能够在程序处于活动状态时打开/关闭大写锁定状态。
我尝试使用 virtkey 发送密钥,但它显然不起作用,因为密钥只是激活应用程序并且不会更改大写锁定状态。那么使用 python 实现这一目标的最佳方法是什么?
我正在使用 Ubuntu
【问题讨论】:
谢谢大家,但 Daniel 发布的代码仅用于更改 LED 灯,因为我在 Linux 上,SendKeys 不起作用,我担心它会发送获胜的按键事件帮不了我。我得到了一个使用 C 的代码,但它似乎模拟按键并且它也不起作用。在 Windows 上,当使用 Delphi 编程时,我记得有一个通知给操作系统,可以切换状态而不必担心按键。在 Linux 上没有类似的方法可以做到这一点吗? 【参考方案1】:在 Linux 上:
import fcntl
import os
KDSETLED = 0x4B32
console_fd = os.open('/dev/console', os.O_NOCTTY)
# Turn on caps lock
fcntl.ioctl(console_fd, KDSETLED, 0x04)
# Turn off caps lock
fcntl.ioctl(console_fd, KDSETLED, 0)
来源:Benji York - Stack Overflow: Change keyboard locks in Python
在 Windows 上:
您应该可以为此使用SendKeys,如下例所示:
import SendKeys
SendKeys.SendKeys("""
CAPSLOCK
""")
【讨论】:
晚了几年,但我没有选择这个作为正确答案的原因是因为,它似乎改变了 LED 状态,但它并没有真正改变 CapsLock 状态,加上用户必须是 root 才能访问 /dev/console。所以不完全是我需要的【参考方案2】:使用sendkeys
更改状态,使用keyboardleds
更改LED 指示灯。
发送密钥:
来自another SO dicussion:
import SendKeys
SendKeys.SendKeys("""
CAPSLOCK
SCROLLOCK
NUMLOCK
""")
键盘灯:
这个包似乎只适用于 POSIX(如果你使用的是 Ubuntu,这没问题),你可以read more here。
【讨论】:
以上是关于如何在没有按键的情况下更改大写锁定状态的主要内容,如果未能解决你的问题,请参考以下文章