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

» AutoHotkey

Автор: creature_ws
Дата сообщения: 20.04.2013 17:29

Цитата:
IfWinActive - наверное всё же слитно.

Мало того, #IfWinActive - тоже слитно. А вот #if Winactive() и if Winactive() — раздельно

Цитата:
Сэмулировать нажатия клавиш без перехвата их нажатия другим приложениями

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

Цитата:
выставить приоритет отработки хоткеев, прописанных в программе и назначенных в AHK

Если программа использует RegisterHotkey, а Autohotkey для той же клавиши будет использовать хук — Autohotkey обработает нажатие раньше (и, в зависимости от подпрограммы горячей клавиши, либо заблокирует нажатие, либо уведомит приложение)
Если программа как и Autohotkey использует системный клавиатурный хук, то уведомление о физическом нажатии клавиши первым будет получать «последний зарегистрировавший» горячую клавишу.

Цитата:
а когда нужно использовать $


Код: vk41::Send {vk41}
Автор: LonerDergunov
Дата сообщения: 20.04.2013 19:59
creature_ws

Цитата:
Мало того, #IfWinActive - тоже слитно. А вот #if Winactive() и if Winactive() — раздельно

Ага, понял... это разные команды.
#If - более универсальный вариант, а #IfWinActive - проверка именно окна. В данном случае запись:
#IfWinActive ahk_class TTOTAL_CMD
эквивалентна той, что предложили вы. Или такой вариант чем-то уступает #If Winactive() ?


Цитата:
Если программа использует RegisterHotkey, а Autohotkey для той же клавиши будет использовать хук — Autohotkey обработает нажатие раньше

Понял, это я запутался потому как получил двойной перехват срабатывания нажатия.
Для наглядности повесил в Тотале на клавишу Home удаление файлов, а через AHK на эту же клавишу - эмуляцию Send {Home}{Down}. Нажимаю Home - файлы удаляются. Первый вывод был - AHK хоткей не срабатывает. А на самом деле AHK перехватывает нажатие, пытается выполнить эмуляцию нажатия {Home}, Тотал перехватывает это сэмулированное нажатие и вызывает срабатывание своего хоткея, как результат файл удаляется. Если же в AHK назначить Home::Send {Down}, то удаления не происходит, курсор чётко переходит на позицию вниз, а тоталовский хоткей игнорируется. Забавно.


По поводу сканкодов. Рекомендуется ли использовать их всегда (включая клавиши Home, End, Delete, Insert, стрелки и т.д.) или только для буквенных клавиш?
Автор: creature_ws
Дата сообщения: 20.04.2013 21:50

Цитата:
такой вариант чем-то уступает #If Winactive() ?

Нет.

Цитата:
или только для буквенных клавиш?

Да
Автор: oshizelly
Дата сообщения: 21.04.2013 11:01
Уважаемые гуру! Никто не может прокомментировать странное поведение сабжа?
Автор: aidomars
Дата сообщения: 21.04.2013 12:03
oshizelly, попробуй измени раскладку по умолчанию. Попробуй принудительно менять текущую раскладку в приложении. Попробуй наконец использовать сканкоды. Попробуй начать читать справку.
А лучше зарегайся на форуме, там тебе в два счета объяснят. Все гуру там.
Автор: oshizelly
Дата сообщения: 21.04.2013 12:25
aidomars 12:03 21-04-2013
Цитата:
попробуй измени раскладку по умолчанию.

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


Цитата:
Попробуй принудительно менять текущую раскладку в приложении.

В каком смысле "принудительно"? Через скрипт AHK? Наверное, так можно, но очень хочется понять, что же на самом деле происходит, почему у меня AHK реагирует на текущую раскладку, хотя, по описанию, не должен? И почему именно таким странным образом, по-разному обрабатывая клавиши Alt+Ctrl и AltGr, хотя при текущей английской раскладке этой разницы нет?


Цитата:
Попробуй наконец использовать сканкоды.

Сканкоды гораздо менее наглядны. На стадии освоения проги для меня это важно.


Цитата:
Попробуй начать читать справку.

Пробовал. Но это ещё хуже Возникает куча вопросы, на которые всё равно нет ответов.


Цитата:
А лучше зарегайся на форуме, там тебе в два счета объяснят. Все гуру там.

