Skript zum Abrufen von Fenstern über den Anzeigerand hinaus

Ich habe ein Problem mit meinem neuen Monitor. Wenn ich den Bildschirm entsperre, gibt es oft Fenster, die über die Desktop-Grenze hinaushängen. Es ist ziemlich irritierend, sie manuell zurück in die Fenstermitte zu ziehen.

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

Leider funktioniert es nur über das Skript-Editor-Fenster. Wenn ich versuche, es auszuführen, indem ich auf seinen Namen in der Skriptmenüleiste klicke, tut es nichts. Ich habe versucht, es als Anwendung zu speichern und auszuführen, mit dem gleichen Effekt.

Wer kann mir dabei helfen?

Das ist eine großartige Frage. Ich habe dieses Problem auch! Vielen Dank, dass Sie das gefundene Skript geteilt haben.

Antworten (2)

Ich ging zu der URL in Ihrer Frage, klickte auf die Schaltfläche „ Raw “ , 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 System Preferences > Security & Privacy > Accessibility , wie im Bild unten gezeigt, und fügte die Gather Off-Screen Windows.app hinzu .

Ich habe einige Fenster aus dem Bildschirm verschoben, dann die Gather Off-Screen Windows.app ausgeführt , und sie wurde ohne Fehler abgeschlossen und die Off-Screen-Fenster vollständig auf den Bildschirm verschoben.

Bild 1 einfügen

Während ich die Gather Off-Screen Windows.app nach dem Speichern zu Systemeinstellungen > Sicherheit & Datenschutz > Eingabehilfen hinzugefügt habe, hätte ich erwartet, dass die folgenden Dialogfelder angezeigt werden, wenn ich die App ausgeführt habe (was manchmal wird einer oder beide nicht angezeigt):

Bild 2 einfügen

Bild 3 einfügen

Lassen Sie mich sagen, dass ich das Skript zwar nicht gründlich studiert habe, um seine Mechanik zu verstehen, aber ich sehe, was ich in diesem Fall am Anfang als schlechte Codierung betrachte, und würde die folgende Codezeile ändern von :

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 zum Beispiel, dass ich derzeit 38 Bewerbungsprozesse laufen habe, von denen nur 10 sichtbar sind, und es daher sinnlos erscheint, die 28 Bewerbungsprozesse, die nicht einmal sichtbar sind, weiter abzufragen.

Beachten Sie auch, dass ich einige der Off-Screen-Fenster sogar minimiert habe, bevor ich die App ausgeführt habe, und als ich sie nicht minimiert habe, waren sie dann vollständig auf dem Bildschirm. Die visibleEigenschaft in diesem Fall bezieht sich also auf den Prozess, nicht minimierte Off-Screen-Fenster, die, während sie minimiert sind, nicht sichtbar sind.

Vielen Dank für die Antwort und die Tipps zum Ändern des Skripts. Hätten Sie Vorschläge, wie Sie das Skript so ändern können, dass es mit mehreren Monitoren funktioniert? Im Moment sammelt es das Fenster nur dann auf mehreren Monitoren, wenn das Fenster außerhalb des Bildschirms an einer Grenze liegt, die nicht an einen anderen Monitor angrenzt.
@autoencoder, Wie in meiner Antwort erwähnt, " obwohl ich das Skript nicht eingehend studiert habe, um die 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.
Das wäre toll! Lass mich wissen, wenn dir etwas einfällt. Ich habe mir das Skript angesehen und es erhält Abmessungen für den gesamten Desktop und überprüft, ob jedes Fenster innerhalb dieser Abmessungen liegt. Es wäre schön, wenn das Skript zwischen einzelnen Monitoren mit ihren entsprechenden Fenstern iterieren könnte. Leider habe ich null Erfahrung mit Apple Script und weiß nicht, wo ich anfangen soll.

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

Nachfolgend sind die Schritte aufgeführt, die für jeden erforderlich sind.

1. Erstellen Sie einen Dienst mit Automator

  1. Starten Sie Automator (normalerweise in Ihrem Anwendungsordner zu finden)
  2. Gehen Sie zu Datei > Neu
  3. Wählen Sie Dienst aus und klicken Sie auf Auswählen
  4. Stellen Sie sicher, dass in der rechten oberen Ecke des angezeigten Fensters „Keine Eingabe“ aus der Dropdown-Liste Dienst empfängt ausgewählt ist
  5. Stellen Sie sicher, dass in der Dropdown-Liste In „Jede Anwendung“ angezeigt wird.
  6. Suchen Sie in der zweiten Spalte mit der langen Liste nach „AppleScript ausführen“ und doppelklicken Sie darauf
  7. Dadurch wird rechts das Fenster „AppleScript ausführen“ hinzugefügt
  8. Ersetzen Sie nun (* Ihr Skript kommt hier *) durch das gewünschte Skript
  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 wegbewege. Sie können den Dienst von jeder Anwendung aus ausführen, indem Sie in einem beliebigen Anwendungsmenü zur Liste der Dienste gehen (z. B. Finder > Dienste, Safari > Dienste, TextEdit > Dienste usw.) und den gerade 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 > Shortcuts
  2. Wählen Sie in der Seitenleiste Dienste aus
  3. Finden Sie Ihren Dienst (er befindet sich 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 & Datenschutz > Datenschutz
  6. Wählen Sie Barrierefreiheit in der Seitenleiste aus
  7. Klicken Sie auf das +-Zeichen (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. Verlassen Sie Ihre Systemeinstellungen.

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

HINWEIS: Mir ist bekannt, dass Tastaturkürzel für einige Benutzer nicht zu funktionieren scheinen, obwohl sie einem Dienst zugewiesen wurden. Dies ist ein ganz anderes Thema, aber wenn dies in Ihrem Fall passiert, können Sie den Dienst zumindest in jeder Anwendung ausführen, die Sie verwenden.

Lass mich wissen, wie es dir geht.