Tags: Автоматизоторы

Автоматизаторы работы на компьютере. Часть 2

Простейшие действия в AutoHotkey.
1. Запустить программу “Блокнот” – сочетание клавиш Control-Alt-N:

^!n::Run notepad

Всё очень просто. Основная клавиша N и ее модификаторы ^ (Control) и ! (Alt). Модификатором клавиши Windows будет символ #. Использую данный тип строк для запуска различных приложений. Часто надо куда-то временно скопировать текст из буфера обмена. Блокнот для этого подходит идеально.

2. Раскрыть текст из аббревиатуры:

::btw::By the way

Тут всё ясно без пояснений. Набираем в составляемом письме в нужном месте сочетание клавиш btw и получаем вместо нее фразу целиком. Это текст в одну строку. Очень часто использую такую подмену. Например, мой принцип ведения дел (http://users.livejournal.com/_evgeni_/97222.html) предполагает, что имена проектов в Outlook и на жестком диске  состоят из имени продавца, с которым я работаю на этом проекте, даты и краткой характеристики (названия) проекта. Есть продавцы, с которыми я работаю постоянно. Не у каждого фамилия Иванов. Допустим, есть продавец Суходрищев. Каждый раз писать его фамилию надоест. Делаем так:

::sdr::Sukhodrische

Можно, конечно, вставлять текст и на русском.

3. Как сделать в несколько вставку нескольких строк кода из аббревиатуры? Очень просто. Нужно заключить вставляемый текст в скобки. Следующий код использую постоянно. Для запроса квотации, необходимо отправить письмо с подготовленной конфигурацией в определенный отдел. Каждый раз писать стандартные слова с просьбой подготовить квотацию устаешь. Поэтому используем стандартный текст:

::ncq::
(
Hello Colleagues!
Please issue the quotation(s) attached.
Thank you!
)


Вот и всё. Чем еще удобен такой вариант, он не зависит от программы, в которой надо вставить текст. Вначале, я отсылал запрос письмом. И текст вставлялся в его тело. Затем процедура изменилась, запросы идут через портал. Но мне не потребовалось ничего менять. Если бы я написал макрос на VBA в Outlook, он был бы бесполезен для портала.

Легкое программирование в AutoHotkey.
Итак, это работа с  без программирования. Усложним задачу:
1. Проверяем, запущен ли уже Блокнот, и если нет то запускаем, а если да – выводим его окно на передний план:

^!n::
IfWinExist Untitled - Notepad
     WinActivate
else
     Run Notepad
return


Просто, зато как удобно.

2. Задача по-сложнее. Нужно вставить в текст дату в формате SQL YYYY-MM-DD. Нет ничего проще:

^#x::
     FormatTime, CurrentDate,, yyyy'-'MM'-'dd
; форматируем текущую дату нужным нам образом. CurrentDate – встроенная переменная.
     SendInput %CurrentDate%
; встравляем дату
Return
; как вы уже поняли, символ “;” означает комментарий.


Итак, при нажатии Control-Win-X будет вставлена дата.

3. Авторизуемся на сайте. Частая задача? Очень даже.

^#p::
  SendInput emailname@domain.com
  Sleep 200
  SendInput {TAB}
  Sleep 200
  SendInput very-long-and-complex-password
Return


Тут, конечно, есть нюанс с безопасностью, ваш пароль хранится в текстовом файле в открытом виде. Если это вас напрягает, ничего не мешает, допустим, слегка «зашифровать» его например по BASE64. Уже не так очевидно. Задержки я ставлю на всякий случай, чтобы все переходы и вводы успели отработать.

4. Поиск по заданному сайту Гуглом. Я очень часто использую этот Гугл для поиска информации на корпоративном сайте. Предполагается, что искомое словосочетание находится в буфере обмена, а курсор установлен либо в поисковом строке браузера, либо в строке поиска самого сайта google.com:

^#s::
     SendInput site:hp.com {SPACE}
     SendInput % Clipboard
Return


5. Мне часто приходят письма с предложением зарегистрироваться на вебинар.  Форма регистрации стандартная для всех сессий: поля Имя, фамилия, подразделение, регион. Часть их в виде текстовых строк, часть в виде комбобоксов. Данный пример, возможно, менее понятен, поставлю комментарии:
  Send Name ; вводим имя
  Sleep(200)
  Send {TAB} ; переходим на следующий объект формы - фамилия
  Send Surname
  Sleep 200
  Send {TAB} ; следующий объект формы – электронная почта
  Send name.surname@domain.com
  Sleep 200
  Send {TAB}" ; следующее поле – в виде комбобокса (выпадающего списка). Нужное нам значение – третье в списке. Два раза «нажимаем» клавишу Вниз
  Send {DOWN}{DOWN}
  Sleep 200
  Send  {TAB}  ; новая строка. Страна (Russia). Список длинный идти по нему клавишей Вниз неудобно. Используем первую букву названия страны. Россия в моем списке третья страна на букву R. Поэтому нажимаем “R” 3 раза.
  Send RRR

Это не специализированная программа-заполняльщик, которая умеет распознавать поля формы и вставлять правильные значения. Но мне не хочется иметь запущенными дополнительные приложения с узкой специализацией. Как я говорил, формы у меня одни и те же. Поэтому предложенный скрипт решает все мои проблемы.

Скрипты для AutoIt.
Так как я пару лет использовал AutoIt, то у меня изначально скрипты были написаны для нее. Некоторые я перенес в AutoHotkey. Но большинство так и осталось в фомате AutoIt. Никак руки не дойдут. Поэтому я просто запускаю их через команду Run, как в примере с Блокнотом. Конечно же, ассоциации с расширениями файлом у меня настроены. Итак:

1. Задача – преобразовать несколько строк в одну. Причины появления. Документы на нашем сайте идут с уникальными идентификаторами в качестве названий файлов. Но абсолютно не понятно, что внутри, пока не откроешь файл. Поэтому, когда я сохраняю документы к себе на жёсткий диск, я добавляю в название файла заголовок документа. Но в PDF-файле название написано в несколько строк. И если я просто все их выделю, скопирую, а потом попытаюсь вставить в название файла, то у меня появится только первая строка многострочного названия. А мне нужно название целиком. Поэтому и появился данный скрипт:

$ClipBoardValue = ClipGet()
if (@error <> 0) Then
           MsgBox(0, "Отказываюсь работать", "В буфере обмена не текст!")
           Exit
EndIf
while StringInStr ( $ClipBoardValue, Chr(13)) > 0
           $ClipBoardValue = StringReplace ( $ClipBoardValue, Chr(13), " ")
WEnd
while StringInStr ( $ClipBoardValue, Chr(10)) > 0
           $ClipBoardValue = StringReplace ( $ClipBoardValue, Chr(10), " ")
WEnd
ClipPut (StringStripWS ( $ClipBoardValue, 7))
Send("^v")


Выискиваем перевод каретки и удаляем, заменив его пробелом.

2. Скрипт по-сложнее. Помните, я говорил о стандартных запросах на выпуск квотаций. Так вот, в AutoIt у меня был более прогрессивный скрипт. Он создавал письмо в Outlook, заполнял поля адресата, темы письма, вставлял сам текст запроса и, наконец, предлагал мне прикрепить файл (проверено на Office 2010):

; Запрашиваем номер проекта. Он необходим для работы команды, готовящей квотации
  $ProjectID=InputBox("Введите идентификатор проекта", "Номер проекта?")
  ; Если номер не введен, то уточням, это ошибка, или так и задумано
  if $ ProjectID ="" Then
    $WOProjectID =MsgBox(4, "Продолжить без номера", "Уверены?")
    if $ WOProjectID =7 Then
      Exit
    EndIf
  EndIf
  ; Проверяем, запущен ли Outlook
  WinActivate("[CLASS:rctrl_renwnd32]", "")
  if WinActive("[CLASS:rctrl_renwnd32]")=0 Then
    MsgBox(4, "Ошибка", "Outlool не запущен?")
    Exit
  EndIf
  ; Создаем новое письмо
  Send("^n")
  Sleep(200)
  ;  Добавляем основного адресата
  Send("main.email@domain.com{TAB}{TAB}")
  Sleep(200)
  ; Добавляем другого адресата в копию
  Send("{TAB}")
  ;Send("copy.email@domain.com{TAB}{TAB}")
  Sleep(200)
  ; подбираем правильный текст для заголовка (был ли введен номер проекта)
  if $ ProjectID = "" Then
    Send("Project without Project ID (it will be later)")
  Else
    Send("Project with Project ID " & $ProjectID)
  EndIf
  Send("{TAB}")
  ; Пишем основное содержание письма
  Send("Hello colleagues{!}{ENTER}{ENTER}")
  Send("Please generate the quotation{.}{ENTER}{ENTER}")
  Send("Thank you{!}")
  Sleep(200)
  ; Открываем диалоговое окно для прикрепления вложений
  Send("!H")
  Sleep(50)
  Send("af")


Всё. Ничего страшного и сложного, а экономия времени очень и очень существенная. А главное изчезают многие монотонные однообразные действия.

Какие еще есть идеи по использованию автоматизаторов.

  1. Заполнение форм в приложениях, а не только веб-форм. У меня несколько таких скриптов создано, просто выкладывать их тут бесполезно. Программы узкоспециалные.

  2. Используя COM, возможно заполнение даже динамически создаваемых форм, если есть возможность идентифицировать поля по имени или каким-либо другим способом.

  3. Рутинные файловые операции по переименованию, удалению, копированию.

  4. Управление через COM другими приложениями, например, MS Word и MS Excel.

  5. И много чего еще


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