Автоматизация рутины с AutoHotKey

Здравствуйте! Сегодня я хочу познакомить вас с замечательным инструментом автоматизации под названием AutoHotKey!

С ним вы сможете:

1) Программировать действия мышкой, нажатия клавиш;

2) Быстро заполнять однотипные бланки, формы;

3) Ставить на горячие клавиши заклинания, кастовать их в течение миллисекунд после перезарядки (что бывает критично);

4) Автоматизировать какие-либо рутинные действия и идти пить кофе.


Сразу предупрежу - писать скрипты поначалу очень капризное занятие. Будут такие ситуации, что код почему-то не работает, и вам придется думать полдня где вы совершили ошибку. Листать документацию. Просить помощи в интернете. Проверять синтаксис.

Однако вложенное время окупается с лихвой. При достаточном освоении AutoHotKey сэкономит вам кучу времени и нервов.


В данном посте я дам лишь описание конкретных примеров применения скриптинга на практике и расскажу про те подводные камни, которые не описаны в документации.


Итак, начнем. Ссылка на программу:

https://autohotkey.com/download/ahk-install.exe (3 Мб)


Написание кода ведется в файлах *.ahk, которые редактируются обычным блокнотом.

Создайте текстовый файл и измените его расширение.

Автоматизация рутины с AutoHotKey Autohotkey, Автоматизация, Программирование, Офисные будни, Образование, Длиннопост

Затем откройте его с помощью блокнота. Теперь вы готовы к работе!

Перейдем к практике.

Напишите


F1:: Send Здравствуйте{!}


Сохраните изменения. Запустите скрипт двойным кликом. Встаньте на какое-нибудь текстовое поле и нажмите F1. Первый опыт скриптинга у вас уже есть.

!, #, ^, +  это служебные знаки. Для того, чтобы напечатать их, нужно оформить их скобками.

Для выключения скрипта нажмите на его иконке возле часов, затем Exit.


Краткое введение закончено, дальше пойдут лишь небольшие советы.


1) Добавьте к скрипту

F12:: Suspend, Toggle

, чтобы ставить/снимать его с паузы клавишей F12


2) Чтобы горячая клавиша не блокировалась скриптом и выполняла также свою обычную функцию, пишите ~.

~F3:: Send {Down}


3)

1::

Send {Tab 5}привет{Enter}  ;пять раз таб, привет, энтер

Click 100, 100  ;клик по заданным координатам, отсчитывается слева-сверху

Click, 2  ;клик два раза

Click right  ;клик правой кнопкой

Send {Down}{Left}{Up}

Send {PgUp}{PgDn}

Send {Space}{Del}

Send {b down}

Sleep, 1000  ;зажать b, ждать 1 секунду, отпустить

Send {b up}  

Return  ;конец списка команд, вызываемых кнопкой "1"


Полный список клавиш смотрите в документации. Пуск -> AutoHotKey -> AutoHotKey HelpFile -> Mouse and Keyboard -> Send


4)

^F1::  ;при нажатии на Ctrl+F1

MouseGetPos, X, Y  ;выдаст текущие координаты курсора

MsgBox, %X%, %Y%

Clipboard = %X%, %Y%  ;и скопирует их в буфер обмена

Return


Обратите внимание - по умолчанию координаты отсчитываются от левого верхнего угла активного окна.

Можно заставить скрипт отсчитывать координаты от левого верхнего угла экрана, предварительно прописав:


CoordMode, Mouse, Screen


Вернуться обратно:


CoordMode, Mouse, Window


5) Модификаторы: "^" = Ctrl, "+" = Shift, "!" = Alt.

Send !{Tab}  ;Alt+Tab

Send +{Home}

Send ^{vk56}  ;Ctrl+V


Почему именно {vk56}, а не {v}? Потому что ^{v} будет работать только при английской раскладке, при русской пришлось бы написать ^{м}.

Однако без всего это можно обойтись, обратившись к клавише через ее виртуальный код.


Список наиболее часто используемых виртуальных кодов:


Send ^{vk43} ;Ctrl+C

Send ^{vk56} ;ctrl+V

Send ^{vk58} ;ctrl+X

Send ^{vk41} ;ctrl+A

Send ^{vk5A} ;ctrl+Z

Send ^{vk53} ;ctrl+S

Send ^{vk51} ;ctrl+Q

Send ^{vk57} ;ctrl+W

Send ^{vk52} ;ctrl+R

Send ^{vk42} ;ctrl+B

Send ^{vk4E} ;ctrl+N

Send ^{vk4C} ;ctrl+L


Аналогично, если вы хотите сделать буквенную клавишу горячей, лучше обратиться к ней через ее виртуальный код:


vk56::Send {Click}  ;посылает клик при нажатии на "м" или "v".


