c++ - Xlib如何在不同的程序中使用XSaveContext/XFindContext

标签 c++ xlib

我有两个程序,我希望一个程序将一个结构附加到它的窗口,另一个程序读取这个结构。我必须使用 X。

我试过 XSaveContextXFindContext .我设法将一个结构附加到一个窗口,然后在同一个程序中读取它。

然后我制作了一个程序,它使用 XSaveContext 将结构附加到它的窗口。同时另一个程序列出了所有打开的窗口并尝试为每个窗口找到一个结构

保存上下文

XContext contextUserData = 100;
UserData data;
UserData *ptr_data = &data;

data.name = "app01 userdata name";
data.refNumber = 777;

XSaveContext(disp, win, contextUserData, XPointer(ptr_data));

std::cout<<"disp "<<disp<<" win "<<parent<<std::endl;

查找上下文:

XContext contextUserData = 100;
UserData data_return;
UserData *ptr_data = &data_return;
XPointer xpointer = XPointer(ptr_data);
XPointer *xptr = &xpointer;

if (XFindContext(mDisplay(), allWin[i], contextUserData, (xptr)) == 0)
{
    ptr_data = (UserData*)(*xptr);
    std::cout<<"name : "<<ptr_data->name<<" refNumber : "<<ptr_data->refNumber<<std::endl;
}
else
{
    std::cout<<"disp "<<mDisplay()<<" win "<<allWin[i]<<" No info"<<std::endl;
}

附加结构的程序显示如下:

disp 0x983d488 win 33554435

查找结构的程序显示如下:

disp 0x9f922f0 win 31457287 No info
disp 0x9f922f0 win 31457316 No info
disp 0x9f922f0 win 23137913 No info
disp 0x9f922f0 win 33554434 No info
disp 0x9f922f0 win 33554435 No info (the right window)
disp 0x9f922f0 win 23138015 No info

我测试了正确的窗口,但没有得到任何结果。

我想知道是否必须使用相同的显示调用 XSaveContext 和 XFindContext 才能返回结构。

所以我的问题是,如何将个人数据添加到窗口并使其他窗口可读?

谢谢。

最佳答案

您不能以这种方式在两个进程之间共享数据:

Note that this is local to your program; the data is not stored in the server on a property list

我建议使用 window properties作为共享数据存储

关于c++ - Xlib如何在不同的程序中使用XSaveContext/XFindContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23294246/

相关文章:

c++ - OpenCV 中的像素化实现

c++ - 结构体、链表、删除整个链表

c++ - 如何通过键盘布局获取 XLib 键的字符?

c++ - 如何释放 XopenDisplay 分配的资源

C++ 无法实例化抽象类子类

c++ - 如何从 C++ 中的文本文件中读取复数数组

c++ - 为什么这是有效的? (具有不同参数的模板类的模板友元函数)

XLib 的 Java 绑定(bind)

c - XFetchName 始终返回 0

c - 如何检测xlib应用程序是否从xinit运行?