首页 > 解决方案 > postmessage return 传递给系统调用的数据区域太小

问题描述

我正在尝试使用来自 win32api 的 postmessage 将输入发送到特定游戏。我已经尝试了很多方法来做到这一点,比如 pynput、pyautogui、pydirectinput、使用 ctypes 的直接输入所有这些都不起作用。仅此显示错误消息。这是我用来测试它的代码:

import win32gui, win32ui, win32con, win32api


def main():
    window_name = "SealOnline Plus Vibes       "
    hwnd = win32gui.FindWindow(None, window_name)
    win = win32ui.CreateWindowFromHandle(hwnd)

    win.PostMessage(win32con.WM_CHAR, ord(`A`), 0)
    win.PostMessage(win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
    win.PostMessage(win32con.WM_KEYUP, win32con.VK_RETURN, 0)
    win.PostMessage(win32con.WM_CHAR, ord(`B`), 0)

    
def list_window_names():
    def winEnumHandler(hwnd, ctx):
        if win32gui.IsWindowVisible(hwnd):
            print(hex(hwnd), `"` + win32gui.GetWindowText(hwnd) + `"`)
    win32gui.EnumWindows(winEnumHandler, None)

def get_inner_windows(whndl):
    def callback(hwnd, hwnds):
        if win32gui.IsWindowVisible(hwnd) and win32gui.IsWindowEnabled(hwnd):
            hwnds[win32gui.GetClassName(hwnd)] = hwnd
        return True
    hwnds = {}
    win32gui.EnumChildWindows(whndl, callback, hwnds)
    return hwnds

main()

它像这样返回

    win.PostMessage(win32con.WM_CHAR, ord(`A`), 0)
win32ui.error: CWnd::PostMessage failed - The data area passed to a system call is too small.

我如何解决它 ?

标签: winapi

解决方案


推荐阅读