Я не поддерживаю сценарии с графическим интерфейсом пользователя больше, чем сгорание Amazon, но, похоже, это необходимо для этой задачи, и я хотел бы предоставить вам пример сценария с графическим интерфейсом, который старается изо всех сил свести к минимумунеприятность пользовательского опыта и стремление к меньшему количеству слабых мест в коде, где сценарии GUI с наибольшей вероятностью могут давать сбои.
Если вы знаете путь к файлу - что, я полагаю, вы делаете в подобных ситуациях,когда ваш скрипт нажимает на путь к файлу - тогда вы можете обнаружить, что следующая техника сохраняет несколько шагов и чувствует себя немного более изящно в том, как он выполняется:
set filepath to "/path/to/image.jpg"
-- Copy file object to clipboard
set the clipboard to filepath as «class furl»
-- Make sure Chrome is in focus and the
-- active tab is a WhatsApp tab
tell application id "com.google.Chrome"
activate
if the URL of the active tab in the front window ¬
does not contain "web.whatsapp.com" then return
end tell
-- Paste the clipboard contents
-- and hit return (send)
tell application id "com.apple.SystemEvents"
tell (process 1 where it is frontmost) to tell ¬
menu bar 1 to tell menu bar item "Edit" to tell ¬
menu 1 to tell menu item "Paste" to set Paste to it
if (click Paste) = Paste then keystroke return
end tell
if (click Paste) = Paste
проверка должна устраняет необходимость в задержке, поскольку явно вынуждает AppleScript оценить команду click
до того, как продолжит выдавать keystroke
.Тем не менее, я не могу проверить это при всех возможных условиях, и если есть другие факторы, такие как загрузка процессора или зависание процесса, которые могут дать сценарию шанс на скачок вперед, тогда просто вставьте небольшой delay
послеthen
и переместите keystroke return
вниз на собственную строку.
Если вы хотите впоследствии удалить файловый объект из буфера обмена, просто добавьте в качестве последней строки set the clipboard to
(и просто оставьте ее пустой послеслово "to"
, которое очистит содержимое буфера обмена).Конечно, это не повлияет на любые данные истории буфера обмена, которые вы можете иметь, если используете приложение для управления буфером обмена, только текущий элемент системного буфера обмена.