Полный список виртуальных кодов клавиш: http://www.kbdedit.com/manual/low_level_vk_list.html


6) Быстро разворачиваем фотографии правильной стороной.

В стандартной утилите просмотра фотографий Windows есть опция "Развернуть картинку"

Автоматизация рутины с AutoHotKey Autohotkey, Автоматизация, Программирование, Офисные будни, Образование, Длиннопост

NumPad1:: Send ^{,}

NumPad2:: Send ^{.}


Обратите внимание, что эти клавиши работают только при английской раскладке.

Английские точка с запятой расположены справа от клавиши "m" и являются отдельными клавишами. Русская точка и запятая находятся слева от шифта и объединены в одну клавишу.

И еще: чтобы нажать Numpad1 и 2, должна гореть лампочка NumLock.


7)

~1::

Loop,

{

If A_Cursor=Unknown

Click

Sleep, 20

If GetKeyState("2","p")=1

Break

}

F12::Suspend, Toggle


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

Осторожно, если вы наведете мышь на ссылки браузера при активном цикле, он вам их откроет!


Таким образом я автоматизировал прохождение флеш игры Deanimator.

Достаточно навести мышкой на зомби, и профессор сам стреляет, да еще и со скоростью пулемета!

http://www.de-animator.com/deanimator.swf

Автоматизация рутины с AutoHotKey Autohotkey, Автоматизация, Программирование, Офисные будни, Образование, Длиннопост

8)

1::

MouseGetPos, xpos, ypos

MouseClick, left, 130, 70, , 0 ; [WhichButton , X, Y, ClickCount, Speed, D|U, R]

MouseMove, xpos, ypos, 0

Return


Скрипт кликает карточку горохострела вверху экрана и вовзвращает курсор на место.

Цифры 0 в обоих операторах отвечают за скорость перемещения курсора, то есть мгновенно.

Можно закрепить за клавишей 1 горохострел, за 2 - подсолнух и т.д., и быстро без напряга сажать растения.

(координаты 130, 70 вам, скорее всего, придется поменять. Воспользуйтесь пунктом 4)

Автоматизация рутины с AutoHotKey Autohotkey, Автоматизация, Программирование, Офисные будни, Образование, Длиннопост

9) Допустим, вам нужно поставить звездочку или другой символ в конце каждой строки.

Автоматизация рутины с AutoHotKey Autohotkey, Автоматизация, Программирование, Офисные будни, Образование, Длиннопост

NumPad1::

Send {*}{Up}{End}

Return


Ставим звездочку, переходим вверх, идем в конец строки. Готово!

Если нужно удалить символ в конце каждой строки, пишем:


NumPad1::

Send {Backspace}{Up}{End}

Return


Если нужно удалить два символа:


NumPad1::

Send {Backspace 2}{Up}{End}

Return


10) Нужно щелкать мышью как можно чаще? Не проблема!

Автоматизация рутины с AutoHotKey Autohotkey, Автоматизация, Программирование, Офисные будни, Образование, Длиннопост

~1::

While GetKeyState("1","p")=1

{

Click

Sleep 20

}

Return


Данный скрипт посылает клики каждые 20 мс при нажатой клавише "1".

Или можно так. Посылаем клики до тех пор, пока не будет нажата клавиша "2".


1::

While GetKeyState("2","p")=0

{

Click

Sleep 20

}

Return



Ладно, на этом пока все. Будут вопросы - обращайтесь!

Можно даже сделать так: пишите какие типичные рутинные операции нужно разобрать, и они появятся в следующем посте!


P.S.

/*

Многострочный комментарий.

Для выключения участков кода

*/

Лига образования

4.3K поста21.8K подписчика

Добавить пост

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако мы хотим, чтобы соблюдались следующие условия:


ДЛЯ АВТОРОВ:


Приветствуются:

-уважение к читателю и открытость

-желание учиться

Не рекомендуются:

-публикация недостоверной информации


ДЛЯ ЧИТАТЕЛЕЙ:


Приветствуются:

-конструктивные дискуссии на тему постов

Не рекомендуются:

-личные оскорбления и провокации

-неподкрепленные фактами утверждения


В этом сообществе мы все союзники - мы все хотим учиться! :)

Вы смотрите срез комментариев. Показать все
4
Автор поста оценил этот комментарий

Внесу свои 5 копеек. Работа связана с наукой-инженерией и очень удобно использовать привычные обозначения - альфы, беты, подстрочные и надстрочные индексы, поэтому по мере необходимости наполняю скрипт примерно следующего содержания:


!b::

Send β

return


!d::

Send δ

return


!e::

Send ε

return


