如何在没有按键的情况下更改大写锁定状态

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。

【讨论】:

以上是关于如何在没有按键的情况下更改大写锁定状态的主要内容,如果未能解决你的问题,请参考以下文章

obj -c IOS检测大写锁定按键事件

mac大小写切换是哪个键

苹果笔记本怎么切换大小写

使用 jQuery 显示大写锁定 [重复]

jquery无法检测到大写锁定的开启和关闭以及按键是大写还是小[重复]

如何更改ORACLE 用户的 expired状态