我们如何检测应用程序是否已打开并获取其应用程序对象的句柄?
之前,使用figure
,在图findobj
上使用一些'Tag'
是切实可行的。然后,我们可以检查它是否存在,并检索图形的内容。但我没有找到如何使用应用程序来管理它。
通常:我有一个主应用程序,当我点击按钮时会打开一个新的应用程序窗口。然后,如果我再次单击该按钮,我想检查第二个应用程序窗口是否已经打开,如果是,请取其应用程序对象,或删除第二个窗口等。如何捕获它?有没有办法用findobj
或类似函数捕获它?
如果我可以通过使用get/setappdata
保存app对象来避免这样做,那就太好了。
答案 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'
字段与您要查找的字段进行比较。