大家,我想请教一下,pywin32中我用sendmessage模拟按下弹起键盘,但是只有按下有效是怎么回事,具体表现为比如在输入框中模拟输入a,一次按下,一次弹起,用sendmessage输入框中没有出现a,但是在游戏中用会按住a中一直走,用postmessage则会输入两个a,游戏中也一直按住a,现在电脑不在身边,只有这个图片请见谅

大家,我想请教一下,pywin32中我用sendmessage模拟按下弹起键盘,但是只有按下有效是怎么回事,具体表现为比如在输入框中模拟输入a,一次按下,一次弹起,用sendmessage输入框中没有出现a,但是在游戏中用会按住a中一直走,用postmessage则会输入两个a,游戏中也一直按住a,现在电脑不在身边,只有这个图片请见谅

关注引自免费微信小程序:皆我百晓生
看起来你在尝试使用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()),以及你的操作系统和目标应用程序是否对按键消息有特殊处理。此外,如果问题仍然无法解决,你可能需要进一步调试,例如打印日志来确认消息是否正确发送,或者查看是否有其他因素干扰了按键的模拟。