【问题标题】:Python PyWin32 send keys to DirectX game in the backgroundPython PyWin32 在后台向 DirectX 游戏发送密钥
【发布时间】: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% 在后台运行。

这可能吗?

【问题讨论】:

  • 有人吗?如果不可能,至少告诉我

标签: python pywin32 roblox


【解决方案1】:

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

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

pip install pydirectinput

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

source code

【讨论】:

  • 谢谢,但是我说“我无法打开应用程序,它需要 100% 在后台运行。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多