win32gui 选择两个同名窗口

Posted

技术标签:

【中文标题】win32gui 选择两个同名窗口【英文标题】:win32gui selecting two windows with the same name 【发布时间】: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 实例使用不同的变量名(我的意思是 app1app2)怎么样?我刚刚发现 pywinauto 的方法 .move_window() 仅适用于 backend="win32"。由于您直接使用keyboard.SendKeys,因此对于此应用实例使用backend="win32" 并使用方法dlg_spec.move_window() 是有意义的。 keyboard.SendKeys 仅适用于启动器,并非游戏的实际实例。 更新:我确实找到了一个解决方法,将我的世界的窗口分辨率设置为 1920x540,这意味着它们都已经出现在屏幕的上半部分,我只需将 1 移动到下半部分,不过我不是特别喜欢这个解决方案。 好的,我现在没有太多时间深入了解 Minecraft。您可以将解决方法发布为答案,如果您愿意,可以接受。 【参考方案1】:

将默认的 Minecraft 窗口大小设置为 1920x520 将使两个窗口都出现在屏幕的上半部分,因此只需将一个窗口移动到下半部分。

【讨论】:

以上是关于win32gui 选择两个同名窗口的主要内容,如果未能解决你的问题,请参考以下文章

win32gui.FindWindow 找不到窗口

python win32api win32gui win32con 窗口句柄 发送消息 常用方法 键盘输入

使用 win32gui 使窗口居中

python win32gui 查找子窗口

win32api win32gui win32con 窗口句柄 发送消息 常用方法

Python win32gui 获取窗口中虚拟光标的当前位置