На английском? У меня с английским не очень. То есть, понять текст могу, хотя и с напрягом, а вот внятно сформулировать вопрос вряд ли получится даже со словарём
Автор: LonerDergunov
Дата сообщения: 21.04.2013 13:09
creature_ws
Спасибо.

aidomars
На форум лучше приходить с багажом знаний. А если чего-то хочется, но пока почти ничего не умеется - ніяково туда суваться

oshizelly

Цитата:
При английской текущей раскладке клавиатуры ... срабатывает и тогда, когда вместо физических Alt+Ctrl нажата эмулирующая их клавиша AltGr ("серый альт").

Какая именно английская раскладка? Какая-то со спецсимволами, вводимыми через AltGr?
У меня английская US (самая стандартная), на ней не работает хоткей.


Цитата:
<^>Ц::

Ошибка в скрипте или описка на форуме, но нужно <^>!Ц::


Цитата:
В чём может быть причина отказа работать с комбинацией AltGr + кириллические буквы?  

Вопрос неправильный.
А ответ - всё в той же справке:

Код: If your keyboard layout has an AltGr key instead of a right-Alt key...
Автор: aidomars
Дата сообщения: 21.04.2013 15:35

Цитата:
На английском? У меня с английским не очень.

На русском, в шапке есть ссылка.

Цитата:
На форум лучше приходить с багажом знаний

Лучше там набираться знаний, не расстреляют же в конце концов за вопросы.
Автор: oshizelly
Дата сообщения: 21.04.2013 15:44
LonerDergunov 13:09 21-04-2013
Цитата:
Какая именно английская раскладка? Какая-то со спецсимволами, вводимыми через AltGr? У меня английская US (самая стандартная), на ней не работает хоткей.
...
If your keyboard layout has an AltGr key instead of a right-Alt key...
ЕСЛИ у вас на клавиатуре вместо правой клавиши Alt находится клавиша AltGr
В русской, английской US раскладках такого не используется, а AltGr=Alt. Из способа записи хоткея даже видно, что он воспринимает AltGr просто как нажатие LCtrl+RAlt  (<^ и >! ), то есть он при всём желании не может работать на той раскладке, в которой AltGr=Alt.

Ага, начинает постепенно что-то в мозгах проясняться. То есть, возможность использовать в хоткее AltGr/RgAlt опять же завязана (вопреки утверждениям в статье Androgen Belkin и уважаемого aidomars) на текущую раскладку клавиатуры активного окна.
И, если только я правильно понял, в принципе не существует способа заюзать из-под текущей русской или стандарной US-Eng раскладки комбинацию с AltGr (как замены сразу двух клавиш Ctrl+Alt), так как в этих раскладках AltGr - это просто-напросто RgAlt. AltGr можно использовать только из-под раскладки, в которой эта клавиша имеется, например, немецкой, украинской и т.д. Так?

И через скан-коды эта задача тоже не решается?



Цитата:
А какая Windows стоит?

Старая, но верная Windows XP SP-2. Не Windows 8, что могло бы дать почву хоть для какой-то гипотезы.


Цитата:
Если есть конкретные вопросы - это ещё хорошо. А у меня и вопросы не формулируются.

Ага. До боли знакомо. Только я вдобавок ко всем своим недостаткам ещё и гуманитарий, поэтому мозги немного в другую сторону заточены.
Автор: LonerDergunov
Дата сообщения: 21.04.2013 19:09

Цитата:
И, если только я правильно понял, в принципе не существует способа заюзать из-под текущей русской или стандарной US-Eng раскладки комбинацию с AltGr (как замены сразу двух клавиш Ctrl+Alt), так как в этих раскладках AltGr - это просто-напросто RgAlt. AltGr можно использовать только из-под раскладки, в которой эта клавиша имеется, например, немецкой, украинской и т.д. Так?

Насколько я понимаю - да. Ибо эмулируется нажатие клавиш, а клавиша AltGr=Alt. Но в то же время можно назначить отдельный хоткей именно для правого Alt (то что это правый - обозначается значком больше, Alt - восклицательный знак, соответственно значок выглядит >! ).
Автор: oshizelly
Дата сообщения: 22.04.2013 10:02
Недавно тут подсказали, как навечно отключить режим CapsLock - при том, клавиша CapsLock в качестве хоткея оставалась рабочей.

