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

» AutoHotkey

Автор: aidomars
Дата сообщения: 08.05.2013 16:06
Возможно дело в persistent, попробуй убери его
Автор: creature_ws
Дата сообщения: 08.05.2013 16:16
Директивы #if влияют лишь на нижележащие горячие клавиши.

Код: #If (A_Cursor = "IBeam")
Автор: oshizelly
Дата сообщения: 08.05.2013 17:07
aidomars 16:06 08-05-2013
Цитата:
Возможно дело в persistent, попробуй убери его

Нет, это я и сам уже пробовал. Впрочем, эта директива #persistent здесь, скорее всего, вообще лишняя. Я её убрал, но это ни на что не повлияло: при ручном запуске файла группы учитываются, при запуске через #include - игнорируются.


creature_ws 16:16 08-05-2013
Цитата:
Директивы #if влияют лишь на нижележащие горячие клавиши.

Код: #If (A_Cursor = "IBeam")

Здесь не к месту.
Автор: creature_ws
Дата сообщения: 08.05.2013 17:39

Цитата:
А чем эти правила нарушает мой скрипт??


Цитата:
Я её просто для наглядности привёл

Т.е. как выглядит скрипт неизвестно, но вопрос «чем же он неправилен» вы задаёте. Теперь суть ваших вопросов мне понятна, постараюсь не вмешиваться в ваше развлечение.
Автор: aidomars
Дата сообщения: 08.05.2013 22:02
oshizelly
Вставь в главный скрипт вместо #Include код того скрипта и посмотри где останов происходит и доходит ли выполнение вообще до GroupAdd.
Автор: oshizelly
Дата сообщения: 08.05.2013 23:03
aidomars 22:02 08-05-2013
Цитата:
посмотри где останов происходит и доходит ли выполнение вообще до GroupAdd.

Не совсем понял, почему сомнение. Ведь строки собственно кода, блокирующего клавишу Insert, расположены НИЖЕ строк, задающих исключения. Следовательно, раз клавиша блокируется, то обработка скрипта доходит до последней строки скрипта.


Цитата:
Вставь в главный скрипт вместо #Include код того скрипта

Уже вставлял. Результат такой: при определении исключаемых классов прямо в строке с директивой #IfWinNotActive исключения учитываются:

Код: #IfWinNotActive, ahk_class TTOTAL_CMD
{
Insert::return
NumpadIns::return
}
Автор: aidomars
Дата сообщения: 09.05.2013 12:16

Цитата:
Но если этот же самый скрипт с определением через группы вставить в отдельный файл, то код работает, как ожидалось

Противоречит разуму, странно.
Автор: PREVED
Дата сообщения: 09.05.2013 20:41
Есть ли возможность с помощью autohotkey с определенным интервалом посылать определенному окну(класс окна, заголовок) определенную комбинацию клавиш?
Автор: aidomars
Дата сообщения: 10.05.2013 14:14
Есть
Автор: creature_ws
Дата сообщения: 11.05.2013 09:41
В актуальной версии Autohotkey добавлена поддержка Windows Vista+ командам SoundSet, SoundGet etc.

