How do I take out the focus or minimize a window with Python?

前端 未结 3 417
鱼传尺愫
鱼传尺愫 2020-12-09 07:01

I need to get focus to a specified window, and the only way I\'m seeing on my head, is minimizing all windows on front of it until I get the right one...

How can I d

相关标签:
3条回答
  • 2020-12-09 07:48

    You'll need to enumerate through the windows and match the title of the window to get the one you want. The code below searches for a window with "firefox" in the title and sets the focus

    To minimize the window use the following line:

    def enumHandler(hwnd, lParam):
       if 'firefox' in win32gui.GetWindowText(hwnd):
          win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
    
    win32gui.EnumWindows(enumHandler, None)
    

    This works for Windows 10, Python3.5 32bit, pywin32‑223.


    I reported the above case, but an error occurred.

    Traceback (most recent call last):

    TypeError: The object is not a PyHANDLE object

    0 讨论(0)
  • 2020-12-09 07:51

    I'm assuming from the question, that you want to write a generic to that can work with any window from any application.

    You might want to try the Python Win32 GUI Automation library. I haven't used it but sounds like it might be what you are looking for. If that doesn't work, your best option might be forgo python and use a tool like AutoIt that provides built in support for window manipulation.

    If neither of those solutions work you will probable have to directly invoke windows api. I do not know if the win32api package wraps the necessary functionality, otherwise you will have write a python module in c/c++.

    If this kind of functionality is available in the .net api, you could use IronPython.

    0 讨论(0)
  • 2020-12-09 07:55

    You'll need to enumerate through the windows and match the title of the window to get the one you want. The code below searches for a window with "firefox" in the title and sets the focus:

    import win32gui
    
    toplist = []
    winlist = []
    def enum_callback(hwnd, results):
        winlist.append((hwnd, win32gui.GetWindowText(hwnd)))
    
    win32gui.EnumWindows(enum_callback, toplist)
    firefox = [(hwnd, title) for hwnd, title in winlist if 'firefox' in title.lower()]
    # just grab the first window that matches
    firefox = firefox[0]
    # use the window handle to set focus
    win32gui.SetForegroundWindow(firefox[0])
    

    To minimize the window, the following line:

    import win32con
    win32gui.ShowWindow(firefox[0], win32con.SW_MINIMIZE)
    
    0 讨论(0)
提交回复
热议问题