使用Python中的win32api检测键按

时间:2011-04-08 08:30:44

标签: python winapi key-bindings

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

以下代码中 win32api.KeyPress('H')的实际版本是多少?

修:

import win32api

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

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

修改

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

请参阅修订后的代码。

3 个答案:

答案 0 :(得分:11)

win32api只是底层Windows低级库的接口。 请参阅GetAsyncKeyState Function

  

确定在调用函数时键是向上还是向下,以及在上次调用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

答案 1 :(得分:2)

这不是它在GUI编程中的工作方式。您没有调用方法来检查按键。相反,当按下按键时,您会收到消息。假设您有一个接收输入的窗口,那么您需要响应窗口过程中到达的WM_KEYDOWN消息,或者使用Python win32api术语中的消息映射。


您的编辑显示您没有使用相当不寻常的消息队列。您可以通过致电GetAsyncKeyState()来实现您的目标。

答案 2 :(得分:2)

检查github上的python tiler,即使你试图找到要发送的密钥代码也非常有用。如果您在后台运行代码并希望从窗口外部中断循环,这将非常有用。

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

带有Windows键的

代码: https://code.google.com/p/python-windows-tiler/source/browse/pwt/hotkey.py?r=df41af2a42b6304047a5f6f1f2903b601b22eb39