Test
Code:
TestNum = 300000 ; TestNum
Random,, WinExist("A")
Progress = 0
Progress, B
ANum := Round(TestNum / 100)
TimeCheck := A_TickCount
NumGenerate := A_TickCount
Loop %TestNum%
{
NumGenerate := NumGenerate_Window(NumGenerate) ; NumGenerate Check
If NumGenerate < 0
msgbox, error
; Random,, A_TickCount
; Random, NumGenerate, 0.000000, 1.000000
Msg .= NumGenerate "N"
NumCheck := Round(NumGenerate // 0.1)
NumC_%NumCheck% += 1
If Mod(A_Index, ANum) = 1
Progress, % Progress += 1
If (A_Index + 1 = TestNum)
NumGenerateRec := NumGenerate
}
;Clipboard := Msg
TimeCheck := A_TickCount - timecheck
CheckPos := InStr(Msg, ErrorLevel := "N" NumGenerateRec "N" NumGenerate "N")
NumC_S = 0
Loop
{
CheckPos := InStr(Msg, ErrorLevel, false, CheckPos += 1)
If CheckPos = 0
break
Else
NumC_S += 1
}
If NumC_S
Msg := "Error"
Else
Msg := "Done"
Msg .= A_Space " " Round(NumC_S / TestNum * 100, 1) "%`n<" TimeCheck ">`n"
Loop, 10
{
ANum := Mod(A_Index, 10)
Msg .= "[" Round(0.1 * ANum, 1) "*]" NumC_%ANum% "`n"
}
Progress, Off
MsgBox, 64, Number Generating Test, %Msg%`n%NumGenerate%
return
Original Version
Code:
NumGenerate(InputNum = 0, Num_S = 30000, RecLength = 1000)
{
static x = -1, CoordRec, ColorCheck, ColorRecList = "S0xFFFFFFS0x000000S"
global NumGenerate
If Mod(x += 1, Num_S) = 0
{
If NumGenerate =
{
If InputNum = 0
NumGenerate := ((A_MDay * 24 + A_Hour) * 60 + A_Min) * 60 + A_Sec
Else
NumGenerate := InputNum
}
MouseGetPos, CoordX, CoordY
Loop
{
PixelGetColor, ColorCheck, %CoordX%, %CoordY%, Slow
IfNotInString, ColorRecList, S%ColorCheck%S
{
If (StrLen(ColorRecList) > RecLength)
ColorRecList := "S0xFFFFFFS0x000000S" ColorCheck "S"
Else
ColorRecList .= ColorCheck "S"
CoordRec := (1 * A_ScreenWidth + CoordX) * A_ScreenHeight + CoordY
break
}
If Mod(A_Index, 2) = 1
CoordX := Mod(CoordX - Mod(A_Index, 31) + A_ScreenWidth, A_ScreenWidth)
Else
CoordY := Mod(CoordY - Mod(A_Index, 31) + A_ScreenHeight, A_ScreenHeight)
}
}
NumGenerate := Mod(NumGenerate * A_TickCount + ColorCheck, CoordRec)
return NumGenerate / CoordRec
}
Window Support Version
Code:
NumGenerate_Window(InputNum = 0, Num_S = 30000, RecLength = 1000)
{
static x = -1, CoordRec, ColorCheck, ColorRecList = "S0xFFFFFFS0x000000S", WindowRecList, WindowRecListN, WindowCheck1
global NumGenerate
If Mod(x += 1, Num_S) = 0
{
A_FormatIntegerRec := A_FormatInteger
SetFormat, INTEGER, D
If x = 0
{
If NumGenerate =
{
If InputNum = 0
NumGenerate := ((A_MDay * 24 + A_Hour) * 60 + A_Min) * 60 + A_Sec
Else
NumGenerate := InputNum
}
WinGet, WindowCheck, List
Loop %WindowCheck%
{
WinGetTitle, WindowCheck0, % "ahk_id " WindowCheck%A_Index%
WindowRec_S .= WindowCheck0
}
StringCheck := Mod(StrLen(WindowRec_S), 3 * 3)
StringTrimRight, WindowRec_S, WindowRec_S, StringCheck
WindowRecListN := StrLen(WindowRec_S) / 3
Loop, Parse, WindowRec_S
{
ANum := Floor(Mod(A_Index, WindowRecListN)) + 1
If StringCalc%ANum%
StringCalc%ANum% := StringCalc%ANum% * 256 + Asc(A_LoopField)
Else
StringCalc%ANum% := Asc(A_LoopField)
}
WindowRecList = N
Loop %WindowRecListN%
WindowRecList .= A_Index "_" StringCalc%A_Index% "N"
SetFormat, INTEGER, %A_FormatIntegerRec%
}
MouseGetPos, CoordX, CoordY
Loop
{
PixelGetColor, ColorCheck, %CoordX%, %CoordY%, Slow
IfNotInString, ColorRecList, S%ColorCheck%S
{
If (StrLen(ColorRecList) > RecLength)
ColorRecList := "S0xFFFFFFS0x000000S" ColorCheck "S"
Else
ColorRecList .= ColorCheck "S"
CoordRec := (1 * A_ScreenWidth + CoordX) * A_ScreenHeight + CoordY
break
}
If Mod(A_Index, 2) = 1
CoordX := Mod(CoordX - Mod(A_Index, 31) + A_ScreenWidth, A_ScreenWidth)
Else
CoordY := Mod(CoordY - Mod(A_Index, 31) + A_ScreenHeight, A_ScreenHeight)
}
RegExMatch(WindowRecList, "N" Floor(Mod(x // Num_S + 1, WindowRecListN) + 1) "_(\d+)N", WindowCheck)
}
NumGenerate := Mod(NumGenerate * (A_TickCount + WindowCheck1) + ColorCheck, CoordRec)
return NumGenerate / CoordRec
}
Special Version
Code:
NumGenerate_S(InputNum = 0, Num_S = 30000)
{
static x = -1, ColorCheck, CoordCheck, TimeCheck
global NumGenerate
If Mod(x += 1, Num_S) = 0
{
If NumGenerate =
{
NumGenerate := WinExist("A")
If InputNum
if InputNum is number
NumGenerate := InputNum
}
MouseGetPos, CoordX, CoordY
CoordCheck := (1 * A_ScreenWidth + CoordX) * A_ScreenHeight + CoordY
PixelGetColor, ColorCheck, %CoordX%, %CoordY%, Slow
TimeCheck := (((A_TickCount / 10 + A_MSec) * 60 + A_Sec) * 60 + A_Min) * 24 + A_Hour
}
NumGenerate := Mod(NumGenerate * ColorCheck + CoordCheck, TimeCheck)
return NumGenerate / TimeCheck
}
Calculation
Code:
NumCalc(a, b, c, d)
{
return Mod(a * b + c, d)
}
Previous Setting
Code:
CoordRec := CoordX * A_ScreenHeight + CoordY
; probably would not have good enough quality if CoordX not high enough
(in testing, CoordX would be high enough if right click on Tray icon)
Code:
; (Window Support Version)
Num_S = 30000000
; for comparison testing, but probably not good enough if in regular use