Обнаружение нажатия клавиш с помощью win32api в Python

Я пытаюсь разбить цикл на Python с помощью специального нажатия клавиши, используя win32api. Как это можно сделать?

Какова фактическая версия win32api.KeyPress ('H') в следующем коде?

После доработки:

import win32api while True : cp = win32api.GetCursorPos() print cp if win32api.KeyPress('H') == True : break 

Я хочу, чтобы иметь возможность разбить цикл, нажав клавишу h .

Редактировать:

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

См. Пересмотренный код.

3 Solutions collect form web for “Обнаружение нажатия клавиш с помощью win32api в Python”

win32api – это просто интерфейс к низкоуровневой библиотеке окон. См. GetAsyncKeyState :

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

Синтаксис

 SHORT WINAPI GetAsyncKeyState( __in int vKey ); 

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

Тип: SHORT

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

Обратите внимание, что возвращаемое значение является битовым (не boolean ). Чтобы получить значения vKey , приложение может использовать константы кода виртуального ключа в модуле win32con .

Например, тестирование клавиши «CAPS LOCK»:

 >>> import win32api >>> import win32con >>> win32con.VK_CAPITAL 20 >>> win32api.GetAsyncKeyState(win32con.VK_CAPITAL) 0 >>> win32api.GetAsyncKeyState(win32con.VK_CAPITAL) 1 

Константа виртуального ключа для простых букв – это коды ASCII, поэтому проверка состояния клавиши «H» (нажатие клавиши) будет выглядеть так:

 >>> win32api.GetAsyncKeyState(ord('H')) 1 

Это не так, как это работает в программировании GUI. Вы не вызываете метод проверки нажатия клавиши. Вместо этого вы получаете отправленные сообщения при нажатии клавиш. Предполагая, что у вас есть окно, которое принимает вход, вам необходимо ответить на сообщение WM_KEYDOWN поступающее в вашу оконную процедуру, или карту сообщений в терминах win32api Python.


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

Проверьте python tiler на github, очень полезно, даже если вы пытаетесь просто найти коды клавиш для отправки. Также это будет полезно, если вы запустите свой код в фоновом режиме и хотите разбить цикл за пределами окна.

git project: https://github.com/Tzbob/python-windows-tiler

код с окнами: https://code.google.com/p/python-windows-tiler/source/browse/pwt/hotkey.py?r=df41af2a42b6304047a5f6f1f2903b601b22eb39

  • Использование struct как аргумент функции с модулем ctypes python
  • Обнаружение рефлексивной DLL-инъекции
  • Изменение контактов Microsoft Outlook с Python
  • Копировать изображение PIL / PILLOW в буфер обмена Windows
  • Ptyon ctypes: функция обратного вызова SetWindowsHookEx никогда не вызывалась
  • Python win32print изменяет параметры расширенного принтера
  • Скрыть окно из панели задач MS windows
  • Обнаружение выхода Windows в Python
  •  
    Interesting Posts for Van-Lav

    Можно ли вызывать модуль Python из ObjC?

    SQLAlchemy commals делает float округленным

    Boto3 S3: получить файлы без получения папок

    Python – лучший / самый чистый способ определения постоянных списков или словарей

    Неожиданное поведение при индексировании 2D np.array с двумя булевыми массивами

    Django – Конфликтующие модели в приложении, один и тот же путь, но в другом случае

    Есть ли что-нибудь, что мне нужно знать об использовании Tkinter и pygame вместе?

    Импорт pandas в python изменяет, как matplotlib обрабатывает объекты datetime?

    Python matplotlib: память не выделяется при задании размера фигуры

    Неопределенный результат запроса Deferred AJAX на Flask

    Надувание 1D-массива в 2D-массив в numpy

    Предложения по get_text () в BeautifulSoup

    Что такое соглашение об именах в Python для имен переменных и функций?

    numpy.loadtxt не читает файл с комплексными номерами

    Есть ли быстрый способ уменьшить отступ нескольких строк в Python?

    Python - лучший язык программирования в мире.