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 实例使用不同的变量名(我的意思是app1
和 app2
)怎么样?我刚刚发现 pywinauto 的方法 .move_window()
仅适用于 backend="win32"
。由于您直接使用keyboard.SendKeys
,因此对于此应用实例使用backend="win32"
并使用方法dlg_spec.move_window()
是有意义的。
keyboard.SendKeys 仅适用于启动器,并非游戏的实际实例。
更新:我确实找到了一个解决方法,将我的世界的窗口分辨率设置为 1920x540,这意味着它们都已经出现在屏幕的上半部分,我只需将 1 移动到下半部分,不过我不是特别喜欢这个解决方案。
好的,我现在没有太多时间深入了解 Minecraft。您可以将解决方法发布为答案,如果您愿意,可以接受。
【参考方案1】:
将默认的 Minecraft 窗口大小设置为 1920x520 将使两个窗口都出现在屏幕的上半部分,因此只需将一个窗口移动到下半部分。
【讨论】:
以上是关于win32gui 选择两个同名窗口的主要内容,如果未能解决你的问题,请参考以下文章
python win32api win32gui win32con 窗口句柄 发送消息 常用方法 键盘输入