【发布时间】:2019-02-01 08:34:54
【问题描述】:
我正在使用 pywinauto 创建 python 代码,以自动化将两个 Minecraft 客户端设置为分屏的过程。
准备好之后,最后一步是将 Minecraft 的一个实例设置为 0x0x1920x540,另一个设置为 0x540x1920x540。但是因为两个实例的名称完全相同,我只能选择并移动一个,有没有办法同时选择两个实例并在上方和下方排列?
from pywinauto.application import Application
from pywinauto import taskbar
from pywinauto import keyboard
import pywinauto
import win32gui
import time
app = Application(backend="uia").start('D:\Games\Minecraft\MinecraftLauncher.exe')
dlg_spec = app.window(title='Minecraft Launcher')
time.sleep(3)
keyboard.SendKeys("{TAB}")
keyboard.SendKeys("{ENTER}")
time.sleep(3)
keyboard.SendKeys("{TAB}")
time.sleep(0.3)
keyboard.SendKeys("{TAB}")
time.sleep(0.3)
keyboard.SendKeys("{TAB}")
time.sleep(0.3)
keyboard.SendKeys("{ENTER}")
keyboard.SendKeys("{TAB}")
keyboard.SendKeys("{TAB}")
keyboard.SendKeys("{TAB}")
keyboard.SendKeys("{ENTER}")
time.sleep(10)
app = Application(backend="uia").start('border_stripper.exe')
dlg_spec = app.window(title='Border Stripper')
app.Dialog['Minecraft 1.11.2ListItem2'].select()
app.Dialog.Button1.click()
app.Dialog['Minecraft 1.11.2ListItem0'].select()
app.Dialog.Button1.click()
hwnd = win32gui.FindWindow(None, "Minecraft 1.11.2")
win32gui.MoveWindow(hwnd, 0, 0, 1920, 540, True)
#hwnd2 doesn't do anything because both windows appear as "Minecraft 1.11.2"
hwnd2 = win32gui.FindWindow(None, "Minecraft 1.11.2(2)")
win32gui.MoveWindow(hwnd2, 0, 540, 1920, 540, True)
【问题讨论】:
-
对不同的 Minecraft 实例使用不同的变量名(我的意思是
app1和app2)怎么样?我刚刚发现 pywinauto 的方法.move_window()仅适用于backend="win32"。由于您直接使用keyboard.SendKeys,因此对于此应用实例使用backend="win32"并使用方法dlg_spec.move_window()是有意义的。 -
keyboard.SendKeys 仅适用于启动器,并非游戏的实际实例。
-
更新:我确实找到了一个解决方法,将我的世界的窗口分辨率设置为 1920x540,这意味着它们都已经出现在屏幕的上半部分,我只需将 1 移动到下半部分,不过我不是特别喜欢这个解决方案。
-
好的,我现在没有太多时间深入了解 Minecraft。您可以将解决方法发布为答案,如果您愿意,可以接受。
标签: python-3.x user-interface win32gui pywinauto