Использование AppleScript для блокировки экрана

11

Мне нужен яблочный скрипт, который блокирует мой Mac точно так же, как нажатие shift+ ctrl+ eject. Я попробовал два разных подхода, но оба не удалось. Первым был поиск в интернете сценария, который не удался. Есть только решения с заставкой или другими приложениями, которые мне не нужны. Я просто хочу использовать то, что я описал. Второй - сказать яблочнику, чтобы он нажал три неработающие клавиши. Если бы кто-то мог сказать мне, как заблокировать мой Mac или как заставить appleScript нажать три клавиши, я был бы очень счастлив, потому что я немного расстроен.

Lavaking
источник

Ответы:

13

Получение информации из этого ответа и этого ответа:

  1. Нажмите кнопку Spotlight в правом верхнем углу экрана ( Cmd+ Space)
  2. Поиск Keychain Access. Откройте это
  3. Открытые настройки ( Cmd+ ,(запятая))
  4. Проверьте Show Status in Menu Bar
  5. Нажмите кнопку Spotlight в правом верхнем углу экрана ( Cmd+ Space)
  6. Поиск Automator. Выберите это
  7. Создать новое Service
  8. Поиск Run Applescriptрядом с Actionsи Variablesкнопками. Дважды щелкните по этому
  9. Убедитесь, что флажки Service receives no input in any application
  10. Вставьте этот Applescript:

tell application "System Events" to tell process "SystemUIServer"
    tell (menu bar item 1 of menu bar 1 where description is "Keychain menu extra")
        click
        click menu item "Lock Screen" of menu 1
    end tell
end tell

Сохраните этот Automator как что-то вроде Lock screen(примечание: код в GIF другой!)

введите описание изображения здесь


Чтобы сделать ярлык:

  1. Нажмите кнопку Apple в левом верхнем углу экрана
  2. щелчок System Preferences
  3. щелчок Keyboard
  4. Нажмите Keyboard Shortcutsвкладку
  5. щелчок Services
  6. Найдите название услуги, которую вы только что создали
  7. Нажмите на пустое место справа
  8. Введите свой ярлык в

Используйте свой ярлык в любом приложении!

введите описание изображения здесь


ИЛИ...:

  1. Вы могли бы купить Альфреда
  2. Вы можете использовать Cmd+ Shift+Eject
ᔕᖺᘎᕊ
источник
3
Просто чтобы заметить: alfred и cmd + shift + eject убивают сеть, когда она приостанавливает работу машины. Это очень удобно, потому что он просто блокирует экран.
BeepDog
3
Когда я запускаю скрипт, он открывает меню цепочки для ключей и застревает. Когда я закрываю меню, я получаю эту ошибку:System Events got an error: Can’t get menu 1 of menu bar item 2 of menu bar 1 of application process "SystemUIServer". Invalid index.
Macil
@AgentME вы уверены, что сделали шаги 1-4? Я также обновил код так попробовать , что после выполнения шагов 1-4 :)
ᔕᖺᘎᕊ
@ ᔕᖺᘎᕊ Я получаю ту же ошибку, что и выше, «Неверный индекс»
7

Нашел это в другом ответе, но AppleScript, который просто содержит следующие работы для меня.

 tell application "Finder" to sleep
Алистер Макмиллан
источник
1
Я совместил этот ответ с принятым ответом, и он работал очень хорошо. Может быть, принятый ответ может включать это.
Дэвид Каллен
В отличие от кода в принятом ответе, код этого ответа не требует установки привилегий для всех приложений, в которых вы хотите использовать ярлык, а также не требует, чтобы статус цепочки для ключей был виден в строке меню.
valyron
Это зависит от предпочтений погоды, сон на самом деле блокирует. К сожалению, для меня это не работает, потому что наша организация
принудительно блокирует
3

macOS 10.11, El Capitan, похоже, нарушил ответ using, используя AppleScripts, но я обнаружил, что если я установил Lock Screen и заставил мою службу Automator открыть свой «Lock Screen Bundle», остальная часть процесса работала как задумано (при условии, что я вызвал Сервис «Блокировка экрана», а не «Блокировка экрана»: очевидно, пробелы в имени файла нарушают сочетание клавиш для многих пользователей MacOS).

См. Ярлык экрана блокировки в Mac OS X для иллюстрированного пошагового руководства.

Алиса Перселл
источник
3

У меня есть простой вкладыш для этого. Он использует системные события для отправки комбинации клавиш по умолчанию для команды блокировки экрана и работает во всех версиях OSX, начиная с High Sierra (10.13). Даже Мохаве! Хотя это будет запрашивать дополнительные разрешения безопасности для приложения, в более новых версиях OSX

tell application "System Events" to keystroke "q" using {control down, command down}
user1270949
источник
1
Этот вопрос был задан 21 июня '14 и ваш ответ не относится к версиям OS X, работавшим в то время. Пожалуйста, отредактируйте свой ответ, чтобы включить соответствующий контекст того, в каких версиях macOS это работает.
user3439894
1
Работает во всех версиях OSX. в том числе Мохаве
user1270949
Это не сочетание клавиш по умолчанию во всех версиях OS X, и фактически оно не работает ни в одной версии OS X и было представлено только в одной из версий macOS.
user3439894
1
Слушай, я просто пытаюсь помочь и дать ответ, который работал для меня. Не нравится это? Удали это. Мне наплевать
user1270949
2
Работает как шарм (по крайней мере, для Мохаве). Не уверен, почему этот другой комментатор говорит, что это не работает. Это простое и чистое решение. Спасибо, что поделились этим.
GDP2
2

Я использую макрос, чтобы принять ярлык Command-L. Недавно я перешел с Windows на Mac, поэтому очень важен простой способ блокировки экрана. В Windows просто нужно нажать клавишу Windows и L, и, вуаля, заблокирован.

Используя Keyboard Maestro , я создал макрос для ярлыка Command-L, который по сути такой же (сравнивая клавишу Command с клавишей Windows). Сочетание клавиш запускает функцию «Окно входа в систему», которая блокирует экран. Легко peasy, по крайней мере для меня.

(В Keyboard Maestro функция «Окно входа в систему» ​​находится в разделе «Действия»> «Управление системой».)

bifjamod
источник
1

Для High Sierra (10.13) принятый ответ не работает, так как Keychain Access не имеет Check Show Status in Menu Barопций. Но, основываясь на бесстыдной загрузке источника приложения Lockscreen (как упомянуто @Alice Purcell), я обнаружил этот изящный обходной путь GUI-сценариев:

activate application "SystemUIServer"
tell application "System Events"
    tell process "SystemUIServer" to keystroke "q" using {command down, control down}
end tell
ijoseph
источник