Skript zum Abrufen von Fenstern außerhalb des Anzeigebereichs

6

Ich habe ein Problem mit meinem neuen Monitor. Wenn ich den Bildschirm entsperre, hängen häufig Fenster über den Desktop-Rahmen hinaus. Es ist ziemlich ärgerlich, sie manuell in die Fenstermitte ziehen zu müssen.

Zum Glück habe ich ein Skript gefunden, das dies für mich erledigt : https://github.com/bradchoate/gather-windows/blob/master/Gather%20Windows.applescript

Leider funktioniert es nur über das Skripteditorfenster. Wenn ich versuche, es durch Klicken auf den Namen in der Skript-Menüleiste auszuführen, geschieht nichts. Ich habe versucht, es als Anwendung zu speichern und auszuführen, um den gleichen Effekt zu erzielen.

Kann mir jemand dabei helfen?

Autoencoder
quelle
Das ist eine gute Frage. Ich habe auch dieses Problem! Vielen Dank, dass Sie das Skript geteilt haben, das Sie gefunden haben.
TH

Antworten:

4

Ich ging zu der URL in Ihrer Frage, klickte auf die Raw- Schaltfläche, kopierte den Code und fügte ihn in den Skript-Editor ein , wo ich ihn als Anwendung mit dem Namen Gather Off-Screen Windows.app speicherte

Ich ging dann zu Systemeinstellungen > Sicherheit & Datenschutz > Barrierefreiheit , wie im Bild unten gezeigt, und fügte die Windows.app Off-Screen-Gather hinzu .

Ich habe einige Fenster vom Bildschirm entfernt und dann die Gather Off-Screen Windows.app ausgeführt . Sie wurde fehlerfrei abgeschlossen und die Off-Screen-Fenster wurden vollständig auf den Bildschirm verschoben.

Bild 1 einfügen

Wenn ich jetzt die Windows.app Offscreen-Sammlung zu Systemeinstellungen > Sicherheit & Datenschutz > Barrierefreiheit hinzugefügt hätte, hätte ich erwartet, dass beim Ausführen der App die folgenden Dialogfelder angezeigt werden (welche manchmal erscheint eines oder beide nicht):

Bild 2 einfügen

Bild 3 einfügen

Abgesehen davon, lassen Sie mich sagen, dass ich das Skript zwar nicht gründlich studiert habe, um die Mechanik des Skripts zu verstehen, aber dennoch zu Beginn sehe, was ich für eine schlechte Codierung in diesem Fall halte, und die folgende Codezeile abändern würde :

repeat with proc in application processes

Zu:

repeat with proc in (application processes whose visible is equal to true)

Der Grund, warum diese Änderung für mich sinnvoll ist, ist, dass zurzeit 38 Anwendungsprozesse ausgeführt werden, von denen nur 10 sichtbar sind. Daher erscheint es sinnlos, die 28 Anwendungsprozesse, die nicht einmal sichtbar sind, weiter abzufragen.

Beachten Sie auch, dass ich einige Off-Screen-Fenster vor dem Ausführen der App sogar minimiert habe und sie dann vollständig auf dem Bildschirm angezeigt wurden, als ich sie nicht minimierte. Daher handelt es sich bei der visibleEigenschaft in diesem Fall um den Prozess nicht minimierter Offscreen-Fenster, die zwar minimiert sind, aber nicht sichtbar sind.

user3439894
quelle
Vielen Dank für die Antwort und die Tipps zum Ändern des Skripts. Haben Sie Vorschläge, wie Sie das Skript so ändern können, dass es mit mehreren Monitoren funktioniert? Im Moment wird das Fenster auf mehreren Monitoren nur dann erfasst, wenn das Fenster an einem Rand außerhalb des Bildschirms ist, der nicht an einen anderen Monitor angrenzt.
Autoencoder
@autoencoder, Wie ich in meiner Antwort bemerkte, "habe ich das Skript noch nicht gründlich studiert, um seine Mechanik zu verstehen ", muss ich den Code ein wenig studieren, um zu sehen, ob ich das Problem mit mehreren Monitoren lösen kann , obwohl ich nur mit zwei Monitoren testen kann.
user3439894
Das wäre toll! Lassen Sie mich wissen, wenn Sie etwas einfallen. Ich habe mir das Skript angesehen und es erhält Dimensionen für den gesamten Desktop und prüft, ob jedes Fenster innerhalb dieser Dimensionen liegt. Es wäre schön, wenn das Skript zwischen einzelnen Monitoren mit den entsprechenden Fenstern wechseln würde. Leider habe ich keine Erfahrung mit Apple Script und weiß nicht, wo ich anfangen soll.
Autoencoder
3

