1 (изменено: bubaaa, 2016-02-02 14:17:05)

Тема: AHK: исключение клавиш из A_TimeIdlePhysical

Добрый день.
Прошу вашей помощи. Больше не к кому обратиться.

Цель скрипта - поиск по координатам цвета, и в зависимости от цвета нажимается кнопка 1 или 2.
Если нажата любая кнопка - скрит приостанавливается.

Вопрос как исключить кнопки - w a s d из A_TimeIdlePhysical или возможно есть какое то другое решение?
То есть при нажатых w или a или s или d скрипт продолжал работать, он если нажата любая другая клавиша то ожидание и перезапуск sleep c 0

1)


#InstallKeybdHook
p1 := [700, 310, 700, 310, 0xFFFFFF, 1]
p2 := [650, 253, 739, 299, 0x000000, 2]


SetTimer, CheckActivity, 100
Exit

CheckActivity:
loop
{
            loop 2
            {
                PixelSearch, Px, Py, p%A_Index%[1], p%A_Index%[2], p%A_Index%[3] , p%A_Index%[4], p%A_Index%[5], 3, Fast
                if !errorlevel and (A_TimeIdlePhysical > 200) and !GetKeyState("wasd", "p")
                {
                    send % p%A_Index%[6]
                    break
                }
            }
        
}
return

2) Тут получилось сделать данную проверку, но если зажата - допустим "w" и "e" скрипт не уходит в sleep.


InstallKeybdHook

p1 := [700, 310, 700, 310, 0xFFFFFF, 1]
p2 := [650, 253, 739, 299, 0x000000, 2]


SetTimer, CheckActivity, 100
Exit

CheckActivity:
loop
{
	if(A_TimeIdlePhysical < 200) and !(GetKeyState("w", "p")) and !(GetKeyState("a", "p")) and !(GetKeyState("s", "p")) and !(GetKeyState("d", "p"))
		{
		sleep 750
		}
	else
		{
		loop 4
			{
			PixelSearch, Px, Py, p%A_Index%[1], p%A_Index%[2], p%A_Index%[3] , p%A_Index%[4], p%A_Index%[5], 3, Fast
			if !errorlevel
				{
				send % p%A_Index%[6]
				break
				}
			}
		}
}
return

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


if GetKeyState("w", "p")
 		Sleep 1000
   если нажата еще раз, сбросить sleep до 0 и опять начать отсчет Sleep до 1000.

2

Re: AHK: исключение клавиш из A_TimeIdlePhysical

bubaaa, уберите мягкий знак в заголовке темы. Расставьте знаки препинания в конце предложений. Смайлики их не заменяют.

3

Re: AHK: исключение клавиш из A_TimeIdlePhysical

ypppu
Готово.

4

Re: AHK: исключение клавиш из A_TimeIdlePhysical

p1 := [700, 310, 700, 310, 0xFFFFFF, 1]
p2 := [650, 253, 739, 299, 0x000000, 2]

loop
{
            loop 2
            {
                PixelSearch, Px, Py, p%A_Index%[1], p%A_Index%[2], p%A_Index%[3] , p%A_Index%[4], p%A_Index%[5], 3, Fast
                if !errorlevel and !ContinueF()
                {
					sleep 1
                    send % p%A_Index%[6]
                    break
                }
            }
}

ContinueF()
{
loop 255
  if !(Format("vk{:x}",A_Index) ~= "vk57|vk41|vk53|vk44|vk1|vk2|vk3")
    if GetKeyState( Format("vk{:x}",A_Index) , "p")
	 return true
}

5 (изменено: bubaaa, 2016-02-02 18:09:44)

Re: AHK: исключение клавиш из A_TimeIdlePhysical

yalanne

Спасибо, но он вообще в Sleep не уходит.

6 (изменено: yalanne, 2016-02-02 18:33:02)

Re: AHK: исключение клавиш из A_TimeIdlePhysical

Попробуйте обновить ahk.
ссылка.

7 (изменено: bubaaa, 2016-02-02 18:53:00)

Re: AHK: исключение клавиш из A_TimeIdlePhysical

