1 (изменено: carenov, 2017-08-28 23:20:42)

Тема: АНК: Checkbox в роли индикатора состояния + хоткей на него

Доброго времени суток
Почти написал свою программу, сейчас занимаюсь ГУИ. Осталось разобраться с ЧекБоксами и хоткеями на него.
Есть 8 чекбоксов (будет возможно еще несколько) в моей оболочке.
Мне нужно, чтобы по Хоткею на клавиатуре активировался тот или иной скрипт (на каждый чекбокс по скрипту). При этом, при повторном нажатии Хоткея скрипт останавливался. Если нужно дальше также запускался и останавливался.
Но при этом, помимо хоткея, чтобы было также доступно Вкл/выкл того же скрипт по нажатию/удалению галочки в чекбоксе.
И чекбокс служил неким индикатором для скрипт.
Примеры:
# Нажал ф12, поставилась галочка в нужном чекбоксе и включился сам скрипт, нажал еще раз ф12, убралась галка и выключился скрипт.
# Аналогично, поставил галочку в чекбоксе вручную - запустился скрипт, убрал - остановился.

Приведу в конкретном примере 2 скрипта и 2 чекбокса, для наглядности:

#NoEnv
#NoTrayIcon

Gui, Add, CheckBox, x32 y109 w190 h20 , Накрутка часов на штурме
Gui, Add, CheckBox, x32 y139 w190 h20 , Обратный Ренейм окон

; Скрипт для 1го чекбокса
F12::
Loop
{
 WinActivate, Bot2
  SetWinDelay, 200
  Send {Esc}
  Send {Esc}
  Send {Esc}
  MouseMove, 460, 290
  SetMouseDelay, 15
  Click 4
  MouseMove, 650, 340
  SetMouseDelay, 15
  Click 4
  Sleep 1000
 WinActivate, Bot4
  SetWinDelay, 200
  Send {Esc}
  Send {Esc}
  Send {Esc}
  MouseMove, 460, 290
  SetMouseDelay, 15
  Click 4
  MouseMove, 650, 340
  SetMouseDelay, 15
  Click 4
  Sleep 1000
 WinActivate, Bot3
  SetWinDelay, 200
  Send {Esc}
  Send {Esc}
  Send {Esc}
  MouseMove, 460, 290
  SetMouseDelay, 25
  Click 4
  MouseMove, 650, 340
  SetMouseDelay, 25
  Click 4
  Sleep 2000
 WinActivate, Bot1
  SetWinDelay, 200
  Send {Esc}
  Send {Esc}
  Send {Esc}
  MouseMove, 460, 290
  SetMouseDelay, 25
  Click 4
  MouseMove, 650, 340
  SetMouseDelay, 25
  Click 4
  Sleep 1000
 WinActivate, Bot2
  SetWinDelay, 200
  MouseMove, 650, 340
  SetMouseDelay, 25
  Click 4
  Sleep 1750000
  Send {Esc}
  MouseMove, 400, 240
  SetMouseDelay, 25
  Click 4
  Sleep 80
  MouseMove, 345, 285
  SetMouseDelay, 25
  Click 4
  Sleep 2000
 WinActivate, Bot4
  SetWinDelay, 200
  MouseMove, 650, 340
  SetMouseDelay, 25
  Click 4
  Sleep 80
  Send {Esc}
  MouseMove, 400, 240
  SetMouseDelay, 25
  Click 4
  Sleep 80
  MouseMove, 345, 285
  SetMouseDelay, 25
  Click 4
  Sleep 2000
}
Return

; Скрипт для 2го чекбокса
F12::
    Win := {}, Win.Free := {}, Win.Count := 0
	WinGet, List, List, ahk_exe %exe%
	Loop %List%
	{ 
		hwnd := List%A_Index%
		WinSetTitle, ahk_id %hwnd%, , ИмяОкна
    }
	Return

На форуме искал, несколько примеров, отдаленно похожих, я нашел, убил 2 дня, выходило что-то непонятное.
Прошу помощи, о великие