А можно ли аналогично заблокировать режим overtype (тот, который переключается клавишей <Insert> в текстовых окнах), чтобы всегда был только режим Insert?

В справке AHK описано, как можно заблокировать клавишу <Insert>, то это далеко не то же самое. Клавишу можно с таким же успехом намертво отключить и через биос, и через общесистемные настройки. Но на самом деле клавиша <Insert> нужна, потому что ее удобно использовать в системных и кастомных сочетаниях клавиш. А отключить нужно именно включаемый этой клавишей режим.

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

Некоторые текстовые процессоры позволяют это сделать в своих настройках, но таких очень мало. При этом режим overtype для многих (включая меня) не только бесполезен (интересно, хоть кто-то его сейчас использует?), но и просто вреден, так как может при очевидных обстоятельствах привести к потере важного текста.
Автор: LonerDergunov
Дата сообщения: 22.04.2013 14:11

Цитата:
А отключить нужно именно включаемый этой клавишей режим.

Насколько я понимаю, нужно сделать так, чтобы при нажатии клавиши Insert - ничего не происходило в тех случаях, когда курсор находится в поле ввода текста (или даже можно более обобщённо - когда курсор изменяет форму со стрелочки на вертикальную чёрточку). То есть решение сводится к тому, чтобы отслеживать вид курсора. Только как это сделать?
Автор: oshizelly
Дата сообщения: 23.04.2013 11:12
LonerDergunov 14:11 22-04-2013
Цитата:
Насколько я понимаю, нужно сделать так, чтобы при нажатии клавиши Insert - ничего не происходило в тех случаях, когда курсор находится в поле ввода текста

Ну, вообще-то изначально моя мысль была немного другая: запретить ввод с клавиатуры в режиме overtype, безотносительно к тому, как именно этот режим вызван: нажатием клавиши <Insert> или ещё как-то. По аналогии, повторю ещё раз, с блокированием включения режимов CapsLock и NumLock.
Но, наверное, это нереально?


Цитата:
(или даже можно более обобщённо - когда курсор изменяет форму со стрелочки на вертикальную чёрточку). То есть решение сводится к тому, чтобы отслеживать вид курсора.

Вроде бы не совсем логично привязываться именно к форме курсора. Вряд ли AHK в состоянии это отследить. А вот отследить свойства поля и/или приложения, в котором в данный момент находится фокус ввода, это, наверное, возможно. Вот только конкретного решения я не нашёл
Автор: creature_ws
Дата сообщения: 24.04.2013 16:36
В дискуссии участвовать не буду, лишь дезинформацию обличать возьмусь
Тип текущего курсора в переменной A_Cursor
Автор: LonerDergunov
Дата сообщения: 24.04.2013 20:06
creature_ws

Цитата:
Тип текущего курсора в переменной A_Cursor

Тогда всё просто:

Код: #If (A_Cursor = "IBeam")
{
Insert::return
NumpadIns::return
}
Автор: creature_ws
Дата сообщения: 28.04.2013 00:21
А что, приложение обсуждаемое теперь называется Autohotkey AHK?
В подфоруме «Программы» нет ни одной темы фильтрующейся по тегу «AHK», потому «Для удобства использования фильтра тем» не достаточное основание для изменения заголовка.

Добавьте прочих «сеошных штучек» например:
«Autohotkey AHK скачать автохоткей форум АХК скрипты»
Автор: LonerDergunov
Дата сообщения: 28.04.2013 01:33
creature_ws
В поле фильтра легче было вбить три знака вместо десяти. Не нравится - убрал. Заодно подправил шапку информативным текстом из вики, вместо ми-ми-ми про "очень интересную программу".

Если надо - [more=старая версия]AutoHotkey

» Программа для назначения "горячих ключей", но ...


AutoHotkey


Официальный сайт | Англоязычный форум | Русскоязычный форум | Утилиты + исходники (En)

Последняя версия: 1.1.08.01 от 14 марта 2013


Русскоязычный ресурс по AutoHotkey: документация (можно скачать одним файлом), статьи, примеры.

