You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取活动窗口位置?现有代码获取位置不更新的问题及修正

问题原因与解决方法

问题原因

你调用active_window.get_geometry()获取的是窗口相对于其父窗口的局部坐标,而非屏幕全局坐标。多数Linux窗口管理器会给应用窗口添加装饰框架(如标题栏、边框),应用窗口自身的局部坐标不会随窗口整体移动而改变,因此输出的位置始终固定。

正确实现代码

from Xlib import display, X

d = display.Display()
screen = d.screen()
root = screen.root

# 获取活动窗口ID
active_window_id = root.get_full_property(
    d.intern_atom('_NET_ACTIVE_WINDOW'), X.AnyPropertyType
).value[0]

# 处理无效窗口ID的情况
if active_window_id != 0:
    active_window = d.create_resource_object('window', active_window_id)
    
    # 将窗口局部坐标原点转换为屏幕全局坐标
    root_coords = active_window.translate_coords(root, 0, 0)
    x = root_coords.x
    y = root_coords.y
    
    print("window position (screen global):", x, y)
else:
    print("No active window detected")

d.close()

代码说明

translate_coords(root, 0, 0)方法会将当前窗口的原点(0,0)转换为根窗口(即整个屏幕)坐标系下的全局坐标,这样就能得到窗口在屏幕上的实际位置,移动窗口时输出的坐标值会随之更新。

内容的提问来源于stack exchange,提问作者yan cao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:53:17