Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoHotkey

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

Открыть новую тему     Написать ответ в эту тему

chum2000

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

   
 
Актуальная версия: AutoHotkey 2.0.5 от 12 августа 2023
Версия для Windows XP | Changes from v1.1 to v2.0
 
Официальный сайт | Англоязычный форум | Архивный форум | Русскоязычный форум
Документация (англ.) | Документация и статьи (рус.) | История изменений
 
Подборка полезных скриптов | AutoHotkey + Total Commander
 

Цитата:
AutoHotkey — бесплатная программа с открытым исходным кодом для создания макросов и автоматизации, позволяющая упростить выполнение повторяющихся задач.
 
AutoHotkey позволяет изменить интерфейс практически любой программы. Имеет собственный скриптовый язык, специально нацеленный на лёгкое назначение и переназначение горячих клавиш.
 
AutoHotkey можно использовать для запуска программ, отправки текста, имитации мыши. Скриптовый язык позволяет управлять окнами, файлами и папками. Команды могут быть активированы горячими клавишами.
 
Также имеются возможности создания GUI, работы с реестром, использования собственного API окон для вызова DLL-файлов. Скрипты можно скомпилировать в EXE-файл и запускать на любом компьютере с Windows соответствующей версии.
 
Наиболее частое применение AutoHotkey:
- переназначение клавиш (глобально или у отдельных программ)
- управление мышью с помощью клавиатуры или джойстика
- слежение за системой, автоматическое выполнение некоторых действий по желанию пользователя, таких как напоминание, сканирование или резервное копирование
 

Всего записей: 505 | Зарегистр. 04-03-2004 | Отправлено: 00:28 02-06-2005 | Исправлено: Egor2020, 10:08 21-09-2023
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
aidomars 10:08 02-04-2013
Цитата:
Имхо прописать в один файл ahk все скрипты через #Include и запускать их метками как душе угодно.

 
Пытаюсь подключить через директиву #Include в дефоттном файле AutoHotkey.ahk несколько дополнительных файлов. Некоторые работают, другие - нет  
 
Совсем ведь простой код, справку по приведённой выше ссылке аж три раза перечёл
 

Код:
#Include D:\My Documents\AutoHotkey - keyboard layouts switching by CapsLock.ahk
 
#Include, D:\My Documents\AutoHotkey - CapsLock suppress.ahk
 
#Include, d:\My Documents\AutoHotkey - NumLock suppress.ahk
 

Ну и коды самих скриптов тоже вроде не очень сложные, например, вот такой:

Код:
#Persistent  
SetCapsLockState AlwaysOff
 

 
Что я опять делаю не так

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 00:25 05-04-2013
LonerDergunov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oshizelly
А скрипты не конфликтуют друг с другом?
keyboard layouts switching by CapsLock и CapsLock suppress (переключение раскладки по CapsLock и придушение CapsLock) - если CapsLock придушен (отключён) - то он ведь вроде и не должен реагировать на нажатия.
Насчёт #Persistent во скрипте (или он в каждом?) - насколько я понимаю, это излишне. Директива ведь должна идти в начале основного скрипта, её не нужно трижды повторять в теле скрипта.
 
Скопируйте на место ваших Include содержимое подключаемых файлов и посмотрите - получится ли удобоваримый скрипт.
 
Если все скрипты простейшие - будет легче просто прописать их в один скрипт. Include нужна как правило для чего-то более глобального. Через неё, например, можно вынести в отдельный файл какую-либо функцию, которая используется, скажем, во многих скриптах и не хочется во все скрипты её прописывать вручную (чтобы при правке функции не править её снова во всех скриптах).

Всего записей: 2972 | Зарегистр. 11-07-2007 | Отправлено: 02:14 05-04-2013 | Исправлено: LonerDergunov, 03:26 05-04-2013
aidomars



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oshizelly, выкладуй свои скрипты, я то думал там мегаскрипт какой, а то

Цитата:
#Persistent  
SetCapsLockState AlwaysOff  


Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 08:20 05-04-2013
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LonerDergunov 01:14 05-04-2013
Цитата:
А скрипты не конфликтуют друг с другом? Скопируйте на место ваших Include содержимое подключаемых файлов и посмотрите - получится ли удобоваримый скрипт.  

