1

Тема: Перестаёт работать цикл

Имеется код


vk57:: ;W
SendInput {Shift Down}{LButton Down} 
While GetKeyState(A_ThisHotkey,"p") 
{
    if (A_TickCount > T1) && (T1 := A_TickCount + 100) 
        SendInput 1 
     
    sleep 10
}
SendInput {Shift Up}{LButton Up}  
return 

vk45:: ; E
keywait vk45 
loop 
    {
    
     if GetKeyState("vk45","p") 
        {    
            keywait vk45
            return
        }    
     if (A_TickCount > T10) and (T10 := A_TickCount + 100) 
            SendInput 4 
    }

Идея в том чтоб по нажатию клавиши Е, прожималась постоянно 4, пока ещё раз не нажать Е. А по зажатию W зажимался шифт с левой кнопкой мышки и прожималась 1. Проблема в том, что при нажатии W прекращается цикл E, пока не отпустить W. Как переделать код чтобы они работали оба одновременно независимо друг от друга.

2

Re: Перестаёт работать цикл

vk57:: ;W
vk45:: ; E
While GetKeyState("vk57","p") or GetKeyState("vk45","p")
{
  if GetKeyState("vk57","p") and (A_TickCount > T1) and (T1 := A_TickCount + 100)
   SendInput {Shift down}{LButton down}1{Shift up}{LButton up} 
  if GetKeyState("vk45","p") and (A_TickCount > T2) and (T2 := A_TickCount + 100)
   SendInput 4 
}
return 

3

Re: Перестаёт работать цикл

Спасибо

4

Re: Перестаёт работать цикл

Как ни странно спустя пару дней, код стал рабоать по другому, Е стала работать пока её держишь, а не как тригер. Хотя сначала работала как хотелось. Ни у кого нет никаких идей? Комп перезагружал, скрипт заново копировал.

5 (изменено: serzh82saratov, 2016-03-04 23:48:58)

Re: Перестаёт работать цикл

Странно почему первые 2 дня Е была тригером.
Можно переделать так:

vk45:: ; E
vk57:: ; W
	Loop 
	{
		if (W_Down := GetKeyState("vk57","p")) && (A_TickCount > T1) && (T1 := A_TickCount + 100)
			SendInput {Shift down}{LButton down}1{Shift up}{LButton up}  
		if (E_UpWait := GetKeyState("vk45","p") ? !E_UpWait : E_UpWait)  && (A_TickCount > T2) && (T2 := A_TickCount + 100)
			SendInput 4 
			Sleep 100
	} Until (!W_Down && !E_UpWait)
	Return 

Но если E проверять в цикле без Sleep, то одно её нажатие может быть принято за несколько, а использовать тут Sleep не кошерно.
Я бы сделал на таймерах:


vk45:: SetTimer, Send_4, % (E_Work := !E_Work) ? 100 : "Off"    ; E  

vk57::  ; W 
	If !W_Down 
		SetTimer, Send_Shift_LButton_1, %  (W_Down := 100)
	Return
	
vk57 Up:: SetTimer, Send_Shift_LButton_1, % "Off" . (W_Down := "")
	
Send_4:
	SendInput 4
	Return
	
Send_Shift_LButton_1:
	SendInput {Shift down}{LButton down}1{Shift up}{LButton up} 
	Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: Перестаёт работать цикл

Ещё подскажите в чём может быть проблема. Если я в данном цикле использую только клавишу Е, для периодического прожатия 4, то при ручном зажатии шифта,  он периодически отпускается, хотя кнопка физически зажата.

7

Re: Перестаёт работать цикл

Когда {Blind} стоит первым в посылаемой строке, клавиши Alt/Control/Shift/Win, находящиеся в нажатом состоянии, не будут отпущены перед посылкой строки.

SendInput {Blind}4
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: Перестаёт работать цикл

Спасибо