Führen Sie AppleScript für einen bestimmten Monitor aus

Ich habe Dictation für Eingabeaufforderungen per Sprache aktiviert [erhielt es von der vom Betriebssystem gelieferten Chess-Anwendung in Lion]. Beschlossen, es jetzt im Jahr 2015 systemweit mit Yosemite zu versuchen. Mir gefällt es bisher, sieht auf jeden Fall besser aus und funktioniert besser als Lion (was der Fall sein sollte). Es gibt ein paar anpassbare Optionen, wenn Sie "Erweiterte Befehle aktivieren", wie Datei öffnen, Workflow ausführen, Anwendung öffnen, Text einfügen, einfügen Daten und Tastenkürzel.

Nennen Sie mich jedoch faul, aber es ist immer noch etwas, das mir wichtig ist, ich besuche Netflix & Hulu und andere Websites mindestens 4 Mal am Tag. Ich möchte einen funktionalen Befehl hinzufügen, der automatisch eine Webseite öffnet, die diesem Befehl entspricht. Da Open File anders ist als Run File, versuche ich, Safari + den Namen der Website in URL-Form mit Diktat autonom zu öffnen? Das Gute daran ist, dass es automatisch jede Anwendung, auf die Sie verweisen, zum vordersten Fenster macht. Die Codierung sollte also minimal sein, und ich möchte wirklich keinen Dienst dafür erstellen [meine Dienste wachsen, derzeit bei +55 insgesamt].

Ich bin jedoch ein Automator-Fan und kenne mich damit aus, also verwende ich das Dictation Command-Tool, aber was ich nicht bin, ist ein AppleScript-Gelehrter. Nachdem ich ungefähr 60 Minuten lang die Applescript-Bibliothek durchgelesen hatte, fand ich endlich heraus, wie man ein neues Fenster von Safari öffnet, die Anwendung aktiviert, falls sie nicht geöffnet war, und die URL startet:

tell application "Safari" to activate
    tell application "Safari"
        make new document with properties {URL:"http://netflix.com"}
end tell

Außerdem habe ich 3 Monitore. Ich habe immer Filme, Fernsehen usw. auf Nummer 2 abgespielt! Ich habe versucht, Safari mit Applescript auf den Monitor 2-Bildschirm zu setzen, aber als iOS-Entwickler ist es mir guten Gewissens zu peinlich, meinen Code zu teilen, es ist schlampig . Kann mich jemand in die richtige Richtung führen? Oder kennt jemand einen einfacheren Weg, das alles zu umgehen? Ich möchte wirklich, dass das funktioniert. fnIch bin beim Militär, also sind unsere Zimmer nicht so groß, also ist mein zweiter Monitor (27 Zoll) mein Fernseher, also habe ich eine iPhone-App nur für meine Bedürfnisse erstellt, die das zweimalige Drücken simuliert, das zum Aktivieren des Diktats erforderlich ist, damit ich zusehen kann Fernseher von meinem Bett aus [habe kein Apple TV].


