from win32gui import FindWindow, GetWindowRect
# FindWindow takes the Window Class name (can be None if unknown), and the window's display text.
window_handle = FindWindow(None, "Diablo II")
window_rect = GetWindowRect(window_handle)
print(window_rect)
#(0, 0, 800, 600)
import ctypes
from ctypes.wintypes import HWND, DWORD, RECT
dwmapi = ctypes.WinDLL("dwmapi")
hwnd = 133116 # refer to the other answers on how to find the hwnd of your window
rect = RECT()
DMWA_EXTENDED_FRAME_BOUNDS = 9
dwmapi.DwmGetWindowAttribute(HWND(hwnd), DWORD(DMWA_EXTENDED_FRAME_BOUNDS),
ctypes.byref(rect), ctypes.sizeof(rect))
print(rect.left, rect.top, rect.right, rect.bottom)
7条答案
按热度按时间tvz2xvvm1#
假设您使用的是Windows,请尝试使用
pywin32
的win32gui
模块及其EnumWindows
和GetWindowRect
函数。如果您使用的是Mac OS X,可以尝试使用
appscript
。对于Linux,您可以尝试X11的许多接口中的一个。
**编辑:**Windows示例(未测试):
5uzkadbs2#
可以使用
GetWindowRect
函数获取窗口坐标,为此,需要一个窗口句柄,可以使用FindWindow
获取,前提是您了解该窗口的一些信息(例如它的标题)。要从Python调用Win32 API函数,请使用
pywin32
。zte4gxcn3#
正如Greg Hewgill提到的,如果知道窗口的名称,可以简单地使用win32gui的FindWindow和GetWindowRect,这可能比以前的方法更干净和高效。
供日后参考:PyWin32GUI现在已经迁移到Github
nlejzf6q4#
这可以从窗口标题返回窗口矩形
代码
环境
Python 3.8.2语言|由Conda-Forge Package |(默认值,2020年4月24日07:34:03)[MSC v.1916 64位(AMD64)],Windows 10专业版1909,基于win32
nwnhqdif5#
对于Linux,您可以使用我制作的工具here。该工具的用途略有不同,但您可以根据需要直接使用API。
安装工具
终端内
wid
和pid
分别代表窗口ID和进程ID。carvr3hs6#
这段代码可以在窗口上工作。它返回当前窗口的位置和大小。
yvgpqqbh7#
在其他回复中没有提到的是,在较新的Windows(Vista及以上版本)中,“窗口矩形现在包括投影所占用的区域。"这是
win32gui.GetWindowRect
和ctypes.windll.user32.GetWindowRect
所对接的。如果您想在不使用投影的情况下获得位置和大小,您可以:
1.手动删除它们。在我的例子中,左、下、右各有10个像素需要修剪。
1.使用
dwmapi
提取本文中提到的DWMWA_EXTENDED_FRAME_BOUNDS
使用
dwmapi.DwmGetWindowAttribute
时(请参阅here):此函数有四个参数:hwnd,我们感兴趣的属性的标识符,写入属性的数据结构的指针,这个数据结构的大小,通过检查this enum得到的标识符,在我们的例子中,属性
DWMWA_EXTENDED_FRAME_BOUNDS
在位置9。最后:“注意,与窗口矩形不同,DWM扩展帧边界不会针对DPI进行调整”。