1287

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

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

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

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

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

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

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


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

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


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


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

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


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

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

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

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

Напишите


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 есть опция "Развернуть картинку"

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

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)

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

NumPad1::

Send {*}{Up}{End}

Return


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

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


NumPad1::

Send {Backspace}{Up}{End}

Return


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


NumPad1::

Send {Backspace 2}{Up}{End}

Return


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

~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.

/*

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

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

*/

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

6.8K пост22.9K подписчика

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

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


ДЛЯ АВТОРОВ:


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

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

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

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

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


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


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

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

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

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

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


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

2
Автор поста оценил этот комментарий
То чувство, когда всего одной кнопкой, можешь унижать людей.
Иллюстрация к комментарию
раскрыть ветку (1)
5
Автор поста оценил этот комментарий

Не, нужен чуть другой скрипт. Чтобы когда подводишь к "Ответить" делал клик, вставлял текст, отправлял его и переходил к следующему коменту.

Чтоб всех подряд поливать.

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

и еще один небольшой вопрос, можно ли сделать случайный таймер sleep допустим от 3х до 5ти минут?

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

Все верно.


Random t, 180000, 300000

Sleep t

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

Нет, трахаться с формулами я и сам умею. Мне нужно заклинание чтобы дебиторка по контрагентам заполнялась сама, без моего участия.

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

Тогда вам придется энное количество времени потрахаться с написанием скрипта.

Зависит от того, насколько сложен процесс заполнения.


В Автохоткее есть все инструменты для этого - вызов окон нужных программ, работа с данными внутри них и прочее. Изучайте. Если возникнут трудности с конкретными задачами - спрашивайте.

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

Должна пойти. Если не идет, пробуйте запустить скрипт от имени администратора.

0
Автор поста оценил этот комментарий
Народ, умоляю, помогите. Я в программировании дуб дубом, но мне очень нужен макрос для одной игры (Grim Dawn). Мне нужно, чтобы по нажатии клавиши q, запускалась последовательность клавиш, с задержкой 20мс после каждой. Кто может написать пример скрипта? Я вроде разобрался, что начало должно быть чем-то вроде

q::q
sleep 20ms

а как задать следующую клавишу, я не понимаю
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

vk51::    ;так скрипт будет реагировать и на Q и на Й, а не только на Q

send a

sleep 20

send b

sleep 20

send c

sleep 20

Return

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

Помогите мне, пожалуйста

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

Описывай конкретнее. В каких ситуациях должен срабатывать скрипт? С какой частотой нажимать клавиши? Когда должен заканчиваться скрипт? Какие клавиши нажимать? И т.д. и т.п.

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

спасибо, у меня получилось реализовать немного другими командами, хотя я и немного не понял, что значит D и U. Down и up?

И вот тут ещё не ясно, что означает "P":

if not GetKeyState("F1", "P")

break

кстати, у меня почему-то не получается. сделать так, чтобы при выключенном numlocke F1 выполнял изначальную функцию. То есть я хотел сделать так, чтобы при включённом numlock выполнялись скрипты, а при выключенном клавиши работали нормально.

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

Читаем инструкцию https://autohotkey.com/docs/commands/GetKeyState.htm,

находим

GetKeyState, state, CapsLock, T ; D if CapsLock is ON or U otherwise.

Делаем вывод, что D - капслок включен, U - выключен.

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

Хотел создать скрипт, которой при нажатом numlock будет многократно кликать мышкой, если нажать лкм.

Вот мой скрипт, который не работает:

LButton::

Loop,

{

If NumLockMode=on

Click

Sleep, 40

If NumLockMode=off

Break

}

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

F1::

Loop,

{

GetKeyState, arbuz, NumLock, T

If arbuz = D

Click


Sleep 40


If arbuz = U

Break

}

Return

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

Хотел создать скрипт, которой при нажатом numlock будет многократно кликать мышкой, если нажать лкм.

Вот мой скрипт, который не работает:

LButton::

Loop,

{

If NumLockMode=on

Click

Sleep, 40

If NumLockMode=off

Break

}

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

https://autohotkey.com/docs/commands/GetKeyState.htm


F1::

GetKeyState, arbuz, NumLock, T


If arbuz = D

MsgBox, NumLock is ON


If arbuz = U

MsgBox, NumLock is OFF


Return

0
Автор поста оценил этот комментарий
vk47, это виртуальная клавиша ?? Не могу найти инфы по ней, а мне нужно
Сам по этому трафарету делаю бинды
Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Читайте внимательней, в посте рассказано про виртуальные клавиши.

http://www.kbdedit.com/manual/low_level_vk_list.html

0
Автор поста оценил этот комментарий
  Добрый вечер ТС, не могу найти как сделать для себя скрипт. Что мне нужно.

  Допустим курсор мышки стоит в произвольном положении.
При нажатии кнопки G Курсор переноситься в центр экрана, делает щелчок левой кнопкой и возвращается в исходное положение.
  То есть я не знаю как сделать так чтобы курсор вернулся обратно, где и был до нажатия бинда.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

vk47::        ;клавиша G (П)

MouseGetPos A, B

Click 600, 400    ;координаты 600 400 взяты с потолка. Меняйте по своему усмотрению

MouseMove A, B, 0         ;0 - скорость движения мыши, т.е. мгновенно.

Return

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

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

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

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

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

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

раскрыть ветку (1)
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

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

подскажи пожалуйста, а как настроить запуск скрипта на время?

например, чтобы каждый понедельник в 7:55 утра включался скрипт

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

Вот есть какие-то инструкции на английском, но там как-то сложно, нет такого простого оператора "в такое-то время запустить скрипт". Я бы просто скачал отдельную программу-планировщик.

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

подскажи пожалуйста, а как настроить запуск скрипта на время?

например, чтобы каждый понедельник в 7:55 утра включался скрипт

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

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

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

Спасибо

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

Свифт бот написан на AHK, кстати.

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

С этим порядок, отправляет довольно быстро.

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

Тогда попробуйте назначить вкл/выкл на другую клавишу. Допустим, 7.


LButton::

s = 1

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

{

If s = 1

{

Click

}

Sleep 100

}

Return


7::

If s = 0

{

s := 1

}

else

{

s := 0

}

Return

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

На пару уровней посложнее пожалуйста, более-менее разбираюсь, просто не ясен язык.
GetKeyState - получает состояние клавиши,
"LButton" - ЛКМ,
"p" - нажата? "r" - тогда будет не нажата?,
=1 - ?
Что даёт тильда, как влияет?
Ещё до написания коммента пробовал с другими клавишами, как мыши, так и клавиатуры. Результат как описывал выше. Попробовал поставить ~, разницы не заметил.

Переменная s при нажатии ключевой клавиши изменяется, проверил записывая её значения в файл кодом:

vk60::

FileAppend, %S%`n, Coords.txt

Return

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

Скрипт вообще клики отправляет?

Попробуйте просто вот так:


LButton::

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

{

Click

}

Sleep 100

Return

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

На пару уровней посложнее пожалуйста, более-менее разбираюсь, просто не ясен язык.
GetKeyState - получает состояние клавиши,
"LButton" - ЛКМ,
"p" - нажата? "r" - тогда будет не нажата?,
=1 - ?
Что даёт тильда, как влияет?
Ещё до написания коммента пробовал с другими клавишами, как мыши, так и клавиатуры. Результат как описывал выше. Попробовал поставить ~, разницы не заметил.

Переменная s при нажатии ключевой клавиши изменяется, проверил записывая её значения в файл кодом:

vk60::

FileAppend, %S%`n, Coords.txt

Return

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
2) Чтобы горячая клавиша не блокировалась скриптом и выполняла также свою обычную функцию, пишите ~.
~F3:: Send {Down}

Без тильды MButton или RButton перестанет выполнять свою обычную функцию.

Будет только отключать/включать цикл.

"p" - нажата? "r" - тогда будет не нажата?

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

{

Send {123}

;если ЛКМ (левая кнопка мыши) нажата,то выполняем это

}


If GetKeyState("LButton","p")=0

{

Send {123}

;если ЛКМ не нажата,то выполняем это

}


У меня все работает. Зажимаю ЛКМ - начинает кликать. Щелкаю колесиком либо ПКМ - перестает кликать. Щелкаю еще раз - снова кликает. Опускаю ЛКМ - перестает кликать вообще.


Проверять можно выводом на экран

MsgBox, %s%

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

Не работает включение\выключение
Если начальное значение переменной s = 0, левый клик вообще не распознаётся, пока активен скрипт.
Фиг его знает что-за магия.

Пожалуйста подробно объясните эту строчку: While GetKeyState("LButton","p")=1

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Всё это дело включать и выключать на среднюю кнопку мыши.

Щелчок средней кнопкой мыши - это нажатие на колесико с щелчком, а не скроллинг. Точно правильно делаете?

Попробуйте заменить MButton на RButton. Теперь вместо средней кнопки используйте правую.

Кстати, поставьте перед этой строчкой ~. Чтобы получилось

~MButton или  ~RButton.


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

Эта строчка запускает цикл, который каждый проверяет, зажата ли левая кнопка. Как только левая кнопка отпускается, цикл прекращает действовать.

показать ответы
1
Автор поста оценил этот комментарий
Но "Арчейдж" в Английском сочетание букв ch наше ч .
Ну посмотрите официальные ролики, везде "арКэйдж".

ch дает ч, к, ш, щ. И походу где что - нужно тупо запомнить.


А дико бесячий пример - в доте "chaos knight" почти все называют "чаос кнайт". Хер с ним с "кнайтом" - половина русских читают не читаемые первые буквы, приелось.

Но блин ЧАОС, Карл! :D

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

Да-да, "чаос кнайт" неправильно.

И "хаос найт" тоже.

Правильно - "кейас найт"

https://www.youtube.com/watch?v=JCa21U3xma0

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

Как реализовать задачу?: Постоянно кликать с коротким интервалом, при зажатой левой кнопке мыши. Всё это дело включать и выключать на среднюю кнопку мыши. Я весь мозг поломал, много вариантов перепробовал, со звуком прокатывает, а вот клик проходит только один.

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

Возьми себе за правило выкладывать свои наработки прежде чем просить совета.


LButton::

s = 1

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

{

If s = 1

  {

  Click

  }

Sleep 100


}

Return


MButton::

If s = 0

{

s := 1

}

else

{

s := 0

}

Return

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

Уже не надо, разобрался. Спасибо за пост! Мне это очень помогло!

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

Не за что =)

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

Можно с помощью этой программы настроить нажатие кнопки esc комбинацией win+ё? Может есть какая-нибудь программа поудобнее?

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

#vkC0::Send {Esc}

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

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

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

Sikuli

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

А оно кликает при неактивном окне? Хочу играть в Clicker Heroes и скроллить инет.

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

Для кликер хирос есть уже готовый бот Swift Bot.

И он может посылать команды в неактивное окно. А вы серфить инет.


Правда свифт бот требует прокачанного аккаунта для автоматического фарма.

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

Насчет звездочек и прочего редактирования текста - поиск/замена с регулярными выражениями позволит это сделать значительно быстрее. Ну или vim с командой norm :) а так согласен, штука крутая, спасала несколько раз

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

Не скажи. Я, например, не знаю как применить регулярные выражения в блокноте.

Если задача простая - набросать небольшой скриптик для меня дело пары секунд.

Я уже наловчился в этом.

Хотя тому, кто наловчился в регулярках, быстрее будет скопировать в питон (или что вы там используете) и применить их, чем сидеть изучать AHK.

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

@netwizard, как отсылаются комманды?

Интересует вариант через виртуальный драйвер клавы/мыша. Или через виртуальную клавиатуру.

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

Не знаю. Знаю, что он может посылать виртуальные коды клавиш. Это вам о чем-нибкдь говорит?

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

Ребзи помогите, как сделать повтор этого скрипта каждые 15 секунд? и чтоб запускался на num1, перезагружался на num2, пауза на num3:


!4::

SendInput, {vk49}

sleep, 500

Click 524, 282, 0

Click 2

sleep, 500

Click, 524, 347, 0

Click 2

Return

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

Подсказка: клавиша num1 вызывается Numpad1

Ждать 15 секунд: sleep 15000

Сброс скрипта Reload

Пауза Suspend, Toggle

Циклы оформляются так:

loop,

{

}

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

Спасибо, а ещё такой момент:
sc1E:: ;клавиша с русской Ф и англ А

Send {sc21} ; клавиша с русской А и англ F

При комбинации клавиш с ctrl и shift кнопки выполняют те же значения, которые были без переназначений клавиш, можно ли как-то переназначить клавиши так, чтобы они выполняли весь функционал кнопок, в том числе и комбинации с ними? Я пытался разобраться, но так и не нашёл ответ. 

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

sc1E у меня не работает, заменил на vk41

*vk41:: send {sc21}

пошлет клавишу f независимо от нажатых Ctrl Shift Alt


Если же хотите полностью поменять функционал клавиши, то видимо придется задавать каждую комбинацию отдельно

^vk41:: send ^{sc21}

+vk41:: send +{sc21}

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

Здравствуйте, как назначить клавиши по условию?
Например, если NumLock включён, то
1=Num1,

2=Num2 и т. д.
А если выключен, то значения у кнопок нормальные.

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

https://www.autohotkey.com/boards/viewtopic.php?t=49830

#if GetKeyState("NumLock", "T")

1::send {numpad1}

2::send {numpad2}

#if

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

Сделал максимально просто

F3::pause

Pause::Pause

F4::

Reload

Return

F2::

Loop

{

Click

Sleep 3000

Click

}

Увы, задумка не совсем вышла. Первый клик делается, три секунды ждёт и новый, дальше по задумке второй клик должен быть быстрее, но программа бывает путает их местами, либо же я не совсем понимаю как это работает. И перерыв между последним действием в таком случае в несколько раз больше, что не есть хорошо.
Так же не совсем понял как вписать нажатие B, отдельно, со своим таймером.

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

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

И я не понял какие конкретно действия вы хотите реализовать в скрипте.


Нажатие B, наведение курсора в определённое место и раз в 5-10 секунд (пока точное время не высчитал) будет клик лкм этом месте. Через 6 минут повторение цикла, снова B, снова клики. И так, пока не будет нажата условная кнопка F1 снова.
Нужно только это?

F2::

loop,

{

send {vk42}

loop, 10

{

sleep 3000

click

}

sleep 360000

}

return


F4::reload


Send {b} ненадежно, может не сработать в русской раскладке, лучше {vk42}. Скрипт пошлет b один раз, затем кликнет 10 раз, затем повторит цикл через 6 минут. F4 перезапустит весь скрипт, то есть цикл прервется.

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

Сделал максимально просто

F3::pause

Pause::Pause

F4::

Reload

Return

F2::

Loop

{

Click

Sleep 3000

Click

}

Увы, задумка не совсем вышла. Первый клик делается, три секунды ждёт и новый, дальше по задумке второй клик должен быть быстрее, но программа бывает путает их местами, либо же я не совсем понимаю как это работает. И перерыв между последним действием в таком случае в несколько раз больше, что не есть хорошо.
Так же не совсем понял как вписать нажатие B, отдельно, со своим таймером.

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

Loop

{

Click

Sleep 3000

Click

}


Скрипт делает двойной клик каждые три секунды. Между первым и вторым кликом есть пауза sleep, а между вторым и первым нет. Если не нужен двойной клик, то нужно сделать так


Loop

{

Click

Sleep 3000

Click

Sleep 3000

}

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

Сейчас начну разбираться, но задумка следующая:

Нажатие B, наведение курсора в определённое место и раз в 5-10 секунд (пока точное время не высчитал) будет клик лкм этом месте. Через 6 минут повторение цикла, снова B, снова клики. И так, пока не будет нажата условная кнопка F1 снова.

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

Не за что. Задумка легко реализуемая, если не получится самому справиться - спрашивайте. Правда AHK не во всех играх запускается.

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

Привет подскажи как переименовать окно виндовс через AHK ?

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

Ой, ссылку забыл http://forum.oszone.net/post-2420892.html

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

Привет подскажи как переименовать окно виндовс через AHK ?

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

Здесь есть решение на разных языках в том числе на AHK

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

Дочка выломала кнопку на мониторе сделал такой скрипт

скачал и поставил nircmd (как наименее громоздкое решение)

в скрипт

^!l:: Run "C:\Program Files (x86)\nircmd\nircmd.exe" monitor off

и alt+ctrl+l будет выключать моник без задержки! (хоткеи на ярлыках дают задержку в 3 секунды если находится на рабочем столе или в окне проводника, или в окне powershell, но не дают если находится в настройках 10-ки)) )

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

Круто!

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

На кибер форуме зарегистрирован? если нет могу твой код привести как решение
если да сделай это сам пожалуйста

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

А еще лучше - закинь туда ссылку на автора кода, т.к. автор этого решения не я.


https://autohotkey.com/board/topic/60723-can-autohotkey-retr...

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

На кибер форуме зарегистрирован? если нет могу твой код привести как решение
если да сделай это сам пожалуйста

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

Не зарегистрирован., можешь написать код. И желательно ссылку на источник, т.е. эту страницу.

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

потому что буковку L потерял
http://www.cyberforum.ru/cmd-bat/thread2443619.html

Тебе ОГРОМНОЕ спасибо!!!

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

Ну так я код запостил, не проверял его?

#comment_139579606

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

http://www.cyberforum.ru/cmd-bat/thread2443619.htm

надо как  то так:
NumpadAdd:: Run print %selctedFiles%

но ругается на отсутствие программы

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

Пишет страница недоступна.

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

Дружище, выручи, пожалуйста.

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

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

Работает только если файл лежит в папке, открытой в проводнике. Если лежит на рабочем столе, работать не будет.

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

Дружище, выручи, пожалуйста.

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

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

Попробуйте вот это и скажите, вылезает ли окно печати


numpadadd::

path := % Explorer_GetSelection()

Run, print %path%

return


Explorer_GetSelection(hwnd="") {

hwnd := hwnd ? hwnd : WinExist("A")

WinGetClass class, ahk_id %hwnd%

if (class="CabinetWClass" or class="ExploreWClass" or class="Progman")

for window in ComObjCreate("Shell.Application").Windows

if (window.hwnd==hwnd)

sel := window.Document.SelectedItems

for item in sel

ToReturn .= item.path "`n"

return Trim(ToReturn,"`n")

}

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

@netwizard, привет.

Вопросик по вводу текста.

Send выводит в редактор заданный большой текст очень медленно(по буквам).
Быстрее можно только через команды Clipboard? или есть другие варианты? Например задержка между буквами регулируется как-то.

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

Напиши в начале скрипта

Sendmode Input


Это другой режим ввода, более быстрый. Должно помочь.

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

Еше один вопрос - при запушенном скрипте который отправляет нажатие клавивиш в определенное окно
Пример -

ControlSend,, 1, Window_clone_2
sleep 300
ControlSend,, 2, Window_clone_2

sleep 300
перестают работать кнопки - Alt, ctrl, tab (тоесть они работаю через раз)  можно это както поправить? или это зависит из-за параметра sleep , тоесть если я нажимаю  допустим альт и в это время скрипт отсылает нажатие в окно то альт не сработает? я правильно понял или это происходит из-за чего-то другого?

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

Вот что нашел:

By default, modifier keystrokes (Control, Alt, Shift, and Win) are sent as they normally would be by the Send command. This allows command prompt and other console windows to properly detect uppercase letters, control characters, etc. It may also improve reliability in other ways.


However, in some cases these modifier events may interfere with the active window, especially if the user is actively typing during a ControlSend or if the Alt key is being sent (since Alt activates the active window's menu bar). This can be avoided by explicitly sending modifier up and down events as in this example:


ControlSend, Edit1, {Alt down}f{Alt up}, Untitled - Notepad


То есть везде где используется ControlSend, надо клавиши обрамлять в {Alt down}<клавиша>{Alt up}

0
Автор поста оценил этот комментарий
Можете написать свой e-mail? Могу с Вами консультироваться при освоении данной программы? А то здесь неудобно писать сообщения.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

netwizard list ru

0
Автор поста оценил этот комментарий
Здравствуйте! Такой вот вопрос. Я перебиваю числа из одной программы в Excel в ручную в определенные ячейки в определенной последовательности и так 1000 раз. Скажите возможно автоматизировать такой процесс?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Зависит от того, насколько легко можно считать данные из этой программы. Например, в блокноте, если данные расположены по строкам, можно сказать скрипту нажать Home, затем зажать Shift + End, выделится вся строка, которую можно скопировать. Ну или на крайняк - сказать скрипту выделить мышкой отсюда до сюда, скопировать, затем то же, но строкой ниже и т.д.


В экселе легко копировать данные из ячеек, скрипт просто нажимает вправо и последовательно проходит по ним всем.

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

Автор вы мне не подскажите как реализовать одну штуку, для запуска программы и ввода пароля использую вот такой скрипт

Run, howin32.exe, "C:\Program Files (x86)\winclone

sleep 1000

WinWaitActive Window_clone_1

Send 55523@gmail.com

Send {TAB}

Send 55523

Send {ENTER}

А как мне сделать ввод логина и пароля в уже запущенные окна, допустим их названия Window_clone_1 Window_clone_2 Window_clone_3 Window_clone_4
Заранее спасибо

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

Нужно 1) активировать окно с таким названием 2) дождаться пока система переключит на него фокус 3) ввести пароль


WinActivate Window_clone_1

WinWaitActive Window_clone_1

Send 55523@gmail.com

Send {TAB}

Send 55523

Send {ENTER}

sleep 1000


WinActivate Window_clone_2

WinWaitActive Window_clone_2

...

показать ответы
0
Автор поста оценил этот комментарий
Добрый день, подскажите пожалуйста, возможно ли автоматизировать процесс, т.е. на данный момент дело происходит так: есть макрос в Excel, который преобразует txt файл в excel файл но эт все делается вручную, но так как таких txt фалов много, то уходит много времени, ну не совсем много конечно. .но не удобно, причем каждый преобразованный файл нужно ещё сохранить отдельно
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Если процесс состоит из повторяющихся шагов, то наверняка можно.

показать ответы
0
Автор поста оценил этот комментарий
Добрый день, подскажите пожалуйста, возможно ли автоматизировать процесс, т.е. на данный момент дело происходит так: есть макрос в Excel, который преобразует txt файл в excel файл но эт все делается вручную, но так как таких txt фалов много, то уходит много времени, ну не совсем много конечно. .но не удобно, причем каждый преобразованный файл нужно ещё сохранить отдельно
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

7
Автор поста оценил этот комментарий
Синтаксис данной приблуды очень похож на AutoIT. Уж не знаю, кто с кого списывал. В любом случае, как человек, который автоматизировал работу отдела из сотни сотрудников и кучу сценариев, которые сутками обрабатывались (само собой, падая на голову за день до сдачи) рекомендую и вам, и @netwizard, забить на скриптовые поделки и взять нормальные инструменты, если у вас нет проблем с компиляцией. Я переписал тот же AutoIT на C#, получив удобную (в те времена) библиотеку, которая даже с банальными операциями вроде поиска окна и отправки команд отдельным элементам (ComboBox, ListBox) работала в несколько раз быстрее и надежнее, тогда, как AutoIT могла просто зауиснуть на 762 документе из 30000 в 3 часа ночи. Сейчас же все более распространение получают WPF и UWP, у которых может не быть WinAPI подложки. Такими элементами вы будете управлять только клавиатурой и мышью. Сейчас же существует куча готовых библиотек для автоматизации UI, которые с этим справляются. Опять же, нормальный язык программирования позволит вам раюотать и напрямую с объектами окруэения. Та же операция доюавления звездочки в конце строки решается автозаменой \r\n на *\r\n (впрочем, с этим справится и нормальный текстовый редактор, вроде Notepad++). AutoIT - хороший способ войти в мир автоматизации, не нцжно искать библиотеки, не нужно ставить Visual Studio или, прости хоспади, IntelliJ. Но задерживаться на нем я настоятельно не рекомендую.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо, подумаем.

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

@netwizard, как отсылаются комманды?

Интересует вариант через виртуальный драйвер клавы/мыша. Или через виртуальную клавиатуру.

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

Имеется ввиду послать виртуальный код какой-либо клавиши?

Смотрите пост, пункт 5

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

WinMaximize - команда не опознана. Пилот у меня  2.38 версии

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

WinMaximize - команда для языка AutoHotKey. Вы пользуетесь пилотом, я в нем не шарю.

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

WinMaximize - команда не опознана. Пилот у меня  2.38 версии

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

Пилот? У вас не Autohotkey стоит, а другое что-то?

И покажите свой код. Попробовал WinMaximize, прекрасно все разворачивает.

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

Ни как у меня не получается развернуть приложение на весь экран. Как я клавишу Win не прописывал. Не работает(

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

1. Какая винда?

2. Если просто руками нажимаете Win+вверх, разворачивает?

3. Покажите свой код.

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

А как прописать одновременное нажатие клавиш win + (стрелочка вверх) (мне это нужно для открытия приложения на все окно экрана, спасибо.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Send #e holds down the Win key and then presses the E key

https://autohotkey.com/docs/commands/Send.htm


Для вас будет

Send #{Up}


Есть еще модификаторы:

!{Up}  альт вверх

+{Up} шифт вверх

^{Up} ктрл вверх

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

Типо "Нажмите 2" и оно нажимает 2.Пишит "нажмите 3" оно нажимает 3

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

Ничего не понял. Опишите ситуацию.

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

Напишите пожалуйста скрипт,когда система задаёт клавишу и оно её само автоматически нажимает.

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

Как понять система задает клавишу?

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

подскажите пожалуйста

нужны хоткеи для мгновенного клика по заданной области

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

Как понять по области? Можно кликнуть по точке внутри некой области


SendMode Input

1::

Click A, B

Return


где A B координаты точки

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

Тс, тебя и так заваливали вопросами, но задам ещё один. Вроде и руководство читал, и примеры смотрел, а так и не дошло до меня. Как написать макрос с последовательностью команд? Дабы по нажатию клавиши последовательно активировались эскейп и ентер. Через Send в игорах не работает.

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

Попробуй сначала не в играх, а где-нибудь в ворде, например. Когда будет получаться там, перейди на игру. Если там не получается, посмотри коменты к этому посту или к другим, я где-то отвечал почему не работает в некоторых играх.

показать ответы
0
DELETED
Автор поста оценил этот комментарий

А есть оболочка для AHK типо как Oscar Mouse Editor, чтобы не руками клавиши писать а мышью накликивать по картинке клавы и клавиши вставали в скрипт?

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

Не слышал.

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

он делает:


1) заходит в блокнот

2) выделяет и копирует 1 строчку

3) Вставляет в браузер и нажимает кнопку


НО в файле блокнота не одна строчка, которую нужно поочередно скопировать вставить, нажать кнопку отправить.


Я и спрашиваю как заставить его идти вниз по документу блокнота поочередно копируя, вставляя и нажимая кнопку и так пока не кончаться строчки текста в файле блокнота


Реально?

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

Надо добавить пункт 4 - активировать блокнот

и пункт 5 - нажатие клавиши вниз Send {Down}

после чего замкнуть цикл.


Loop,

{

;шаги 1-3

WinActivate, Блокнот

WinWaitActive, Блокнот

Send {Down}

}

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

Все получилось запустить скрипт.


Но он не копирует и не вставляет все строчки их файла


Можно сделать чтобы он шел по файлу сверху вниз копировал текстовые строчки и вставлял в браузер? Делал это пока не закончатся текстовые строчки в файле.

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

А что он делает? Сначала попробуйте заставить его активировать окно блокнота.

Затем попробуйте выделить скриптом целую строчку и скопировать ее.

Затем попробуйте активировать окно браузера.

Что из этого не получается?

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

запустил. вот такое пишет в окне программы


Script lines most recently executed (oldest first). Press [F5] to refresh. The seconds elapsed between a line and the one after it is in parentheses to the right (if not 0). The bottommost line's elapsed time is the number of seconds since it executed.

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

Это не сообщение об ошибке. Если присутствует синтаксическая ошибка в коде, он будет ругаться что-то типа Unknown operator in line 23.


Здесь, видимо, он ждет пока появится окно Блог пользователя или Notepad++,

но не может их найти. Возможно, вы сделали опечатку.


Попробуйте

F2::WinActivate, Блог пользователя (Юрий Жигалов) - МирТесен - Opera

F3::WinActivate, *new 16 - Notepad++


и проверьте, работают ли клавиши. F2 должна вызвать оперу, F3 блокнот.

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

правильно сделал код, запятые, скобки, написание координат и прочие спец символы?


F1::



Send {End}+{Home}


Send ^{vk43}



WinActivate, <Блог пользователя (Юрий Жигалов) - МирТесен - Opera>


WinWaitActive, <Блог пользователя (Юрий Жигалов) - МирТесен - Opera>


Click <297,302>



Sleep 100


Send ^{vk56}


Click <249,651>


WinActivate, <*new 16 - Notepad++>



Return

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

Убери везде < >

В остальном вроде норм.

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

Подскажите как сделать такой скрипт. Сам пытался, но ничего не выходит


в файле содержится например 100 строчек текста


нужно:

выделить 1 строчку

скопировать ее

вставить в нужное место на сайте

подождать 10 сек

нажать кнопку отправить


и.т.д. по кругу

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

F1::


Send {End}+{Home}  ;сначала переходит в конец строки, затем зажимает шифт и переходит в начало

Send ^{vk43}   ;посылает сочетание Ctrl+C


WinActivate, <заголовок окна браузера, узнается с помощью утилиты Window Spy>

WinWaitActive, <заголовок окна браузера, узнается с помощью утилиты Window Spy>

Click <координаты окошка, куда нужно вставить текст>


Sleep 100

Send ^{vk56} ;посылает сочетание Ctrl+V

Click <координаты кнопки Отправить>

WinActivate, <заголовок окна текстового редактора>


Return


Повторяете процедуру. Скорее всего в каких-то местах система не будет успевать реагировать на быстрые действия, посылаемые скриптом. Надо будет вставлять команды Sleep в таких местах.

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

спасибо, у меня получилось реализовать немного другими командами, хотя я и немного не понял, что значит D и U. Down и up?

