_evgeni_ (_evgeni_) wrote,
_evgeni_
_evgeni_

Categories:

Автоматизаторы работы на компьютере. Часть 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. И много чего еще


Надеюсь, представленная здесь информация будет вам полезна, заинтересует пытливые умы, желающие облегчить и разнообразить свой рабочий (и не только) процесс.
Tags: it, Автоматизоторы, Компьютерное
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments