2017-08-12 3 views
0

Assez nouveau à AS, mais je n'ai pas rencontré une question similaire. J'utilise AppleScript pour obtenir des informations à partir de l'interface utilisateur d'une fenêtre d'application. La fenêtre a un texte statique x avec la valeur "Nom", et je veux obtenir la valeur du texte statique suivant, qui serait le texte statique x + 1 ("John Smith"). La valeur de x diffère cependant dans chaque cas, donc je ne peux pas simplement me référer au texte statique 9 car il peut s'agir de texte statique 47 la prochaine fois.Obtenir le numéro d'index du texte statique avec une certaine valeur (AppleScript)

Ma solution est maintenant d'obtenir la valeur de chaque texte statique disponible dans la fenêtre et l'ajouter à une liste. Ensuite, je trouve le premier élément avec la valeur "Nom", et se référer à cet élément + 1 pour obtenir le nom réel que je veux. Cependant, comme la fenêtre peut contenir beaucoup de textes statiques, cette méthode prend du temps.

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 

Yat-il un moyen simple d'obtenir x x texte statique avec une certaine valeur, donc je peux obtenir une valeur de texte statique x + 1?

Répondre

1

Vous pouvez obtenir, à partir de votre fenêtre avant, toutes les valeurs de texte statique dans une liste avec une seule instruction. Puis recherchez dans cette liste et quand trouvé, obtenez juste l'article suivant. Script ci-dessous donne un exemple:

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 

Les derniers test vérifie que la valeur a été trouvée dans un texte statique ou retour « » sinon.