如何用Python最大化特定窗口?
我正在尝试用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++的扩展。
优点:
- 不需要ctypes(有时候这也是值得考虑的,具体可以看 这个问题的回答)
缺点:
- 需要编译(因为只在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)