如何用Python移除焦点或最小化窗口?
我需要把焦点放到一个指定的窗口上,但我想到的唯一办法就是把前面的所有窗口都最小化,直到找到那个窗口为止……
我该怎么做呢?
我用的是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)