И вот тут ещё не ясно, что означает "P":

if not GetKeyState("F1", "P")

break

кстати, у меня почему-то не получается. сделать так, чтобы при выключенном numlocke F1 выполнял изначальную функцию. То есть я хотел сделать так, чтобы при включённом numlock выполнялись скрипты, а при выключенном клавиши работали нормально.

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

https://autohotkey.com/board/topic/60119-suppress-hotkeys-wh...


#If GetKeyState("Numlock","T")


F1::

MsgBox, 1

Return


#If

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

у меня только 1 раз это срабатывает, а не 3, почему-то.

F1::

Loop, 3

{

SetCapsLockState, ON

Sleep 500

SetCapsLockState, Off

return

}

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

F1::

Loop, 3

{

SetCapsLockState, On

Sleep 500

SetCapsLockState, Off

Sleep 500

}

return

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

У меня снова вопрос возник: как сделать так, чтобы на клавиатуре мигали кнопки?
Пытался сделать скрипт, который лампочкой, которая светится при нажатии капса, промигал бы сигнал SOS, но ни "send", ни "sendinput" не помогают.
Вот этим скриптом я пытался это сделать

F1::

Loop, 3

{

Send {vk14}

Sleep, 500

Send {vk14}

Sleep, 500

}

Loop, 3

{

Send {vk14}

Sleep, 200

Send {vk14}

Sleep, 200

}

Loop, 3

{

Send {vk14}

Sleep, 500

Send {vk14}

Sleep, 500

}
Хотя на Numlock сработало

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

F1::

SetCapsLockState, ON

Sleep 500

SetCapsLockState, Off

return

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

сменил sendplay на sendinput, первые 2 энтера нажимаются, эскейп почемуто нет. что интересно на экране предматчевого лобби он (esc) срабатывает (если меньше сек поставить), а если выпадает по времени ему нажаться уж в бою, то почемуто не работатет.

Скажите, за деньги можете сделать скрипт ? (https://vk.com/id80608207 )

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

Здравствуйте!

1) Пробовали запускать скрипт Правая кнопка - Запускать от имени администратора?

2) Если не поможет, попробуйте запустить игру не в полноэкранном, а в оконном режиме.


3) Нажатие по команде SendInput {Esc} происходит мгновенно. Некоторые игры просто не успевают отреагировать по причине своего движка. Попробуйте следующее:


SendInput {Esc down}

Sleep 10

SendInput {Esc up}


Кстати, необязательно каждый раз писать SendInput.

Достаточно в начале прописать SendMode Input,

а затем пользоваться командой Send.


4) Некоторые игры имеют анти-чит защиту от скриптов. Они различают команды посланные скриптом (программные) и драйвером клавиатуры (аппаратные).

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


5) Либо под Windows XP создать пользователя с правами администратора и запустить скрипт от его имени.


6) Игра может отсеивать команды от подозрительных процессов. Скомпилируйте скрипт в .exe и переименуйте во что-нибудь безобидное.


7) Игра блокирует внешние нажатия клавиш, если эти клавиши уже используются в игре. Если у вас на клавише Esc висит какая-нибудь команда, то если скрипт пошлет эту клавишу, может вообще ничего не произойти. Посмотрите как у вас в игре назначены клавиши.

-------------------------------------------

Ну и надо заметить, что у вас уже работают энтер и эскейп (в отдельных случаях). Это уже хорошо. Проверьте другие клавиши, WASD, например.

Проверьте, можно ли заменить нажатие Esc кликом мышки? Экспериментируйте.

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

здравствуйте, хотел узнать можно ли при помощи ahk сделать следующее: в игре warthunder нужно вступать в бой и тут же выходить из него и так повторять в течении часа. думаю есть 2 варианта. первый (а стоит упомянуть, что кнопку "в бой" можно заменить нажатием "энтер") сделать все кнопками.

игра может быть в оконном режиме для слабого пк, в этом окне(игре) залогиниться я могу сам и в игровом лобби запустить скрипт который запустит бой, далее загрука, вход в бой, и выход, ждет загрузку лобби и так по кругу. время на подбор боя почти одинаково (95%) далее все стандартно. требуется нажать:  "энтер" 20секунд задержки "энтер" 20секунд задержки "esc" "вверх" "энтер" "энтер" 15секунд задержки "энтер". этот способ легче, но могут быть сбои тк может увеличиться продолжительность например закидывания в бой и тогда скрипт перестанет работать.

второй вариант: кликать по определенной координате при появлении красной кнопки.

везде на каждом этапе (загрузка боя , лобби и тд) появляется кнопка например "в бой" она красная после нажатия ее идет подбор матча плюс загрузка, после этого еще раз появляется кнопка "в бой" всегда в одном месте, далее еск+вверх+энтер это выход из боя далее все можно делать кнопками+задержка (как в варианте 1)

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

заранее спасибо за советы

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

В ahk есть такая полезная штука как распознавание экрана.

Я только недавно ей научился, полгода назад.

Можно поставить паузу не 20 секунд, а каждую секунду чекать экран на наличие красной кнопки.


Loop,

{

ImageSearch, xp, yp, 204, 13, 240, 56, *50 TurnIcon.png

Sleep 200

If xp > 0

Break

}


Этот скрипт каждые 200мс проверяет наличие рисунка TurnIcon.jpg

в области экрана (204, 13)-(240, 56).

Если не нашел изображение, то переменным xp и yp присваивается значение null,

цикл повторяется.

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

В моем случае мне это не нужно, мне нужен сам факт наличия этой кнопки.

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


*50 это строгость поиска. *0 значит что изображение должно идеально совпасть с искомым. Если скрипт находит какие-то левые изображения, значит строгость слишком маленькая. И наоборот.


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

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

Здравствуйте. У меня вопрос по поводу программы. Не могли бы вы подсказать, как настроить паузу между нажатиями клавиш в режиме записи действий? Пример: в игре совершаю несколько действий, после нужно немного подождать, и продолжить другие действия, но программа в описании скрипта не видит эту паузу. Если есть вообще такая возможность. А если нет, то какие аналоги посоветуете?

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

Что за программа? Покопайтесь в настройках, наверняка есть возможность паузы ставить. Либо уже в готовом скрипте добавьте паузу сколько вам нужно.

Например, Sleep 25000 это пауза 25 секунд.

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

Так, а ты не знаешь редактора формул для ворда, чтобы можно было горячими клавишами вставлять индексы и дроби? А то задолбался уже? Ещё и полработы переделывать из-за того, что мой word фигово работает, и полработы не сохранилось просто нахер(или удалилось).

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

А что тут такого сложного? Нужно просто вписать в скрипт места, куда кликать мышкой.

Я выше дал вроде скрипт, который копирует текущие координаты курсора в буфер обмена.

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

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

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

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

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

этот

r::

Send, {Alt Down}{Shift Down}


KeyWait, r


Send, {Alt Up}{Shift Up}


Return

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


vk14::

Send, {Alt Down}{Shift Down}

KeyWait, vk14
return


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

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

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

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

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

этот

r::

Send, {Alt Down}{Shift Down}


KeyWait, r


Send, {Alt Up}{Shift Up}


Return

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


vk14::

Send, {Alt Down}{Shift Down}

KeyWait, vk14
return


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

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

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

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

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

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

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

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

Может кто подскажет как можно нажимать кнопку в неактивном окне? Это для сбора лута в РФОнлайн.

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

ControlSend, , {Enter}, Clicker Heroes


ControlClick, x100 y300, Clicker Heroes, , left, 0

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

Спасибочки

А сам AutoHot Key не умеет?

Печаль.

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

Свифт бот написан на AHK.

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

Можно посылать команды в неактивное окно в фоновом режиме?

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

Приветик, а можно как то смену раскладки назначить нестандартно средствами autohotkey?

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

F1::SendInput {shift down}{alt down}{shift up}{alt up}


Либо если используете Ctrl+Shift


F1::SendInput {shift down}{ctrl down}{shift up}{ctrl up}


Либо другие способы:

https://www.google.ru/search?btnG=1&amp;pws=0&amp;q=change%2...

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

Немного слоу, помогите пожалуйста сделать такой скрипт:
проверяет активно (на переднем плане ли) окно Х, если активно нажимает пробел, если не активно то активирует его и нажимает пробел. Повторяет эти действия пока не выключить\не остановить

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

Loop

{

IfWinNotActive, Title

   WinActivate, Title

Sleep 100

IfWinActive, Title

   Send {Space}

}


F12::Pause,Toggle

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

сделал. ничего не происходит.

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

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

Естественно, вместо Title, x1, y1 и прочих нужно подставить свои значения.

Только тогда будет работать.

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

Да, вроде того :) Как теперь это дело привязать к конкретному экзешнику можно?

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

Задаешь дополнительное условие IfWinActive, после чего ставишь

заголовок программы, в которой должен работать скрипт.

Заголовок узнаешь с помощью WindowSpy, Пуск - AutoHotKey.


Либо если не получается им (игра на полный экран),

врубаешь скрипт, который узнает заголовок окна и копирует его в буфер обмена.


F1::

WinGetTitle, s, A

Clipboard = %s%

Return



Loop

{

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

   i = 25

IfWinActive, AutoHotkey Script.ahk — Блокнот

   If i > 0

   {

   SendInput {1}

   i := i - 1

   }

Sleep 20

}

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

сделал. ничего не происходит.

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

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

vk.com/heartikov

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

Господа, если не затруднит: как сделать так, чтобы при зажатии клавиши в ммо оно продолжало прокликиваться по кд с разбежкой, ну пусть в 500мс? Ну и привязать это дело к конкретному экзешнику. А то аж бесит пальцы себе ломать, когда нужно то 1 кнопку шмяк шмяк =\

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

Loop

{

If GetKeyState("1","p") = 1 ;проверяем нажата ли клавиша 1

   i = 25 ;увеличиваем счетчик


If i > 0

   {

   SendInput {1} ;пока не закончился счетчик посылаем клавишу 1

   i := i - 1

   }


Sleep 20

}



То есть пока держишь клавишу, она непрерывно кликается.

Когда отпускаешь, продолжает кликаться еще 500мс.

Это нужно было?

показать ответы
0
Автор поста оценил этот комментарий
я так и подумал, а если мне нужно до конца списка?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы
0
Автор поста оценил этот комментарий
что такое Loop, 5
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Loop - по-английски петля.

Повторить заключенное в скобках ниже 5 раз.

показать ответы
0
Автор поста оценил этот комментарий
а вы знаете игру годвиль? нет ли к ней ботов?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Почему же. Есть у нас к ней боты. Вот держите.


While True

{

Sleep, 1000

}

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

В том то и проблема, ждать нельзя) Подозреваю что код ПО на C# или около него, можно как-то к объектам обращаться? Ну т.е. по не от MS

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

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

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

Спасибо за пост

а можешь пример скрипта, что бы в блокноте удалял несколько знаков справа(5) и слева(15), оставляя текст внутри? во всех строках естественно

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

F1::SendInput {End}{Backspace 5}{Home}{Del 15}{Down}


Встаешь на первую строку и жмешь F1 сколько нужно.

Можно ускорить процесс.


F1::

Loop, 5

{

SendInput {End}{Backspace 5}{Home}{Del 15}{Down}

}

Return


А еще лучше зайдет Sublime text

#comment_71306565

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

А если эти ячейки туда сюда скачут относительно центра, можно как-то застраховаться от клика как бы "не в том месте"? Ну т.е. я допустим кликнул по ячейке 0 и ожидал что скрипт кликнет по ячейкам -5 и 10, но из-за движения ленты клик прошел по ячейкам -25 и -3.

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

Застраховаться можно либо обращаясь к ячейкам напрямую, как-то типа этого

#comment_71289998


Либо через визуальный поиск ячеек.

Либо очень жестко прописав тайминги кликов.

Например, зная, что лента успеет сдвинуться на 50 пикселей, сделать соответсвующее упреждение.


Проще, конечно, подождать пока лента остановится.

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

Вот на счет визуального распознавания я не знаю точно. У меня задача относительно простая: при клике мышкой в области ценовой ленты нужно произвести клик на расстоянии n элементов ниже и выше от предыдущего клика при проведении сделки.  


