Pywinauto:如何调整活动窗口的大小

     2023-02-21     173

关键词:

【中文标题】Pywinauto:如何调整活动窗口的大小【英文标题】:Pywinauto: How to resize active window 【发布时间】:2021-12-24 19:45:02 【问题描述】:

我正在尝试自动化一些 Windows 任务,我得到了所有打开的窗口的数据框,然后我添加了一些列以便在继续自动化之前进行一些验证。

set_focus() 函数激活窗口后,我根本无法调整任何窗口的大小,只是什么都没有发生。

我已经尝试过使用win32gui 解决方案:

current = win32gui.GetForegroundWindow()
win32gui.MoveWindow(current, 0, 0, 100, 100, True)

我也尝试将pygetwindow 函数用于resizeTosize,但也没有任何反应。

如果我运行以下命令app.move_window(x=None, y=None, width=100, height=100, repaint=True)AttributeError: 'UIAWrapper' object has no attribute 'move_window'

我的代码:

from pywinauto import Desktop
import pandas as pd

windows = Desktop(backend="uia").windows()
window = [w.window_text() for w in windows]

# Create a dataframe in order to store the windows needed
df_windows = pd.DataFrame(window, columns =['WebBrowser'])
# Filter dataframe only to show all windows from Brave web browser
df_windows = df_windows.loc[df_windows['WebBrowser'].str.contains("Brave:", case=False)]
# Add column profile from Brave
df_windows['Profile'] = df_windows['WebBrowser'].str.split(':').str[1].str.strip()
# Add column window open from Brave
df_windows['Window'] = df_windows['WebBrowser'].str.split(':').str[0].str.strip()
# Add column about the website open from Brave
df_windows['Website'] = df_windows['Window'].str.replace(" - Brave", "").str.strip()
# Filter dataframe only to show all bombcrypto game window
df_windows = df_windows.loc[df_windows['Website'] == 'GuilhermeMatheus']

print(df_windows)

for x in df_windows['WebBrowser']:
    print(x)
    app = Desktop(backend="uia").windows(title=x)[0]
    app.set_focus()
    app.move_window(x=None, y=None, width=100, height=100, repaint=True)

set_focus() 之后如何调整活动窗口的大小?

[编辑]

按照@Vasily Ryabov 的提示,我下载了Windows SDK 以安装具有Inspect.exe 的功能,还遵循pywinauto 的文档Getting Start 主题和Accessibility tools - Inspect 提供的文档我是能够通过 Inspect 找到我的应用程序,Resize 选项可作为以下证据:

所以我尝试了以下命令: 1º:

app.iface_transform.Resize(200, 600)  

错误:

app.iface_transform.Resize(200, 600)
_ctypes.COMError: (-2146233079, None, (None, None, None, 0, None))

2º:

app.Resize(200, 600)  

错误:

AttributeError: 'UIAWrapper' object has no attribute 'Resize'

3º:

app.wrapper_object.Resize(200, 600)  

错误:AttributeError: 'UIAWrapper' object has no attribute 'wrapper_object'

【问题讨论】:

【参考方案1】:

我建议为 UIAWrapper 对象尝试这些方法(假设 appUIAWrapper 实例)。在您的代码中,它应该如下所示:

app.iface_transform.Move(x, y)
app.iface_transform.Resize(width, height)

要了解此 TransformPattern 是否可用,让我们在所选窗口的“操作”菜单中使用 Inspect.exe 检查它:

在下一个主要版本(尚未发布)中,我们实现了包含方法 move_window 的 WindowWrapper,该方法使用上述 TrasformPattern 方法。

【讨论】:

