我正在使用 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)
无济于事....
有没有办法让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找到正确的窗口。
我正在尝试使用 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的自动化工具.
想象一下,有一个运行的应用程序池:
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以某种方式设置焦点?
如何在 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)?
有没有办法使用 pywinauto获取窗口的属性,例如: title和control_type ?
因为看起来您可以通过它们搜索窗口,但是没有指向这些属性的窗口属性。
我正在尝试使用 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) 我正在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)
我怀疑这是因为pywinauto和PyQt5.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) 我正在尝试滚动 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但没有成功。
另一个问题,有没有办法向右/向左滚动?
谢谢。
我正在尝试使用 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() 方法,但它不接受参数。
任何帮助是极大的赞赏!
此致