目前我正在試圖找到,如果我的Windows的一個是鼠標光標下方。這不是在我創建窗口的過程中完成的,而是在另一個過程中完成的。X11:XQueryPointer讓我模糊的Windows
什麼我目前做的是通過查找該進程的PID窗口(我確信_NET_WM_PID
是由我的程序設置是否正確)。這基本上通過XQueryTree
和XGetWindowProperty
工作。這工作正常,不是問題。
的問題是,XQueryPointer
讓我模糊的Windows回來。我寫了一個簡單的測試程序來展示我的意思。首先使用命令xprop
通過bash從任何你喜歡的窗口收集一個ID。它會給你窗口ID。
然後運行這個簡單的測試程序,我寫的(快速和骯髒的),它可以讓你從每一個窗口0,5s當前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;
}
有人可以告訴我是什麼問題是什麼?
這裏是我的榜樣輸出: 我的程序發現窗口ID 73400324
xprop
發現窗口ID 73400324
測試程序查找窗口ID 20996726
因爲一些原因,我不能捕獲這些事件,我需要通過外部程序來做到這一點。我可以以某種方式檢測任何窗口ID的「主」窗口嗎?這將永遠是一個窗口,是根窗口的孩子嗎?在那種情況下,我可以到達我找到的XID的父窗口,直到我到達窗口上方的一個窗口。 – Nidhoegger
是的,順序應該是RootWindow - > DecorationWindow - > AppWindow(其中DecorationWindow是由窗口管理器添加的)。 XQueryTree應該能夠告訴你更多... – JvO