1

Тема: Имитация нажатия клавиши при отпускании

Нужен скрипт который бы при отпускании клавиш WASD(любой из них, в любой последовательности) через 10 милисекунд после отпускания однократно нажимал бы шифт, также на гдето 10 милисекунд. И чтоб это раболтало даже если например нажата W, но отпущена D. Заранее Спасибо!

2 (изменено: Indomito, 2017-02-04 05:34:02)

Re: Имитация нажатия клавиши при отпускании

Remix55556, Приветствую.
Я написал реакцию на отпускание, а задержки проставил такие как в ТЗ.

Для справки.
1. Реакция на отжимании W — Hotkey ~vk57 Up, KeyDummy, On.
2. Реакция на нажатие W + (стрелка вверх) — Hotkey ~vk57 & Up, KeyDummy, On.
3. Желательно использовать разные обработчики, а не один — KeyDummy.
4. Дерективы UseHook/Critical/Thread, NoTimers — включать попарно.
5. Обработчик выхода OnExit, lEnd_AHK — не задействован.

;Скрипт не выгружается до явного определения
#Persistent
  vExitCode :=  0
  OnExit, lEnd_AHK  ; Ensure the cursor is made visible when the script exits.
;vk57/vk41/vk53/vk44 = W/A/S/D   
;Срабатывает при отжимании клавиши W, но пропуская на вывод клавишу W
  Hotkey ~vk57 Up, KeyDummy, On
;Срабатывает при отжимании клавиши A, но пропуская на вывод клавишу A
  Hotkey ~vk41 Up, KeyDummy, On
;Срабатывает при отжимании клавиши S, но пропуская на вывод клавишу S
  Hotkey ~vk53 Up, KeyDummy, On
;Срабатывает при отжимании клавиши D, но пропуская на вывод клавишу D
  Hotkey ~vk44 Up, KeyDummy, On
Return

;#UseHook, On     ;Заставляет скрипт использовать хук, разрешает самовызов клавиши и т.д.
;Critical         ;Не позволяет другим потокам прерывать текущий поток, требуется редко
;Thread, NoTimers ;Снять комментарии, если есть в скрипте таймеры
KeyDummy:
  tmp_ThisHotkey := A_ThisHotkey ;Запоминание отжатой клавиши, думаю что пригодится.
  Sleep 10
  Send {Shift Down}
  Sleep 10  ;Требуется написать Sleep 25, так более верно
  Send {Shift Up}
Return
;#UseHook, Off           ;Заставляет скрипт использовать хук, разрешает самовызов клавиши и т.д.
;Critical , Off          ;Не позволяет другим потокам прерывать текущий поток, требуется редко
;Thread, NoTimers, false ;Снять комментарии, если есть в скрипте таймеры

lEnd_AHK:
  ExitApp

P.S. Скрипт получился большой из-за множества комментариев.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AHK 1.1.30.01

3 (изменено: Remix55556, 2017-02-04 15:42:57)

Re: Имитация нажатия клавиши при отпускании

Indomito
Спасибо большое за скрипт, но только я чайник в АНК. Поэтому там где комментарии про разные обработчики, я не понимаю, что к чему. Мне главное чтоб он работал... И что значит не выгружается, до определения? Его надо как-то активировать перед запуском или нет?

4

Re: Имитация нажатия клавиши при отпускании

Remix55556
Не за что - это было не сложно.

И так отвечаю по пунктам, т.е. в порядке поступления.

1. И что значит не выгружается, до определения?

;Скрипт не выгружается до явного определения
#Persistent
  vExitCode :=  0
  OnExit, lEnd_AHK  ; Ensure the cursor is made visible when the script exits.
;------------------------------------
;Пропуск кода
;------------------------------------
lEnd_AHK:
  ExitApp

Надо задать событие или клавишу для перехода на метку lEnd_AHK для завершения скрипта.


2. Его надо как-то активировать перед запуском или нет?
Нет, он сам себя активирует.
Часть отвечающая за активацию лежит между #Persistent и первым Return

P.S. Спрашивай, что не понятно,  а я постараюсь ответить.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AHK 1.1.30.01

5

Re: Имитация нажатия клавиши при отпускании

Мне нужен скрипт  когда я нажимаю на shift и отпускаю и сразу чтоб нажался один раз пробел с таймером как ето зделать ?

6 (изменено: LAGARIUM, 2019-01-31 18:26:28)

Re: Имитация нажатия клавиши при отпускании

ошибся не тому написал