使用Python中的win32api检测键按

rec*_*gle 1 python winapi key-bindings

我正在尝试使用win32api通过特定的按键来打破Python中的循环.怎么会这样呢?

win32api.KeyPress('H')的实际版本是什么,在下面的代码中?

修订:

import win32api

while True :
    cp = win32api.GetCursorPos()
    print cp
    if win32api.KeyPress('H') == True :
        break
Run Code Online (Sandbox Code Playgroud)

我希望能够通过按h键来打破循环.

编辑:

我正在尝试制作一个反复报告鼠标位置的程序,我需要一种机制来退出所述程序.

查看修订后的代码

gim*_*mel 11

win32api只是底层Windows低级库的接口.看GetAsyncKeyState功能:

确定在调用函数时键是向上还是向下,以及在上次调用GetAsyncKeyState之后是否按下了键.

句法

SHORT WINAPI GetAsyncKeyState(
__in  int vKey
);
Run Code Online (Sandbox Code Playgroud)

回报价值

类型: SHORT

如果函数成功,则返回值指定自上次调用GetAsyncKeyState以来是否按下了键,以及该键当前是向上还是向下.如果设置了最高有效位,则键为关闭,如果设置了最低有效位,则在上一次调用GetAsyncKeyState之后按下该键.

请注意,返回值是位编码的(不是a 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
Run Code Online (Sandbox Code Playgroud)

简单字母的虚拟键常量是ASCII码,因此测试"H"键(按下键)的状态将如下所示:

>>> win32api.GetAsyncKeyState(ord('H'))
1
Run Code Online (Sandbox Code Playgroud)