BEARBEITEN:Mein Hauptziel ist es, die Sprachaktivierung zu verwenden, um eine Safari-spezifische Website mit Dictation für einen bestimmten Monitor zu füllen. Ich möchte meine „Spaces“- oder „Mission Control“-Einstellungen nicht opfern, da ich viel Arbeit darauf verwendet habe, diese für meinen Workflow zu nutzen. Ich habe 3 Monitore, die hintereinander aufgestellt sind (d. h. Monitor 1 & 3 sind direkt nebeneinander auf meiner Schreibtischstation, Monitor 1 ist links & 3 ist rechts, Monitor 2 ist nicht annähernd in der Nähe von 1 oder 3, dem er zugewandt ist Mein Bett, siehe Bild 1. Sie sind jedoch nacheinander eingerichtet, 1 geht zu 2, 2 geht zu 3. Ich habe Bereiche eingerichtet, in denen bestimmte Apps ausschließlich Monitor Nummer 3 verwenden (Xcode), was nicht so viel ausmacht So mühsam es klingt, deshalb möchte ich meine Raumeinstellungen nicht opfern, weil ich 2 als meinen dedizierten "Fernseher" verwende, das ist '

BILD 1:Bild1


Der Vorschlag von miken32 funktioniert, aber nur um ihn anzuzeigen, nicht um ihn zu minimieren. Das Minimieren ist wichtig, da ich die aktive Safari-Website minimieren muss, sagen wir Hulu, nur um Netflix zu öffnen, da sich Vollbild-Apps nicht überschneiden können. Ich werde also zwangsläufig eine weitere Sprachaktivierung vornehmen oder anderweitig minimieren, damit ich Webseiten ohne Blimps übertragen kann. Hinweis: Manchmal möchte ich nicht schließen, manchmal speichere ich meinen Platz, daher ist das Minimieren eine gute Ressource für mich. Folgendes passiert mit miken32: Es wird minimiert, aber ich denke, es versucht, zu den Ursprüngen zurückzukehren, die wir im Skript festgelegt haben, aber negativ wie in (-). HINWEIS: Ich weiß, dass die Ursprünge, die Sie im Applescript des Films sehen, nicht den absoluten Ursprung für meinen spezifischen Monitor widerspiegeln. Ich habe die Ursprünge zum Testen geändert. aber zum Aufnehmen des Films musste ich ihn auf diesen Bildschirm legen, also habe ich ihn so belassen, damit Sie sehen können, wohin er geht, wenn Sie ihn minimieren. Abgesehen davon funktioniert es großartig für die Menge an Code!. Ich bin froh, dass ihr die Vollbildoption aufgenommen habt, auch wenn ich nicht danach gefragt habe, das war absolut das, was ich im Sinn hatte, aber ich wollte niemanden stören, der versucht, das herauszufinden, mein Hauptziel war es, es einfach anzuziehen der 2te Monitor.

https://www.dropbox.com/s/jvmtnhh30hqmd36/answer1.mov?dl=0


markhuntes answer funktioniert einwandfrei, die Ladezeit beim ersten Lauf betrug etwa 15 Sekunden, kein Grund zur Sorge, aber definitiv nicht optimal für den täglichen Gebrauch, nachfolgende Läufe waren jedoch minimal (maximal 3-6 Sekunden). Was ich an seinem Vorschlag mag, ist, dass er automatisch den zweiten Monitor findet, anstatt dass ich ihn fest codieren muss, was aus Verbrauchersicht großartig ist, je weniger ich daran herumhantieren muss, desto besser, das ist eine großartige Funktion die Zukunft, sagen wir, ich ändere mein Setup oder ich bekomme einen Monitor mit einer anderen Größe usw. Ich muss einen absoluten Ursprung nicht neu codieren. Es gibt jetzt einen Nachteil, ich werde ein paar Tage damit herumspielen, nur um sicherzustellen, dass es nicht mit meinen anderen Systemeinstellungen kollidiert. Es minimiert, wo es sollte, was großartig ist, es wird genau ausgefüllt, aber ich '

ALCON - Bitte Prämienbeschreibung lesen -
Vielleicht möchten Sie am Ende einen zusammenfassenden Satz hinzufügen, um deutlich zu machen, wonach genau Sie suchen.
Ich denke, der Titel sagt alles, @miken32, aber nein, wenn ich zurück an meinen Computer komme, werde ich ihn aktualisieren und dich markieren

Antworten (2)

Dieses Skript in einem Automator Dictation-Befehl scheint zu funktionieren.

Nicht der Vollbildmodus funktioniert nicht richtig, wenn er im Automator oder Skripteditor ausgeführt wird. Es übernimmt das vorherige Fenster 1.

Aber jedes Mal, wenn ich den Diktatbefehl zum Laufen gebracht habe. (finde es immer ein bisschen mühsam, sie dazu zu bringen, mich zu verstehen) Es hat zu 100% das richtige Fenster.

Dieses Skript verwendet den System-Profiler, um die Monitore abzurufen. und ein bisschen einfaches Herumspielen, um die Breite von Monitor 1 zu verwenden, um zu bestimmen, wo die Grenzen von Monitor 2 sind.

Ich habe es so gemacht, weil Sie sich möglicherweise dafür entscheiden, den Vollbildmodus nicht zu verwenden

Ich habe auch versucht, das Skript für Leute mit einem Monitor zugänglich zu machen

set theScreens to paragraphs of (do shell script "system_profiler SPDisplaysDataType -detailLevel |grep \"Resolution:\" | awk -F\"Resolution: \" '{print $2}'")
set theMonitor to ""

set the counter to count of theScreens --- set to 1 if you want to test it on monitor 1
if (counter) > 1 then
    -- we will do things for monitor 2
    set thisDisplayWidthHeightMonitor_2 to {(word 1 of item 1 of theScreens) + 2, 0, ((word 1 of item 1 of theScreens) + (word 1 of item 2 of theScreens)), word 3 of item 2 of theScreens}
    set theMonitor to thisDisplayWidthHeightMonitor_2
else
    -- we will do things for monitor 1
    set thisDisplayWidthHeightMonitor_1 to {0, 0, (word 1 of item 1 of theScreens), (word 3 of item 1 of theScreens)}
    set theMonitor to thisDisplayWidthHeightMonitor_1
end if

tell application "Safari"
    activate
    make new document with properties {URL:"http://netflix.com", index:1}

    set bounds of window 1 to theMonitor

end tell

tell application "System Events"
    tell application process "Safari"
        set value of attribute "AXFullScreen" of window 1 to true
    end tell
end tell
Nun, ich werde nicht einer dieser Idioten sein, die konkurrierende Antworten ohne guten Grund ablehnen ;) Aber ... Ich werde darauf hinweisen, dass dies aufgrund des Shell-Skriptaufrufs und des zweiten Monitors erheblich langsamer ist als meine Antwort bit funktioniert nicht, wenn die Monitore nicht ordentlich aufgereiht sind. Zum Beispiel habe ich meine sekundäre Anzeige über und links von meiner Hauptanzeige, daher die negativen Zahlen in meiner Antwort.
Ja. Ich würde es erwarten. Es ist nicht so sehr der Aufruf des Shell-Skripts. Mehr der Aufruf von system_profiler. Was langsam ist. Aber es funktioniert schnell genug, um kein Problem zu sein. Die OP sagt nicht, wie ihre Monitore angeordnet sind, und ich habe nur zwei Monitore nebeneinander. Aber in Wirklichkeit ist dies nur eine weitere Möglichkeit, sich ein Bild von einigen Optionen zu machen.
@ miken32 siehst du, einiges davon fandest du schon nützlich set value of attribute "AXFullScreen" of first window to true:-)
Ich tat! Ich habe das zuerst versucht, aber das "des ersten Fensters" vergessen und konnte nicht herausfinden, warum ich einen Fehler bekam.
@ miken32 Um ehrlich zu sein, ist das Layout kein Problem, das ist unter diesen Umständen wahrscheinlich am einfachsten zu ändern. Dementsprechend würde ich mir gerne Zeit nehmen, da ich gerade meinen ganzen Ruf verschenkt habe, ich bin immer noch auf der Arbeit [Alaska-Zeit hier], also werde ich den Fehler beheben, wenn ich nach Hause komme. Danke euch beiden für eure Antworten -
@markhunte Ja, es ist schwierig, es mit dem eingebauten Mikrofon aufzunehmen. Allerdings skype ich viel mit meiner Familie, da das Militär oft umzieht, also habe ich ein großartiges Skype-Mikrofon, das zu gut darin ist, gesprochene Worte im ganzen Raum aufzunehmen. Danke für deine Antwort. Ich bin wirklich aufgeregt, nach Hause zu kommen und diese auszuprobieren
@soulshined, aus Neugier, wie sendet Ihre iOS-App das Schlüsselereignis an den Mac.
@markhunte aktivieren Sie einfach ein persönliches VPN und simulieren Sie einen Tastencode. Drücken Sie zwischendurch zweimal 63. Eine Verzögerung von 0,1 importiert einige Frameworks, die sich gut mit iOS und Mac vertragen, wie die meisten es heutzutage tun, aber ich möchte mein iPhone-Mikrofon einschließen Delegierten für diesen Prozess, aber das ist ein anderes Thema. Ich könnte der App einfach Schaltflächen für die jeweilige Website hinzufügen. Wahrscheinlich der vernünftigere Weg.
Vielen Dank für Ihre Antwort @markhunte - siehe überarbeitete Frage
Gut gemacht, vielen Dank für Ihre harte Arbeit und Ihre Unterstützung bei diesem Projekt mit einem Abschluss in professioneller Qualität. Ich habe den Titel meiner Frage aktualisiert, um Ihre Antwort besser widerzuspiegeln, in der Hoffnung, dass die Leute Sie in Zukunft mit derselben Frage (wie das jemals passieren wird) @markhunte positiv bewerten
@soulshined Danke für deine Kommentare. Freut mich, dass es bei dir so gut funktioniert hat. Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen und hoffentlich kann ich.
Ich vermute, das Wort "Auflösung" sollte x -mal für x Monitore erscheinen ? Es hat bei mir nicht funktioniert. Könnte es an gesperrten Administratorberechtigungen liegen (dh ich habe keine) oder an der Verwendung einer externen Dockingstation?

Ich werde meinen Kommentar nehmen und daraus eine Antwort machen; Vorausgesetzt ich verstehe zumindest was du suchst.

Getestet diesen Code und es funktioniert gut für mich. Sie müssen die Zahlen anpassen, um die relative Position Ihres Monitors anzugeben. Vorausgesetzt, Sie bewegen Ihre Bildschirme nicht, handelt es sich um einen einmaligen Eintrag.

Wir danken dieser Antwort auf SO , die auch einen Link zu einem Dienstprogramm bereitstellt, um die Details der Bildschirmposition abzurufen.

# this needs to be a position on the desired monitor
set monitorPosition to {-1920, -1380}

tell application "Safari"
    activate
    make new document with properties {URL:"http://netflix.com"}
end tell

tell application "System Events"
    tell process "Safari"
        set position of first window to monitorPosition
        set value of attribute "AXFullScreen" of first window to true
    end tell
end tell