Приложение MacOS запускает Applescript для выполнения нажатия клавиши в другом приложении - PullRequest
0 голосов
/ 28 января 2019

У меня есть вопрос о запуске applecript в приложении MacOS.

Я хотел бы создать приложение Mac, и оно может выполнить Applescript для копирования выделенного текста в Chrome.

Вотthe Applescript:

tell application "Google Chrome"
    activate
    try
        tell application "System Events"
            keystroke "c" using {command down}
        end tell
    on error
        display dialog "error" buttons {"OK"}
    end try
end tell

delay 1
set selectedText to the clipboard

Идея состоит в том, чтобы сохранить этот Applescript в распределенном приложении Mac и позволить приложению выполнить этот сценарий.

В разработке env (до компиляции в {Appname} .app) , он может успешно переключиться в Chrome и скопировать выделенный текст.

Однако, после связывания его как {Appname} .app, он может активировать Chrome, если он еще не запущен, но он не может выполнить комбинацию клавиш Command + C.

Я предполагаю, что приложение не запрашивало Accessibility in Security Setting, поэтому я добавил его и включил.Но он все еще не может работать.

Я также пытался добавить параметр entitlement, но все равно не получилось:

<key>com.apple.security.temporary-exception.apple-events</key>
<array>
   <string>com.google.Chrome</string>
   <string>com.apple.systemevents</string>
</array>

Кто-нибудь знает возможное решение?

Я новичок в разработке приложений для Mac.Любой намек очень приветствуется.Спасибо!

1 Ответ

0 голосов
/ 28 января 2019

Google Chrome на самом деле имеет команду выбора копии.Нет необходимости приводить системные события в уравнение.

if application "Google Chrome" is running then
    set the clipboard to ""
    tell application "Google Chrome"
        tell active tab of window 1
            copy selection
        end tell
    end tell
    set selectedText to the clipboard
end if

Или вы можете просто вставить следующий обработчик в ваш код (я предпочитаю добавлять мой в конец моего скрипта)

to copySelection(theApp)
    set the clipboard to ""
    activate application theApp
    repeat while application theApp is not frontmost
        delay 0.2
    end repeat
    tell application "System Events"
        tell application process theApp
            keystroke "c" using {command down}
        end tell
    end tell
    set selectedText to (the clipboard)
end copySelection

Затем в любое время, когда вы захотите запустить этот обработчик, просто вызовите его, используя эту строку кода (вставляя имя приложения вместо моего примера TextEdit)

copySelection("TextEdit") -- Replace With Your Desired App
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...