yalanne

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

В скрипте, я не вижу какой то остановки, может я что то не понимаю?

8 (изменено: Alectric, 2016-02-02 22:04:51)

Re: AHK: исключение клавиш из A_TimeIdlePhysical

Может этот вариант переделать?
Мне сейчас некогда.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

9 (изменено: bubaaa, 2016-02-03 13:12:57)

Re: AHK: исключение клавиш из A_TimeIdlePhysical

Alectric
Добрый день.
не могу понять как совместить 2 скрипта.
У меня какой то бред получается.

Каким образом заставить его просто работать без нажатия конопки мыши?


p1 := [700, 310, 700, 310, 0xFFFFFF, 1]
p2 := [650, 253, 739, 299, 0x000000, 2]


SetFormat,IntegerFast,h ; устанавливаем формат чисел в HEX

; исключения
except=0x11`,0x1`,0x2`,0x4`,0x5`,0x6`,0x51`,0x57`,0x45`,0x41`,0x53`,0x44

Loop,0x91 ; перечисляем все виртуальные коды, убавил до 0x91 (может глюк с ctrl пропадет)
{
  if instr(except,A_Index) ; за исключением списка
    continue ; продолжаем, не выполняя последующие строки
  Hotkey,% "~*vk" . A_Index,Label,On ; добавляем горячую клавишу на метку Label
}

Label: ; тут все понятно, думаю
AnyKey=1
return


*$Rbutton::
AnyKey=0 ; обнуляем переменную ("либо ПКМ, новое нажатие на которую возобновляет цикл")
while GetKeyState("RButton","P") ; пока зажата кнопка - цикл работает
{
  if AnyKey ; если в AnyKey единица
  {
    if GetKeyState("LButton","P")
    {
                  loop 2
            {
                PixelSearch, Px, Py, p%A_Index%[1], p%A_Index%[2], p%A_Index%[3] , p%A_Index%[4], p%A_Index%[5], 3, Fast
                if !errorlevel
                {
					sleep 100
                    send % p%A_Index%[6]
                    break
                }
            }
      AnyKey=0
    }
    sleep,10 ; спим чтобы не нагружать проц
    continue ; продолжаем, не выполняя последующие строки
  }
  if CtrlActivate
  {
  Send,{LCtrl Down}{RButton}
  }
  else 
  {
  Send, {RButton} ; посылаем нажатие
  }
  tooltip,% A_Index ; для отладки
  Sleep, 15 ; спим чтобы не нагружать проц
}
return

esc:: ; аварийный выход, можно убрать
exitapp

10 (изменено: Alectric, 2016-02-03 17:14:42)

Re: AHK: исключение клавиш из A_TimeIdlePhysical


#InstallKeybdHook
p1 := [700, 310, 700, 310, 0xFFFFFF, 1]
p2 := [650, 253, 739, 299, 0x000000, 2]

SetFormat,IntegerFast,h ; устанавливаем формат чисел в HEX
starttime:=a_tickcount

; исключения
except=0x57`,0x41`,0x53`,0x44 ; виртуальные коды клавиш, для исключения из списка

Loop,0x91 ; перечисляем все виртуальные коды
{
  if instr(except,A_Index) ; за исключением списка
    continue ; продолжаем, не выполняя последующие строки
  Hotkey,% "~*vk" . A_Index,Label,On ; добавляем горячую клавишу на метку Label
}

loop
{
  sleep,10
  TimeIdlePhysical+=a_tickcount-starttime
  starttime:=a_tickcount

  loop 2
  {
    PixelSearch, Px, Py, p%A_Index%[1], p%A_Index%[2], p%A_Index%[3] , p%A_Index%[4], p%A_Index%[5], 3, Fast
    if (!errorlevel and TimeIdlePhysical>200)
    {
      tooltip,Действие.
;      send % p%A_Index%[6]
      break
    }
  }
}
return

Label:
TimeIdlePhysical=0
return
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

11 (изменено: bubaaa, 2016-02-03 18:54:26)

Re: AHK: исключение клавиш из A_TimeIdlePhysical

