Как я могу заставить AppleScript всегда размещать контент в правильном поле в сообщениях - PullRequest
0 голосов
/ 05 мая 2018

У меня есть скрипт AppleScript, который работает безупречно в большинстве случаев времени. Сценарий предназначен для выполнения из FileMaker, получения от него информации и отправки сообщения на номер телефона. Однако в промежуток времени от 10 до 20% после ввода номера телефона он также вводит туда контент, а не помещает его в поле сообщения.

Вот полный AppleScript:

set _delay to 1

set _phone_number to repetition 1 of cell "APPLESCRIPT_PIPE" of layout "DEV"
set the clipboard to _phone_number

set _msg to repetition 2 of cell "APPLESCRIPT_PIPE" of layout "DEV"

tell application "System Events"
    tell process "Messages"
        set frontmost to true
        keystroke "n" using {command down}
        delay _delay

        keystroke "v" using {command down}
        delay _delay

        keystroke return
        delay _delay

        set _line_count to count of paragraphs of _msg
        repeat with _line_number from 1 to _line_count
            set _line to paragraph _line_number of _msg
            if _line_number = _line_count then
                keystroke _line
                delay _delay

            else if length of _line = 0 then
                keystroke return using {option down}

            else
                keystroke _line
                keystroke return using {option down}

            end if
        end repeat

        keystroke return
    end tell
end tell

Как видите, я пытаюсь использовать задержку, чтобы уменьшить вероятность ошибки, но она не сработала. Я начал с задержкой 0,25 секунды, затем 0,5, а теперь 1, но это все еще происходит.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Вместо использования keystroke я использовал UI Browser , чтобы выяснить путь к полю контента в сообщениях, а затем заменил весь цикл следующим:

set value of text area 1 of scroll area 4 ¬
    of splitter group 1 of window "Messages" to _msg
0 голосов
/ 05 мая 2018

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

set theMessage to "Whatever Text To Send"
set thePhoneNumber to "555-555-5555" -- Any Phone Number INCLUDE THE QUOTE MARKS
--               * Other Acceptable Phone Number Formats *
-- ("1(555)555-5555","(555)555-5555", "5555555555", "15555555555")

tell application "Messages"
    launch
    delay 5 -- Gives Messages Time To Open (May Need To Adjust)
    send theMessage to buddy thePhoneNumber of service "SMS"
end tell

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

set theMessage to "Whatever Text To Send"
set thePhoneNumber to "555-555-5555" -- Any Phone Number INCLUDE THE QUOTE MARKS
--               * Other Acceptable Phone Number Formats *
-- ("1(555)555-5555","(555)555-5555", "5555555555", "15555555555")

tell application "Messages" to activate
tell application "System Events"
    delay 1 -- May Need To Adjust
    click UI element "Compose" of splitter group 1 of window ¬
        "Messages" of application process "Messages"
    delay 1.5 -- May Need To Adjust
    set value of text field "To:" of scroll area 3 of splitter group 1 of window ¬
        "Messages" of application process "Messages" to thePhoneNumber
    keystroke return
    delay 1.5 -- May Need To Adjust
    set value of text area 1 of scroll area 4 of splitter group 1 of window ¬
        "Messages" of application process "Messages" to theMessage
    delay 2 -- May Need To Adjust
    keystroke return
end tell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...