如何判断某个特定应用是否已打开并检索其窗口句柄?

时间:2017-11-16 10:11:25

标签: matlab window object-reference handles matlab-app-designer

我们如何检测应用程序是否已打开并获取其应用程序对象的句柄?

之前,使用figure,在图findobj上使用一些'Tag'是切实可行的。然后,我们可以检查它是否存在,并检索图形的内容。但我没有找到如何使用应用程序来管理它。

通常:我有一个主应用程序,当我点击按钮时会打开一个新的应用程序窗口。然后,如果我再次单击该按钮,我想检查第二个应用程序窗口是否已经打开,如果是,请取其应用程序对象,或删除第二个窗口等。如何捕获它?有没有办法用findobj或类似函数捕获它?

如果我可以通过使用get/setappdata保存app对象来避免这样做,那就太好了。

1 个答案:

答案 0 :(得分:0)

要获取其他窗口的句柄,我建议在主应用程序类中创建一个新属性,该属性将存储2 nd 应用程序的句柄,初始化为空图形句柄(gobjects(0))。然后,在执行按钮回调期间,检查这是否是有效句柄(~isempty(h) && isvalid(h)),并根据结果创建新的uifigure或使用现有的uifigure。

如果你坚持要获得一个数字句柄列表,那么根据已知属性(例如你可以使用this uifigure Name)找到合适的数字句柄并尝试找到正确的句柄:

hFigs = findall(groot, 'Type', 'figure');

如果需要/有用区分图形/ uifigure窗口,您也可以使用this技术:

hUIFigs = hFigs(arrayfun(@(x)isstruct(struct(x).ControllerInfo), hFigs));

或者,要判断应用是否已打开,您可以拨打以下undocumented function

webWindows = matlab.internal.webwindowmanager.instance.findAllWebwindows();

然后将返回对象的'Title'字段与您要查找的字段进行比较。