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 pywin32 里面操作窗体,获取窗体里面的数据,在函数GetDlgItem函数中,怎么获取第二个参数的值?