嗨@Vasily,感谢您的回答和解释。我仍然面临错误:AttributeError: 'UIAWrapper' object has no attribute 'wrapper_object' 哦,抱歉,请跳过链中的.wrapper_object() 调用。此外,如果应用程序端未实现转换模式,您将收到异常NoPatternInterfaceError 我真的不知道我仍然遇到的问题是什么:app.iface_transform.Resize(300, 300) _ctypes.COMError: (-2146233079, None, (None, None, None, 0, None))。抱歉打扰了,你能帮帮我吗?如果我理解正确,我的应用程序是 UIAWrapper,因为我通过从 app = Desktop(backend="uia").windows(title=x)[0] 调用从数据框再次创建(set_focus() 甚至可以工作) 也许你只需要Resize。它适用于其他***窗口吗?我的意思是方法.windows() 返回的列表项。如果未提供参数,它将返回所有***窗口。此外,我建议检查 Inspect.exe “操作”菜单项是否适用于此窗口和其他窗口。 我尝试从github.com/pywinauto/py_inspect 运行Inspect.exe,但我没有选项栏窗格,所以我看不到Actions。我还尝试了.windows() 的列表项,如果我尝试app.iface_transform.Resize(width, height),我会收到错误NoPatternInterfaceError,正如你之前所说的,但我不知道究竟是为什么。我如何知道是否实现了转换模式?但无论哪种方式,我都会从 app 得到不同的错误,正如我在上一个回答中所说:app.iface_transform.Resize(300, 300) _ctypes.COMError: (-2146233079, None, (None, None, None, 0, None))

OpenGL 闪烁/损坏,窗口调整大小和 DWM 处于活动状态

】OpenGL闪烁/损坏,窗口调整大小和DWM处于活动状态【英文标题】:OpenGLflickering/damagedwithwindowresizeandDWMactive【发布时间】:2012-05-2319:44:55【问题描述】:我有一个wxWidgets应用程序,它有许多子opengl窗口。我正在使用我自己的GL画... 查看详情

出现键盘后调整活动大小

】出现键盘后调整活动大小【英文标题】:Activityresizedafterkeyboardisappears【发布时间】:2020-01-2911:22:12【问题描述】:我有一个活动,其中包含一个由包含标记添加的片段(在活动的顶部)和一个主要的中心片段。主片段还包含ed... 查看详情

仅当活动窗口为给定大小时,如何禁用热键?

】仅当活动窗口为给定大小时,如何禁用热键?【英文标题】:Howtodisableahotkeyonlyiftheactivewindowisagivensize?【发布时间】:2021-11-0218:02:36【问题描述】:我只想在活动窗口为500px宽和300px高的情况下禁用Shift,如何编写这样的脚本?... 查看详情

如何使 Tkinter 窗口无法调整大小?

】如何使Tkinter窗口无法调整大小?【英文标题】:HowtomakeaTkinterwindownotresizable?【发布时间】:2016-09-2314:57:09【问题描述】:我需要一个使用Tkinter模块创建静态(不可调整大小)窗口的Python脚本。我有一个非常简单的Tkinter脚本,... 查看详情

创建特定窗口后如何调整其大小?

】创建特定窗口后如何调整其大小?【英文标题】:Howcaniresizeaspecificwindowafterit\'screated?【发布时间】:2011-05-3005:37:55【问题描述】:我想在创建后调整某些游戏窗口(DirectX)的大小,游戏窗口允许通过鼠标从边缘调整大小。但我... 查看详情

如何使用子窗口中的句柄获取父窗口的调整大小事件?

】如何使用子窗口中的句柄获取父窗口的调整大小事件?【英文标题】:Howtogettheresizeeventofaparentwindowusingitshandleinchildwindow?【发布时间】:2014-01-1009:17:04【问题描述】:我已经使用mfc制作了浏览器窗口。然后使用SetParent将其添加... 查看详情

如何在调整窗口大小时锁定纵横比?

】如何在调整窗口大小时锁定纵横比?【英文标题】:Howtolockaspectratiowhileresizingthewindow?【发布时间】:2018-06-1103:01:40【问题描述】:我有一个qt应用程序,它会打开一个显示图像的窗口。我希望能够调整窗口大小并保持窗口的纵... 查看详情

如何在 Android Studio 中调整 AVD 模拟器窗口的大小?

】如何在AndroidStudio中调整AVD模拟器窗口的大小?【英文标题】:HowcanIresizetheAVDemulatorwindowinAndroidStudio?【发布时间】:2015-06-2613:34:13【问题描述】:我看到很多帖子询问如何重新调整AVD模拟器窗口的大小,但是我没有找到任何工... 查看详情

