大家,我想请教一下,pywin32中我用sendmessage模拟按下弹起键盘,但是只有按下有效是怎么回事,具体表现为比如在输入框中模拟输入a,一次按下,一次弹起,用sendmessage输入框中没有出现a,但是在游戏中用会按住a中一直走,用postmessage则会输入两个a,游戏中也一直按住a,现在电脑不在身边,只有这个图片请见谅
pywin32使用sendmessage模拟按键,键盘无法弹起
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
看起来你在尝试使用
pywin32
库中的SendMessage
函数来模拟按键操作,但似乎遇到了一些问题。根据你的描述,键按下后没有弹起,这可能是因为按键消息没有正确传递给目标应用程序。首先,让我们检查一下你的代码。从提供的代码片段来看,存在一些语法错误和格式问题,我将修正这些问题,并提供一个简化版的示例代码。注意,这里的代码是基于你的原始意图修改的,用于模拟在活动窗口按下并释放回车键和箭头键(上)的操作。
import time import win32con import win32api import win32gui def press_key(ch): win32api.keybd_event(ch, 0, 0, 0) # 按下按键 time.sleep(0.05) # 短暂延时,确保按键被接收 win32api.keybd_event(ch, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键 def simulate_input(): window = win32gui.GetForegroundWindow() # 模拟按下并释放回车键 press_key(win32con.VK_RETURN) # 模拟按下并释放向上箭头键 press_key(win32con.VK_UP) if __name__ == "__main__": simulate_input()
这段代码使用了
win32api.keybd_event
函数,这是一个更直接的方式来模拟按键事件,而不是通过PostMessage
。这样可以更容易地控制按键的按下和释放。如果你想要在特定的时间点触发这些操作,可以考虑使用
threading.Timer
来定时调用simulate_input()
函数。另外,如果你想在特定的热键组合下执行这个操作,可以使用keyboard
库,不过需要注意的是,它可能与pywin32
的模拟方式不完全兼容,因此我在这里没有使用keyboard
库。如果你的问题依然存在,请确认你的程序是否正确获取到了当前活动窗口(
GetForegroundWindow()
),以及你的操作系统和目标应用程序是否对按键消息有特殊处理。此外,如果问题仍然无法解决,你可能需要进一步调试,例如打印日志来确认消息是否正确发送,或者查看是否有其他因素干扰了按键的模拟。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥100 求懂行的大ge给小di解答下!
- ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
- ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
- ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
- ¥100 华为手机私有App后台保活
- ¥15 sqlserver中加密的密码字段查询问题
- ¥20 有谁能看看我coe文件到底哪儿有问题吗?
- ¥20 我的这个coe文件到底哪儿出问题了
- ¥15 matlab使用自定义函数时一直报错输入参数过多
- ¥15 设计一个温度闭环控制系统