当前位置: 首页 > 面试题库 >

在Python中使用win32api检测按键

骆昊阳
2023-03-14
问题内容

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

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

修订:

import win32api

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

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

编辑:

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

请参阅修订的代码。


问题答案:

win32api只是底层Windows低层库的接口。见GetAsyncKeyState功能:

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

句法

SHORT WINAPI GetAsyncKeyState(
__in  int vKey
);

返回值

类型: 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

简单字母的虚拟键常量是ASCII码,因此测试“ H”键(按下键)的状态将类似于:

>>> win32api.GetAsyncKeyState(ord('H'))
1


 类似资料:
  • 问题内容: 我正在用python开发一个秒表类型的程序,我想知道如何检测是否按下了一个键(例如p表示暂停,s表示停止),而我不希望它像raw_input这样等待用户输入,然后继续执行。有人知道如何在while循环中执行此操作吗? 另外,我想做这个跨平台的,但是如果那不可能,那么我的主要开发目标是linux 问题答案: 对于那些在窗户上努力寻找可行答案的人,我的是:pynput 上面的功能将打印你按

  • 问题内容: 我正在命令窗口(Windows 7,Python 3.1)中运行进程,我希望用户通过按ESCape键来中止该进程。但是,按ESCape键似乎没有执行任何操作:-(,循环永不中断。我也尝试从IDE(机翼)内部运行脚本,但同样,循环也不能中断。 以下是我的概念验证测试的简化版本… 如果有人能告诉我我可能会出问题的地方,我将不胜感激。 问题答案: Python 3字符串是unicode,因此

  • 问题内容: 我需要知道现在正在按下哪个键。我不是要捕获一些特定的键来触发事件或类似的事情, 我想知道现在按下了哪些键并显示它们的列表。 我还需要捕获特殊键,例如F1 … F12,Shift,Alt,Home,Windows等。基本上,键盘上的所有键都是如此。 我该如何在python中做到这一点?如何捕获键盘事件? 编辑 就是这样,您知道我不是要创建键盘记录程序。我正在尝试做一个诊断工具(我在笔记本

  • 我试图澄清win32api。我只是举了一个简单的例子。获取记事本窗口,将鼠标移动到一个位置,单击并写入字符串。但它不起作用。有什么问题? 谁能为我澄清一下lParam参数是什么? 它是做什么的,它是什么类型,它应该看起来怎么样?

  • 问题内容: 我目前正在使用 要检测用户何时按下我的glSurfaceView,有没有一种方法可以检测何时长按。我猜如果我在开发文档中找不到很多东西,那将是围绕方法的某种变通。类似于注册ACTION_DOWN并查看ACTION_UP之前有多长时间。 如何使用opengl-es在android上检测长按? 问题答案: 尝试这个:

  • 问题内容: 在Windows OS(64位)下运行python26时.....我遇到了类似以下错误: 要么 我已经完成了python26的msi安装,所有dll都可以在C:\ Python26 \ Lib \ site-packages \ pywin32_system32下找到 问题答案: 将pywintypes26.dll和pythoncom26.dll从复制到->解决问题后!