Тема: AHK: Таймеры
Добрый день. В общем я делаю скрипты для своего удобства и много времени ahk до этого не уделял. Но вот у меня возникла проблема: хочу реализовать несколько таймеров по нажатию кнопки для каждого соответственно. Т.е. например по нажатию кнопки 1 - запускается первый таймер на экране, по нажатию кнопки 2- рядом с первым запускается второй таймер и т.д.
Нашел рабочий вариант таймера и переделал под себя, но вот как сделать что бы несколько работало - не знаю.
Поможете?
Color1 = CSILVER
Color2 = cYellow
Color3 = cAqua
Color4 = cRed
Color5 = cFuchsia
Color6 = CSILVER
Timer(Timer_Name := "ti1", Timer_Opt := "D")
{
static
global Timer, Timer_Count
if !Timer
Timer := {}
if (Timer_Opt = "U" or Timer_Opt = "Unset")
if IsObject(Timer[Timer_Name])
{
Timer.Remove(Timer_Name)
Timer_Count --=
return true
}
else
return false
if RegExMatch(Timer_Opt,"(\d+)",Timer_Match)
{
if !(Timer[Timer_Name,"Start"])
Timer_Count += 1
Timer[Timer_Name,"Start"] := A_TickCount
Timer[Timer_Name,"Finish"] := A_TickCount + Timer_Match1
Timer[Timer_Name,"Period"] := Timer_Match1
}
if RegExMatch(Timer_Opt,"(\D+)",Timer_Match)
Timer_Opt := Timer_Match1
else
Timer_Opt := "Dq"
if (Timer_Name = "")
{
for index, element in Timer
Timer(index)
return
}
if (Timer_Opt = "R" or Timer_Opt = "Reset")
{
Timer[Timer_Name,"Start"] := A_TickCount
Timer[Timer_Name,"Finish"] := A_TickCount + Timer[Timer_Name,"Period"]
}
Timer[Timer_Name,"Now"] := A_TickCount
Timer[Timer_Name,"Left"] := Timer[Timer_Name,"Finish"] - Timer[Timer_Name,"Now"]
Timer[Timer_Name,"Elapse"] := Timer[Timer_Name,"Now"] - Timer[Timer_Name,"Start"]
Timer[Timer_Name,"Done"] := true
if (Timer[Timer_Name,"Left"] > 0)
Timer[Timer_Name,"Done"] := false
if (Timer_Opt = "D" or Timer_Opt = "Done")
return Timer[Timer_Name,"Done"]
if (Timer_Opt = "S" or Timer_Opt = "Start")
return Timer[Timer_Name,"Start"]
if (Timer_Opt = "F" or Timer_Opt = "Finish")
return Timer[Timer_Name,"Finish"]
if (Timer_Opt = "L" or Timer_Opt = "Left")
return Timer[Timer_Name,"Left"]
if (Timer_Opt = "N" or Timer_Opt = "Now")
return Timer[Timer_Name,"Now"]
if (Timer_Opt = "P" or Timer_Opt = "Period")
return Timer[Timer_Name,"Period"]
if (Timer_Opt = "E" or Timer_Opt = "Elapse")
return Timer[Timer_Name,"Elapse"]
}
;
Time_Remaining = 0
Show_OSD = 2
CustomColor = %Color1%
Gui +LastFound +AlwaysOnTop -Caption +ToolWindow
Gui, Color, %CustomColor%
Gui, Font, s18 ; Set a large font size (32-point).
Gui, Add, Text, vMyText %Color6%, XXXXX YYYYY
WinSet, TransColor, %CustomColor% 500
SetTimer, UpdateOSD, 200
Gosub, UpdateOSD
Gui, Show, x1366 y-15 NoActivate
return
;
MsToMinSec(i) {
Return, i < 1 ? "0:0" : ((n := i // g := 60000) ? n : "0") . ":"
. ((0 < i -= n * g) ? ((n := i // 1000) ) : "0")
}
UpdateOSD:
MS_Left := 660000-Timer("Timer","L")
Time_Left := MsToMinSec(MS_Left)
if Time_Remaining > 0
{
Gui, Font, %Color5%
GuiControl, Font, MyText
GuiControl,, MyText, Stop
}
else if (Timer("Timer","S") and !Timer("Timer")) {
if MS_Left between 0 and 300000
{
Gui, Font, %Color4%
GuiControl, Font, MyText
}
else if MS_Left between 300001 and 480000
{
Gui, Font, %Color3%
GuiControl, Font, MyText
}
else if MS_Left between 480001 and 660000
{
Gui, Font, %Color2%
GuiControl, Font, MyText
}
GuiControl,, MyText, %Time_Left%
}
else
{
Gui, Font, %Color6%
GuiControl, Font, MyText
GuiControl,, MyText, Up!
}
return
sc2::
if Time_Remaining > 0
{
Timer("Timer",Time_Remaining)
Time_Remaining = 0
}
else if (Timer("Timer","S") and !Timer("Timer"))
{
Time_Remaining := Timer("Timer","L")
Timer("Timer","U")
}
else
Timer("Timer",660000)
return
