Ответ 1
Если вы используете окна, вы можете использовать SendKeys для этого, я считаю.
http://www.rutherfurd.net/python/sendkeys
import SendKeys
SendKeys.SendKeys("""
{CAPSLOCK}
{SCROLLOCK}
{NUMLOCK}
""")
Можно ли в Python программно изменить состояния CAPS LOCK/NUM LOCK/SCROLL LOCK?
На самом деле это не шуточный вопрос - больше похоже на реальный вопрос для программы-шутки. Я намерен использовать его для того, чтобы заставить огни делать забавные вещи...
Если вы используете окна, вы можете использовать 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)
Чтобы установить CAPS LOCK на определенное значение с помощью SendKeys, важно сначала определить состояние CAPS LOCK. Вот как это сделать в python (под окнами):
import win32api,win32con
def IsCapsLockOn():
# return 1 if CAPSLOCK is ON
return win32api.GetKeyState(win32con.VK_CAPITAL)
Для Windows:
#/questions/297488/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. Чтобы настроить состояние светодиода на значение true или false, вы не можете просто переключаться вслепую, вы должны знать, что такое текущее состояние. Он показывает вам, как читать состояние CapsLock. Здесь, как читать все 3 состояния светодиодов:
#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())
Я хотел отключить блокировку заглавных букв, не могли бы вы мне помочь?