【发布时间】: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
有人可以解释为什么它不起作用,如果可能的话,如何解决它?
【问题讨论】:
-
感谢您的客气话,@IInspectable。我使用 PostMessage,因为在那种情况下,SendMessage 和 PostMessage 都有同样的问题,同样的方式。问题出在它们的 lParameter 上。看起来我在那里发布了错误的代码部分,使用正确的 lParameters :) 我在原始代码上使用 lParameter 0 调用了 win32con.WM_KEYUP,这导致了一些问题。不过,还是谢谢你。您的评论让我更仔细地查看了我的代码。如果没有您的评论,我不会注意到 lParameters 的问题和重要性:)
标签: python windows winapi pywin32