2 (изменено: serzh82saratov, 2017-08-29 00:02:38)

Re: АНК: Checkbox в роли индикатора состояния + хоткей на него

Gui, Add, CheckBox, vCheckBox1 gCheckBox1, CheckBox
Gui, Show
Return

1::
CheckBox1:
	GuiControlGet, CheckBox1
	If A_GuiControl =
		GuiControl, , CheckBox1, % (CheckBox1 := !CheckBox1)
	If CheckBox1
		SetTimer, CheckBox1Proc, -0
	Return
	
CheckBox1Proc:
	While CheckBox1
	{ 
		ToolTip % A_TickCount 
	}
	ToolTip
	Return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.27.03 (Unicode 32-bit).

3

Re: АНК: Checkbox в роли индикатора состояния + хоткей на него

serzh82saratov
Ваш скрипт полностью именно то, то мне нужно Большое спасибо.

Еще один вопросик, чекбоксы работают как надо, там где нету Loop.
С Loop они запускаются, но остановится уже не могут.
Видимо, я как то не так организовал стоп/повтор Лупа.

Вот скрипт с Лупом:

WinActivate, Warface
SetWinDelay, 100

Loop
{
  MouseMove, 902, 944
  SetMouseDelay, 15
  Click 5
  MouseMove, 1175, 944
  SetMouseDelay, 15
  Click 2
  MouseMove, 980, 975
  SetMouseDelay, 15
  Click 2
  Sleep 50
}

С чекбоксом и паузой / стартом скрипта вместе в лупом, у меня вышло примерно так:

#NoEnv
#MaxThreadsPerHotkey 3

Gui, Add, CheckBox, vCheckBox1 gCheckBox1, CheckBox
Gui, Show
Return

1::
CheckBox1:
	GuiControlGet, CheckBox1
	If A_GuiControl =
		GuiControl, , CheckBox1, % (CheckBox1 := !CheckBox1)
	SetTimer, CheckBox1Proc, -0
	Return
	
CheckBox1Proc:
	While CheckBox1
	{ 
 #MaxThreadsPerHotkey 1
 WinActivate, Warface
 SetWinDelay, 100
 if KeepWinZRunning = y
 {
 KeepWinZRunning =
 Return
 }
 KeepWinZRunning = y
 Loop,
{
  MouseMove, 902, 944
  SetMouseDelay, 15
  Click 5
  MouseMove, 1175, 944
  SetMouseDelay, 15
  Click 2
  MouseMove, 980, 975
  SetMouseDelay, 15
  Click 2
  Sleep 50
 if KeepWinZRunning =
 break
 }
 KeepWinZRunning =
	}

	Return

Но где-то есть косяк, ибо Loop останавливаться не хочет.

4

Re: АНК: Checkbox в роли индикатора состояния + хоткей на него

While CheckBox1 это и есть Loop.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.27.03 (Unicode 32-bit).

5

Re: АНК: Checkbox в роли индикатора состояния + хоткей на него

CheckBox1Proc: 
	WinActivate, Warface
	SetWinDelay, 100
	if KeepWinZRunning = y
	{
		KeepWinZRunning =
		Return
	}
	KeepWinZRunning = y
	While CheckBox1
	{
		MouseMove, 902, 944
		SetMouseDelay, 15
		Click 5
		MouseMove, 1175, 944
		SetMouseDelay, 15
		Click 2
		MouseMove, 980, 975
		SetMouseDelay, 15
		Click 2
		Sleep 50
		if KeepWinZRunning =
			break
	}
	KeepWinZRunning = 
	Return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.27.03 (Unicode 32-bit).

6

Re: АНК: Checkbox в роли индикатора состояния + хоткей на него

serzh82saratov
О боже, я идиот...)
Опять начинаю делать велосипед на пустом месте....)

Спасибо, все работает.

7

Re: АНК: Checkbox в роли индикатора состояния + хоткей на него

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

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.