#RequireAdmin
#Region
#AutoIt3Wrapper_Icon=Bilder&Icons\icon.ico
#EndRegion
Func _ARRAYADD(ByRef $AVARRAY, $VVALUE)
If Not IsArray($AVARRAY) Then Return SetError(1, 0, -1)
If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, -1)
Local $IUBOUND = UBound($AVARRAY)
ReDim $AVARRAY[$IUBOUND + 1]
$AVARRAY[$IUBOUND] = $VVALUE
Return $IUBOUND
EndFunc
Func _ARRAYBINARYSEARCH(Const ByRef $AVARRAY, $VVALUE, $ISTART = 0, $IEND = 0)
If Not IsArray($AVARRAY) Then Return SetError(1, 0, -1)
If UBound($AVARRAY, 0) <> 1 Then Return SetError(5, 0, -1)
Local $IUBOUND = UBound($AVARRAY) - 1
If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
If $ISTART < 0 Then $ISTART = 0
If $ISTART > $IEND Then Return SetError(4, 0, -1)
Local $IMID = Int(($IEND + $ISTART) / 2)
If $AVARRAY[$ISTART] > $VVALUE Or $AVARRAY[$IEND] < $VVALUE Then Return SetError(2, 0, -1)
While $ISTART <= $IMID And $VVALUE <> $AVARRAY[$IMID]
If $VVALUE < $AVARRAY[$IMID] Then
$IEND = $IMID - 1
Else
$ISTART = $IMID + 1
EndIf
$IMID = Int(($IEND + $ISTART) / 2)
WEnd
If $ISTART > $IEND Then Return SetError(3, 0, -1)
Return $IMID
EndFunc
Func _ARRAYCOMBINATIONS(ByRef $AVARRAY, $ISET, $SDELIM = "")
If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
Local $IN = UBound($AVARRAY)
Local $IR = $ISET
Local $AIDX[$IR]
For $I = 0 To $IR - 1
$AIDX[$I] = $I
Next
Local $ITOTAL = __ARRAY_COMBINATIONS($IN, $IR)
Local $ILEFT = $ITOTAL
Local $ARESULT[$ITOTAL + 1]
$ARESULT[0] = $ITOTAL
Local $ICOUNT = 1
While $ILEFT > 0
__ARRAY_GETNEXT($IN, $IR, $ILEFT, $ITOTAL, $AIDX)
For $I = 0 To $ISET - 1
$ARESULT[$ICOUNT] &= $AVARRAY[$AIDX[$I]] & $SDELIM
Next
If $SDELIM <> "" Then $ARESULT[$ICOUNT] = StringTrimRight($ARESULT[$ICOUNT], 1)
$ICOUNT += 1
WEnd
Return $ARESULT
EndFunc
Func _ARRAYCONCATENATE(ByRef $AVARRAYTARGET, Const ByRef $AVARRAYSOURCE, $ISTART = 0)
If Not IsArray($AVARRAYTARGET) Then Return SetError(1, 0, 0)
If Not IsArray($AVARRAYSOURCE) Then Return SetError(2, 0, 0)
If UBound($AVARRAYTARGET, 0) <> 1 Then
If UBound($AVARRAYSOURCE, 0) <> 1 Then Return SetError(5, 0, 0)
Return SetError(3, 0, 0)
EndIf
If UBound($AVARRAYSOURCE, 0) <> 1 Then Return SetError(4, 0, 0)
Local $IUBOUNDTARGET = UBound($AVARRAYTARGET) - $ISTART, $IUBOUNDSOURCE = UBound($AVARRAYSOURCE)
ReDim $AVARRAYTARGET[$IUBOUNDTARGET + $IUBOUNDSOURCE]
For $I = $ISTART To $IUBOUNDSOURCE - 1
$AVARRAYTARGET[$IUBOUNDTARGET + $I] = $AVARRAYSOURCE[$I]
Next
Return $IUBOUNDTARGET + $IUBOUNDSOURCE
EndFunc
Func _ARRAYCREATE($V_0, $V_1 = 0, $V_2 = 0, $V_3 = 0, $V_4 = 0, $V_5 = 0, $V_6 = 0, $V_7 = 0, $V_8 = 0, $V_9 = 0, $V_10 = 0, $V_11 = 0, $V_12 = 0, $V_13 = 0, $V_14 = 0, $V_15 = 0, $V_16 = 0, $V_17 = 0, $V_18 = 0, $V_19 = 0, $V_20 = 0)
Local $AV_ARRAY[21] = [$V_0, $V_1, $V_2, $V_3, $V_4, $V_5, $V_6, $V_7, $V_8, $V_9, $V_10, $V_11, $V_12, $V_13, $V_14, $V_15, $V_16, $V_17, $V_18, $V_19, $V_20]
ReDim $AV_ARRAY[@NumParams]
Return $AV_ARRAY
EndFunc
Func _ARRAYDELETE(ByRef $AVARRAY, $IELEMENT)
If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
Local $IUBOUND = UBound($AVARRAY, 1) - 1
If Not $IUBOUND Then
$AVARRAY = ""
Return 0
EndIf
If $IELEMENT < 0 Then $IELEMENT = 0
If $IELEMENT > $IUBOUND Then $IELEMENT = $IUBOUND
Switch UBound($AVARRAY, 0)
Case 1
For $I = $IELEMENT To $IUBOUND - 1
$AVARRAY[$I] = $AVARRAY[$I + 1]
Next
ReDim $AVARRAY[$IUBOUND]
Case 2
Local $ISUBMAX = UBound($AVARRAY, 2) - 1
For $I = $IELEMENT To $IUBOUND - 1
For $J = 0 To $ISUBMAX
$AVARRAY[$I][$J] = $AVARRAY[$I + 1][$J]
Next
Next
ReDim $AVARRAY[$IUBOUND][$ISUBMAX + 1]
Case Else
Return SetError(3, 0, 0)
EndSwitch
Return $IUBOUND
EndFunc
Func _ARRAYDISPLAY(Const ByRef $AVARRAY, $STITLE = "Array: ListView Display", $IITEMLIMIT = -1, $ITRANSPOSE = 0, $SSEPARATOR = "", $SREPLACE = "|", $SHEADER = "")
If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
Local $IDIMENSION = UBound($AVARRAY, 0), $IUBOUND = UBound($AVARRAY, 1) - 1, $ISUBMAX = UBound($AVARRAY, 2) - 1
If $IDIMENSION > 2 Then Return SetError(2, 0, 0)
If $SSEPARATOR = "" Then $SSEPARATOR = Chr(124)
If _ARRAYSEARCH($AVARRAY, $SSEPARATOR, 0, 0, 0, 1) <> -1 Then
For $X = 1 To 255
If $X >= 32 And $X <= 127 Then ContinueLoop
Local $SFIND = _ARRAYSEARCH($AVARRAY, Chr($X), 0, 0, 0, 1)
If $SFIND = -1 Then
$SSEPARATOR = Chr($X)
ExitLoop
EndIf
Next
EndIf
Local $VTMP, $IBUFFER = 64
Local $ICOLLIMIT = 250
Local $IONEVENTMODE = Opt("GUIOnEventMode", 0), $SDATASEPARATORCHAR = Opt("GUIDataSeparatorChar", $SSEPARATOR)
If $ISUBMAX < 0 Then $ISUBMAX = 0
If $ITRANSPOSE Then
$VTMP = $IUBOUND
$IUBOUND = $ISUBMAX
$ISUBMAX = $VTMP
EndIf
If $ISUBMAX > $ICOLLIMIT Then $ISUBMAX = $ICOLLIMIT
If $IITEMLIMIT < 1 Then $IITEMLIMIT = $IUBOUND
If $IUBOUND > $IITEMLIMIT Then $IUBOUND = $IITEMLIMIT
If $SHEADER = "" Then
$SHEADER = "Row "
For $I = 0 To $ISUBMAX
$SHEADER &= $SSEPARATOR & "Col " & $I
Next
EndIf
Local $AVARRAYTEXT[$IUBOUND + 1]
For $I = 0 To $IUBOUND
$AVARRAYTEXT[$I] = "[" & $I & "]"
For $J = 0 To $ISUBMAX
If $IDIMENSION = 1 Then
If $ITRANSPOSE Then
$VTMP = $AVARRAY[$J]
Else
$VTMP = $AVARRAY[$I]
EndIf
Else
If $ITRANSPOSE Then
$VTMP = $AVARRAY[$J][$I]
Else
$VTMP = $AVARRAY[$I][$J]
EndIf
EndIf
$VTMP = StringReplace($VTMP, $SSEPARATOR, $SREPLACE, 0, 1)
$AVARRAYTEXT[$I] &= $SSEPARATOR & $VTMP
$VTMP = StringLen($VTMP)
If $VTMP > $IBUFFER Then $IBUFFER = $VTMP
Next
Next
$IBUFFER += 1
Local Const $_ARRAYCONSTANT_GUI_DOCKBORDERS = 102
Local Const $_ARRAYCONSTANT_GUI_DOCKBOTTOM = 64
Local Const $_ARRAYCONSTANT_GUI_DOCKHEIGHT = 512
Local Const $_ARRAYCONSTANT_GUI_DOCKLEFT = 2
Local Const $_ARRAYCONSTANT_GUI_DOCKRIGHT = 4
Local Const $_ARRAYCONSTANT_GUI_EVENT_CLOSE = -3
Local Const $_ARRAYCONSTANT_LVIF_PARAM = 4
Local Const $_ARRAYCONSTANT_LVIF_TEXT = 1
Local Const $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH = (4096 + 29)
Local Const $_ARRAYCONSTANT_LVM_GETITEMCOUNT = (4096 + 4)
Local Const $_ARRAYCONSTANT_LVM_GETITEMSTATE = (4096 + 44)
Local Const $_ARRAYCONSTANT_LVM_INSERTITEMW = (4096 + 77)
Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (4096 + 54)
Local Const $_ARRAYCONSTANT_LVM_SETITEMW = (4096 + 76)
Local Const $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT = 32
Local Const $_ARRAYCONSTANT_LVS_EX_GRIDLINES = 1
Local Const $_ARRAYCONSTANT_LVS_SHOWSELALWAYS = 8
Local Const $_ARRAYCONSTANT_WS_EX_CLIENTEDGE = 512
Local Const $_ARRAYCONSTANT_WS_MAXIMIZEBOX = 65536
Local Const $_ARRAYCONSTANT_WS_MINIMIZEBOX = 131072
Local Const $_ARRAYCONSTANT_WS_SIZEBOX = 262144
Local Const $_ARRAYCONSTANT_TAGLVITEM = "int Mask;int Item;int SubItem;int State;int StateMask;ptr Text;int TextMax;int Image;int Param;int Indent;int GroupID;int Columns;ptr pColumns"
Local $IADDMASK = BitOR($_ARRAYCONSTANT_LVIF_TEXT, $_ARRAYCONSTANT_LVIF_PARAM)
Local $TBUFFER = DllStructCreate("wchar Text[" & $IBUFFER & "]"), $PBUFFER = DllStructGetPtr($TBUFFER)
Local $TITEM = DllStructCreate($_ARRAYCONSTANT_TAGLVITEM), $PITEM = DllStructGetPtr($TITEM)
DllStructSetData($TITEM, "Param", 0)
DllStructSetData($TITEM, "Text", $PBUFFER)
DllStructSetData($TITEM, "TextMax", $IBUFFER)
Local $IWIDTH = 640, $IHEIGHT = 480
Local $HGUI = GUICreate($STITLE, $IWIDTH, $IHEIGHT, Default, Default, BitOR($_ARRAYCONSTANT_WS_SIZEBOX, $_ARRAYCONSTANT_WS_MINIMIZEBOX, $_ARRAYCONSTANT_WS_MAXIMIZEBOX))
Local $AIGUISIZE = WinGetClientSize($HGUI)
Local $HLISTVIEW = GUICtrlCreateListView($SHEADER, 0, 0, $AIGUISIZE[0], $AIGUISIZE[1] - 26, $_ARRAYCONSTANT_LVS_SHOWSELALWAYS)
Local $HCOPY = GUICtrlCreateButton("Copy Selected", 3, $AIGUISIZE[1] - 23, $AIGUISIZE[0] - 6, 20)
GUICtrlSetResizing($HLISTVIEW, $_ARRAYCONSTANT_GUI_DOCKBORDERS)
GUICtrlSetResizing($HCOPY, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_GRIDLINES, $_ARRAYCONSTANT_LVS_EX_GRIDLINES)
GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT)
GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE)
Local $AITEM
For $I = 0 To $IUBOUND
If GUICtrlCreateListViewItem($AVARRAYTEXT[$I], $HLISTVIEW) = 0 Then
$AITEM = StringSplit($AVARRAYTEXT[$I], $SSEPARATOR)
DllStructSetData($TBUFFER, "Text", $AITEM[1])
DllStructSetData($TITEM, "Item", $I)
DllStructSetData($TITEM, "SubItem", 0)
DllStructSetData($TITEM, "Mask", $IADDMASK)
GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_INSERTITEMW, 0, $PITEM)
DllStructSetData($TITEM, "Mask", $_ARRAYCONSTANT_LVIF_TEXT)
For $J = 2 To $AITEM[0]
DllStructSetData($TBUFFER, "Text", $AITEM[$J])
DllStructSetData($TITEM, "SubItem", $J - 1)
GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_SETITEMW, 0, $PITEM)
Next
EndIf
Next
$IWIDTH = 0
For $I = 0 To $ISUBMAX + 1
$IWIDTH += GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $I, 0)
Next
If $IWIDTH < 250 Then $IWIDTH = 230
$IWIDTH += 20
If $IWIDTH > @DesktopWidth Then $IWIDTH = @DesktopWidth - 100
WinMove($HGUI, "", (@DesktopWidth - $IWIDTH) / 2, Default, $IWIDTH)
GUISetState(@SW_SHOW, $HGUI)
While 1
Switch GUIGetMsg()
Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
ExitLoop
Case $HCOPY
Local $SCLIP = ""
Local $AICURITEMS[1] = [0]
For $I = 0 To GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0)
If GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $I, 2) Then
$AICURITEMS[0] += 1
ReDim $AICURITEMS[$AICURITEMS[0] + 1]
$AICURITEMS[$AICURITEMS[0]] = $I
EndIf
Next
If Not $AICURITEMS[0] Then
For $SITEM In $AVARRAYTEXT
$SCLIP &= $SITEM & @CRLF
Next
Else
For $I = 1 To UBound($AICURITEMS) - 1
$SCLIP &= $AVARRAYTEXT[$AICURITEMS[$I]] & @CRLF
Next
EndIf
ClipPut($SCLIP)
EndSwitch
WEnd
GUIDelete($HGUI)
Opt("GUIOnEventMode", $IONEVENTMODE)
Opt("GUIDataSeparatorChar", $SDATASEPARATORCHAR)
Return 1
EndFunc
Func _ARRAYFINDALL(Const ByRef $AVARRAY, $VVALUE, $ISTART = 0, $IEND = 0, $ICASE = 0, $IPARTIAL = 0, $ISUBITEM = 0)
$ISTART = _ARRAYSEARCH($AVARRAY, $VVALUE, $ISTART, $IEND, $ICASE, $IPARTIAL, 1, $ISUBITEM)
If @error Then Return SetError(@error, 0, -1)
Local $IINDEX = 0, $AVRESULT[UBound($AVARRAY)]
Do
$AVRESULT[$IINDEX] = $ISTART
$IINDEX += 1
$ISTART = _ARRAYSEARCH($AVARRAY, $VVALUE, $ISTART + 1, $IEND, $ICASE, $IPARTIAL, 1, $ISUBITEM)
Until @error
ReDim $AVRESULT[$IINDEX]
Return $AVRESULT
EndFunc
Func _ARRAYINSERT(ByRef $AVARRAY, $IELEMENT, $VVALUE = "")
If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
Local $IUBOUND = UBound($AVARRAY) + 1
ReDim $AVARRAY[$IUBOUND]
For $I = $IUBOUND - 1 To $IELEMENT + 1 Step -1
$AVARRAY[$I] = $AVARRAY[$I - 1]
Next
$AVARRAY[$IELEMENT] = $VVALUE
Return $IUBOUND
EndFunc
Func _ARRAYMAX(Const ByRef $AVARRAY, $ICOMPNUMERIC = 0, $ISTART = 0, $IEND = 0)
Local $IRESULT = _ARRAYMAXINDEX($AVARRAY, $ICOMPNUMERIC, $ISTART, $IEND)
If @error Then Return SetError(@error, 0, "")
Return $AVARRAY[$IRESULT]
EndFunc
Func _ARRAYMAXINDEX(Const ByRef $AVARRAY, $ICOMPNUMERIC = 0, $ISTART = 0, $IEND = 0)
If Not IsArray($AVARRAY) Or UBound($AVARRAY, 0) <> 1 Then Return SetError(1, 0, -1)
If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, -1)
Local $IUBOUND = UBound($AVARRAY) - 1
If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
If $ISTART < 0 Then $ISTART = 0
If $ISTART > $IEND Then Return SetError(2, 0, -1)
Local $IMAXINDEX = $ISTART
If $ICOMPNUMERIC Then
For $I = $ISTART To $IEND
If Number($AVARRAY[$IMAXINDEX]) < Number($AVARRAY[$I]) Then $IMAXINDEX = $I
Next
Else
For $I = $ISTART To $IEND
If $AVARRAY[$IMAXINDEX] < $AVARRAY[$I] Then $IMAXINDEX = $I
Next
EndIf
Return $IMAXINDEX
EndFunc
Func _ARRAYMIN(Const ByRef $AVARRAY, $ICOMPNUMERIC = 0, $ISTART = 0, $IEND = 0)
Local $IRESULT = _ARRAYMININDEX($AVARRAY, $ICOMPNUMERIC, $ISTART, $IEND)
If @error Then Return SetError(@error, 0, "")
Return $AVARRAY[$IRESULT]
EndFunc
Func _ARRAYMININDEX(Const ByRef $AVARRAY, $ICOMPNUMERIC = 0, $ISTART = 0, $IEND = 0)
If Not IsArray($AVARRAY) Then Return SetError(1, 0, -1)
If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, -1)
Local $IUBOUND = UBound($AVARRAY) - 1
If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
If $ISTART < 0 Then $ISTART = 0
If $ISTART > $IEND Then Return SetError(2, 0, -1)
Local $IMININDEX = $ISTART
If $ICOMPNUMERIC Then
For $I = $ISTART To $IEND
If Number($AVARRAY[$IMININDEX]) > Number($AVARRAY[$I]) Then $IMININDEX = $I
Next
Else
For $I = $ISTART To $IEND
If $AVARRAY[$IMININDEX] > $AVARRAY[$I] Then $IMININDEX = $I
Next
EndIf
Return $IMININDEX
EndFunc
Func _ARRAYPERMUTE(ByRef $AVARRAY, $SDELIM = "")
If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
Local $ISIZE = UBound($AVARRAY), $IFACTORIAL = 1, $AIDX[$ISIZE], $ARESULT[1], $ICOUNT = 1
For $I = 0 To $ISIZE - 1
$AIDX[$I] = $I
Next
For $I = $ISIZE To 1 Step -1
$IFACTORIAL *= $I
Next
ReDim $ARESULT[$IFACTORIAL + 1]
$ARESULT[0] = $IFACTORIAL
__ARRAY_EXETERINTERNAL($AVARRAY, 0, $ISIZE, $SDELIM, $AIDX, $ARESULT, $ICOUNT)
Return $ARESULT
EndFunc
Func _ARRAYPOP(ByRef $AVARRAY)
IF (Not IsArray($AVARRAY)) Then Return SetError(1, 0, "")
If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, "")
Local $IUBOUND = UBound($AVARRAY) - 1, $SLASTVAL = $AVARRAY[$IUBOUND]
If Not $IUBOUND Then
$AVARRAY = ""
Else
ReDim $AVARRAY[$IUBOUND]
EndIf
Return $SLASTVAL
EndFunc
Func _ARRAYPUSH(ByRef $AVARRAY, $VVALUE, $IDIRECTION = 0)
IF (Not IsArray($AVARRAY)) Then Return SetError(1, 0, 0)
If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, 0)
Local $IUBOUND = UBound($AVARRAY) - 1
If IsArray($VVALUE) Then
Local $IUBOUNDS = UBound($VVALUE)
IF ($IUBOUNDS - 1) > $IUBOUND Then Return SetError(2, 0, 0)
If $IDIRECTION Then
For $I = $IUBOUND To $IUBOUNDS Step -1
$AVARRAY[$I] = $AVARRAY[$I - $IUBOUNDS]
Next
For $I = 0 To $IUBOUNDS - 1
$AVARRAY[$I] = $VVALUE[$I]
Next
Else
For $I = 0 To $IUBOUND - $IUBOUNDS
$AVARRAY[$I] = $AVARRAY[$I + $IUBOUNDS]
Next
For $I = 0 To $IUBOUNDS - 1
$AVARRAY[$I + $IUBOUND - $IUBOUNDS + 1] = $VVALUE[$I]
Next
EndIf
Else
If $IDIRECTION Then
For $I = $IUBOUND To 1 Step -1
$AVARRAY[$I] = $AVARRAY[$I - 1]
Next
$AVARRAY[0] = $VVALUE
Else
For $I = 0 To $IUBOUND - 1
$AVARRAY[$I] = $AVARRAY[$I + 1]
Next
$AVARRAY[$IUBOUND] = $VVALUE
EndIf
EndIf
Return 1
EndFunc
Func _ARRAYREVERSE(ByRef $AVARRAY, $ISTART = 0, $IEND = 0)
If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, 0)
Local $VTMP, $IUBOUND = UBound($AVARRAY) - 1
If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
If $ISTART < 0 Then $ISTART = 0
If $ISTART > $IEND Then Return SetError(2, 0, 0)
For $I = $ISTART To Int(($ISTART + $IEND - 1) / 2)
$VTMP = $AVARRAY[$I]
$AVARRAY[$I] = $AVARRAY[$IEND]
$AVARRAY[$IEND] = $VTMP
$IEND -= 1
Next
Return 1
EndFunc
Func _ARRAYSEARCH(Const ByRef $AVARRAY, $VVALUE, $ISTART = 0, $IEND = 0, $ICASE = 0, $IPARTIAL = 0, $IFORWARD = 1, $ISUBITEM = -1)
If Not IsArray($AVARRAY) Then Return SetError(1, 0, -1)
If UBound($AVARRAY, 0) > 2 Or UBound($AVARRAY, 0) < 1 Then Return SetError(2, 0, -1)
Local $IUBOUND = UBound($AVARRAY) - 1
If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
If $ISTART < 0 Then $ISTART = 0
If $ISTART > $IEND Then Return SetError(4, 0, -1)
Local $ISTEP = 1
If Not $IFORWARD Then
Local $ITMP = $ISTART
$ISTART = $IEND
$IEND = $ITMP
$ISTEP = -1
EndIf
Switch UBound($AVARRAY, 0)
Case 1
If Not $IPARTIAL Then
If Not $ICASE Then
For $I = $ISTART To $IEND Step $ISTEP
If $AVARRAY[$I] = $VVALUE Then Return $I
Next
Else
For $I = $ISTART To $IEND Step $ISTEP
If $AVARRAY[$I] == $VVALUE Then Return $I
Next
EndIf
Else
For $I = $ISTART To $IEND Step $ISTEP
If StringInStr($AVARRAY[$I], $VVALUE, $ICASE) > 0 Then Return $I
Next
EndIf
Case 2
Local $IUBOUNDSUB = UBound($AVARRAY, 2) - 1
If $ISUBITEM > $IUBOUNDSUB Then $ISUBITEM = $IUBOUNDSUB
If $ISUBITEM < 0 Then
$ISUBITEM = 0
Else
$IUBOUNDSUB = $ISUBITEM
EndIf
For $J = $ISUBITEM To $IUBOUNDSUB
If Not $IPARTIAL Then
If Not $ICASE Then
For $I = $ISTART To $IEND Step $ISTEP
If $AVARRAY[$I][$J] = $VVALUE Then Return $I
Next
Else
For $I = $ISTART To $IEND Step $ISTEP
If $AVARRAY[$I][$J] == $VVALUE Then Return $I
Next
EndIf
Else
For $I = $ISTART To $IEND Step $ISTEP
If StringInStr($AVARRAY[$I][$J], $VVALUE, $ICASE) > 0 Then Return $I
Next
EndIf
Next
Case Else
Return SetError(7, 0, -1)
EndSwitch
Return SetError(6, 0, -1)
EndFunc
Func _ARRAYSORT(ByRef $AVARRAY, $IDESCENDING = 0, $ISTART = 0, $IEND = 0, $ISUBITEM = 0)
If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
Local $IUBOUND = UBound($AVARRAY) - 1
If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
If $ISTART < 0 Then $ISTART = 0
If $ISTART > $IEND Then Return SetError(2, 0, 0)
Switch UBound($AVARRAY, 0)
Case 1
__ARRAYQUICKSORT1D($AVARRAY, $ISTART, $IEND)
If $IDESCENDING Then _ARRAYREVERSE($AVARRAY, $ISTART, $IEND)
Case 2
Local $ISUBMAX = UBound($AVARRAY, 2) - 1
If $ISUBITEM > $ISUBMAX Then Return SetError(3, 0, 0)
If $IDESCENDING Then
$IDESCENDING = -1
Else
$IDESCENDING = 1
EndIf
__ARRAYQUICKSORT2D($AVARRAY, $IDESCENDING, $ISTART, $IEND, $ISUBITEM, $ISUBMAX)
Case Else
Return SetError(4, 0, 0)
EndSwitch
Return 1
EndFunc
Func __ARRAYQUICKSORT1D(ByRef $AVARRAY, ByRef $ISTART, ByRef $IEND)
If $IEND <= $ISTART Then Return
Local $VTMP
IF ($IEND - $ISTART) < 15 Then
Local $VCUR
For $I = $ISTART + 1 To $IEND
$VTMP = $AVARRAY[$I]
If IsNumber($VTMP) Then
For $J = $I - 1 To $ISTART Step -1
$VCUR = $AVARRAY[$J]
IF ($VTMP >= $VCUR And IsNumber($VCUR)) OR (Not IsNumber($VCUR) And StringCompare($VTMP, $VCUR) >= 0) Then ExitLoop
$AVARRAY[$J + 1] = $VCUR
Next
Else
For $J = $I - 1 To $ISTART Step -1
IF (StringCompare($VTMP, $AVARRAY[$J]) >= 0) Then ExitLoop
$AVARRAY[$J + 1] = $AVARRAY[$J]
Next
EndIf
$AVARRAY[$J + 1] = $VTMP
Next
Return
EndIf
Local $L = $ISTART, $R = $IEND, $VPIVOT = $AVARRAY[Int(($ISTART + $IEND) / 2)], $FNUM = IsNumber($VPIVOT)
Do
If $FNUM Then
WHILE ($AVARRAY[$L] < $VPIVOT And IsNumber($AVARRAY[$L])) OR (Not IsNumber($AVARRAY[$L]) And StringCompare($AVARRAY[$L], $VPIVOT) < 0)
$L += 1
WEnd
WHILE ($AVARRAY[$R] > $VPIVOT And IsNumber($AVARRAY[$R])) OR (Not IsNumber($AVARRAY[$R]) And StringCompare($AVARRAY[$R], $VPIVOT) > 0)
$R -= 1
WEnd
Else
WHILE (StringCompare($AVARRAY[$L], $VPIVOT) < 0)
$L += 1
WEnd
WHILE (StringCompare($AVARRAY[$R], $VPIVOT) > 0)
$R -= 1
WEnd
EndIf
If $L <= $R Then
$VTMP = $AVARRAY[$L]
$AVARRAY[$L] = $AVARRAY[$R]
$AVARRAY[$R] = $VTMP
$L += 1
$R -= 1
EndIf
Until $L > $R
__ARRAYQUICKSORT1D($AVARRAY, $ISTART, $R)
__ARRAYQUICKSORT1D($AVARRAY, $L, $IEND)
EndFunc
Func __ARRAYQUICKSORT2D(ByRef $AVARRAY, ByRef $ISTEP, ByRef $ISTART, ByRef $IEND, ByRef $ISUBITEM, ByRef $ISUBMAX)
If $IEND <= $ISTART Then Return
Local $VTMP, $L = $ISTART, $R = $IEND, $VPIVOT = $AVARRAY[Int(($ISTART + $IEND) / 2)][$ISUBITEM], $FNUM = IsNumber($VPIVOT)
Do
If $FNUM Then
WHILE ($ISTEP * ($AVARRAY[$L][$ISUBITEM] - $VPIVOT) < 0 And IsNumber($AVARRAY[$L][$ISUBITEM])) OR (Not IsNumber($AVARRAY[$L][$ISUBITEM]) And $ISTEP * StringCompare($AVARRAY[$L][$ISUBITEM], $VPIVOT) < 0)
$L += 1
WEnd
WHILE ($ISTEP * ($AVARRAY[$R][$ISUBITEM] - $VPIVOT) > 0 And IsNumber($AVARRAY[$R][$ISUBITEM])) OR (Not IsNumber($AVARRAY[$R][$ISUBITEM]) And $ISTEP * StringCompare($AVARRAY[$R][$ISUBITEM], $VPIVOT) > 0)
$R -= 1
WEnd
Else
WHILE ($ISTEP * StringCompare($AVARRAY[$L][$ISUBITEM], $VPIVOT) < 0)
$L += 1
WEnd
WHILE ($ISTEP * StringCompare($AVARRAY[$R][$ISUBITEM], $VPIVOT) > 0)
$R -= 1
WEnd
EndIf
If $L <= $R Then
For $I = 0 To $ISUBMAX
$VTMP = $AVARRAY[$L][$I]
$AVARRAY[$L][$I] = $AVARRAY[$R][$I]
$AVARRAY[$R][$I] = $VTMP
Next
$L += 1
$R -= 1
EndIf
Until $L > $R
__ARRAYQUICKSORT2D($AVARRAY, $ISTEP, $ISTART, $R, $ISUBITEM, $ISUBMAX)
__ARRAYQUICKSORT2D($AVARRAY, $ISTEP, $L, $IEND, $ISUBITEM, $ISUBMAX)
EndFunc
Func _ARRAYSWAP(ByRef $VITEM1, ByRef $VITEM2)
Local $VTMP = $VITEM1
$VITEM1 = $VITEM2
$VITEM2 = $VTMP
EndFunc
Func _ARRAYTOCLIP(Const ByRef $AVARRAY, $ISTART = 0, $IEND = 0)
Local $SRESULT = _ARRAYTOSTRING($AVARRAY, @CR, $ISTART, $IEND)
If @error Then Return SetError(@error, 0, 0)
Return ClipPut($SRESULT)
EndFunc
Func _ARRAYTOSTRING(Const ByRef $AVARRAY, $SDELIM = "|", $ISTART = 0, $IEND = 0)
If Not IsArray($AVARRAY) Then Return SetError(1, 0, "")
If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, "")
Local $SRESULT, $IUBOUND = UBound($AVARRAY) - 1
If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
If $ISTART < 0 Then $ISTART = 0
If $ISTART > $IEND Then Return SetError(2, 0, "")
For $I = $ISTART To $IEND
$SRESULT &= $AVARRAY[$I] & $SDELIM
Next
Return StringTrimRight($SRESULT, StringLen($SDELIM))
EndFunc
Func _ARRAYTRIM(ByRef $AVARRAY, $ITRIMNUM, $IDIRECTION = 0, $ISTART = 0, $IEND = 0)
If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
Local $IUBOUND = UBound($AVARRAY) - 1
If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
If $ISTART < 0 Then $ISTART = 0
If $ISTART > $IEND Then Return SetError(5, 0, 0)
If $IDIRECTION Then
For $I = $ISTART To $IEND
$AVARRAY[$I] = StringTrimRight($AVARRAY[$I], $ITRIMNUM)
Next
Else
For $I = $ISTART To $IEND
$AVARRAY[$I] = StringTrimLeft($AVARRAY[$I], $ITRIMNUM)
Next
EndIf
Return 1
EndFunc
Func _ARRAYUNIQUE($AARRAY, $IDIMENSION = 1, $IBASE = 0, $ICASE = 0, $VDELIM = "|")
Local $IUBOUNDDIM
If $VDELIM = "|" Then $VDELIM = Chr(1)
If Not IsArray($AARRAY) Then Return SetError(1, 0, 0)
If Not $IDIMENSION > 0 Then
Return SetError(3, 0, 0)
Else
$IUBOUNDDIM = UBound($AARRAY, 1)
If @error Then Return SetError(3, 0, 0)
If $IDIMENSION > 1 Then
Local $AARRAYTMP[1]
For $I = 0 To $IUBOUNDDIM - 1
_ARRAYADD($AARRAYTMP, $AARRAY[$I][$IDIMENSION - 1])
Next
_ARRAYDELETE($AARRAYTMP, 0)
Else
If UBound($AARRAY, 0) = 1 Then
Dim $AARRAYTMP[1]
For $I = 0 To $IUBOUNDDIM - 1
_ARRAYADD($AARRAYTMP, $AARRAY[$I])
Next
_ARRAYDELETE($AARRAYTMP, 0)
Else
Dim $AARRAYTMP[1]
For $I = 0 To $IUBOUNDDIM - 1
_ARRAYADD($AARRAYTMP, $AARRAY[$I][$IDIMENSION - 1])
Next
_ARRAYDELETE($AARRAYTMP, 0)
EndIf
EndIf
EndIf
Local $SHOLD
For $ICC = $IBASE To UBound($AARRAYTMP) - 1
If Not StringInStr($VDELIM & $SHOLD, $VDELIM & $AARRAYTMP[$ICC] & $VDELIM, $ICASE) Then $SHOLD &= $AARRAYTMP[$ICC] & $VDELIM
Next
If $SHOLD Then
$AARRAYTMP = StringSplit(StringTrimRight($SHOLD, StringLen($VDELIM)), $VDELIM, 1)
Return $AARRAYTMP
EndIf
Return SetError(2, 0, 0)
EndFunc
Func __ARRAY_EXETERINTERNAL(ByRef $AVARRAY, $ISTART, $ISIZE, $SDELIM, ByRef $AIDX, ByRef $ARESULT, ByRef $ICOUNT)
If $ISTART == $ISIZE - 1 Then
For $I = 0 To $ISIZE - 1
$ARESULT[$ICOUNT] &= $AVARRAY[$AIDX[$I]] & $SDELIM
Next
If $SDELIM <> "" Then $ARESULT[$ICOUNT] = StringTrimRight($ARESULT[$ICOUNT], 1)
$ICOUNT += 1
Else
Local $ITEMP
For $I = $ISTART To $ISIZE - 1
$ITEMP = $AIDX[$I]
$AIDX[$I] = $AIDX[$ISTART]
$AIDX[$ISTART] = $ITEMP
__ARRAY_EXETERINTERNAL($AVARRAY, $ISTART + 1, $ISIZE, $SDELIM, $AIDX, $ARESULT, $ICOUNT)
$AIDX[$ISTART] = $AIDX[$I]
$AIDX[$I] = $ITEMP
Next
EndIf
EndFunc
Func __ARRAY_COMBINATIONS($IN, $IR)
Local $I_TOTAL = 1
For $I = $IR To 1 Step -1
$I_TOTAL *= ($IN / $I)
$IN -= 1
Next
Return Round($I_TOTAL)
EndFunc
Func __ARRAY_GETNEXT($IN, $IR, ByRef $ILEFT, $ITOTAL, ByRef $AIDX)
If $ILEFT == $ITOTAL Then
$ILEFT -= 1
Return
EndIf
Local $I = $IR - 1
While $AIDX[$I] == $IN - $IR + $I
$I -= 1
WEnd
$AIDX[$I] += 1
For $J = $I + 1 To $IR - 1
$AIDX[$J] = $AIDX[$I] + $J - $I
Next
$ILEFT -= 1
EndFunc
#Region _Memory
Func _MEMORYOPEN($IV_PID, $IV_DESIREDACCESS = 2035711, $IV_INHERITHANDLE = 1)
If Not ProcessExists($IV_PID) Then
SetError(1)
Return 0
EndIf
Local $AH_HANDLE[2] = [DllOpen("kernel32.dll")]
If @error Then
SetError(2)
Return 0
EndIf
Local $AV_OPENPROCESS = DllCall($AH_HANDLE[0], "int", "OpenProcess", "int", $IV_DESIREDACCESS, "int", $IV_INHERITHANDLE, "int", $IV_PID)
If @error Then
DllClose($AH_HANDLE[0])
SetError(3)
Return 0
EndIf
$AH_HANDLE[1] = $AV_OPENPROCESS[0]
Return $AH_HANDLE
EndFunc
Func _MEMORYREAD($IV_ADDRESS, $AH_HANDLE, $SV_TYPE = "dword")
If Not IsArray($AH_HANDLE) Then
SetError(1)
Return 0
EndIf
Local $V_BUFFER = DllStructCreate($SV_TYPE)
If @error Then
SetError(@error + 1)
Return 0
EndIf
DllCall($AH_HANDLE[0], "int", "ReadProcessMemory", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER), "int", "")
If Not @error Then
Local $V_VALUE = DllStructGetData($V_BUFFER, 1)
Return $V_VALUE
Else
SetError(6)
Return 0
EndIf
EndFunc
Func _MEMORYWRITE($IV_ADDRESS, $AH_HANDLE, $V_DATA, $SV_TYPE = "dword")
If Not IsArray($AH_HANDLE) Then
SetError(1)
Return 0
EndIf
Local $V_BUFFER = DllStructCreate($SV_TYPE)
If @error Then
SetError(@error + 1)
Return 0
Else
DllStructSetData($V_BUFFER, 1, $V_DATA)
If @error Then
SetError(6)
Return 0
EndIf
EndIf
DllCall($AH_HANDLE[0], "int", "WriteProcessMemory", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER), "int", "")
If Not @error Then
Return 1
Else
SetError(7)
Return 0
EndIf
EndFunc
Func _MEMORYCLOSE($AH_HANDLE)
If Not IsArray($AH_HANDLE) Then
SetError(1)
Return 0
EndIf
DllCall($AH_HANDLE[0], "int", "CloseHandle", "int", $AH_HANDLE[1])
If Not @error Then
DllClose($AH_HANDLE[0])
Return 1
Else
DllClose($AH_HANDLE[0])
SetError(2)
Return 0
EndIf
EndFunc
Func SETPRIVILEGE($PRIVILEGE, $BENABLE)
Const $TOKEN_ADJUST_PRIVILEGES = 32
Const $TOKEN_QUERY = 8
Const $SE_PRIVILEGE_ENABLED = 2
Local $HTOKEN, $SP_AUXRET, $SP_RET, $HCURRPROCESS, $NTOKENS, $NTOKENINDEX, $PRIV
$NTOKENS = 1
$LUID = DllStructCreate("dword;int")
If IsArray($PRIVILEGE) Then $NTOKENS = UBound($PRIVILEGE)
$TOKEN_PRIVILEGES = DllStructCreate("dword;dword[" & (3 * $NTOKENS) & "]")
$NEWTOKEN_PRIVILEGES = DllStructCreate("dword;dword[" & (3 * $NTOKENS) & "]")
$HCURRPROCESS = DllCall("kernel32.dll", "hwnd", "GetCurrentProcess")
$SP_AUXRET = DllCall("advapi32.dll", "int", "OpenProcessToken", "hwnd", $HCURRPROCESS[0], "int", BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY), "int_ptr", 0)
If $SP_AUXRET[0] Then
$HTOKEN = $SP_AUXRET[3]
DllStructSetData($TOKEN_PRIVILEGES, 1, 1)
$NTOKENINDEX = 1
While $NTOKENINDEX <= $NTOKENS
If IsArray($PRIVILEGE) Then
$PRIV = $PRIVILEGE[$NTOKENINDEX - 1]
Else
$PRIV = $PRIVILEGE
EndIf
$RET = DllCall("advapi32.dll", "int", "LookupPrivilegeValue", "str", "", "str", $PRIV, "ptr", DllStructGetPtr($LUID))
If $RET[0] Then
If $BENABLE Then
DllStructSetData($TOKEN_PRIVILEGES, 2, $SE_PRIVILEGE_ENABLED, (3 * $NTOKENINDEX))
Else
DllStructSetData($TOKEN_PRIVILEGES, 2, 0, (3 * $NTOKENINDEX))
EndIf
DllStructSetData($TOKEN_PRIVILEGES, 2, DllStructGetData($LUID, 1), (3 * ($NTOKENINDEX - 1)) + 1)
DllStructSetData($TOKEN_PRIVILEGES, 2, DllStructGetData($LUID, 2), (3 * ($NTOKENINDEX - 1)) + 2)
DllStructSetData($LUID, 1, 0)
DllStructSetData($LUID, 2, 0)
EndIf
$NTOKENINDEX += 1
WEnd
$RET = DllCall("advapi32.dll", "int", "AdjustTokenPrivileges", "hwnd", $HTOKEN, "int", 0, "ptr", DllStructGetPtr($TOKEN_PRIVILEGES), "int", DllStructGetSize($NEWTOKEN_PRIVILEGES), "ptr", DllStructGetPtr($NEWTOKEN_PRIVILEGES), "int_ptr", 0)
$F = DllCall("kernel32.dll", "int", "GetLastError")
EndIf
$NEWTOKEN_PRIVILEGES = 0
$TOKEN_PRIVILEGES = 0
$LUID = 0
If $SP_AUXRET[0] = 0 Then Return 0
$SP_AUXRET = DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $HTOKEN)
If Not $RET[0] And Not $SP_AUXRET[0] Then Return 0
Return $RET[0]
EndFunc
#EndRegion _Memory
Global Const $GUI_EVENT_CLOSE = -3
Global Const $GUI_EVENT_MINIMIZE = -4
Global Const $GUI_EVENT_RESTORE = -5
Global Const $GUI_EVENT_MAXIMIZE = -6
Global Const $GUI_EVENT_PRIMARYDOWN = -7
Global Const $GUI_EVENT_PRIMARYUP = -8
Global Const $GUI_EVENT_SECONDARYDOWN = -9
Global Const $GUI_EVENT_SECONDARYUP = -10
Global Const $GUI_EVENT_MOUSEMOVE = -11
Global Const $GUI_EVENT_RESIZED = -12
Global Const $GUI_EVENT_DROPPED = -13
Global Const $GUI_RUNDEFMSG = "GUI_RUNDEFMSG"
Global Const $GUI_AVISTOP = 0
Global Const $GUI_AVISTART = 1
Global Const $GUI_AVICLOSE = 2
Global Const $GUI_CHECKED = 1
Global Const $GUI_INDETERMINATE = 2
Global Const $GUI_UNCHECKED = 4
Global Const $GUI_DROPACCEPTED = 8
Global Const $GUI_NODROPACCEPTED = 4096
Global Const $GUI_ACCEPTFILES = $GUI_DROPACCEPTED
Global Const $GUI_SHOW = 16
Global Const $GUI_HIDE = 32
Global Const $GUI_ENABLE = 64
Global Const $GUI_DISABLE = 128
Global Const $GUI_FOCUS = 256
Global Const $GUI_NOFOCUS = 8192
Global Const $GUI_DEFBUTTON = 512
Global Const $GUI_EXPAND = 1024
Global Const $GUI_ONTOP = 2048
Global Const $GUI_FONTITALIC = 2
Global Const $GUI_FONTUNDER = 4
Global Const $GUI_FONTSTRIKE = 8
Global Const $GUI_DOCKAUTO = 1
Global Const $GUI_DOCKLEFT = 2
Global Const $GUI_DOCKRIGHT = 4
Global Const $GUI_DOCKHCENTER = 8
Global Const $GUI_DOCKTOP = 32
Global Const $GUI_DOCKBOTTOM = 64
Global Const $GUI_DOCKVCENTER = 128
Global Const $GUI_DOCKWIDTH = 256
Global Const $GUI_DOCKHEIGHT = 512
Global Const $GUI_DOCKSIZE = 768
Global Const $GUI_DOCKMENUBAR = 544
Global Const $GUI_DOCKSTATEBAR = 576
Global Const $GUI_DOCKALL = 802
Global Const $GUI_DOCKBORDERS = 102
Global Const $GUI_GR_CLOSE = 1
Global Const $GUI_GR_LINE = 2
Global Const $GUI_GR_BEZIER = 4
Global Const $GUI_GR_MOVE = 6
Global Const $GUI_GR_COLOR = 8
Global Const $GUI_GR_RECT = 10
Global Const $GUI_GR_ELLIPSE = 12
Global Const $GUI_GR_PIE = 14
Global Const $GUI_GR_DOT = 16
Global Const $GUI_GR_PIXEL = 18
Global Const $GUI_GR_HINT = 20
Global Const $GUI_GR_REFRESH = 22
Global Const $GUI_GR_PENSIZE = 24
Global Const $GUI_GR_NOBKCOLOR = -2
Global Const $GUI_BKCOLOR_DEFAULT = -1
Global Const $GUI_BKCOLOR_TRANSPARENT = -2
Global Const $GUI_BKCOLOR_LV_ALTERNATE = -33554432
Global Const $GUI_WS_EX_PARENTDRAG = 1048576
Global Const $SS_LEFT = 0
Global Const $SS_CENTER = 1
Global Const $SS_RIGHT = 2
Global Const $SS_ICON = 3
Global Const $SS_BLACKRECT = 4
Global Const $SS_GRAYRECT = 5
Global Const $SS_WHITERECT = 6
Global Const $SS_BLACKFRAME = 7
Global Const $SS_GRAYFRAME = 8
Global Const $SS_WHITEFRAME = 9
Global Const $SS_SIMPLE = 11
Global Const $SS_LEFTNOWORDWRAP = 12
Global Const $SS_BITMAP = 14
Global Const $SS_ETCHEDHORZ = 16
Global Const $SS_ETCHEDVERT = 17
Global Const $SS_ETCHEDFRAME = 18
Global Const $SS_NOPREFIX = 128
Global Const $SS_NOTIFY = 256
Global Const $SS_CENTERIMAGE = 512
Global Const $SS_RIGHTJUST = 1024
Global Const $SS_SUNKEN = 4096
Global Const $GUI_SS_DEFAULT_LABEL = 0
Global Const $GUI_SS_DEFAULT_GRAPHIC = 0
Global Const $GUI_SS_DEFAULT_ICON = $SS_NOTIFY
Global Const $GUI_SS_DEFAULT_PIC = $SS_NOTIFY
Global $CHECKBOX[12]
$CHECKBOX[0] = 11
$FORM = GUICreate("DarkGER!'s Trainer", 150, 335, 272, 94)
$BUTTON1 = GUICtrlCreateButton("Hack!", 19, 285, 113, 49)
$CHECKBOX[1] = GUICtrlCreateCheckbox("915 Base HP", 24, 16, 97, 17)
$CHECKBOX[2] = GUICtrlCreateCheckbox("Unlimitied SP", 24, 64, 97, 17)
$CHECKBOX[3] = GUICtrlCreateCheckbox("No Damage", 24, 88, 73, 17)
$CHECKBOX[4] = GUICtrlCreateCheckbox("0 Accuracy", 24, 112, 97, 17)
$CHECKBOX[5] = GUICtrlCreateCheckbox("HMG Fastfire", 24, 136, 97, 17)
$CHECKBOX[6] = GUICtrlCreateCheckbox("Unlimited Ammo", 24, 160, 97, 17)
$CHECKBOX[7] = GUICtrlCreateCheckbox("No Gravity", 24, 184, 97, 17)
$CHECKBOX[8] = GUICtrlCreateCheckbox("Dodge delay", 24, 208, 97, 17)
$CHECKBOX[9] = GUICtrlCreateCheckbox("Walljump delay", 24, 232, 97, 17)
$CHECKBOX[10] = GUICtrlCreateCheckbox("25000 Base HP", 24, 40, 97, 17)
$CHECKBOX[11] = GUICtrlCreateCheckbox("Speed 25000", 24, 256, 97, 17)
For $A = 1 To 11
GUICtrlSetBkColor($CHECKBOX[$A], 3329330)
Next
GUISetState(@SW_SHOW)
While 1
$NMSG = GUIGetMsg()
Switch $NMSG
Case $GUI_EVENT_CLOSE
Exit
Case $BUTTON1
_BUTTON1()
EndSwitch
WEnd
Func _BUTTON1()
GUISetState(@SW_HIDE)
ToolTip("Wait for S4League...", 0, 0)
$PID = ProcessWait("S4Client.exe")
$HPROCESS = _MEMORYOPEN($PID)
Do
Sleep(50)
Until _MEMORYREAD(13267448, $HPROCESS, "Float") = 350
If GUICtrlRead($CHECKBOX[1]) = 1 Then
_MEMORYWRITE(13553580, $HPROCESS, "actor_default_animation_move_speed", "char[35]")
EndIf
If GUICtrlRead($CHECKBOX[2]) = 1 Then
_MEMORYWRITE(13535560, $HPROCESS, "0", "char[2]")
_MEMORYWRITE(13553240, $HPROCESS, "0", "char[2]")
_MEMORYWRITE(13553330, $HPROCESS, "0", "char[2]")
_MEMORYWRITE(13553417, $HPROCESS, "0", "char[2]")
_MEMORYWRITE(13553441, $HPROCESS, "0", "char[2]")
_MEMORYWRITE(13553252, $HPROCESS, "0", "char[2]")
_MEMORYWRITE(13553276, $HPROCESS, "0", "char[2]")
EndIf
If GUICtrlRead($CHECKBOX[3]) = 1 Then
_MEMORYWRITE(13553912, $HPROCESS, "0", "char[2]")
EndIf
If GUICtrlRead($CHECKBOX[4]) = 1 Then
_MEMORYWRITE(13538056, $HPROCESS, "0", "char[2]")
EndIf
If GUICtrlRead($CHECKBOX[5]) = 1 Then
_MEMORYWRITE(13537932, $HPROCESS, "jump_time", "char[10]")
EndIf
If GUICtrlRead($CHECKBOX[6]) = 1 Then
_MEMORYWRITE(13538024, $HPROCESS, "max_ammo", "char[9]")
_MEMORYWRITE(13537996, $HPROCESS, "max_ammo", "char[9]")
EndIf
If GUICtrlRead($CHECKBOX[7]) = 1 Then
_MEMORYWRITE(13553640, $HPROCESS, "0", "char[2]")
EndIf
If GUICtrlRead($CHECKBOX[8]) = 1 Then
_MEMORYWRITE(13553388, $HPROCESS, "0", "char[2]")
EndIf
If GUICtrlRead($CHECKBOX[9]) = 1 Then
_MEMORYWRITE(13553476, $HPROCESS, "0", "char[2]")
EndIf
If GUICtrlRead($CHECKBOX[10]) = 1 Then
_MEMORYWRITE(13553580, $HPROCESS, "ray_maxdistance", "char[16]")
EndIf
Exit
EndFunc
Lesezeichen