Gil*_*il' 35
xdotool
公开指针位置 ( xdotool getmouselocation
),并且最近的版本(自 2.20110530.1 起)也指示哪个窗口位于该位置。没有的xwininfo
,wmctrl
或旧版本的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
Run Code Online (Sandbox Code Playgroud)
用法示例:
xwininfo -tree -id $(XQueryPointer)
Run Code Online (Sandbox Code Playgroud)
Bru*_*ger 24
该xwininfo
命令提供了这种输出,但您必须单击要获取信息的窗口:
% xwininfo
xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.
xwininfo: Window id: 0xa0000d "flask"
...
Run Code Online (Sandbox Code Playgroud)
这样做:xwininfo | grep 'Window id:'
可能会给你一些你可以解析 ID 的东西。
Aqu*_*wer 10
试试这个,它只使用 xdotool,但它的版本至少是“2.20110530.1”
xdotool getmouselocation --shell | grep WINDOW
Run Code Online (Sandbox Code Playgroud)
要直接获取窗口 ID,您可以使用:
sedGetValue='s/.*=\(.*\)/\1/'
windowId=`xdotool getmouselocation --shell 2>/dev/null |grep WINDOW |sed "$sedGetValue"`
echo $windowId
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您有权访问python-xlib,这里有一个更短、更Pythonic的相当于 Gilles 的答案:
from Xlib.display import Display
display = Display()
window = display.screen().root
result = window.query_pointer()
print(result.child.id)
Run Code Online (Sandbox Code Playgroud)