winapi - 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.
我如何解决它 ?
解决方案
推荐阅读
- spring-boot - 如何使用 Springboot 自定义过滤器记录跟踪 id
- android - WifiManeger#scanResults() 在 Android 6.0 中总是返回空
- google-sheets - Google 表格 - 动态多下拉菜单
- docker - 尝试安装外部插件时出现“docker:无效的参考格式”
- json - 使用 pandas 反序列化复杂的 JSON
- java - 我想以共享偏好保存,但应用程序崩溃
- java - 带有 Thread 类的 StampedLock 的奇怪行为
- c# - 如何 linq 选择 WHERE 特定属性不为空?
- python - 为什么 scaler.inverse_transform 为 sklearn 中的相同输入返回不同的值?
- ios - iOS 和 FirebaseCrashlytics