Тема: AHK: Вопросы по скрипту с таймерами.
Здравствуйте. Основной скрипт, представляет из себя GUI с секундомером, таймером или будильником.
Возникло несколько вопросов в процессе:
1. Не могу сделать точные таймеры. Возникает десинхронизация с временем с запозданием на 20-50% от нормы, если использовать простые циклы. Очень хочется реализовать через функцию таймера, но я не понимаю как создать таймеры с переменной в названии, так как таймеров понадобится много. Можно конечно заранее заготовить, к примеру 10 таймеров, но хотелось бы решение поэлегантнее.
2. Не могу никак разобраться с принципами работы DllCall("ShowCursor", "Uint", 0). При первом запуске удаётся скрыть курсор, но более эта функция не работает в моём скрипте. В чём проблема, не пойму.
Два раза "`" - переключить режим интерфейса. Полный режим и режим отображения.
В режиме отображения, "`" - скрывает интерфейс.
Для запуска часов, зажмите "`", наберите полный номер таймера с помощью строки цифр и отожмите "`".
; GTA5AHK
; Версия 1.07
; \GTA5AHK\Test versions\GTA5AHK 1.07 TEST
; Начало открывающего блока
#SingleInstance Force
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SplitPath, A_ScriptName, , , , ScriptName
SetTitleMatchMode, 2
; Конец открывающего блока
; Начало Exit
GoTo, WrappingAroundExit ; Начало обтекания строк.
#Persistent
!sc02D:: ; Alt + X
ExitApp
WrappingAroundExit: ; Конец обтекания строк.
; Конец Exit
; Начало GTA5AHK
#InstallKeybdHook
#InstallMouseHook
SetBatchLines -1
GuiToggle =
TextColor = White
TextColor2 = Red
BackColor = Black
TransColor = 7a7a7a ; 010000 Чёрный 7a7a7a Серый feffff Белый
SizeForWindow = % A_ScreenHeight/135
PollingFrequency = 10
UpdateFrequency = 100
SetTimer, RefreshClocks, %PollingFrequency%
SetTimer, RefreshGui, 0
GoTo, WrappingGTA5AHK ; Начало обтекания строк.
$LButton::
MouseGetPos, , , MouseWindow, ,
If MouseWindow = % AHKWindow
{
If GuiToggle =
If AHKWindowStatus =
{
AHKWindowStatus = Hide
Gui, Show, Hide
}
Send {LButton Down}
If AHKWindowStatus = Hide
{
AHKWindowStatus =
Gui, Show, NA
}
KeyWait, LButton
Send {LButton Up}
}
Else
{
Send {LButton Down}
KeyWait, LButton
Send {LButton Up}
}
Return
$RButton::
MouseGetPos, , , MouseWindow, ,
If MouseWindow = % AHKWindow
{
If GuiToggle =
If AHKWindowStatus =
{
AHKWindowStatus = Hide
Gui, Show, Hide
}
Send {RButton Down}
If AHKWindowStatus = Hide
{
AHKWindowStatus =
Gui, Show, NA
}
KeyWait, RButton
Send {RButton Up}
}
Else
{
Send {RButton Down}
KeyWait, RButton
Send {RButton Up}
}
Return
$MButton::
MouseGetPos, , , MouseWindow, ,
If MouseWindow = % AHKWindow
{
If GuiToggle =
If AHKWindowStatus =
{
AHKWindowStatus = Hide
Gui, Show, Hide
}
Send {MButton Down}
If AHKWindowStatus = Hide
{
AHKWindowStatus =
Gui, Show, NA
}
KeyWait, MButton
Send {MButton Up}
}
Else
{
Send {MButton Down}
KeyWait, MButton
Send {MButton Up}
}
Return
SortClocksNumbers()
{
Global ClocksNumbers
LargestClockNumber = 0
Loop, Parse, ClocksNumbers, %A_Space%, %A_Space%
{
If A_LoopField > %LargestClockNumber%
LargestClockNumber = %A_LoopField%
}
ClockNumber = 0
Loop
{
ClockNumber2 = %LargestClockNumber%
Loop, Parse, ClocksNumbers, %A_Space%, %A_Space%
{
If A_LoopField > %ClockNumber%
{
If A_LoopField < %ClockNumber2%
ClockNumber2 = %A_LoopField%
}
}
ClockNumber = %ClockNumber2%
If ClockNumber = 0
{}
Else
AssortedClocksNumbers = % AssortedClocksNumbers ClockNumber " "
If ClockNumber = %LargestClockNumber%
Break
Else
Continue
}
Return AssortedClocksNumbers
}
ProcessExecution()
{
Global
Local LocalProcessNumber, LocalSubProcess
LocalProcessNumber = % ProcessNumber
LocalSubProcess = % SubProcess
If %LocalSubProcess%ProcessNumber =
{
Process%LocalProcessNumber%MaxNumber = 0
If Process%LocalProcessNumber%Queue =
{
%LocalSubProcess%ProcessNumber = 1
Process%LocalProcessNumber%Queue = % Process%LocalProcessNumber%Queue %LocalSubProcess%ProcessNumber " "
}
Else
Loop, Parse, Process%LocalProcessNumber%Queue, %A_Space%, %A_Space%
{
If A_LoopField =
{
%LocalSubProcess%ProcessNumber = % Process%LocalProcessNumber%MaxNumber+1
Process%LocalProcessNumber%Queue = % Process%LocalProcessNumber%Queue %LocalSubProcess%ProcessNumber " "
Break
}
Process%LocalProcessNumber%MaxNumber = %A_LoopField%
Continue
}
}
If %LocalSubProcess%ProcessNumber <>
{
If (Process%LocalProcessNumber%CurrentNumber = %LocalSubProcess%ProcessNumber OR Process%LocalProcessNumber%CurrentNumber = "")
{
%LocalSubProcess%()
StringReplace, Process%LocalProcessNumber%Queue, Process%LocalProcessNumber%Queue, % %LocalSubProcess%ProcessNumber " ", ,
%LocalSubProcess%ProcessNumber =
If Process%LocalProcessNumber%Queue =
Process%LocalProcessNumber%CurrentNumber =
Else
Loop, Parse, Process%LocalProcessNumber%Queue, %A_Space%, %A_Space%
{
If A_Index = 1
{
Process%LocalProcessNumber%CurrentNumber = %A_LoopField%
Break
}
}
}
Else
If Process%LocalProcessNumber%CurrentNumber <> % %LocalSubProcess%ProcessNumber
{
SetTimer, %LocalSubProcess%, 10
Return
}
}
}
RefreshClocks:
RefreshClocks()
Return
RefreshClocks()
{
Global
Local ClockNumber, ClockHours, ClockMinutes
FormatTime, ClockHours, , HH
FormatTime, ClockMinutes, , mm
FullCurrentTime = % (ClockHours*3600+ClockMinutes*60)*1000
FormatTime, TimeString, , HH:mm
GuiControl, , TimeForWindow, % TimeString
Loop, Parse, ClocksNumbers, %A_Space%, %A_Space%
{
If A_LoopField =
Break
ClockNumber = %A_LoopField%
If Clock%ClockNumber% = Started
{
If Clock%ClockNumber%Type = StopWatch
{
Clock%ClockNumber%FullTime += %PollingFrequency%
Continue
}
Else
If Clock%ClockNumber%Type = Timer
{
If Clock%ClockNumber%FullTime > 0
Clock%ClockNumber%FullTime -= %PollingFrequency%
Else
If Clock%ClockNumber%FullTime <= 0
Clock%ClockNumber% = EndedUpdate
Continue
}
Else
If Clock%ClockNumber%Type = AlarmClock
{
If FullCurrentTime >= % Clock%ClockNumber%TargetFullTime
{
Clock%ClockNumber%FullTime = % Clock%ClockNumber%TargetFullTime
Clock%ClockNumber% = EndedUpdate
}
Else
Clock%ClockNumber%FullTime = % FullCurrentTime
Continue
}
}
}
}
ClockDelimiterUpdate:
SetTimer, ClockDelimiterUpdate, 1000
ClockDelimiterUpdateStatus = On
If ClockDelimiter = % ":"
ClockDelimiter = % " "
Else
If ClockDelimiter = % " "
ClockDelimiter = % ":"
Else
If ClockDelimiter =
ClockDelimiter = % " "
ClockDelimiterUpdateStatus =
Return
UpdateGui:
ProcessNumber = 1
SubProcess = UpdateGui
ProcessExecution()
Return
UpdateGui()
{
Global
Local ClockNumber, ClockHours, ClockMinutes
SetTimer, UpdateGui, %UpdateFrequency%
Loop, Parse, ClocksNumbers, %A_Space%, %A_Space%
{
If A_LoopField =
Break
ClockNumber = %A_LoopField%
If GuiToggle =
{
If Clock%ClockNumber% = Started
{
ClockHours = % Floor(Floor(Clock%ClockNumber%FullTime/1000)/3600)
ClockMinutes = % Floor((Floor(Clock%ClockNumber%FullTime/1000)-(ClockHours*3600))/60)
If ClockHours < 10
Clock%ClockNumber%Time = % "0" ClockHours
Else
Clock%ClockNumber%Time = % ClockHours
If ClockMinutes < 10
Clock%ClockNumber%Time = % Clock%ClockNumber%Time ClockDelimiter "0" ClockMinutes
Else
Clock%ClockNumber%Time = % Clock%ClockNumber%Time ClockDelimiter ClockMinutes
GuiControl, , Clock%ClockNumber%Time, % Clock%ClockNumber%Time
Continue
}
Else
If Clock%ClockNumber% = EndedUpdate
{
ClockHours = % Floor(Floor(Clock%ClockNumber%FullTime/1000)/3600)
ClockMinutes = % Floor((Floor(Clock%ClockNumber%FullTime/1000)-(ClockHours*3600))/60)
If ClockHours < 10
Clock%ClockNumber%Time = % "0" ClockHours
Else
Clock%ClockNumber%Time = % ClockHours
If ClockMinutes < 10
Clock%ClockNumber%Time = % Clock%ClockNumber%Time ":" "0" ClockMinutes
Else
Clock%ClockNumber%Time = % Clock%ClockNumber%Time ":" ClockMinutes
Gui, Font, c%TextColor2%
GuiControl, Font, Clock%ClockNumber%Time
GuiControl, , Clock%ClockNumber%Time, % Clock%ClockNumber%Time
Gui, Font, c%TextColor%
Clock%ClockNumber% = Ended
Continue
}
}
}
}
ClockOperations:
ProcessNumber = 1
SubProcess = ClockOperations
ProcessExecution()
Return
ClockOperations()
{
Global
Local ClockHours, ClockMinutes
SetTimer, ClockOperations, Delete
If ClockNumber is not Integer
{}
Else
If ClockNumber = 0
{}
Else
If ClockOptions = Add
{
ClocksNumbers = % ClocksNumbers ClockNumber " "
ClocksNumbers = % SortClocksNumbers()
Clock%ClockNumber% = Exist
Clock%ClockNumber%Number = %ClockNumber%
Clock%ClockNumber%Type = StopWatch
Clock%ClockNumber%Name = Часы №%ClockNumber%
Clock%ClockNumber%Time = 00:00
Clock%ClockNumber%FullTime = 0
Clock%ClockNumber%TargetFullTime = 0
ClockOptions =
}
Else
If ClockOptions = Delete
{
StringReplace, ClocksNumbers, ClocksNumbers, % ClockNumber " ", ,
ClocksNumbers = % SortClocksNumbers()
Clock%ClockNumber% =
Clock%ClockNumber%Number =
Clock%ClockNumber%Type =
Clock%ClockNumber%Name =
Clock%ClockNumber%Time =
Clock%ClockNumber%FullTime =
Clock%ClockNumber%TargetFullTime =
ClockOptions =
}
Else
If ClockOptions = TypeChange
{
If Clock%ClockNumber%Type = StopWatch
{
Clock%ClockNumber%Type = Timer
Clock%ClockNumber%FullTime = % Clock%ClockNumber%TargetFullTime
Clock%ClockNumber% = Exist
}
Else
If Clock%ClockNumber%Type = Timer
{
Clock%ClockNumber%Type = AlarmClock
Clock%ClockNumber%FullTime = % Clock%ClockNumber%TargetFullTime
Clock%ClockNumber% = Exist
}
Else
If Clock%ClockNumber%Type = AlarmClock
{
Clock%ClockNumber%Type = StopWatch
Clock%ClockNumber%FullTime = 0
Clock%ClockNumber% = Exist
}
}
Else
If ClockOptions = Up
Clock%ClockNumber%Number = % ClockNumber - 1
Else
If ClockOptions = Down
Clock%ClockNumber%Number = % ClockNumber + 1
Else
If ClockOptions = ChangeClockStatus
{
If Clock%ClockNumber%Type = StopWatch
{
If Clock%ClockNumber% = Exist
Clock%ClockNumber% = Started
Else
If Clock%ClockNumber% = Started
{
Clock%ClockNumber%TargetFullTime = % Clock%ClockNumber%FullTime
Clock%ClockNumber% = EndedUpdate
}
Else
If Clock%ClockNumber% = Ended
{
Clock%ClockNumber%FullTime = 0
Clock%ClockNumber%Time = % "00:00"
Gui, Font, c%TextColor%
GuiControl, Font, Clock%ClockNumber%Time
GuiControl, , Clock%ClockNumber%Time, % Clock%ClockNumber%Time
Clock%ClockNumber% = Exist
}
}
Else
If Clock%ClockNumber%Type = Timer
{
If Clock%ClockNumber% = Exist
{
Clock%ClockNumber%FullTime = % Clock%ClockNumber%TargetFullTime
Clock%ClockNumber% = Started
}
Else
If (Clock%ClockNumber% = "Started" OR Clock%ClockNumber% = "Ended")
{
Clock%ClockNumber%FullTime = % Clock%ClockNumber%TargetFullTime
ClockHours = % Floor(Floor(Clock%ClockNumber%TargetFullTime/1000)/3600)
ClockMinutes = % Floor((Floor(Clock%ClockNumber%TargetFullTime/1000)-(ClockHours*3600))/60)
If ClockHours < 10
Clock%ClockNumber%Time = % "0" ClockHours
Else
Clock%ClockNumber%Time = % ClockHours
If ClockMinutes < 10
Clock%ClockNumber%Time = % Clock%ClockNumber%Time ":" "0" ClockMinutes
Else
Clock%ClockNumber%Time = % Clock%ClockNumber%Time ":" ClockMinutes
Gui, Font, c%TextColor%
GuiControl, Font, Clock%ClockNumber%Time
GuiControl, , Clock%ClockNumber%Time, % Clock%ClockNumber%Time
Clock%ClockNumber% = Exist
}
}
Else
If Clock%ClockNumber%Type = AlarmClock
{
If Clock%ClockNumber% = Exist
{
Clock%ClockNumber%FullTime = % FullCurrentTime
Clock%ClockNumber% = Started
}
Else
{
Clock%ClockNumber%FullTime = % Clock%ClockNumber%TargetFullTime
ClockHours = % Floor(Floor(Clock%ClockNumber%TargetFullTime/1000)/3600)
ClockMinutes = % Floor((Floor(Clock%ClockNumber%TargetFullTime/1000)-(ClockHours*3600))/60)
If ClockHours < 10
Clock%ClockNumber%Time = % "0" ClockHours
Else
Clock%ClockNumber%Time = % ClockHours
If ClockMinutes < 10
Clock%ClockNumber%Time = % Clock%ClockNumber%Time ":" "0" ClockMinutes
Else
Clock%ClockNumber%Time = % Clock%ClockNumber%Time ":" ClockMinutes
Gui, Font, c%TextColor%
GuiControl, Font, Clock%ClockNumber%Time
GuiControl, , Clock%ClockNumber%Time, % Clock%ClockNumber%Time
Clock%ClockNumber% = Exist
}
}
}
ClockNumber =
Local ClockNumber, NextClockNumber
Local Clock0
Local Clock0Type
Local Clock0Name
Local Clock0Time
Local Clock0FullTime
Local Clock0TargetFullTime
Loop, Parse, ClocksNumbers, %A_Space%, %A_Space%
{
If A_LoopField =
Break
ClockNumber = %A_LoopField%
If Clock%ClockNumber%Number <> ClockNumber
{
If Clock%ClockNumber%Number = 0
Clock%ClockNumber%Number = %ClockNumber%
Else
{
NextClockNumber = % Clock%ClockNumber%Number
Clock%ClockNumber%Number = %ClockNumber%
Clock%NextClockNumber%Number = %NextClockNumber%
Clock0 = % Clock%ClockNumber%
Clock0Type = % Clock%ClockNumber%Type
Clock0Name = % Clock%ClockNumber%Name
Clock0Time = % Clock%ClockNumber%Time
Clock0FullTime = % Clock%ClockNumber%FullTime
Clock0TargetFullTime = % Clock%ClockNumber%TargetFullTime
Clock%ClockNumber% = % Clock%NextClockNumber%
Clock%ClockNumber%Type = % Clock%NextClockNumber%Type
Clock%ClockNumber%Name = % Clock%NextClockNumber%Name
Clock%ClockNumber%Time = % Clock%NextClockNumber%Time
Clock%ClockNumber%FullTime = % Clock%NextClockNumber%FullTime
Clock%ClockNumber%TargetFullTime = % Clock%NextClockNumber%TargetFullTime
Clock%NextClockNumber% = % Clock0
Clock%NextClockNumber%Type = % Clock0Type
Clock%NextClockNumber%Name = % Clock0Name
Clock%NextClockNumber%Time = % Clock0Time
Clock%NextClockNumber%FullTime = % Clock0FullTime
Clock%NextClockNumber%TargetFullTime = % Clock0TargetFullTime
Clock0 =
Clock0Type =
Clock0Name =
Clock0Time =
Clock0FullTime =
Clock0TargetFullTime =
If Clock%ClockNumber% <>
ClocksNumbers = % ClocksNumbers ClockNumber " "
Else
StringReplace, ClocksNumbers, ClocksNumbers, % ClockNumber " ", ,
If Clock%NextClockNumber% <>
ClocksNumbers = % ClocksNumbers NextClockNumber " "
Else
StringReplace, ClocksNumbers, ClocksNumbers, % NextClockNumber " ", ,
ClocksNumbers = % SortClocksNumbers()
Continue
}
}
}
}
ButtonОбновить:
If RefreshGuiStatus =
{
Gui, Submit, NoHide
SetTimer, ClockOperations, 0
SetTimer, RefreshGui, 0
}
Return
ButtonСекундомер: ; Clock%ClockNumber%Type StopWatch
If RefreshGuiStatus =
{
Gui, Submit, NoHide
ClockOptions = %A_GuiControl%
StringTrimLeft, ClockOptions, ClockOptions, 5
StringTrimRight, ClockOptions, ClockOptions, 4
ClockNumber = %ClockOptions%
ClockOptions = TypeChange
SetTimer, ClockOperations, 0
SetTimer, RefreshGui, 0
}
Return
ButtonТаймер: ; Clock%ClockNumber%Type Timer
If RefreshGuiStatus =
{
Gui, Submit, NoHide
ClockOptions = %A_GuiControl%
StringTrimLeft, ClockOptions, ClockOptions, 5
StringTrimRight, ClockOptions, ClockOptions, 4
ClockNumber = %ClockOptions%
ClockOptions = TypeChange
SetTimer, ClockOperations, 0
SetTimer, RefreshGui, 0
}
Return
ButtonБудильник: ; Clock%ClockNumber%Type AlarmClock
If RefreshGuiStatus =
{
Gui, Submit, NoHide
ClockOptions = %A_GuiControl%
StringTrimLeft, ClockOptions, ClockOptions, 5
StringTrimRight, ClockOptions, ClockOptions, 4
ClockNumber = %ClockOptions%
ClockOptions = TypeChange
SetTimer, ClockOperations, 0
SetTimer, RefreshGui, 0
}
Return
ButtonДобавить: ; Clock%ClockNumber%Add
If RefreshGuiStatus =
{
Gui, Submit, NoHide
ClockNumber = %AddNumber%
ClockOptions = Add
SetTimer, ClockOperations, 0
SetTimer, RefreshGui, 0
}
Return
ButtonУдалить: ; Clock%ClockNumber%Delete
If RefreshGuiStatus =
{
Gui, Submit, NoHide
ClockOptions = %A_GuiControl%
StringTrimLeft, ClockOptions, ClockOptions, 5
StringTrimRight, ClockOptions, ClockOptions, 6
ClockNumber = %ClockOptions%
ClockOptions = Delete
SetTimer, ClockOperations, 0
SetTimer, RefreshGui, 0
}
Return
Button/\: ; Clock%ClockNumber%Up
If RefreshGuiStatus =
{
Gui, Submit, NoHide
ClockOptions = %A_GuiControl%
StringTrimLeft, ClockOptions, ClockOptions, 5
StringTrimRight, ClockOptions, ClockOptions, 2
ClockNumber = %ClockOptions%
ClockOptions = Up
SetTimer, ClockOperations, 0
SetTimer, RefreshGui, 0
}
Return
Button\/: ; Clock%ClockNumber%Down
If RefreshGuiStatus =
{
Gui, Submit, NoHide
ClockOptions = %A_GuiControl%
StringTrimLeft, ClockOptions, ClockOptions, 5
StringTrimRight, ClockOptions, ClockOptions, 4
ClockNumber = %ClockOptions%
ClockOptions = Down
SetTimer, ClockOperations, 0
SetTimer, RefreshGui, 0
}
Return
RefreshGui:
ProcessNumber = 1
SubProcess = RefreshGui
ProcessExecution()
Return
RefreshGui()
{
Global
Local ClockNumber, ClockHours, ClockMinutes, IntegerStatus
SetTimer, UpdateGui, Delete
SetTimer, ClockDelimiterUpdate, Delete
SetTimer, RefreshGui, Delete
TextSizeForWindow = % SizeForWindow
ElementSizeForWindow = % TextSizeForWindow+7+(TextSizeForWindow*0.50)
XForWindow = % A_ScreenWidth/20
YForWindow = % A_ScreenHeight/5*3
Gui, Destroy
Gui, +AlwaysOnTop +LastFound +Owner
Gui, Color, %TransColor%, %BackColor%
Gui, Font, s%TextSizeForWindow% c%TextColor%
FormatTime, TimeString, , HH:mm
Gui, Add, Edit, vTimeForWindow H%ElementSizeForWindow%, % TimeString
If GuiToggle = On
{
Gui, Add, Button, Default H%ElementSizeForWindow% ys yp, Обновить
Loop
{
If Clock%A_Index% <>
Continue
If Clock%A_Index% =
{
AddNumber = %A_Index%
Break
}
}
Gui, Add, Edit, vAddNumber H%ElementSizeForWindow% ys yp, % AddNumber
Gui, Add, Button, H%ElementSizeForWindow% ys yp, Добавить
}
Loop, Parse, ClocksNumbers, %A_Space%, %A_Space%
{
If A_LoopField =
Break
ClockNumber = %A_LoopField%
If GuiToggleLastStatus = On
{
StringTrimRight, ClockHours, Clock%ClockNumber%Time, 3
StringTrimLeft, ClockMinutes, Clock%ClockNumber%Time, 3
IntegerStatus =
If ClockHours is Integer
IntegerStatus = Yes
If IntegerStatus = Yes
If ClockMinutes is Integer
{}
Else
IntegerStatus =
If IntegerStatus = Yes
Clock%ClockNumber%TargetFullTime = % (ClockHours*3600+ClockMinutes*60)*1000
}
Gui, Add, Edit, vClock%ClockNumber%Number H%ElementSizeForWindow% xs Section, % Clock%ClockNumber%Number
Gui, Add, Edit, vClock%ClockNumber%Name H%ElementSizeForWindow% ys yp, % Clock%ClockNumber%Name
If GuiToggle = On
{
ClockHours = % Floor(Floor(Clock%ClockNumber%TargetFullTime/1000)/3600)
ClockMinutes = % Floor((Floor(Clock%ClockNumber%TargetFullTime/1000)-(ClockHours*3600))/60)
}
Else
If GuiToggle =
{
If Clock%ClockNumber%Type = StopWatch
{
ClockHours = % Floor(Floor(Clock%ClockNumber%FullTime/1000)/3600)
ClockMinutes = % Floor((Floor(Clock%ClockNumber%FullTime/1000)-(ClockHours*3600))/60)
}
Else
If Clock%ClockNumber%Type = Timer
{
ClockHours = % Floor(Floor(Clock%ClockNumber%TargetFullTime/1000)/3600)
ClockMinutes = % Floor((Floor(Clock%ClockNumber%TargetFullTime/1000)-(ClockHours*3600))/60)
}
Else
If Clock%ClockNumber%Type = AlarmClock
{
Clock%ClockNumber%FullTime = % FullCurrentTime
Clock%ClockNumber% = Started
ClockHours = % Floor(Floor(Clock%ClockNumber%FullTime/1000)/3600)
ClockMinutes = % Floor((Floor(Clock%ClockNumber%FullTime/1000)-(ClockHours*3600))/60)
}
}
If ClockHours < 10
Clock%ClockNumber%Time = % "0" ClockHours
Else
Clock%ClockNumber%Time = % ClockHours
If ClockMinutes < 10
Clock%ClockNumber%Time = % Clock%ClockNumber%Time ":" "0" ClockMinutes
Else
Clock%ClockNumber%Time = % Clock%ClockNumber%Time ":" ClockMinutes
If (GuiToggle = "On" OR Clock%ClockNumber% = "Started" OR Clock%ClockNumber% = "Exist")
Gui, Font, c%TextColor%
Else
If (Clock%ClockNumber% = "Ended" OR Clock%ClockNumber% = "EndedUpdate")
Gui, Font, c%TextColor2%
Gui, Add, Edit, vClock%ClockNumber%Time H%ElementSizeForWindow% ys yp, % Clock%ClockNumber%Time
Gui, Font, c%TextColor%
If GuiToggle = On
{
Gui, Add, Button, vClock%ClockNumber%Up H%ElementSizeForWindow% ys yp, /\
Gui, Add, Button, vClock%ClockNumber%Down H%ElementSizeForWindow% ys yp, \/
If Clock%ClockNumber%Type = StopWatch
Gui, Add, Button, vClock%ClockNumber%Type H%ElementSizeForWindow% ys yp, Секундомер
Else
If Clock%ClockNumber%Type = Timer
Gui, Add, Button, vClock%ClockNumber%Type H%ElementSizeForWindow% ys yp, Таймер
Else
If Clock%ClockNumber%Type = AlarmClock
Gui, Add, Button, vClock%ClockNumber%Type H%ElementSizeForWindow% ys yp, Будильник
Gui, Add, Button, vClock%ClockNumber%Delete H%ElementSizeForWindow% ys yp, Удалить
}
Continue
}
If GuiToggle =
WinSet, TransColor, %TransColor% 128
Else
If GuiToggle = On
WinSet, TransColor, %TransColor%
Gui, -Caption
If GuiToggle =
Gui, Show, x%XForWindow% y%YForWindow% NA
Else
If GuiToggle = On
Gui, Show, x%XForWindow% y%YForWindow%
WinGet, AHKWindow, ID, GTA5AHK, , ,
If GuiToggle =
{
GuiToggleLastStatus =
SetTimer, UpdateGui, 0
SetTimer, ClockDelimiterUpdate, 0
DllCall("ShowCursor", "Uint", 0)
}
Else
If GuiToggle = On
{
GuiToggleLastStatus = On
DllCall("ShowCursor", "Uint", 1)
}
}
$sc029:: ; ~
Send {sc029 Down}
ClockNumber =
TildeStatus = On
KeyWait, sc029, T0.2
If ErrorLevel = 0
{
KeyWait, sc029, D T0.2
If ErrorLevel = 0
{
If GuiToggle = On
{
GuiToggle =
SetTimer, RefreshGui, 0
}
Else
If GuiToggle =
{
GuiToggle = On
SetTimer, RefreshGui, 0
}
KeyWait, sc029
Send {sc029 Up}
TildeStatus =
Return
}
}
Else
If ErrorLevel
KeyWait, sc029
Send {sc029 Up}
TildeStatus =
If ClockNumber =
{
If GuiToggle =
If AHKWindowStatus =
{
AHKWindowStatus = Hide
Gui, Show, Hide
}
Else
If AHKWindowStatus = Hide
{
AHKWindowStatus =
Gui, Show, NA
}
}
Else
If ClockNumber <>
{
ClockOptions = ChangeClockStatus
SetTimer, ClockOperations, 0
SetTimer, UpdateGui, 10
}
Return
$sc002:: ; 1
Send {sc002 Down}
If TildeStatus = On
ClockNumber = %ClockNumber%1
KeyWait, sc002
Send {sc002 Up}
Return
$sc003:: ; 2
Send {sc003 Down}
If TildeStatus = On
ClockNumber = %ClockNumber%2
KeyWait, sc003
Send {sc003 Up}
Return
$sc004:: ; 3
Send {sc004 Down}
If TildeStatus = On
ClockNumber = %ClockNumber%3
KeyWait, sc004
Send {sc004 Up}
Return
$sc005:: ; 4
Send {sc005 Down}
If TildeStatus = On
ClockNumber = %ClockNumber%4
KeyWait, sc005
Send {sc005 Up}
Return
$sc006:: ; 5
Send {sc006 Down}
If TildeStatus = On
ClockNumber = %ClockNumber%5
KeyWait, sc006
Send {sc006 Up}
Return
$sc007:: ; 6
Send {sc007 Down}
If TildeStatus = On
ClockNumber = %ClockNumber%6
KeyWait, sc007
Send {sc007 Up}
Return
$sc008:: ; 7
Send {sc008 Down}
If TildeStatus = On
ClockNumber = %ClockNumber%7
KeyWait, sc008
Send {sc008 Up}
Return
$sc009:: ; 8
Send {sc009 Down}
If TildeStatus = On
ClockNumber = %ClockNumber%8
KeyWait, sc009
Send {sc009 Up}
Return
$sc00A:: ; 9
Send {sc00A Down}
If TildeStatus = On
ClockNumber = %ClockNumber%9
KeyWait, sc00A
Send {sc00A Up}
Return
$sc00B:: ; 0
Send {sc00B Down}
If TildeStatus = On
ClockNumber = %ClockNumber%0
KeyWait, sc00B
Send {sc00B Up}
Return
sc04E:: ; Num+
Send {sc04E Down}
If TildeStatus = On
{
SizeForWindow += 2
SetTimer, RefreshGui, 0
}
KeyWait, sc04E
Send {sc04E Up}
Return
sc04A:: ; Num-
Send {sc04A Down}
If TildeStatus = On
{
SizeForWindow -= 2
SetTimer, RefreshGui, 0
}
KeyWait, sc04A
Send {sc04A Up}
Return
WrappingGTA5AHK: ; Конец обтекания строк.
; Конец GTA5AHK