Ich würde Automator verwenden, um einen Dienst zu erstellen, der das Apple Script ausführt. Als Bonus können Sie auch die Systemeinstellungen verwenden, um dem Dienst eine Tastenkombination zuzuweisen.

Nachfolgend sind die einzelnen Schritte aufgeführt.

1. Erstellen Sie einen Dienst mit Automator

  1. Automator starten (normalerweise in Ihrem Anwendungsordner)
  2. Gehen Sie zu Datei> Neu
  3. Wählen Sie Service und klicken Sie auf Choose
  4. Stellen Sie in der oberen rechten Ecke des angezeigten Fensters sicher, dass in der Dropdown-Liste " Dienst erhält " die Option "Keine Eingabe" ausgewählt ist
  5. Sicherstellen , dass die in der Dropdown-Liste angezeigt wird „Jede Anwendung“
  6. Suchen Sie in der zweiten Spalte mit der langen Liste nach "AppleScript ausführen" und doppelklicken Sie darauf
  7. Dadurch wird das AppleScript-Fenster "Ausführen" auf der rechten Seite hinzugefügt
  8. Nun ersetzen die (* Ihr Skript hier * geht) mit dem Skript Sie möchten
  9. Speichern Sie den Dienst unter einem aussagekräftigen Namen (z. B. Fenster sammeln).
  10. Beenden Sie Automator

Jetzt würde ich den Dienst testen, indem ich ein paar Fenster vom Bildschirm verschiebe. Sie können den Dienst von jeder Anwendung aus ausführen, indem Sie die Liste Dienste in einem beliebigen Anwendungsmenü aufrufen (z. B. Finder> Dienste, Safari> Dienste, TextEdit> Dienste usw.) und den soeben erstellten Dienst auswählen.

Vorausgesetzt, es funktioniert, können Sie auch eine Tastenkombination erstellen, um es auszuführen.

2. Erstellen Sie Ihre Verknüpfung

  1. Gehen Sie zu Systemeinstellungen> Tastatur> Verknüpfungen
  2. Wählen Sie in der Seitenleiste Dienste aus
  3. Finden Sie Ihren Service (in der Liste auf der rechten Seite)
  4. Fügen Sie eine Verknüpfung hinzu, indem Sie auf den Dienstnamen doppelklicken
  5. Gehen Sie nun zu Systemeinstellungen> Sicherheit und Datenschutz> Datenschutz
  6. Wählen Barrierefreiheit in der Sidebar
  7. Klicken Sie auf das Pluszeichen (möglicherweise müssen Sie das Vorhängeschloss entsperren, wenn es gesperrt ist)
  8. Automator hinzufügen.
  9. Finder hinzufügen (um dies zu finden, müssen Sie zu /System/Library/CoreServices/Finder.app navigieren ).
  10. Beenden Sie Ihre Systemeinstellungen.

Jetzt sollten Sie in der Lage sein, die Tastenkombination zum Ausführen des Dienstes zu verwenden.

HINWEIS: Mir ist bekannt, dass einige Benutzer Tastenkombinationen nicht verwenden können, obwohl sie einem Dienst zugewiesen wurden. Dies ist ein ganz anderes Thema, aber wenn dies in Ihrem Fall der Fall ist, können Sie den Dienst zumindest in jeder von Ihnen verwendeten Anwendung ausführen.

Lass mich wissen, wie es dir geht.

Monomeeth
quelle