Python程序运行时,打开了多个窗口,使用win32gui模块可以设置指定的某一个窗口为当前活动窗口。
import re, time
import webbrowser
import win32gui, win32con, win32com.client
def _window_enum_callback(hwnd, wildcard):
'''
Pass to win32gui.EnumWindows() to check all the opened windows
把想要置顶的窗口放到最前面,并最大化
'''
if re.match(wildcard, str(win32gui.GetWindowText(hwnd))) is not None:
win32gui.BringWindowToTop(hwnd)
# 先发送一个alt事件,否则会报错导致后面的设置无效:pywintypes.error: (0, 'SetForegroundWindow', 'No error message is available')
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys('%')
# 设置为当前活动窗口
win32gui.SetForegroundWindow(hwnd)
# 最大化窗口
win32gui.ShowWindow(hwnd, win32con.SW_MAXIMIZE)
if __name__ == '__main__':
webbrowser.open("https://www.baidu.com/")
time.sleep(1)
win32gui.EnumWindows(_window_enum_callback, ".*%s.*" % config.window_name)#此处为你要设置的活动窗口名
说明一点:
有人会遇到这个错误(好吧,我也遇到了):
pywintypes.error: (0, 'SetForegroundWindow', 'No error message is available')
Stack Overflow上的解决方法是添加如下代码:
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys('%')
✅ 功能说明:
-
win32com.client.Dispatch("WScript.Shell")
:-
创建一个 Windows 脚本宿主(WScript) 的 Shell 对象;
-
允许你通过脚本控制键盘输入、运行程序、激活窗口等操作。
-
-
shell.SendKeys('%')
:-
SendKeys()
是用来 模拟键盘输入 的函数; -
'%'
是特殊字符,表示键盘上的 Alt 键(即Alt
的修饰符); -
所以这行代码相当于:模拟按了一下 Alt 键。
-
❓这有什么用?
通常在 Windows 系统中,按一下 Alt 键会激活窗口菜单栏的快捷键模式。例如在资源管理器或旧版菜单栏程序中:
-
按 Alt 后,可以通过键盘访问菜单项(如 File、Edit 等);
-
或者是为了激活某些快捷键组合,比如
%F
表示Alt + F
。
即先发送一个Alt key事件,避免报错,后面的设置当前窗口就会有效。
链接地址: