改变Python中的键盘锁

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

这不是一个真正的笑话问题 – 更像是一个笑话程序的真正问题。 我打算用它来使灯做有趣的事情…

Solutions Collecting From Web of "改变Python中的键盘锁"

如果你使用的是Windows,你可以使用SendKeys来达到这个目的。

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

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

在Linux上,这里是一个Python程序,用于开启和关闭所有的键盘指示灯:

 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) 

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

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

对于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. 用python发送组合键
  2. https://msdn.microsoft.com/en-us/library/8c6yea83(v=vs.84).aspx

另外,请注意Uri关于如何阅读CapsLock状态的答案。 要将LED的状态设置为真或假,不能盲目切换,必须先知道当前状态。 他向您展示了如何阅读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()) 

可能没有任何用途的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())