Если инфорация оказалась интересна и/или полезна, не побрезгуйте, оставьте комментарий ;)

среда, 9 октября 2013 г.

Автоматизаторы работы на компьютере. Часть 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::Sukhodrischev
Можно, конечно, вставлять текст и на русском.

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

4.     Поиск по заданному сайту Гуглом. Я очень часто использую этот Гугл для поиска информации на корпоративном сайте. Предполагается, что искомое словосочетание находится в буфере обмена, а курсор установлен либо в поисковом строке браузера, либо в строке поиска самого сайта google.com:
^#s::
     SendInput site:hp.com {SPACE}
     SendInput % Clipboard
Return
5.     Мне часто приходят письма с предложением зарегистрироваться на вебинар.  Форма регистрации стандартная для всех сессий: поля Имя, фамилия, подразделение, регион. Часть их в виде текстовых строк, часть в виде комбобоксов. Данный пример, возможно, менее понятен, поставлю комментарии:
Send Name ; вводим имя
Sleep(200)
Send {TAB} ; переходим на следующий объект формы - фамилияSend Surname
Sleep 200Send {TAB} ; следующий объект формы – электронная почтаSend name.surname@domain.comSleep 200Send {TAB}" ; следующее поле – в виде комбобокса (выпадающего списка). Нужное нам значение – третье в списке. Два раза «нажимаем» клавишу ВнизSend {DOWN}{DOWN}
Sleep 200Send  {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           EndIfEndIf; Проверяем, запущен ли OutlookWinActivate("[CLASS:rctrl_renwnd32]", "")if WinActive("[CLASS:rctrl_renwnd32]")=0 Then           MsgBox(4, "Ошибка", "Outlool не запущен?")           ExitEndIf; Создаем новое письмо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)EndIfSend("{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. И много чего еще
Надеюсь, представленная здесь информация будет вам полезна, заинтересует пытливые умы, желающие облегчить и разнообразить свой рабочий (и не только) процесс.

Комментариев нет: