【发布时间】:2010-10-25 15:50:12
【问题描述】:
在 Python 中,有没有办法以编程方式更改 CAPS LOCK/NUM LOCK/SCROLL LOCK 状态?
这不是一个真正的笑话问题 - 更像是一个笑话程序的真正问题。我打算用它来让灯做一些有趣的事情......
【问题讨论】:
-
你在什么操作系统上运行它?
在 Python 中,有没有办法以编程方式更改 CAPS LOCK/NUM LOCK/SCROLL LOCK 状态?
这不是一个真正的笑话问题 - 更像是一个笑话程序的真正问题。我打算用它来让灯做一些有趣的事情......
【问题讨论】:
在 Linux 上,这是一个 Python 程序,用于闪烁所有键盘 LED 灯:
import fcntl
import os
import time
KDSETLED = 0x4B32
SCR_LED = 0x01
NUM_LED = 0x02
CAP_LED = 0x04
console_fd = os.open('/dev/console', os.O_NOCTTY)
all_on = SCR_LED | NUM_LED | CAP_LED
all_off = 0
while 1:
fcntl.ioctl(console_fd, KDSETLED, all_on)
time.sleep(1)
fcntl.ioctl(console_fd, KDSETLED, all_off)
time.sleep(1)
【讨论】:
如果您使用的是 Windows,我相信您可以使用 SendKeys。
http://www.rutherfurd.net/python/sendkeys
import SendKeys
SendKeys.SendKeys("""
{CAPSLOCK}
{SCROLLOCK}
{NUMLOCK}
""")
【讨论】:
可能对 OP 没有用,但值得分享,因为有人可能会像我一样寻找答案,但如果不使用第三方模块就找不到解决方案。这就是我打开大写锁定的方法
import ctypes
def turn_capslock():
dll = ctypes.WinDLL('User32.dll')
VK_CAPITAL = 0X14
if not dll.GetKeyState(VK_CAPITAL):
dll.keybd_event(VK_CAPITAL, 0X3a, 0X1, 0)
dll.keybd_event(VK_CAPITAL, 0X3a, 0X3, 0)
return dll.GetKeyState(VK_CAPITAL)
print(turn_capslock())
【讨论】:
要使用 SendKeys 将 CAPS LOCK 设置为特定值,首先检测 CAPS LOCK 的状态很重要。以下是如何在 python 中执行此操作(在 windows 下):
import win32api,win32con
def IsCapsLockOn():
# return 1 if CAPSLOCK is ON
return win32api.GetKeyState(win32con.VK_CAPITAL)
【讨论】:
#https://stackoverflow.com/questions/21549847/send-key-combination-with-python
#https://msdn.microsoft.com/en-us/library/8c6yea83(v=vs.84).aspx
import win32com.client as comclt
wsh= comclt.Dispatch("WScript.Shell")
wsh.SendKeys("abc") #types out abc directly into wherever you have your cursor (ex: right into this editor itself!)
wsh.SendKeys("{NUMLOCK}{CAPSLOCK}{SCROLLLOCK}") #toggles the state of NumLock, CapsLock, and ScrollLock; remove whichever one you don't want to toggle
来源:
另外,请注意 Uri 关于如何读取 CapsLock 状态的回答。要将 LED 状态专门设置为 true 或 false,不能盲目切换,您必须首先知道当前状态是什么。他向您展示了如何读取 CapsLock 状态。以下是读取所有 3 个 LED 状态的方法:
#https://stackoverflow.com/questions/854393/change-keyboard-locks-in-python/854442#854442abc
#https://support.microsoft.com/en-us/kb/177674
import win32api,win32con
def isCapsLockOn():
"return 1 if CapsLock is ON"
return win32api.GetKeyState(win32con.VK_CAPITAL)
def isNumLockOn():
"return 1 if NumLock is ON"
return win32api.GetKeyState(win32con.VK_NUMLOCK)
def isScrollLockOn():
"return 1 if ScrollLock is ON"
return win32api.GetKeyState(win32con.VK_SCROLL)
print("IsCapsLockOn = ", IsCapsLockOn())
print("isNumLockOn = ", isNumLockOn())
print("isScrollLockOn = ", isScrollLockOn())
还不知道所有细节,但从这里开始:Change keyboard locks in Python。
还不知道。
sudo 用于 Linux。这不好,但我需要进一步研究。【讨论】:
使用这个:
from win32api import GetKeyState
from win32con import VK_CAPITAL
GetKeyState(VK_CAPITAL)
1 == 真 0 == 错误
您也可以获得其他密钥,这里是列表:https://docs.microsoft.com/en-au/windows/win32/inputdev/virtual-key-codes
【讨论】: