Изменить блокировки клавиатуры в Python
Есть ли способ, в Python, программно изменить состояния CAPS LOCK/NUM LOCK/SCROLL LOCK?
На самом деле это не вопрос шутки, а скорее вопрос о программе шутки. Я намерен использовать его для того, чтобы заставить свет делать забавные вещи...
5 ответов
Если вы используете Windows, вы можете использовать SendKeys для этого, я считаю.
https://web.archive.org/web/20121125032946/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)
Вероятно, бесполезно для ОП, но стоит поделиться, потому что кто-то может искать ответ, как я, но не мог найти решение без использования сторонних модулей. Это то, что я сделал, чтобы включить крышку
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())
Для Windows:
#https://stackru.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
Источники:
- Отправить комбинацию клавиш с Python
- https://msdn.microsoft.com/en-us/library/8c6yea83(v=vs.84).aspx
Также обратите внимание на ответ Ури о том, как читать состояние CapsLock. Чтобы конкретно установить состояние светодиода в true или false, вы не можете просто вслепую переключаться, вы должны знать, какое текущее состояние является первым. Он показывает вам, как читать состояние CapsLock. Вот как прочитать все 3 состояния светодиодов:
#https://stackru.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())
Чтобы установить для CAPS LOCK определенное значение с помощью SendKeys, важно сначала определить состояние CAPS LOCK. Вот как это сделать в python (под windows):
import win32api,win32con
def IsCapsLockOn():
# return 1 if CAPSLOCK is ON
return win32api.GetKeyState(win32con.VK_CAPITAL)
Использовать этот:
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