Applescript执行操作AXShowMenu

Applescript执行操作AXShowMenu,applescript,imessage,uiaccessibility,Applescript,Imessage,Uiaccessibility,我到处寻找答案,但找不到这方面的任何东西。当我运行此代码时,操作AXShowMenu将正确执行。但是脚本继续运行几秒钟并抛出错误: 处理“消息”的窗口“消息”的拆分器组1的滚动区域3的文本字段的菜单按钮的操作“AXShowMenu”不理解“执行”消息 我是不是错过了一些显而易见的东西?如何使Applescript在执行AXShowMenu操作后继续运行 tell application "System Events" tell process "Messag

我到处寻找答案,但找不到这方面的任何东西。当我运行此代码时,操作AXShowMenu将正确执行。但是脚本继续运行几秒钟并抛出错误:

处理“消息”的窗口“消息”的拆分器组1的滚动区域3的文本字段的菜单按钮的操作“AXShowMenu”不理解“执行”消息

我是不是错过了一些显而易见的东西?如何使Applescript在执行AXShowMenu操作后继续运行

tell application "System Events"
    tell process "Messages"
            perform action "AXShowMenu" of menu button of text field of scroll area 3 of splitter group 1 of window "Messages"
    end tell
end tell


这是指向我试图访问的菜单的链接。如果您创建新消息并在文本字段中输入一些文本,则可以创建元素。

确定您的最终目标是确定在消息应用程序的
to:
字段中输入的号码是在iMessage服务还是SMS服务下运行,您可以尝试使用
伙伴
服务
对象的属性来确定它们是否可以用于有效区分数字类型

由于我没有iPhone,我的短信应用程序没有短信功能。然而,当我输入一些随机数时,我观察到它将被Messages应用程序分类为我认为最适合数字性质的服务类型:

use application "Messages"

service type of services of buddy "12343" = iMessage
对我来说,这会返回
true
,原因很简单,因为
iMessage
是在我的Messages应用程序中运行的唯一活动服务类型。但是,此响应与应用程序内弹出菜单中显示的内容是一致的

因此,假设逻辑如下,我希望您可以使用这两行,根据需要交换数字,并计算出一个值,该值要么为
true
,要么为
false
;或者,也许首先要弄清楚,你的短信应用程序是否有一个“默认”服务,它将不确定性质的数字进行分类。我的猜测是,考虑到这两种服务都可以选择,它将倾向于使用“SMS”而不是iMessage,在这种情况下,以下脚本可能更合适:

use application "Messages"

name of service of buddy "12343" = "SMS"

NB:可能不同的地区使用不同的服务名称,英国系统上的AppleScript称之为
服务“SMS”
可能是美国系统上的
服务“文本消息”
,也可能是您所在的任何地方


通过运行
告诉应用程序“Messages”获取每个服务的名称,您可以轻松地对每个消息的名称执行快速初始检查
服务
。该列表将包含4或5项潜在服务,但将明确哪些服务适用于短信,哪些服务适用于iMessage,虽然有点模糊,但最终很明显。

我继续,并将其添加到描述中。我实际上解决了这个问题:“告诉菜单按钮1的文本字段1的滚动区域3的拆分器组1的窗口“消息”执行操作1”,但由于某种原因,这需要5秒以上的时间来执行。你想访问菜单项以创建新的联系人。。。出现在弹出菜单中的?如果是这样的话,如果您从主菜单栏访问菜单项,而不是通过弹出菜单,是否会更容易?实际上,我正试图通过引用第一个菜单项的值来确定数字是imessage还是文本消息,在本例中,第一个菜单项恰好是“文本消息”。不幸的是,由于某种原因,我得到的长时间延迟大大减慢了脚本的速度。从表面上看,您是否尝试过将索引添加到链的最后两个元素:即,
执行操作“AXShowMenu”,该操作位于…的文本字段1的菜单按钮1中。
。我很惊讶你的代码可以正常工作(显然AppleScript有时可以根据上下文计算索引),但最好是具体一点。好主意!尽管这仍然给我带来了一个问题。无论输入哪个伙伴文本,语句=iMessage都为true。即使好友服务实际上是SMS。那么,请按照我的第二个代码片段使用服务的名称,而不是使用
服务类型
?告诉我这是怎么回事。这种方法对你聊天记录中建立的好友很有效,但每次添加新的收件人时,它似乎会将两个好友添加到好友列表中。一个使用短信,一个使用iMessage服务。所以我永远也分不清哪个是正确的。我通过使用:告诉应用程序“消息”来获取buddy的每个服务的名称,从而发现了这一点。这里列出了两个同名不同服务的好友。很抱歉,事情没有按计划进行。你所描述的对我来说像个虫子。我想你可以向苹果报告,但我怀疑他们会在意。