[PYTHON] Hinweise zur Verwendung von Pywinauto

Hinweise zur Verwendung von Pywinauto

Überprüfen Sie den Betrieb mit Notepad

Starten Sie die App (Editor)

c:\ python
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> from pywinauto import Desktop, Application
>>>
>>> #Starten Sie Notepad
>>> app = Application().start('notepad.exe')

Versionsinformationen anzeigen

Wählen Sie im Menü unter "Hilfe" die Option "Versionsinformationen", um den Bildschirm mit den Versionsinformationen anzuzeigen.

>>> #Hilfe->Versionsinformationen anzeigen
>>> app[u"Notizblock ohne Titel"].menu_select(u"Hilfe->Versionsinformation")

notepad2.png

Bestätigung des Vorhandenseins des Versionsinformationsbildschirms

>>> print ( app[u"Informationen zur Notepad-Version"].exists() )
True
>>>

Informationen zur Steuerung erhalten Sie auf dem Bildschirm mit den Versionsinformationen

>>> window = app.top_window()
>>> window.print_control_identifiers()
Control Identifiers:

Dialog - 'Informationen zur Notepad-Version'    (L690, T232, R1240, B711)
['Informationen zur Notepad-Version', 'Dialog', 'Informationen zur Notepad-VersionDialog']
child_window(title="Informationen zur Notepad-Version", class_name="#32770")
   |
   | Static - ''    (L716, T348, R1213, B350)
   | ['Informationen zur Notepad-Version Statisch', 'Static', 'Informationen zur Notepad-Version Statisch0', 'Informationen zur Notepad-Version Statisch1', 'Static0', 'Static1']
   | child_window(class_name="Static")
   |
   | Static - ''    (L710, T367, R747, B405)
   | ['Informationen zur Notepad-Version Static2', 'Static2']
   | child_window(class_name="Static")
   |
   | Static - 'Microsoft Windows'    (L759, T367, R1162, B386)
   | ['Static3', 'Microsoft WindowsStatic', 'Microsoft Windows']
   | child_window(title="Microsoft Windows", class_name="Static")
   |
   | Static - 'Version 1809(Betriebssystem Build 17763.1397)'    (L759, T386, R1223, B405)
   | ['Version 1809(Betriebssystem Build 17763.1397)', 'Static4', 'Version 1809(Betriebssystem Build 17763.1397)Static']
   | child_window(title="Version 1809(Betriebssystem Build 17763.1397)", class_name="Static")
   |
   | Static - '© 2018 Microsoft Corporation. All rights reserved.'    (L759, T404, R1179, B423)
   | ['© 2018 Microsoft Corporation. All rights reserved.Static', '© 2018 Microsoft Corporation. All rights reserved.', 'Static5', '© 2018 Microsoft Corporation. All rights reserved.Static0', '© 2018 Microsoft Corporation. All rights reserved.Static1']
   | child_window(title="© 2018 Microsoft Corporation. All rights reserved.", class_name="Static")
   |
   | Static - ''    (L759, T423, R1179, B442)
   | ['© 2018 Microsoft Corporation. All rights reserved.Static2', 'Static6']
   | child_window(class_name="Static")
   |
   | Static - 'Windows 10 Enterprise-Betriebssystem und Benutzeroberfläche in den USA und anderen Ländern/Geschützt durch lokale Marken und andere Rechte an geistigem Eigentum.'    (L759, T442, R1179, B517)
   | ['Static7', 'Windows 10 Enterprise-Betriebssystem und Benutzeroberfläche in den USA und anderen Ländern/Geschützt durch lokale Marken und andere Rechte an geistigem Eigentum.', 'Windows 10 Enterprise-Betriebssystem und Benutzeroberfläche in den USA und anderen Ländern/Geschützt durch lokale Marken und andere Rechte an geistigem Eigentum. Statisch', 'Windows 10 Enterprise-Betriebssystem und Benutzeroberfläche in den USA und anderen Ländern/Geschützt durch lokale Marken und andere Rechte an geistigem Eigentum. Statisch0', 'Windows 10 Enterprise-Betriebssystem und Benutzeroberfläche in den USA und anderen Ländern/Geschützt durch lokale Marken und andere Rechte an geistigem Eigentum. Statisch1']
   | child_window(title="Windows 10 Enterprise-Betriebssystem und Benutzeroberfläche in den USA und anderen Ländern/Geschützt durch lokale Marken und andere Rechte an geistigem Eigentum.", class_name="Static")
   |
   | Static - ''    (L759, T517, R1127, B555)
   | ['Static8', 'Windows 10 Enterprise-Betriebssystem und Benutzeroberfläche in den USA und anderen Ländern/Geschützt durch lokale Marken und andere Rechte an geistigem Eigentum. Static2']
   | child_window(class_name="Static")
   |
   | SysLink - 'Dieses Produkt ist<A>Microsoft Software-Lizenzbedingungen</A>Es ist an folgende Personen lizenziert, basierend auf den Bedingungen von.'    (L759, T554, R1127, B592)
   | ['Dieses Produkt ist<A>Microsoft Software-Lizenzbedingungen</A>Es ist an folgende Personen lizenziert, basierend auf den Bedingungen von.', 'Dieses Produkt ist<A>Microsoft Software-Lizenzbedingungen</A>Es ist an folgende Personen lizenziert, basierend auf den Bedingungen von.SysLink', 'SysLink']
   | child_window(title="Dieses Produkt ist<A>Microsoft Software-Lizenzbedingungen</A>Es ist an folgende Personen lizenziert, basierend auf den Bedingungen von.", class_name="SysLink")
   |
   | Static - 'Windows-Benutzer'    (L777, T592, R1145, B611)
   | ['Windows-Benutzer Statisch', 'Static9', 'Windows-Benutzer', 'Windows-Benutzer Statisch0', 'Windows-Benutzer Statisch1']
   | child_window(title="Windows-Benutzer", class_name="Static")
   |
   | Static - ''    (L777, T611, R1145, B630)
   | ['Windows-Benutzer Static2', 'Static10']
   | child_window(class_name="Static")
   |
   | Button - 'OK'    (L1136, T665, R1224, B691)
   | ['OKButton', 'OK', 'Button']
   | child_window(title="OK", class_name="Button")