Цитата:
Support for Windows Vista and later was added in v1.1.10.
SoundSet
Автор: LonerDergunov
Дата сообщения: 09.06.2013 03:30
А есть ли способ узнать - какой контрол активный? (класс активного контрола)
Например, есть две кнопки - ОК и Отмена, одна активна (при нажатии на Enter она нажмётся), вторая нет.
Или определить активную панель файлового менеджера.
Или хотя бы как проверить активность из списка известных классов ? (например, известно, что в 32-х битном Тотал коммандере левая панель имеет ClassNN: TMyListBox2, а правая - ClassNN:TMyListBox1. Цель - узнать активную.

И второй вопрос (не смог найти в справке).
Есть ли в AutoHotkey аналог Select...Case или единственный вариант - if... else if... else if... ?
Автор: aidomars
Дата сообщения: 09.06.2013 09:27
LonerDergunov
1. WinGetClass, class, A
MsgBox, Класс активного окна "%class%"

2. Вроде нет
Автор: LonerDergunov
Дата сообщения: 09.06.2013 12:06
aidomars
Спасибо, но немного не то. Класс не окна, а активного контрола.
Ночь темна и полна ужасов , столько искал и нового узнал..., а утром сразу нашёл в справке - команда ControlGetFocus
Автор: aidomars
Дата сообщения: 09.06.2013 14:54
А ну да, сбил с толку Тотал коммандер
Автор: oshizelly
Дата сообщения: 10.06.2013 10:27
Решил попробовать в качестве альтернативного решения запускать скрипты из нескольких AHK-файлов через батник .BAT. Однако если скрипт уже запущен, то, как известно, AHK выдаёт запрос на подтверждение перезапуска. Как в параметрах командной строки указать, чтобы запрос не выдавался или чтобы автоматически отвечалось "Yes"? Искал ответы на офф-форуме и в Гугле, но нашёл только массу советов по передаче скрипту параметров командной строки запускаемой проги, а это совсем не то...

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

Спасибо!
Автор: LonerDergunov
Дата сообщения: 10.06.2013 12:46
oshizelly

Цитата:
запускать скрипты из нескольких AHK-файлов через батник .BAT. Однако если скрипт уже запущен, то, как известно, AHK выдаёт запрос на подтверждение перезапуска

Если одновременно несколько разных AHK запускать - то ничего не должно выдаваться. А вот если один и тот же скрипт несколько раз запускать - то для регулировки поведения есть директива #SingleInstance.


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

Это про консоль речь? Вызывать её с параметром /k (ошибся) /c
cmd.exe /k (или %comspec% /k ) cmd.exe /c (или %comspec% /c )
Автор: oshizelly
Дата сообщения: 10.06.2013 15:22
LonerDergunov 12:46 10-06-2013
Цитата:
Это про консоль речь? Вызывать её с параметром /k
cmd.exe /k (или %comspec% /k )

Прошу прошения, не въехал. Если сейчас строка в батнике выгляди, допустим, так:

Код: start "C:\Program Files\AutoHotkey\AutoHotkey.exe" "D:\My Documents\AutoHotkey.ahk"
Автор: LonerDergunov
Дата сообщения: 10.06.2013 16:25
oshizelly
%comspec% /k start ......
Хотя в данном случае start вообще не нужен, достаточно просто:
"C:\Program Files\AutoHotkey\AutoHotkey.exe" "D:\My Documents\AutoHotkey.ahk"
Автор: oshizelly
Дата сообщения: 10.06.2013 23:42
LonerDergunov 16:25 10-06-2013
Цитата:
%comspec% /k start ......
Хотя в данном случае start вообще не нужен, достаточно просто:
"C:\Program Files\AutoHotkey\AutoHotkey.exe" "D:\My Documents\AutoHotkey.ahk"

Чего-то я не так делаю. Или, может, объяснил ситуацию не очень внятно.
Одна строка была приведена в моём предыдущем посте как образец, а вообще-то в этом батнике их несколько.
Однако при использовании префикса %comspec% /k запускается только скрипт из первой строки, а последующие строки игнорируются.
Пробовал писать его и в начале только первой строки, и в начале каждой. Результат всё равно один и тот же: запускается только скрипт из первой строки.

А если убрать команду start, то вообще выдаётся ошибка: нет, мол, такой внутренней команды. И ведь не поспоришь, действительно нет такой команды

А окно консоли так и остаётся висеть.

Автор: LonerDergunov
Дата сообщения: 11.06.2013 00:29
удалено. предыдущее сообщение поправил.
ответил в личку.
Автор: Alex22T
Дата сообщения: 12.06.2013 17:16
Имеются три скрипта:
Код: #!F12::
Send {Home}
Send {Shift Down}
Send {End}
Send {Shift Up}
Send ^c
Автор: creature_ws
Дата сообщения: 12.06.2013 20:03

Код: #!F12::Send {Home}+{End}^{vk43}
#!F11::Send +{End}^{vk43}
#!F10::Send +{Home}^{vk43}
Автор: Alex22T
Дата сообщения: 12.06.2013 23:45
creature_ws
Работает! Спасибо!

Я сначала делал так:
Код: #!F12::
Send {Home}
Send +{End}
Send ^с
Автор: aidomars
Дата сообщения: 13.06.2013 06:16

Цитата:
Может потому, что код не в одну строку

Это без разницы.

Цитата:
Shift нажимался одновременно с End, выделение строки не происходило

Чтобы удерживать нажатой или отпустить клавишу, поместите в фигурные скобки её имя и слово Down (вниз) или Up (вверх). Например:

Send {b down}{b up}
Send {TAB down}{TAB up}
Send {Up down} ; Нажать клавишу "Стрелка вверх".
Sleep 1000 ; Держать её нажатой 1 секунду.
Send {Up up} ; Отпустить.


Автор: Alex22T
Дата сообщения: 14.06.2013 00:36
aidomars
Спасибо за подробное объяснение.

Но если
Цитата:
Это без разницы

почему так работает
Код: #!F12::Send {Home}+{End}^{vk43}
#!F11::Send +{End}^{vk43}
#!F10::Send +{Home}^{vk43}
Автор: aidomars
Дата сообщения: 14.06.2013 06:34

Цитата:
а так нет

Поставьте Return в месте окончания действия горячей клавиши.
Если горячая кл. выполняется в строку, то в Return нет необходимости.
Автор: Alex22T
Дата сообщения: 14.06.2013 22:56
aidomars
Вот он, последний штрих! Теперь все работает.
Спасибо!
Автор: LonerDergunov
Дата сообщения: 15.06.2013 20:48
Подскажите, каким образом можно заблокировать кнопку мыши над определёнными окнами/контролам
Вот например такой случай - при открытом окне Тотала заблокировать клик левой кнопки мыши по определённым контролам. Вот такая конструкция не работает:

Код: #NoEnv
#NoTrayIcon
#Persistent
#SingleInstance force

#IfWinActive, ahk_class TTOTAL_CMD
LButton::
{
ControlGetFocus, aControl, ahk_class TTOTAL_CMD
if ((aControl = "THeaderClick1") || (aControl = "THeaderClick2"))
Return
else
Send, {LButton}
}
Return
Автор: OnMyDSeeAtAll
Дата сообщения: 16.06.2013 11:20

Код: #If, CheckUp()
LButton::Return

CheckUp()
{
MouseGetPos,,,
winID, nameControl
WinGetClass, winClass, % "ahk_id"winID
Return, winClass="TTOTAL_CMD" And nameControl~="THeaderClick(1|2)" ? True:False
}
Автор: LonerDergunov
Дата сообщения: 17.06.2013 18:27
OnMyDSeeAtAll
Спасибо. Ваши лаконичные и в то же время ёмкие решения продолжают меня поражать.

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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