标签: pywinauto

为什么我不能将控件标识符写入文件或将它们分配给字符串或列表

我正在使用 pywinauto 列出特定应用程序的控件标识符。我可以做到这一点。但是,我想将这些控件标识符保存到文件中,或者更好地将它们分配给字符串或列表,但无法写入或分配它们......有谁知道如何以编程方式将这些标识符获取到文件或内存?

示例代码:

import os
import time
from pywinauto import application
from SendKeys import SendKeys


app=application.Application()
app.start_(r"C:\Program Files\myapp.exe")


app.dlg.print_control_identifiers()

Control Identifiers:
Button - 'Exit'   (L900, T649, R975, B672)
        'Button' 'Button0' 'Button1' 'Exit' 'ExitButton'
Button - 'About'   (L339, T646, R410, B672)
        'About' 'AboutButton' 'Button2'
...
...
...
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

my_App_ci = app.dlg.print_control_identifiers()
Run Code Online (Sandbox Code Playgroud)

和:

my_App_ci = []
my_App_ci.append(app.dlg.print_control_identifiers())
Run Code Online (Sandbox Code Playgroud)

无济于事....

python pywinauto

4
推荐指数
1
解决办法
2821
查看次数

带有部分标题的 Python pywinauto 搜索窗口

有没有办法让pywinauto只用部分标题找到一个窗口?

这是我的代码:

import pywinauto

pwa_app = pywinauto.application.Application()
w_handle = pywinauto.findwindows.find_windows(title=u'Minitab Professional 5.1 64bit - 3333348.temp.project',
                                              class_name='Window')[0]
Run Code Online (Sandbox Code Playgroud)

问题是temp.project每次打开软件时之前的数字都会改变,因此我无法pywinauto找到正确的窗口。

python pywinauto

4
推荐指数
1
解决办法
2万
查看次数

pywinauto 等待和聚焦

我正在尝试使用 pywinauto 自动化 Windows 应用程序。我可以选择菜单并打开“打开文件窗口”。我需要等待此窗口出现,然后将焦点设置到该窗口并单击一些按钮。

由于某种原因不起作用。

def open_file():
    return pywinauto.findwindows.find_windows(best_match=u'Open File', class_name='#32770')[0]
pywinauto.timings.WaitUntilPasses(20, 0.5,open_file)
print('wait for window')
open_file.SetFocus()
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,它说 open_file 没有 SetFocus 选项。

我是 pywinauto 的初学者,我很确定这很容易解决,但我不知道如何:/

python wait pywinauto

4
推荐指数
1
解决办法
9104
查看次数

Pywinauto:无法将窗口带到前台

使用基于Python的自动化工具.

想象一下,有一个运行的应用程序池:

APPS_POOL = ['Chrome', 'SomeApp', 'Foo']
Run Code Online (Sandbox Code Playgroud)

该脚本在循环中运行(每秒)并需要在它们之间随机切换:

# Init App object
app = application.Application()

# Select random app from the pull of apps
random_app = random.choice(APPS_POOL)
app.connect(title_re=".*%s" % random_app)
print 'Select "%s"' % random_app

# Access app's window object
app_dialog = app.window_(title_re=".*%s.*" % random_app)

if app_dialog.Exists():
    app_dialog.SetFocus()
Run Code Online (Sandbox Code Playgroud)

第一次它工作正常,但每隔一个 - 窗口不会被带到前台.有任何想法吗?

编辑:脚本从Win7 CMD运行.一旦将焦点设置为其他窗口,系统是否有可能"阻止"CMD以某种方式设置焦点?

python pywinauto

4
推荐指数
2
解决办法
1万
查看次数

pywinauto:如何选择这个对话框?使用哪种间谍工具?我需要什么信息?

如何在 7-zip“添加到存档”对话框的第一个字段中写入“hello”?

到目前为止,我设法使用此触发 7-zip (windows 64x)“添加到存档”对话框

from pywinauto.application import Application
app = Application().start(r"C:\Program Files\7-Zip\7zFM.exe") #set the app
app.top_window_().Edit.type_keys(r"C:\Users\me\Desktop{ENTER}") 
app.top_window_().SysListView32.Select(r'test.txt') #select files in list
app.top_window_().ToolbarAdd.TypeKeys("{ENTER}") #apply
Run Code Online (Sandbox Code Playgroud)

然后我无法选择“添加到存档”对话框。

1:这不起作用。我猜是因为它没有找到对话框。如果是这样,为什么?

app.window(title_re="Add to Archive", class_name="#32770").print_control_identifiers()
Run Code Online (Sandbox Code Playgroud)

2:这也不起作用:

app.window(title_re="Add to Archive", class_name="#32770").Edit.type_keys("hello")
Run Code Online (Sandbox Code Playgroud)

3:我尝试使用查找我的应用程序上的所有可用对话框print(app.windows())

但它打印出这个:

[<pywinauto.controls.win32_controls.DialogWrapper object at 0x0000000004033D68>, <pywinauto.controls.common_controls.ToolTipsWrapper object at 0x0000000004089128>, <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x0000000004089208>, <pywinauto.controls.win32_controls.DialogWrapper object at 0x
00000000040893C8>, <pywinauto.controls.win32_controls.DialogWrapper object at 0x0000000004089390>]
Run Code Online (Sandbox Code Playgroud)

我没有看到任何“添加到存档”窗口,为什么?这些东西是什么(例如 in32_controls.DialogWrapper)?