Спасибо. Но к сожалению скрипт не делает ничего.
Убираю комментарий с - send % p%A_Index%[6].
И тишина. Tooltip вижу, но цифры он не ставит.




Alectric пишет:

#InstallKeybdHook
p1 := [700, 310, 700, 310, 0xFFFFFF, 1]
p2 := [650, 253, 739, 299, 0x000000, 2]

SetFormat,IntegerFast,h ; устанавливаем формат чисел в HEX
starttime:=a_tickcount

; исключения
except=0x57`,0x41`,0x53`,0x44 ; виртуальные коды клавиш, для исключения из списка

Loop,0x91 ; перечисляем все виртуальные коды
{
  if instr(except,A_Index) ; за исключением списка
    continue ; продолжаем, не выполняя последующие строки
  Hotkey,% "~*vk" . A_Index,Label,On ; добавляем горячую клавишу на метку Label
}

loop
{
  sleep,10
  TimeIdlePhysical+=a_tickcount-starttime
  starttime:=a_tickcount

  loop 2
  {
    PixelSearch, Px, Py, p%A_Index%[1], p%A_Index%[2], p%A_Index%[3] , p%A_Index%[4], p%A_Index%[5], 3, Fast
    if (!errorlevel and TimeIdlePhysical>200)
    {
      tooltip,Действие.
      send % p%A_Index%[6]
      break
    }
  }
}
return

Label:
TimeIdlePhysical=0
return

12

Re: AHK: исключение клавиш из A_TimeIdlePhysical

Возможно что мне нужно отпарвлять значения, которые содержаться в p1 := [700, 310, 700, 310, 0xFFFFFF, 1], тоже в hex?

13

Re: AHK: исключение клавиш из A_TimeIdlePhysical

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

#SingleInstance,Force

#InstallKeybdHook
p1 := [700, 310, 700, 310, 0xFFFFFF, 1]
p2 := [650, 253, 739, 299, 0x000000, 2]

SetFormat,IntegerFast,h ; устанавливаем формат чисел в HEX
starttime:=a_tickcount

; исключения
except=0x57`,0x41`,0x53`,0x44 ; виртуальные коды клавиш, для исключения из списка

Loop,0x91 ; перечисляем все виртуальные коды
{
  if instr(except,A_Index) ; за исключением списка
    continue ; продолжаем, не выполняя последующие строки
  Hotkey,% "~*vk" . A_Index,Label,On ; добавляем горячую клавишу на метку Label
}
SetFormat,IntegerFast,d
loop
{
  sleep,10
  TimeIdlePhysical+=a_tickcount-starttime
  starttime:=a_tickcount

  loop 2
  {
    PixelSearch, Px, Py, p%A_Index%[1], p%A_Index%[2], p%A_Index%[3] , p%A_Index%[4], p%A_Index%[5], 3, Fast
    if (!errorlevel and TimeIdlePhysical>200)
    {
      send % p%A_Index%[6]
      break
    }
  }
}
return

Label:
TimeIdlePhysical=0
return

esc::
exitapp
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

14

Re: AHK: исключение клавиш из A_TimeIdlePhysical

Alectric

Спасибо огромное! скритп работает на ура! буду тестировать!

15 (изменено: becauseim, 2016-02-24 16:39:22)

Re: AHK: исключение клавиш из A_TimeIdlePhysical

У меня похожий вопрос касательно зависимости работы скрипта от нажатия клавиш, поэтому, решил не создавать новую тему.

Необходимо назначить на нажатие сочентания клавиш ^{z} двойную команду Undo, т.е. ^{z 2}, но при условии, что перед этим было нажато сочетание клавиш +{f1} или +{f3}, пропуская при этом ряд клавиш, а именно {f1}, {f2}, {f3}, {f11}, {m}, {Space}.

Т.е. если я, например, нажимаю на сочетание кавиш +{f3}, после чего нажимаю повторно одну клавишу {f3}, либо не нажму ничего,  то последующее нажатие на ^{z} вызовет двойной шаг назад. В любых других случаях Undo должен работать в привычном режиме.

upd: Открыл тему.