Очень интересная программа. По назначению схожа с Mkey, Hot-keyboard, но её возможности существенно шире. Имеются примеры настройки мультимедийных клавишей на клавиатурах (например, на a4tech kbs-26), которые ни одна другая программа не воспринимала. Реализация программы схожа с планировщиком nncron.

САМОЕ ГЛАВНОЕ - программа бесплатна и с исходниками.
[/more] шапки.

Так что на счёт отслеживания активности текстового поля (любого в целом) - возможно ли такое? Не нашёл по ру-en-форумам и документации.
Автор: creature_ws
Дата сообщения: 28.04.2013 02:04
Кстати: ссылка на changelog и актуальную документацию.

Цитата:
Так что на счёт отслеживания активности текстового поля (любого в целом)

У меня нет подходящего ответа
Автор: LonerDergunov
Дата сообщения: 28.04.2013 04:54
Можно ли дождаться выполнения SendInput и после этого производить дальнейшие манипуляции?
Надо вставить текст, а потом нажать кнопочку:

Код: SendInput {Raw}Длинная последовательность символов.....
ControlClick, Button1, ahk_class Window
Автор: LonerDergunov
Дата сообщения: 28.04.2013 20:54
Каким образом отжать все клавиши?
Конкретно - пользовать нажимает хоткей, по которому срабатывают команды отправки нажатий ControlSend.
Если нажать и отпустить хоткей - всё нормально, а вот если нажать и зажать - ControlSend не всегда отрабатывает. BlockInput не помогает. Частное решение - отжать предварительно клавиши хоткея, например, ControlSend, Control, {Alt down}{Shift up}{sc01E up}, ahk_class ClassNN . Но если заранее хоткей неизвестен - хотелось бы для гарантии отжать все клавиши.
Автор: Risovod
Дата сообщения: 28.04.2013 22:44
Здравствуйте. Помогите сделать скрипт, чтобы после появления текста в окне нажималась кнопка.
[more=Вот скрин] [/more]
Пробовал различными способами, но не получается:
WinWait, Static2 Готов к подключению (безопасное соединение)
IfWinExist, TeamViewer, WinText="Готов к подключению (безопасное соединение)"
P.S. Скрипт для нажатия кнопки я знаю, нужно создать условие по тексту.
Автор: creature_ws
Дата сообщения: 29.04.2013 01:54

Цитата:
Можно ли дождаться выполнения SendInput и после этого производить дальнейшие манипуляции?

Так и происходит.

Цитата:
SendInput не успевает ввести весь текст

SendInput успевает «генерировать нажатия», а приложение не успевает их обработать прежде чем получает следующую команду.

Цитата:
Send работает очень медленно

SetkeyDelay управляет длительностью пауз в режиме SendEvent.


Цитата:
а вот если нажать и зажать - ControlSend не всегда отрабатывает.

ControlSend отрабатывает всегда, это приложение не успевает обработать «сыплющиеся в него сообщения».
При удержании клавиши зажатой начинает генерироваться автоповтор нажатий. Каждое нажатие перехватывается скриптом и… В общем, используйте в подпрограмме горячей клавиши KeyWait.

Цитата:
хотелось бы для гарантии отжать все клавиши.

Так и происходит «не отжимаются» клавиши модификаторов при использовании {Blind}, клавиша запускающая подпрограмму и так «не нажимается».

Risovod, если данный текст отображается в разделе "Visible window text", то используйте

Код: WinWait, TeamViewer, Готов к подключению
Автор: LonerDergunov
Дата сообщения: 29.04.2013 03:17
creature_ws

Цитата:
SendInput успевает «генерировать нажатия», а приложение не успевает их обработать прежде чем получает следующую команду...

Понятно, важное отличие от простого Send.
Значит Send ждёт генерирования всех нажатий, и только после этого передаёт управление следующей команде, а SendInput работает быстрее, но на самом деле менее надёжно (хотя в справке и сказано обратное) и не дожидается окончания ввода всех нажатий.


Цитата:
В общем, используйте в подпрограмме горячей клавиши KeyWait.

Спасибо, работает в частном случае.
А вот если заранее не известно - какие клавиши нажаты?
Есть ли в AHK какое-нибудь средство (команда, функция) для принудительного отжатия ВСЕХ клавиш или хотя бы ожидания их отжатия?
Автор: creature_ws
Дата сообщения: 29.04.2013 03:43

