1 (изменено: senyaonis, 2016-05-30 11:57:53)

Тема: AHK: Запись и вывод нажатий



FileDelete,%A_WorkingDir%\test.ahk
begin:
n := 0
if getkeystate("vk57","P")
{
	Loop
	{
	Sleep 30
	n := n + 1
	if !getkeystate("vk57","P")
	{
		text = Send,{Space}`n Loop %n% `n {`n Sleep 30`nSend,{vk57 Down}`n}`nSend,{vk57 Up}
		FileAppend,%text%,%A_WorkingDir%\test.ahk
		Run,%A_WorkingDir%\test.ahk
		ExitApp
	}
}
}
goto,begin

По идее должно записывать удержание клавиши W, но почему-то работает не так.
Например, я записал:

wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

А на вывод получил:

wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

Хотя , то что я ввел, то и должен был получить. В чем проблема?

2

Re: AHK: Запись и вывод нажатий

Удержание клавиши, это серия команд {vk57 Down}, они отправляются с определенной задержкой, не могу сказать от чего она зависит: на разных компьютерах у меня по разному.
У вас скрипт, определяет примерное время удержание клавиши, а отправляет количество нажатий.
Чтобы работало как нужно, либо генерируемый скрипт привязать к времени нажатия, либо считать нажатия в основном.
К примеру:

FileDelete,%A_WorkingDir%\test.ahk
~$w::n ++
~$w Up::
text = Loop %n% `n{`nSleep 40`nSend,{vk57 Down}`n}`nSend,{vk57 Up}
FileAppend,%text%,%A_WorkingDir%\test.ahk
Run,%A_WorkingDir%\test.ahk
n := ""
ExitApp

И возможно понадобиться подправить задержки в SetKeyDelay.

3

Re: AHK: Запись и вывод нажатий

Nikva, спасибо, работает как надо.

4

Re: AHK: Запись и вывод нажатий

И еще один вопрос.


FileDelete,%A_WorkingDir%\test.ahk
~$vk57::n ++
~$vk57 Up::
MsgBox, W %n%
ExitApp
~$vk57 && ~$vk41::n ++
~$vk57 && ~$vk41 Up::
MsgBox, W and A %n%
ExitApp

Как сделать, чтобы первый хоткей не работал, когда клавиша A нажата?

5

Re: AHK: Запись и вывод нажатий

Добавить проверку GetKeyState().

6 (изменено: senyaonis, 2016-05-31 21:33:52)

Re: AHK: Запись и вывод нажатий

Drugoy, не получается

7 (изменено: senyaonis, 2016-05-31 21:34:40)

Re: AHK: Запись и вывод нажатий

Можно это реализовать только с if getkeystate...? Без хоткеев?

~$w::n ++

8

Re: AHK: Запись и вывод нажатий

Здесь считает время, которое кнопка удерживаеться, возможно понадобиться подбирать значения для SetKeyDelay.
Но у этого варианта есть недостаток: если до начала отсчета времени уже идет ввод, то он не правильно отработает.

FileDelete,%A_WorkingDir%\test.ahk
begin:
  n := 0
  If GetKeyState("vk57","P")
    {
      StartTime := A_TickCount
      Loop
        {
          If !GetKeyState("vk57","P")
            {
              ElapsedTime := A_TickCount - StartTime
              text =
                (
Send,{Space}
SetKeyDelay, 45, 45
start_time := A_TickCount
Send,{vk57 Down}
Sleep 500
Loop
  {
    Send,{vk57 Down}
    If (A_TickCount - start_time) > %ElapsedTime%
        Break
  }
Send,{vk57}
                )
              FileAppend,%text%,%A_WorkingDir%\test.ahk
              Run,%A_WorkingDir%\test.ahk
              ExitApp
            }
        }
    }
  Goto,begin