>>>

Schließen Sie den Versionsinformationsbildschirm

Drücken Sie die OK-Taste, um den Versionsinformationsbildschirm zu schließen

>>> app[u"Informationen zur Notepad-Version"].OK.close_click()
<win32_controls.ButtonWrapper - '', Button, 462076>
>>>

Informationen zur Notizblocksteuerung anzeigen

>>> app[u"Notizblock ohne Titel"].dump_tree()
Control Identifiers:

Notepad - 'Ohne Titel-Notizblock'    (L673, T177, R1770, B798)
['Ohne Titel-Notizblock', 'Notepad', 'Ohne Titel-NotizblockNotepad']
child_window(title="Ohne Titel-Notizblock", class_name="Notepad")
   |
   | Edit - ''    (L681, T228, R1762, B766)
   | ['Edit', 'Ohne Titel-Editor bearbeiten']
   | child_window(class_name="Edit")
   |
   | StatusBar - ''    (L681, T766, R1762, B790)
   | ['Ohne Titel-Editor StatusBar', 'StatusBar   Windows (CRLF)', 'StatusBar100%', 'StatusBar', 'Statusleiste 1 Zeile, 1 Spalte']
   | child_window(class_name="msctls_statusbar32")
>>>

Bearbeitungssteuerung gefunden

Geben Sie den Text in den Notizblock ein

Schreiben Sie Hallo Welt!

>>> app[u"Notizblock ohne Titel"].Edit.set_edit_text(u"Hello World!")
<win32_controls.EditWrapper - 'Hello World!', Edit, 3672052>
>>>
>>> app[u"Notizblock ohne Titel"].Edit.type_keys("{ENTER}")
<win32_controls.EditWrapper - 'Hello World!
', Edit, 3672052>
>>>

notepad3.png

Editor speichern unter

