Xorg

如何在 bash 中找到滑鼠指針下的 X 視窗 ID?

  • February 22, 2022

從 bash 腳本中,是否有某種方法可以獲取滑鼠指針下 X 視窗的 ID?

(編輯)我需要這個過程是非互動式的。

xdotool公開指針位置 ( xdotool getmouselocation),最新版本(自 2.20110530.1 起)也指示哪個視窗位於該位置。沒有一個xwininfowmctrl舊版本xdotool似乎有辦法通過可見的螢幕位置來匹配視窗。

底層 X 庫呼叫是XQueryPointer(對應一條QueryPointer消息)。這是一個圍繞此呼叫的簡單 Python 包裝腳本(使用ctypes)。錯誤檢查在很大程度上被省略了。假設您使用的是螢幕 0(如果您不知道顯示器可能有多個螢幕,請忽略這一點)。

#! /usr/bin/env python
import sys
from ctypes import *
Xlib = CDLL("libX11.so.6")
display = Xlib.XOpenDisplay(None)
if display == 0: sys.exit(2)
w = Xlib.XRootWindow(display, c_int(0))
(root_id, child_id) = (c_uint32(), c_uint32())
(root_x, root_y, win_x, win_y) = (c_int(), c_int(), c_int(), c_int())
mask = c_uint()
ret = Xlib.XQueryPointer(display, c_uint32(w), byref(root_id), byref(child_id),
                        byref(root_x), byref(root_y),
                        byref(win_x), byref(win_y), byref(mask))
if ret == 0: sys.exit(1)
print child_id.value

使用範例:

xwininfo -tree -id $(XQueryPointer)

引用自:https://unix.stackexchange.com/questions/16131