使用win32api在Python中检测按键

3

我想使用win32api通过特定的按键来中断Python中的循环。应该如何实现?

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

修改后:

import win32api

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

我希望能够通过按下h键来中断循环。

编辑:

我正在尝试制作一个重复报告鼠标位置的程序,并且需要一种机制来退出该程序。
请查看修改后的代码。
3个回答

14

win32api 是一个与底层Windows库进行交互的接口。 请参阅GetAsyncKeyState函数

确定函数调用时按键是处于弹起还是按下状态,以及该按键是否在上一次调用 GetAsyncKeyState 后被按下。

语法

SHORT WINAPI GetAsyncKeyState(
__in  int vKey
);

返回值

类型:SHORT

如果函数成功,返回值指定自上次调用GetAsyncKeyState以来是否按下键以及该键当前是处于按下还是弹起状态。如果最高位被设置为1,则该键处于按下状态;如果最低位被设置为1,则表示此键在上一次调用GetAsyncKeyState之后被按下。

请注意,返回值是按位编码的(不是布尔值)。 应用程序可以使用win32con模块中的虚拟键代码常量来获取vKey值。

例如,测试“大写锁定”键:

>>> 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

2
这不是在GUI编程中的工作方式。你不会调用一个方法来检查按键是否被按下。相反,当按键被按下时,你会收到消息。假设你有一个接收输入的窗口,那么你需要在窗口过程或Python win32api术语中的消息映射中响应WM_KEYDOWN消息的到达。
您的编辑显示您没有使用消息队列,这是相当不寻常的。您可以尝试通过调用 GetAsyncKeyState() 来实现您想要的效果。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接