Ru-Board.club
← Вернуться в раздел «Программы»

» AutoHotkey

Автор: oshizelly
Дата сообщения: 29.03.2013 23:41
OnMyDSeeAtAll 22:37 29-03-2013
Цитата:
Как-то так:

Спасибо. Правда, creature_ws уже предложил другое рабочее решение той же самой задачи. Что в очередной раз доказывает, что многие задачи можно решить при помощи AHK массой разных способов. Теперь у меня в копилке аж два, на все случаи жизни

Цитата:
Space:: ; клавишу выставите по вкусу

А что здесь имеется в виду? Для какой цели клавишу?


LonerDergunov 22:45 29-03-2013
Цитата:
То есть AutoHotkey.exe, а в качестве параметра - ahk-файл.

Вот про это я, собственно говоря, и спрашивал! То есть, если я хочу, чтобы при загрузке системы автоматически запускался Autohotkey.exe и загружал себе скрипты из определённого .AHK файла, то этот файл надо указать в качестве параметра. Это ясно, спасибо.
Но почему тогда у меня происходит не совсем так? В автозагрузке прописан Autohotkey.exe без параметров (только что ещё раз проверил!), который каждый раз стартует при загрузке системы и подгружает скрипты из файла %MyDocuments%\Autohotkey.ahk. Где он хранит имя этого файла? Может, есть какая-то специальная фича автоматически загружать файл с именем Autohotkey.ahk, расположенный в папке %MyDocuments%?

А несколько .AHK файлов можно перечислить в качестве параметров? Или лучше это делать путём подгрузки остальных файлов через директиву #Include ?
Автор: OnMyDSeeAtAll
Дата сообщения: 30.03.2013 04:18
@oshizelly Видел, что уже было предложено, просто на случай если касп всё же станет нужным, посчитал не лишним вариант с отключением (поправил код).
Цитата:
Для какой цели клавишу?
Чтобы была возможность управлять.
Автор: aidomars
Дата сообщения: 30.03.2013 08:55

Цитата:
А что здесь имеется в виду? Для какой цели клавишу?

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

Цитата:
То есть, если я хочу, чтобы при загрузке системы автоматически запускался Autohotkey.exe и загружал себе скрипты из определённого .AHK файла, то этот файл надо указать в качестве параметра. Это ясно, спасибо.

Сделайте ассоциацию на файлы ahk и запускайте сами скрипты, а не Autohotkey.exe.

Цитата:
Может, есть какая-то специальная фича автоматически загружать файл с именем Autohotkey.ahk

Это не фича, это ассоциация.
Вот справка вам.
Автор: oshizelly
Дата сообщения: 30.03.2013 14:22
aidomars 08:55 30-03-2013
Цитата:
Вам надо сперва справку почитать, большинство вопросов отпадет сразу.

Читал. Но они почему-то не отпадают Может, интенсивнее читать надо


Цитата:
Сделайте ассоциацию на файлы ahk и запускайте сами скрипты, а не Autohotkey.exe.
Это не фича, это ассоциация. Вот справка вам.

Это давно уже сделано. А спрашивал я всё-таки про другое. И, если я только что-то понимаю, фрагмент справки по приведённой ссылке совсем не касается моего вопроса:
23:41 29-03-2013
Цитата:
Но почему тогда у меня происходит не совсем так? В автозагрузке прописан Autohotkey.exe без параметров (только что ещё раз проверил!), который каждый раз стартует при загрузке системы и подгружает скрипты из файла %MyDocuments%\Autohotkey.ahk. Где он хранит имя этого файла? Может, есть какая-то специальная фича автоматически загружать файл с именем Autohotkey.ahk, расположенный в папке %MyDocuments%?


Автор: LonerDergunov
Дата сообщения: 30.03.2013 17:32
oshizelly
Из справки (оригинальной, английской), история изменений:
1.0.46.08 - February 7, 2007
Changed: When AutoHotkey.exe is launched without a script specified, it will now run (or prompt you to create) the file AutoHotkey.ahk in the My Documents folder.
По-русски - если параметры (запускаемый скрипт) не указывать, то дефолтно будет запускаться как раз таки указанный вами файл %MyDocuments%\Autohotkey.ahk


Цитата:
Думаю, что не в количестве дело, выставте частоту 100-250 и мешать не будут

Пока и мне не мешают, но просто интересно соотношение потребления памяти и быстродействие в зависимости от количества и частоты проверок активности окон. Тысячи проверок - это утрировано, но вот несколько десятков - вполне достижимое число. Надо будет на англофоруме поискать информацию...
То же самое со строками автозамены. Чем их больше - тем скрипт будет занимать в памяти больше места?
Автор: oshizelly
Дата сообщения: 30.03.2013 18:27
LonerDergunov 17:32 30-03-2013
Цитата:
When AutoHotkey.exe is launched without a script specified, it will now run (or prompt you to create) the file AutoHotkey.ahk in the My Documents folder.  

