如何用Python最大化特定窗口?

15 投票
2 回答
39265 浏览
提问于 2025-04-15 22:28

我正在尝试用Python最大化一个特定的窗口...

事情是这样的: 我有一个脚本,它会打开两个Firefox窗口(使用selenium rc),我需要最大化第二个窗口,也就是最后打开的那个窗口... 我该怎么做呢?

我正在使用这个命令

window = win32gui.GetForegroundWindow()
win32gui.MoveWindow(window, 0, 0, 1440, 900, True)

这个命令运行得很好,但只对当前聚焦的窗口有效...而脚本打开的第二个Firefox窗口并没有被聚焦...

2 个回答

13

如果你不想安装额外的模块,可以使用内置的 ctypes 模块。使用方法和上面提到的答案差不多,只是你直接和DLL文件打交道,不需要安装其他东西。

首先,这里是代码:

import ctypes

user32 = ctypes.WinDLL('user32')

SW_MAXIMISE = 3

hWnd = user32.GetForegroundWindow()

user32.ShowWindow(hWnd, SW_MAXIMISE)

接下来是解释:

  • 获取ctypes模块。
  • 获取合适的运行环境,具体可以参考 Windows文档,查找“Requirements”部分。
  • SW_MAXIMISE 的值设置为3,因为这个值(在 文档中说明)是用来将窗口最大化的。
  • hWnd = user32.GetForegroundWindow() 用来获取当前最前面的窗口(就是在所有窗口上面的那个)- 详细描述可以查看 这里
  • 使用 ShowWindow() 来控制窗口的显示状态。这个函数需要两个参数,一个是窗口的句柄(上面定义的 hWnd),另一个是窗口的显示方式(在 SW_MAXIMISE = 3 中设置为3)。你可以查看 文档,了解更多选项。

当然,你可以把这些代码放进一个函数里,这样使用起来会更方便。


另一种方法:

因为在这种情况下不需要考虑跨平台的问题,你可以选择构建一个C或C++的扩展。

优点:

缺点:

  • 需要编译(因为只在Windows上运行,所以只需要关注x32位和x64位的编译)
  • 必须是一个模块(也就是说,你不能把它整合到一个文件里)
  • 需要对C或C++有基本了解,同时也要了解Python的API

实际上要调用的函数应该不会太难:

static PyObject * max_win(PyObject *self, PyObject *args) {
    ShowWindow(GetForegroundWindow(), SW_MAXIMISE);
    return Py_BuildValue(""); // Return nothing
}

注意这只是实际代码的一部分

27

这应该可以工作

import win32gui, win32con

hwnd = win32gui.GetForegroundWindow()
win32gui.ShowWindow(hwnd, win32con.SW_MAXIMIZE)

撰写回答