Keeping the terminal in focus Keeping the terminal in focus selenium selenium

Keeping the terminal in focus


Here is what I came up with that seems to be working.

class WindowManager:    def __init__(self):        self._handle = None    def _window_enum_callback( self, hwnd, wildcard ):        if re.match(wildcard, str(win32gui.GetWindowText(hwnd))) != None:            self._handle = hwnd    #CASE SENSITIVE    def find_window_wildcard(self, wildcard):        self._handle = None        win32gui.EnumWindows(self._window_enum_callback, wildcard)    def set_foreground(self):        win32gui.ShowWindow(self._handle, win32con.SW_RESTORE)        win32gui.SetWindowPos(self._handle,win32con.HWND_NOTOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE + win32con.SWP_NOSIZE)          win32gui.SetWindowPos(self._handle,win32con.HWND_TOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE + win32con.SWP_NOSIZE)          win32gui.SetWindowPos(self._handle,win32con.HWND_NOTOPMOST, 0, 0, 0, 0, win32con.SWP_SHOWWINDOW + win32con.SWP_NOMOVE + win32con.SWP_NOSIZE)        shell = win32com.client.Dispatch("WScript.Shell")        shell.SendKeys('%')        win32gui.SetForegroundWindow(self._handle)    def find_and_set(self, search):        self.find_window_wildcard(search)        self.set_foreground()

Then to find a window and make it active you can...

w = WindowManager()w.find_and_set(".*cmd.exe*")

This is in python 2.7, also here are some links I found to explain why you have to go through so much trouble to switch active windows.

win32gui.SetActiveWindow() ERROR : The specified procedure could not be found

Windows 7: how to bring a window to the front no matter what other window has focus?


This doesn't really answer your question, but the easy solution is to not take the focus away in the first place:

driver = webdriver.PhantomJS()# ...

The PhantomJS webdriver doesn't have any UI, so does not steal the focus.


For getting focus, check the comments to this answer.

A cross-platform method could be to use Tkinter for the user GUI, as it has methods to grab and set focus for its windows.