?

Log in

No account? Create an account

Entries by tag: Компьютерное

Простейшие действия в 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. И много чего еще


Надеюсь, представленная здесь информация будет вам полезна, заинтересует пытливые умы, желающие облегчить и разнообразить свой рабочий (и не только) процесс.
Введение
При работе на компьютере часто встречаются повторяющиеся действия. Отправить стандартное письмо, заполнить веб-форму, искать Гуглом на определённом сайте, проставить текущую дату в определённом формате, например ГГГГ-ММ-ДД (встречается в моей предыдущей статье) и т.д. Вначале, вбиваешь каждый раз заново вручную. Через некоторое время это надоедает, и создаёшь себе файл с шаблонами, из которого копирайтом переносишь готовые фразы. Уже лучше, но всё равно не то. Надо постоянно держать открытым файл с текстом, искать нужную. А как быть с веб-формами или поиском по сайту: site:hp.com «фраза поиска».

Нужен автоматизатор. Я перепробовал несколько. Ниже привожу избранные программы с примерами. Хочу обратить внимание, что указанные программы я собирался использовать на рабочем компьютере, поэтому для меня было принципиально важно найти бесплатное ПО для официального легального использования.

Punto Switcher
Вообще-то эта программа не для автоматизации произвольных действий на компьютере, а для автоматического переключения раскладки клавиатуры. Честно говоря, ее алгоритм немного несовершенен. Достаточно часто программа переключается не в ту раскладку на коротких последовательностях. И даже если предлагает занести в словарь исключение, то потом этим исключением не пользуется. Типичный пример – всегда коверкает мою фамилию. Была отличная программа Keyboard Ninja. Ее алгоритм переключения был куда лучше, а ложных срабатываний было куда меньше. Но автор, к сожалению, перестал ее развивать. Очень жаль. Но мы же говорим об автоматизаторах. Punto Switcher можно научить вставлять вместо акронимов фразы. Но этот функционал всё-таки в программе ограничен.

Адрес программы - http://punto.yandex.ru/

Есть версия для Mac, что радует. Программа бесплатна – и это тоже радует.

xStarter
Программа-автоматизатор идеальна для тех, кто не умеет программировать. Если это ваш случай, смело качайте.
Сайт программы http://www.xstarter.com/. Скачивать лучше бета-версии. Они достаточно устойчивы. И они значительно новее «стабильной» версии. Судя по всему, автор забросил разработку в прошлом году (последняя бета датирована 09.07.2012). А стабильная версия так и вообще выпущена 23.07.2009. Однако обе версии на столько функционально богаты, что переживать за отсутствие новья не стоит.

В программе вы в визуальном конструкторе записываете последовательность действий – управление клавиатурой, мышью, работа с файлами, электронной почтой, FTP и HTTP серверами. В наличии планировщик задач. Все преимущества перечислены на странице http://www.xstarter.com/rus/index.html. Есть возможность создания диалоговых окон, GUI.

Это мой первый автоматизатор, который использовался не «на пробу», а именно в работе. Программа зарекомендовала себя с лучшей стороны. Но у неё были некоторые недочёты, которые для меня стали критичными:
·      Некорректная работа имитации нажатия клавиш в Citrix XenApp.
·      Не всегда верная простановка раскладки клавиатуры (русская/английская) вне зависимости от указанных модификаторов.
·      Невозможность текстового программирования действий, позволившего бы ускорить разработку новых действий, их отладку, копирование и т.д.

Рискну предположить, что для большинства пользователей эти мои «критические» недочёты вообще покажутся жуткими придирками, о которых и думать-то не стоит. Однако с Citrix XenApp надо было работать. С остальным можно было смириться.
Здесь много примеров интерфейса программы http://www.xstarter.com/rus/screens.html. xStarter создавал наш соотечественник, так что в нем всё на русском, включая помощь и поддержку на форуме сайта. Для граждан России программа бесплатна. Итак, что же дальше. А дальше программирование.

AutoIt
Бесплатный открытый проект AutoIt http://www.autoitscript.com/site/autoit/.  Это интерпретатор с собственным языком программирования, напоминающим javascript, хотя разрабочкам он больше напоминает BASIC. У всех свои ассоциации. В комплект входит сам интерпретатор, конвертер в файлы EXE, ActiveX модули (не могу предположить, зачем они нужны, обычно все современные языки сами неплохо справляются с задачами управления клавиатурой и мышью), а также редактор с подсветкой синтаксиса и файлами помощи по языку программирования.

Время на изучение особенностей языка потратить придётся. Достоинством этого решения является то, что генерация нажатий клавиш и работы мыши сделано на низком уровне ОС, поэтому всё чётко работает и в терминальных решениях вроде Citrix XenApp. Наличие своего языка программирования даёт необычайную гибкость. При должном желании и сноровке можно запрограммировать самые сложные действия.
ПРИМЕРЫ

Но у AutoIt есть и минусы, которые, в конечном итоге, заставили от нее отказаться.

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

AutoHotkey
Программа AutoHotkey (http://www.autohotkey.com/). Эта программа даже не конкурент AutoIt, а его двоюродный брат. Авторы впрямую говорят, что AutoHotkey – это наследник AutoIt, указывают, как конвертировать скрипты, написанные для AutoIt в те, что съест AutoHotkey.

Эта программа стала моим основным и единственным помощником по автоматизации работы на компьютере. Ее основные преимущества:

  1. Она самодостаточна. Ей не требуются внешние программы запускальщики. Сама сидит в трее и отслеживает нажатие комбинаций клавиш. Не надо настраивать ассоциации расширений с файлами действий.

  2. Не имеет ограничений по комбинациям нажатий клавиш. Никаких тебе комбобоксов, пролистываний и т.д.

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

  4. Для простых действий изучать язык программирования не надо. Достаточно скопировать из примера последовательность символов и поменять вставляемый текст на свой.

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

  6. Пожалуй, последний пункт 5-го преимущества вынесу в отдельную строку. COM. Можно управлять другими приложениями. Например, Internet Explorer’ом. Вообще, считаю COM отличным изобретением: объектная модель, независимость от языков программирования, возможность использовать функции специализированных приложений в своей программе.

Есть у AutoHotkey и недостатки:

  1. отсутствие редактора с подсветкой синтаксиса и помощи в выборе встроенных функций и выражений, а так же переменных. В AutoIt такой редактор присутствует.

  2. Отсутствие возможности отладки скриптов

  3. Достаточно мудреный синтаксис по работе с переменными, два метода их использования. Часть функций и выражений работает только со старым методом, часть - только с новым. При использовании неверного метода получаются неожиданные результаты. Почему такой дуализм ввели разработчики, не ясно. У меня есть предположение, что новый метод работы с переменными был введён для упрощения создания действий без программирования. Он позволяет неявно вводить переменные (незаметно для пользователя), не используя кавычек, операций присвоения и так далее. Но не все функции были переведены на работу с новым форматом. И получилось «ни два, ни полтора». Поленились ребята сделать полноценный переход.

  4. Сырость при работе с COM.


Но, не смотря на все недочёты, это самое удобное средство автоматизации, если не с точки зрения создания кода, то уж точно с точки зрения применения действий.

Выведение
В следующей статье дам примеры кода и идеи для создания собственных последовательностей действий.

Latest Month

November 2016
S M T W T F S
  12345
6789101112
13141516171819
20212223242526
27282930   

Tags

Syndicate

RSS Atom
Powered by LiveJournal.com
Designed by Tiffany Chow