Почему мой сценарий работает только тогда, когда у меня есть что-то в буфере обмена? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть (длинный) Applescript для открытия VPN-соединения. Однако, это останавливается, если у меня нет текста в буфере обмена, и я не могу понять, почему.

То, что я пытаюсь выполнить sh перемещает все, что находится в моем буфере обмена (если есть что-либо), в переменную temp, вставьте пароль в буфер обмена, чтобы я мог вставить его в окно входа в систему и, наконец, верните буфер обмена обратно.

Это (я думаю) соответствующая часть моего скрипта:

open_vpn_connection(vpn_name, user_name, app_name, window_name)
set pass_word to getPassword(keychain_name)
local clipBefore
set clipBefore to the clipboard
set the clipboard to pass_word
delay 0.5
tell application "System Events"
    keystroke "v" using command down
    keystroke return
end tell
delay 0.5
set the clipboard to clipBefore

Так что, в принципе, если у меня нет чего-то в буфере обмена перед запуском скрипта Висит. Кто-нибудь знает почему?

1 Ответ

0 голосов
/ 04 апреля 2020

ОК, поэтому я немного покопался и думаю, что нашел причину. Для начала, я хотел бы добавить, что раньше это работало в течение нескольких лет, но перестало работать в обновлении ma c около года go.

Вот сценарий «проверки концепции», который я использую в редакторе сценариев:

set clipBefore to the clipboard
log clipBefore
set the clipboard to "banana"
log (the clipboard)
set the clipboard to clipBefore
log (the clipboard)

Если я перезагружаю свою машину, сначала откройте редактор сценариев, и запустить мой скрипт, я получаю это в журналах:

error "An error of type -25133 has occurred." number -25133

Я посмотрел вокруг, и этот код ошибки

badPasteboardFlavorErr = -25133, /* item flavor does not exist*/

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

Решение всегда состоит в том, чтобы просто выполнить ctrl + c чего-либо и затем снова запустить сценарий.

Я решил свой сценарий (который, конечно, многое делает раньше и после моего частичного кода), добавив try catch catch в материале буфера обмена:

local clipBefore
set clipBefore to ""
try
    set clipBefore to the clipboard
end try 
set the clipboard to pass_word

Поскольку он генерирует исключение только в том случае, если в буфере обмена ничего нет, теперь он работает каждый раз:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...