在Python中使用win32api检测键盘按键
我想在Python中通过按下特定的键来中断一个循环,使用的是win32api。请问该怎么做呢?
在下面的代码中,win32api.KeyPress('H')的实际版本是什么?
修改版:
import win32api
while True :
cp = win32api.GetCursorPos()
print cp
if win32api.KeyPress('H') == True :
break
我希望能够通过按下h键来中断一个循环。
编辑:
我正在尝试制作一个程序,它会不断报告鼠标的位置,我需要一个方法来退出这个程序。
请查看修改后的代码。
3 个回答
你可以去GitHub上看看这个Python的平铺工具,挺有用的,特别是如果你只是想找一些按键代码来发送的话。还有,如果你在后台运行代码,想要从窗口外部中断循环,这个工具也会很有帮助。
这个项目的地址是: https://github.com/Tzbob/python-windows-tiler
包含Windows按键的代码在这里: https://code.google.com/p/python-windows-tiler/source/browse/pwt/hotkey.py?r=df41af2a42b6304047a5f6f1f2903b601b22eb39
在图形用户界面(GUI)编程中,事情并不是这样运作的。你并不是通过调用一个方法来检查键盘是否被按下。相反,当按键被按下时,系统会发送消息给你。如果你有一个窗口在接收输入,那么你需要在窗口的处理程序中响应 WM_KEYDOWN
消息,或者在 Python 的 win32api 中称为消息映射。
你的编辑显示你没有使用消息队列,这有点不寻常。你可能可以通过调用 GetAsyncKeyState()
来实现你想要的功能。
win32api
是一个用来和 Windows 底层库进行交互的接口。
可以看看这个 GetAsyncKeyState
函数:
这个函数可以判断在调用时某个键是被按下还是松开,以及这个键在上一次调用
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