如何判断特定应用程序是否打开并检索其 window 句柄?

How to tell if a specific app is open and retrieve its window handle?

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

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

通常:我有一个主应用程序,当我点击一个按钮时它会打开一个新应用程序 window。然后,如果我再次点击按钮,我想检查第二个应用 window 是否已经打开,如果是,则获取它的应用对象,或者删除第二个 window,等等。我怎样才能捕捉到这个?有没有办法用 findobj 或类似的函数来捕获它?

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

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


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

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

如果区分figure/uifigurewindows是required/helpful,之后还可以使用技巧:

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

或者,要判断某个应用程序是否打开,您可以调用以下命令 undocumented function:

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

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