【发布时间】:2016-07-06 10:29:59
【问题描述】:
重大修改大大缩小了复制范围
我在使用 Windows 10 中的 win32api keybd_event 在 Python 中使用 shift 时遇到问题。
我希望能够在换档时按下键,然后在换档时按下键。
以下文件完全按预期工作。它按下shift,然后释放shift。 (160 是左移键码)
import time
import win32con
import win32api
from win32api import keybd_event, mouse_event
time.sleep(3)
keybd_event(160, 0, 1, 0)
time.sleep(1)
keybd_event(160, 0, 2, 0)
time.sleep(1)
但是,当我将以下内容添加到末尾时,对于程序的其余部分以及在程序执行之后,直到活动窗口被更改之前,shift 都保持在键下。 (84 是 t 的键码)
keybd_event(84, 0, 1, 0)
time.sleep(1)
keybd_event(84, 0, 2, 0)
time.sleep(1)
这是最简单的,因为我可以在删除所有抽象的情况下复制问题。这严重破坏了我正在尝试做的事情并且我无法取得进展。
当发生其他键盘操作时,为什么轮班上的按键不起作用?
更新
传入 bScan 密钥代码会产生与下面代码相同的行为
time.sleep(3)
keybd_event(160, 0x10, 1, 0)
time.sleep(1)
keybd_event(160, 0x10, 2, 0)
time.sleep(1)
keybd_event(84, 0x54, 1, 0)
time.sleep(1)
keybd_event(84, 0x54, 2, 0)
time.sleep(1)
【问题讨论】:
-
您将
KEYEVENTF_EXTENDEDKEY传递给keybd_event,但没有提供bScan 参数。这背后的原因是什么?如果您尝试自动化 UI,您应该使用正确的方法来实现它:UI Automation. -
我通过
EXTENDEDKEY?我认为keybd_event(160, 0, 2, 0)是关键。我对bScan不熟悉,我会调查一下。我使键盘和鼠标自动化的原因是因为它正在与一个外部程序交互,我不允许使用它的代码(星际争霸 2 机器人,使用条款禁止这样做)编辑:我在寻找lshift扫码。我找到了一张表,但 lshift 没有任何价值。 -
@IInspectable 我已经通过了 bScan 代码,但仍然收到相同的行为。
-
为什么你在没有设置
KEYEVENTF_EXTENDEDKEY标志的情况下为KEYEVENTF_KEYUP传递相同的扫描码?您需要彻底消化文档。键盘输入绝非微不足道。无论如何,我不太喜欢帮助作弊者作弊。您只需要希望得到其他人的帮助。 -
@IInspectable 这不是为了作弊。是给人工智能的。你能指出我的文档吗?我是蟒蛇的新手。这就是我找到的全部。 docs.activestate.com/activepython/2.4/pywin32/…
标签: python windows winapi windows-10