Цитата:
не дожидается окончания ввода всех нажатий

Неверный вывод.
«Окончание ввода» замечаете вы, «когда буковки в поле ввода отрисовались тогда ввод и окончен».

SendEvent и SendInput генерируют нажатия. После того, как нажатия «отправлены», работа этих команд окончена. То, что в каком-то приложении при использовании SendInput «буковки не успевают отрисовываться» — проблема приложения, не команды. SendInput

Цитата:
А вот если заранее не известно - какие клавиши нажаты?

Это не имеет значения, если зажаты клавиши-модификаторы, ControlSend и Send «отожмут» их перед отправкой нажатий.

Цитата:
Есть ли в AHK какое-нибудь средство

Средство называется «справка» судя по вашим предположениям, вам нужно систематизировать имеющиеся знания, иначе от неуместных предположений не удастся избавиться и в дальнейшем они продолжат подталкивать вас к поиску решений вымышленных проблем.
Автор: LonerDergunov
Дата сообщения: 29.04.2013 04:17
creature_ws

Цитата:
Это не имеет значения, если зажаты клавиши-модификаторы, ControlSend и Send «отожмут» их перед отправкой нажатий.

Автоматически - не отжимают. В этом и вопрос.
Конкретно - имеется программа BulkFileChanger.
Программа открыта и в неё перетащены файлы.

Нужно нажать хоткей (для примера у меня Shift+Alt+A, но это могут быть любые заранее неизвестные клавиши), вызывается скрипт, который выделяет все файлы (эмуляция нажатия Ctrl+A) и открывает диалоговое окно изменения атрибутов этих файлов (эмуляция нажатия F6).
Скрипт:

Код: WinWait, ahk_class BulkFileChanger
ControlFocus, SysListView321, ahk_class BulkFileChanger
;ControlSend, SysListView321, {Alt down}{Shift up}{Ctrl up}{sc01E up}, ahk_class BulkFileChanger
; или
;KeyWait, sc01E
;KeyWait, Shift
;KeyWait, Alt
ControlSend, SysListView321, {Ctrl down}{sc01E}{Ctrl up}, ahk_class BulkFileChanger
ControlSend, SysListView321, {F6}, ahk_class BulkFileChanger
Автор: creature_ws
Дата сообщения: 29.04.2013 04:32

Код:
$^+vk41::
WinWait, ahk_class BulkFileChanger ; Дождались появления окна с указанным классом.
SetKeyDelay, 20, 20
ControlSend SysListView321, ^{vk41}{F6} ; Отправили в появившееся окно нажатия
KeyWait vk41 ; дождались физического отпускания клавиши
return
Автор: aidomars
Дата сообщения: 29.04.2013 06:42

Код: BulkFileChanger это небольшая утилита, которая позволяет создать список файлов из нескольких папок, а затем делать какие-то действия на них - изменять их создания / редактирования / время доступа, изменять их атрибуты файла (только для чтения, скрытый, системный), запуск исполняемого файла с этих файлов в качестве параметра, а также копировать / вырезать вставить в Explorer.
Автор: LonerDergunov
Дата сообщения: 29.04.2013 16:22
creature_ws

Цитата:
Проще самому написать, в Autohotkey все эти фунции есть.

А где слово "Сарказм" ? . Написать свой GUI-интерфейс и повторить все или хотя бы некоторые возможности упомянутой программы - это мне пока что совсем непросто.

creature_ws
Спасибо. Теперь чётко отрабатывает.
Всё дело в параметре PressDuration команды SetKeyDelay. И никакая справка не поможет осмыслить этот нюанс без сторонней подсказки.
Автор: oshizelly
Дата сообщения: 29.04.2013 16:37
LonerDergunov 20:06 24-04-2013
Цитата:
Тогда всё просто:

Код: #If (A_Cursor = "IBeam")
{
Insert::return
NumpadIns::return
}

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

А вот комбинация Shift+Insert (дефолтный хоткей в Windows для вставки данных из буфера обмена) вполне работает.
Автор: aidomars
Дата сообщения: 29.04.2013 16:49

Цитата:
А где слово "Сарказм" ?

Какой сарказм? Не такая уж и сложная программа, зато опыт приобретешь.

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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