Они поначалу и были именно в одном файле. А потом я их решил разнести по отдельным квартирам, отчасти из соображений удобства, отчасти - чтобы понять, как это всё фунциклирует.
Когда они все прямо в теле одного большого файла, без всяких #include, то не конфликтуют. Или это зависит от порядка строк?
 

Цитата:
keyboard layouts switching by CapsLock и CapsLock suppress (переключение раскладки по CapsLock и придушение CapsLock) - если CapsLock придушен (отключён) - то он ведь вроде и не должен реагировать на нажатия.

Была у меня такая мысль (не настолько уж я всё-таки безнадёжен, чтобы такие вопросы в голову совсем не приходили).
Но, насколько я понял, что скрипт SetCapsLockState AlwaysOff работает не с клавишей CapsLock, а с состоянием системы: увидев, что система перешла в состояние CapsLock On, от её тут же переводит обратно в состояние CapsLock Off. Если это моё предположение верно, то этот скрипт вроде бы никак не должен сказываться на использование клавиши CapsLock в любых других целях.
 

Цитата:
Насчёт #Persistent во скрипте (или он в каждом?) - насколько я понимаю, это излишне. Директива ведь должна идти в начале основного скрипта, её не нужно трижды повторять в теле скрипта.

Не, ну вот ничё не понял... Можно то же самое ещё раз, но с учётом уровня интеллекта подготовки собеседника?
#Persistent  - не в каждом, а в некоторых. Например, эта директива идёт 1-й строкой в CapsLock suppress.ahk и NumLock suppress.ahk.
 
aidomars 07:20 05-04-2013
Цитата:
выкладуй свои скрипты, я то думал там мегаскрипт  

Во-первых, не все скрипты такие простые, там даже и по 5-10 строк есть
А в-главных, я сейчас пытаюсь понять, как оно работает, и построить правильную структуру. После этого она будет постепенно наполняться скриптами, короткими и всякими...

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 10:22 05-04-2013 | Исправлено: oshizelly, 11:14 05-04-2013
aidomars



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
#Persistent  - не в каждом, а в некоторых

Представьте, что вместо строки #Include script1.ahk у вас размещен сам код этого файла (по сути это так и есть). Аналогично с #Include script2.ahk. Что получится? Если в обоих скриптах есть #Persistent, это неправильно. А если одинаковые функции или горячие клавиши, то скрипт вообще работать не будет. Да и он ошибку покажет, что да как.

Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 11:28 05-04-2013
LonerDergunov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Не, ну вот ничё не понял... Можно то же самое ещё раз, но с учётом уровня подготовки собеседника?

Из первоначального скрипта (работающего) вырезать строки и перенести их в отдельные scriptN.ahk (N=1,2,3...). Ничего больше не добавлять в эти отдельные скрипты, никаких строк. На место вырезанных строк в основном скрипте - вставить #Include scriptN.ahk.
Сами по себе scriptN.ahk скрипты - не будут 100% рабочими, они представляют из себя лишь фрагменты кода, которые для удобства (наглядности) вынесены в отдельный файл.

Всего записей: 2972 | Зарегистр. 11-07-2007 | Отправлено: 14:20 05-04-2013
Risovod



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Помогите сделать скрипт, с помощью которого через определенный интервал (2-5 сек) нажималась бы кнопка "Сканирование" в окне "ScanGear CS", по возможности после завершения предыдущего сканирования. Если нет, то хотя бы просто с определенным интервалом. А после нажатия клавиши "Esc" скрипт завершал работу.
Вот скрин окна сканера

Всего записей: 939 | Зарегистр. 12-11-2006 | Отправлено: 11:56 16-04-2013
creature_ws



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Раз уж вы спрашиваете и в этой теме, значит autohotkey вы уже установили (актуальная версия 1.1.09.04).
В папке autohotkey есть AU3_Spy.exe, запустите это приложение, переключитесь на окно ScanGear CS, наведите курсор на кнопку «сканировать» и, не перемещая курсор, переведите взгляд на окно AU3_Spy, найдите строку с текстом ClassNN:, запомните текст идущий после ClassNN:. Допустим, там будет написано Button3, тогда скрипт будет выглядеть так:

