2015-03-15 3 views
0

Я пытаюсь написать сценарий, который задержит все физические нажатия клавиш, которые я отправляю. Это включает в себя клавиши вниз, клавиши и продолжительность, в течение которых удерживается ключ.Задержка Autohotkey все вход

До сих пор я получил

a:: 
    if(not GetKeyState("a")) 
    sleep 1000 
    sendinput {a down} 
return 

a up:: 
    sleep 1000 
    sendinput {a up} 

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

Я думаю, было бы также уместно спросить, есть ли способ просто задержать весь мой вход, будь то с AHK или другими приложениями, вместо того, чтобы делать такой скрипт для каждого ключа.

+0

Возможный дубликат [Использование AutoHotkey, чтобы добавить искусственную задержку нажатия клавиши] (https://stackoverflow.com/questions/29224910/using-autohotkey-to-add-an-artificial-delay-to- a-keypress) –

ответ

0

Добавить префикс $ к горячим клавишам.

Это обычно необходимо, только если сценарий использует команду «Отправить» для отправки ключей, которые содержат саму горячую клавишу, что в противном случае может вызвать ее запуск. Префикс $ заставляет клавиатурный крюк использоваться для реализации этой горячей клавиши, что в качестве побочного эффекта предотвращает запуск команды Send. Префикс $ эквивалентен заданию #UseHook где-то выше определения этой горячей клавиши.

[v1.1.06 +]: #InputLevel и SendLevel обеспечивают дополнительный контроль над тем, какие горячие клавиши и горячие строки запускаются командой Send.

Источник: http://ahkscript.org/docs/Hotkeys.htm#Symbols

0

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

Ниже плохой обходной путь. Я бы тоже был заинтересован в лучшем решении.

aUp = false 
delay_when_pressing_down = 200 
delay_between_sends = 10 
return 

$a:: 
    aUp = false 
    delay_start := a_tickCount 
    sleep 1000 
    send a 
    sleep, %delay_when_pressing_down% 
    if aUp = true 
    { 
     time_a_was_pressed_down := time_of_release - delay_start 
     time_a_was_pressed_down -= %delay_when_pressing_down% 
     start := a_tickCount 
     loop 
     { 
      now := a_tickCount 
      diff := now - start 
      if diff > %time_a_was_pressed_down% 
       break 
      send a 
      sleep, %delay_between_sends% 
     } 
     return 
    } 
    loop 
    { 
     send a 
     sleep, %delay_between_sends% 
     if aUp = true 
     { 
      start := a_tickCount 
      loop 
      { 
       send a 
       sleep, %delay_between_sends% 
       now := a_tickCount 
       diff := now - start 
       if diff > 1000 
        break 
      } 
      break 
     } 
    } 
return 

$a up:: 
    time_of_release := a_tickCount 
    aUp = true 
return 

^e::reload 
+0

Работает намного лучше, чем моя попытка, только проблема заключается в том, что ключ не регистрируется при запуске таймера задержки. Так что, к сожалению, это в настоящее время не задерживает «все» нажатия клавиш, как есть. – user2444090

+0

Я начинаю чувствовать себя очень плохо из-за количества любимого в моем посте. В любом случае, я не уверен, понял ли я вашу озабоченность, но я добавил несколько строк. Можете работать так, как вы ожидаете. – Blauhirn

Смежные вопросы