程序对我在 Python 中使用 win32api 发送的消息没有反应
Posted
技术标签:
【中文标题】程序对我在 Python 中使用 win32api 发送的消息没有反应【英文标题】:The program not reacting to the message I sent with win32api in Python 【发布时间】:2021-06-10 16:31:42 【问题描述】:每个人。
我试图通过远程控制一些程序来学习winapi/pywin32。所以我决定尝试一些不同的东西并选择The Powder Toy 进行测试。然后我以that answer为例,写了这个(也用Spy++来确定一些参数):
import win32gui
import win32con
import win32api
from time import sleep
hwndMain = win32gui.FindWindow(None, "The Powder Toy")
while True:
win32api.PostMessage(hwndMain, win32con.WM_KEYDOWN, 0x44, 2097153)
win32api.PostMessage(hwndMain, win32con.WM_KEYUP, 0x44, 0)
sleep(1)
它需要 HWND,因为它应该是,也向 The Powder Toy 的窗口发送类似的消息,但由于某种原因它没有反应。例如:
当我按“d”时:
...WM_KEYDOWN nVirtKey:'D'cRepeat:1 ScanCode:20fExtended:0fAltDown:0fRepeat:0fUp:0
...WM_CHAR chCharCode:'100'(100)cRepeat:1 ScanCode:20fExtended:0fAltDown:0fRepeat:0fUp:0
...WM_KEYUP nVirtKey:'D'cRepeat:1 ScanCode:20fExtended:0fAltDown:0fRepeat:1fUp:1
当我尝试发送“d”时:
...WM_KEYDOWN nVirtKey:'D'cRepeat:1 ScanCode:20fExtended:0fAltDown:0fRepeat:0fUp:0
...WM_CHAR chCharCode:'100'(100)cRepeat:1 ScanCode:20fExtended:0fAltDown:1fRepeat:0fUp:0
...WM_KEYUP nVirtKey:'D'cRepeat:1 ScanCode:00fExtended:0fAltDown:1fRepeat:0fUp:0
...WM_CHAR chCharCode:'100'(100)cRepeat:1 ScanCode:00fExtended:0fAltDown:1fRepeat:0fUp:0
有人可以解释为什么它不起作用,如果可能的话,如何解决它?
【问题讨论】:
别再问同样的问题了。 You can't simulate keyboard input with PostMessage. 感谢您的客气话,@IInspectable。我使用 PostMessage,因为在那种情况下,SendMessage 和 PostMessage 都有同样的问题,同样的方式。问题出在它们的 lParameter 上。看起来我在那里发布了错误的代码部分,使用正确的 lParameters :) 我在原始代码上使用 lParameter 0 调用了 win32con.WM_KEYUP,这导致了一些问题。不过,还是谢谢你。您的评论让我更仔细地查看了我的代码。如果没有您的评论,我不会注意到 lParameters 的问题和重要性:) 【参考方案1】:看来我必须将 ScanCode 和 0x44 一起提供给 WM_KEYUP 的 lParameters,才能使 The Powder Toy 工作。
【讨论】:
很高兴您得到了解决方案,感谢您的分享,如果您将它们标记为答案,我将不胜感激,这将对其他社区有益。以上是关于程序对我在 Python 中使用 win32api 发送的消息没有反应的主要内容,如果未能解决你的问题,请参考以下文章
[python win32使用Windows Installer API失败,但perl正常-我在python中做错了什么?