Код:
loop {
    WinWaitClose Идет сканирование
    ControlClick Button3, ScanGear
    Sleep 100
}
 
Esc::ExitApp

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 12:19 16-04-2013 | Исправлено: creature_ws, 12:27 16-04-2013
Risovod



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
creature_ws
Спасибо. Всё сделал. Подскажите число 100 как сопоставляется с единицей времени (сек.)? Примерно замерил по секундомеру = 8 сек. сканирование + 6 сек. перерыв. Отсчет 100 идет между нажатиями кнопки "Сканирование" или только ожидание после предыдущего сканирования (когда окно активно)?

Всего записей: 939 | Зарегистр. 12-11-2006 | Отправлено: 15:45 16-04-2013
creature_ws



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как я понял, после нажатия кнопки «сканировать» появляется окно с заголовком «идет сканирование», после окончания сканирования окно с заголовком «идет сканирование» исчезает.
 
После запуска скрипта, если окно «идет сканирование» отсутствует, будет произведён клик по кнопке, 100мс пауза, ожидание закрытия окна «идет сканирование», клик по кнопке, повтор описанной последовательности. 6-секундная пауза не предполагается.

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 16:49 16-04-2013
Risovod



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
creature_ws
Значит 100 - это 100мс, которые отсчитываются после завершения предыдущего сканирования (закрытия окна «идет сканирование»)?! Следовательно задержки которые происходят между сканированием, обусловлены техническими характеристиками сканера и ПК.
 
P.S. Подскажите как дополнительно сделать меню с выбором интервала между сканированием? Так как от вида материала для сканирования, т.е. его удобности, а так же его объёма и загруженности ПК скорость может меняться.

Всего записей: 939 | Зарегистр. 12-11-2006 | Отправлено: 18:33 16-04-2013
creature_ws



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
100 — это 100мс между кликом по кнопке и началом ожидания исчезновения окна с заголовком «идет сканирование».
Интервал между сканированием это промежуток времени между исчезновением и появление окна с заголовком «идет сканирование».
 
Скрипту безразлична скорость сканирования, он будет жать кнопку пока окно не существует, а после ждать пока окно не исчезнет.
 
В коде всего 2 команды, добавьте Sleep'ов по вкусу

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 18:50 16-04-2013
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Насколько я понял, хоткеи сабжа чувствительны к текущей раскладке клавиатуры (в отличие от, например, системных хоткеев Windows).
 
Чтобы хоткей работал при любой текущей раскладке клавиатуры, решил сделать для одной и той же команды парный хоткей: один Alt+Ctrl+Y для английской раскладки, второй для Alt+Ctrl+Н. Однако сабж идею не принял: говорит, что, мол, ошибка, мол, нет такой буквы в этой раскладке.  
 
При этом хоткей с кириллической буквой H на самом деле работает (по крайней мере, в большинстве окон).
 
Два вопроса:
1. Если сабж считает, что использовать в хоткеях буквы из другой раскладки неправильно, то как надо правильно?
2. Как отключить это уведомление об ошибке при каждом загрузке .AHK - файла с данным скриптом (именно это сообщение, а не все сообщения об ошибках вообще). До тех пор, пока юзер на нажмём на [OK] в подвтверждение прочтения, скрипты не работают
 
Спасибо!
 
 

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 11:32 18-04-2013 | Исправлено: oshizelly, 11:35 18-04-2013
aidomars



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
хоткеи сабжа чувствительны к текущей раскладке клавиатуры

Нет, только к раскладке по умолчанию.

Код:
!^vk59::
MsgBox это и есть Alt+Ctrl+Y
Return

Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 12:39 18-04-2013
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
aidomars 11:39 18-04-2013
Цитата:

Цитата:
хоткеи сабжа чувствительны к текущей раскладке клавиатуры

Нет, только к раскладке по умолчанию.

Прошу прощения, не понял Что означает фраза, что "хоткеи сабжа чувствительны к раскладке клавиатуры по умолчанию"?

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 12:56 18-04-2013 | Исправлено: oshizelly, 12:57 18-04-2013
creature_ws



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Клавишу клавиатуры однозначно идентифицирует "key scan code", идентифицирует с исключениями - "virtual keycode".  
 
