Search code examples
pythonwindowswinapiautoit

Need to make the window active


I tried using two libraries:

  1. win32
  2. autoit

But none of them works correctly.

Сode example:

import autoit
import win32gui


hWnd = autoit.win_get_handle('[CLASS:Notepad]')

win32gui.SetActiveWindow(hWnd)
autoit.win_active_by_handle(hWnd)

Solution

  • Function to find window by class name:

    import win32gui
    
    def window_get(window=None, class_name:str=None)->int:
        ''' Returns hwnd. If window is not specified then
            finds foreground window.
        '''
        if isinstance(window, str):
            return win32gui.FindWindow(class_name, window)
        elif isinstance(window, int):
            return window
        elif not window and class_name:
            return win32gui.FindWindow(class_name, window)
        else:
            return win32gui.GetForegroundWindow()
    

    Usage:

    import win32con
    
    hwnd = window_get(class_name='Notepad')
    win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
    win32gui.SetForegroundWindow(hwnd)