P.S. Буквально неделю назад пытался понять AHK, но кроме туториалов для SAMP так ничего и не нашел. А тут как раз ваш пост:)

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

Если в экселе я хочу выбрать ячейку ниже текущей,


Send {Down 3}{F2}


F2 - чтобы начать редактировать ее.


Либо если я предварительно узнал, сколько пикселей в высоту каждая ячейка,

я просто перемещу курсор вниз на 3*N пикселей, пусть это будет 150.


MouseClick, left, 0, 150, 1, 0, , R

;MouseClick [, WhichButton , X, Y, ClickCount, Speed, D|U, R]


R говорит скрипту, что нужно сместиться на 0 вправо и 150 вниз, а не кликнуть по координатам 0, 150.

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

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

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

А какие конкретно у него проблемные места? Что именно неудобно?

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

ребят, может кто подскажет. Через какую прогу можно брать текст с определенного блока сайта и вставлять его в ячейку экселя?

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

Открыть окно браузера

WinActivate, Title


Прицелиться мышкой на текст


MouseClickDrag , left,x1,y1,x2,y2,0


Копируем

Send ^{vk43}


Переходим на эксель

WinActivate, Title2


Вставляем

Send ^{vk56}

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

Как-то давно в SA:MP играл и там без этой программки было никуда.

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

А зачем конкретно там нужны скрипты?

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

Спасибо большое за пост. Один вопрос: можно ли с ним автоматизировать работу в Приводе Бондаря? лучше всего через какой-либо доступ к элементам окна т.к. api к ПБ нет(

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

Т.е. через визуальное распознавание?

Знаю, что АНК и Sikuli такое умеют.

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

ТС, вопрос только один - есть что-то подобное на Mac?

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

Сорян, пользуюсь виндой. Гугл в помощь.

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

А можно с таким скпритом сделать автоматическую установку точки после двойного пробела?

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

:: ::.

Внутри двух двоеточий - один пробел. Только вот он некорректно реагирует на три пробела, надо подумать как обойти это.

2
Автор поста оценил этот комментарий
А еще можно взять клаву\мышь сразу с макросами и настроить через графический интерфейс. Скучнее, затратнее, но быстрее и проще точно.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Мышь с макросами умеет организовывать циклы? Не сарказм, реально интересно.

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

а в 1с сможет поля заполнять? Мне например надо ежедневно контакты заносить, а мне лень..

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

Можно, либо через обращение к элементам окна напрямую (до этого я еще не дорос).

Либо через четко выверенные комбинации клавиш и кликов.


Можно, например, запустить 1с


Run, C:\program files\1c\1c.exe


Ждем пока он загрузится,


WinWaitActive, 1С:Предприятие ООО "Ромашка"


И так далее.

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

в платном автокликере(я жлоб) был поиск по картинке, т.е. клик срабатывал, если появлялся определенный элемент. эта хуйня так может?

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

https://www.reddit.com/r/ClickerHeroes/comments/3wxwfu/click...

Свифт бот, написан на АНК. Умеет кликать финтифлюшки через визуальное распознавание.

7
Автор поста оценил этот комментарий
Работает с любой версией Word, Excel, другими приложениями офиса через майкрософтовский COM-объект. Типа как "изнутри".
Типичная инструкция:
$vRange = $oWorksheet.Range($vRange)
$vRange.EntireRow.Delete($iShift)

ПыСы. Я довольно продвинутый пользователь AutoIt, обращайтесь.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ладно, ячейки экселя, думаю, можно "пощупать" через всякие конструкции.

А ленту экселя? Там где "Главная", "Разметка страницы" и т.д.


Что еще из популярных программ я могу пощупать? Интерфейс Пикабу? Ютуб?

Скайп? Вконтакте?

показать ответы
0
Твой лапуля
Автор поста оценил этот комментарий

Я слишком крабоват в скриптах и иже с ними, но меня интересует, как в Team Fortress 2 забиндить, чтоб Шпион автоматически выполнял удар в спину. То есть в тот момент, когда рука с ножом делает замах для удара.

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

Это нужно графическое опознание делать. С этим будет трудно. Рука изменяет окраску при различном освещении. Еще куча других нюансов, которые будут препятствовать опознанию. Я считаю, что это не стоит того.

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

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

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

,

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

^F2::          ;Ctrl+F2

Run, http://www.google.com

Run, http://www.pikabu.ru

Return

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

Плюсомет

~1::

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

{

SendInput {w}{d}

Sleep 20

}

Return

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

Ахах, действительно =). Только в одной из раскладок, кажется, работать не будет.

Лучше w = vk57, d = vk44.


Ну и пауза между повторениями 20мс - думаю слишком мала.

Движок пикабу, наверное, не будет успевать обрабатывать.

300-500мс в самый раз, думаю.

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

AutoIt не только с DirectX  может работать, но и таблицами, браузерами и другими программами. И он не требует большого контроля.

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

Плюсую вопрос про таблицы.

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

Я извиняюсь, но это случайно не те самые скрипты, что юзают в ммо играх?

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

Не все скрипты пишутся в АНК, но довольно много.

В АНК есть много инструментов для ммо игр.

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

Можно ли считывать название активного окна? Переключаться между окнами?

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

Еще есть инструмент WindowSpy, находится там же, где документация.

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

Можно ли считывать название активного окна? Переключаться между окнами?

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

WinGetActiveTitle, Title

MsgBox, The active window is "%Title%".


WinActivate, Автоматизация рутины с AutoHotKey - Google Chrome

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

Как увидеть полный список заклинаний в Excel?

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

Заклинания? Эксель? Может формулы? Возле строки состояния есть значок fx. Нажмите на него, появится список формул.

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

Для Арчэйджа (игры) пойдет? Смысл в том чтобы рыбачить без остановки прокликивая постоянно 1 клавишу мышкой или цифрой.

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

Должна пойти. Если не идет, пробуйте запустить скрипт от имени администратора.

1
Автор поста оценил этот комментарий
Лента экселя не нужна, абсолютно все операции текущей версии Эксель доступны через COM.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Знаю, но у меня теоретический интерес. Можно или нет?

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества