User interface 获取具有特定值的静态文本的索引号(AppleScript)

User interface 获取具有特定值的静态文本的索引号(AppleScript),user-interface,text,static,applescript,User Interface,Text,Static,Applescript,对AS来说相当陌生,但我还没有遇到类似的问题。我正在使用AppleScript从应用程序窗口的UI获取信息。该窗口有一个静态文本x,其值为“Name”,我想得到下一个静态文本的值,即静态文本x+1(“John Smith”)。但是,x的值在每种情况下都不同,因此我不能简单地引用静态文本9,因为下次它可以是静态文本47 我现在的解决方案是获取窗口中可用的每个静态文本的值,并将其添加到列表中。然后我找到第一个值为“Name”的项,并引用该项+1以获得我想要的实际名称。但是,由于窗口可能包含相当多的静

对AS来说相当陌生,但我还没有遇到类似的问题。我正在使用AppleScript从应用程序窗口的UI获取信息。该窗口有一个静态文本x,其值为“Name”,我想得到下一个静态文本的值,即静态文本x+1(“John Smith”)。但是,x的值在每种情况下都不同,因此我不能简单地引用静态文本9,因为下次它可以是静态文本47

我现在的解决方案是获取窗口中可用的每个静态文本的值,并将其添加到列表中。然后我找到第一个值为“Name”的项,并引用该项+1以获得我想要的实际名称。但是,由于窗口可能包含相当多的静态文本,因此此方法需要一些不必要的时间

set MyList to {}
tell application "System Events" to tell process "cBK" to set y to count static text of scroll area 2 of splitter group 1 of window 1
repeat with x from 1 to y
tell application "System Events" to tell process "cBK" to set end of MyList to value of static text x of scroll area 2 of splitter group 1 of window 1
end repeat
on findFirst(lst, val)
local lst, val, i
try
    if lst's class is not list then error "not a list." number -1704
    if {val} is not in lst then return 0
    script k
        property l : lst
    end script
    repeat with i from 1 to count of k's l
        if k's l's item i is val then return i
    end repeat
on error eMsg number eNum
    error "Can't findFirst: " & eMsg number eNum
end try
end findFirst
set Name to item (findFirst(MyList, "Name") + 1) of MyList

有没有一种简单的方法可以获得具有特定值的静态文本x的x,这样我就可以获得静态文本x+1的值?

您可以通过前面的窗口,通过一条指令获得列表中的所有静态文本值。然后在列表中搜索,找到后,只需获取下一项。下面的脚本提供了一个示例:

set myTarget to "Name"
tell application "System Events"
    tell process "cBK" to set myValues to value of every static text of front window
    repeat with i from 1 to count of myValues
        if item i of myValues is myTarget then exit repeat
    end repeat
    if i < (count of myValues) then
        set myNext to item (i + 1) of myValues
    else
        set myNext to "" -- not found
    end if
end tell
将myTarget设置为“Name”
告诉应用程序“系统事件”
告诉进程“cBK”将MyValue设置为前窗口每个静态文本的值
重复从1到MyValue计数的i
如果myValues的第i项是myTarget,则退出repeat
结束重复
如果我<(我的值计数),则
在MyValue的项目(i+1)旁边设置MyValue
其他的
将myNext设置为“”--找不到
如果结束
结束语

最后一个测试检查是否在静态文本中找到了值,如果没有,则返回“”。

您可以从前窗口通过一条指令获取列表中的所有静态文本值。然后在列表中搜索,找到后,只需获取下一项。下面的脚本提供了一个示例:

set myTarget to "Name"
tell application "System Events"
    tell process "cBK" to set myValues to value of every static text of front window
    repeat with i from 1 to count of myValues
        if item i of myValues is myTarget then exit repeat
    end repeat
    if i < (count of myValues) then
        set myNext to item (i + 1) of myValues
    else
        set myNext to "" -- not found
    end if
end tell
将myTarget设置为“Name”
告诉应用程序“系统事件”
告诉进程“cBK”将MyValue设置为前窗口每个静态文本的值
重复从1到MyValue计数的i
如果myValues的第i项是myTarget,则退出repeat
结束重复
如果我<(我的值计数),则
在MyValue的项目(i+1)旁边设置MyValue
其他的
将myNext设置为“”--找不到
如果结束
结束语
最后一个测试检查是否在静态文本中找到值,如果没有,则返回“”