Если раскладка ввода по умолчанию — русская, то при запуске скрипта сопоставление указанных «буковками» горячих клавиш соответствующим sc или vk происходит по русской раскладке в которой латинские литеры внезапно отсутствуют.
 
Возможность писать в скрипте ^!y:: это очень удобно, но расчитанно на пользователей, у которых раскладка ввода по-умолчанию содержит букву Y.
 
oshizelly, прочитайте справку, там есть все ответы.

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 14:18 18-04-2013 | Исправлено: creature_ws, 14:22 18-04-2013
LonerDergunov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Если сабж считает, что использовать в хоткеях буквы из другой раскладки неправильно, то как надо правильно?

Через сканкоды и виртуальные коды. Насколько я помню - где-то упоминалось, что использование sc в большинстве случаев более универсально и желательно (хотя в некоторых случаях vk отрабатывает лучше).
Тут и Тут разжёвано.
 
aidomars

Цитата:
Нет, только к раскладке по умолчанию.

Только с оговоркой - для предыдущих версий Windows.
Потому как уже появилась Windows 8. А ней майкрософтовцы порушили предыдущие устои, и раскладка клавиатуры для запускаемого приложения наследуется, а не берётся дефолтная.

Всего записей: 2972 | Зарегистр. 11-07-2007 | Отправлено: 15:08 18-04-2013 | Исправлено: LonerDergunov, 15:10 18-04-2013
aidomars



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Что означает фраза, что "хоткеи сабжа чувствительны к раскладке клавиатуры по умолчанию"?  

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

Цитата:
oshizelly, прочитайте справку, там есть все ответы.
+500

Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 15:41 18-04-2013
LonerDergunov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В справке есть такой префикс:
"Префикс $ обычно необходим, если в скрипте используется команда Send для имитации нажатий клавиш, входящих в состав самой горячей клавиши, иначе такая горячая клавиша может запустить сама себя."
А если нужно примерно то же самое, но когда скрипт запускается сторонними хоткеями?
Конкретно. В Тотал коммандере нужно при нажатии на клавишу Home вызывается AHK-скрипт и происходит переходить на первый элемент списка каталогов/файлов (эмуляция нажатия Home, а затем Вниз).
Работает вариант Home::Send {Home}{Down} (работает корректно почему-то даже без знака доллара).
Однако при этом скрипт постоянно висит в памяти, а нужно чтобы после нажатия на Home скрипт вызвался, отработал и закрылся.
Что-то наподобие этого:

Код:
#SingleInstance ignore  
#NoTrayIcon
#NoEnv
#Persistent
Send {Home}{Down}

Не выходит - эмуляция нажатия Home вызывает повторное срабатывание хоткея в Тотале, в результате чего курсор помигивает и быстренько перемещается вниз файловой панели. Эксперименты с $ и с командой #UseHook on не привели ни к чему - я так понимаю, это для случая когда хоткей назначается в самом скрипте. А как же в данном случае правильно реализовать?

Всего записей: 2972 | Зарегистр. 11-07-2007 | Отправлено: 05:58 20-04-2013
creature_ws



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Правильно — не считать ahk скрипты подобием bat файлов. Нет необходимости каждый чих описывать в отдельном файле. В одном «висящем в памяти» скрипте спокойно уживаются до тысячи подпрограмм горячих клавиш и неограниченное количество строк автозамены.
 
Горячую клавишу возможно зарегистрировать несколькими способами. Горячие клавиши, использующие функцию RegisterHotkey срабатывают от эмулированных нажатий, в отличии от использующих клавиатурный хук. Но как бы вы не использовали $ и #UseHook, в Тотале от этого реализация горячих клавиш, использующих хук, не появится.
 
Тотал коммандер не умеет различать эмулированное и физическое нажатие — учить его некому.

Код:
правильно реализовать
:

Код:
#if Winactive("ahk_class Класс основного окна TC")
    Home::Send {Home}{Down}

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 16:28 20-04-2013 | Исправлено: creature_ws, 22:15 06-03-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

Компьютерный форум Ru.Board » Компьютеры » Программы » AutoHotkey


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru