Почему AppleScript всегда отправляет нажатия клавиш с Command вниз? - PullRequest
4 голосов
/ 05 июля 2011

Я вижу множество примеров AppleScript, подобных этому

tell application "TextEdit"
    activate
    tell application "System Events"
        keystroke "s"
    end tell
end tell

Ожидаемый результат - буква "s" будет введена в активный документ в TextEdit (предположим, что есть хотя бы одно окно документа).Но вместо этого он всегда пытается сохранить документ (сделал это для измененного документа и открыть диалоговое окно сохранения, если оно новое).То же самое происходит с любой клавишей в любом приложении в любое время ...

Кто-нибудь знает, почему системные события всегда посылают нажатия клавиш, такие как "... using {command down}"?

Ответы [ 4 ]

8 голосов
/ 06 июля 2011

Я запускаю скрипт из редактора AppleScript, используя Cmd + R, а не нажимая кнопку «Выполнить».Сценарий начинает выполняться сразу после того, как я нажимаю клавишу «R», и этот сценарий отправляет нажатие клавиши «S» перед тем, как отпустить Cmd или R. Поэтому отправленное нажатие клавиши «S» интерпретируется TextEdit с модификатором Cmd.

Обходной путьнажать кнопку Run или добавить задержку в начале скрипта и использовать Cmd + R:

delay 0.2 -- 0.2 second delay is enough

tell application "TextEdit"
    activate
1 голос
/ 17 августа 2013

Еще лучше проверить это и применить задержку только в случае необходимости и до тех пор, пока это необходимо. (~ Ожидание, пока пользователь не выполнит команду cmd. Я даже использовал какой-то тревожный звук, чтобы облегчить его, так что скрипт фактически выполняет команду cmd.: D)

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

on check()
    do shell script "~/Documents/checkModifierKeys cmd" --DOWNLOAD: http://macscripter.net/viewtopic.php?pid=114479#p114479
end check

on run {input, parameters}
    set the date_stamp to do shell script "date '+%Y.%m.%d_%H:%M'"
    repeat while check() = "1"
        beep
        delay 0.2
    end repeat
    tell application "System Events"
        tell process "TextEdit" to keystroke date_stamp
    end tell

    return input
end run

Примечание: я использовал инструмент, который я скачал . Я также нашел ссылки на утилиты, которые OsX должен иметь, но не повезло на Lion. Но скачанный работает точно.

1 голос
/ 06 июля 2011

Как вы выполняете сценарий? Если вы делаете это с помощью сочетания клавиш с клавишей Command, значит, вы удерживаете клавишу, а не сценарий.

1 голос
/ 05 июля 2011

Ты уверен?Используя точный код, который вы разместили, он набрал букву s в TextEdit.Вам все равно придется использовать key down {command} или key up {command}, чтобы сделать сохранение ( ⌘ Command S ).
Кроме того, если удерживать клавишу ⌘ Command во время выполнения, команда, введенная в TextEdit, будет иметь вид ⌘ Command S .

Возможно, вы захотите посмотреть эту статью о WikiBooks, которая должна помочь вам лучше понять ее.

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