>>> app[u"Notizblock ohne Titel"].menu_select(u"Datei->speichern als")
>>>
>>> #Geben Sie das Dialogfeld Speichern unter an
>>> dialog = app[u"speichern als"]
>>>
>>> #Legen Sie den Dateinamen fest
>>> dialog.Edit.set_edit_text(u"Prüfung")
<win32_controls.EditWrapper - 'Prüfung', Edit, 593534>
>>>
>>> #Drücken Sie die Speichertaste
>>> dialog[u"sparen"].click()
>>>

Da sich der Dateiname geändert hat, hat sich auch die Titelleiste geändert

notepad4.png

Editor schließen

Drücken Sie Alt + F4, um den Editor zu schließen Alt-Taste ist "%"

Da sich die Titelleiste geändert hat, ändern Sie die Bezeichnung von "Notizblock ohne Titel".

>>> app[u"Notizblock testen"].type_keys("%{F4}")  # Alt + F4
<hwndwrapper.DialogWrapper - '', Notepad, 4261490>
>>>

Fenster aufzählen

>>> from pywinauto import Desktop
>>> top_windows = Desktop().windows()
>>> for w in top_windows:
...     print (w.window_text())
...

Stellen Sie eine Verbindung zu einer gestarteten App (Editor) her.

Verbinden und Anzeigen von Inhalten

>>> from pywinauto import Desktop, Application
>>> app = Application().connect(path='notepad.exe')
>>>
>>> print ( app[u"Notizblock testen"].Edit.window_text() )
Hello World!

>>>
>>> print ( app[u"Notizblock testen"].Edit.texts() )
['Hello World!\r\n', 'Hello World!', '']
>>> print ( app[u"Notizblock testen"].Edit.text_block() )
Hello World!

>>>

Holen Sie sich den Text der angegebenen Zeile

>>> print ( app[u"Notizblock testen"].Edit.line_count() )
2
>>> print ( app[u"Notizblock testen"].Edit.get_line(0) )
Hello World!
>>> print ( app[u"Notizblock testen"].Edit.get_line(1) )

>>>

Rufen Sie den Text des Versionsinformationsbildschirms ab

>>> app[u"Notizblock testen"].menu_select(u"Hilfe->Versionsinformation")
>>> for c in  app[u"Informationen zur Notepad-Version"].children(class_name='Static') :
...     print ( c.window_text() )
...


Microsoft Windows
Version 1809(Betriebssystem Build 17763.1397)
© 2018 Microsoft Corporation. All rights reserved.

Windows 10 Enterprise-Betriebssystem und Benutzeroberfläche in den USA und anderen Ländern/Geschützt durch lokale Marken und andere Rechte an geistigem Eigentum.

Windows-Benutzer

>>>

notepad5.png

Weitere Informationen finden Sie auf dem Bildschirm mit den Versionsinformationen

