def foreach_child(hwnd, lparam): # List of partial buttons labels to click. buttons = [ "yes", "oui", "ok", "i accept", "next", "suivant", "new", "nouveau", "install", "installer", "file", "fichier", "run", "start", "marrer", "cuter", "extract", "i agree", "accepte", "enable", "activer", "accord", "valider", "don't send", "ne pas envoyer", "don't save", "continue", "continuer", "personal", "personnel", "scan", "scanner", "unzip", "dezip", "open", "ouvrir", "close the program", "execute", "executer", "launch", "lancer", "save", "sauvegarder", "download", "load", "charger", "end", "fin", "terminer" "later", "finish", "end", "allow access", "remind me later", "save", "sauvegarder" ] # List of complete button texts to click. These take precedence. buttons_complete = [ "&Ja", # E.g., Dutch Office Word 2013. ] # List of buttons labels to not click. dontclick = ["don't run", "i do not accept"] classname = create_unicode_buffer(50) USER32.GetClassNameW(hwnd, classname, 50) # Check if the class of the child is button. if "button" in classname.value.lower(): # Get the text of the button. length = USER32.SendMessageW(hwnd, WM_GETTEXTLENGTH, 0, 0) text = create_unicode_buffer(length + 1) USER32.SendMessageW(hwnd, WM_GETTEXT, length + 1, text) if text.value in buttons_complete: log.info("Found button %r, clicking it" % text.value) click(hwnd) return True # Check if the button is set as "clickable" and click it. textval = text.value.replace("&", "").lower() for button in buttons: if button in textval: for btn in dontclick: if btn in textval: break else: log.info("Found button %r, clicking it" % text.value) click(hwnd) # Recursively search for childs (USER32.EnumChildWindows). return True
def get_office_window(hwnd, lparam): if USER32.IsWindowVisible(hwnd): text = create_unicode_buffer(1024) USER32.GetWindowTextW(hwnd, text, 1024) # TODO Would " - Microsoft (Word|Excel|PowerPoint)$" be better? if re.search("- (Microsoft|Word|Excel|PowerPoint)", text.value): USER32.SendNotifyMessageW(hwnd, WM_CLOSE, None, None) log.info("Closed Office window.") return True
def get_office_window(hwnd, lparam): if USER32.IsWindowVisible(hwnd): text = create_unicode_buffer(1024) USER32.GetWindowTextW(hwnd, text, 1024) # TODO Would " - Microsoft (Word|Excel|PowerPoint)$" be better? if re.search("- (Microsoft|Word|Excel|PowerPoint)", text.value): USER32.SendNotifyMessageW(hwnd, WM_CLOSE, None, None) log.info("Closed Office window.") return True
def foreach_child(hwnd, lparam): # List of buttons labels to click. buttons = [ "yes", "oui", "ok", "i accept", "next", "suivant", "new", "nouveau", "install", "installer", "file", "fichier", "run", "start", "marrer", "cuter", "i agree", "accepte", "enable", "activer", "accord", "valider", "don't send", "ne pas envoyer", "don't save", "continue", "continuer", "personal", "personnel", "scan", "scanner", "unzip", "dezip", "open", "ouvrir", "close the program", "execute", "executer", "launch", "lancer", "save", "sauvegarder", "download", "load", "charger", "end", "fin", "terminer" "later", "finish", "end", "allow access", "remind me later", "save", "sauvegarder" ] # List of buttons labels to not click. dontclick = [ "don't run", "i do not accept" ] classname = create_unicode_buffer(50) USER32.GetClassNameW(hwnd, classname, 50) # Check if the class of the child is button. if "button" in classname.value.lower(): # Get the text of the button. length = USER32.SendMessageW(hwnd, WM_GETTEXTLENGTH, 0, 0) text = create_unicode_buffer(length + 1) USER32.SendMessageW(hwnd, WM_GETTEXT, length + 1, text) # Check if the button is set as "clickable" and click it. textval = text.value.replace("&", "").lower() for button in buttons: if button in textval: for btn in dontclick: if btn in textval: break else: log.info("Found button %r, clicking it" % text.value) USER32.SetForegroundWindow(hwnd) KERNEL32.Sleep(1000) USER32.SendMessageW(hwnd, BM_CLICK, 0, 0) # Recursively search for childs (USER32.EnumChildWindows). return True
def foreach_child(hwnd, lparam): # List of buttons labels to click. buttons = [ "yes", "oui", "ok", "i accept", "next", "suivant", "new", "nouveau", "install", "installer", "file", "fichier", "run", "start", "marrer", "cuter", "i agree", "accepte", "enable", "activer", "accord", "valider", "don't send", "ne pas envoyer", "don't save", "continue", "continuer", "personal", "personnel", "scan", "scanner", "unzip", "dezip", "open", "ouvrir", "close the program", "execute", "executer", "launch", "lancer", "save", "sauvegarder", "download", "load", "charger", "end", "fin", "terminer" "later", "finish", "end", "allow access", "remind me later", "save", "sauvegarder", "update", "allow", ] # List of buttons labels to not click. dontclick = [ "don't run", "i do not accept", "check for a solution and close the program", "close the program", "never allow opening files of this type", "always allow opening files of this type" ] classname = create_unicode_buffer(50) USER32.GetClassNameW(hwnd, classname, 50) # Check if the class of the child is button. if "button" in classname.value.lower(): # Get the text of the button. length = USER32.SendMessageW(hwnd, WM_GETTEXTLENGTH, 0, 0) text = create_unicode_buffer(length + 1) USER32.SendMessageW(hwnd, WM_GETTEXT, length + 1, text) # Check if the button is set as "clickable" and click it. textval = text.value.replace("&", "").lower() for button in buttons: if button in textval: for btn in dontclick: if btn in textval: break else: log.info("Found button %r, clicking it" % text.value) USER32.SetForegroundWindow(hwnd) KERNEL32.Sleep(1000) USER32.SendMessageW(hwnd, BM_CLICK, 0, 0) # Recursively search for childs (USER32.EnumChildWindows). return True
def get_window_text(hwnd): text = create_unicode_buffer(1024) USER32.GetWindowTextW(hwnd, text, 1024) return text.value