sélectionner un élément de menu d'une fenêtre au lieu d'un processus utilisant Applescript


1

Je suis assez nouveau sur AppleScript (et un programmeur débutant) et je suis dans l'impasse. J'ai compris comment accéder à un élément de menu d'un processus, mais je ne sais pas comment le faire une fois que j'ai plusieurs fenêtres. Merci pour toute l'aide que vous pouvez nous apporter!

background: J'essaie d'utiliser Applescript avec Fiji Is Just ImageJ (FIJI) pour traiter quelques centaines de fichiers d'image à la fois. Je dois utiliser le plug-in "Plug-ins> Segmentation> Simple Neurite Tracer", mais cela ne fonctionne pas bien avec le langage de macro natif de FIJI. J'essaie donc applescript.

Ce que j'ai essayé: j'ai déjà mis en place quelque chose qui va parcourir les images une par une et lancer le plugin, mais après cela, je ne sais pas comment accéder aux nouveaux menus des fenêtres qui s'ouvrent.

tell application "Fiji" to activate
delay 3
menu_click({"Fiji", "Image", "Type", "8-bit"})


-- `menu_click`, by Jacob Rus, September 2006
-- 
-- Accepts a list of form: `{"Finder", "View", "Arrange By", "Date"}`
-- Execute the specified menu item.  In this case, assuming the Finder 
-- is the active application, arranging the frontmost folder by date.

on menu_click(mList)
local appName, topMenu, r

-- Validate our input
if mList's length < 3 then error "Menu list is not long enough"

-- Set these variables for clarity and brevity later on
set {appName, topMenu} to (items 1 through 2 of mList)
set r to (items 3 through (mList's length) of mList)

-- This overly-long line calls the menu_recurse function with
-- two arguments: r, and a reference to the top-level menu
tell application "System Events" to my menu_click_recurse(r, ((process appName)'s ¬
    (menu bar 1)'s (menu bar item topMenu)'s (menu topMenu)))
end menu_click

on menu_click_recurse(mList, parentObject)
local f, r

-- `f` = first item, `r` = rest of items
set f to item 1 of mList
if mList's length > 1 then set r to (items 2 through (mList's length) of mList)

-- either actually click the menu item, or recurse again
tell application "System Events"
    if mList's length is 1 then
        click parentObject's menu item f
    else
        my menu_click_recurse(r, (parentObject's (menu item f)'s (menu f)))
    end if
end tell
end menu_click_recurse

J'ai utilisé Inspecteur de l'accessibilité pour essayer de comprendre le nom des fenêtres afin que je puisse utiliser le même processus que celui utilisé pour lancer le plug-in, mais je n'ai pas été en mesure de le comprendre. Le nom de la fenêtre elle-même est prévisible, je peux donc prendre le nom du fichier que j'ouvre et ajouter "Suivi pour:" avant celui-ci.

entrez la description de l'image ici

entrez la description de l'image ici J'étais sur une autre page qui était similaire mais je ne pouvais pas l'adapter non plus tristement - pas de bouton mais toujours en cliquant sur un élément de menu dans une fenêtre au lieu d'un processus: comment cliquer sur un bouton avec AppleScript?

activate application "Fiji"
tell application "System Events" to tell process "Fiji"
click menu item "Quit" of menu "File" of menu bar 1 of window 1
--click button "Quit" of window 1 of window 1
end tell

J'ai ensuite essayé d'utiliser MouseTools mais cela ne semble pas fonctionner de manière cohérente. Le premier clic de souris s'enregistre parfaitement mais le second fonctionne parfois et parfois pas.

-- move the mouse to the x/y coordinates (as measured from the top-left part of the screen) and perform a mouse left-click
set mouseToolsPath to (path to home folder as text) & "MouseTools"
set x to 60
set y to 44

do shell script quoted form of POSIX path of mouseToolsPath & " -x " & (x as text) & " -y " & (y as text) & " -doubleLeftClick"


set x to 219
set y to 598

do shell script quoted form of POSIX path of mouseToolsPath & " -x " & (x as text) & " -y " & (y as text) & " -doubleLeftClick"

Réponses:


1

Je dois dire que votre question est plutôt élaborée et demande un peu de lecture et de réflexion ...

Mais voici une version de votre dernière mais AppleScript qui vient POURRAIENT travailler un peu mieux pour vous:

activate application "Fiji"
tell application "System Events" to tell process "Fiji"
    click menu item "Quit" of menu of menu bar item "File" of menu bar 1
end tell

1) Ce que vous avez appelé "menu finder" est en fait un élément de la barre de menu "Fichier"

2) Les barres de menus avec Apple (normalement) n'appartiennent pas à la "fenêtre 1" (mais aux applications). Pour traiter uniquement celle-ci, il vous faudrait une fenêtre spécifique au premier plan.
Quoi qu'il en soit, "Arrêter" fermera toutes vos fenêtres ...


Merci pour votre prise! J'ai dû utiliser des touches plus intensives pour l'ordinateur, mais au moins pour ma thèse. Je vais essayer cela et j'espère donner un cadeau surprise à mon ancien laboratoire!
Sahir Moosvi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.