2015-01-28 4 views
0

Я пытаюсь написать applescript, который вставляет некоторый предопределенный текст в начале сообщения. Это то, что я в настоящее время:Вставка текста в начале сообщения

set msgClass to (choose from list {"Green", "Blue", "Purple"} with title "Choose:") 
if result is false then 
    stop 
else 
    set msgClasstxt to the result 
    set msgClasstxt to "Classification: " & msgClasstxt 

    tell application "System Events" 
     key code 126 using {command down} 
     keystroke return 
     keystroke return 
     key code 126 using {command down} 
    end tell 
tell application "Microsoft Outlook" to set selection to msgClasstxt 
end if 

Я уверен, что есть лучший способ сделать это, но цель заключается в следующем:

  • Go домой ж/CMD + Up
  • Создать две пустые строки
  • Go домой
  • Вставьте текст

Мои проблема заключается в том, что текст вставляется до того, как выполняются нажатия клавиш. Досадно. Может ли кто-нибудь помочь?

+0

Какая версия OS X вы используете, кстати? – summea

+0

Тестирование по 10.10.2. Пробовал добавлять задержку, после указанной задержки вставлял текст, а затем все системные события. – jpdyson

ответ

0

Нажатие клавиш и другие задачи gui вводятся во внешнее приложение. Таким образом, вы должны всегда активировать приложение, которое вы хотите использовать, непосредственно перед выполнением этих действий. Таким образом, я советую вам поставить следующее непосредственно перед кодом вашей системы событий. Даже если вы считаете, что приложение находится на самом переднем плане, вы должны сделать это в любом случае, чтобы быть уверенным.

tell application "Microsoft Outlook" to activate 
delay 0.2 

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

Поэтому используйте задержки и активируйте приложение. Это должно помочь вам.

+0

Мне нужно выяснить, как включить Outlook в нужное окно; это не тривиально, так как я не могу предположить, что есть только главное окно и окно сообщения открыто. – jpdyson

+0

Кроме того, это не решило действия, выполняемые из синхронизации, само по себе. Я опубликовал, как я «исправил» его. – jpdyson

0

Итак, это то, что я сделал: -Добавлена ​​положением, чтобы убедиться, что я имею дело с активным окном сообщения -activate этого окном -Done всех действий через системные события

tell application "Microsoft Outlook" to get the id of the first window 
set currentWindow to the result 

set msgClass to (choose from list {"Green", "Blue", "Purple"} with title "Choose:") 

if the result is false then 
    stop 
else 
    set msgClasstxt to "Classification: " & the result 
    tell application "Microsoft Outlook" 
     activate window currentWindow 
     tell application "System Events" 
      key code 126 using {command down} 
      keystroke return 
      keystroke return 
      key code 126 using {command down} 
      keystroke msgClasstxt 
     end tell 
    end tell 
end if 

Эта первая строка работает, потому что Outlook сначала отображает самое первое окно. Это делает то, что я хочу сейчас.

+1

Отлично. Я рад, что вы нашли решение, которое работает. Приложения Microsoft в частности сложны, потому что они не всегда делают вещи «Apple», поэтому имеет смысл, что вам нужно активировать идентификатор окна, а не просто приложение. Еще один совет. Нет никаких оснований говорить, что Outlook сообщает System Events что-то делать. Это в основном то, что вы делаете, встраивая одно заявление в другой. Хорошая практика заключается в том, чтобы отделять ваши высказывания, чтобы команды не конфликтуют друг с другом. Просто поставьте «end tell» выражения outlook над кодом системных событий. Удачи. – regulus6633

+0

^Действительно; это перенос с того момента, когда я пытался вернуться туда и обратно пару раз. Хороший совет. – jpdyson