5

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 do it?

Windows 7, and no specific toolkit....

Every type of window, for example, firefox and console command

ZF007
  • 3,708
  • 8
  • 29
  • 48
Bruno 'Shady'
  • 4,348
  • 13
  • 55
  • 73

3 Answers3

18

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 on it:

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, use the following line:

import win32con
win32gui.ShowWindow(firefox[0], win32con.SW_MINIMIZE)
ars
  • 120,335
  • 23
  • 147
  • 134
1

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

ZF007
  • 3,708
  • 8
  • 29
  • 48
0

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.

mikerobi
  • 20,527
  • 5
  • 46
  • 42
  • I'm already using the win32gui module, but I'm not being able to make something.... I didnt found any command like, minimize, or something with take out the focus, only getfocus and setfocus =/ – Bruno 'Shady' May 07 '10 at 21:10