Wählen Sie mit Applescript einen Menüpunkt eines Fensters anstelle eines Prozesses

1

Ich bin ganz neu in AppleScript (und ein Anfänger Programmierer) und ich habe eine Sackgasse getroffen. Ich habe herausgefunden, wie ich auf ein Menüelement eines Prozesses zugreifen kann, weiß aber nicht, wie ich es tun soll, wenn ich mehrere Fenster habe. Vielen Dank für jede Hilfe, die Sie geben können!

Hintergrund: Ich versuche, Applescript mit Fiji Is Just ImageJ (FIJI) zu verwenden, um mehrere hundert Bilddateien gleichzeitig zu verarbeiten. Ich muss das Plugin "Plugins> Segmentation> Simple Neurite Tracer" verwenden, aber es funktioniert nicht gut mit der FIJI-eigenen Makrosprache, daher versuche ich, AppleScript zu verwenden.

Was ich versucht habe: Ich habe bereits etwas eingerichtet, das die Bilder nacheinander durchläuft und das Plugin zu Mittag isst, aber danach kann ich nicht herausfinden, wie ich auf die neuen Menüs in den sich öffnenden Fenstern zugreifen kann.

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

Ich habe mit dem Eingabehilfen-Inspektor versucht, die Namen der Fenster herauszufinden, damit ich den gleichen Vorgang ausführen kann, den ich zum Starten des Plugins ausgeführt habe, aber ich konnte ihn nicht verstehen. Der Name des Fensters selbst ist vorhersehbar, sodass ich den Namen der Datei, die ich öffne, übernehmen und davor "Ablaufverfolgung für:" hinzufügen kann.

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben Ich war auf einer anderen Seite, die ähnlich war, konnte sie aber leider auch nicht anpassen - keine Schaltfläche, aber immer noch ein Menüelement in einem Fenster anstelle eines Prozesses anklicken : Wie klicke ich mit AppleScript auf eine Schaltfläche?

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

Ich habe dann versucht, MouseTools zu verwenden, aber es scheint nicht konsequent zu funktionieren. Der erste Mausklick registriert sich perfekt, der zweite funktioniert manchmal und manchmal nicht.

-- 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"
Sahir Moosvi
quelle

Antworten:

1

Ich muss sagen, dass Ihre Frage ziemlich ausführlich ist und viel Lesen und Nachdenken erfordert ...

Aber hier ist eine Version Ihres vorletzten Apfelskripts, die möglicherweise ein wenig besser für Sie funktioniert:

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) Was Sie "Menüfinder" genannt haben, ist eigentlich der Menüleisteneintrag "Datei".

2) Menüleisten mit Apple gehören (normalerweise) nicht zu "Fenster 1" (sondern zu Anwendungen). Sie müssten ein bestimmtes Fenster nach vorne bringen, um nur dieses zu verarbeiten.
Mit "Beenden" werden jedoch alle Fenster geschlossen ...

clemsam lang
quelle
Danke für deine Meinung! Am Ende musste ich Tastenanschläge ausführen, die für den Computer etwas intensiver waren, aber zumindest für meine Diplomarbeit arbeiteten. Ich werde es versuchen und meinem alten Labor hoffentlich ein Überraschungsgeschenk machen!
Sahir Moosvi