如何创建具有多个显示三角形的调整大小窗口?

】如何创建具有多个显示三角形的调整大小窗口?【英文标题】:Howtocreateresizewindowwithmultipledisclosuretriangle?【发布时间】:2012-01-1717:56:25【问题描述】:我想创建一个类似于“FinderGetInfo”窗口的窗口,其中包含多个显示三角形... 查看详情

如何停止在对话框中打开的键盘上调整大小/向上推的活动?

】如何停止在对话框中打开的键盘上调整大小/向上推的活动?【英文标题】:Howtostopactivityresizing/pushinguponkeyboardopenindialog?【发布时间】:2019-02-0816:25:42【问题描述】:我有一个活动,它应该对键盘打开做出反应,所以在清单中... 查看详情

何时(以及如何)布局 Win32 窗口的子窗口以响应调整大小?

】何时(以及如何)布局Win32窗口的子窗口以响应调整大小?【英文标题】:When(andhow)tolayoutthechildrenofaWin32windowinresponsetoaresize?【发布时间】:2012-06-0319:23:48【问题描述】:调整窗口大小时,Windows会发送几条消息:WM_GETMINMAXINFOWM_... 查看详情

调整浏览器窗口大小时如何显示带点的文本? [复制]

】调整浏览器窗口大小时如何显示带点的文本?[复制]【英文标题】:Howtodisplayatextwithdotswhenresizingthebrowserwindow?[duplicate]【发布时间】:2020-02-1501:34:41【问题描述】:当我使用CSS调整浏览器窗口大小时,如何用点显示我的文本?... 查看详情

如何使用 C# 为 UIAutomation 目的调整 UIA 窗口的大小?

】如何使用C#为UIAutomation目的调整UIA窗口的大小?【英文标题】:HowtoresizeUIAwindowforUIAutomationpurposes,usingC#?【发布时间】:2013-07-2601:04:25【问题描述】:我使用VisualStudio为Win32应用程序创建了一些编码的UI测试。我希望窗口大小保... 查看详情

如何在窗口调整大小时更改高度 div?

】如何在窗口调整大小时更改高度div?【英文标题】:Howtochangeheightdivonwindowresize?【发布时间】:2011-02-1501:32:08【问题描述】:我的网站上有一个div,它应该是窗口的高度。这是我得到的:$(document).ready(function()varbodyheight=$(document... 查看详情

如何在窗口调整大小时隐藏 Facebook 聊天框?

】如何在窗口调整大小时隐藏Facebook聊天框?【英文标题】:HowtohideFacebookchatboxesonWindowresize?【发布时间】:2013-04-0509:21:45【问题描述】:我试图在Jquery中重现Facebook如何在视口大小更改时隐藏或显示打开的聊天框。基本上,如果... 查看详情

如何让多个 d3 窗口调整大小事件

】如何让多个d3窗口调整大小事件【英文标题】:Howtohavemultipled3windowresizeevents【发布时间】:2014-12-1202:18:26【问题描述】:我在一页上有三个svg元素,每个元素都由D3陪同。每个人都有自己的页面调整逻辑,由simplemoduleI\'vewritten... 查看详情

调整窗口大小时,如何使 SDL 窗口中的 OpenGL 视口保持静止?

】调整窗口大小时,如何使SDL窗口中的OpenGL视口保持静止?【英文标题】:HowtokeeptheOpenGLviewportinanSDLwindowstationarywhenawindowisresized?【发布时间】:2011-06-2422:30:28【问题描述】:我有一个包含OpenGL视口的SDL窗口。当用户通过拖动窗... 查看详情

在 Tailwind 中调整窗口大小时如何避免 div 混乱?

】在Tailwind中调整窗口大小时如何避免div混乱?【英文标题】:HowtoavoidthedivsdisorganizingwhenresizingthewindowinTailwind?【发布时间】:2021-02-2821:57:50【问题描述】:你好,我有一个打字稿网站当我调整窗口大小时会搞砸,结果如下:如... 查看详情