X11:XQueryPointer 给我模糊 Windows
X11: XQueryPointer gives me fuzzy Windows
我目前正在尝试查找我的 Windows 之一是否在鼠标光标下方。这不是在我创建 window 的过程中完成的,而是在另一个过程中完成的。
我目前正在做的是通过进程 PID 找到 Window(我确保我的程序正确设置了 _NET_WM_PID
)。这基本上通过 XQueryTree
和 XGetWindowProperty
起作用。这工作正常,不是问题。
问题是 XQueryPointer
给我模糊的 Windows 回复。我写了一个简单的测试程序来说明我的意思。首先使用命令 xprop
通过 bash 从任何 Window 收集一个 ID。它会给你 Window ID。
然后 运行 我写的这个简单的测试程序(又快又脏),它每隔 0.5 秒就会给你鼠标光标下方 Window 的当前 ID:
#include <X11/Xlib.h>
#include <iostream>
#include <unistd.h>
#include <stdint.h>
int main()
{
Display *display = XOpenDisplay(0);
Window root = XDefaultRootWindow(display);
Window root_return;
Window child_return;
int root_x_return;
int root_y_return;
int win_x_return;
int win_y_return;
uint32_t mask_return;
while (true)
{
if (::XQueryPointer(display, root, &root_return, &child_return, &root_x_return, &root_y_return, &win_x_return, &win_y_return, &mask_return) == True)
{
std::cout << "Window ID: " << child_return << std::endl;
}
usleep(500000);
}
return 0;
}
谁能告诉我问题出在哪里?
这是我的示例输出:
我的程序找到 Window ID 73400324
xprop
找到 Window ID 73400324
测试程序找到Window ID 20996726
可能是childwindows,或者是window经理给普通window加的装饰。
顺便说一下,检测您的 window 是否在鼠标下方的正常方法是捕获 XEnterWindowEvent 和 XLeaveWindowEvent,但这通常是在程序本身内完成的,而不是在外部。
我目前正在尝试查找我的 Windows 之一是否在鼠标光标下方。这不是在我创建 window 的过程中完成的,而是在另一个过程中完成的。
我目前正在做的是通过进程 PID 找到 Window(我确保我的程序正确设置了 _NET_WM_PID
)。这基本上通过 XQueryTree
和 XGetWindowProperty
起作用。这工作正常,不是问题。
问题是 XQueryPointer
给我模糊的 Windows 回复。我写了一个简单的测试程序来说明我的意思。首先使用命令 xprop
通过 bash 从任何 Window 收集一个 ID。它会给你 Window ID。
然后 运行 我写的这个简单的测试程序(又快又脏),它每隔 0.5 秒就会给你鼠标光标下方 Window 的当前 ID:
#include <X11/Xlib.h>
#include <iostream>
#include <unistd.h>
#include <stdint.h>
int main()
{
Display *display = XOpenDisplay(0);
Window root = XDefaultRootWindow(display);
Window root_return;
Window child_return;
int root_x_return;
int root_y_return;
int win_x_return;
int win_y_return;
uint32_t mask_return;
while (true)
{
if (::XQueryPointer(display, root, &root_return, &child_return, &root_x_return, &root_y_return, &win_x_return, &win_y_return, &mask_return) == True)
{
std::cout << "Window ID: " << child_return << std::endl;
}
usleep(500000);
}
return 0;
}
谁能告诉我问题出在哪里?
这是我的示例输出:
我的程序找到 Window ID 73400324
xprop
找到 Window ID 73400324
测试程序找到Window ID 20996726
可能是childwindows,或者是window经理给普通window加的装饰。
顺便说一下,检测您的 window 是否在鼠标下方的正常方法是捕获 XEnterWindowEvent 和 XLeaveWindowEvent,但这通常是在程序本身内完成的,而不是在外部。