Здесь !a, !b и тд - Alt + a, Alt + b и тд. Эти комбинации перехватываются и попросту вставляется вставленный в скрит unicode-символ.



Также очень удобно вставлять нижние индексы в ответ на сочетание "_0", "_1" и тд:

:*?:_0::₀

return


:*?:_1::₁

return

раскрыть ветку (29)
Автор поста оценил этот комментарий

Поясни, пожалуйста, что значит :*?: и ::₁, и на какую клавишу бинд. Буду очень благодарен.

раскрыть ветку (28)
2
Автор поста оценил этот комментарий

Как ты этот пост нашёл-то ... 0_o


Подробно описано, как это работает, здесь https://autohotkey.com/docs/Hotstrings.htm

Поясни, пожалуйста, что значит :*?: и ::₁, и на какую клавишу бинд
Бинд не на клавишу, это бинд автозамены строки (двух символов) "_1" на символ "".Итак:


:*?:_1::₁
* между первыми двумя двоеточиями означает - что автозамена срабатывает без какого-ибо последующего trigger-символа, т.е. как только нажата "1" после "_";
? между первыми двумя двоеточиями означает - что автозамена срабатывает даже внутри слова;

Простейший вариант автозамены выглядит как
::btw::by the way
вместо "btw" он вставит "by the way", здесь, как видно, нет модификаторов * и ? между первыми двумя двоеточиями.

раскрыть ветку (27)
Автор поста оценил этот комментарий

спасибо, это очень полезно.
Я этот пост нашел, пытаясь себе набор формул упростить. Пока искал, чуть себе комп не сломал. НАшёл для себя скрипт, подредактировал чуть-чуть, и всё, клавиши переназначились сами по себе, и не вернулись в норму, даже когда снял скрипт.

раскрыть ветку (26)
Автор поста оценил этот комментарий

Видимо какой-то нестандартный скрипт нашли, который "навечно" меняет клавиши местами.

раскрыть ветку (25)
Автор поста оценил этот комментарий

этот

r::

Send, {Alt Down}{Shift Down}


KeyWait, r


Send, {Alt Up}{Shift Up}


Return

Только я его слегка подредактировал. Кажется, r заменил на капс и удалил последнюю строку. Выглядел примерно так:


vk14::

Send, {Alt Down}{Shift Down}

KeyWait, vk14
return


Попробуй сам у себя на компе. Без шуток, проверь)

раскрыть ветку (24)
Автор поста оценил этот комментарий

А что конкретно хочешь реализовать?

раскрыть ветку (21)
Автор поста оценил этот комментарий

Да я уже реализовал: переключение раскладки капсом и верхний и нижний индексы для ворда на правые ctrl и shift.
Ещё бы узнать, как горячими клавишами формулы в ворде писать. чтобы всякие дроби двухэтажные не приходилось мышкой выбирать.

раскрыть ветку (20)
1
Автор поста оценил этот комментарий

Необязательно знать горячие клавиши для формулы.

Можно мышкой кликать.

Сначала узнай координаты вкладки с формулой, координаты самой кнопки нажатием Ctrl+F1:


^F1::

MouseGetPos, X, Y

MsgBox, %X%, %Y%

Clipboard = %X%, %Y%

Return


Запоминать выскочившие цифры не надо - они уже скопировались в буфер обмена.

А потом пишешь:


1::

MouseGetPos, X, Y

Click A,B

Sleep 100

Click C,D

MouseMove, X, Y, 0 ;возвращает курсор на исходное место

Return

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Спасибо, это мне значительно помогло. По крайней мере удобнее я для себя ещё  ничего не нашёл.

1
Автор поста оценил этот комментарий

Или как вариант - добавить кнопку с формулой на быструю панель. Тогда горячая клавиша для формулы станет Alt+(позиция кнопки).

раскрыть ветку (17)
Автор поста оценил этот комментарий

Ну там с горячей панели всё равно придётся выбирать дроби, индексы... Нисколько не ускоряет процесс.
1-й вариант с координатами можно сделать для 2-х или 3-х кликов? У меня 2007-й офис стоит.

раскрыть ветку (16)
Автор поста оценил этот комментарий
Легко. Узнаешь координаты мест, куда кликать, и перечисляешь их в скрипте
Click a, b
Sleep 100
Click c, d

Sleep нужен чтобы ворд успевал отреагировать на клики.
раскрыть ветку (15)
Автор поста оценил этот комментарий

Нормально этот код работает. Зажимает клавиши Альт и Шифт и держит, пока сам заново не нажмешь Альт или Шифт.

Если выключаешь скрипт, все возвращается обратно.

раскрыть ветку (1)
Автор поста оценил этот комментарий

ну не знаю тогда, может не этот был. То есть на основе этого, но не точно такой же, наверно.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку