在Python中更改键盘锁

时间:2009-05-12 19:19:37

标签: python windows

在Python中,有没有办法以编程方式更改 CAPS LOCK / NUM LOCK / SCROLL LOCK状态?

这不是一个真正的笑话问题 - 更像是一个笑话程序的真实问题。我打算用它来让灯光做有趣的事情......

6 个答案:

答案 0 :(得分:16)

在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)

答案 1 :(得分:14)

如果您正在使用Windows,我可以使用SendKeys,我相信。

http://www.rutherfurd.net/python/sendkeys

import SendKeys

SendKeys.SendKeys("""
{CAPSLOCK}
{SCROLLOCK}
{NUMLOCK}
""")

答案 2 :(得分:2)

要使用SendKeys将CAPS LOCK设置为特定值,首先检测CAPS LOCK的状态非常重要。以下是在python(在windows下)中如何做到这一点:

import win32api,win32con

def IsCapsLockOn():
    # return 1 if CAPSLOCK is ON
    return win32api.GetKeyState(win32con.VK_CAPITAL)

答案 3 :(得分:1)

对于Windows:

#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

来源:

  1. Send key combination with python
  2. https://msdn.microsoft.com/en-us/library/8c6yea83(v=vs.84).aspx
  3. 另外,请注意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())
    

答案 4 :(得分:0)

可能对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())

答案 5 :(得分:0)

使用此:

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