如何用Python移除焦点或最小化窗口?

5 投票
3 回答
22147 浏览
提问于 2025-04-15 22:28

我需要把焦点放到一个指定的窗口上,但我想到的唯一办法就是把前面的所有窗口都最小化,直到找到那个窗口为止……

我该怎么做呢?

我用的是Windows 7,没有特定的工具包……

任何类型的窗口,比如说Firefox浏览器和命令行窗口。

3 个回答

0

我猜你的问题是想写一个通用的程序,可以和任何应用程序的窗口一起使用。

你可以试试这个叫做 Python Win32 GUI Automation 的库。我没有用过,但听起来可能正是你需要的。如果这个不行,或许你可以考虑不使用Python,而是用一个像 AutoIt 的工具,它自带了窗口操作的功能。

如果这两个方案都不行,你可能需要直接调用Windows的API。我不确定win32api这个包是否包含了你需要的功能,否则你可能需要用C/C++写一个Python模块。

如果在.net的API中有这种功能,你可以考虑使用IronPython。

1

你需要遍历所有的窗口,并找到你想要的那个窗口的标题。下面的代码会搜索标题中包含“firefox”的窗口,并把焦点设置到这个窗口上。

如果你想最小化这个窗口,可以使用下面这一行代码:

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

win32gui.EnumWindows(enumHandler, None)

这段代码适用于Windows 10,Python3.5 32位,以及pywin32‑223版本。


我报告了上面的情况,但出现了一个错误。

错误追踪(最近的调用在最前面):

类型错误:这个对象不是一个PyHANDLE对象

18

你需要遍历所有的窗口,然后找到你想要的那个窗口的标题。下面的代码会搜索标题中包含“firefox”的窗口,并把焦点设置到这个窗口上:

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])

要把窗口最小化,可以使用下面这一行代码:

import win32con
win32gui.ShowWindow(firefox[0], win32con.SW_MINIMIZE)

撰写回答