Скрипт для получения окон из-за границы экрана

6

У меня проблема с моим новым монитором. Часто, когда я разблокирую экран, появляются окна, которые находятся за границей рабочего стола. Довольно раздражает необходимость перетаскивать их обратно в центр окна вручную.

К счастью, я нашел скрипт, который может сделать это для меня: https://github.com/bradchoate/gather-windows/blob/master/Gather%20Windows.applescript

К сожалению, это работает только из окна редактора скриптов. Когда я пытаюсь запустить его, нажав на его имя в строке меню скрипта, он ничего не делает. Я попытался сохранить его как приложение и запустить его с тем же эффектом.

Кто-нибудь может мне помочь с этим?

автоассоциатор
источник
Это большой вопрос. У меня тоже есть эта проблема! Спасибо, что поделились найденным сценарием.
TH

Ответы:

4

Я перешел по URL-адресу в вашем вопросе, нажал кнопку « Raw» , скопировал код и вставил его в редактор сценариев , где я сохранил его как приложение под названием: « Собрать вне экрана Windows.app».

Затем я вошел в « Системные настройки» > « Безопасность и конфиденциальность» > « Доступность» , как показано на рисунке ниже, и добавил « Собрать вне экрана» Windows.app .

Я переместил некоторые окна за пределы экрана, затем запустил приложение Gather Off-Screen Windows.app , оно завершилось без ошибок и полностью переместило окна за пределы экрана на экран.

Вставьте изображение 1

Теперь, когда я добавил « Записать вне экрана» Windows.app в « Системные настройки» > « Безопасность и конфиденциальность» > « Доступность» после его сохранения, если бы я этого не сделал, я ожидал увидеть следующие диалоговые окна при запуске приложения (которое иногда один или оба могут не появиться):

Вставьте изображение 2

Вставьте изображение 3

Тем не менее, позвольте мне сказать, что, хотя я не изучил скрипт глубоко, чтобы иметь полное представление о его механике, тем не менее, я вижу то, что я считаю плохим кодированием в этом случае в начале, и изменил бы следующую строку кода с :

repeat with proc in application processes

Для того, чтобы:

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

Причина, по которой это изменение имеет смысл для меня, заключается в том, что, например, на данный момент у меня 38 запущенных процессов приложений, из которых только 10 видны, и поэтому кажется бессмысленным дальнейшее выполнение запросов 28 процессов приложений, которые даже не видны.

Также обратите внимание, что я даже свернул некоторые из экранных окон перед запуском приложения, и когда я их минимизировал, они были полностью на экране. Таким образом, visibleсвойство в этом случае относится к процессу, не свернутому за пределами экранных окон, которые, хотя свернутые, не видны.

user3439894
источник
Спасибо за ответ и советы по модификации скрипта. Будете ли вы предлагать, как изменить скрипт для работы с несколькими мониторами? Прямо сейчас он собирает окно на нескольких мониторах, только когда окно находится за пределами экрана на границе, которая не смежна с другим монитором.
автоэнкодер
@autoencoder, как отмечалось в моем ответе, « хотя я не изучал сценарий подробно, чтобы иметь полное представление о его механике », мне придется немного изучить код, чтобы посмотреть, смогу ли я решить проблему с несколькими мониторами Хотя я могу тестировать только с двумя мониторами.
user3439894
Это было бы прекрасно! Дайте мне знать, если что-нибудь придумаете. Я посмотрел на сценарий, и он получает измерения для всего рабочего стола и проверяет, что каждое окно находится в этих измерениях. Было бы неплохо, чтобы скрипт перебирал отдельные мониторы с соответствующими окнами. К сожалению, у меня нет опыта работы с Apple Script и я не знаю с чего начать.
автоэнкодер
3

Я бы использовал Automator для создания сервиса, который запускает Apple Script. И, в качестве бонуса, вы также можете использовать Системные настройки, чтобы назначить сочетание клавиш для службы.

Ниже приведены шаги для каждого.

1. Создайте сервис с помощью Automator

  1. Запустить Automator (обычно находится в папке «Приложения»)
  2. Перейти к файлу> Новый
  3. Выберите Сервис и нажмите Выбрать
  4. В правом верхнем углу появившегося окна убедитесь, что в раскрывающемся списке « Служба » выбрано «Нет ввода».
  5. Убедитесь, что в раскрывающемся списке In отображается «Любое приложение»
  6. Во втором столбце, содержащем длинный список, найдите «Запустить AppleScript» и дважды щелкните по нему.
  7. Это добавит окно «Выполнить AppleScript» справа
  8. Теперь замените (* Ваш сценарий идет сюда *) на нужный сценарий
  9. Сохраните сервис под значимым именем (например, «Собрать окна»).
  10. Выйти из Automator

Теперь я бы протестировал сервис, переместив пару окон за экран. Вы можете запустить службу из любого приложения, перейдя в список «Службы» в любом меню приложения (например, «Finder»> «Службы», «Safari»> «Службы», «TextEdit»> «Службы» и т. Д.) И выберите только что созданную службу.

Предполагая, что это работает, вы также можете создать сочетание клавиш для его запуска.

2. Создание вашего ярлыка

  1. Перейдите в Системные настройки> Клавиатура> Ярлыки
  2. Выберите Сервисы на боковой панели
  3. Найдите свой сервис (он будет в списке справа)
  4. Добавьте ярлык, дважды щелкнув по названию сервиса
  5. Теперь перейдите в Системные настройки> Безопасность и конфиденциальность> Конфиденциальность
  6. Выберите Доступность на боковой панели
  7. Нажмите на знак + (вам может понадобиться разблокировать замок, если он заблокирован)
  8. Добавить автоматор.
  9. Добавьте Finder (чтобы найти это, вам нужно перейти в /System/Library/CoreServices/Finder.app ).
  10. Выйдите из системных настроек.

Теперь вы должны иметь возможность использовать сочетание клавиш для запуска службы.

ПРИМЕЧАНИЕ. Мне известно, что для некоторых пользователей сочетания клавиш не работают, даже если они были назначены службе. Это совсем другая тема, но если это происходит в вашем случае, по крайней мере, вы можете запустить службу из любого приложения, которое вы используете.

Дайте мне знать, как вы идете.

Мономет
источник