2011-04-08 2 views
1

win32api를 사용하여 특정 키를 눌러 파이썬에서 루프를 해제하려고합니다. 어떻게 이런 일이 벌어 질까요?Python에서 win32api를 사용하여 키 프레스 감지

다음 코드에서 win32api.KeyPress ('H')의 실제 버전은 무엇입니까?

개정 :

import win32api 

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

내가 시간 키를 눌러 루프를 중단 할 수 있어야합니다.

편집 :

내가 반복적으로 마우스 위치를보고하는 프로그램을 시도하고있어 내가 말한 프로그램을 종료하는 메커니즘이 필요합니다.

수정 된 코드 참조.

답변

10

win32api은 기본 Windows 저수준 라이브러리에 대한 인터페이스 일뿐입니다. 참조 GetAsyncKeyState Function :

는 키 함수가 호출되는 시점에 위 또는 아래로, 그리고 여부를 결정 키가 GetAsyncKeyState에 대한 이전 호출 후 눌렀는지 여부.

구문

SHORT WINAPI GetAsyncKeyState(
__in int vKey 
); 

반환 값

유형 : 함수가 성공 SHORT

경우, 반환 값은 키가 GetAsyncKeyState 마지막 호출 이후 눌렀는지 여부를 지정, 키가 현재 위 또는 아래인지 여부를 나타냅니다. 최상위 비트가 설정되면 키는 작동 중지되고 최하위 비트가 설정된 경우 키는 이전 호출 인 GetAsyncKeyState 이후에 눌려졌습니다.

반환 값은 비트 인코딩되어 있습니다 (boolean 아님). vKey 값을 얻으려면 응용 프로그램에서 win32con 모듈의 가상 키 코드 상수를 사용할 수 있습니다.시험 예

키 "캡 LOCK"간단한 문자 용

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

가상 키 상수 ASCII 코드이며, 그래서 "H"키 (키의 상태를 테스트하는 가압되었는지 그냥 보낼 키 코드를 발견하려고하는 경우에도 매우 유용합니다, GitHub의에

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

이것은 GUI 프로그래밍에서 작동하지 않습니다. 키 누름을 확인하는 메소드를 호출하지 않습니다. 대신 키를 누르면 메시지가 전송됩니다. 입력을 받고있는 윈도우가 있다고 가정하면 윈도우 프로 시저에 도착하는 WM_KEYDOWN 메시지 나 Python win32api 용어로 메시지 맵에 응답해야합니다.


당신의 편집은 당신이 다소 특이한 메시지 대기열을 사용하고 있지 않음을 보여줍니다. GetAsyncKeyState()으로 전화하여 원하는 것을 얻을 수 있습니다.

+0

위의 내 편집을 참조하십시오. – rectangletangle

관련 문제