Reputation: 11
I want to use Python (3.6) and pywinauto (0.6.3) to control Google Earth (7.1.8.3036) in the Windows 10 platform to save the Google Earth image to a file. I am able to start Google Earth from pywinauto and get the Google Earth dialog but could not find the attribute for 'File'. I did try use app['Google Earth'].print_control_identifiers()
but could not see any attribute for 'File' (to long to include here).
I appreciate any help or suggestion how to do app['Google Earth'].???('File -> Save -> Save Image...')
. A simple alternate is to use hot keys (Ctrl+Alt+S) on the active Google Earth window. I did try using SendKeys('^%S')
or type_keys('^%S')
, but those did not work. I must not do something right.
Here how I tried to start Google Earth and find out if there was any attribute for 'File':
app = Application(backend='uia').start('c:/Program Files (x86)/Google/Google Earth/client/googleearth.exe')
app['Google Earth'].File.click()
Traceback (most recent call last): File "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", line 245, in __resolve_control criteria) File "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\timings.py", line 447, in wait_until_passes raise err pywinauto.timings.TimeoutError
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File "", line 1, in File "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", line 351, in getattribute ctrls = self.__resolve_control(self.criteria) File "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", line 248, in __resolve_control raise e.original_exception File "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\timings.py", line 425, in wait_until_passes func_val = func(*args) File "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\application.py", line 209, in __get_ctrl ctrl = self.backend.generic_wrapper_class(findwindows.find_element(**ctrl_criteria)) File "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\findwindows.py", line 84, in find_element elements = find_elements(**kwargs) File "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\findwindows.py", line 300, in find_elements elements = findbestmatch.find_best_control_matches(best_match, wrapped_elems) File "C:\Users\Brian\AppData\Local\Programs\Python\Python36\lib\site-packages\pywinauto\findbestmatch.py", line 533, in find_best_control_matches raise MatchError(items = name_control_map.keys(), tofind = search_text) pywinauto.findbestmatch.MatchError: Could not find 'File' in 'dict_keys(['Tour GuidePane', 'Tour Guide', 'Pane', '', 'Custom', '0', '1', '2', 'Pane0', 'Pane1', 'Pane2', '3', 'Pane3', '4', 'Pane4', '5', 'Pane5', '6', 'Pane6', '7', 'Custom0', 'Custom1', 'Custom2', '8', 'Custom3', '9', 'Custom4', '10', 'Custom5', '11', 'Custom6', '12', 'Custom7', '13', 'Custom8', '14', 'Custom9', '15', 'Custom10', '16', 'Custom11', '17', 'Custom12', '18', 'Custom13', '19', 'Custom14', '20', 'Custom15', '21', 'Custom16', '22', 'Custom17', '23', 'Custom18', '24', 'Custom19', '25', 'Custom20', '26', 'Custom21', '27', 'Custom22', '28', 'Custom23', '29', 'Custom24', '30', 'Custom25', '31', 'Custom26', '32', 'Custom27', '33', 'Custom28', '34', 'Custom29', '35', 'Custom30', '36', 'Custom31', '37', 'Custom32', '38', 'Custom33', '39', 'Custom34', '40', 'Custom35', '41', 'Custom36', '42', 'Custom37', '43', 'Custom38', '44', 'Custom39', '45', 'Custom40', '46', 'Custom41', '47', 'Custom42', '48', 'Custom43', '49', 'Custom44', '50', 'Custom45', '51', 'Pane7', '52', 'Pane8', '53', 'Pane9', '54', 'Pane10', '55', 'Pane11', '56', 'Pane12', '57', 'Pane13', '58', 'Pane14', '59', 'Custom46', '60', 'Custom47', '61', 'Custom48', '62', 'Custom49', '63', 'Custom50', '64', 'Custom51', '65', 'Custom52', '66', 'Custom53', '67', 'Custom54', '68', 'Custom55', '69', 'Custom56', '70', 'Custom57', '71', 'Custom58', '72', 'Custom59', '73', 'Custom60', '74', 'Custom61', '75', 'Custom62', '76', 'Custom63', '77', 'TitleBar', 'System', 'SystemMenu', 'Menu', 'System0', 'System1', 'System2', 'SystemMenuItem', 'MenuItem', 'Minimize', 'MinimizeButton', 'Button', 'Maximize', 'MaximizeButton', 'Button0', 'Button1', 'Button2', 'CloseButton', 'Close', 'Button3'])'
Upvotes: 0
Views: 447
Reputation: 11
I found a way to save an image of a KML file in the Google Earth by using hot keys (Ctrl+Alt+S). But this defeats the key purpose of using pywinauto. I am still looking for a better way to utilize pywinauto to control Google Earth. Here is my python code along with comments:
import os, time
from pywinauto import Application
from pywinauto import keyboard
kmlfile = 'rcglic1457645225.kml'
kmlimage= kmlfile[:-3]+'jpg'
os.startfile(kmlfile)
time.sleep(15) #wait for completely loading Google Earth
app = Application(backend='uia').connect(path='googleearth.exe') #connect to the Google Earth process
dlg = app['Google Earth'] #connect to the Google Earth dialog
dlg['Maximize'].click() #click on 'Maximize' button of the Google Earth window to have the best image
time.sleep(1)
keyboard.SendKeys('^%S') #hot keys to save the image (Ctrl+Alt+S)
keyboard.SendKeys(kmlimage+'{ENTER}') #enter the image file name
keyboard.SendKeys('{TAB}{ENTER}') #use TAB to select 'Yes' and replace file if existed
dlg['Restore'].click() #click on 'Restore' button of the Google Earth window to go back to normal
dlg['Close'].click() #click on 'Close' button
keyboard.SendKeys('{TAB}{ENTER}') #use TAB to select 'Discard' and close the Google Earth window
Upvotes: 0