Ну вот, я так и думал, что должна быть такая фича. В противном случае просто мистика какая-то получалась бы. Благодарю за помощь в восстановлении рационалистической картины мира!
Автор: oshizelly
Дата сообщения: 01.04.2013 10:19
Уважаемые спецы, ответьте, плиз, на вопрос о запуске нескольких файлов: можно ли перечислить несколько .AHK файлов файлов со скриптами в качестве параметров при запуске Autohotkey.exe? И если да, то стоит ли это делать или лучше запускать один "главный" файл, а все остальные подключать через него при помощи директивы #Include ? Или вообще объединить большинство скриптов (кроме конфликтующих друг с другом) в один большой файл?
Спасибо!
Автор: aidomars
Дата сообщения: 02.04.2013 10:08
Имхо прописать в один файл ahk все скрипты через #Include и запускать их метками как душе угодно.
Автор: oshizelly
Дата сообщения: 04.04.2013 23:25
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
Автор: LonerDergunov
Дата сообщения: 05.04.2013 01:14
oshizelly
А скрипты не конфликтуют друг с другом?
keyboard layouts switching by CapsLock и CapsLock suppress (переключение раскладки по CapsLock и придушение CapsLock) - если CapsLock придушен (отключён) - то он ведь вроде и не должен реагировать на нажатия.
Насчёт #Persistent во скрипте (или он в каждом?) - насколько я понимаю, это излишне. Директива ведь должна идти в начале основного скрипта, её не нужно трижды повторять в теле скрипта.

Скопируйте на место ваших Include содержимое подключаемых файлов и посмотрите - получится ли удобоваримый скрипт.

Если все скрипты простейшие - будет легче просто прописать их в один скрипт. Include нужна как правило для чего-то более глобального. Через неё, например, можно вынести в отдельный файл какую-либо функцию, которая используется, скажем, во многих скриптах и не хочется во все скрипты её прописывать вручную (чтобы при правке функции не править её снова во всех скриптах).
Автор: aidomars
Дата сообщения: 05.04.2013 07:20
oshizelly, выкладуй свои скрипты, я то думал там мегаскрипт какой, а то

Цитата:
#Persistent
SetCapsLockState AlwaysOff

Автор: oshizelly
Дата сообщения: 05.04.2013 09:22
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 строк есть
А в-главных, я сейчас пытаюсь понять, как оно работает, и построить правильную структуру. После этого она будет постепенно наполняться скриптами, короткими и всякими...
Автор: aidomars
Дата сообщения: 05.04.2013 10:28

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

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

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

Из первоначального скрипта (работающего) вырезать строки и перенести их в отдельные scriptN.ahk (N=1,2,3...). Ничего больше не добавлять в эти отдельные скрипты, никаких строк. На место вырезанных строк в основном скрипте - вставить #Include scriptN.ahk.
Сами по себе scriptN.ahk скрипты - не будут 100% рабочими, они представляют из себя лишь фрагменты кода, которые для удобства (наглядности) вынесены в отдельный файл.
Автор: Risovod
Дата сообщения: 16.04.2013 10:56
Здравствуйте.
Помогите сделать скрипт, с помощью которого через определенный интервал (2-5 сек) нажималась бы кнопка "Сканирование" в окне "ScanGear CS", по возможности после завершения предыдущего сканирования. Если нет, то хотя бы просто с определенным интервалом. А после нажатия клавиши "Esc" скрипт завершал работу.
[more=Вот скрин окна сканера] [/more]
Автор: creature_ws
Дата сообщения: 16.04.2013 11:19
Раз уж вы спрашиваете и в этой теме, значит 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
Автор: Risovod
Дата сообщения: 16.04.2013 14:45
creature_ws
Спасибо. Всё сделал. Подскажите число 100 как сопоставляется с единицей времени (сек.)? Примерно замерил по секундомеру = 8 сек. сканирование + 6 сек. перерыв. Отсчет 100 идет между нажатиями кнопки "Сканирование" или только ожидание после предыдущего сканирования (когда окно активно)?
Автор: creature_ws
Дата сообщения: 16.04.2013 15:49
Как я понял, после нажатия кнопки «сканировать» появляется окно с заголовком «идет сканирование», после окончания сканирования окно с заголовком «идет сканирование» исчезает.

После запуска скрипта, если окно «идет сканирование» отсутствует, будет произведён клик по кнопке, 100мс пауза, ожидание закрытия окна «идет сканирование», клик по кнопке, повтор описанной последовательности. 6-секундная пауза не предполагается.
Автор: Risovod
Дата сообщения: 16.04.2013 17:33
creature_ws
Значит 100 - это 100мс, которые отсчитываются после завершения предыдущего сканирования (закрытия окна «идет сканирование»)?! Следовательно задержки которые происходят между сканированием, обусловлены техническими характеристиками сканера и ПК.

P.S. Подскажите как дополнительно сделать меню с выбором интервала между сканированием? Так как от вида материала для сканирования, т.е. его удобности, а так же его объёма и загруженности ПК скорость может меняться.
Автор: creature_ws
Дата сообщения: 16.04.2013 17:50
100 — это 100мс между кликом по кнопке и началом ожидания исчезновения окна с заголовком «идет сканирование».
Интервал между сканированием это промежуток времени между исчезновением и появление окна с заголовком «идет сканирование».

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

В коде всего 2 команды, добавьте Sleep'ов по вкусу
Автор: oshizelly
Дата сообщения: 18.04.2013 10:32
Насколько я понял, хоткеи сабжа чувствительны к текущей раскладке клавиатуры (в отличие от, например, системных хоткеев Windows).

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

При этом хоткей с кириллической буквой H на самом деле работает (по крайней мере, в большинстве окон).

Два вопроса:
1. Если сабж считает, что использовать в хоткеях буквы из другой раскладки неправильно, то как надо правильно?
2. Как отключить это уведомление об ошибке при каждом загрузке .AHK - файла с данным скриптом (именно это сообщение, а не все сообщения об ошибках вообще). До тех пор, пока юзер на нажмём на [OK] в подвтверждение прочтения, скрипты не работают

Спасибо!

Автор: aidomars
Дата сообщения: 18.04.2013 11:39

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

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

Код: !^vk59::
MsgBox это и есть Alt+Ctrl+Y
Return
Автор: oshizelly
Дата сообщения: 18.04.2013 11:56
aidomars 11:39 18-04-2013
Цитата:

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

Нет, только к раскладке по умолчанию.
Автор: creature_ws
Дата сообщения: 18.04.2013 13:18
Клавишу клавиатуры однозначно идентифицирует "key scan code", идентифицирует с исключениями - "virtual keycode".

Если раскладка ввода по умолчанию — русская, то при запуске скрипта сопоставление указанных «буковками» горячих клавиш соответствующим sc или vk происходит по русской раскладке в которой латинские литеры внезапно отсутствуют.

Возможность писать в скрипте ^!y:: это очень удобно, но расчитанно на пользователей, у которых раскладка ввода по-умолчанию содержит букву Y.

oshizelly, прочитайте справку, там есть все ответы.
Автор: LonerDergunov
Дата сообщения: 18.04.2013 14:08

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

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

aidomars

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

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

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

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

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

Код: #SingleInstance ignore
#NoTrayIcon
#NoEnv
#Persistent
Send {Home}{Down}
Автор: creature_ws
Дата сообщения: 20.04.2013 15:28
Правильно — не считать ahk скрипты подобием bat файлов. Нет необходимости каждый чих описывать в отдельном файле. В одном «висящем в памяти» скрипте спокойно уживаются до тысячи подпрограмм горячих клавиш и неограниченное количество строк автозамены.

Горячую клавишу возможно зарегистрировать несколькими способами. Горячие клавиши, использующие функцию RegisterHotkey срабатывают от эмулированных нажатий, в отличии от использующих клавиатурный хук. Но как бы вы не использовали $ и #UseHook, в Тотале от этого реализация горячих клавиш, использующих хук, не появится.

Тотал коммандер не умеет различать эмулированное и физическое нажатие — учить его некому.

Код: правильно реализовать
Автор: oshizelly
Дата сообщения: 20.04.2013 16:51
LonerDergunov 14:08 18-04-2013
Цитата:
Через сканкоды и виртуальные коды.


Большое спасибо за ссылку на статью Androgen Belkin. Но...

Androgen Belkin хотя и рекомендует использовать сканкоды и виртуальные коды в качестве более продвинутого решения, всё же допускает также и использование "изобретённого" мной варианта с назначением парных русских/английских клавиш.

Цитата:
Решение этой проблемы: если клавиша "зависима" от раскладки, и если вы хотите быть уверены, что ваш скрипт будет работать, невзирая на то, какой язык по умолчанию в системе, то вариантов решения может быть два:
назначать клавиши и на английском, и её русской "сожительницей" на клавиатуре, или…


А у меня этот вариант почему-то не работает. Точнее, работает только в некоторых случаях.
Например, в скрипте для одной и той же команды написал несколько комбинаций горячих клавиш:


Код: ^!W::
Run, C:\test.bat
return

^!Ц::
Run, C:\test.bat
return

<^>Ц::
Run, C:\test.bat
return
Автор: LonerDergunov
Дата сообщения: 20.04.2013 16:54
creature_ws
Понял, спасибо. Целью была возможность легкого переназначения горячей клавиши на определённую команду, а не жёсткое её прописывание в скрипте. Но раз не получится - значит, скрипт будет работать Persistent ))

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

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


Цитата:
#if Winactice("ahk_class Класс основного окна TC")

IfWinActive - наверное всё же слитно.
А скобочки и кавычки - они нужны, не нужны или без разницы (нестрогость записи)?


Цитата:
Home::Send {Home}{Down}

Кстати, а когда нужно использовать $ ? По справке он нужен для "имитации нажатий клавиш, входящих в состав самой горячей клавиши", то есть как-раз вроде как такой случай, но хоткей стабильно работает из без $.

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: как добавить ивритские шрифты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.