Изменить блокировки клавиатуры в Python - PullRequest
17 голосов
/ 12 мая 2009

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

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

Ответы [ 5 ]

16 голосов
/ 13 мая 2009

В 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)
14 голосов
/ 12 мая 2009

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

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

import SendKeys

SendKeys.SendKeys("""
{CAPSLOCK}
{SCROLLOCK}
{NUMLOCK}
""")
2 голосов
/ 09 января 2014

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

import win32api,win32con

def IsCapsLockOn():
    # return 1 if CAPSLOCK is ON
    return win32api.GetKeyState(win32con.VK_CAPITAL)
1 голос
/ 09 июля 2016

Для 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. Отправить комбинацию клавиш с питоном
  2. https://msdn.microsoft.com/en-us/library/8c6yea83(v=vs.84).aspx

Кроме того, обратите особое внимание на ответ Ури о том, как читать состояние CapsLock. Чтобы установить состояние светодиода, в частности, на true или false, вы не можете просто вслепую переключаться, вы должны знать, какое текущее состояние является первым. Он показывает вам, как читать состояние CapsLock. Вот как прочитать все 3 состояния светодиодов:

#/787688/izmenit-blokirovki-klaviatury-v-python#787693abc
#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())
0 голосов
/ 02 сентября 2017

Вероятно, бесполезно для ОП, но стоит поделиться, так как кто-то может искать ответ, как я, но не может найти решение без использования сторонних модулей. Это то, что я сделал, чтобы включить заглушку

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...