0

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

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

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

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

4

1 回答 1

0

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


如果您坚持获取图形句柄列表,然后查看它并尝试根据已知属性(例如 uifigure)找到正确的句柄,Name您可以使用以下答案:

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

如果需要/有帮助区分图形/uifigure 窗口,您也可以在之后使用技术:

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

或者,要判断应用程序是否打开,您可以调用以下未记录的函数

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

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

于 2017-11-22T09:55:25.437 回答