C++ Xlib如何在不同程序中使用XSaveContext/XFindContext

C++ Xlib如何在不同程序中使用XSaveContext/XFindContext,c++,xlib,C++,Xlib,我有两个程序,我想一个附加一个结构到它的窗口,另一个读取这个结构。我必须用X 我试过了。我设法将一个结构附加到一个窗口,然后在同一个程序中读取它 然后我制作了一个程序,它使用XSaveContext将一个结构附加到它的窗口。同时,另一个程序列出所有打开的窗口,并尝试查找每个窗口的结构 保存上下文 查找结构的程序显示如下: disp 0x9f922f0 win 31457287 No info disp 0x9f922f0 win 31457316 No info disp 0x9f922f0 w

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

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

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

保存上下文 查找结构的程序显示如下:

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才能返回结构

因此,我的问题是,如何将个人数据添加到窗口中,并使其他窗口能够读取


谢谢。

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

请注意,这是您的程序的本地版本;数据未存储在数据库中 属性列表上的服务器

我建议将其用作共享数据存储

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