Проверьте, нажата ли клавиша на фоне, используя win32api - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь сделать простой скрипт Python для захвата изображения с моей веб-камеры на разблокировку рабочей станции.И я делаю «переключатель выключения», который проверяет, нажата ли клавиша, и если это произойдет, программа не запустится.Моя проблема в том, что мне нужно проверить, нажата ли клавиша, и я не могу найти способ сделать это.Я пробовал это:

 keyState = win32api.GetAsyncKeyState(17)

Но это не работает.

Из документации:

Возвращаемое значение равно нулю, если окно в другом потокеили процесс в настоящее время имеет фокус клавиатуры.

Так что это действительно не помогает мне.Я на Windows между прочим.

1 Ответ

0 голосов
/ 08 апреля 2019

Во-первых, GetAsyncKeyState() Также необходимо AND (&) 0x8000, чтобы убедиться, что ключ не работает.

Возвращаемое значение

Тип: SHORT

Еслифункция завершается успешно, возвращаемое значение указывает, была ли клавиша нажата с момента последнего вызова GetAsyncKeyState, и была ли клавиша в данный момент вверх или вниз.Если установлен старший значащий бит, клавиша нажата, а если установлен младший значащий бит, клавиша была нажата после предыдущего вызова GetAsyncKeyState.

Обратите внимание, что возвращаемое значение - битзакодировано (не логическое).Вы должны очистить младший значащий бит вроде:

keyState = win32api.GetAsyncKeyState(17)&0x8000.

И есть простое решение без оконного фокуса в python.Вы можете получить его через pynput .

Командная строка:

> pip install pynput

Код Python:

from pynput import keyboard

def on_press(key):
    try: k = key.char # single-char keys
    except: k = key.name # other keys
    if key == *(which you want to set):#To Do.

lis = keyboard.Listener(on_press=on_press)
lis.start() # start to listen on a separate thread
lis.join() # no this if main thread is polling self.keys
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...