Обнаружение нажатия клавиш с помощью 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

  • Как определить, является ли файл исполняемым в Windows на Python?
  • Как извлечь конкретный атрибут из экземпляра Win32_PnPEntity?
  • Доступ к использованию ЦП / ОЗУ (например, с Диспетчером задач, но через API!)?
  • Python Win32API bitmap.GetBitmapBits ()
  • Используя Perl, Python или Ruby, как написать программу для «щелчка» на экране в запланированное время?
  • ReadDirectoryChangesW блокирует удаление наблюдаемого каталога
  • Получение WM_COPYDATA в Python
  • Ctypes pro и con
  • Как избавиться от корневого окна Python Tkinter?
  • ImportError: ни один модуль с именем win32api
  • Проблема компиляции MySQLdb для Python 2.6 на Win32
  • Python - лучший язык программирования в мире.