def top_window_(self): "Return the current top window of the application" if not self.process: raise AppNotConnected("Please use start_ or connect_ before " "trying anything else") time.sleep(Timings.window_find_timeout) # very simple windows = findwindows.find_windows(process = self.process) criteria = {} criteria['handle'] = windows[0] return WindowSpecification(self, criteria)
def active_(self): "Return the active window of the application" if not self.process: raise AppNotConnected("Please use start_ or connect_ before " "trying anything else") time.sleep(Timings.window_find_timeout) # very simple windows = findwindows.find_windows(process = self.process, active_only = True) if not windows: raise RuntimeError("No Windows of that application are active") criteria = {} criteria['handle'] = windows[0] return WindowSpecification(self, criteria)
def windows_(self, **kwargs): """Return list of wrapped windows of the top level windows of the application """ if not self.process: raise AppNotConnected("Please use start_ or connect_ before " "trying anything else") if 'visible_only' not in kwargs: kwargs['visible_only'] = False if 'enabled_only' not in kwargs: kwargs['enabled_only'] = False kwargs['process'] = self.process windows = findwindows.find_windows(**kwargs) return [controls.WrapHandle(win) for win in windows]
def _resolve_from_appdata( criteria_, app, timeout = None, retry_interval = None): "Should not be used at the moment!" if timeout is None: timeout = Timings.window_find_timeout if retry_interval is None: retry_interval = Timings.window_find_retry global cur_item # get the stored item corresponding to this request matched_control = app.GetMatchHistoryItem(cur_item) cur_item += 1 # remove parameters from the original search that changes each time criteria = [crit.copy() for crit in criteria_] # Remove any attributes from the current search that are # completely language dependent for unloc_attrib in ['title_re', 'title', 'best_match']: for c in criteria: if c.has_key(unloc_attrib): del c[unloc_attrib] #found_criteria = item[0] #for c in found_criteria: # if c.has_key('process'): # del c['process'] # # They should match - so if they don't print it out. #if found_criteria != search_criteria: # print "\t\t", matched[cur_index - 3][0] # print "\t" ,matched[cur_index - 2][0] # print search_criteria # print "---" # print found_criteria # raise RuntimeError("Mismatch") # so let's use the ID from the matched control... #print item[1] # we need to try and get a good match for the dialog # this could be done by matching # - number/positoin of controls # - class # anything else? dialog_criterion = criteria[0] #print list(matched_control) dialog_criterion['class_name'] = matched_control[1]['Class'] # find all the windows in the process process_hwnds = findwindows.find_windows(**dialog_criterion) dialog = None ctrl = None if len(process_hwnds) >= 1: similar_child_count = [h for h in process_hwnds if matched_control[1]['ControlCount'] -2 <= len(handleprops.children(h)) and matched_control[1]['ControlCount'] +2 >= len(handleprops.children(h))] if len(similar_child_count) == 0: #print "None Similar child count!!???" #print matched_control[1]['ControlCount'], \ # len(handleprops.children(h)) pass else: process_hwnds = similar_child_count for h in process_hwnds: #print controls.WrapHandle(h).GetProperties() #print "======", h, h, h dialog = controls.WrapHandle(h) # if a control was specified also if len(criteria_) > 1: # find it in the original data #print item[2] # remove those criteria which are langauge specific ctrl_criterion = criteria[1] #def has_same_id(other_ctrl): # print "==="*20 # print "testing", item[2]['ControlID'], # print "against", other_ctrl # return item[2]['ControlID'] == \ # handleprops.controlid(other_ctrl) ctrl_criterion['class_name'] = matched_control[2]['Class'] ctrl_criterion['parent'] = dialog.handle ctrl_criterion['top_level_only'] = False #ctrl_criterion['predicate_func'] = has_same_id #print "CTRLCTRJL", ctrl_criterion ctrl_hwnds = findwindows.find_windows(**ctrl_criterion) if len(ctrl_hwnds) > 1: same_ids = \ [hwnd for hwnd in ctrl_hwnds if handleprops.controlid(hwnd) == \ matched_control[2]['ControlID']] if len(same_ids) >= 1: ctrl_hwnds = same_ids try: ctrl = controls.WrapHandle(ctrl_hwnds[0]) except IndexError: print "-+-+=_" * 20 print found_criteria raise break # it is possible that the dialog will not be found - so we # should raise an error if dialog is None: raise findwindows.WindowNotFoundError() if len(criteria_) == 2 and ctrl is None: raise findwindows.WindowNotFoundError() if ctrl: return dialog, ctrl else: return (dialog, )
def _resolve_from_appdata(criteria_, app, timeout=None, retry_interval=None): "Should not be used at the moment!" if timeout is None: timeout = Timings.window_find_timeout if retry_interval is None: retry_interval = Timings.window_find_retry global cur_item # get the stored item corresponding to this request matched_control = app.GetMatchHistoryItem(cur_item) cur_item += 1 # remove parameters from the original search that changes each time criteria = [crit.copy() for crit in criteria_] # Remove any attributes from the current search that are # completely language dependent for unloc_attrib in ['title_re', 'title', 'best_match']: for c in criteria: if c.has_key(unloc_attrib): del c[unloc_attrib] #found_criteria = item[0] #for c in found_criteria: # if c.has_key('process'): # del c['process'] # # They should match - so if they don't print it out. #if found_criteria != search_criteria: # print "\t\t", matched[cur_index - 3][0] # print "\t" ,matched[cur_index - 2][0] # print search_criteria # print "---" # print found_criteria # raise RuntimeError("Mismatch") # so let's use the ID from the matched control... #print item[1] # we need to try and get a good match for the dialog # this could be done by matching # - number/positoin of controls # - class # anything else? dialog_criterion = criteria[0] #print list(matched_control) dialog_criterion['class_name'] = matched_control[1]['Class'] # find all the windows in the process process_hwnds = findwindows.find_windows(**dialog_criterion) dialog = None ctrl = None if len(process_hwnds) >= 1: similar_child_count = [ h for h in process_hwnds if matched_control[1]['ControlCount'] - 2 <= len(handleprops.children(h)) and matched_control[1]['ControlCount'] + 2 >= len(handleprops.children(h)) ] if len(similar_child_count) == 0: #print "None Similar child count!!???" #print matched_control[1]['ControlCount'], \ # len(handleprops.children(h)) pass else: process_hwnds = similar_child_count for h in process_hwnds: #print controls.WrapHandle(h).GetProperties() #print "======", h, h, h dialog = controls.WrapHandle(h) # if a control was specified also if len(criteria_) > 1: # find it in the original data #print item[2] # remove those criteria which are langauge specific ctrl_criterion = criteria[1] #def has_same_id(other_ctrl): # print "==="*20 # print "testing", item[2]['ControlID'], # print "against", other_ctrl # return item[2]['ControlID'] == \ # handleprops.controlid(other_ctrl) ctrl_criterion['class_name'] = matched_control[2]['Class'] ctrl_criterion['parent'] = dialog.handle ctrl_criterion['top_level_only'] = False #ctrl_criterion['predicate_func'] = has_same_id #print "CTRLCTRJL", ctrl_criterion ctrl_hwnds = findwindows.find_windows(**ctrl_criterion) if len(ctrl_hwnds) > 1: same_ids = \ [hwnd for hwnd in ctrl_hwnds if handleprops.controlid(hwnd) == \ matched_control[2]['ControlID']] if len(same_ids) >= 1: ctrl_hwnds = same_ids try: ctrl = controls.WrapHandle(ctrl_hwnds[0]) except IndexError: print "-+-+=_" * 20 print found_criteria raise break # it is possible that the dialog will not be found - so we # should raise an error if dialog is None: raise findwindows.WindowNotFoundError() if len(criteria_) == 2 and ctrl is None: raise findwindows.WindowNotFoundError() if ctrl: return dialog, ctrl else: return (dialog, )