我正在尝试使用win32api通过特定按键来打破Python中的循环。怎么会这样呢?
以下代码中 win32api.KeyPress('H')的实际版本是多少?
修:
import win32api
while True :
cp = win32api.GetCursorPos()
print cp
if win32api.KeyPress('H') == True :
break
我希望能够通过按 h 键来打破循环。
修改
我正在尝试制作一个反复报告鼠标位置的程序,我需要一种机制来退出所述程序。
请参阅修订后的代码。
答案 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,即使你试图找到要发送的密钥代码也非常有用。如果您在后台运行代码并希望从窗口外部中断循环,这将非常有用。
带有Windows键的