Detección de pulsaciones de teclas usando win32api en Python

Estoy intentando romper un bucle en Python con una tecla específica presionando win32api. ¿Cómo podría uno hacer esto?

¿Cuál es la versión actual de win32api.KeyPress (‘H’) , en el siguiente código?

Revisado:

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

Quiero poder romper un bucle presionando la tecla h .

Editar:

Estoy intentando crear un progtwig que informe repetidamente las posiciones del mouse y necesito un mecanismo para salir de dicho progtwig.

Ver código revisado.

win32api es solo una interfaz para la biblioteca de bajo nivel de Windows subyacente. Ver la función GetAsyncKeyState :

Determina si una tecla está arriba o abajo en el momento en que se llama a la función y si se presionó la tecla después de una llamada anterior a GetAsyncKeyState.

Sintaxis

 SHORT WINAPI GetAsyncKeyState( __in int vKey ); 

Valor de retorno

Tipo: SHORT

Si la función es exitosa, el valor de retorno especifica si la tecla se presionó desde la última llamada a GetAsyncKeyState, y si la tecla está arriba o abajo. Si se establece el bit más significativo, la clave está desactivada, y si se establece el bit menos significativo, se presionó la tecla después de la llamada anterior a GetAsyncKeyState.

Tenga en cuenta que el valor de retorno está codificado en bits (no es un boolean ). Para obtener valores de vKey , una aplicación puede usar las constantes de código de clave virtual en el módulo win32con .

Por ejemplo, probando la tecla “BLOQ MAYÚS”:

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

La constante de la tecla virtual para las letras simples son códigos ASCII, por lo que la prueba del estado de la tecla “H” (tecla presionada) se verá así:

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

Así no es como funciona en la progtwigción de GUI. No se llama a un método para verificar si se pulsa una tecla. En su lugar, se envían mensajes cuando se presionan las teclas. Suponiendo que tiene una ventana que recibe información, debe responder al mensaje WM_KEYDOWN que llega a su procedimiento de ventana o al mapa de mensajes en términos de Python win32api.


Su edición muestra que no está utilizando la cola de mensajes, que es bastante inusual. Puede lograr lo que desea llamando a GetAsyncKeyState() .

Verifique el tiler de python en github, muy útil incluso si está tratando de encontrar códigos clave para enviar. También será útil si está ejecutando su código en segundo plano y desea romper el bucle desde fuera de la ventana.

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

código con las teclas de Windows: https://code.google.com/p/python-windows-tiler/source/browse/pwt/hotkey.py?r=df41af2a42b6304047a5f6f1f2903b601b22eb39