Подтвердить что ты не робот

Изменение блокировки клавиатуры в Python

Можно ли в Python программно изменить состояния CAPS LOCK/NUM LOCK/SCROLL LOCK?

На самом деле это не шуточный вопрос - больше похоже на реальный вопрос для программы-шутки. Я намерен использовать его для того, чтобы заставить огни делать забавные вещи...

4b9b3361

Ответ 1

Если вы используете окна, вы можете использовать SendKeys для этого, я считаю.

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

import SendKeys

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

Ответ 2

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

Ответ 3

Чтобы установить CAPS LOCK на определенное значение с помощью SendKeys, важно сначала определить состояние CAPS LOCK. Вот как это сделать в python (под окнами):

import win32api,win32con

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

Ответ 4

Для 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())

Ответ 5

Вероятно, бесполезно для 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())

Ответ 6

Я хотел отключить блокировку заглавных букв, не могли бы вы мне помочь?