对话框中 不同间谍工具spy++的打印屏幕在此输入图像描述

在第一个控件上进行间谍++(它说编辑,但是au 在此输入图像描述

对话框的spectr.exe: 在此输入图像描述

python automation 7zip pywinauto python-3.x

4
推荐指数
1
解决办法
1万
查看次数

使用 pywinauto 获取窗口的属性

有没有办法使用 pywinauto获取窗口的属性,例如: titlecontrol_type ?

因为看起来您可以通过它们搜索窗口,但是没有指向这些属性的窗口属性。

python pywinauto

4
推荐指数
1
解决办法
6125
查看次数

使用 pywinauto 从组合框中选择一个项目

我正在尝试使用 pywinauto 自动化 Visual Basic 应用程序,后端 =“win32”。除了从组合框中选择一项之外,我可以处理所有事情。这个特定的组合框取决于另一个组合框的选择

这是代码:

app.ThunderRT6MDIForm.xxxxx.ComboBox3.select("abc") # this correctly selects from the combobox
app.ThunderRT6MDIForm.xxxxx.ComboBox4.select(1) #This one gives error
Run Code Online (Sandbox Code Playgroud)

以及相同的错误:

IndexError: Combobox has 0 items, you requested item 1 (0 based)
Run Code Online (Sandbox Code Playgroud)

控制标识符返回:

        ComboBox - 'abc'    (L136, T206, R376, B227)
       | ['ComboBox3', 'abc co-brandingComboBox2']
       | child_window(title="abc", class_name="ThunderRT6ComboBox")
       | 
       |    | Edit - ''    (L139, T234, R356, B249)
       |    | ['abc co-brandingEdit10', 'Edit12']
       |    | child_window(class_name="Edit")

        ComboBox - ''    (L136, T157, R376, B178)
       | ['4', 'ComboBox4']
       | child_window(class_name="ThunderRT6ComboBox")
       |    | …
Run Code Online (Sandbox Code Playgroud)

pywinauto

4
推荐指数
1
解决办法
1万
查看次数

WindowsContext:OleInitialize()失败:“ COM错误0x80010106 RPC_E_CHANGED_MODE(未知错误0x0ffffffff80010106)”

我正在Windows 8中的python 3.4.4(32位)中进行编程。我正在使用PyQt5运行一个应用程序,该应用程序运行良好,但是由于我安装了pywinauto 0.6.4来将重点放在其他应用程序上,因此:

other_app = pywinauto.Application().connect(process=int(code))
other_app.top_window().set_focus()
Run Code Online (Sandbox Code Playgroud)

如果我运行My_app = QApplication(sys.argv),则在控制台中显示下一条警告消息,没有其他信息:

QWindowsContext: OleInitialize() failed:  "COM error 0x80010106 RPC_E_CHANGED_MODE (Unknown error 0x0ffffffff80010106)"
SetProcessDpiAwareness failed: "COM error 0x80070005  (Unknown error 0x0ffffffff80070005)"
Run Code Online (Sandbox Code Playgroud)

我怀疑这是因为pywinautoPyQt5.QtWidgets.QApplication模块之间存在冲突。在“警告”之后,程序运行良好,但是我现在仍然不知道如何解决它。

这是最小,完整和可验证的示例:

from PyQt5.QtWidgets import QApplication
import pywinauto
import sys


def main():
    app = QApplication(sys.argv)
    app.exec_()


if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

python pywinauto pyqt5

4
推荐指数
1
解决办法
1641
查看次数

pywinauto 的滚动问题

我正在尝试滚动 Excel 文档(使用 pywinauto),但它似乎不起作用。

代码:

app = Application(backend="uia").connect(process=8876)
win = app.top_window()
win.set_focus()
win.wheel_mouse_input(wheel_dist=10)
Run Code Online (Sandbox Code Playgroud)

set_focus有效但滚动不起作用,我也尝试使用wheel_dist没有成功。

另一个问题,有没有办法向右/向左滚动?

谢谢。

python pywinauto

3
推荐指数
1
解决办法
4725
查看次数

使用 PyWinAuto 返回所有桌面窗口

我正在尝试使用 PyAutoWin 从我的机器返回所有窗口。最终目标是稍后将此列表缩小到窗口子集,以使用混合方法实现自动化(调整大小和执行抓取操作)。

然而,我在最基本的任务上失败了:返回所有窗口。我的代码是:

import pywinauto

print(pywinauto.findwindows.enum_windows())
Run Code Online (Sandbox Code Playgroud)

并收到此错误:

Traceback (most recent call last):
  File "app.py", line 4, in <module>
    print(pywinauto.findwindows.enum_windows())
  File "C:\Users\*\.virtualenvs\scraper-j58Iv-wO\lib\site-packages\pywinauto\findwindows.py", line 368, in enum_windows
    win32functions.EnumWindows(proc, 0)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: expected WinFunctionType instance instead of WinFunctionType
Run Code Online (Sandbox Code Playgroud)

我尝试实例化 Desktop() 对象并将其传递给 enum_windows() 方法,但它不接受参数。

任何帮助是极大的赞赏!

此致

python pywinauto

3
推荐指数
1
解决办法
5544
查看次数

标签 统计

pywinauto ×10

python ×9

7zip ×1

automation ×1

pyqt5 ×1

python-3.x ×1

wait ×1