首页 > 解决方案 > 在可可应用程序中使用 AXUIElement 获取在 Mac OS 中运行的应用程序名称

问题描述

我正在使用 AXUIElement 找出 Mac OS 中所有正在运行的应用程序。使用它,当我移动鼠标时,当鼠标悬停在任何应用程序上时,我都会获得所有应用程序名称。

但我想过滤掉用户选择并在其中进行任何交互的应用程序。我正在获取诸如 AXFocused、AXEnabled、AXSelected 之类的参数,但这些参数不会在每次选择应用程序时返回 true。

"\n属性:\n AXFocused (W):“0”\n AXLayoutCount:“24”\n AXTitle:“”\n AXPreventKeyboardDOMEventDispatch (W):“0”\n AXElementBusy:“0”\n AXPosition:“x =1260 y=219”\n AXLinkedUIElements: “”\n AXSelected: “0”\n AXLanguage: “”\n AXStartTextMarker: “{length = 40, bytes = 0x060000000000000048730e6205000000 ... 0100000000000000}”\n AXEnabled: “1 ”\n AXLoaded:“1”\n AXVisited:“0”\n AXDOMIdentifier:“”\n AXHelp:“”\n AXLinkUIElements:“”\n AXChildren:“”\n AXRole:“AXWebArea”\n AXParent: “” \ n axselectedTextmarkerRange(w):“ {startmarker:{长度= 40,bytes = 0x130000000000000000A853046205000000 ... 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000000000来n AXDOMClassList: “”\n AXDescription:“MacRumors 时事通讯”\n AXURL: “x-webdoc://21082B85-5712-4B41-9669-1BF2A39AA32D”\n AXCaretBrowsingEnabled (W): “0”\n AXValue: “”\n AXBlockQuoteLevel: “0”\n AXRoleDescription: “HTML 内容”\n AXSize: “w=785 h=3416”\n AXLoadingProgress: “1”\n AXWindow: “”\n AXEndTextMarker: “{length = 40, bytes = 0x35010000000000007042fe6505000000 ... 010000000000000}” \n AXFrame: “x=1260 y=219 w=785 h=3416”\n\nActions:\n AXShowMenu - 显示菜单\n AXScrollToVisible - AXScrollToVisible\n"字节 = 0x35010000000000007042fe6505000000 ... 0100000000000000}”\n AXFrame:“x=1260 y=219 w=785 h=3416”\n\n操作:\n AXShowMenu - 显示菜单\n AXScrollToVisible - AXScrollToVisible\n”字节 = 0x35010000000000007042fe6505000000 ... 0100000000000000}”\n AXFrame:“x=1260 y=219 w=785 h=3416”\n\n操作:\n AXShowMenu - 显示菜单\n AXScrollToVisible - AXScrollToVisible\n”

例如上面是,当我打开“邮件”时。

所以我的问题是:1)是否可以过滤掉用户选择的应用程序而不仅仅是鼠标悬停?2)在访问我的应用程序之前,有没有其他方法可以找出正在与哪个应用程序用户进行交互?

标签: macoscocoaaccessibilityaxuielement

解决方案


终于得到了解决方案。

当应用程序使用 NSWorkSpace 激活时,我们可以让任何其他应用程序在 Mac 中运行。

查看这个答案,它帮助我找到了解决方案。如何检索当前接收关键事件的 OSX 应用程序


推荐阅读