1 (изменено: znick, 2012-12-23 04:14:59)

Тема: AHK: Временная блокировка нажатия кнопок клавиатуры

Всем доброго времени суток!

     В общем такая ситуация: необходимо пропускать нажатие клавиши (к примеру F1) один раз в несколько секунд (к примеру раз в 2 сек) как при раздельном нажатии, так и при зажатой клавиши... Т.е. скрипт должен пропустить одно нажатие, после чего блокировать сигналы  на 2000мс, затем снимать блокировку.
     Пытался для этого приспособить скрипт http://forum.script-coding.com/viewtopi … 256#p67256, заменив LButton на F1. В итоге результата не достиг...
     Подскажите плж где закралась ошибка?

2

Re: AHK: Временная блокировка нажатия кнопок клавиатуры

Можно твой код увидеть?
Надо пропускать, пропускать просто, или есть условия?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

3

Re: AHK: Временная блокировка нажатия кнопок клавиатуры

Единственное условие - не создавать интервалов менее 2000 мс при зажатой кнопке, раздельном и смешанном нажатии кнопки. Вот схема:
http://s49.radikal.ru/i124/1212/90/4e63e964b735.jpg
Т.е. зажали Ф1 - идут нажатия с интервалами 2000мс; жмем Ф1 и отпускаем - идут интервалы 2000+n мс (как попадем), при переходе от первого типа ко второму (либо наоборот) интервалы 2000мс. Вроде блокировки кнопки на 2с после нажатия...

4 (изменено: creature.ws, 2012-12-23 08:25:26)

Re: AHK: Временная блокировка нажатия кнопок клавиатуры

#if !Timeout(2000)
    F1::return
#if

Timeout(timeout) {
    static priorTick := 0
    return A_TickCount - priorTick > timeout && priorTick := A_TickCount
}

Timeout() уместно заменить на ThisHotkeyTimeout(), если обрабатывать требуется более одной клавиши.

ThisHotkeyTimeout(timeout) {
    static KeyList := {}, priorTick
    priorTick := KeyList[A_ThisHotkey], priorTick || priorTick := 0
    return A_TickCount - priorTick > timeout && KeyList[A_ThisHotkey] := A_TickCount
}

5

Re: AHK: Временная блокировка нажатия кнопок клавиатуры

Спасибо, все замечательно работает!
    Точнее первый скрипт (для одной кнопки); вторую часть использовал для той же цели, но уже с несколькими кнопками - не вышло. Заменил на более компактный:

*vk31::
Send, {Blind}{vk31}
Sleep, 1000
return
*vk32::
Send, {Blind}{vk32}
Sleep, 2000
return
*vk33::
Send, {Blind}{vk33}
Sleep, 3000
return

Где vk31, vk32, vk33 - виртуальные коды кнопок 1, 2 и 3 (вместо Ф1-Ф3). Время блока везде разный поставил для наглядности.
     Работает. Но кнопки имеют свой собственный таймер на блокировку (т.е. при нажатии vk31 она блокируется, а на vk32/vk33 для запуска блока необходимо их нажатие).
Хочу сделать при нажатии "1" блок всех трех кнопок на 1000мс, при "2" на 2000мс и "3" на 3000мс соответственно.
    Подскажите пожалуйста как это реализовать?