Python PyWin32 在后台向 DirectX 游戏发送密钥

Posted

技术标签:

【中文标题】Python PyWin32 在后台向 DirectX 游戏发送密钥【英文标题】:Python PyWin32 send keys to DirectX game in the background 【发布时间】:2021-09-07 06:54:39 【问题描述】:

我制作了一个脚本,可以在后台向任何应用发送密钥,但它在 DirectX 上不起作用。

我正在尝试让我的角色在一个名为“roblox”的游戏中跳跃。

这是脚本

import time
import psutil
import win32con
from win32 import win32gui
from win32 import win32api
from win32 import win32process

keyDict = " ": 0x20
for i in range(0x41, 0x5A+1):
    keyDict[chr(i)] = i

def CloseExe(exeName):
    ID2Handle=
    def get_all_hwnd(hwnd,mouse):
      if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
        nID=win32process.GetWindowThreadProcessId(hwnd)
        del nID[0]
        for abc in nID:
          try:
            pro=psutil.Process(abc).name()
          except psutil.NoSuchProcess:
            pass
          else:
            if pro == exeName:
                     win32gui.PostMessage(hwnd,win32con.WM_CLOSE,0,0)

    win32gui.EnumWindows(get_all_hwnd, 0)

def SendKeysSensitive(exeName, keysToSend):
    mID2Handle=
    def get_all_hwnd(hwnd,mouse):
      hwndTwo = win32gui.GetWindow(hwnd, win32con.GW_CHILD)
      if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
        nID=win32process.GetWindowThreadProcessId(hwnd)
        del nID[0]
        for abc in nID:
          try:
            pro=psutil.Process(abc).name()
          except psutil.NoSuchProcess:
            pass
          else:
            if pro == exeName:
                for key in keysToSend:
                     win32gui.PostMessage(hwndTwo, win32con.WM_CHAR, key, 0)

def SendKeys(exeName, keysToSend):
    mID2Handle=
    def get_all_hwnd(hwnd,mouse):
      hwndTwo = hwnd
      if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
        nID=win32process.GetWindowThreadProcessId(hwnd)
        del nID[0]
        for abc in nID:
          try:
            pro=psutil.Process(abc).name()
          except psutil.NoSuchProcess:
            pass
          else:
            if pro == exeName:
                for key in keysToSend:
                     win32gui.PostMessage(hwndTwo, win32con.WM_CHAR, key, 0)

    win32gui.EnumWindows(get_all_hwnd, 0)


def TranslateKeys(text):
    outKeys = []
    for char in text:
        outKeys.append(keyDict.get(char.upper()))
    return outKeys

def ExE(name):
    return name

if __name__ == '__main__':
    prog = ExE("RobloxPlayerBeta.exe")
    jump = TranslateKeys(" ")
    SendKeys(prog, jump)

由于“RobloxPlayerBeta.exe”是 DirectX,因此无法正常工作。

我无法打开应用程序,它需要 100% 在后台运行。

这可能吗?

【问题讨论】:

有人吗?如果不可能,至少告诉我 【参考方案1】:

好吧,我遇到了类似的问题,我找到了解决方案。我不确定这是否是您要查找的内容,但有一个用于将输入发送到 DirectX 应用程序的库

它叫做PyDirectInput。它本质上是 PyAutoGui,但适用于 DirectX

pip install pydirectinput

就 roblox 而言,我以前用过它,可以说它确实有效。

source code

【讨论】:

谢谢,但是我说“我无法打开应用程序,它需要 100% 在后台运行。”

以上是关于Python PyWin32 在后台向 DirectX 游戏发送密钥的主要内容,如果未能解决你的问题,请参考以下文章

python操作word,关于win32com

给Python安装pywin32模块

PyWin32和Python 3.8.0

pywin32下载与安装

python pywin32 里面操作窗体,获取窗体里面的数据,在函数GetDlgItem函数中,怎么获取第二个参数的值?

Python:通过pywin32模块批量将rtf或docx另存为doc格式