Im Folgenden wird mein Beitrag auch mit Pywinauto verwendet.
Ich habe den Internet Explorer als Browser verwendet (also Internet Explorer als Standardprogramm für SWF-Dateien festgelegt), da ich die SWF-Dateien am schnellsten laden konnte (ich weiß ... komisch richtig).
Ich habe auch Adobe Acrobat zum Drucken verwendet. (Es scheint, dass das Druckdialogfeld für die meisten Programme ähnlich ist, so dass Sie möglicherweise keine Probleme haben). Da ich Adobe verwendet habe, musste ich den Griff des Druckdialogs von ändern
window.OK.click auf window.Print.click (in Zeile 61)
Möglicherweise müssen Sie auch die Werte für die untere Zeile (Zeile 43) ändern. Ihre Bildschirmauflösung kann sich von meiner unterscheiden.
browser_tab.click_input (coords = (1440, 2060))
Entschuldigung, wenn es nicht gut erklärt wird, auch weil es Python ist. Bitte überprüfen Sie, ob die Einrückung im folgenden Code korrekt ist.
import sys import re import os import warnings import webbrowser from time import sleep import pywinauto as pwa from pywinauto.application import Application from pywinauto.keyboard import SendKeys def sendkey_escape(string): """Escape `+ ^ % ~ { } [ ] ( )` by putting them within curly braces. Refer to sendkeys' documentation for more info: * https://github.com/zvodd/sendkeys-py-si/blob/master/doc/SendKeys.txt (Could not open the original site: rutherfurd.net/python/sendkeys/ ) """ return re.sub(r'([+^%~{}\[\]()])', r'{\1}', string) warnings.filterwarnings( 'once', message=r'.*64-bit application should.*', category=UserWarning ) filenames = os.listdir(os.getcwd()) app = Application() for filename in filenames: #pwa.timings.Timings.Slow() if not filename.endswith('.swf'): continue pdfname = filename[:-3] + 'pdf' if pdfname in filenames: # Already there! continue # Assume the default application to open swf files is browser_tab. webbrowser.open(filename) sleep(2) app.connect(title_re='.*Explorer', class_name='IEFrame') browser_tab = app.IEFrame browser_tab.wait('active') browser_tab.set_focus() #below to enable activex controls browser_tab.click_input(coords=(1440, 2060)) sleep(2) browser_tab.right_click_input(coords=(500, 500)) # Click "print" from the rightclick menu. browser_tab.click_input(coords=(540, 645)) pwa.timings.wait_until_passes( 20, 0.5, browser_tab[u'Print'].Exists, pwa.findwindows.WindowNotFoundError ) app2 = Application().connect(title=u'Print') pwa.timings.Timings.Defaults() window = app2.Print window.wait('ready') button = window.Print button.Click() pwa.timings.wait_until_passes( 20, 0.5, browser_tab[u'Save PDF File As'].Exists, pwa.findwindows.WindowNotFoundError ) app3 = Application().connect(title=u'Save PDF File As', class_name='#32770') window = app3.Dialog combobox = window[u'4'] combobox.set_focus().type_keys(sendkey_escape(os.getcwd() + '\\' + pdfname), with_spaces=True) window.Save.Click() pwa.timings.wait_until_passes( 20, 0.5, app[u'Creating Adobe PDF'].Exists, pwa.findwindows.WindowNotFoundError ) app4 = app.connect(title=u'Creating Adobe PDF', class_name='#32770') window3 = app4.Dialog window3.wait_not('active',20,1) browser_tab.Close()
Ich habe SWAPY verwendet, um die Steuerungskennungen der einzelnen Fenster zu ermitteln. SWAPY verwendet jedoch alten Code (immer noch sehr nützlich). Daher habe ich den Code aktualisiert, um die aktuelle Version von pywinauto zu berücksichtigen und zu unterstützen (zumindest für mich). Wenn Sie nachschlagen, sind die Funktionsaufrufe weitgehend gleich, sie werden jedoch nur von camelcase in Underscore_case konvertiert.