Hi ein kumpel hat mir mal seinen script geschickt der bei den browsergame die stämme spieler einladen soll^^. Er hat neuerdings auch einen fehler das die stammeslosen spieler pro kontinent nicht in der txt datei gespeichert werden und ich und er wissen nicht warum^^.
hier mal der script:
hier mal der script:
PHP Code:
#RequireAdmin
#Region
#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 = "")
Local $I, $AIDX[1], $ARESULT[1], $IN = 0, $IR = 0, $ILEFT = 0, $ITOTAL = 0, $ICOUNT = 1
If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
$IN = UBound($AVARRAY)
$IR = $ISET
Dim $AIDX[$IR]
For $I = 0 To $IR - 1
$AIDX[$I] = $I
Next
$ITOTAL = _ARRAY_COMBINATIONS($IN, $IR)
$ILEFT = $ITOTAL
ReDim $ARESULT[$ITOTAL + 1]
$ARESULT[0] = $ITOTAL
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)
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), $IUBOUNDSOURCE = UBound($AVARRAYSOURCE)
ReDim $AVARRAYTARGET[$IUBOUNDTARGET + $IUBOUNDSOURCE]
For $I = 0 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 = "|")
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)
Local $I, $J, $VTMP, $AITEM, $AVARRAYTEXT, $SHEADER = "Row", $IBUFFER = 64
Local $ICOLLIMIT = 250, $ILVIADDUDFTHRESHOLD = 4000, $IWIDTH = 640, $IHEIGHT = 480
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 = $ILVIADDUDFTHRESHOLD
If $IITEMLIMIT < 1 Then $IITEMLIMIT = $IUBOUND
If $IUBOUND > $IITEMLIMIT Then $IUBOUND = $IITEMLIMIT
If $ILVIADDUDFTHRESHOLD > $IUBOUND Then $ILVIADDUDFTHRESHOLD = $IUBOUND
For $I = 0 To $ISUBMAX
$SHEADER &= $SSEPARATOR & "Col " & $I
Next
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_INSERTITEMA = (4096 + 7)
Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (4096 + 54)
Local Const $_ARRAYCONSTANT_LVM_SETITEMA = (4096 + 6)
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("char 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 $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)
For $I = 0 To $ILVIADDUDFTHRESHOLD
GUICtrlCreateListViewItem($AVARRAYTEXT[$I], $HLISTVIEW)
Next
For $I = ($ILVIADDUDFTHRESHOLD + 1) To $IUBOUND
$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_INSERTITEMA, 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_SETITEMA, 0, $PITEM)
Next
Next
$IWIDTH = 0
For $I = 0 To $ISUBMAX + 1
$IWIDTH += GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $I, 0)
Next
If $IWIDTH < 250 Then $IWIDTH = 230
WinMove($HGUI, "", Default, Default, $IWIDTH + 20)
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 $I, $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 = 0)
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, 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(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 < 0 Then $ISUBITEM = 0
If $ISUBITEM > $IUBOUNDSUB Then $ISUBITEM = $IUBOUNDSUB
If Not $IPARTIAL Then
If Not $ICASE Then
For $I = $ISTART To $IEND Step $ISTEP
If $AVARRAY[$I][$ISUBITEM] = $VVALUE Then Return $I
Next
Else
For $I = $ISTART To $IEND Step $ISTEP
If $AVARRAY[$I][$ISUBITEM] == $VVALUE Then Return $I
Next
EndIf
Else
For $I = $ISTART To $IEND Step $ISTEP
If StringInStr($AVARRAY[$I][$ISUBITEM], $VVALUE, $ICASE) > 0 Then Return $I
Next
EndIf
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 $I, $J, $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 $I, $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)
Local $I, $ITEMP
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
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, $INFACT = 1, $IRFACT = 1, $INRFACT = 1
For $I = $IN To 2 Step -1
$INFACT *= $I
Next
For $I = $IR To 2 Step -1
$IRFACT *= $I
Next
For $I = $IN - $IR To 2 Step -1
$INRFACT *= $I
Next
Return $INFACT / ($IRFACT * $INRFACT)
EndFunc
Func _ARRAY_GETNEXT($IN, $IR, ByRef $ILEFT, $ITOTAL, ByRef $AIDX)
Local $I, $J
If $ILEFT == $ITOTAL Then
$ILEFT -= 1
Return
EndIf
$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
Func _FILECOUNTLINES($SFILEPATH)
Local $HFILE, $SFILECONTENT, $ATMP
$HFILE = FileOpen($SFILEPATH, 0)
If $HFILE = -1 Then Return SetError(1, 0, 0)
$SFILECONTENT = StringStripWS(FileRead($HFILE), 2)
FileClose($HFILE)
If StringInStr($SFILECONTENT, @LF) Then
$ATMP = StringSplit(StringStripCR($SFILECONTENT), @LF)
ElseIf StringInStr($SFILECONTENT, @CR) Then
$ATMP = StringSplit($SFILECONTENT, @CR)
Else
If StringLen($SFILECONTENT) Then
Return 1
Else
Return SetError(2, 0, 0)
EndIf
EndIf
Return $ATMP[0]
EndFunc
Func _FILECREATE($SFILEPATH)
Local $HOPENFILE
Local $HWRITEFILE
$HOPENFILE = FileOpen($SFILEPATH, 2)
If $HOPENFILE = -1 Then
SetError(1)
Return 0
EndIf
$HWRITEFILE = FileWrite($HOPENFILE, "")
If $HWRITEFILE = -1 Then
SetError(2)
Return 0
EndIf
FileClose($HOPENFILE)
Return 1
EndFunc
Func _FILELISTTOARRAY($SPATH, $SFILTER = "*", $IFLAG = 0)
Local $HSEARCH, $SFILE, $ASFILELIST[1]
If Not FileExists($SPATH) Then Return SetError(1, 1, "")
IF (StringInStr($SFILTER, "\")) OR (StringInStr($SFILTER, "/")) OR (StringInStr($SFILTER, ":")) OR (StringInStr($SFILTER, ">")) OR (StringInStr($SFILTER, "<")) OR (StringInStr($SFILTER, "|")) OR (StringStripWS($SFILTER, 8) = "") Then Return SetError(2, 2, "")
If NOT ($IFLAG = 0 Or $IFLAG = 1 Or $IFLAG = 2) Then Return SetError(3, 3, "")
IF (StringMid($SPATH, StringLen($SPATH), 1) = "\") Then $SPATH = StringTrimRight($SPATH, 1)
$HSEARCH = FileFindFirstFile($SPATH & "\" & $SFILTER)
If $HSEARCH = -1 Then Return SetError(4, 4, "")
While 1
$SFILE = FileFindNextFile($HSEARCH)
If @error Then
SetError(0)
ExitLoop
EndIf
If $IFLAG = 1 And StringInStr(FileGetAttrib($SPATH & "\" & $SFILE), "D") <> 0 Then ContinueLoop
If $IFLAG = 2 And StringInStr(FileGetAttrib($SPATH & "\" & $SFILE), "D") = 0 Then ContinueLoop
$ASFILELIST[0] += 1
If UBound($ASFILELIST) <= $ASFILELIST[0] Then ReDim $ASFILELIST[UBound($ASFILELIST) * 2]
$ASFILELIST[$ASFILELIST[0]] = $SFILE
WEnd
FileClose($HSEARCH)
ReDim $ASFILELIST[$ASFILELIST[0] + 1]
Return $ASFILELIST
EndFunc
Func _FILEPRINT($S_FILE, $I_SHOW = @SW_HIDE)
Local $A_RET = DllCall("shell32.dll", "long", "ShellExecute", "hwnd", 0, "string", "print", "string", $S_FILE, "string", "", "string", "", "int", $I_SHOW)
If $A_RET[0] > 32 And Not @error Then
Return 1
Else
SetError($A_RET[0])
Return 0
EndIf
EndFunc
Func _FILEREADTOARRAY($SFILEPATH, ByRef $AARRAY)
Local $HFILE, $AFILE
$HFILE = FileOpen($SFILEPATH, 0)
If $HFILE = -1 Then Return SetError(1, 0, 0)
$AFILE = FileRead($HFILE, FileGetSize($SFILEPATH))
$AFILE = StringStripWS($AFILE, 2)
FileClose($HFILE)
If StringInStr($AFILE, @LF) Then
$AARRAY = StringSplit(StringStripCR($AFILE), @LF)
ElseIf StringInStr($AFILE, @CR) Then
$AARRAY = StringSplit($AFILE, @CR)
Else
If StringLen($AFILE) Then
Dim $AARRAY[2] = [1, $AFILE]
Else
Return SetError(2, 0, 0)
EndIf
EndIf
Return 1
EndFunc
Func _FILEWRITEFROMARRAY($FILE, $A_ARRAY, $I_BASE = 0, $I_UBOUND = 0)
If Not IsArray($A_ARRAY) Then Return SetError(2, 0, 0)
Local $LAST = UBound($A_ARRAY) - 1
If $I_UBOUND < 1 Or $I_UBOUND > $LAST Then $I_UBOUND = $LAST
If $I_BASE < 0 Or $I_BASE > $LAST Then $I_BASE = 0
Local $HFILE
If IsString($FILE) Then
$HFILE = FileOpen($FILE, 2)
Else
$HFILE = $FILE
EndIf
If $HFILE = -1 Then Return SetError(1, 0, 0)
Local $ERRORSAV = 0
For $X = $I_BASE To $I_UBOUND
If FileWrite($HFILE, $A_ARRAY[$X] & @CRLF) = 0 Then
$ERRORSAV = 3
ExitLoop
EndIf
Next
If IsString($FILE) Then FileClose($HFILE)
If $ERRORSAV Then
Return SetError($ERRORSAV, 0, 0)
Else
Return 1
EndIf
EndFunc
Func _FILEWRITELOG($SLOGPATH, $SLOGMSG, $IFLAG = -1)
Local $SDATENOW, $STIMENOW, $SMSG, $IWRITEFILE, $HOPENFILE, $IOPENMODE = 1
$SDATENOW = @YEAR & "-" & @MON & "-" & @MDAY
$STIMENOW = @HOUR & ":" & @MIN & ":" & @SEC
$SMSG = $SDATENOW & " " & $STIMENOW & " : " & $SLOGMSG
If $IFLAG <> -1 Then
$SMSG &= @CRLF & FileRead($SLOGPATH)
$IOPENMODE = 2
EndIf
$HOPENFILE = FileOpen($SLOGPATH, $IOPENMODE)
If $HOPENFILE = -1 Then Return SetError(1, 0, 0)
$IWRITEFILE = FileWriteLine($HOPENFILE, $SMSG)
If $IWRITEFILE = -1 Then Return SetError(2, 0, 0)
Return FileClose($HOPENFILE)
EndFunc
Func _FILEWRITETOLINE($SFILE, $ILINE, $STEXT, $FOVERWRITE = 0)
If $ILINE <= 0 Then Return SetError(4, 0, 0)
If Not IsString($STEXT) Then Return SetError(6, 0, 0)
If $FOVERWRITE <> 0 And $FOVERWRITE <> 1 Then Return SetError(5, 0, 0)
If Not FileExists($SFILE) Then Return SetError(2, 0, 0)
Local $FILTXT = FileRead($SFILE, FileGetSize($SFILE))
$FILTXT = StringSplit($FILTXT, @CRLF, 1)
If UBound($FILTXT, 1) < $ILINE Then Return SetError(1, 0, 0)
Local $FIL = FileOpen($SFILE, 2)
If $FIL = -1 Then Return SetError(3, 0, 0)
For $I = 1 To UBound($FILTXT) - 1
If $I = $ILINE Then
If $FOVERWRITE = 1 Then
If $STEXT <> "" Then
FileWrite($FIL, $STEXT & @CRLF)
Else
FileWrite($FIL, $STEXT)
EndIf
EndIf
If $FOVERWRITE = 0 Then
FileWrite($FIL, $STEXT & @CRLF)
FileWrite($FIL, $FILTXT[$I] & @CRLF)
EndIf
ElseIf $I < UBound($FILTXT, 1) - 1 Then
FileWrite($FIL, $FILTXT[$I] & @CRLF)
ElseIf $I = UBound($FILTXT, 1) - 1 Then
FileWrite($FIL, $FILTXT[$I])
EndIf
Next
FileClose($FIL)
Return 1
EndFunc
Func _PATHFULL($SRELATIVEPATH, $SBASEPATH = @WorkingDir)
If Not $SRELATIVEPATH Or $SRELATIVEPATH = "." Then Return $SBASEPATH
Local $SFULLPATH = StringReplace($SRELATIVEPATH, "/", "\")
Local Const $SFULLPATHCONST = $SFULLPATH
Local $SPATH
Local $BROOTONLY = StringLeft($SFULLPATH, 1) = "\" And StringMid($SFULLPATH, 2, 1) <> "\"
For $I = 1 To 2
$SPATH = StringLeft($SFULLPATH, 2)
If $SPATH = "\\" Then
$SFULLPATH = StringTrimLeft($SFULLPATH, 2)
$SPATH &= StringLeft($SFULLPATH, StringInStr($SFULLPATH, "\") - 1)
ExitLoop
ElseIf StringRight($SPATH, 1) = ":" Then
$SFULLPATH = StringTrimLeft($SFULLPATH, 2)
ExitLoop
Else
$SFULLPATH = $SBASEPATH & "\" & $SFULLPATH
EndIf
Next
If $I = 3 Then Return ""
Local $ATEMP = StringSplit($SFULLPATH, "\")
Local $APATHPARTS[$ATEMP[0]], $J = 0
For $I = 2 To $ATEMP[0]
If $ATEMP[$I] = ".." Then
If $J Then $J -= 1
ElseIf NOT ($ATEMP[$I] = "" And $I <> $ATEMP[0]) And $ATEMP[$I] <> "." Then
$APATHPARTS[$J] = $ATEMP[$I]
$J += 1
EndIf
Next
$SFULLPATH = $SPATH
If Not $BROOTONLY Then
For $I = 0 To $J - 1
$SFULLPATH &= "\" & $APATHPARTS[$I]
Next
Else
$SFULLPATH &= $SFULLPATHCONST
If StringInStr($SFULLPATH, "..") Then $SFULLPATH = _PATHFULL($SFULLPATH)
EndIf
While StringInStr($SFULLPATH, ".\")
$SFULLPATH = StringReplace($SFULLPATH, ".\", "\")
WEnd
Return $SFULLPATH
EndFunc
Func _PATHGETRELATIVE($SFROM, $STO)
Local $ASFROM, $ASTO, $IDIFF, $SRELPATH, $I
If StringRight($SFROM, 1) <> "\" Then $SFROM &= "\"
If StringRight($STO, 1) <> "\" Then $STO &= "\"
If $SFROM = $STO Then Return SetError(1, 0, StringTrimRight($STO, 1))
$ASFROM = StringSplit($SFROM, "\")
$ASTO = StringSplit($STO, "\")
If $ASFROM[1] <> $ASTO[1] Then Return SetError(2, 0, StringTrimRight($STO, 1))
$I = 2
$IDIFF = 1
While 1
If $ASFROM[$I] <> $ASTO[$I] Then
$IDIFF = $I
ExitLoop
EndIf
$I += 1
WEnd
$I = 1
$SRELPATH = ""
For $J = 1 To $ASTO[0]
If $I >= $IDIFF Then
$SRELPATH &= "\" & $ASTO[$I]
EndIf
$I += 1
Next
$SRELPATH = StringTrimLeft($SRELPATH, 1)
$I = 1
For $J = 1 To $ASFROM[0]
If $I > $IDIFF Then
$SRELPATH = "..\" & $SRELPATH
EndIf
$I += 1
Next
If StringRight($SRELPATH, 1) == "\" Then $SRELPATH = StringTrimRight($SRELPATH, 1)
Return $SRELPATH
EndFunc
Func _PATHMAKE($SZDRIVE, $SZDIR, $SZFNAME, $SZEXT)
Local $SZFULLPATH
If StringLen($SZDRIVE) Then
If NOT (StringLeft($SZDRIVE, 2) = "\\") Then $SZDRIVE = StringLeft($SZDRIVE, 1) & ":"
EndIf
If StringLen($SZDIR) Then
If NOT (StringRight($SZDIR, 1) = "\") And NOT (StringRight($SZDIR, 1) = "/") Then $SZDIR = $SZDIR & "\"
EndIf
If StringLen($SZEXT) Then
If NOT (StringLeft($SZEXT, 1) = ".") Then $SZEXT = "." & $SZEXT
EndIf
$SZFULLPATH = $SZDRIVE & $SZDIR & $SZFNAME & $SZEXT
Return $SZFULLPATH
EndFunc
Func _PATHSPLIT($SZPATH, ByRef $SZDRIVE, ByRef $SZDIR, ByRef $SZFNAME, ByRef $SZEXT)
Local $DRIVE = ""
Local $DIR = ""
Local $FNAME = ""
Local $EXT = ""
Local $POS
Local $ARRAY[5]
$ARRAY[0] = $SZPATH
If StringMid($SZPATH, 2, 1) = ":" Then
$DRIVE = StringLeft($SZPATH, 2)
$SZPATH = StringTrimLeft($SZPATH, 2)
ElseIf StringLeft($SZPATH, 2) = "\\" Then
$SZPATH = StringTrimLeft($SZPATH, 2)
$POS = StringInStr($SZPATH, "\")
If $POS = 0 Then $POS = StringInStr($SZPATH, "/")
If $POS = 0 Then
$DRIVE = "\\" & $SZPATH
$SZPATH = ""
Else
$DRIVE = "\\" & StringLeft($SZPATH, $POS - 1)
$SZPATH = StringTrimLeft($SZPATH, $POS - 1)
EndIf
EndIf
Local $NPOSFORWARD = StringInStr($SZPATH, "/", 0, -1)
Local $NPOSBACKWARD = StringInStr($SZPATH, "\", 0, -1)
If $NPOSFORWARD >= $NPOSBACKWARD Then
$POS = $NPOSFORWARD
Else
$POS = $NPOSBACKWARD
EndIf
$DIR = StringLeft($SZPATH, $POS)
$FNAME = StringRight($SZPATH, StringLen($SZPATH) - $POS)
If StringLen($DIR) = 0 Then $FNAME = $SZPATH
$POS = StringInStr($FNAME, ".", 0, -1)
If $POS Then
$EXT = StringRight($FNAME, StringLen($FNAME) - ($POS - 1))
$FNAME = StringLeft($FNAME, $POS - 1)
EndIf
$SZDRIVE = $DRIVE
$SZDIR = $DIR
$SZFNAME = $FNAME
$SZEXT = $EXT
$ARRAY[1] = $DRIVE
$ARRAY[2] = $DIR
$ARRAY[3] = $FNAME
$ARRAY[4] = $EXT
Return $ARRAY
EndFunc
Func _REPLACESTRINGINFILE($SZFILENAME, $SZSEARCHSTRING, $SZREPLACESTRING, $FCASENESS = 0, $FOCCURANCE = 1)
Local $IRETVAL = 0
Local $HWRITEHANDLE, $AFILELINES, $NCOUNT, $SENDSWITH, $HFILE
If StringInStr(FileGetAttrib($SZFILENAME), "R") Then Return SetError(6, 0, -1)
$HFILE = FileOpen($SZFILENAME, 0)
If $HFILE = -1 Then Return SetError(1, 0, -1)
Local $S_TOTFILE = FileRead($HFILE, FileGetSize($SZFILENAME))
If StringRight($S_TOTFILE, 2) = @CRLF Then
$SENDSWITH = @CRLF
ElseIf StringRight($S_TOTFILE, 1) = @CR Then
$SENDSWITH = @CR
ElseIf StringRight($S_TOTFILE, 1) = @LF Then
$SENDSWITH = @LF
Else
$SENDSWITH = ""
EndIf
$AFILELINES = StringSplit(StringStripCR($S_TOTFILE), @LF)
FileClose($HFILE)
$HWRITEHANDLE = FileOpen($SZFILENAME, 2)
If $HWRITEHANDLE = -1 Then Return SetError(2, 0, -1)
For $NCOUNT = 1 To $AFILELINES[0]
If StringInStr($AFILELINES[$NCOUNT], $SZSEARCHSTRING, $FCASENESS) Then
$AFILELINES[$NCOUNT] = StringReplace($AFILELINES[$NCOUNT], $SZSEARCHSTRING, $SZREPLACESTRING, 1 - $FOCCURANCE, $FCASENESS)
$IRETVAL = $IRETVAL + 1
If $FOCCURANCE = 0 Then
$IRETVAL = 1
ExitLoop
EndIf
EndIf
Next
For $NCOUNT = 1 To $AFILELINES[0] - 1
If FileWriteLine($HWRITEHANDLE, $AFILELINES[$NCOUNT]) = 0 Then
SetError(3)
FileClose($HWRITEHANDLE)
Return -1
EndIf
Next
If $AFILELINES[$NCOUNT] <> "" Then FileWrite($HWRITEHANDLE, $AFILELINES[$NCOUNT] & $SENDSWITH)
FileClose($HWRITEHANDLE)
Return $IRETVAL
EndFunc
Func _TEMPFILE($S_DIRECTORYNAME = @TempDir, $S_FILEPREFIX = "~", $S_FILEEXTENSION = ".tmp", $I_RANDOMLENGTH = 7)
Local $S_TEMPNAME
If Not FileExists($S_DIRECTORYNAME) Then $S_DIRECTORYNAME = @TempDir
If Not FileExists($S_DIRECTORYNAME) Then $S_DIRECTORYNAME = @ScriptDir
If StringRight($S_DIRECTORYNAME, 1) <> "\" Then $S_DIRECTORYNAME = $S_DIRECTORYNAME & "\"
Do
$S_TEMPNAME = ""
While StringLen($S_TEMPNAME) < $I_RANDOMLENGTH
$S_TEMPNAME = $S_TEMPNAME & Chr(Random(97, 122, 1))
WEnd
$S_TEMPNAME = $S_DIRECTORYNAME & $S_FILEPREFIX & $S_TEMPNAME & $S_FILEEXTENSION
Until Not FileExists($S_TEMPNAME)
RETURN ($S_TEMPNAME)
EndFunc
#Region Header
#EndRegion Header
#Region Global Variables and Constants
Global Const $IEAU3VERSIONINFO[6] = ["V", 2, 4, 0, "20071231", "V2.4-0"]
Global Const $LSFW_LOCK = 1, $LSFW_UNLOCK = 2
Global $__IELOADWAITTIMEOUT = 300000
Global $__IEAU3DEBUG = False
Global $__IEAU3V1COMPATIBILITY
Global $__IEAU3DEBUG_USEOLDDLLCALL = False
Global $_IEERRORNOTIFY = True
Global $OIEERRORHANDLER, $SIEUSERERRORHANDLER
Global $IECOMERRORNUMBER, $IECOMERRORNUMBERHEX, $IECOMERRORDESCRIPTION, $IECOMERRORSCRIPTLINE, $IECOMERRORWINDESCRIPTION, $IECOMERRORSOURCE, $IECOMERRORHELPFILE, $IECOMERRORHELPCONTEXT, $IECOMERRORLASTDLLERROR, $IECOMERRORCOMOBJ, $IECOMERROROUTPUT
Global Enum $_IESTATUS_SUCCESS = 0, $_IESTATUS_GENERALERROR, $_IESTATUS_COMERROR, $_IESTATUS_INVALIDDATATYPE, $_IESTATUS_INVALIDOBJECTTYPE, $_IESTATUS_INVALIDVALUE, $_IESTATUS_LOADWAITTIMEOUT, $_IESTATUS_NOMATCH, $_IESTATUS_ACCESSISDENIED, $_IESTATUS_CLIENTDISCONNECTED
Global Enum Step *2$_IENOTIFYLEVEL_NONE = 0, $_IENOTIFYNOTIFYLEVEL_WARNING = 1, $_IENOTIFYNOTIFYLEVEL_ERROR, $_IENOTIFYNOTIFYLEVEL_COMERROR
Global Enum Step *2$_IENOTIFYMETHOD_SILENT = 0, $_IENOTIFYMETHOD_CONSOLE = 1, $_IENOTIFYMETHOD_TOOLTIP, $_IENOTIFYMETHOD_MSGBOX
#EndRegion Global Variables and Constants
#Region Core functions
Func _IECREATE($S_URL = "about:blank", $F_TRYATTACH = 0, $F_VISIBLE = 1, $F_WAIT = 1, $F_TAKEFOCUS = 1)
Local $RESULT, $F_MUSTUNLOCK = 0
If $__IEAU3V1COMPATIBILITY Then
Switch String($S_URL)
Case "0"
$S_URL = "about:blank"
$F_VISIBLE = 0
__IEERRORNOTIFY("Warning", "_IECreate", "", "Using deprecated behavior - $f_visible is now parameter 3 instead of parameter 1")
Case "1"
$S_URL = "about:blank"
$F_VISIBLE = 1
__IEERRORNOTIFY("Warning", "_IECreate", "", "Using deprecated behavior - $f_visible is now parameter 3 instead of parameter 1")
EndSwitch
EndIf
If Not $F_VISIBLE Then $F_TAKEFOCUS = 0
If $F_TRYATTACH Then
Local $ORESULT = _IEATTACH($S_URL, "url")
If IsObj($ORESULT) Then
If $F_TAKEFOCUS Then WinActivate(HWnd($ORESULT.HWND))
SetError($_IESTATUS_SUCCESS)
SetExtended(1)
Return $ORESULT
EndIf
EndIf
If Not $F_VISIBLE Then
$RESULT = __IELOCKSETFOREGROUNDWINDOW($LSFW_LOCK)
If $RESULT Then $F_MUSTUNLOCK = 1
EndIf
Local $O_OBJECT = ObjCreate("InternetExplorer.Application")
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IECreate", "", "Browser Object Creation Failed")
SetError($_IESTATUS_GENERALERROR)
Return 0
EndIf
$O_OBJECT.visible = $F_VISIBLE
If $F_MUSTUNLOCK Then
$RESULT = __IELOCKSETFOREGROUNDWINDOW($LSFW_UNLOCK)
If Not $RESULT Then __IEERRORNOTIFY("Warning", "_IECreate", "", "Foreground Window Unlock Failed!")
EndIf
_IENAVIGATE($O_OBJECT, $S_URL, $F_WAIT)
SetError(@error)
Return $O_OBJECT
EndFunc
Func _IECREATEEMBEDDED()
Local $O_OBJECT = ObjCreate("Shell.Explorer.2")
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IECreateEmbedded", "", "WebBrowser Object Creation Failed")
SetError($_IESTATUS_GENERALERROR)
Return 0
EndIf
SetError($_IESTATUS_SUCCESS)
Return $O_OBJECT
EndFunc
Func _IENAVIGATE(ByRef $O_OBJECT, $S_URL, $F_WAIT = 1)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IENavigate", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
If Not __IEISOBJTYPE($O_OBJECT, "documentContainer") Then
__IEERRORNOTIFY("Error", "_IENavigate", "$_IEStatus_InvalidObjectType")
SetError($_IESTATUS_INVALIDOBJECTTYPE, 1)
Return 0
EndIf
$O_OBJECT.navigate($S_URL)
If $F_WAIT Then
_IELOADWAIT($O_OBJECT)
SetError(@error)
Return -1
EndIf
SetError($_IESTATUS_SUCCESS)
Return -1
EndFunc
Func _IEATTACH($S_STRING, $S_MODE = "Title", $I_INSTANCE = 1)
$S_MODE = StringLower($S_MODE)
Local $H_CONTROL, $ORESULT, $F_ISBROWSER, $S_TMP, $I_TMP
$I_INSTANCE = Int($I_INSTANCE)
If $I_INSTANCE < 1 Then
__IEERRORNOTIFY("Error", "_IEAttach", "$_IEStatus_InvalidValue", "$i_instance < 1")
SetError($_IESTATUS_INVALIDVALUE, 3)
Return 0
EndIf
If $S_MODE = "embedded" Or $S_MODE = "dialogbox" Then
Local $IWINTITLEMATCHMODE = Opt("WinTitleMatchMode")
Opt("WinTitleMatchMode", 2)
If $S_MODE = "dialogbox" And $I_INSTANCE > 1 Then
If IsHWnd($S_STRING) Then
$I_INSTANCE = 1
__IEERRORNOTIFY("Warning", "_IEAttach", "$_IEStatus_GeneralError", "$i_instance > 1 invalid with HWnd and DialogBox. Setting to 1.")
Else
Local $A_WINLIST = WinList($S_STRING, "")
If $I_INSTANCE <= $A_WINLIST[0][0] Then
$S_STRING = $A_WINLIST[$I_INSTANCE][1]
$I_INSTANCE = 1
Else
__IEERRORNOTIFY("Warning", "_IEAttach", "$_IEStatus_NoMatch")
SetError($_IESTATUS_NOMATCH, 1)
Return 0
EndIf
EndIf
EndIf
$H_CONTROL = ControlGetHandle($S_STRING, "", "[CLASS:Internet Explorer_Server; INSTANCE:" & $I_INSTANCE & "]")
$ORESULT = __IECONTROLGETOBJFROMHWND($H_CONTROL)
Opt("WinTitleMatchMode", $IWINTITLEMATCHMODE)
If IsObj($ORESULT) Then
SetError($_IESTATUS_SUCCESS)
Return $ORESULT
Else
__IEERRORNOTIFY("Warning", "_IEAttach", "$_IEStatus_NoMatch")
SetError($_IESTATUS_NOMATCH, 1)
Return 0
EndIf
EndIf
Local $O_SHELL = ObjCreate("Shell.Application")
Local $O_SHELLWINDOWS = $O_SHELL.Windows()
$I_TMP = 1
For $O_WINDOW In $O_SHELLWINDOWS
$F_ISBROWSER = True
Local $STATUS = __IEINTERNALERRORHANDLERREGISTER()
If Not $STATUS Then __IEERRORNOTIFY("Warning", "_IEAttach", "Cannot register internal error handler, cannot trap COM errors", "Use _IEErrorHandlerRegister() to register a user error handler")
Local $F_NOTIFYSTATUS = _IEERRORNOTIFY()
_IEERRORNOTIFY(False)
If $F_ISBROWSER Then
$S_TMP = $O_WINDOW.type
If @error Then $F_ISBROWSER = False
EndIf
If $F_ISBROWSER Then
$S_TMP = $O_WINDOW.document.title
If @error Then $F_ISBROWSER = False
EndIf
_IEERRORNOTIFY($F_NOTIFYSTATUS)
__IEINTERNALERRORHANDLERDEREGISTER()
If $F_ISBROWSER Then
Switch $S_MODE
Case "title"
If StringInStr($O_WINDOW.document.title, $S_STRING) > 0 Then
If $I_INSTANCE = $I_TMP Then
SetError($_IESTATUS_SUCCESS)
Return $O_WINDOW
Else
$I_TMP += 1
EndIf
EndIf
Case "instance"
If $I_INSTANCE = $I_TMP Then
SetError($_IESTATUS_SUCCESS)
Return $O_WINDOW
Else
$I_TMP += 1
EndIf
Case "windowtitle"
Local $F_FOUND = False
$S_TMP = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\", "Window Title")
If Not @error Then
If StringInStr($O_WINDOW.document.title & " - " & $S_TMP, $S_STRING) Then $F_FOUND = True
Else
If StringInStr($O_WINDOW.document.title & " - Microsoft Internet Explorer", $S_STRING) Then $F_FOUND = True
If StringInStr($O_WINDOW.document.title & " - Windows Internet Explorer", $S_STRING) Then $F_FOUND = True
EndIf
If $F_FOUND Then
If $I_INSTANCE = $I_TMP Then
SetError($_IESTATUS_SUCCESS)
Return $O_WINDOW
Else
$I_TMP += 1
EndIf
EndIf
Case "url"
If StringInStr($O_WINDOW.LocationURL, $S_STRING) > 0 Then
If $I_INSTANCE = $I_TMP Then
SetError($_IESTATUS_SUCCESS)
Return $O_WINDOW
Else
$I_TMP += 1
EndIf
EndIf
Case "text"
If StringInStr($O_WINDOW.document.body.innerText, $S_STRING) > 0 Then
If $I_INSTANCE = $I_TMP Then
SetError($_IESTATUS_SUCCESS)
Return $O_WINDOW
Else
$I_TMP += 1
EndIf
EndIf
Case "html"
If StringInStr($O_WINDOW.document.body.innerHTML, $S_STRING) > 0 Then
If $I_INSTANCE = $I_TMP Then
SetError($_IESTATUS_SUCCESS)
Return $O_WINDOW
Else
$I_TMP += 1
EndIf
EndIf
Case "hwnd"
If $I_INSTANCE > 1 Then
$I_INSTANCE = 1
__IEERRORNOTIFY("Warning", "_IEAttach", "$_IEStatus_GeneralError", "$i_instance > 1 invalid with HWnd. Setting to 1.")
EndIf
If _IEPROPERTYGET($O_WINDOW, "hwnd") = $S_STRING Then
SetError($_IESTATUS_SUCCESS)
Return $O_WINDOW
EndIf
Case Else
__IEERRORNOTIFY("Error", "_IEAttach", "$_IEStatus_InvalidValue", "Invalid Mode Specified")
SetError($_IESTATUS_INVALIDVALUE, 2)
Return 0
EndSwitch
EndIf
Next
__IEERRORNOTIFY("Warning", "_IEAttach", "$_IEStatus_NoMatch")
SetError($_IESTATUS_NOMATCH, 1)
Return 0
EndFunc
Func _IELOADWAIT(ByRef $O_OBJECT, $I_DELAY = 0, $I_TIMEOUT = -1)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IELoadWait", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
If Not __IEISOBJTYPE($O_OBJECT, "browserdom") Then
__IEERRORNOTIFY("Error", "_IELoadWait", "$_IEStatus_InvalidObjectType", ObjName($O_OBJECT))
SetError($_IESTATUS_INVALIDOBJECTTYPE, 1)
Return 0
EndIf
Local $OTEMP, $F_ABORT = False, $I_ERRORSTATUSCODE = $_IESTATUS_SUCCESS
Local $STATUS = __IEINTERNALERRORHANDLERREGISTER()
If Not $STATUS Then __IEERRORNOTIFY("Warning", "_IELoadWait", "Cannot register internal error handler, cannot trap COM errors", "Use _IEErrorHandlerRegister() to register a user error handler")
Local $F_NOTIFYSTATUS = _IEERRORNOTIFY()
_IEERRORNOTIFY(False)
Sleep($I_DELAY)
Local $IELOADWAITTIMER = TimerInit()
If $I_TIMEOUT = -1 Then $I_TIMEOUT = $__IELOADWAITTIMEOUT
Switch ObjName($O_OBJECT)
Case "IWebBrowser2"
While NOT (String($O_OBJECT.readyState) = "complete" Or $O_OBJECT.readyState = 4 Or $F_ABORT)
IF (TimerDiff($IELOADWAITTIMER) > $I_TIMEOUT) Then
$I_ERRORSTATUSCODE = $_IESTATUS_LOADWAITTIMEOUT
$F_ABORT = True
EndIf
If @error = $_IESTATUS_COMERROR And __IECOMERRORUNRECOVERABLE() Then
$I_ERRORSTATUSCODE = __IECOMERRORUNRECOVERABLE()
$F_ABORT = True
EndIf
Sleep(100)
WEnd
While NOT (String($O_OBJECT.document.readyState) = "complete" Or $O_OBJECT.document.readyState = 4 Or $F_ABORT)
IF (TimerDiff($IELOADWAITTIMER) > $I_TIMEOUT) Then
$I_ERRORSTATUSCODE = $_IESTATUS_LOADWAITTIMEOUT
$F_ABORT = True
EndIf
If @error = $_IESTATUS_COMERROR And __IECOMERRORUNRECOVERABLE() Then
$I_ERRORSTATUSCODE = __IECOMERRORUNRECOVERABLE()
$F_ABORT = True
EndIf
Sleep(100)
WEnd
Case "DispHTMLWindow2"
While NOT (String($O_OBJECT.document.readyState) = "complete" Or $O_OBJECT.document.readyState = 4 Or $F_ABORT)
IF (TimerDiff($IELOADWAITTIMER) > $I_TIMEOUT) Then
$I_ERRORSTATUSCODE = $_IESTATUS_LOADWAITTIMEOUT
$F_ABORT = True
EndIf
If @error = $_IESTATUS_COMERROR And __IECOMERRORUNRECOVERABLE() Then
$I_ERRORSTATUSCODE = __IECOMERRORUNRECOVERABLE()
$F_ABORT = True
EndIf
Sleep(100)
WEnd
While NOT (String($O_OBJECT.top.document.readyState) = "complete" Or $O_OBJECT.top.document.readyState = 4 Or $F_ABORT)
IF (TimerDiff($IELOADWAITTIMER) > $I_TIMEOUT) Then
$I_ERRORSTATUSCODE = $_IESTATUS_LOADWAITTIMEOUT
$F_ABORT = True
EndIf
If @error = $_IESTATUS_COMERROR And __IECOMERRORUNRECOVERABLE() Then
$I_ERRORSTATUSCODE = __IECOMERRORUNRECOVERABLE()
$F_ABORT = True
EndIf
Sleep(100)
WEnd
Case "DispHTMLDocument"
$OTEMP = $O_OBJECT.parentWindow
While NOT (String($OTEMP.document.readyState) = "complete" Or $OTEMP.document.readyState = 4 Or $F_ABORT)
IF (TimerDiff($IELOADWAITTIMER) > $I_TIMEOUT) Then
$I_ERRORSTATUSCODE = $_IESTATUS_LOADWAITTIMEOUT
$F_ABORT = True
EndIf
If @error = $_IESTATUS_COMERROR And __IECOMERRORUNRECOVERABLE() Then
$I_ERRORSTATUSCODE = __IECOMERRORUNRECOVERABLE()
$F_ABORT = True
EndIf
Sleep(100)
WEnd
While NOT (String($OTEMP.top.document.readyState) = "complete" Or $OTEMP.top.document.readyState = 4 Or $F_ABORT)
IF (TimerDiff($IELOADWAITTIMER) > $I_TIMEOUT) Then
$I_ERRORSTATUSCODE = $_IESTATUS_LOADWAITTIMEOUT
$F_ABORT = True
EndIf
If @error = $_IESTATUS_COMERROR And __IECOMERRORUNRECOVERABLE() Then
$I_ERRORSTATUSCODE = __IECOMERRORUNRECOVERABLE()
$F_ABORT = True
EndIf
Sleep(100)
WEnd
Case Else
$OTEMP = $O_OBJECT.document.parentWindow
While NOT (String($OTEMP.document.readyState) = "complete" Or $OTEMP.document.readyState = 4 Or $F_ABORT)
IF (TimerDiff($IELOADWAITTIMER) > $I_TIMEOUT) Then
$I_ERRORSTATUSCODE = $_IESTATUS_LOADWAITTIMEOUT
$F_ABORT = True
EndIf
If @error = $_IESTATUS_COMERROR And __IECOMERRORUNRECOVERABLE() Then
$I_ERRORSTATUSCODE = __IECOMERRORUNRECOVERABLE()
$F_ABORT = True
EndIf
Sleep(100)
WEnd
While NOT (String($OTEMP.top.document.readyState) = "complete" Or $O_OBJECT.top.document.readyState = 4 Or $F_ABORT)
IF (TimerDiff($IELOADWAITTIMER) > $I_TIMEOUT) Then
$I_ERRORSTATUSCODE = $_IESTATUS_LOADWAITTIMEOUT
$F_ABORT = True
EndIf
If @error = $_IESTATUS_COMERROR And __IECOMERRORUNRECOVERABLE() Then
$I_ERRORSTATUSCODE = __IECOMERRORUNRECOVERABLE()
$F_ABORT = True
EndIf
Sleep(100)
WEnd
EndSwitch
_IEERRORNOTIFY($F_NOTIFYSTATUS)
__IEINTERNALERRORHANDLERDEREGISTER()
Switch $I_ERRORSTATUSCODE
Case $_IESTATUS_SUCCESS
SetError($_IESTATUS_SUCCESS)
Return 1
Case $_IESTATUS_LOADWAITTIMEOUT
__IEERRORNOTIFY("Warning", "_IELoadWait", "$_IEStatus_LoadWaitTimeout")
SetError($_IESTATUS_LOADWAITTIMEOUT, 3)
Return 0
Case $_IESTATUS_ACCESSISDENIED
__IEERRORNOTIFY("Warning", "_IELoadWait", "$_IEStatus_AccessIsDenied", "Cannot verify readyState. Likely casue: cross-site scripting security restriction.")
SetError($_IESTATUS_ACCESSISDENIED)
Return 0
Case $_IESTATUS_CLIENTDISCONNECTED
__IEERRORNOTIFY("Error", "_IELoadWait", "$_IEStatus_ClientDisconnected", "Browser has been deleted prior to operation.")
SetError($_IESTATUS_CLIENTDISCONNECTED)
Return 0
Case Else
__IEERRORNOTIFY("Error", "_IELoadWait", "$_IEStatus_GeneralError", "Invalid Error Status - Notify IE.au3 developer")
SetError($_IESTATUS_GENERALERROR)
Return 0
EndSwitch
EndFunc
Func _IELOADWAITTIMEOUT($I_TIMEOUT = -1)
If $I_TIMEOUT = -1 Then
SetError($_IESTATUS_SUCCESS)
Return $__IELOADWAITTIMEOUT
Else
$__IELOADWAITTIMEOUT = $I_TIMEOUT
SetError($_IESTATUS_SUCCESS)
Return 1
EndIf
EndFunc
#EndRegion Core functions
#Region Frame Functions
Func _IEISFRAMESET(ByRef $O_OBJECT)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IEIsFrameSet", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
If String($O_OBJECT.document.body.tagName) = "FRAMESET" Then
SetError($_IESTATUS_SUCCESS)
Return 1
Else
SetError($_IESTATUS_SUCCESS)
Return 0
EndIf
EndFunc
Func _IEFRAMEGETCOLLECTION(ByRef $O_OBJECT, $I_INDEX = -1)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IEFrameGetCollection", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
$I_INDEX = Number($I_INDEX)
Select
Case $I_INDEX = -1
SetError($_IESTATUS_SUCCESS)
SetExtended($O_OBJECT.document.parentwindow.frames.length)
Return $O_OBJECT.document.parentwindow.frames
Case $I_INDEX > -1 And $I_INDEX < $O_OBJECT.document.parentwindow.frames.length
SetError($_IESTATUS_SUCCESS)
SetExtended($O_OBJECT.document.parentwindow.frames.length)
Return $O_OBJECT.document.parentwindow.frames.item($I_INDEX)
Case $I_INDEX < -1
__IEERRORNOTIFY("Error", "_IEFrameGetCollection", "$_IEStatus_InvalidValue", "$i_index < -1")
SetError($_IESTATUS_INVALIDVALUE, 2)
Return 0
Case Else
__IEERRORNOTIFY("Warning", "_IEFrameGetCollection", "$_IEStatus_NoMatch")
SetError($_IESTATUS_NOMATCH, 2)
Return 0
EndSelect
EndFunc
Func _IEFRAMEGETOBJBYNAME(ByRef $O_OBJECT, $S_NAME)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IEFrameGetObjByName", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
Local $OTEMP, $OFRAMES, $OFRAME
If Not __IEISOBJTYPE($O_OBJECT, "browserdom") Then
__IEERRORNOTIFY("Error", "_IEFrameGetObjByName", "$_IEStatus_InvalidObjectType")
SetError($_IESTATUS_INVALIDOBJECTTYPE, 1)
Return 0
EndIf
If __IEISOBJTYPE($O_OBJECT, "document") Then
$OTEMP = $O_OBJECT.parentWindow
Else
$OTEMP = $O_OBJECT.document.parentWindow
EndIf
If _IEISFRAMESET($OTEMP) Then
$OFRAMES = _IETAGNAMEGETCOLLECTION($OTEMP, "frame")
Else
$OFRAMES = _IETAGNAMEGETCOLLECTION($OTEMP, "iframe")
EndIf
If $OFRAMES.length Then
For $OFRAME In $OFRAMES
If $OFRAME.name = $S_NAME Then
SetError($_IESTATUS_SUCCESS)
Return $OTEMP.frames($S_NAME)
EndIf
Next
__IEERRORNOTIFY("Warning", "_IEFrameGetObjByName", "$_IEStatus_NoMatch", "No frames matching name")
SetError($_IESTATUS_NOMATCH, 2)
Return 0
Else
__IEERRORNOTIFY("Warning", "_IEFrameGetObjByName", "$_IEStatus_NoMatch", "No Frames found")
SetError($_IESTATUS_NOMATCH, 2)
Return 0
EndIf
EndFunc
#EndRegion Frame Functions
#Region Link functions
Func _IELINKCLICKBYTEXT(ByRef $O_OBJECT, $S_LINKTEXT, $I_INDEX = 0, $F_WAIT = 1)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IELinkClickByText", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
Local $FOUND = 0, $LINK, $LINKTEXT, $LINKS = $O_OBJECT.document.links
$I_INDEX = Number($I_INDEX)
For $LINK In $LINKS
$LINKTEXT = $LINK.outerText & ""
If $LINKTEXT = $S_LINKTEXT Then
IF ($FOUND = $I_INDEX) Then
$LINK.click
If $F_WAIT Then
_IELOADWAIT($O_OBJECT)
SetError(@error)
Return -1
EndIf
SetError($_IESTATUS_SUCCESS)
Return -1
EndIf
$FOUND = $FOUND + 1
EndIf
Next
__IEERRORNOTIFY("Warning", "_IELinkClickByText", "$_IEStatus_NoMatch")
SetError($_IESTATUS_NOMATCH)
Return 0
EndFunc
Func _IELINKCLICKBYINDEX(ByRef $O_OBJECT, $I_INDEX, $F_WAIT = 1)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IELinkClickByIndex", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
Local $OLINKS = $O_OBJECT.document.links, $OLINK
$I_INDEX = Number($I_INDEX)
IF ($I_INDEX >= 0) AND ($I_INDEX <= $OLINKS.length - 1) Then
$OLINK = $OLINKS($I_INDEX)
$OLINK.click
If $F_WAIT Then
_IELOADWAIT($O_OBJECT)
SetError(@error)
Return -1
EndIf
SetError($_IESTATUS_SUCCESS)
Return -1
Else
__IEERRORNOTIFY("Warning", "_IELinkClickByIndex", "$_IEStatus_NoMatch")
SetError($_IESTATUS_NOMATCH, 2)
Return 0
EndIf
EndFunc
Func _IELINKGETCOLLECTION(ByRef $O_OBJECT, $I_INDEX = -1)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IELinkGetCollection", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
$I_INDEX = Number($I_INDEX)
Select
Case $I_INDEX = -1
SetError($_IESTATUS_SUCCESS)
SetExtended($O_OBJECT.document.links.length)
Return $O_OBJECT.document.links
Case $I_INDEX > -1 And $I_INDEX < $O_OBJECT.document.links.length
SetError($_IESTATUS_SUCCESS)
SetExtended($O_OBJECT.document.links.length)
Return $O_OBJECT.document.links.item($I_INDEX)
Case $I_INDEX < -1
__IEERRORNOTIFY("Error", "_IELinkGetCollection", "$_IEStatus_InvalidValue")
SetError($_IESTATUS_INVALIDVALUE, 2)
Return 0
Case Else
__IEERRORNOTIFY("Warning", "_IELinkGetCollection", "$_IEStatus_NoMatch")
SetError($_IESTATUS_NOMATCH, 2)
Return 0
EndSelect
EndFunc
#EndRegion Link functions
#Region Image functions
Func _IEIMGCLICK(ByRef $O_OBJECT, $S_LINKTEXT, $S_MODE = "src", $I_INDEX = 0, $F_WAIT = 1)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IEImgClick", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
Local $LINKTEXT, $FOUND = 0, $IMG, $IMGS = $O_OBJECT.document.images
$S_MODE = StringLower($S_MODE)
$I_INDEX = Number($I_INDEX)
For $IMG In $IMGS
Select
Case $S_MODE = "alt"
$LINKTEXT = $IMG.alt
Case $S_MODE = "name"
$LINKTEXT = $IMG.name
Case $S_MODE = "src"
$LINKTEXT = $IMG.src
Case Else
__IEERRORNOTIFY("Error", "_IEImgClick", "$_IEStatus_InvalidValue", "Invalid mode: " & $S_MODE)
SetError($_IESTATUS_INVALIDVALUE, 3)
Return 0
EndSelect
If StringInStr($LINKTEXT, $S_LINKTEXT) Then
IF ($FOUND = $I_INDEX) Then
$IMG.click
If $F_WAIT Then
_IELOADWAIT($O_OBJECT)
SetError(@error)
Return -1
EndIf
SetError($_IESTATUS_SUCCESS)
Return -1
EndIf
$FOUND = $FOUND + 1
EndIf
Next
__IEERRORNOTIFY("Warning", "_IEImgClick", "$_IEStatus_NoMatch")
SetError($_IESTATUS_NOMATCH)
Return 0
EndFunc
Func _IEIMGGETCOLLECTION(ByRef $O_OBJECT, $I_INDEX = -1)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IEImgGetCollection", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
Local $OTEMP = _IEDOCGETOBJ($O_OBJECT)
$I_INDEX = Number($I_INDEX)
Select
Case $I_INDEX = -1
SetError($_IESTATUS_SUCCESS)
SetExtended($OTEMP.images.length)
Return $OTEMP.images
Case $I_INDEX > -1 And $I_INDEX < $OTEMP.images.length
SetError($_IESTATUS_SUCCESS)
SetExtended($OTEMP.images.length)
Return $OTEMP.images.item($I_INDEX)
Case $I_INDEX < -1
__IEERRORNOTIFY("Error", "_IEImgGetCollection", "$_IEStatus_InvalidValue", "$i_index < -1")
SetError($_IESTATUS_INVALIDVALUE, 2)
Return 0
Case Else
__IEERRORNOTIFY("Warning", "_IEImgGetCollection", "$_IEStatus_NoMatch")
SetError($_IESTATUS_NOMATCH, 1)
Return 0
EndSelect
EndFunc
#EndRegion Image functions
#Region Form functions
Func _IEFORMGETCOLLECTION(ByRef $O_OBJECT, $I_INDEX = -1)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IEFormGetCollection", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
Local $OTEMP = _IEDOCGETOBJ($O_OBJECT)
$I_INDEX = Number($I_INDEX)
Select
Case $I_INDEX = -1
SetError($_IESTATUS_SUCCESS)
SetExtended($OTEMP.forms.length)
Return $OTEMP.forms
Case $I_INDEX > -1 And $I_INDEX < $OTEMP.forms.length
SetError($_IESTATUS_SUCCESS)
SetExtended($OTEMP.forms.length)
Return $OTEMP.forms.item($I_INDEX)
Case $I_INDEX < -1
__IEERRORNOTIFY("Error", "_IEFormGetCollection", "$_IEStatus_InvalidValue", "$i_index < -1")
SetError($_IESTATUS_INVALIDVALUE, 2)
Return 0
Case Else
__IEERRORNOTIFY("Warning", "_IEFormGetCollection", "$_IEStatus_NoMatch")
SetError($_IESTATUS_NOMATCH, 1)
Return 0
EndSelect
EndFunc
Func _IEFORMGETOBJBYNAME(ByRef $O_OBJECT, $S_NAME, $I_INDEX = 0)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IEFormGetObjByName", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
Local $O_COL, $I_LENGTH = 0
$O_COL = $O_OBJECT.document.forms.item($S_NAME)
If IsObj($O_COL) Then
If __IEISOBJTYPE($O_COL, "elementcollection") Then
$I_LENGTH = $O_COL.length
Else
$I_LENGTH = 1
EndIf
EndIf
$I_INDEX = Number($I_INDEX)
If $I_INDEX = -1 Then
SetError($_IESTATUS_SUCCESS)
SetExtended($I_LENGTH)
Return $O_OBJECT.document.forms.item($S_NAME)
Else
If IsObj($O_OBJECT.document.forms.item($S_NAME, $I_INDEX)) Then
SetError($_IESTATUS_SUCCESS)
SetExtended($I_LENGTH)
Return $O_OBJECT.document.forms.item($S_NAME, $I_INDEX)
Else
__IEERRORNOTIFY("Warning", "_IEFormGetObjByName", "$_IEStatus_NoMatch")
SetError($_IESTATUS_NOMATCH)
Return 0
EndIf
EndIf
EndFunc
Func _IEFORMELEMENTGETCOLLECTION(ByRef $O_OBJECT, $I_INDEX = -1)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IEFormElementGetCollection", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
If Not __IEISOBJTYPE($O_OBJECT, "form") Then
__IEERRORNOTIFY("Error", "_IEFormElementGetCollection", "$_IEStatus_InvalidObjectType")
SetError($_IESTATUS_INVALIDOBJECTTYPE, 1)
Return 0
EndIf
$I_INDEX = Number($I_INDEX)
Select
Case $I_INDEX = -1
SetError($_IESTATUS_SUCCESS)
SetExtended($O_OBJECT.elements.length)
Return $O_OBJECT.elements
Case $I_INDEX > -1 And $I_INDEX < $O_OBJECT.elements.length
SetError($_IESTATUS_SUCCESS)
SetExtended($O_OBJECT.elements.length)
Return $O_OBJECT.elements.item($I_INDEX)
Case $I_INDEX < -1
__IEERRORNOTIFY("Error", "_IEFormElementGetCollection", "$_IEStatus_InvalidValue", "$i_index < -1")
SetError($_IESTATUS_INVALIDVALUE, 2)
Return 0
Case Else
SetError($_IESTATUS_NOMATCH, 1)
Return 0
EndSelect
EndFunc
Func _IEFORMELEMENTGETOBJBYNAME(ByRef $O_OBJECT, $S_NAME, $I_INDEX = 0)
If Not IsObj($O_OBJECT) Then
__IEERRORNOTIFY("Error", "_IEFormElementGetObjByName", "$_IEStatus_InvalidDataType")
SetError($_IESTATUS_INVALIDDATATYPE, 1)
Return 0
EndIf
If Not __IEISOBJTYPE($O_OBJECT, "form") Then
__IEERRORNOTIFY("Error", "_IEFormElementGetObjByName", "$_IEStatus_InvalidObjectType")
SetError($_IESTATUS_INVALIDOBJECTTYPE, 1)
Return 0
EndIf
Local $O_COL, $I_LENGTH = 0
$O_COL = $O_OBJECT.elements.item($S_NAME)