raw_input - Cambiar bloqueos de teclado en Python
python input() (5)
En Linux, aquí hay un programa Python para encender y apagar todos los LED del teclado:
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)
¿Hay alguna forma, en Python, de cambiar mediante programación los estados de BLOQ MAYÚS / BLOQUEO NUMERO / BLOQUEO DE DESPLAZAMIENTO?
Esto no es realmente una pregunta de broma, es más como una pregunta real para un programa de broma. Tengo la intención de usarlo para hacer que las luces hagan cosas divertidas ...
Para establecer BLOQ MAYÚS en un valor específico mediante SendKeys, es importante detectar primero el estado de BLOQUEO CAPS. Aquí se explica cómo hacerlo en Python (bajo Windows):
import win32api,win32con
def IsCapsLockOn():
# return 1 if CAPSLOCK is ON
return win32api.GetKeyState(win32con.VK_CAPITAL)
Para ventanas:
#https://.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
Fuentes:
- Combinación de teclas enviar con python
- https://msdn.microsoft.com/en-us/library/8c6yea83(v=vs.84).aspx
Además, preste mucha atención a la respuesta de Uri sobre cómo leer el estado de Bloqueo de mayúsculas. Para establecer un estado de LED específicamente en verdadero o falso, no puede simplemente alternar a ciegas, primero debe saber cuál es el estado actual. Te muestra cómo leer el estado de bloqueo de mayúsculas. Aquí está cómo leer los 3 estados del LED:
#https://.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())
Probablemente no sea útil para el OP, pero vale la pena compartirlo, ya que alguien podría estar buscando la respuesta tal como estaba, pero no podría encontrar la solución sin utilizar módulos de terceros. Esto es lo que hice para activar el bloqueo de mayúsculas.
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())
Si estás usando Windows puedes usar SendKeys para esto, creo.
http://www.rutherfurd.net/python/sendkeys
import SendKeys
SendKeys.SendKeys("""
{CAPSLOCK}
{SCROLLOCK}
{NUMLOCK}
""")