>>> for c in  app[u"Informationen zur Notepad-Version"].children() :
...     print ( c.get_properties() )   
...
{'class_name': 'Static', 'friendly_class_name': 'Static', 'texts': [''], 'control_id': 13095, 'rectangle': <RECT L618, T474, R1115, B476>, 'is_visible': True, 'is_enabled': True, 'control_count': 0, 'style': 1342177296, 'exstyle': 131076, 'user_data': 0, 'context_help_id': 0, 'fonts': [<LOGFONTW 'MS UI Gothic' -12>], 'client_rects': [<RECT L0, T0, R495, B0>], 'is_unicode': True, 'menu_items': [], 'automation_id': ''}
{'class_name': 'Static', 'friendly_class_name': 'Static', 'texts': [''], 'control_id': 12297, 'rectangle': <RECT L612, T493, R649, B531>, 'is_visible': True, 'is_enabled': True, 'control_count': 0, 'style': 1342177347, 'exstyle': 4, 'user_data': 0, 'context_help_id': 0, 'fonts': [<LOGFONTW 'MS UI Gothic' -12>], 'client_rects': [<RECT L0, T0, R37, B38>], 'is_unicode': True, 'menu_items': [], 'automation_id': '', 'image': <PIL.Image.Image image mode=RGB size=37x38 at 0x1B6F8DFBAF0>}
{'class_name': 'Static', 'friendly_class_name': 'Static', 'texts': ['Microsoft Windows'], 'control_id': 13568, 'rectangle': <RECT L661, T493, R1064, B512>, 'is_visible': True, 'is_enabled': True, 'control_count': 0, 'style': 1342177420, 'exstyle': 4, 'user_data': 0, 'context_help_id': 0, 'fonts': [<LOGFONTW 'Yu Gothic UI' -12>], 'client_rects': [<RECT L0, T0, R403, B19>], 'is_unicode': True, 'menu_items': [], 'automation_id': ''}
{'class_name': 'Static', 'friendly_class_name': 'Static', 'texts': ['Version 1809(Betriebssystem Build 17763.1397)'], 'control_id': 13579, 'rectangle': <RECT L661, T512, R1125, B531>, 'is_visible': True, 'is_enabled': True, 'control_count': 0, 'style': 1342177420, 'exstyle': 4, 'user_data': 0, 'context_help_id': 0, 'fonts': [<LOGFONTW 'Yu Gothic UI' -12>], 'client_rects': [<RECT L0, T0, R464, B19>], 'is_unicode': True, 'menu_items': [], 'automation_id': ''}
{'class_name': 'Static', 'friendly_class_name': 'Static', 'texts': ['© 2018 Microsoft Corporation. All rights reserved.'], 'control_id': 13578, 'rectangle': <RECT L661, T530, R1081, B549>, 'is_visible': True, 'is_enabled': True, 'control_count': 0, 'style': 1342177408, 'exstyle': 4, 'user_data': 0, 'context_help_id': 0, 'fonts': [<LOGFONTW 'Yu Gothic UI' -12>], 'client_rects': [<RECT L0, T0, R420, B19>], 'is_unicode': True, 'menu_items': [], 'automation_id': ''}
{'class_name': 'Static', 'friendly_class_name': 'Static', 'texts': [''], 'control_id': 51715, 'rectangle': <RECT L661, T549, R1081, B568>, 'is_visible': False, 'is_enabled': True, 'control_count': 0, 'style': 1073741952, 'exstyle': 4, 'user_data': 0, 'context_help_id': 0, 'fonts': [<LOGFONTW 'Yu Gothic UI' -12>], 'client_rects': [<RECT L0, T0, R420, B19>], 'is_unicode': True, 'menu_items': [], 'automation_id': ''}
{'class_name': 'Static', 'friendly_class_name': 'Static', 'texts': ['Windows 10 Enterprise-Betriebssystem und Benutzeroberfläche in den USA und anderen Ländern/Geschützt durch lokale Marken und andere Rechte an geistigem Eigentum.'], 'control_id': 13587, 'rectangle': <RECT L661, T568, R1081, B643>, 'is_visible': True, 'is_enabled': True, 'control_count': 0, 'style': 1342177408, 'exstyle': 4, 'user_data': 0, 'context_help_id': 0, 'fonts': [<LOGFONTW 'Yu Gothic UI' -12>], 'client_rects': [<RECT L0, T0, R420, B75>], 'is_unicode': True, 'menu_items': [], 'automation_id': ''}
{'class_name': 'Static', 'friendly_class_name': 'Static', 'texts': [''], 'control_id': 13581, 'rectangle': <RECT L661, T643, R1029, B681>, 'is_visible': False, 'is_enabled': True, 'control_count': 0, 'style': 1073741952, 'exstyle': 4, 'user_data': 0, 'context_help_id': 0, 'fonts': [<LOGFONTW 'Yu Gothic UI' -12>], 'client_rects': [<RECT L0, T0, R368, B38>], 'is_unicode': True, 'menu_items': [], 'automation_id': ''}
{'class_name': 'SysLink', 'friendly_class_name': 'SysLink', 'texts': ['Dieses Produkt ist<A>Microsoft Software-Lizenzbedingungen</A>Es ist an folgende Personen lizenziert, basierend auf den Bedingungen von.'], 'control_id': 13586, 'rectangle': <RECT L661, T680, R1029, B718>, 'is_visible': True, 'is_enabled': True, 'control_count': 0, 'style': 1342242816, 'exstyle': 4, 'user_data': 0, 'context_help_id': 0, 'fonts': [<LOGFONTW 'Yu Gothic UI' -12>], 'client_rects': [<RECT L0, T0, R368, B38>], 'is_unicode': True, 'menu_items': [], 'automation_id': ''}
{'class_name': 'Static', 'friendly_class_name': 'Static', 'texts': ['Windows-Benutzer'], 'control_id': 13575, 'rectangle': <RECT L679, T718, R1047, B737>, 'is_visible': True, 'is_enabled': True, 'control_count': 0, 'style': 1342177408, 'exstyle': 4, 'user_data': 0, 'context_help_id': 0, 'fonts': [<LOGFONTW 'Yu Gothic UI' -12>], 'client_rects': [<RECT L0, T0, R368, B19>], 'is_unicode': True, 'menu_items': [], 'automation_id': ''}
{'class_name': 'Static', 'friendly_class_name': 'Static', 'texts': [''], 'control_id': 13576, 'rectangle': <RECT L679, T737, R1047, B756>, 'is_visible': True, 'is_enabled': True, 'control_count': 0, 'style': 1342177408, 'exstyle': 4, 'user_data': 0, 'context_help_id': 0, 'fonts': [<LOGFONTW 'Yu Gothic UI' -12>], 'client_rects': [<RECT L0, T0, R368, B19>], 'is_unicode': True, 'menu_items': [], 'automation_id': ''}
{'class_name': 'Button', 'friendly_class_name': 'Button', 'texts': ['OK'], 'control_id': 1, 'rectangle': <RECT L1038, T791, R1126, B817>, 'is_visible': True, 'is_enabled': True, 'control_count': 0, 'style': 1342242816, 'exstyle': 4, 'user_data': 0, 'context_help_id': 0, 'fonts': [<LOGFONTW 'Yu Gothic UI' -12>], 'client_rects': [<RECT L0, T0, R88, B26>], 'is_unicode': True, 'menu_items': [], 'automation_id': ''}
>>>

Listen Sie die Schaltflächen auf dem Bildschirm mit den Versionsinformationen auf

>>> #Anzahl der Tasten
>>> len( app[u"Informationen zur Notepad-Version"].children(class_name="Button") )
1
>>> #Aufzählung der Schaltflächeninformationen
>>> for b in app[u"Informationen zur Notepad-Version"].children(class_name="Button") :
...     print ( b.window_text() + "  visible:" + str(b.is_visible()) + "  enabled:" + str(b.is_enabled()) )
...
OK  visible:True  enabled:True
>>>

Überprüfen Sie den Vorgang mit dem Explorer

Öffnen Sie Eigene Dateien

C:\>python
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from pywinauto import Application
>>> Application().start('explorer.exe')
<pywinauto.application.Application object at 0x0000021F459F0FD0>
>>> app = Application().connect(path='explorer.exe')
>>>
>>> #Verbindungsbestätigung
>>> app[u"Forscher"].exists()
True
>>>
>>> #Einstellung des Ordnerpfads "Eigene Dateien"
>>> import os
>>> mydocument = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Documents')
>>>
>>> #Öffnen Sie den Ordner Eigene Dateien
>>> app[u"Forscher"].AddressBandRoot.type_keys(u"{ENTER}" + mydocument + "{ENTER}")
<hwndwrapper.HwndWrapper - '', Address Band Root, 264944>
>>>

explorer1.png

Eine Liste der Dateien unter Eigene Dateien abrufen

>>> from pywinauto import Desktop
>>> d = Desktop(backend='uia')[u"Dokument"]
>>> d.ListBox.get_properties()
{'class_name': 'UIItemsView', 'friendly_class_name': 'ListBox', 'texts': [['', 'Name', 'Datum und Uhrzeit aktualisieren', 'Art', 'Größe'], ['', 'Name', 'Datum und Uhrzeit aktualisieren', 'Art', 'Größe'], ['', 'Name', 'Datum und Uhrzeit aktualisieren', 'Art', 'Größe']], 'control_id': 0, 'rectangle': <RECT L947, T306, R1605, B767>, 'is_visible': True, 'is_enabled': True, 'control_count': 5, 'is_keyboard_focusable': False, 'has_keyboard_focus': False, 'automation_id': '', 'column_count': 4, 'item_count': 3, 'columns': [<uiawrapper.UIAWrapper - 'Name', SplitButton, -5173013587085247480>, <uiawrapper.UIAWrapper - 'Datum und Uhrzeit aktualisieren', SplitButton, 7405196887091890411>, <uiawrapper.UIAWrapper - 'Art', SplitButton, 4224075079785634787>, <uiawrapper.UIAWrapper - 'Größe', SplitButton, 7052361179099937348>]}
>>>
>>> #Die Anzahl der Zeilen in der Liste ist
>>> d.ListBox.item_count()
3
>>>
>>> #Listenanzeige der Liste
>>> for i in d.ListBox.get_items() :
...     i.window_text()
...
'Benutzerdefinierte Office-Vorlage'
'pywinauto'
'UISpy Settings'
>>>

Kontrollnamen und hierarchische Strukturen können mithilfe eines Tools namens UISPY hilfreich sein. Download aus diesem Bereich https://github.com/blackrosezy/gui-inspect-tool

explorer2.png

Wenn Sie nur eine Liste von Dateien möchten, müssen Sie pywinauto nicht verwenden

>>> import os
>>> mydocument = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Documents')
>>> for file in os.listdir( mydocument ) :
...     print( file )
...
Default.rdp
desktop.ini
My Music
My Pictures
My Videos
Benutzerdefinierte Office-Vorlage
pywinauto
UISpy Settings
>>>

Das? Sie können versteckte Dateien sehen, die Sie nicht sehen können. ..

Ordner aus Eigene Dateien verschieben

>>> d = Desktop(backend='uia')[u"Dokument"]
>>> d.ListBox[u"Benutzerdefinierte Office-Vorlage"].invoke()
<uia_controls.ListItemWrapper - 'Benutzerdefinierte Office-Vorlage', ListItem, 8579292259166560630>
>>>

Recommended Posts

Hinweise zur Verwendung von Pywinauto
Hinweise zur Verwendung von featuretools
Verwendung von Dataiku unter Windows
Wie benutzt man Homebrew in Debian?
Autoencoder im Chainer (Hinweise zur Verwendung von + Trainer)
Hinweise zum Schreiben von require.txt
[Hyperledger Iroha] Hinweise zur Verwendung des Python SDK
Hinweise zur Verwendung von Marshmallow in der Schemabibliothek
Wie man Mecab, neologd-ipadic auf Colab verwendet
So verwenden Sie Google Assistant unter Windows 10
Memorandum über die Verwendung von Gremlin Python
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Wie benutzt man Seaboan?
Verwendung von Image-Match
Wie man Shogun benutzt
Verwendung von Pandas 2
Verwendung von Virtualenv
Verwendung von numpy.vectorize
Verwendung von pytest_report_header
Wie man teilweise verwendet
Wie man Bio.Phylo benutzt
Verwendung von SymPy
Wie man x-means benutzt
Verwendung von WikiExtractor.py
Verwendung von IPython
Verwendung von virtualenv
Wie benutzt man Matplotlib?
Verwendung von iptables
Wie benutzt man numpy?
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
Verwendung der Liste []
Wie man Python-Kabusapi benutzt
Verwendung von OptParse
Verwendung von return
Wie man Imutils benutzt
Verwendung von Python Kivy ④ ~ Ausführung unter Android ~
Verwendung von Qt Designer
Verwendung der Suche sortiert
[gensim] Verwendung von Doc2Vec
python3: Verwendung der Flasche (2)
Verstehen Sie, wie man Django-Filter verwendet
Verwendung des Generators
[Python] Verwendung von Liste 1
Verwendung von FastAPI ③ OpenAPI
So registrieren Sie sich bei pypi
Wie benutzt man Python Argparse?
Verwendung von IPython Notebook
Wie man Pandas Rolling benutzt
[Hinweis] Verwendung von virtualenv
Verwendung von Redispy-Wörterbüchern
Python: Wie man pydub benutzt