gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:55:03 25 4
gpt4 key购买 nike

我有两个程序,我希望一个程序将一个结构附加到它的窗口,另一个程序读取这个结构。我必须使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com