1 (изменено: Zirrex, 2013-01-10 09:24:55)

Тема: АНК: Проверка нажатия клавиши и выполнение скрипта.

Здравствуйте.
Задача:
1. Проверить нажата ли клавиша (горит светодиод) Scroll Lock.
2. Если не нажата клавиша Scroll Lock, то
2.1. отработка сочетаний клавиш «Win+a« или «Win+d»
2.2. после отработки 2.1. скрипт переходит к пункту 3.3. и завершает работу.
3. Если нажата клавиша Scroll Lock, то
3.1. отжимается клавиша Scroll Lock (не горит светодиод)
3.2. отработка сочетаний клавиш «Win+a« или «Win+d»
3.3. нажимается клавиша Scroll Lock.
4. Скрипт завершает работу при этом нужно вернуть обратно Scroll Lock (должен гореть светодиод).

В чём смысл?
В программе для написания музыки есть функция Scroll Lock которая не даёт окну с дорожками и сэмплами двигаться во время проигрывания.
Другая функция – это перемещение по маркерам.

Получается, что если Scroll Lock нажат, то перемещение по маркерам происходит, но окно не передвигается – т.е. мы не двигаемся вместе с полосой проигрывания.
Если написать такой скрипт, то он будет отключать временно (пока работает функция передвижения по маркерам) Scroll Lock, а когда передвижение закончится (отожмутся гор.клавиши «Win+a« или «Win+d», то Scroll Lock опять включится.

Я написал скрипт, но без проверки.

#a::
{Sleep 20
Send {vk91}
Send +{vkDB}
}
Send {vk91}
return

#d::
{Sleep 20
Send {vk91}
Send, +{vkDD}
Send {vk91}
}
return

Пожалуйста, помогите сделать другую модификацию этого скрипта.

2

Re: АНК: Проверка нажатия клавиши и выполнение скрипта.

Проверить статус ScrollLock можно так:

MsgBox, % GetKeyState("ScrollLock", "T")

Установить статус:

SetScrollLockState, on   ; или off

Фигурные скобки в подпрограмме горячей клавиши не нужны.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Zirrex, 2013-01-10 09:56:17)

Re: АНК: Проверка нажатия клавиши и выполнение скрипта.

Спасибо.
С проверкой нажатия не получилось. Т.е. выскакивает окно... но оно не нужно.
А вот с частью "SetScrollLockState, on" - всё получилось.
Т.е. не нужно даже делать проверку нажатия ScrollLock.
После выполнения гор.клавиш скрипт просто нажимает в самом конце ScrollLock даже если он до этого был нажат.

Про фигурные скобки не понял. Убрал, но скрипт перестал корректно работать.
Т.е. я сделал так:

#a::
{Sleep 20
Send vk91
Send +vkDB
}
Send vk91
SetScrollLockState, on   ;
return

А вот так работает:

#a::
{Sleep 20
Send {vk91}
Send +{vkDB}
}
Send {vk91}
SetScrollLockState, on   ;
return

#d::
{Sleep 20
Send {vk91}
Send, +{vkDD}
Send {vk91}
}
SetScrollLockState, on   ;
return