Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 232.45 KB | None | 0 0
  1. FUNC _HexToString($STRHEX)
  2. If StringLeft($STRHEX, 2) = "0x" Then Return BinaryToString($STRHEX)
  3. Return BinaryToString("0x" & $STRHEX)
  4. ;### Tidy Error: next line creates a negative tablevel.
  5. ;### Tidy Error: next line creates a negative tablevel for the line after it.
  6. EndFunc
  7. Func _StringBetween($S_STRING, $S_START, $S_END, $V_CASE = -1)
  8.     Local $S_CASE = ""
  9.     If $V_CASE = Default Or $V_CASE = -1 Then $S_CASE = "(?i)"
  10.     Local $S_PATTERN_ESCAPE = "(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)"
  11.     $S_START = StringRegExpReplace($S_START, $S_PATTERN_ESCAPE, "\\$1")
  12.     $S_END = StringRegExpReplace($S_END, $S_PATTERN_ESCAPE, "\\$1")
  13.     If $S_START = "" Then $S_START = "\A"
  14.     If $S_END = "" Then $S_END = "\z"
  15.     Local $A_RET = StringRegExp($S_STRING, "(?s)" & $S_CASE & $S_START & "(.*?)" & $S_END, 3)
  16.     If @error Then Return SetError(1, 0, 0)
  17.     Return $A_RET
  18. EndFunc
  19. Func _StringEncrypt($I_ENCRYPT, $S_ENCRYPTTEXT, $S_ENCRYPTPASSWORD, $I_ENCRYPTLEVEL = 1)
  20.     If $I_ENCRYPT <> 0 And $I_ENCRYPT <> 1 Then
  21.         SetError(1, 0, "")
  22.     ElseIf $S_ENCRYPTTEXT = "" Or $S_ENCRYPTPASSWORD = "" Then
  23.         SetError(1, 0, "")
  24.     Else
  25.         If Number($I_ENCRYPTLEVEL) <= 0 Or Int($I_ENCRYPTLEVEL) <> $I_ENCRYPTLEVEL Then $I_ENCRYPTLEVEL = 1
  26.         Local $V_ENCRYPTMODIFIED
  27.         Local $I_ENCRYPTCOUNTH
  28.         Local $I_ENCRYPTCOUNTG
  29.         Local $V_ENCRYPTSWAP
  30.         Local $AV_ENCRYPTBOX[256][2]
  31.         Local $I_ENCRYPTCOUNTA
  32.         Local $I_ENCRYPTCOUNTB
  33.         Local $I_ENCRYPTCOUNTC
  34.         Local $I_ENCRYPTCOUNTD
  35.         Local $I_ENCRYPTCOUNTE
  36.         Local $V_ENCRYPTCIPHER
  37.         Local $V_ENCRYPTCIPHERBY
  38.         If $I_ENCRYPT = 1 Then
  39.             For $I_ENCRYPTCOUNTF = 0 To $I_ENCRYPTLEVEL Step 1
  40.                 $I_ENCRYPTCOUNTG = ""
  41.                 $I_ENCRYPTCOUNTH = ""
  42.                 $V_ENCRYPTMODIFIED = ""
  43.                 For $I_ENCRYPTCOUNTG = 1 To StringLen($S_ENCRYPTTEXT)
  44.                     If $I_ENCRYPTCOUNTH = StringLen($S_ENCRYPTPASSWORD) Then
  45.                         $I_ENCRYPTCOUNTH = 1
  46.                     Else
  47.                         $I_ENCRYPTCOUNTH += 1
  48.                     EndIf
  49.                     $V_ENCRYPTMODIFIED = $V_ENCRYPTMODIFIED & Chr(BitXOR(Asc(StringMid($S_ENCRYPTTEXT, $I_ENCRYPTCOUNTG, 1)), Asc(StringMid($S_ENCRYPTPASSWORD, $I_ENCRYPTCOUNTH, 1)), 255))
  50.                 Next
  51.                 $S_ENCRYPTTEXT = $V_ENCRYPTMODIFIED
  52.                 $I_ENCRYPTCOUNTA = ""
  53.                 $I_ENCRYPTCOUNTB = 0
  54.                 $I_ENCRYPTCOUNTC = ""
  55.                 $I_ENCRYPTCOUNTD = ""
  56.                 $I_ENCRYPTCOUNTE = ""
  57.                 $V_ENCRYPTCIPHERBY = ""
  58.                 $V_ENCRYPTCIPHER = ""
  59.                 $V_ENCRYPTSWAP = ""
  60.                 $AV_ENCRYPTBOX = ""
  61.                 Local $AV_ENCRYPTBOX[256][2]
  62.                 For $I_ENCRYPTCOUNTA = 0 To 255
  63.                     $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTA][1] = Asc(StringMid($S_ENCRYPTPASSWORD, Mod($I_ENCRYPTCOUNTA, StringLen($S_ENCRYPTPASSWORD)) + 1, 1))
  64.                     $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTA][0] = $I_ENCRYPTCOUNTA
  65.                 Next
  66.                 For $I_ENCRYPTCOUNTA = 0 To 255
  67.                     $I_ENCRYPTCOUNTB = Mod(($I_ENCRYPTCOUNTB + $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTA][0] + $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTA][1]), 256)
  68.                     $V_ENCRYPTSWAP = $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTA][0]
  69.                     $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTA][0] = $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTB][0]
  70.                     $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTB][0] = $V_ENCRYPTSWAP
  71.                 Next
  72.                 For $I_ENCRYPTCOUNTA = 1 To StringLen($S_ENCRYPTTEXT)
  73.                     $I_ENCRYPTCOUNTC = Mod(($I_ENCRYPTCOUNTC + 1), 256)
  74.                     $I_ENCRYPTCOUNTD = Mod(($I_ENCRYPTCOUNTD + $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTC][0]), 256)
  75.                     $I_ENCRYPTCOUNTE = $AV_ENCRYPTBOX[Mod(($AV_ENCRYPTBOX[$I_ENCRYPTCOUNTC][0] + $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTD][0]), 256)][0]
  76.                     $V_ENCRYPTCIPHERBY = BitXOR(Asc(StringMid($S_ENCRYPTTEXT, $I_ENCRYPTCOUNTA, 1)), $I_ENCRYPTCOUNTE)
  77.                     $V_ENCRYPTCIPHER &= Hex($V_ENCRYPTCIPHERBY, 2)
  78.                 Next
  79.                 $S_ENCRYPTTEXT = $V_ENCRYPTCIPHER
  80.             Next
  81.         Else
  82.             For $I_ENCRYPTCOUNTF = 0 To $I_ENCRYPTLEVEL Step 1
  83.                 $I_ENCRYPTCOUNTB = 0
  84.                 $I_ENCRYPTCOUNTC = ""
  85.                 $I_ENCRYPTCOUNTD = ""
  86.                 $I_ENCRYPTCOUNTE = ""
  87.                 $V_ENCRYPTCIPHERBY = ""
  88.                 $V_ENCRYPTCIPHER = ""
  89.                 $V_ENCRYPTSWAP = ""
  90.                 $AV_ENCRYPTBOX = ""
  91.                 Local $AV_ENCRYPTBOX[256][2]
  92.                 For $I_ENCRYPTCOUNTA = 0 To 255
  93.                     $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTA][1] = Asc(StringMid($S_ENCRYPTPASSWORD, Mod($I_ENCRYPTCOUNTA, StringLen($S_ENCRYPTPASSWORD)) + 1, 1))
  94.                     $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTA][0] = $I_ENCRYPTCOUNTA
  95.                 Next
  96.                 For $I_ENCRYPTCOUNTA = 0 To 255
  97.                     $I_ENCRYPTCOUNTB = Mod(($I_ENCRYPTCOUNTB + $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTA][0] + $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTA][1]), 256)
  98.                     $V_ENCRYPTSWAP = $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTA][0]
  99.                     $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTA][0] = $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTB][0]
  100.                     $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTB][0] = $V_ENCRYPTSWAP
  101.                 Next
  102.                 For $I_ENCRYPTCOUNTA = 1 To StringLen($S_ENCRYPTTEXT) Step 2
  103.                     $I_ENCRYPTCOUNTC = Mod(($I_ENCRYPTCOUNTC + 1), 256)
  104.                     $I_ENCRYPTCOUNTD = Mod(($I_ENCRYPTCOUNTD + $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTC][0]), 256)
  105.                     $I_ENCRYPTCOUNTE = $AV_ENCRYPTBOX[Mod(($AV_ENCRYPTBOX[$I_ENCRYPTCOUNTC][0] + $AV_ENCRYPTBOX[$I_ENCRYPTCOUNTD][0]), 256)][0]
  106.                     $V_ENCRYPTCIPHERBY = BitXOR(Dec(StringMid($S_ENCRYPTTEXT, $I_ENCRYPTCOUNTA, 2)), $I_ENCRYPTCOUNTE)
  107.                     $V_ENCRYPTCIPHER = $V_ENCRYPTCIPHER & Chr($V_ENCRYPTCIPHERBY)
  108.                 Next
  109.                 $S_ENCRYPTTEXT = $V_ENCRYPTCIPHER
  110.                 $I_ENCRYPTCOUNTG = ""
  111.                 $I_ENCRYPTCOUNTH = ""
  112.                 $V_ENCRYPTMODIFIED = ""
  113.                 For $I_ENCRYPTCOUNTG = 1 To StringLen($S_ENCRYPTTEXT)
  114.                     If $I_ENCRYPTCOUNTH = StringLen($S_ENCRYPTPASSWORD) Then
  115.                         $I_ENCRYPTCOUNTH = 1
  116.                     Else
  117.                         $I_ENCRYPTCOUNTH += 1
  118.                     EndIf
  119.                     $V_ENCRYPTMODIFIED &= Chr(BitXOR(Asc(StringMid($S_ENCRYPTTEXT, $I_ENCRYPTCOUNTG, 1)), Asc(StringMid($S_ENCRYPTPASSWORD, $I_ENCRYPTCOUNTH, 1)), 255))
  120.                 Next
  121.                 $S_ENCRYPTTEXT = $V_ENCRYPTMODIFIED
  122.             Next
  123.         EndIf
  124.         Return $S_ENCRYPTTEXT
  125.     EndIf
  126. EndFunc
  127. Func _STRINGEXPLODE($SSTRING, $SDELIMITER, $ILIMIT = 0)
  128.     If $ILIMIT > 0 Then
  129.         $SSTRING = StringReplace($SSTRING, $SDELIMITER, Chr(0), $ILIMIT)
  130.         $SDELIMITER = Chr(0)
  131.     ElseIf $ILIMIT < 0 Then
  132.         Local $IINDEX = StringInStr($SSTRING, $SDELIMITER, 0, $ILIMIT)
  133.         If $IINDEX Then
  134.             $SSTRING = StringLeft($SSTRING, $IINDEX - 1)
  135.         EndIf
  136.     EndIf
  137.     Return StringSplit($SSTRING, $SDELIMITER, 3)
  138. EndFunc
  139. Func _StringInsert($S_STRING, $S_INSERTSTRING, $I_POSITION)
  140.     Local $I_LENGTH, $S_START, $S_END
  141.     If $S_STRING = "" Or (Not IsString($S_STRING)) Then
  142.         Return SetError(1, 0, $S_STRING)
  143.     ElseIf $S_INSERTSTRING = "" Or (Not IsString($S_STRING)) Then
  144.         Return SetError(2, 0, $S_STRING)
  145.     Else
  146.         $I_LENGTH = StringLen($S_STRING)
  147.         If (Abs($I_POSITION) > $I_LENGTH) Or (Not IsInt($I_POSITION)) Then
  148.             Return SetError(3, 0, $S_STRING)
  149.         EndIf
  150.     EndIf
  151.     If $I_POSITION = 0 Then
  152.         Return $S_INSERTSTRING & $S_STRING
  153.     ElseIf $I_POSITION > 0 Then
  154.         $S_START = StringLeft($S_STRING, $I_POSITION)
  155.         $S_END = StringRight($S_STRING, $I_LENGTH - $I_POSITION)
  156.         Return $S_START & $S_INSERTSTRING & $S_END
  157.     ElseIf $I_POSITION < 0 Then
  158.         $S_START = StringLeft($S_STRING, Abs($I_LENGTH + $I_POSITION))
  159.         $S_END = StringRight($S_STRING, Abs($I_POSITION))
  160.         Return $S_START & $S_INSERTSTRING & $S_END
  161.     EndIf
  162. EndFunc
  163. Func _StringProper($S_STRING)
  164.     Local $IX = 0
  165.     Local $CAPNEXT = 1
  166.     Local $S_NSTR = ""
  167.     Local $S_CURCHAR
  168.     For $IX = 1 To StringLen($S_STRING)
  169.         $S_CURCHAR = StringMid($S_STRING, $IX, 1)
  170.         Select
  171.             Case $CAPNEXT = 1
  172.                 If StringRegExp($S_CURCHAR, "[a-zA-Zタ-囿棔]") Then
  173.                     $S_CURCHAR = StringUpper($S_CURCHAR)
  174.                     $CAPNEXT = 0
  175.                 EndIf
  176.             Case Not StringRegExp($S_CURCHAR, "[a-zA-Zタ-囿棔]")
  177.                 $CAPNEXT = 1
  178.             Case Else
  179.                 $S_CURCHAR = StringLower($S_CURCHAR)
  180.         EndSelect
  181.         $S_NSTR &= $S_CURCHAR
  182.     Next
  183.     Return $S_NSTR
  184. EndFunc
  185. Func _StringRepeat($SSTRING, $IREPEATCOUNT)
  186.     Local $SRESULT
  187.     Select
  188.         Case Not StringIsInt($IREPEATCOUNT)
  189.             SetError(1)
  190.             Return ""
  191.         Case StringLen($SSTRING) < 1
  192.             SetError(1)
  193.             Return ""
  194.         Case $IREPEATCOUNT <= 0
  195.             SetError(1)
  196.             Return ""
  197.         Case Else
  198.             For $ICOUNT = 1 To $IREPEATCOUNT
  199.                 $SRESULT &= $SSTRING
  200.             Next
  201.             Return $SRESULT
  202.     EndSelect
  203. EndFunc
  204. Func _StringReverse($S_STRING)
  205.     Local $I_LEN = StringLen($S_STRING)
  206.     If $I_LEN < 1 Then Return SetError(1, 0, "")
  207.     Local $T_CHARS = DllStructCreate("char[" & $I_LEN + 1 & "]")
  208.     DllStructSetData($T_CHARS, 1, $S_STRING)
  209.     Local $A_REV = DllCall("msvcrt.dll", "ptr:cdecl", "_strrev", "ptr", DllStructGetPtr($T_CHARS))
  210.     If @error Or $A_REV[0] = 0 Then Return SetError(2, 0, "")
  211.     Return DllStructGetData($T_CHARS, 1)
  212. EndFunc
  213. Func _StringToHex($STRCHAR)
  214.     Return Hex(StringToBinary($STRCHAR))
  215. EndFunc
  216. Func _ArrayAdd(ByRef $AVARRAY, $VVALUE)
  217.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, -1)
  218.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, -1)
  219.     Local $IUBOUND = UBound($AVARRAY)
  220.     ReDim $AVARRAY[$IUBOUND + 1]
  221.     $AVARRAY[$IUBOUND] = $VVALUE
  222.     Return $IUBOUND
  223. EndFunc
  224. Func _ArrayBinarySearch(Const ByRef $AVARRAY, $VVALUE, $ISTART = 0, $IEND = 0)
  225.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, -1)
  226.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(5, 0, -1)
  227.     Local $IUBOUND = UBound($AVARRAY) - 1
  228.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  229.     If $ISTART < 0 Then $ISTART = 0
  230.     If $ISTART > $IEND Then Return SetError(4, 0, -1)
  231.     Local $IMID = Int(($IEND + $ISTART) / 2)
  232.     If $AVARRAY[$ISTART] > $VVALUE Or $AVARRAY[$IEND] < $VVALUE Then Return SetError(2, 0, -1)
  233.     While $ISTART <= $IMID And $VVALUE <> $AVARRAY[$IMID]
  234.         If $VVALUE < $AVARRAY[$IMID] Then
  235.             $IEND = $IMID - 1
  236.         Else
  237.             $ISTART = $IMID + 1
  238.         EndIf
  239.         $IMID = Int(($IEND + $ISTART) / 2)
  240.     WEnd
  241.     If $ISTART > $IEND Then Return SetError(3, 0, -1)
  242.     Return $IMID
  243. EndFunc
  244. Func _ARRAYCOMBINATIONS(ByRef $AVARRAY, $ISET, $SDELIM = "")
  245.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  246.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
  247.     Local $IN = UBound($AVARRAY)
  248.     Local $IR = $ISET
  249.     Local $AIDX[$IR]
  250.     For $I = 0 To $IR - 1
  251.         $AIDX[$I] = $I
  252.     Next
  253.     Local $ITOTAL = __ARRAY_COMBINATIONS($IN, $IR)
  254.     Local $ILEFT = $ITOTAL
  255.     Local $ARESULT[$ITOTAL + 1]
  256.     $ARESULT[0] = $ITOTAL
  257.     Local $ICOUNT = 1
  258.     While $ILEFT > 0
  259.         __ARRAY_GETNEXT($IN, $IR, $ILEFT, $ITOTAL, $AIDX)
  260.         For $I = 0 To $ISET - 1
  261.             $ARESULT[$ICOUNT] &= $AVARRAY[$AIDX[$I]] & $SDELIM
  262.         Next
  263.         If $SDELIM <> "" Then $ARESULT[$ICOUNT] = StringTrimRight($ARESULT[$ICOUNT], 1)
  264.         $ICOUNT += 1
  265.     WEnd
  266.     Return $ARESULT
  267. EndFunc
  268. Func _ArrayConcatenate(ByRef $AVARRAYTARGET, Const ByRef $AVARRAYSOURCE, $ISTART = 0)
  269.     If Not IsArray($AVARRAYTARGET) Then Return SetError(1, 0, 0)
  270.     If Not IsArray($AVARRAYSOURCE) Then Return SetError(2, 0, 0)
  271.     If UBound($AVARRAYTARGET, 0) <> 1 Then
  272.         If UBound($AVARRAYSOURCE, 0) <> 1 Then Return SetError(5, 0, 0)
  273.         Return SetError(3, 0, 0)
  274.     EndIf
  275.     If UBound($AVARRAYSOURCE, 0) <> 1 Then Return SetError(4, 0, 0)
  276.     Local $IUBOUNDTARGET = UBound($AVARRAYTARGET) - $ISTART, $IUBOUNDSOURCE = UBound($AVARRAYSOURCE)
  277.     ReDim $AVARRAYTARGET[$IUBOUNDTARGET + $IUBOUNDSOURCE]
  278.     For $I = $ISTART To $IUBOUNDSOURCE - 1
  279.         $AVARRAYTARGET[$IUBOUNDTARGET + $I] = $AVARRAYSOURCE[$I]
  280.     Next
  281.     Return $IUBOUNDTARGET + $IUBOUNDSOURCE
  282. EndFunc
  283. 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)
  284.     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]
  285.     ReDim $AV_ARRAY[@NumParams]
  286.     Return $AV_ARRAY
  287. EndFunc
  288. Func _ArrayDelete(ByRef $AVARRAY, $IELEMENT)
  289.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  290.     Local $IUBOUND = UBound($AVARRAY, 1) - 1
  291.     If Not $IUBOUND Then
  292.         $AVARRAY = ""
  293.         Return 0
  294.     EndIf
  295.     If $IELEMENT < 0 Then $IELEMENT = 0
  296.     If $IELEMENT > $IUBOUND Then $IELEMENT = $IUBOUND
  297.     Switch UBound($AVARRAY, 0)
  298.         Case 1
  299.             For $I = $IELEMENT To $IUBOUND - 1
  300.                 $AVARRAY[$I] = $AVARRAY[$I + 1]
  301.             Next
  302.             ReDim $AVARRAY[$IUBOUND]
  303.         Case 2
  304.             Local $ISUBMAX = UBound($AVARRAY, 2) - 1
  305.             For $I = $IELEMENT To $IUBOUND - 1
  306.                 For $J = 0 To $ISUBMAX
  307.                     $AVARRAY[$I][$J] = $AVARRAY[$I + 1][$J]
  308.                 Next
  309.             Next
  310.             ReDim $AVARRAY[$IUBOUND][$ISUBMAX + 1]
  311.         Case Else
  312.             Return SetError(3, 0, 0)
  313.     EndSwitch
  314.     Return $IUBOUND
  315. EndFunc
  316. Func _ArrayDisplay(Const ByRef $AVARRAY, $STITLE = "Array: ListView Display", $IITEMLIMIT = -1, $ITRANSPOSE = 0, $SSEPARATOR = "", $SREPLACE = "|", $SHEADER = "")
  317.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  318.     Local $IDIMENSION = UBound($AVARRAY, 0), $IUBOUND = UBound($AVARRAY, 1) - 1, $ISUBMAX = UBound($AVARRAY, 2) - 1
  319.     If $IDIMENSION > 2 Then Return SetError(2, 0, 0)
  320.     If $SSEPARATOR = "" Then $SSEPARATOR = Chr(124)
  321.     If _ArraySearch($AVARRAY, $SSEPARATOR, 0, 0, 0, 1) <> -1 Then
  322.         For $X = 1 To 255
  323.             If $X >= 32 And $X <= 127 Then ContinueLoop
  324.             Local $SFIND = _ArraySearch($AVARRAY, Chr($X), 0, 0, 0, 1)
  325.             If $SFIND = -1 Then
  326.                 $SSEPARATOR = Chr($X)
  327.                 ExitLoop
  328.             EndIf
  329.         Next
  330.     EndIf
  331.     Local $VTMP, $IBUFFER = 64
  332.     Local $ICOLLIMIT = 250
  333.     Local $IONEVENTMODE = Opt("GUIOnEventMode", 0), $SDATASEPARATORCHAR = Opt("GUIDataSeparatorChar", $SSEPARATOR)
  334.     If $ISUBMAX < 0 Then $ISUBMAX = 0
  335.     If $ITRANSPOSE Then
  336.         $VTMP = $IUBOUND
  337.         $IUBOUND = $ISUBMAX
  338.         $ISUBMAX = $VTMP
  339.     EndIf
  340.     If $ISUBMAX > $ICOLLIMIT Then $ISUBMAX = $ICOLLIMIT
  341.     If $IITEMLIMIT < 1 Then $IITEMLIMIT = $IUBOUND
  342.     If $IUBOUND > $IITEMLIMIT Then $IUBOUND = $IITEMLIMIT
  343.     If $SHEADER = "" Then
  344.         $SHEADER = "Row  "
  345.         For $I = 0 To $ISUBMAX
  346.             $SHEADER &= $SSEPARATOR & "Col " & $I
  347.         Next
  348.     EndIf
  349.     Local $AVARRAYTEXT[$IUBOUND + 1]
  350.     For $I = 0 To $IUBOUND
  351.         $AVARRAYTEXT[$I] = "[" & $I & "]"
  352.         For $J = 0 To $ISUBMAX
  353.             If $IDIMENSION = 1 Then
  354.                 If $ITRANSPOSE Then
  355.                     $VTMP = $AVARRAY[$J]
  356.                 Else
  357.                     $VTMP = $AVARRAY[$I]
  358.                 EndIf
  359.             Else
  360.                 If $ITRANSPOSE Then
  361.                     $VTMP = $AVARRAY[$J][$I]
  362.                 Else
  363.                     $VTMP = $AVARRAY[$I][$J]
  364.                 EndIf
  365.             EndIf
  366.             $VTMP = StringReplace($VTMP, $SSEPARATOR, $SREPLACE, 0, 1)
  367.             $AVARRAYTEXT[$I] &= $SSEPARATOR & $VTMP
  368.             $VTMP = StringLen($VTMP)
  369.             If $VTMP > $IBUFFER Then $IBUFFER = $VTMP
  370.         Next
  371.     Next
  372.     $IBUFFER += 1
  373.     Local Const $_ARRAYCONSTANT_GUI_DOCKBORDERS = 102
  374.     Local Const $_ARRAYCONSTANT_GUI_DOCKBOTTOM = 64
  375.     Local Const $_ARRAYCONSTANT_GUI_DOCKHEIGHT = 512
  376.     Local Const $_ARRAYCONSTANT_GUI_DOCKLEFT = 2
  377.     Local Const $_ARRAYCONSTANT_GUI_DOCKRIGHT = 4
  378.     Local Const $_ARRAYCONSTANT_GUI_EVENT_CLOSE = -3
  379.     Local Const $_ARRAYCONSTANT_LVIF_PARAM = 4
  380.     Local Const $_ARRAYCONSTANT_LVIF_TEXT = 1
  381.     Local Const $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH = (4096 + 29)
  382.     Local Const $_ARRAYCONSTANT_LVM_GETITEMCOUNT = (4096 + 4)
  383.     Local Const $_ARRAYCONSTANT_LVM_GETITEMSTATE = (4096 + 44)
  384.     Local Const $_ARRAYCONSTANT_LVM_INSERTITEMW = (4096 + 77)
  385.     Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (4096 + 54)
  386.     Local Const $_ARRAYCONSTANT_LVM_SETITEMW = (4096 + 76)
  387.     Local Const $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT = 32
  388.     Local Const $_ARRAYCONSTANT_LVS_EX_GRIDLINES = 1
  389.     Local Const $_ARRAYCONSTANT_LVS_SHOWSELALWAYS = 8
  390.     Local Const $_ARRAYCONSTANT_WS_EX_CLIENTEDGE = 512
  391.     Local Const $_ARRAYCONSTANT_WS_MAXIMIZEBOX = 65536
  392.     Local Const $_ARRAYCONSTANT_WS_MINIMIZEBOX = 131072
  393.     Local Const $_ARRAYCONSTANT_WS_SIZEBOX = 262144
  394.     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"
  395.     Local $IADDMASK = BitOR($_ARRAYCONSTANT_LVIF_TEXT, $_ARRAYCONSTANT_LVIF_PARAM)
  396.     Local $TBUFFER = DllStructCreate("wchar Text[" & $IBUFFER & "]"), $PBUFFER = DllStructGetPtr($TBUFFER)
  397.     Local $TITEM = DllStructCreate($_ARRAYCONSTANT_TAGLVITEM), $PITEM = DllStructGetPtr($TITEM)
  398.     DllStructSetData($TITEM, "Param", 0)
  399.     DllStructSetData($TITEM, "Text", $PBUFFER)
  400.     DllStructSetData($TITEM, "TextMax", $IBUFFER)
  401.     Local $IWIDTH = 640, $IHEIGHT = 480
  402.     Local $HGUI = GUICreate($STITLE, $IWIDTH, $IHEIGHT, Default, Default, BitOR($_ARRAYCONSTANT_WS_SIZEBOX, $_ARRAYCONSTANT_WS_MINIMIZEBOX, $_ARRAYCONSTANT_WS_MAXIMIZEBOX))
  403.     Local $AIGUISIZE = WinGetClientSize($HGUI)
  404.     Local $HLISTVIEW = GUICtrlCreateListView($SHEADER, 0, 0, $AIGUISIZE[0], $AIGUISIZE[1] - 26, $_ARRAYCONSTANT_LVS_SHOWSELALWAYS)
  405.     Local $HCOPY = GUICtrlCreateButton("Copy Selected", 3, $AIGUISIZE[1] - 23, $AIGUISIZE[0] - 6, 20)
  406.     GUICtrlSetResizing($HLISTVIEW, $_ARRAYCONSTANT_GUI_DOCKBORDERS)
  407.     GUICtrlSetResizing($HCOPY, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
  408.     GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_GRIDLINES, $_ARRAYCONSTANT_LVS_EX_GRIDLINES)
  409.     GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT)
  410.     GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE)
  411.     Local $AITEM
  412.     For $I = 0 To $IUBOUND
  413.         If GUICtrlCreateListViewItem($AVARRAYTEXT[$I], $HLISTVIEW) = 0 Then
  414.             $AITEM = StringSplit($AVARRAYTEXT[$I], $SSEPARATOR)
  415.             DllStructSetData($TBUFFER, "Text", $AITEM[1])
  416.             DllStructSetData($TITEM, "Item", $I)
  417.             DllStructSetData($TITEM, "SubItem", 0)
  418.             DllStructSetData($TITEM, "Mask", $IADDMASK)
  419.             GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_INSERTITEMW, 0, $PITEM)
  420.             DllStructSetData($TITEM, "Mask", $_ARRAYCONSTANT_LVIF_TEXT)
  421.             For $J = 2 To $AITEM[0]
  422.                 DllStructSetData($TBUFFER, "Text", $AITEM[$J])
  423.                 DllStructSetData($TITEM, "SubItem", $J - 1)
  424.                 GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_SETITEMW, 0, $PITEM)
  425.             Next
  426.         EndIf
  427.     Next
  428.     $IWIDTH = 0
  429.     For $I = 0 To $ISUBMAX + 1
  430.         $IWIDTH += GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $I, 0)
  431.     Next
  432.     If $IWIDTH < 250 Then $IWIDTH = 230
  433.     $IWIDTH += 20
  434.     If $IWIDTH > @DesktopWidth Then $IWIDTH = @DesktopWidth - 100
  435.     WinMove($HGUI, "", (@DesktopWidth - $IWIDTH) / 2, Default, $IWIDTH)
  436.     GUISetState(@SW_SHOW, $HGUI)
  437.     While 1
  438.         Switch GUIGetMsg()
  439.             Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
  440.                 ExitLoop
  441.             Case $HCOPY
  442.                 Local $SCLIP = ""
  443.                 Local $AICURITEMS[1] = [0]
  444.                 For $I = 0 To GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0)
  445.                     If GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $I, 2) Then
  446.                         $AICURITEMS[0] += 1
  447.                         ReDim $AICURITEMS[$AICURITEMS[0] + 1]
  448.                         $AICURITEMS[$AICURITEMS[0]] = $I
  449.                     EndIf
  450.                 Next
  451.                 If Not $AICURITEMS[0] Then
  452.                     For $SITEM In $AVARRAYTEXT
  453.                         $SCLIP &= $SITEM & @CRLF
  454.                     Next
  455.                 Else
  456.                     For $I = 1 To UBound($AICURITEMS) - 1
  457.                         $SCLIP &= $AVARRAYTEXT[$AICURITEMS[$I]] & @CRLF
  458.                     Next
  459.                 EndIf
  460.                 ClipPut($SCLIP)
  461.         EndSwitch
  462.     WEnd
  463.     GUIDelete($HGUI)
  464.     Opt("GUIOnEventMode", $IONEVENTMODE)
  465.     Opt("GUIDataSeparatorChar", $SDATASEPARATORCHAR)
  466.     Return 1
  467. EndFunc
  468. Func _ArrayFindAll(Const ByRef $AVARRAY, $VVALUE, $ISTART = 0, $IEND = 0, $ICASE = 0, $IPARTIAL = 0, $ISUBITEM = 0)
  469.     $ISTART = _ArraySearch($AVARRAY, $VVALUE, $ISTART, $IEND, $ICASE, $IPARTIAL, 1, $ISUBITEM)
  470.     If @error Then Return SetError(@error, 0, -1)
  471.     Local $IINDEX = 0, $AVRESULT[UBound($AVARRAY)]
  472.     Do
  473.         $AVRESULT[$IINDEX] = $ISTART
  474.         $IINDEX += 1
  475.         $ISTART = _ArraySearch($AVARRAY, $VVALUE, $ISTART + 1, $IEND, $ICASE, $IPARTIAL, 1, $ISUBITEM)
  476.     Until @error
  477.     ReDim $AVRESULT[$IINDEX]
  478.     Return $AVRESULT
  479. EndFunc
  480. Func _ArrayInsert(ByRef $AVARRAY, $IELEMENT, $VVALUE = "")
  481.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  482.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
  483.     Local $IUBOUND = UBound($AVARRAY) + 1
  484.     ReDim $AVARRAY[$IUBOUND]
  485.     For $I = $IUBOUND - 1 To $IELEMENT + 1 Step -1
  486.         $AVARRAY[$I] = $AVARRAY[$I - 1]
  487.     Next
  488.     $AVARRAY[$IELEMENT] = $VVALUE
  489.     Return $IUBOUND
  490. EndFunc
  491. Func _ArrayMax(Const ByRef $AVARRAY, $ICOMPNUMERIC = 0, $ISTART = 0, $IEND = 0)
  492.     Local $IRESULT = _ArrayMaxIndex($AVARRAY, $ICOMPNUMERIC, $ISTART, $IEND)
  493.     If @error Then Return SetError(@error, 0, "")
  494.     Return $AVARRAY[$IRESULT]
  495. EndFunc
  496. Func _ArrayMaxIndex(Const ByRef $AVARRAY, $ICOMPNUMERIC = 0, $ISTART = 0, $IEND = 0)
  497.     If Not IsArray($AVARRAY) Or UBound($AVARRAY, 0) <> 1 Then Return SetError(1, 0, -1)
  498.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, -1)
  499.     Local $IUBOUND = UBound($AVARRAY) - 1
  500.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  501.     If $ISTART < 0 Then $ISTART = 0
  502.     If $ISTART > $IEND Then Return SetError(2, 0, -1)
  503.     Local $IMAXINDEX = $ISTART
  504.     If $ICOMPNUMERIC Then
  505.         For $I = $ISTART To $IEND
  506.             If Number($AVARRAY[$IMAXINDEX]) < Number($AVARRAY[$I]) Then $IMAXINDEX = $I
  507.         Next
  508.     Else
  509.         For $I = $ISTART To $IEND
  510.             If $AVARRAY[$IMAXINDEX] < $AVARRAY[$I] Then $IMAXINDEX = $I
  511.         Next
  512.     EndIf
  513.     Return $IMAXINDEX
  514. EndFunc
  515. Func _ArrayMin(Const ByRef $AVARRAY, $ICOMPNUMERIC = 0, $ISTART = 0, $IEND = 0)
  516.     Local $IRESULT = _ArrayMinIndex($AVARRAY, $ICOMPNUMERIC, $ISTART, $IEND)
  517.     If @error Then Return SetError(@error, 0, "")
  518.     Return $AVARRAY[$IRESULT]
  519. EndFunc
  520. Func _ArrayMinIndex(Const ByRef $AVARRAY, $ICOMPNUMERIC = 0, $ISTART = 0, $IEND = 0)
  521.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, -1)
  522.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, -1)
  523.     Local $IUBOUND = UBound($AVARRAY) - 1
  524.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  525.     If $ISTART < 0 Then $ISTART = 0
  526.     If $ISTART > $IEND Then Return SetError(2, 0, -1)
  527.     Local $IMININDEX = $ISTART
  528.     If $ICOMPNUMERIC Then
  529.         For $I = $ISTART To $IEND
  530.             If Number($AVARRAY[$IMININDEX]) > Number($AVARRAY[$I]) Then $IMININDEX = $I
  531.         Next
  532.     Else
  533.         For $I = $ISTART To $IEND
  534.             If $AVARRAY[$IMININDEX] > $AVARRAY[$I] Then $IMININDEX = $I
  535.         Next
  536.     EndIf
  537.     Return $IMININDEX
  538. EndFunc
  539. Func _ARRAYPERMUTE(ByRef $AVARRAY, $SDELIM = "")
  540.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  541.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
  542.     Local $ISIZE = UBound($AVARRAY), $IFACTORIAL = 1, $AIDX[$ISIZE], $ARESULT[1], $ICOUNT = 1
  543.     For $I = 0 To $ISIZE - 1
  544.         $AIDX[$I] = $I
  545.     Next
  546.     For $I = $ISIZE To 1 Step -1
  547.         $IFACTORIAL *= $I
  548.     Next
  549.     ReDim $ARESULT[$IFACTORIAL + 1]
  550.     $ARESULT[0] = $IFACTORIAL
  551.     __ARRAY_EXETERINTERNAL($AVARRAY, 0, $ISIZE, $SDELIM, $AIDX, $ARESULT, $ICOUNT)
  552.     Return $ARESULT
  553. EndFunc
  554. Func _ArrayPop(ByRef $AVARRAY)
  555.     If (Not IsArray($AVARRAY)) Then Return SetError(1, 0, "")
  556.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, "")
  557.     Local $IUBOUND = UBound($AVARRAY) - 1, $SLASTVAL = $AVARRAY[$IUBOUND]
  558.     If Not $IUBOUND Then
  559.         $AVARRAY = ""
  560.     Else
  561.         ReDim $AVARRAY[$IUBOUND]
  562.     EndIf
  563.     Return $SLASTVAL
  564. EndFunc
  565. Func _ArrayPush(ByRef $AVARRAY, $VVALUE, $IDIRECTION = 0)
  566.     If (Not IsArray($AVARRAY)) Then Return SetError(1, 0, 0)
  567.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, 0)
  568.     Local $IUBOUND = UBound($AVARRAY) - 1
  569.     If IsArray($VVALUE) Then
  570.         Local $IUBOUNDS = UBound($VVALUE)
  571.         If ($IUBOUNDS - 1) > $IUBOUND Then Return SetError(2, 0, 0)
  572.         If $IDIRECTION Then
  573.             For $I = $IUBOUND To $IUBOUNDS Step -1
  574.                 $AVARRAY[$I] = $AVARRAY[$I - $IUBOUNDS]
  575.             Next
  576.             For $I = 0 To $IUBOUNDS - 1
  577.                 $AVARRAY[$I] = $VVALUE[$I]
  578.             Next
  579.         Else
  580.             For $I = 0 To $IUBOUND - $IUBOUNDS
  581.                 $AVARRAY[$I] = $AVARRAY[$I + $IUBOUNDS]
  582.             Next
  583.             For $I = 0 To $IUBOUNDS - 1
  584.                 $AVARRAY[$I + $IUBOUND - $IUBOUNDS + 1] = $VVALUE[$I]
  585.             Next
  586.         EndIf
  587.     Else
  588.         If $IDIRECTION Then
  589.             For $I = $IUBOUND To 1 Step -1
  590.                 $AVARRAY[$I] = $AVARRAY[$I - 1]
  591.             Next
  592.             $AVARRAY[0] = $VVALUE
  593.         Else
  594.             For $I = 0 To $IUBOUND - 1
  595.                 $AVARRAY[$I] = $AVARRAY[$I + 1]
  596.             Next
  597.             $AVARRAY[$IUBOUND] = $VVALUE
  598.         EndIf
  599.     EndIf
  600.     Return 1
  601. EndFunc
  602. Func _ArrayReverse(ByRef $AVARRAY, $ISTART = 0, $IEND = 0)
  603.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  604.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, 0)
  605.     Local $VTMP, $IUBOUND = UBound($AVARRAY) - 1
  606.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  607.     If $ISTART < 0 Then $ISTART = 0
  608.     If $ISTART > $IEND Then Return SetError(2, 0, 0)
  609.     For $I = $ISTART To Int(($ISTART + $IEND - 1) / 2)
  610.         $VTMP = $AVARRAY[$I]
  611.         $AVARRAY[$I] = $AVARRAY[$IEND]
  612.         $AVARRAY[$IEND] = $VTMP
  613.         $IEND -= 1
  614.     Next
  615.     Return 1
  616. EndFunc
  617. Func _ArraySearch(Const ByRef $AVARRAY, $VVALUE, $ISTART = 0, $IEND = 0, $ICASE = 0, $IPARTIAL = 0, $IFORWARD = 1, $ISUBITEM = -1)
  618.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, -1)
  619.     If UBound($AVARRAY, 0) > 2 Or UBound($AVARRAY, 0) < 1 Then Return SetError(2, 0, -1)
  620.     Local $IUBOUND = UBound($AVARRAY) - 1
  621.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  622.     If $ISTART < 0 Then $ISTART = 0
  623.     If $ISTART > $IEND Then Return SetError(4, 0, -1)
  624.     Local $ISTEP = 1
  625.     If Not $IFORWARD Then
  626.         Local $ITMP = $ISTART
  627.         $ISTART = $IEND
  628.         $IEND = $ITMP
  629.         $ISTEP = -1
  630.     EndIf
  631.     Switch UBound($AVARRAY, 0)
  632.         Case 1
  633.             If Not $IPARTIAL Then
  634.                 If Not $ICASE Then
  635.                     For $I = $ISTART To $IEND Step $ISTEP
  636.                         If $AVARRAY[$I] = $VVALUE Then Return $I
  637.                     Next
  638.                 Else
  639.                     For $I = $ISTART To $IEND Step $ISTEP
  640.                         If $AVARRAY[$I] == $VVALUE Then Return $I
  641.                     Next
  642.                 EndIf
  643.             Else
  644.                 For $I = $ISTART To $IEND Step $ISTEP
  645.                     If StringInStr($AVARRAY[$I], $VVALUE, $ICASE) > 0 Then Return $I
  646.                 Next
  647.             EndIf
  648.         Case 2
  649.             Local $IUBOUNDSUB = UBound($AVARRAY, 2) - 1
  650.             If $ISUBITEM > $IUBOUNDSUB Then $ISUBITEM = $IUBOUNDSUB
  651.             If $ISUBITEM < 0 Then
  652.                 $ISUBITEM = 0
  653.             Else
  654.                 $IUBOUNDSUB = $ISUBITEM
  655.             EndIf
  656.             For $J = $ISUBITEM To $IUBOUNDSUB
  657.                 If Not $IPARTIAL Then
  658.                     If Not $ICASE Then
  659.                         For $I = $ISTART To $IEND Step $ISTEP
  660.                             If $AVARRAY[$I][$J] = $VVALUE Then Return $I
  661.                         Next
  662.                     Else
  663.                         For $I = $ISTART To $IEND Step $ISTEP
  664.                             If $AVARRAY[$I][$J] == $VVALUE Then Return $I
  665.                         Next
  666.                     EndIf
  667.                 Else
  668.                     For $I = $ISTART To $IEND Step $ISTEP
  669.                         If StringInStr($AVARRAY[$I][$J], $VVALUE, $ICASE) > 0 Then Return $I
  670.                     Next
  671.                 EndIf
  672.             Next
  673.         Case Else
  674.             Return SetError(7, 0, -1)
  675.     EndSwitch
  676.     Return SetError(6, 0, -1)
  677. EndFunc
  678. Func _ArraySort(ByRef $AVARRAY, $IDESCENDING = 0, $ISTART = 0, $IEND = 0, $ISUBITEM = 0)
  679.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  680.     Local $IUBOUND = UBound($AVARRAY) - 1
  681.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  682.     If $ISTART < 0 Then $ISTART = 0
  683.     If $ISTART > $IEND Then Return SetError(2, 0, 0)
  684.     Switch UBound($AVARRAY, 0)
  685.         Case 1
  686.             __ARRAYQUICKSORT1D($AVARRAY, $ISTART, $IEND)
  687.             If $IDESCENDING Then _ArrayReverse($AVARRAY, $ISTART, $IEND)
  688.         Case 2
  689.             Local $ISUBMAX = UBound($AVARRAY, 2) - 1
  690.             If $ISUBITEM > $ISUBMAX Then Return SetError(3, 0, 0)
  691.             If $IDESCENDING Then
  692.                 $IDESCENDING = -1
  693.             Else
  694.                 $IDESCENDING = 1
  695.             EndIf
  696.             __ARRAYQUICKSORT2D($AVARRAY, $IDESCENDING, $ISTART, $IEND, $ISUBITEM, $ISUBMAX)
  697.         Case Else
  698.             Return SetError(4, 0, 0)
  699.     EndSwitch
  700.     Return 1
  701. EndFunc
  702. Func __ARRAYQUICKSORT1D(ByRef $AVARRAY, ByRef $ISTART, ByRef $IEND)
  703.     If $IEND <= $ISTART Then Return
  704.     Local $VTMP
  705.     If ($IEND - $ISTART) < 15 Then
  706.         Local $VCUR
  707.         For $I = $ISTART + 1 To $IEND
  708.             $VTMP = $AVARRAY[$I]
  709.             If IsNumber($VTMP) Then
  710.                 For $J = $I - 1 To $ISTART Step -1
  711.                     $VCUR = $AVARRAY[$J]
  712.                     If ($VTMP >= $VCUR And IsNumber($VCUR)) Or (Not IsNumber($VCUR) And StringCompare($VTMP, $VCUR) >= 0) Then ExitLoop
  713.                     $AVARRAY[$J + 1] = $VCUR
  714.                 Next
  715.             Else
  716.                 For $J = $I - 1 To $ISTART Step -1
  717.                     If (StringCompare($VTMP, $AVARRAY[$J]) >= 0) Then ExitLoop
  718.                     $AVARRAY[$J + 1] = $AVARRAY[$J]
  719.                 Next
  720.             EndIf
  721.             $AVARRAY[$J + 1] = $VTMP
  722.         Next
  723.         Return
  724.     EndIf
  725.     Local $L = $ISTART, $R = $IEND, $VPIVOT = $AVARRAY[Int(($ISTART + $IEND) / 2)], $FNUM = IsNumber($VPIVOT)
  726.     Do
  727.         If $FNUM Then
  728.             While ($AVARRAY[$L] < $VPIVOT And IsNumber($AVARRAY[$L])) Or (Not IsNumber($AVARRAY[$L]) And StringCompare($AVARRAY[$L], $VPIVOT) < 0)
  729.                 $L += 1
  730.             WEnd
  731.             While ($AVARRAY[$R] > $VPIVOT And IsNumber($AVARRAY[$R])) Or (Not IsNumber($AVARRAY[$R]) And StringCompare($AVARRAY[$R], $VPIVOT) > 0)
  732.                 $R -= 1
  733.             WEnd
  734.         Else
  735.             While (StringCompare($AVARRAY[$L], $VPIVOT) < 0)
  736.                 $L += 1
  737.             WEnd
  738.             While (StringCompare($AVARRAY[$R], $VPIVOT) > 0)
  739.                 $R -= 1
  740.             WEnd
  741.         EndIf
  742.         If $L <= $R Then
  743.             $VTMP = $AVARRAY[$L]
  744.             $AVARRAY[$L] = $AVARRAY[$R]
  745.             $AVARRAY[$R] = $VTMP
  746.             $L += 1
  747.             $R -= 1
  748.         EndIf
  749.     Until $L > $R
  750.     __ARRAYQUICKSORT1D($AVARRAY, $ISTART, $R)
  751.     __ARRAYQUICKSORT1D($AVARRAY, $L, $IEND)
  752. EndFunc
  753. Func __ARRAYQUICKSORT2D(ByRef $AVARRAY, ByRef $ISTEP, ByRef $ISTART, ByRef $IEND, ByRef $ISUBITEM, ByRef $ISUBMAX)
  754.     If $IEND <= $ISTART Then Return
  755.     Local $VTMP, $L = $ISTART, $R = $IEND, $VPIVOT = $AVARRAY[Int(($ISTART + $IEND) / 2)][$ISUBITEM], $FNUM = IsNumber($VPIVOT)
  756.     Do
  757.         If $FNUM Then
  758.             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)
  759.                 $L += 1
  760.             WEnd
  761.             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)
  762.                 $R -= 1
  763.             WEnd
  764.         Else
  765.             While ($ISTEP * StringCompare($AVARRAY[$L][$ISUBITEM], $VPIVOT) < 0)
  766.                 $L += 1
  767.             WEnd
  768.             While ($ISTEP * StringCompare($AVARRAY[$R][$ISUBITEM], $VPIVOT) > 0)
  769.                 $R -= 1
  770.             WEnd
  771.         EndIf
  772.         If $L <= $R Then
  773.             For $I = 0 To $ISUBMAX
  774.                 $VTMP = $AVARRAY[$L][$I]
  775.                 $AVARRAY[$L][$I] = $AVARRAY[$R][$I]
  776.                 $AVARRAY[$R][$I] = $VTMP
  777.             Next
  778.             $L += 1
  779.             $R -= 1
  780.         EndIf
  781.     Until $L > $R
  782.     __ARRAYQUICKSORT2D($AVARRAY, $ISTEP, $ISTART, $R, $ISUBITEM, $ISUBMAX)
  783.     __ARRAYQUICKSORT2D($AVARRAY, $ISTEP, $L, $IEND, $ISUBITEM, $ISUBMAX)
  784. EndFunc
  785. Func _ArraySwap(ByRef $VITEM1, ByRef $VITEM2)
  786.     Local $VTMP = $VITEM1
  787.     $VITEM1 = $VITEM2
  788.     $VITEM2 = $VTMP
  789. EndFunc
  790. Func _ArrayToClip(Const ByRef $AVARRAY, $ISTART = 0, $IEND = 0)
  791.     Local $SRESULT = _ArrayToString($AVARRAY, @CR, $ISTART, $IEND)
  792.     If @error Then Return SetError(@error, 0, 0)
  793.     Return ClipPut($SRESULT)
  794. EndFunc
  795. Func _ArrayToString(Const ByRef $AVARRAY, $SDELIM = "|", $ISTART = 0, $IEND = 0)
  796.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, "")
  797.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, "")
  798.     Local $SRESULT, $IUBOUND = UBound($AVARRAY) - 1
  799.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  800.     If $ISTART < 0 Then $ISTART = 0
  801.     If $ISTART > $IEND Then Return SetError(2, 0, "")
  802.     For $I = $ISTART To $IEND
  803.         $SRESULT &= $AVARRAY[$I] & $SDELIM
  804.     Next
  805.     Return StringTrimRight($SRESULT, StringLen($SDELIM))
  806. EndFunc
  807. Func _ArrayTrim(ByRef $AVARRAY, $ITRIMNUM, $IDIRECTION = 0, $ISTART = 0, $IEND = 0)
  808.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  809.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
  810.     Local $IUBOUND = UBound($AVARRAY) - 1
  811.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  812.     If $ISTART < 0 Then $ISTART = 0
  813.     If $ISTART > $IEND Then Return SetError(5, 0, 0)
  814.     If $IDIRECTION Then
  815.         For $I = $ISTART To $IEND
  816.             $AVARRAY[$I] = StringTrimRight($AVARRAY[$I], $ITRIMNUM)
  817.         Next
  818.     Else
  819.         For $I = $ISTART To $IEND
  820.             $AVARRAY[$I] = StringTrimLeft($AVARRAY[$I], $ITRIMNUM)
  821.         Next
  822.     EndIf
  823.     Return 1
  824. EndFunc
  825. Func _ARRAYUNIQUE($AARRAY, $IDIMENSION = 1, $IBASE = 0, $ICASE = 0, $VDELIM = "|")
  826.     Local $IUBOUNDDIM
  827.     If $VDELIM = "|" Then $VDELIM = Chr(1)
  828.     If Not IsArray($AARRAY) Then Return SetError(1, 0, 0)
  829.     If Not $IDIMENSION > 0 Then
  830.         Return SetError(3, 0, 0)
  831.     Else
  832.         $IUBOUNDDIM = UBound($AARRAY, 1)
  833.         If @error Then Return SetError(3, 0, 0)
  834.         If $IDIMENSION > 1 Then
  835.             Local $AARRAYTMP[1]
  836.             For $I = 0 To $IUBOUNDDIM - 1
  837.                 _ArrayAdd($AARRAYTMP, $AARRAY[$I][$IDIMENSION - 1])
  838.             Next
  839.             _ArrayDelete($AARRAYTMP, 0)
  840.         Else
  841.             If UBound($AARRAY, 0) = 1 Then
  842.                 Dim $AARRAYTMP[1]
  843.                 For $I = 0 To $IUBOUNDDIM - 1
  844.                     _ArrayAdd($AARRAYTMP, $AARRAY[$I])
  845.                 Next
  846.                 _ArrayDelete($AARRAYTMP, 0)
  847.             Else
  848.                 Dim $AARRAYTMP[1]
  849.                 For $I = 0 To $IUBOUNDDIM - 1
  850.                     _ArrayAdd($AARRAYTMP, $AARRAY[$I][$IDIMENSION - 1])
  851.                 Next
  852.                 _ArrayDelete($AARRAYTMP, 0)
  853.             EndIf
  854.         EndIf
  855.     EndIf
  856.     Local $SHOLD
  857.     For $ICC = $IBASE To UBound($AARRAYTMP) - 1
  858.         If Not StringInStr($VDELIM & $SHOLD, $VDELIM & $AARRAYTMP[$ICC] & $VDELIM, $ICASE) Then $SHOLD &= $AARRAYTMP[$ICC] & $VDELIM
  859.     Next
  860.     If $SHOLD Then
  861.         $AARRAYTMP = StringSplit(StringTrimRight($SHOLD, StringLen($VDELIM)), $VDELIM, 1)
  862.         Return $AARRAYTMP
  863.     EndIf
  864.     Return SetError(2, 0, 0)
  865. EndFunc
  866. Func __ARRAY_EXETERINTERNAL(ByRef $AVARRAY, $ISTART, $ISIZE, $SDELIM, ByRef $AIDX, ByRef $ARESULT, ByRef $ICOUNT)
  867.     If $ISTART == $ISIZE - 1 Then
  868.         For $I = 0 To $ISIZE - 1
  869.             $ARESULT[$ICOUNT] &= $AVARRAY[$AIDX[$I]] & $SDELIM
  870.         Next
  871.         If $SDELIM <> "" Then $ARESULT[$ICOUNT] = StringTrimRight($ARESULT[$ICOUNT], 1)
  872.         $ICOUNT += 1
  873.     Else
  874.         Local $ITEMP
  875.         For $I = $ISTART To $ISIZE - 1
  876.             $ITEMP = $AIDX[$I]
  877.             $AIDX[$I] = $AIDX[$ISTART]
  878.             $AIDX[$ISTART] = $ITEMP
  879.             __ARRAY_EXETERINTERNAL($AVARRAY, $ISTART + 1, $ISIZE, $SDELIM, $AIDX, $ARESULT, $ICOUNT)
  880.             $AIDX[$ISTART] = $AIDX[$I]
  881.             $AIDX[$I] = $ITEMP
  882.         Next
  883.     EndIf
  884. EndFunc
  885. Func __ARRAY_COMBINATIONS($IN, $IR)
  886.     Local $I_TOTAL = 1
  887.     For $I = $IR To 1 Step -1
  888.         $I_TOTAL *= ($IN / $I)
  889.         $IN -= 1
  890.     Next
  891.     Return Round($I_TOTAL)
  892. EndFunc
  893. Func __ARRAY_GETNEXT($IN, $IR, ByRef $ILEFT, $ITOTAL, ByRef $AIDX)
  894.     If $ILEFT == $ITOTAL Then
  895.         $ILEFT -= 1
  896.         Return
  897.     EndIf
  898.     Local $I = $IR - 1
  899.     While $AIDX[$I] == $IN - $IR + $I
  900.         $I -= 1
  901.     WEnd
  902.     $AIDX[$I] += 1
  903.     For $J = $I + 1 To $IR - 1
  904.         $AIDX[$J] = $AIDX[$I] + $J - $I
  905.     Next
  906.     $ILEFT -= 1
  907. EndFunc
  908. Global Const $FW_DONTCARE = 0
  909. Global Const $FW_THIN = 100
  910. Global Const $FW_EXTRALIGHT = 200
  911. Global Const $FW_ULTRALIGHT = 200
  912. Global Const $FW_LIGHT = 300
  913. Global Const $FW_NORMAL = 400
  914. Global Const $FW_REGULAR = 400
  915. Global Const $FW_MEDIUM = 500
  916. Global Const $FW_SEMIBOLD = 600
  917. Global Const $FW_DEMIBOLD = 600
  918. Global Const $FW_BOLD = 700
  919. Global Const $FW_EXTRABOLD = 800
  920. Global Const $FW_ULTRABOLD = 800
  921. Global Const $FW_HEAVY = 900
  922. Global Const $FW_BLACK = 900
  923. Global Const $CF_EFFECTS = 256
  924. Global Const $CF_PRINTERFONTS = 2
  925. Global Const $CF_SCREENFONTS = 1
  926. Global Const $CF_NOSCRIPTSEL = 8388608
  927. Global Const $CF_INITTOLOGFONTSTRUCT = 64
  928. Global Const $LOGPIXELSX = 88
  929. Global Const $LOGPIXELSY = 90
  930. Global Const $ANSI_CHARSET = 0
  931. Global Const $BALTIC_CHARSET = 186
  932. Global Const $CHINESEBIG5_CHARSET = 136
  933. Global Const $DEFAULT_CHARSET = 1
  934. Global Const $EASTEUROPE_CHARSET = 238
  935. Global Const $GB2312_CHARSET = 134
  936. Global Const $GREEK_CHARSET = 161
  937. Global Const $HANGEUL_CHARSET = 129
  938. Global Const $MAC_CHARSET = 77
  939. Global Const $OEM_CHARSET = 255
  940. Global Const $RUSSIAN_CHARSET = 204
  941. Global Const $SHIFTJIS_CHARSET = 128
  942. Global Const $SYMBOL_CHARSET = 2
  943. Global Const $TURKISH_CHARSET = 162
  944. Global Const $VIETNAMESE_CHARSET = 163
  945. Global Const $OUT_CHARACTER_PRECIS = 2
  946. Global Const $OUT_DEFAULT_PRECIS = 0
  947. Global Const $OUT_DEVICE_PRECIS = 5
  948. Global Const $OUT_OUTLINE_PRECIS = 8
  949. Global Const $OUT_PS_ONLY_PRECIS = 10
  950. Global Const $OUT_RASTER_PRECIS = 6
  951. Global Const $OUT_STRING_PRECIS = 1
  952. Global Const $OUT_STROKE_PRECIS = 3
  953. Global Const $OUT_TT_ONLY_PRECIS = 7
  954. Global Const $OUT_TT_PRECIS = 4
  955. Global Const $CLIP_CHARACTER_PRECIS = 1
  956. Global Const $CLIP_DEFAULT_PRECIS = 0
  957. Global Const $CLIP_EMBEDDED = 128
  958. Global Const $CLIP_LH_ANGLES = 16
  959. Global Const $CLIP_MASK = 15
  960. Global Const $CLIP_STROKE_PRECIS = 2
  961. Global Const $CLIP_TT_ALWAYS = 32
  962. Global Const $ANTIALIASED_QUALITY = 4
  963. Global Const $DEFAULT_QUALITY = 0
  964. Global Const $DRAFT_QUALITY = 1
  965. Global Const $NONANTIALIASED_QUALITY = 3
  966. Global Const $PROOF_QUALITY = 2
  967. Global Const $DEFAULT_PITCH = 0
  968. Global Const $FIXED_PITCH = 1
  969. Global Const $VARIABLE_PITCH = 2
  970. Global Const $FF_DECORATIVE = 80
  971. Global Const $FF_DONTCARE = 0
  972. Global Const $FF_MODERN = 48
  973. Global Const $FF_ROMAN = 16
  974. Global Const $FF_SCRIPT = 64
  975. Global Const $FF_SWISS = 32
  976. Global Const $TAGPOINT = "long X;long Y"
  977. Global Const $TAGRECT = "long Left;long Top;long Right;long Bottom"
  978. Global Const $TAGSIZE = "long X;long Y"
  979. Global Const $TAGMARGINS = "int cxLeftWidth;int cxRightWidth;int cyTopHeight;int cyBottomHeight"
  980. Global Const $TAGFILETIME = "dword Lo;dword Hi"
  981. Global Const $TAGSYSTEMTIME = "word Year;word Month;word Dow;word Day;word Hour;word Minute;word Second;word MSeconds"
  982. Global Const $TAGTIME_ZONE_INFORMATION = "long Bias;wchar StdName[32];word StdDate[8];long StdBias;wchar DayName[32];word DayDate[8];long DayBias"
  983. Global Const $TAGNMHDR = "hwnd hWndFrom;uint_ptr IDFrom;INT Code"
  984. Global Const $TAGCOMBOBOXEXITEM = "uint Mask;int_ptr Item;ptr Text;int TextMax;int Image;int SelectedImage;int OverlayImage;" & "int Indent;lparam Param"
  985. Global Const $TAGNMCBEDRAGBEGIN = $TAGNMHDR & ";int ItemID;ptr szText"
  986. Global Const $TAGNMCBEENDEDIT = $TAGNMHDR & ";bool fChanged;int NewSelection;ptr szText;int Why"
  987. Global Const $TAGNMCOMBOBOXEX = $TAGNMHDR & ";uint Mask;int_ptr Item;ptr Text;int TextMax;int Image;" & "int SelectedImage;int OverlayImage;int Indent;lparam Param"
  988. Global Const $TAGDTPRANGE = "word MinYear;word MinMonth;word MinDOW;word MinDay;word MinHour;word MinMinute;" & "word MinSecond;word MinMSecond;word MaxYear;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;" & "word MaxMinute;word MaxSecond;word MaxMSecond;bool MinValid;bool MaxValid"
  989. Global Const $TAGNMDATETIMECHANGE = $TAGNMHDR & ";dword Flag;" & $TAGSYSTEMTIME
  990. Global Const $TAGNMDATETIMEFORMAT = $TAGNMHDR & ";ptr Format;" & $TAGSYSTEMTIME & ";ptr pDisplay;wchar Display[64]"
  991. Global Const $TAGNMDATETIMEFORMATQUERY = $TAGNMHDR & ";ptr Format;long SizeX;long SizeY"
  992. Global Const $TAGNMDATETIMEKEYDOWN = $TAGNMHDR & ";int VirtKey;ptr Format;" & $TAGSYSTEMTIME
  993. Global Const $TAGNMDATETIMESTRING = $TAGNMHDR & ";ptr UserString;" & $TAGSYSTEMTIME & ";dword Flags"
  994. Global Const $TAGEVENTLOGRECORD = "dword Length;dword Reserved;dword RecordNumber;dword TimeGenerated;dword TimeWritten;dword EventID;" & "word EventType;word NumStrings;word EventCategory;word ReservedFlags;dword ClosingRecordNumber;dword StringOffset;" & "dword UserSidLength;dword UserSidOffset;dword DataLength;dword DataOffset"
  995. Global Const $TAGGDIPBITMAPDATA = "uint Width;uint Height;int Stride;int Format;ptr Scan0;uint_ptr Reserved"
  996. Global Const $TAGGDIPENCODERPARAM = "byte GUID[16];dword Count;dword Type;ptr Values"
  997. Global Const $TAGGDIPENCODERPARAMS = "dword Count;byte Params[0]"
  998. Global Const $TAGGDIPRECTF = "float X;float Y;float Width;float Height"
  999. Global Const $TAGGDIPSTARTUPINPUT = "uint Version;ptr Callback;bool NoThread;bool NoCodecs"
  1000. Global Const $TAGGDIPSTARTUPOUTPUT = "ptr HookProc;ptr UnhookProc"
  1001. Global Const $TAGGDIPIMAGECODECINFO = "byte CLSID[16];byte FormatID[16];ptr CodecName;ptr DllName;ptr FormatDesc;ptr FileExt;" & "ptr MimeType;dword Flags;dword Version;dword SigCount;dword SigSize;ptr SigPattern;ptr SigMask"
  1002. Global Const $TAGGDIPPENCODERPARAMS = "dword Count;byte Params[0]"
  1003. Global Const $TAGHDITEM = "uint Mask;int XY;ptr Text;handle hBMP;int TextMax;int Fmt;lparam Param;int Image;int Order;uint Type;ptr pFilter;uint State"
  1004. Global Const $TAGNMHDDISPINFO = $TAGNMHDR & ";int Item;uint Mask;ptr Text;int TextMax;int Image;lparam lParam"
  1005. Global Const $TAGNMHDFILTERBTNCLICK = $TAGNMHDR & ";int Item;" & $TAGRECT
  1006. Global Const $TAGNMHEADER = $TAGNMHDR & ";int Item;int Button;ptr pItem"
  1007. Global Const $TAGGETIPADDRESS = "byte Field4;byte Field3;byte Field2;byte Field1"
  1008. Global Const $TAGNMIPADDRESS = $TAGNMHDR & ";int Field;int Value"
  1009. Global Const $TAGLVFINDINFO = "uint Flags;ptr Text;lparam Param;" & $TAGPOINT & ";uint Direction"
  1010. Global Const $TAGLVHITTESTINFO = $TAGPOINT & ";uint Flags;int Item;int SubItem"
  1011. Global Const $TAGLVITEM = "uint Mask;int Item;int SubItem;uint State;uint StateMask;ptr Text;int TextMax;int Image;lparam Param;" & "int Indent;int GroupID;uint Columns;ptr pColumns"
  1012. Global Const $TAGNMLISTVIEW = $TAGNMHDR & ";int Item;int SubItem;uint NewState;uint OldState;uint Changed;" & "long ActionX;long ActionY;lparam Param"
  1013. Global Const $TAGNMLVCUSTOMDRAW = $TAGNMHDR & ";dword dwDrawStage;handle hdc;long Left;long Top;long Right;long Bottom;" & "dword_ptr dwItemSpec;uint uItemState;lparam lItemlParam" & ";dword clrText;dword clrTextBk;int iSubItem;dword dwItemType;dword clrFace;int iIconEffect;" & "int iIconPhase;int iPartId;int iStateId;long TextLeft;long TextTop;long TextRight;long TextBottom;uint uAlign"
  1014. Global Const $TAGNMLVDISPINFO = $TAGNMHDR & ";" & $TAGLVITEM
  1015. Global Const $TAGNMLVFINDITEM = $TAGNMHDR & ";" & $TAGLVFINDINFO
  1016. Global Const $TAGNMLVGETINFOTIP = $TAGNMHDR & ";dword Flags;ptr Text;int TextMax;int Item;int SubItem;lparam lParam"
  1017. Global Const $TAGNMITEMACTIVATE = $TAGNMHDR & ";int Index;int SubItem;uint NewState;uint OldState;uint Changed;" & $TAGPOINT & ";lparam lParam;uint KeyFlags"
  1018. Global Const $TAGNMLVKEYDOWN = $TAGNMHDR & ";align 1;word VKey;uint Flags"
  1019. Global Const $TAGNMLVSCROLL = $TAGNMHDR & ";int DX;int DY"
  1020. Global Const $TAGMCHITTESTINFO = "uint Size;" & $TAGPOINT & ";uint Hit;" & $TAGSYSTEMTIME
  1021. Global Const $TAGMCMONTHRANGE = "word MinYear;word MinMonth;word MinDOW;word MinDay;word MinHour;word MinMinute;word MinSecond;" & "word MinMSeconds;word MaxYear;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;word MaxMinute;word MaxSecond;" & "word MaxMSeconds;short Span"
  1022. Global Const $TAGMCRANGE = "word MinYear;word MinMonth;word MinDOW;word MinDay;word MinHour;word MinMinute;word MinSecond;" & "word MinMSeconds;word MaxYear;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;word MaxMinute;word MaxSecond;" & "word MaxMSeconds;short MinSet;short MaxSet"
  1023. Global Const $TAGMCSELRANGE = "word MinYear;word MinMonth;word MinDOW;word MinDay;word MinHour;word MinMinute;word MinSecond;" & "word MinMSeconds;word MaxYear;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;word MaxMinute;word MaxSecond;" & "word MaxMSeconds"
  1024. Global Const $TAGNMDAYSTATE = $TAGNMHDR & ";" & $TAGSYSTEMTIME & ";int DayState;ptr pDayState"
  1025. Global Const $TAGNMSELCHANGE = $TAGNMHDR & ";word BegYear;word BegMonth;word BegDOW;word BegDay;" & "word BegHour;word BegMinute;word BegSecond;word BegMSeconds;word EndYear;word EndMonth;word EndDOW;" & "word EndDay;word EndHour;word EndMinute;word EndSecond;word EndMSeconds"
  1026. Global Const $TAGNMOBJECTNOTIFY = $TAGNMHDR & ";int Item;ptr piid;ptr pObject;long Result"
  1027. Global Const $TAGNMTCKEYDOWN = $TAGNMHDR & ";word VKey;uint Flags"
  1028. Global Const $TAGTVITEM = "uint Mask;handle hItem;uint State;uint StateMask;ptr Text;int TextMax;int Image;int SelectedImage;" & "int Children;lparam Param"
  1029. Global Const $TAGTVITEMEX = $TAGTVITEM & ";int Integral"
  1030. Global Const $TAGNMTREEVIEW = $TAGNMHDR & ";uint Action;uint OldMask;handle OldhItem;uint OldState;uint OldStateMask;" & "ptr OldText;int OldTextMax;int OldImage;int OldSelectedImage;int OldChildren;lparam OldParam;uint NewMask;handle NewhItem;" & "uint NewState;uint NewStateMask;ptr NewText;int NewTextMax;int NewImage;int NewSelectedImage;int NewChildren;" & "lparam NewParam;long PointX;long PointY"
  1031. Global Const $TAGNMTVCUSTOMDRAW = $TAGNMHDR & ";dword DrawStage;handle HDC;long Left;long Top;long Right;long Bottom;" & "dword_ptr ItemSpec;uint ItemState;lparam ItemParam;dword ClrText;dword ClrTextBk;int Level"
  1032. Global Const $TAGNMTVDISPINFO = $TAGNMHDR & ";" & $TAGTVITEM
  1033. Global Const $TAGNMTVGETINFOTIP = $TAGNMHDR & ";ptr Text;int TextMax;handle hItem;lparam lParam"
  1034. Global Const $TAGTVHITTESTINFO = $TAGPOINT & ";uint Flags;handle Item"
  1035. Global Const $TAGNMTVKEYDOWN = $TAGNMHDR & ";word VKey;uint Flags"
  1036. Global Const $TAGNMMOUSE = $TAGNMHDR & ";dword_ptr ItemSpec;dword_ptr ItemData;" & $TAGPOINT & ";lparam HitInfo"
  1037. Global Const $TAGTOKEN_PRIVILEGES = "dword Count;int64 LUID;dword Attributes"
  1038. Global Const $TAGIMAGEINFO = "handle hBitmap;handle hMask;int Unused1;int Unused2;" & $TAGRECT
  1039. Global Const $TAGMENUINFO = "dword Size;INT Mask;dword Style;uint YMax;handle hBack;dword ContextHelpID;ulong_ptr MenuData"
  1040. Global Const $TAGMENUITEMINFO = "uint Size;uint Mask;uint Type;uint State;uint ID;handle SubMenu;handle BmpChecked;handle BmpUnchecked;" & "ulong_ptr ItemData;ptr TypeData;uint CCH;handle BmpItem"
  1041. Global Const $TAGREBARBANDINFO = "uint cbSize;uint fMask;uint fStyle;dword clrFore;dword clrBack;ptr lpText;uint cch;" & "int iImage;hwnd hwndChild;uint cxMinChild;uint cyMinChild;uint cx;handle hbmBack;uint wID;uint cyChild;uint cyMaxChild;" & "uint cyIntegral;uint cxIdeal;lparam lParam;uint cxHeader"
  1042. Global Const $TAGNMREBARAUTOBREAK = $TAGNMHDR & ";uint uBand;uint wID;lparam lParam;uint uMsg;uint fStyleCurrent;bool fAutoBreak"
  1043. Global Const $TAGNMRBAUTOSIZE = $TAGNMHDR & ";bool fChanged;long TargetLeft;long TargetTop;long TargetRight;long TargetBottom;" & "long ActualLeft;long ActualTop;long ActualRight;long ActualBottom"
  1044. Global Const $TAGNMREBAR = $TAGNMHDR & ";dword dwMask;uint uBand;uint fStyle;uint wID;laram lParam"
  1045. Global Const $TAGNMREBARCHEVRON = $TAGNMHDR & ";uint uBand;uint wID;lparam lParam;" & $TAGRECT & ";lparam lParamNM"
  1046. Global Const $TAGNMREBARCHILDSIZE = $TAGNMHDR & ";uint uBand;uint wID;long CLeft;long CTop;long CRight;long CBottom;" & "long BLeft;long BTop;long BRight;long BBottom"
  1047. Global Const $TAGCOLORSCHEME = "dword Size;dword BtnHighlight;dword BtnShadow"
  1048. Global Const $TAGNMTOOLBAR = $TAGNMHDR & ";int iItem;" & "int iBitmap;int idCommand;byte fsState;byte fsStyle;align;dword_ptr dwData;int_ptr iString" & ";int cchText;ptr pszText;" & $TAGRECT
  1049. Global Const $TAGNMTBHOTITEM = $TAGNMHDR & ";int idOld;int idNew;dword dwFlags"
  1050. Global Const $TAGTBBUTTON = "int Bitmap;int Command;byte State;byte Style;align;dword_ptr Param;int_ptr String"
  1051. Global Const $TAGTBBUTTONINFO = "uint Size;dword Mask;int Command;int Image;byte State;byte Style;word CX;dword_ptr Param;ptr Text;int TextMax"
  1052. Global Const $TAGNETRESOURCE = "dword Scope;dword Type;dword DisplayType;dword Usage;ptr LocalName;ptr RemoteName;ptr Comment;ptr Provider"
  1053. Global Const $TAGOVERLAPPED = "ulong_ptr Internal;ulong_ptr InternalHigh;dword Offset;dword OffsetHigh;handle hEvent"
  1054. Global Const $TAGOPENFILENAME = "dword StructSize;hwnd hwndOwner;handle hInstance;ptr lpstrFilter;ptr lpstrCustomFilter;" & "dword nMaxCustFilter;dword nFilterIndex;ptr lpstrFile;dword nMaxFile;ptr lpstrFileTitle;dword nMaxFileTitle;" & "ptr lpstrInitialDir;ptr lpstrTitle;dword Flags;word nFileOffset;word nFileExtension;ptr lpstrDefExt;lparam lCustData;" & "ptr lpfnHook;ptr lpTemplateName;ptr pvReserved;dword dwReserved;dword FlagsEx"
  1055. Global Const $TAGBITMAPINFO = "dword Size;long Width;long Height;word Planes;word BitCount;dword Compression;dword SizeImage;" & "long XPelsPerMeter;long YPelsPerMeter;dword ClrUsed;dword ClrImportant;dword RGBQuad"
  1056. Global Const $TAGBLENDFUNCTION = "byte Op;byte Flags;byte Alpha;byte Format"
  1057. Global Const $TAGGUID = "dword Data1;word Data2;word Data3;byte Data4[8]"
  1058. Global Const $TAGWINDOWPLACEMENT = "uint length; uint flags;uint showCmd;long ptMinPosition[2];long ptMaxPosition[2];long rcNormalPosition[4]"
  1059. Global Const $TAGWINDOWPOS = "hwnd hWnd;hwnd InsertAfter;int X;int Y;int CX;int CY;uint Flags"
  1060. Global Const $TAGSCROLLINFO = "uint cbSize;uint fMask;int  nMin;int  nMax;uint nPage;int  nPos;int  nTrackPos"
  1061. Global Const $TAGSCROLLBARINFO = "dword cbSize;" & $TAGRECT & ";int dxyLineButton;int xyThumbTop;" & "int xyThumbBottom;int reserved;dword rgstate[6]"
  1062. Global Const $TAGLOGFONT = "long Height;long Width;long Escapement;long Orientation;long Weight;byte Italic;byte Underline;" & "byte Strikeout;byte CharSet;byte OutPrecision;byte ClipPrecision;byte Quality;byte PitchAndFamily;wchar FaceName[32]"
  1063. Global Const $TAGKBDLLHOOKSTRUCT = "dword vkCode;dword scanCode;dword flags;dword time;ulong_ptr dwExtraInfo"
  1064. Global Const $TAGPROCESS_INFORMATION = "handle hProcess;handle hThread;dword ProcessID;dword ThreadID"
  1065. Global Const $TAGSTARTUPINFO = "dword Size;ptr Reserved1;ptr Desktop;ptr Title;dword X;dword Y;dword XSize;dword YSize;dword XCountChars;" & "dword YCountChars;dword FillAttribute;dword Flags;word ShowWindow;word Reserved2;ptr Reserved3;handle StdInput;" & "handle StdOutput;handle StdError"
  1066. Global Const $TAGSECURITY_ATTRIBUTES = "dword Length;ptr Descriptor;bool InheritHandle"
  1067. Global Const $TAGWIN32_FIND_DATA = "dword dwFileAttributes; dword ftCreationTime[2]; dword ftLastAccessTime[2]; dword ftLastWriteTime[2]; dword nFileSizeHigh; dword nFileSizeLow; dword dwReserved0; dword dwReserved1; wchar cFileName[260]; wchar cAlternateFileName[14]"
  1068. Func _WinAPI_GetLastError($CURERR = @error, $CUREXT = @extended)
  1069.     Local $ARESULT = DllCall("kernel32.dll", "dword", "GetLastError")
  1070.     Return SetError($CURERR, $CUREXT, $ARESULT[0])
  1071. EndFunc
  1072. Func _WinAPI_SetLastError($IERRCODE, $CURERR = @error, $CUREXT = @extended)
  1073.     DllCall("kernel32.dll", "none", "SetLastError", "dword", $IERRCODE)
  1074.     Return SetError($CURERR, $CUREXT)
  1075. EndFunc
  1076. Global Const $__MISCCONSTANT_CC_ANYCOLOR = 256
  1077. Global Const $__MISCCONSTANT_CC_FULLOPEN = 2
  1078. Global Const $__MISCCONSTANT_CC_RGBINIT = 1
  1079. Global Const $TAGCHOOSECOLOR = "dword Size;hwnd hWndOwnder;handle hInstance;dword rgbResult;ptr CustColors;dword Flags;lparam lCustData;" & "ptr lpfnHook;ptr lpTemplateName"
  1080. Global Const $TAGCHOOSEFONT = "dword Size;hwnd hWndOwner;handle hDC;ptr LogFont;int PointSize;dword Flags;dword rgbColors;lparam CustData;" & "ptr fnHook;ptr TemplateName;handle hInstance;ptr szStyle;word FontType;int SizeMin;int SizeMax"
  1081. Func _ChooseColor($IRETURNTYPE = 0, $ICOLORREF = 0, $IREFTYPE = 0, $HWNDOWNDER = 0)
  1082.     Local $CUSTCOLORS = "dword[16]"
  1083.     Local $TCHOOSE = DllStructCreate($TAGCHOOSECOLOR)
  1084.     Local $TCC = DllStructCreate($CUSTCOLORS)
  1085.     If $IREFTYPE = 1 Then
  1086.         $ICOLORREF = Int($ICOLORREF)
  1087.     ElseIf $IREFTYPE = 2 Then
  1088.         $ICOLORREF = Hex(String($ICOLORREF), 6)
  1089.         $ICOLORREF = "0x" & StringMid($ICOLORREF, 5, 2) & StringMid($ICOLORREF, 3, 2) & StringMid($ICOLORREF, 1, 2)
  1090.     EndIf
  1091.     DllStructSetData($TCHOOSE, "Size", DllStructGetSize($TCHOOSE))
  1092.     DllStructSetData($TCHOOSE, "hWndOwnder", $HWNDOWNDER)
  1093.     DllStructSetData($TCHOOSE, "rgbResult", $ICOLORREF)
  1094.     DllStructSetData($TCHOOSE, "CustColors", DllStructGetPtr($TCC))
  1095.     DllStructSetData($TCHOOSE, "Flags", BitOR($__MISCCONSTANT_CC_ANYCOLOR, $__MISCCONSTANT_CC_FULLOPEN, $__MISCCONSTANT_CC_RGBINIT))
  1096.     Local $ARESULT = DllCall("comdlg32.dll", "bool", "ChooseColor", "ptr", DllStructGetPtr($TCHOOSE))
  1097.     If @error Then Return SetError(@error, @extended, -1)
  1098.     If $ARESULT[0] = 0 Then Return SetError(-3, -3, -1)
  1099.     Local $COLOR_PICKED = DllStructGetData($TCHOOSE, "rgbResult")
  1100.     If $IRETURNTYPE = 1 Then
  1101.         Return "0x" & Hex(String($COLOR_PICKED), 6)
  1102.     ElseIf $IRETURNTYPE = 2 Then
  1103.         $COLOR_PICKED = Hex(String($COLOR_PICKED), 6)
  1104.         Return "0x" & StringMid($COLOR_PICKED, 5, 2) & StringMid($COLOR_PICKED, 3, 2) & StringMid($COLOR_PICKED, 1, 2)
  1105.     ElseIf $IRETURNTYPE = 0 Then
  1106.         Return $COLOR_PICKED
  1107.     Else
  1108.         Return SetError(-4, -4, -1)
  1109.     EndIf
  1110. EndFunc
  1111. Func _ChooseFont($SFONTNAME = "Courier New", $IPOINTSIZE = 10, $ICOLORREF = 0, $IFONTWEIGHT = 0, $IITALIC = False, $IUNDERLINE = False, $ISTRIKETHRU = False, $HWNDOWNER = 0)
  1112.     Local $ITALIC = 0, $UNDERLINE = 0, $STRIKEOUT = 0
  1113.     Local $LNGDC = __MISC_GETDC(0)
  1114.     Local $LFHEIGHT = Round(($IPOINTSIZE * __MISC_GETDEVICECAPS($LNGDC, $LOGPIXELSX)) / 72, 0)
  1115.     __MISC_RELEASEDC(0, $LNGDC)
  1116.     Local $TCHOOSEFONT = DllStructCreate($TAGCHOOSEFONT)
  1117.     Local $TLOGFONT = DllStructCreate($TAGLOGFONT)
  1118.     DllStructSetData($TCHOOSEFONT, "Size", DllStructGetSize($TCHOOSEFONT))
  1119.     DllStructSetData($TCHOOSEFONT, "hWndOwner", $HWNDOWNER)
  1120.     DllStructSetData($TCHOOSEFONT, "LogFont", DllStructGetPtr($TLOGFONT))
  1121.     DllStructSetData($TCHOOSEFONT, "PointSize", $IPOINTSIZE)
  1122.     DllStructSetData($TCHOOSEFONT, "Flags", BitOR($CF_SCREENFONTS, $CF_PRINTERFONTS, $CF_EFFECTS, $CF_INITTOLOGFONTSTRUCT, $CF_NOSCRIPTSEL))
  1123.     DllStructSetData($TCHOOSEFONT, "rgbColors", $ICOLORREF)
  1124.     DllStructSetData($TCHOOSEFONT, "FontType", 0)
  1125.     DllStructSetData($TLOGFONT, "Height", $LFHEIGHT)
  1126.     DllStructSetData($TLOGFONT, "Weight", $IFONTWEIGHT)
  1127.     DllStructSetData($TLOGFONT, "Italic", $IITALIC)
  1128.     DllStructSetData($TLOGFONT, "Underline", $IUNDERLINE)
  1129.     DllStructSetData($TLOGFONT, "Strikeout", $ISTRIKETHRU)
  1130.     DllStructSetData($TLOGFONT, "FaceName", $SFONTNAME)
  1131.     Local $ARESULT = DllCall("comdlg32.dll", "bool", "ChooseFontW", "ptr", DllStructGetPtr($TCHOOSEFONT))
  1132.     If @error Then Return SetError(@error, @extended, -1)
  1133.     If $ARESULT[0] = 0 Then Return SetError(-3, -3, -1)
  1134.     Local $FONTNAME = DllStructGetData($TLOGFONT, "FaceName")
  1135.     If StringLen($FONTNAME) = 0 And StringLen($SFONTNAME) > 0 Then $FONTNAME = $SFONTNAME
  1136.     If DllStructGetData($TLOGFONT, "Italic") Then $ITALIC = 2
  1137.     If DllStructGetData($TLOGFONT, "Underline") Then $UNDERLINE = 4
  1138.     If DllStructGetData($TLOGFONT, "Strikeout") Then $STRIKEOUT = 8
  1139.     Local $ATTRIBUTES = BitOR($ITALIC, $UNDERLINE, $STRIKEOUT)
  1140.     Local $SIZE = DllStructGetData($TCHOOSEFONT, "PointSize") / 10
  1141.     Local $COLORREF = DllStructGetData($TCHOOSEFONT, "rgbColors")
  1142.     Local $WEIGHT = DllStructGetData($TLOGFONT, "Weight")
  1143.     Local $COLOR_PICKED = Hex(String($COLORREF), 6)
  1144.     Return StringSplit($ATTRIBUTES & "," & $FONTNAME & "," & $SIZE & "," & $WEIGHT & "," & $COLORREF & "," & "0x" & $COLOR_PICKED & "," & "0x" & StringMid($COLOR_PICKED, 5, 2) & StringMid($COLOR_PICKED, 3, 2) & StringMid($COLOR_PICKED, 1, 2), ",")
  1145. EndFunc
  1146. Func _ClipPutFile($SFILE, $SSEPARATOR = "|")
  1147.     Local Const $GMEM_MOVEABLE = 2, $CF_HDROP = 15
  1148.     $SFILE &= $SSEPARATOR & $SSEPARATOR
  1149.     Local $NGLOBMEMSIZE = (StringLen($SFILE) + 20)
  1150.     Local $ARESULT = DllCall("user32.dll", "bool", "OpenClipboard", "hwnd", 0)
  1151.     If @error Or $ARESULT[0] = 0 Then Return SetError(1, _WinAPI_GetLastError(), False)
  1152.     Local $IERROR = 0, $ILASTERROR = 0
  1153.     $ARESULT = DllCall("user32.dll", "bool", "EmptyClipboard")
  1154.     If @error Or Not $ARESULT[0] Then
  1155.         $IERROR = 2
  1156.         $ILASTERROR = _WinAPI_GetLastError()
  1157.     Else
  1158.         $ARESULT = DllCall("kernel32.dll", "handle", "GlobalAlloc", "uint", $GMEM_MOVEABLE, "ulong_ptr", $NGLOBMEMSIZE)
  1159.         If @error Or Not $ARESULT[0] Then
  1160.             $IERROR = 3
  1161.             $ILASTERROR = _WinAPI_GetLastError()
  1162.         Else
  1163.             Local $HGLOBAL = $ARESULT[0]
  1164.             $ARESULT = DllCall("kernel32.dll", "ptr", "GlobalLock", "handle", $HGLOBAL)
  1165.             If @error Or Not $ARESULT[0] Then
  1166.                 $IERROR = 4
  1167.                 $ILASTERROR = _WinAPI_GetLastError()
  1168.             Else
  1169.                 Local $HLOCK = $ARESULT[0]
  1170.                 Local $DROPFILES = DllStructCreate("dword;ptr;int;int;int;char[" & StringLen($SFILE) + 1 & "]", $HLOCK)
  1171.                 If @error Then Return SetError(5, 6, False)
  1172.                 Local $TEMPSTRUCT = DllStructCreate("dword;ptr;int;int;int")
  1173.                 DllStructSetData($DROPFILES, 1, DllStructGetSize($TEMPSTRUCT))
  1174.                 DllStructSetData($DROPFILES, 2, 0)
  1175.                 DllStructSetData($DROPFILES, 3, 0)
  1176.                 DllStructSetData($DROPFILES, 4, 0)
  1177.                 DllStructSetData($DROPFILES, 5, 0)
  1178.                 DllStructSetData($DROPFILES, 6, $SFILE)
  1179.                 For $I = 1 To StringLen($SFILE)
  1180.                     If DllStructGetData($DROPFILES, 6, $I) = $SSEPARATOR Then DllStructSetData($DROPFILES, 6, Chr(0), $I)
  1181.                 Next
  1182.                 $ARESULT = DllCall("user32.dll", "handle", "SetClipboardData", "uint", $CF_HDROP, "handle", $HGLOBAL)
  1183.                 If @error Or Not $ARESULT[0] Then
  1184.                     $IERROR = 6
  1185.                     $ILASTERROR = _WinAPI_GetLastError()
  1186.                 EndIf
  1187.                 $ARESULT = DllCall("kernel32.dll", "bool", "GlobalUnlock", "handle", $HGLOBAL)
  1188.                 If (@error Or Not $ARESULT[0]) And Not $IERROR And _WinAPI_GetLastError() Then
  1189.                     $IERROR = 8
  1190.                     $ILASTERROR = _WinAPI_GetLastError()
  1191.                 EndIf
  1192.             EndIf
  1193.             $ARESULT = DllCall("kernel32.dll", "ptr", "GlobalFree", "handle", $HGLOBAL)
  1194.             If (@error Or Not $ARESULT[0]) And Not $IERROR Then
  1195.                 $IERROR = 9
  1196.                 $ILASTERROR = _WinAPI_GetLastError()
  1197.             EndIf
  1198.         EndIf
  1199.     EndIf
  1200.     $ARESULT = DllCall("user32.dll", "bool", "CloseClipboard")
  1201.     If (@error Or Not $ARESULT[0]) And Not $IERROR Then Return SetError(7, _WinAPI_GetLastError(), False)
  1202.     If $IERROR Then Return SetError($IERROR, $ILASTERROR, False)
  1203.     Return True
  1204. EndFunc
  1205. Func _Iif($FTEST, $VTRUEVAL, $VFALSEVAL)
  1206.     If $FTEST Then
  1207.         Return $VTRUEVAL
  1208.     Else
  1209.         Return $VFALSEVAL
  1210.     EndIf
  1211. EndFunc
  1212. Func _MouseTrap($ILEFT = 0, $ITOP = 0, $IRIGHT = 0, $IBOTTOM = 0)
  1213.     Local $ARESULT
  1214.     If @NumParams == 0 Then
  1215.         $ARESULT = DllCall("user32.dll", "bool", "ClipCursor", "ptr", 0)
  1216.         If @error Or Not $ARESULT[0] Then Return SetError(1, _WinAPI_GetLastError(), False)
  1217.     Else
  1218.         If @NumParams == 2 Then
  1219.             $IRIGHT = $ILEFT + 1
  1220.             $IBOTTOM = $ITOP + 1
  1221.         EndIf
  1222.         Local $TRECT = DllStructCreate($TAGRECT)
  1223.         DllStructSetData($TRECT, "Left", $ILEFT)
  1224.         DllStructSetData($TRECT, "Top", $ITOP)
  1225.         DllStructSetData($TRECT, "Right", $IRIGHT)
  1226.         DllStructSetData($TRECT, "Bottom", $IBOTTOM)
  1227.         $ARESULT = DllCall("user32.dll", "bool", "ClipCursor", "ptr", DllStructGetPtr($TRECT))
  1228.         If @error Or Not $ARESULT[0] Then Return SetError(2, _WinAPI_GetLastError(), False)
  1229.     EndIf
  1230.     Return True
  1231. EndFunc
  1232. Func _Singleton($SOCCURENCENAME, $IFLAG = 0)
  1233.     Local Const $ERROR_ALREADY_EXISTS = 183
  1234.     Local Const $SECURITY_DESCRIPTOR_REVISION = 1
  1235.     Local $PSECURITYATTRIBUTES = 0
  1236.     If BitAND($IFLAG, 2) Then
  1237.         Local $TSECURITYDESCRIPTOR = DllStructCreate("dword[5]")
  1238.         Local $PSECURITYDESCRIPTOR = DllStructGetPtr($TSECURITYDESCRIPTOR)
  1239.         Local $ARET = DllCall("advapi32.dll", "bool", "InitializeSecurityDescriptor", "ptr", $PSECURITYDESCRIPTOR, "dword", $SECURITY_DESCRIPTOR_REVISION)
  1240.         If @error Then Return SetError(@error, @extended, 0)
  1241.         If $ARET[0] Then
  1242.             $ARET = DllCall("advapi32.dll", "bool", "SetSecurityDescriptorDacl", "ptr", $PSECURITYDESCRIPTOR, "bool", 1, "ptr", 0, "bool", 0)
  1243.             If @error Then Return SetError(@error, @extended, 0)
  1244.             If $ARET[0] Then
  1245.                 Local $STRUCTSECURITYATTRIBUTES = DllStructCreate($TAGSECURITY_ATTRIBUTES)
  1246.                 DllStructSetData($STRUCTSECURITYATTRIBUTES, 1, DllStructGetSize($STRUCTSECURITYATTRIBUTES))
  1247.                 DllStructSetData($STRUCTSECURITYATTRIBUTES, 2, $PSECURITYDESCRIPTOR)
  1248.                 DllStructSetData($STRUCTSECURITYATTRIBUTES, 3, 0)
  1249.                 $PSECURITYATTRIBUTES = DllStructGetPtr($STRUCTSECURITYATTRIBUTES)
  1250.             EndIf
  1251.         EndIf
  1252.     EndIf
  1253.     Local $HANDLE = DllCall("kernel32.dll", "handle", "CreateMutexW", "ptr", $PSECURITYATTRIBUTES, "bool", 1, "wstr", $SOCCURENCENAME)
  1254.     If @error Then Return SetError(@error, @extended, 0)
  1255.     Local $LASTERROR = DllCall("kernel32.dll", "dword", "GetLastError")
  1256.     If @error Then Return SetError(@error, @extended, 0)
  1257.     If $LASTERROR[0] = $ERROR_ALREADY_EXISTS Then
  1258.         If BitAND($IFLAG, 1) Then
  1259.             Return SetError($LASTERROR[0], $LASTERROR[0], 0)
  1260.         Else
  1261.             Exit -1
  1262.         EndIf
  1263.     EndIf
  1264.     Return $HANDLE[0]
  1265. EndFunc
  1266. Func _IsPressed($SHEXKEY, $VDLL = "user32.dll")
  1267.     Local $A_R = DllCall($VDLL, "short", "GetAsyncKeyState", "int", "0x" & $SHEXKEY)
  1268.     If @error Then Return SetError(@error, @extended, False)
  1269.     Return BitAND($A_R[0], 32768) <> 0
  1270. EndFunc
  1271. Func _VersionCompare($SVERSION1, $SVERSION2)
  1272.     If $SVERSION1 = $SVERSION2 Then Return 0
  1273.     Local $SEP = "."
  1274.     If StringInStr($SVERSION1, $SEP) = 0 Then $SEP = ","
  1275.     Local $AVERSION1 = StringSplit($SVERSION1, $SEP)
  1276.     Local $AVERSION2 = StringSplit($SVERSION2, $SEP)
  1277.     If UBound($AVERSION1) <> UBound($AVERSION2) Or UBound($AVERSION1) = 0 Then
  1278.         SetExtended(1)
  1279.         If $SVERSION1 > $SVERSION2 Then
  1280.             Return 1
  1281.         ElseIf $SVERSION1 < $SVERSION2 Then
  1282.             Return -1
  1283.         EndIf
  1284.     Else
  1285.         For $I = 1 To UBound($AVERSION1) - 1
  1286.             If StringIsDigit($AVERSION1[$I]) And StringIsDigit($AVERSION2[$I]) Then
  1287.                 If Number($AVERSION1[$I]) > Number($AVERSION2[$I]) Then
  1288.                     Return 1
  1289.                 ElseIf Number($AVERSION1[$I]) < Number($AVERSION2[$I]) Then
  1290.                     Return -1
  1291.                 EndIf
  1292.             Else
  1293.                 SetExtended(1)
  1294.                 If $AVERSION1[$I] > $AVERSION2[$I] Then
  1295.                     Return 1
  1296.                 ElseIf $AVERSION1[$I] < $AVERSION2[$I] Then
  1297.                     Return -1
  1298.                 EndIf
  1299.             EndIf
  1300.         Next
  1301.     EndIf
  1302.     Return SetError(2, 0, 0)
  1303. EndFunc
  1304. Func __MISC_GETDC($HWND)
  1305.     Local $ARESULT = DllCall("User32.dll", "handle", "GetDC", "hwnd", $HWND)
  1306.     If @error Or Not $ARESULT[0] Then Return SetError(1, _WinAPI_GetLastError(), 0)
  1307.     Return $ARESULT[0]
  1308. EndFunc
  1309. Func __MISC_GETDEVICECAPS($HDC, $IINDEX)
  1310.     Local $ARESULT = DllCall("GDI32.dll", "int", "GetDeviceCaps", "handle", $HDC, "int", $IINDEX)
  1311.     If @error Then Return SetError(@error, @extended, 0)
  1312.     Return $ARESULT[0]
  1313. EndFunc
  1314. Func __MISC_RELEASEDC($HWND, $HDC)
  1315.     Local $ARESULT = DllCall("User32.dll", "int", "ReleaseDC", "hwnd", $HWND, "handle", $HDC)
  1316.     If @error Then Return SetError(@error, @extended, False)
  1317.     Return $ARESULT[0] <> 0
  1318. EndFunc
  1319. Global Const $GMEM_FIXED = 0
  1320. Global Const $GMEM_MOVEABLE = 2
  1321. Global Const $GMEM_NOCOMPACT = 16
  1322. Global Const $GMEM_NODISCARD = 32
  1323. Global Const $GMEM_ZEROINIT = 64
  1324. Global Const $GMEM_MODIFY = 128
  1325. Global Const $GMEM_DISCARDABLE = 256
  1326. Global Const $GMEM_NOT_BANKED = 4096
  1327. Global Const $GMEM_SHARE = 8192
  1328. Global Const $GMEM_DDESHARE = 8192
  1329. Global Const $GMEM_NOTIFY = 16384
  1330. Global Const $GMEM_LOWER = 4096
  1331. Global Const $GMEM_VALID_FLAGS = 32626
  1332. Global Const $GMEM_INVALID_HANDLE = 32768
  1333. Global Const $GPTR = $GMEM_FIXED + $GMEM_ZEROINIT
  1334. Global Const $GHND = $GMEM_MOVEABLE + $GMEM_ZEROINIT
  1335. Global Const $MEM_COMMIT = 4096
  1336. Global Const $MEM_RESERVE = 8192
  1337. Global Const $MEM_TOP_DOWN = 1048576
  1338. Global Const $MEM_SHARED = 134217728
  1339. Global Const $PAGE_NOACCESS = 1
  1340. Global Const $PAGE_READONLY = 2
  1341. Global Const $PAGE_READWRITE = 4
  1342. Global Const $PAGE_EXECUTE = 16
  1343. Global Const $PAGE_EXECUTE_READ = 32
  1344. Global Const $PAGE_EXECUTE_READWRITE = 64
  1345. Global Const $PAGE_GUARD = 256
  1346. Global Const $PAGE_NOCACHE = 512
  1347. Global Const $MEM_DECOMMIT = 16384
  1348. Global Const $MEM_RELEASE = 32768
  1349. Global Const $PROCESS_TERMINATE = 1
  1350. Global Const $PROCESS_CREATE_THREAD = 2
  1351. Global Const $PROCESS_SET_SESSIONID = 4
  1352. Global Const $PROCESS_VM_OPERATION = 8
  1353. Global Const $PROCESS_VM_READ = 16
  1354. Global Const $PROCESS_VM_WRITE = 32
  1355. Global Const $PROCESS_DUP_HANDLE = 64
  1356. Global Const $PROCESS_CREATE_PROCESS = 128
  1357. Global Const $PROCESS_SET_QUOTA = 256
  1358. Global Const $PROCESS_SET_INFORMATION = 512
  1359. Global Const $PROCESS_QUERY_INFORMATION = 1024
  1360. Global Const $PROCESS_SUSPEND_RESUME = 2048
  1361. Global Const $PROCESS_ALL_ACCESS = 2035711
  1362. Global Const $ERROR_NO_TOKEN = 1008
  1363. Global Const $SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege"
  1364. Global Const $SE_AUDIT_NAME = "SeAuditPrivilege"
  1365. Global Const $SE_BACKUP_NAME = "SeBackupPrivilege"
  1366. Global Const $SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege"
  1367. Global Const $SE_CREATE_GLOBAL_NAME = "SeCreateGlobalPrivilege"
  1368. Global Const $SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege"
  1369. Global Const $SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege"
  1370. Global Const $SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege"
  1371. Global Const $SE_DEBUG_NAME = "SeDebugPrivilege"
  1372. Global Const $SE_ENABLE_DELEGATION_NAME = "SeEnableDelegationPrivilege"
  1373. Global Const $SE_IMPERSONATE_NAME = "SeImpersonatePrivilege"
  1374. Global Const $SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege"
  1375. Global Const $SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege"
  1376. Global Const $SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege"
  1377. Global Const $SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege"
  1378. Global Const $SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege"
  1379. Global Const $SE_MANAGE_VOLUME_NAME = "SeManageVolumePrivilege"
  1380. Global Const $SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege"
  1381. Global Const $SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege"
  1382. Global Const $SE_RESTORE_NAME = "SeRestorePrivilege"
  1383. Global Const $SE_SECURITY_NAME = "SeSecurityPrivilege"
  1384. Global Const $SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
  1385. Global Const $SE_SYNC_AGENT_NAME = "SeSyncAgentPrivilege"
  1386. Global Const $SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege"
  1387. Global Const $SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege"
  1388. Global Const $SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege"
  1389. Global Const $SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege"
  1390. Global Const $SE_TCB_NAME = "SeTcbPrivilege"
  1391. Global Const $SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege"
  1392. Global Const $SE_UNDOCK_NAME = "SeUndockPrivilege"
  1393. Global Const $SE_PRIVILEGE_ENABLED_BY_DEFAULT = 1
  1394. Global Const $SE_PRIVILEGE_ENABLED = 2
  1395. Global Const $SE_PRIVILEGE_REMOVED = 4
  1396. Global Const $SE_PRIVILEGE_USED_FOR_ACCESS = -2147483648
  1397. Global Const $TOKENUSER = 1
  1398. Global Const $TOKENGROUPS = 2
  1399. Global Const $TOKENPRIVILEGES = 3
  1400. Global Const $TOKENOWNER = 4
  1401. Global Const $TOKENPRIMARYGROUP = 5
  1402. Global Const $TOKENDEFAULTDACL = 6
  1403. Global Const $TOKENSOURCE = 7
  1404. Global Const $TOKENTYPE = 8
  1405. Global Const $TOKENIMPERSONATIONLEVEL = 9
  1406. Global Const $TOKENSTATISTICS = 10
  1407. Global Const $TOKENRESTRICTEDSIDS = 11
  1408. Global Const $TOKENSESSIONID = 12
  1409. Global Const $TOKENGROUPSANDPRIVILEGES = 13
  1410. Global Const $TOKENSESSIONREFERENCE = 14
  1411. Global Const $TOKENSANDBOXINERT = 15
  1412. Global Const $TOKENAUDITPOLICY = 16
  1413. Global Const $TOKENORIGIN = 17
  1414. Global Const $TOKENELEVATIONTYPE = 18
  1415. Global Const $TOKENLINKEDTOKEN = 19
  1416. Global Const $TOKENELEVATION = 20
  1417. Global Const $TOKENHASRESTRICTIONS = 21
  1418. Global Const $TOKENACCESSINFORMATION = 22
  1419. Global Const $TOKENVIRTUALIZATIONALLOWED = 23
  1420. Global Const $TOKENVIRTUALIZATIONENABLED = 24
  1421. Global Const $TOKENINTEGRITYLEVEL = 25
  1422. Global Const $TOKENUIACCESS = 26
  1423. Global Const $TOKENMANDATORYPOLICY = 27
  1424. Global Const $TOKENLOGONSID = 28
  1425. Global Const $TOKEN_ASSIGN_PRIMARY = 1
  1426. Global Const $TOKEN_DUPLICATE = 2
  1427. Global Const $TOKEN_IMPERSONATE = 4
  1428. Global Const $TOKEN_QUERY = 8
  1429. Global Const $TOKEN_QUERY_SOURCE = 16
  1430. Global Const $TOKEN_ADJUST_PRIVILEGES = 32
  1431. Global Const $TOKEN_ADJUST_GROUPS = 64
  1432. Global Const $TOKEN_ADJUST_DEFAULT = 128
  1433. Global Const $TOKEN_ADJUST_SESSIONID = 256
  1434. Func _Security__AdjustTokenPrivileges($HTOKEN, $FDISABLEALL, $PNEWSTATE, $IBUFFERLEN, $PPREVSTATE = 0, $PREQUIRED = 0)
  1435.     Local $ARESULT = DllCall("advapi32.dll", "bool", "AdjustTokenPrivileges", "handle", $HTOKEN, "bool", $FDISABLEALL, "ptr", $PNEWSTATE, "dword", $IBUFFERLEN, "ptr", $PPREVSTATE, "ptr", $PREQUIRED)
  1436.     If @error Then Return SetError(@error, @extended, False)
  1437.     Return $ARESULT[0]
  1438. EndFunc
  1439. Func _Security__GetAccountSid($SACCOUNT, $SSYSTEM = "")
  1440.     Local $AACCT = _Security__LookupAccountName($SACCOUNT, $SSYSTEM)
  1441.     If @error Then Return SetError(@error, 0, 0)
  1442.     Return _Security__StringSidToSid($AACCT[0])
  1443. EndFunc
  1444. Func _Security__GetLengthSid($PSID)
  1445.     If Not _Security__IsValidSid($PSID) Then Return SetError(-1, 0, 0)
  1446.     Local $ARESULT = DllCall("advapi32.dll", "dword", "GetLengthSid", "ptr", $PSID)
  1447.     If @error Then Return SetError(@error, @extended, 0)
  1448.     Return $ARESULT[0]
  1449. EndFunc
  1450. Func _Security__GetTokenInformation($HTOKEN, $ICLASS)
  1451.     Local $ARESULT = DllCall("advapi32.dll", "bool", "GetTokenInformation", "handle", $HTOKEN, "int", $ICLASS, "ptr", 0, "dword", 0, "dword*", 0)
  1452.     If @error Then Return SetError(@error, @extended, 0)
  1453.     If Not $ARESULT[0] Then Return 0
  1454.     Local $TBUFFER = DllStructCreate("byte[" & $ARESULT[5] & "]")
  1455.     Local $PBUFFER = DllStructGetPtr($TBUFFER)
  1456.     $ARESULT = DllCall("advapi32.dll", "bool", "GetTokenInformation", "handle", $HTOKEN, "int", $ICLASS, "ptr", $PBUFFER, "dword", $ARESULT[5], "dword*", 0)
  1457.     If @error Then Return SetError(@error, @extended, 0)
  1458.     If Not $ARESULT[0] Then Return 0
  1459.     Return $TBUFFER
  1460. EndFunc
  1461. Func _Security__ImpersonateSelf($ILEVEL = 2)
  1462.     Local $ARESULT = DllCall("advapi32.dll", "bool", "ImpersonateSelf", "int", $ILEVEL)
  1463.     If @error Then Return SetError(@error, @extended, False)
  1464.     Return $ARESULT[0]
  1465. EndFunc
  1466. Func _Security__IsValidSid($PSID)
  1467.     Local $ARESULT = DllCall("advapi32.dll", "bool", "IsValidSid", "ptr", $PSID)
  1468.     If @error Then Return SetError(@error, @extended, False)
  1469.     Return $ARESULT[0]
  1470. EndFunc
  1471. Func _Security__LookupAccountName($SACCOUNT, $SSYSTEM = "")
  1472.     Local $TDATA = DllStructCreate("byte SID[256]")
  1473.     Local $PSID = DllStructGetPtr($TDATA, "SID")
  1474.     Local $ARESULT = DllCall("advapi32.dll", "bool", "LookupAccountNameW", "wstr", $SSYSTEM, "wstr", $SACCOUNT, "ptr", $PSID, "dword*", 256, "wstr", "", "dword*", 256, "int*", 0)
  1475.     If @error Then Return SetError(@error, @extended, 0)
  1476.     If Not $ARESULT[0] Then Return 0
  1477.     Local $AACCT[3]
  1478.     $AACCT[0] = _Security__SidToStringSid($PSID)
  1479.     $AACCT[1] = $ARESULT[5]
  1480.     $AACCT[2] = $ARESULT[7]
  1481.     Return $AACCT
  1482. EndFunc
  1483. Func _Security__LookupAccountSid($VSID)
  1484.     Local $PSID, $AACCT[3]
  1485.     If IsString($VSID) Then
  1486.         Local $TSID = _Security__StringSidToSid($VSID)
  1487.         $PSID = DllStructGetPtr($TSID)
  1488.     Else
  1489.         $PSID = $VSID
  1490.     EndIf
  1491.     If Not _Security__IsValidSid($PSID) Then Return SetError(-1, 0, 0)
  1492.     Local $ARESULT = DllCall("advapi32.dll", "bool", "LookupAccountSidW", "ptr", 0, "ptr", $PSID, "wstr", "", "dword*", 256, "wstr", "", "dword*", 256, "int*", 0)
  1493.     If @error Then Return SetError(@error, @extended, 0)
  1494.     If Not $ARESULT[0] Then Return 0
  1495.     Local $AACCT[3]
  1496.     $AACCT[0] = $ARESULT[3]
  1497.     $AACCT[1] = $ARESULT[5]
  1498.     $AACCT[2] = $ARESULT[7]
  1499.     Return $AACCT
  1500. EndFunc
  1501. Func _Security__LookupPrivilegeValue($SSYSTEM, $SNAME)
  1502.     Local $ARESULT = DllCall("advapi32.dll", "int", "LookupPrivilegeValueW", "wstr", $SSYSTEM, "wstr", $SNAME, "int64*", 0)
  1503.     If @error Then Return SetError(@error, @extended, 0)
  1504.     Return SetError(0, $ARESULT[0], $ARESULT[3])
  1505. EndFunc
  1506. Func _Security__OpenProcessToken($HPROCESS, $IACCESS)
  1507.     Local $ARESULT = DllCall("advapi32.dll", "int", "OpenProcessToken", "handle", $HPROCESS, "dword", $IACCESS, "ptr", 0)
  1508.     If @error Then Return SetError(@error, @extended, 0)
  1509.     Return SetError(0, $ARESULT[0], $ARESULT[3])
  1510. EndFunc
  1511. Func _Security__OpenThreadToken($IACCESS, $HTHREAD = 0, $FOPENASSELF = False)
  1512.     If $HTHREAD = 0 Then $HTHREAD = DllCall("kernel32.dll", "handle", "GetCurrentThread")
  1513.     If @error Then Return SetError(@error, @extended, 0)
  1514.     Local $ARESULT = DllCall("advapi32.dll", "bool", "OpenThreadToken", "handle", $HTHREAD[0], "dword", $IACCESS, "int", $FOPENASSELF, "ptr*", 0)
  1515.     If @error Then Return SetError(@error, @extended, 0)
  1516.     Return SetError(0, $ARESULT[0], $ARESULT[4])
  1517. EndFunc
  1518. Func _Security__OpenThreadTokenEx($IACCESS, $HTHREAD = 0, $FOPENASSELF = False)
  1519.     Local $HTOKEN = _Security__OpenThreadToken($IACCESS, $HTHREAD, $FOPENASSELF)
  1520.     If $HTOKEN = 0 Then
  1521.         If _WinAPI_GetLastError() <> $ERROR_NO_TOKEN Then Return SetError(-3, _WinAPI_GetLastError(), 0)
  1522.         If Not _Security__ImpersonateSelf() Then Return SetError(-1, _WinAPI_GetLastError(), 0)
  1523.         $HTOKEN = _Security__OpenThreadToken($IACCESS, $HTHREAD, $FOPENASSELF)
  1524.         If $HTOKEN = 0 Then Return SetError(-2, _WinAPI_GetLastError(), 0)
  1525.     EndIf
  1526.     Return $HTOKEN
  1527. EndFunc
  1528. Func _Security__SetPrivilege($HTOKEN, $SPRIVILEGE, $FENABLE)
  1529.     Local $ILUID = _Security__LookupPrivilegeValue("", $SPRIVILEGE)
  1530.     If $ILUID = 0 Then Return SetError(-1, 0, False)
  1531.     Local $TCURRSTATE = DllStructCreate($TAGTOKEN_PRIVILEGES)
  1532.     Local $PCURRSTATE = DllStructGetPtr($TCURRSTATE)
  1533.     Local $ICURRSTATE = DllStructGetSize($TCURRSTATE)
  1534.     Local $TPREVSTATE = DllStructCreate($TAGTOKEN_PRIVILEGES)
  1535.     Local $PPREVSTATE = DllStructGetPtr($TPREVSTATE)
  1536.     Local $IPREVSTATE = DllStructGetSize($TPREVSTATE)
  1537.     Local $TREQUIRED = DllStructCreate("int Data")
  1538.     Local $PREQUIRED = DllStructGetPtr($TREQUIRED)
  1539.     DllStructSetData($TCURRSTATE, "Count", 1)
  1540.     DllStructSetData($TCURRSTATE, "LUID", $ILUID)
  1541.     If Not _Security__AdjustTokenPrivileges($HTOKEN, False, $PCURRSTATE, $ICURRSTATE, $PPREVSTATE, $PREQUIRED) Then Return SetError(-2, @error, False)
  1542.     DllStructSetData($TPREVSTATE, "Count", 1)
  1543.     DllStructSetData($TPREVSTATE, "LUID", $ILUID)
  1544.     Local $IATTRIBUTES = DllStructGetData($TPREVSTATE, "Attributes")
  1545.     If $FENABLE Then
  1546.         $IATTRIBUTES = BitOR($IATTRIBUTES, $SE_PRIVILEGE_ENABLED)
  1547.     Else
  1548.         $IATTRIBUTES = BitAND($IATTRIBUTES, BitNOT($SE_PRIVILEGE_ENABLED))
  1549.     EndIf
  1550.     DllStructSetData($TPREVSTATE, "Attributes", $IATTRIBUTES)
  1551.     If Not _Security__AdjustTokenPrivileges($HTOKEN, False, $PPREVSTATE, $IPREVSTATE, $PCURRSTATE, $PREQUIRED) Then Return SetError(-3, @error, False)
  1552.     Return True
  1553. EndFunc
  1554. Func _Security__SidToStringSid($PSID)
  1555.     If Not _Security__IsValidSid($PSID) Then Return SetError(-1, 0, "")
  1556.     Local $ARESULT = DllCall("advapi32.dll", "int", "ConvertSidToStringSidW", "ptr", $PSID, "ptr*", 0)
  1557.     If @error Then Return SetError(@error, @extended, "")
  1558.     If Not $ARESULT[0] Then Return ""
  1559.     Local $TBUFFER = DllStructCreate("wchar Text[256]", $ARESULT[2])
  1560.     Local $SSID = DllStructGetData($TBUFFER, "Text")
  1561.     DllCall("Kernel32.dll", "ptr", "LocalFree", "ptr", $ARESULT[2])
  1562.     Return $SSID
  1563. EndFunc
  1564. Func _Security__SidTypeStr($ITYPE)
  1565.     Switch $ITYPE
  1566.         Case 1
  1567.             Return "User"
  1568.         Case 2
  1569.             Return "Group"
  1570.         Case 3
  1571.             Return "Domain"
  1572.         Case 4
  1573.             Return "Alias"
  1574.         Case 5
  1575.             Return "Well Known Group"
  1576.         Case 6
  1577.             Return "Deleted Account"
  1578.         Case 7
  1579.             Return "Invalid"
  1580.         Case 8
  1581.             Return "Invalid"
  1582.         Case 9
  1583.             Return "Computer"
  1584.         Case Else
  1585.             Return "Unknown SID Type"
  1586.     EndSwitch
  1587. EndFunc
  1588. Func _Security__StringSidToSid($SSID)
  1589.     Local $ARESULT = DllCall("advapi32.dll", "bool", "ConvertStringSidToSidW", "wstr", $SSID, "ptr*", 0)
  1590.     If @error Then Return SetError(@error, @extended, 0)
  1591.     If Not $ARESULT[0] Then Return 0
  1592.     Local $ISIZE = _Security__GetLengthSid($ARESULT[2])
  1593.     Local $TBUFFER = DllStructCreate("byte Data[" & $ISIZE & "]", $ARESULT[2])
  1594.     Local $TSID = DllStructCreate("byte Data[" & $ISIZE & "]")
  1595.     DllStructSetData($TSID, "Data", DllStructGetData($TBUFFER, "Data"))
  1596.     DllCall("kernel32.dll", "ptr", "LocalFree", "ptr", $ARESULT[2])
  1597.     Return $TSID
  1598. EndFunc
  1599. Global Const $TAGMEMMAP = "handle hProc;ulong_ptr Size;ptr Mem"
  1600. Func _MEMFREE(ByRef $TMEMMAP)
  1601.     Local $PMEMORY = DllStructGetData($TMEMMAP, "Mem")
  1602.     Local $HPROCESS = DllStructGetData($TMEMMAP, "hProc")
  1603.     Local $BRESULT = _MemVirtualFreeEx($HPROCESS, $PMEMORY, 0, $MEM_RELEASE)
  1604.     DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $HPROCESS)
  1605.     If @error Then Return SetError(@error, @extended, False)
  1606.     Return $BRESULT
  1607. EndFunc
  1608. Func _MemGlobalAlloc($IBYTES, $IFLAGS = 0)
  1609.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GlobalAlloc", "uint", $IFLAGS, "ulong_ptr", $IBYTES)
  1610.     If @error Then Return SetError(@error, @extended, 0)
  1611.     Return $ARESULT[0]
  1612. EndFunc
  1613. Func _MemGlobalFree($HMEM)
  1614.     Local $ARESULT = DllCall("kernel32.dll", "ptr", "GlobalFree", "handle", $HMEM)
  1615.     If @error Then Return SetError(@error, @extended, False)
  1616.     Return $ARESULT[0]
  1617. EndFunc
  1618. Func _MemGlobalLock($HMEM)
  1619.     Local $ARESULT = DllCall("kernel32.dll", "ptr", "GlobalLock", "handle", $HMEM)
  1620.     If @error Then Return SetError(@error, @extended, 0)
  1621.     Return $ARESULT[0]
  1622. EndFunc
  1623. Func _MemGlobalSize($HMEM)
  1624.     Local $ARESULT = DllCall("kernel32.dll", "ulong_ptr", "GlobalSize", "handle", $HMEM)
  1625.     If @error Then Return SetError(@error, @extended, 0)
  1626.     Return $ARESULT[0]
  1627. EndFunc
  1628. Func _MemGlobalUnlock($HMEM)
  1629.     Local $ARESULT = DllCall("kernel32.dll", "bool", "GlobalUnlock", "handle", $HMEM)
  1630.     If @error Then Return SetError(@error, @extended, 0)
  1631.     Return $ARESULT[0]
  1632. EndFunc
  1633. Func _MEMINIT($HWND, $ISIZE, ByRef $TMEMMAP)
  1634.     Local $ARESULT = DllCall("User32.dll", "dword", "GetWindowThreadProcessId", "hwnd", $HWND, "dword*", 0)
  1635.     If @error Then Return SetError(@error, @extended, 0)
  1636.     Local $IPROCESSID = $ARESULT[2]
  1637.     If $IPROCESSID = 0 Then Return SetError(1, 0, 0)
  1638.     Local $IACCESS = BitOR($PROCESS_VM_OPERATION, $PROCESS_VM_READ, $PROCESS_VM_WRITE)
  1639.     Local $HPROCESS = __MEM_OPENPROCESS($IACCESS, False, $IPROCESSID, True)
  1640.     Local $IALLOC = BitOR($MEM_RESERVE, $MEM_COMMIT)
  1641.     Local $PMEMORY = _MemVirtualAllocEx($HPROCESS, 0, $ISIZE, $IALLOC, $PAGE_READWRITE)
  1642.     If $PMEMORY = 0 Then Return SetError(2, 0, 0)
  1643.     $TMEMMAP = DllStructCreate($TAGMEMMAP)
  1644.     DllStructSetData($TMEMMAP, "hProc", $HPROCESS)
  1645.     DllStructSetData($TMEMMAP, "Size", $ISIZE)
  1646.     DllStructSetData($TMEMMAP, "Mem", $PMEMORY)
  1647.     Return $PMEMORY
  1648. EndFunc
  1649. Func _MemMoveMemory($PSOURCE, $PDEST, $ILENGTH)
  1650.     DllCall("kernel32.dll", "none", "RtlMoveMemory", "ptr", $PDEST, "ptr", $PSOURCE, "ulong_ptr", $ILENGTH)
  1651.     If @error Then Return SetError(@error, @extended)
  1652. EndFunc
  1653. Func _MEMREAD(ByRef $TMEMMAP, $PSRCE, $PDEST, $ISIZE)
  1654.     Local $ARESULT = DllCall("kernel32.dll", "bool", "ReadProcessMemory", "handle", DllStructGetData($TMEMMAP, "hProc"), "ptr", $PSRCE, "ptr", $PDEST, "ulong_ptr", $ISIZE, "ulong_ptr*", 0)
  1655.     If @error Then Return SetError(@error, @extended, False)
  1656.     Return $ARESULT[0]
  1657. EndFunc
  1658. Func _MEMWRITE(ByRef $TMEMMAP, $PSRCE, $PDEST = 0, $ISIZE = 0, $SSRCE = "ptr")
  1659.     If $PDEST = 0 Then $PDEST = DllStructGetData($TMEMMAP, "Mem")
  1660.     If $ISIZE = 0 Then $ISIZE = DllStructGetData($TMEMMAP, "Size")
  1661.     Local $ARESULT = DllCall("kernel32.dll", "bool", "WriteProcessMemory", "handle", DllStructGetData($TMEMMAP, "hProc"), "ptr", $PDEST, $SSRCE, $PSRCE, "ulong_ptr", $ISIZE, "ulong_ptr*", 0)
  1662.     If @error Then Return SetError(@error, @extended, False)
  1663.     Return $ARESULT[0]
  1664. EndFunc
  1665. Func _MemVirtualAlloc($PADDRESS, $ISIZE, $IALLOCATION, $IPROTECT)
  1666.     Local $ARESULT = DllCall("kernel32.dll", "ptr", "VirtualAlloc", "ptr", $PADDRESS, "ulong_ptr", $ISIZE, "dword", $IALLOCATION, "dword", $IPROTECT)
  1667.     If @error Then Return SetError(@error, @extended, 0)
  1668.     Return $ARESULT[0]
  1669. EndFunc
  1670. Func _MemVirtualAllocEx($HPROCESS, $PADDRESS, $ISIZE, $IALLOCATION, $IPROTECT)
  1671.     Local $ARESULT = DllCall("kernel32.dll", "ptr", "VirtualAllocEx", "handle", $HPROCESS, "ptr", $PADDRESS, "ulong_ptr", $ISIZE, "dword", $IALLOCATION, "dword", $IPROTECT)
  1672.     If @error Then Return SetError(@error, @extended, 0)
  1673.     Return $ARESULT[0]
  1674. EndFunc
  1675. Func _MemVirtualFree($PADDRESS, $ISIZE, $IFREETYPE)
  1676.     Local $ARESULT = DllCall("kernel32.dll", "bool", "VirtualFree", "ptr", $PADDRESS, "ulong_ptr", $ISIZE, "dword", $IFREETYPE)
  1677.     If @error Then Return SetError(@error, @extended, False)
  1678.     Return $ARESULT[0]
  1679. EndFunc
  1680. Func _MemVirtualFreeEx($HPROCESS, $PADDRESS, $ISIZE, $IFREETYPE)
  1681.     Local $ARESULT = DllCall("kernel32.dll", "bool", "VirtualFreeEx", "handle", $HPROCESS, "ptr", $PADDRESS, "ulong_ptr", $ISIZE, "dword", $IFREETYPE)
  1682.     If @error Then Return SetError(@error, @extended, False)
  1683.     Return $ARESULT[0]
  1684. EndFunc
  1685. Func __MEM_OPENPROCESS($IACCESS, $FINHERIT, $IPROCESSID, $FDEBUGPRIV = False)
  1686.     Local $ARESULT = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $IACCESS, "bool", $FINHERIT, "dword", $IPROCESSID)
  1687.     If @error Then Return SetError(@error, @extended, 0)
  1688.     If $ARESULT[0] Then Return $ARESULT[0]
  1689.     If Not $FDEBUGPRIV Then Return 0
  1690.     Local $HTOKEN = _Security__OpenThreadTokenEx(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
  1691.     If @error Then Return SetError(@error, @extended, 0)
  1692.     _Security__SetPrivilege($HTOKEN, "SeDebugPrivilege", True)
  1693.     Local $IERROR = @error
  1694.     Local $ILASTERROR = @extended
  1695.     Local $IRET = 0
  1696.     If Not @error Then
  1697.         $ARESULT = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $IACCESS, "bool", $FINHERIT, "dword", $IPROCESSID)
  1698.         $IERROR = @error
  1699.         $ILASTERROR = @extended
  1700.         If $ARESULT[0] Then $IRET = $ARESULT[0]
  1701.         _Security__SetPrivilege($HTOKEN, "SeDebugPrivilege", False)
  1702.         If @error Then
  1703.             $IERROR = @error
  1704.             $ILASTERROR = @extended
  1705.         EndIf
  1706.     EndIf
  1707.     DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $HTOKEN)
  1708.     Return SetError($IERROR, $ILASTERROR, $IRET)
  1709. EndFunc
  1710. Global Const $FC_NOOVERWRITE = 0
  1711. Global Const $FC_OVERWRITE = 1
  1712. Global Const $FT_MODIFIED = 0
  1713. Global Const $FT_CREATED = 1
  1714. Global Const $FT_ACCESSED = 2
  1715. Global Const $FO_READ = 0
  1716. Global Const $FO_APPEND = 1
  1717. Global Const $FO_OVERWRITE = 2
  1718. Global Const $FO_BINARY = 16
  1719. Global Const $FO_UNICODE = 32
  1720. Global Const $FO_UTF16_LE = 32
  1721. Global Const $FO_UTF16_BE = 64
  1722. Global Const $FO_UTF8 = 128
  1723. Global Const $FO_UTF8_NOBOM = 256
  1724. Global Const $EOF = -1
  1725. Global Const $FD_FILEMUSTEXIST = 1
  1726. Global Const $FD_PATHMUSTEXIST = 2
  1727. Global Const $FD_MULTISELECT = 4
  1728. Global Const $FD_PROMPTCREATENEW = 8
  1729. Global Const $FD_PROMPTOVERWRITE = 16
  1730. Global Const $CREATE_NEW = 1
  1731. Global Const $CREATE_ALWAYS = 2
  1732. Global Const $OPEN_EXISTING = 3
  1733. Global Const $OPEN_ALWAYS = 4
  1734. Global Const $TRUNCATE_EXISTING = 5
  1735. Global Const $INVALID_SET_FILE_POINTER = -1
  1736. Global Const $FILE_BEGIN = 0
  1737. Global Const $FILE_CURRENT = 1
  1738. Global Const $FILE_END = 2
  1739. Global Const $FILE_ATTRIBUTE_READONLY = 1
  1740. Global Const $FILE_ATTRIBUTE_HIDDEN = 2
  1741. Global Const $FILE_ATTRIBUTE_SYSTEM = 4
  1742. Global Const $FILE_ATTRIBUTE_DIRECTORY = 16
  1743. Global Const $FILE_ATTRIBUTE_ARCHIVE = 32
  1744. Global Const $FILE_ATTRIBUTE_DEVICE = 64
  1745. Global Const $FILE_ATTRIBUTE_NORMAL = 128
  1746. Global Const $FILE_ATTRIBUTE_TEMPORARY = 256
  1747. Global Const $FILE_ATTRIBUTE_SPARSE_FILE = 512
  1748. Global Const $FILE_ATTRIBUTE_REPARSE_POINT = 1024
  1749. Global Const $FILE_ATTRIBUTE_COMPRESSED = 2048
  1750. Global Const $FILE_ATTRIBUTE_OFFLINE = 4096
  1751. Global Const $FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 8192
  1752. Global Const $FILE_ATTRIBUTE_ENCRYPTED = 16384
  1753. Global Const $FILE_SHARE_READ = 1
  1754. Global Const $FILE_SHARE_WRITE = 2
  1755. Global Const $FILE_SHARE_DELETE = 4
  1756. Global Const $GENERIC_ALL = 268435456
  1757. Global Const $GENERIC_EXECUTE = 536870912
  1758. Global Const $GENERIC_WRITE = 1073741824
  1759. Global Const $GENERIC_READ = -2147483648
  1760. Func _SendMessage($HWND, $IMSG, $WPARAM = 0, $LPARAM = 0, $IRETURN = 0, $WPARAMTYPE = "wparam", $LPARAMTYPE = "lparam", $SRETURNTYPE = "lresult")
  1761.     Local $ARESULT = DllCall("user32.dll", $SRETURNTYPE, "SendMessageW", "hwnd", $HWND, "uint", $IMSG, $WPARAMTYPE, $WPARAM, $LPARAMTYPE, $LPARAM)
  1762.     If @error Then Return SetError(@error, @extended, "")
  1763.     If $IRETURN >= 0 And $IRETURN <= 4 Then Return $ARESULT[$IRETURN]
  1764.     Return $ARESULT
  1765. EndFunc
  1766. Func _SendMessageA($HWND, $IMSG, $WPARAM = 0, $LPARAM = 0, $IRETURN = 0, $WPARAMTYPE = "wparam", $LPARAMTYPE = "lparam", $SRETURNTYPE = "lresult")
  1767.     Local $ARESULT = DllCall("user32.dll", $SRETURNTYPE, "SendMessageA", "hwnd", $HWND, "uint", $IMSG, $WPARAMTYPE, $WPARAM, $LPARAMTYPE, $LPARAM)
  1768.     If @error Then Return SetError(@error, @extended, "")
  1769.     If $IRETURN >= 0 And $IRETURN <= 4 Then Return $ARESULT[$IRETURN]
  1770.     Return $ARESULT
  1771. EndFunc
  1772. Global $__GAINPROCESS_WINAPI[64][2] = [[0, 0]]
  1773. Global $__GAWINLIST_WINAPI[64][2] = [[0, 0]]
  1774. Global Const $__WINAPICONSTANT_WM_SETFONT = 48
  1775. Global Const $__WINAPICONSTANT_FW_NORMAL = 400
  1776. Global Const $__WINAPICONSTANT_DEFAULT_CHARSET = 1
  1777. Global Const $__WINAPICONSTANT_OUT_DEFAULT_PRECIS = 0
  1778. Global Const $__WINAPICONSTANT_CLIP_DEFAULT_PRECIS = 0
  1779. Global Const $__WINAPICONSTANT_DEFAULT_QUALITY = 0
  1780. Global Const $__WINAPICONSTANT_FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
  1781. Global Const $__WINAPICONSTANT_FORMAT_MESSAGE_FROM_SYSTEM = 4096
  1782. Global Const $__WINAPICONSTANT_LOGPIXELSX = 88
  1783. Global Const $__WINAPICONSTANT_LOGPIXELSY = 90
  1784. Global Const $HGDI_ERROR = Ptr(-1)
  1785. Global Const $INVALID_HANDLE_VALUE = Ptr(-1)
  1786. Global Const $CLR_INVALID = -1
  1787. Global Const $__WINAPICONSTANT_FLASHW_CAPTION = 1
  1788. Global Const $__WINAPICONSTANT_FLASHW_TRAY = 2
  1789. Global Const $__WINAPICONSTANT_FLASHW_TIMER = 4
  1790. Global Const $__WINAPICONSTANT_FLASHW_TIMERNOFG = 12
  1791. Global Const $__WINAPICONSTANT_GW_HWNDNEXT = 2
  1792. Global Const $__WINAPICONSTANT_GW_CHILD = 5
  1793. Global Const $__WINAPICONSTANT_DI_MASK = 1
  1794. Global Const $__WINAPICONSTANT_DI_IMAGE = 2
  1795. Global Const $__WINAPICONSTANT_DI_NORMAL = 3
  1796. Global Const $__WINAPICONSTANT_DI_COMPAT = 4
  1797. Global Const $__WINAPICONSTANT_DI_DEFAULTSIZE = 8
  1798. Global Const $__WINAPICONSTANT_DI_NOMIRROR = 16
  1799. Global Const $__WINAPICONSTANT_DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = 1
  1800. Global Const $__WINAPICONSTANT_DISPLAY_DEVICE_PRIMARY_DEVICE = 4
  1801. Global Const $__WINAPICONSTANT_DISPLAY_DEVICE_MIRRORING_DRIVER = 8
  1802. Global Const $__WINAPICONSTANT_DISPLAY_DEVICE_VGA_COMPATIBLE = 16
  1803. Global Const $__WINAPICONSTANT_DISPLAY_DEVICE_REMOVABLE = 32
  1804. Global Const $__WINAPICONSTANT_DISPLAY_DEVICE_MODESPRUNED = 134217728
  1805. Global Const $NULL_BRUSH = 5
  1806. Global Const $NULL_PEN = 8
  1807. Global Const $BLACK_BRUSH = 4
  1808. Global Const $DKGRAY_BRUSH = 3
  1809. Global Const $DC_BRUSH = 18
  1810. Global Const $GRAY_BRUSH = 2
  1811. Global Const $HOLLOW_BRUSH = $NULL_BRUSH
  1812. Global Const $LTGRAY_BRUSH = 1
  1813. Global Const $WHITE_BRUSH = 0
  1814. Global Const $BLACK_PEN = 7
  1815. Global Const $DC_PEN = 19
  1816. Global Const $WHITE_PEN = 6
  1817. Global Const $ANSI_FIXED_FONT = 11
  1818. Global Const $ANSI_VAR_FONT = 12
  1819. Global Const $DEVICE_DEFAULT_FONT = 14
  1820. Global Const $DEFAULT_GUI_FONT = 17
  1821. Global Const $OEM_FIXED_FONT = 10
  1822. Global Const $SYSTEM_FONT = 13
  1823. Global Const $SYSTEM_FIXED_FONT = 16
  1824. Global Const $DEFAULT_PALETTE = 15
  1825. Global Const $MB_PRECOMPOSED = 1
  1826. Global Const $MB_COMPOSITE = 2
  1827. Global Const $MB_USEGLYPHCHARS = 4
  1828. Global Const $ULW_ALPHA = 2
  1829. Global Const $ULW_COLORKEY = 1
  1830. Global Const $ULW_OPAQUE = 4
  1831. Global Const $WH_CALLWNDPROC = 4
  1832. Global Const $WH_CALLWNDPROCRET = 12
  1833. Global Const $WH_CBT = 5
  1834. Global Const $WH_DEBUG = 9
  1835. Global Const $WH_FOREGROUNDIDLE = 11
  1836. Global Const $WH_GETMESSAGE = 3
  1837. Global Const $WH_JOURNALPLAYBACK = 1
  1838. Global Const $WH_JOURNALRECORD = 0
  1839. Global Const $WH_KEYBOARD = 2
  1840. Global Const $WH_KEYBOARD_LL = 13
  1841. Global Const $WH_MOUSE = 7
  1842. Global Const $WH_MOUSE_LL = 14
  1843. Global Const $WH_MSGFILTER = -1
  1844. Global Const $WH_SHELL = 10
  1845. Global Const $WH_SYSMSGFILTER = 6
  1846. Global Const $WPF_ASYNCWINDOWPLACEMENT = 4
  1847. Global Const $WPF_RESTORETOMAXIMIZED = 2
  1848. Global Const $WPF_SETMINPOSITION = 1
  1849. Global Const $KF_EXTENDED = 256
  1850. Global Const $KF_ALTDOWN = 8192
  1851. Global Const $KF_UP = 32768
  1852. Global Const $LLKHF_EXTENDED = BitShift($KF_EXTENDED, 8)
  1853. Global Const $LLKHF_INJECTED = 16
  1854. Global Const $LLKHF_ALTDOWN = BitShift($KF_ALTDOWN, 8)
  1855. Global Const $LLKHF_UP = BitShift($KF_UP, 8)
  1856. Global Const $OFN_ALLOWMULTISELECT = 512
  1857. Global Const $OFN_CREATEPROMPT = 8192
  1858. Global Const $OFN_DONTADDTORECENT = 33554432
  1859. Global Const $OFN_ENABLEHOOK = 32
  1860. Global Const $OFN_ENABLEINCLUDENOTIFY = 4194304
  1861. Global Const $OFN_ENABLESIZING = 8388608
  1862. Global Const $OFN_ENABLETEMPLATE = 64
  1863. Global Const $OFN_ENABLETEMPLATEHANDLE = 128
  1864. Global Const $OFN_EXPLORER = 524288
  1865. Global Const $OFN_EXTENSIONDIFFERENT = 1024
  1866. Global Const $OFN_FILEMUSTEXIST = 4096
  1867. Global Const $OFN_FORCESHOWHIDDEN = 268435456
  1868. Global Const $OFN_HIDEREADONLY = 4
  1869. Global Const $OFN_LONGNAMES = 2097152
  1870. Global Const $OFN_NOCHANGEDIR = 8
  1871. Global Const $OFN_NODEREFERENCELINKS = 1048576
  1872. Global Const $OFN_NOLONGNAMES = 262144
  1873. Global Const $OFN_NONETWORKBUTTON = 131072
  1874. Global Const $OFN_NOREADONLYRETURN = 32768
  1875. Global Const $OFN_NOTESTFILECREATE = 65536
  1876. Global Const $OFN_NOVALIDATE = 256
  1877. Global Const $OFN_OVERWRITEPROMPT = 2
  1878. Global Const $OFN_PATHMUSTEXIST = 2048
  1879. Global Const $OFN_READONLY = 1
  1880. Global Const $OFN_SHAREAWARE = 16384
  1881. Global Const $OFN_SHOWHELP = 16
  1882. Global Const $OFN_EX_NOPLACESBAR = 1
  1883. Global Const $TAGCURSORINFO = "dword Size;dword Flags;handle hCursor;" & $TAGPOINT
  1884. Global Const $TAGDISPLAY_DEVICE = "dword Size;wchar Name[32];wchar String[128];dword Flags;wchar ID[128];wchar Key[128]"
  1885. Global Const $TAGFLASHWINFO = "uint Size;hwnd hWnd;dword Flags;uint Count;dword TimeOut"
  1886. Global Const $TAGICONINFO = "bool Icon;dword XHotSpot;dword YHotSpot;handle hMask;handle hColor"
  1887. Global Const $TAGMEMORYSTATUSEX = "dword Length;dword MemoryLoad;" & "uint64 TotalPhys;uint64 AvailPhys;uint64 TotalPageFile;uint64 AvailPageFile;" & "uint64 TotalVirtual;uint64 AvailVirtual;uint64 AvailExtendedVirtual"
  1888. Func _WinAPI_AttachConsole($IPROCESSID = -1)
  1889.     Local $ARESULT = DllCall("kernel32.dll", "bool", "AttachConsole", "dword", $IPROCESSID)
  1890.     If @error Then Return SetError(@error, @extended, False)
  1891.     Return $ARESULT[0]
  1892. EndFunc
  1893. Func _WinAPI_AttachThreadInput($IATTACH, $IATTACHTO, $FATTACH)
  1894.     Local $ARESULT = DllCall("user32.dll", "bool", "AttachThreadInput", "dword", $IATTACH, "dword", $IATTACHTO, "bool", $FATTACH)
  1895.     If @error Then Return SetError(@error, @extended, False)
  1896.     Return $ARESULT[0]
  1897. EndFunc
  1898. Func _WinAPI_Beep($IFREQ = 500, $IDURATION = 1000)
  1899.     Local $ARESULT = DllCall("kernel32.dll", "bool", "Beep", "dword", $IFREQ, "dword", $IDURATION)
  1900.     If @error Then Return SetError(@error, @extended, False)
  1901.     Return $ARESULT[0]
  1902. EndFunc
  1903. Func _WinAPI_BitBlt($HDESTDC, $IXDEST, $IYDEST, $IWIDTH, $IHEIGHT, $HSRCDC, $IXSRC, $IYSRC, $IROP)
  1904.     Local $ARESULT = DllCall("gdi32.dll", "bool", "BitBlt", "handle", $HDESTDC, "int", $IXDEST, "int", $IYDEST, "int", $IWIDTH, "int", $IHEIGHT, "handle", $HSRCDC, "int", $IXSRC, "int", $IYSRC, "dword", $IROP)
  1905.     If @error Then Return SetError(@error, @extended, False)
  1906.     Return $ARESULT[0]
  1907. EndFunc
  1908. Func _WinAPI_CallNextHookEx($HHK, $ICODE, $WPARAM, $LPARAM)
  1909.     Local $ARESULT = DllCall("user32.dll", "lresult", "CallNextHookEx", "handle", $HHK, "int", $ICODE, "wparam", $WPARAM, "lparam", $LPARAM)
  1910.     If @error Then Return SetError(@error, @extended, -1)
  1911.     Return $ARESULT[0]
  1912. EndFunc
  1913. Func _WinAPI_CallWindowProc($LPPREVWNDFUNC, $HWND, $MSG, $WPARAM, $LPARAM)
  1914.     Local $ARESULT = DllCall("user32.dll", "lresult", "CallWindowProc", "ptr", $LPPREVWNDFUNC, "hwnd", $HWND, "uint", $MSG, "wparam", $WPARAM, "lparam", $LPARAM)
  1915.     If @error Then Return SetError(@error, @extended, -1)
  1916.     Return $ARESULT[0]
  1917. EndFunc
  1918. Func _WinAPI_ClientToScreen($HWND, ByRef $TPOINT)
  1919.     Local $PPOINT = DllStructGetPtr($TPOINT)
  1920.     DllCall("user32.dll", "bool", "ClientToScreen", "hwnd", $HWND, "ptr", $PPOINT)
  1921.     Return SetError(@error, @extended, $TPOINT)
  1922. EndFunc
  1923. Func _WinAPI_CloseHandle($HOBJECT)
  1924.     Local $ARESULT = DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $HOBJECT)
  1925.     If @error Then Return SetError(@error, @extended, False)
  1926.     Return $ARESULT[0]
  1927. EndFunc
  1928. Func _WINAPI_COMBINERGN($HRGNDEST, $HRGNSRC1, $HRGNSRC2, $ICOMBINEMODE)
  1929.     Local $ARESULT = DllCall("gdi32.dll", "int", "CombineRgn", "handle", $HRGNDEST, "handle", $HRGNSRC1, "handle", $HRGNSRC2, "int", $ICOMBINEMODE)
  1930.     If @error Then Return SetError(@error, @extended, 0)
  1931.     Return $ARESULT[0]
  1932. EndFunc
  1933. Func _WinAPI_CommDlgExtendedError()
  1934.     Local Const $CDERR_DIALOGFAILURE = 65535
  1935.     Local Const $CDERR_FINDRESFAILURE = 6
  1936.     Local Const $CDERR_INITIALIZATION = 2
  1937.     Local Const $CDERR_LOADRESFAILURE = 7
  1938.     Local Const $CDERR_LOADSTRFAILURE = 5
  1939.     Local Const $CDERR_LOCKRESFAILURE = 8
  1940.     Local Const $CDERR_MEMALLOCFAILURE = 9
  1941.     Local Const $CDERR_MEMLOCKFAILURE = 10
  1942.     Local Const $CDERR_NOHINSTANCE = 4
  1943.     Local Const $CDERR_NOHOOK = 11
  1944.     Local Const $CDERR_NOTEMPLATE = 3
  1945.     Local Const $CDERR_REGISTERMSGFAIL = 12
  1946.     Local Const $CDERR_STRUCTSIZE = 1
  1947.     Local Const $FNERR_BUFFERTOOSMALL = 12291
  1948.     Local Const $FNERR_INVALIDFILENAME = 12290
  1949.     Local Const $FNERR_SUBCLASSFAILURE = 12289
  1950.     Local $ARESULT = DllCall("comdlg32.dll", "dword", "CommDlgExtendedError")
  1951.     If @error Then Return SetError(@error, @extended, 0)
  1952.     Switch $ARESULT[0]
  1953.         Case $CDERR_DIALOGFAILURE
  1954.             Return SetError($ARESULT[0], 0, "The dialog box could not be created." & @LF & "The common dialog box function's call to the DialogBox function failed." & @LF & "For example, this error occurs if the common dialog box call specifies an invalid window handle.")
  1955.         Case $CDERR_FINDRESFAILURE
  1956.             Return SetError($ARESULT[0], 0, "The common dialog box function failed to find a specified resource.")
  1957.         Case $CDERR_INITIALIZATION
  1958.             Return SetError($ARESULT[0], 0, "The common dialog box function failed during initialization." & @LF & "This error often occurs when sufficient memory is not available.")
  1959.         Case $CDERR_LOADRESFAILURE
  1960.             Return SetError($ARESULT[0], 0, "The common dialog box function failed to load a specified resource.")
  1961.         Case $CDERR_LOADSTRFAILURE
  1962.             Return SetError($ARESULT[0], 0, "The common dialog box function failed to load a specified string.")
  1963.         Case $CDERR_LOCKRESFAILURE
  1964.             Return SetError($ARESULT[0], 0, "The common dialog box function failed to lock a specified resource.")
  1965.         Case $CDERR_MEMALLOCFAILURE
  1966.             Return SetError($ARESULT[0], 0, "The common dialog box function was unable to allocate memory for internal structures.")
  1967.         Case $CDERR_MEMLOCKFAILURE
  1968.             Return SetError($ARESULT[0], 0, "The common dialog box function was unable to lock the memory associated with a handle.")
  1969.         Case $CDERR_NOHINSTANCE
  1970.             Return SetError($ARESULT[0], 0, "The ENABLETEMPLATE flag was set in the Flags member of the initialization structure for the corresponding common dialog box," & @LF & "but you failed to provide a corresponding instance handle.")
  1971.         Case $CDERR_NOHOOK
  1972.             Return SetError($ARESULT[0], 0, "The ENABLEHOOK flag was set in the Flags member of the initialization structure for the corresponding common dialog box," & @LF & "but you failed to provide a pointer to a corresponding hook procedure.")
  1973.         Case $CDERR_NOTEMPLATE
  1974.             Return SetError($ARESULT[0], 0, "The ENABLETEMPLATE flag was set in the Flags member of the initialization structure for the corresponding common dialog box," & @LF & "but you failed to provide a corresponding template.")
  1975.         Case $CDERR_REGISTERMSGFAIL
  1976.             Return SetError($ARESULT[0], 0, "The RegisterWindowMessage function returned an error code when it was called by the common dialog box function.")
  1977.         Case $CDERR_STRUCTSIZE
  1978.             Return SetError($ARESULT[0], 0, "The lStructSize member of the initialization structure for the corresponding common dialog box is invalid")
  1979.         Case $FNERR_BUFFERTOOSMALL
  1980.             Return SetError($ARESULT[0], 0, "The buffer pointed to by the lpstrFile member of the OPENFILENAME structure is too small for the file name specified by the user." & @LF & "The first two bytes of the lpstrFile buffer contain an integer value specifying the size, in TCHARs, required to receive the full name.")
  1981.         Case $FNERR_INVALIDFILENAME
  1982.             Return SetError($ARESULT[0], 0, "A file name is invalid.")
  1983.         Case $FNERR_SUBCLASSFAILURE
  1984.             Return SetError($ARESULT[0], 0, "An attempt to subclass a list box failed because sufficient memory was not available.")
  1985.     EndSwitch
  1986.     Return Hex($ARESULT[0])
  1987. EndFunc
  1988. Func _WinAPI_CopyIcon($HICON)
  1989.     Local $ARESULT = DllCall("user32.dll", "handle", "CopyIcon", "handle", $HICON)
  1990.     If @error Then Return SetError(@error, @extended, 0)
  1991.     Return $ARESULT[0]
  1992. EndFunc
  1993. Func _WinAPI_CreateBitmap($IWIDTH, $IHEIGHT, $IPLANES = 1, $IBITSPERPEL = 1, $PBITS = 0)
  1994.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateBitmap", "int", $IWIDTH, "int", $IHEIGHT, "uint", $IPLANES, "uint", $IBITSPERPEL, "ptr", $PBITS)
  1995.     If @error Then Return SetError(@error, @extended, 0)
  1996.     Return $ARESULT[0]
  1997. EndFunc
  1998. Func _WinAPI_CreateCompatibleBitmap($HDC, $IWIDTH, $IHEIGHT)
  1999.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateCompatibleBitmap", "handle", $HDC, "int", $IWIDTH, "int", $IHEIGHT)
  2000.     If @error Then Return SetError(@error, @extended, 0)
  2001.     Return $ARESULT[0]
  2002. EndFunc
  2003. Func _WinAPI_CreateCompatibleDC($HDC)
  2004.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateCompatibleDC", "handle", $HDC)
  2005.     If @error Then Return SetError(@error, @extended, 0)
  2006.     Return $ARESULT[0]
  2007. EndFunc
  2008. Func _WinAPI_CreateEvent($PATTRIBUTES = 0, $FMANUALRESET = True, $FINITIALSTATE = True, $SNAME = "")
  2009.     Local $SNAMETYPE = "wstr"
  2010.     If $SNAME = "" Then
  2011.         $SNAME = 0
  2012.         $SNAMETYPE = "ptr"
  2013.     EndIf
  2014.     Local $ARESULT = DllCall("kernel32.dll", "handle", "CreateEventW", "ptr", $PATTRIBUTES, "bool", $FMANUALRESET, "bool", $FINITIALSTATE, $SNAMETYPE, $SNAME)
  2015.     If @error Then Return SetError(@error, @extended, 0)
  2016.     Return $ARESULT[0]
  2017. EndFunc
  2018. Func _WinAPI_CreateFile($SFILENAME, $ICREATION, $IACCESS = 4, $ISHARE = 0, $IATTRIBUTES = 0, $PSECURITY = 0)
  2019.     Local $IDA = 0, $ISM = 0, $ICD = 0, $IFA = 0
  2020.     If BitAND($IACCESS, 1) <> 0 Then $IDA = BitOR($IDA, $GENERIC_EXECUTE)
  2021.     If BitAND($IACCESS, 2) <> 0 Then $IDA = BitOR($IDA, $GENERIC_READ)
  2022.     If BitAND($IACCESS, 4) <> 0 Then $IDA = BitOR($IDA, $GENERIC_WRITE)
  2023.     If BitAND($ISHARE, 1) <> 0 Then $ISM = BitOR($ISM, $FILE_SHARE_DELETE)
  2024.     If BitAND($ISHARE, 2) <> 0 Then $ISM = BitOR($ISM, $FILE_SHARE_READ)
  2025.     If BitAND($ISHARE, 4) <> 0 Then $ISM = BitOR($ISM, $FILE_SHARE_WRITE)
  2026.     Switch $ICREATION
  2027.         Case 0
  2028.             $ICD = $CREATE_NEW
  2029.         Case 1
  2030.             $ICD = $CREATE_ALWAYS
  2031.         Case 2
  2032.             $ICD = $OPEN_EXISTING
  2033.         Case 3
  2034.             $ICD = $OPEN_ALWAYS
  2035.         Case 4
  2036.             $ICD = $TRUNCATE_EXISTING
  2037.     EndSwitch
  2038.     If BitAND($IATTRIBUTES, 1) <> 0 Then $IFA = BitOR($IFA, $FILE_ATTRIBUTE_ARCHIVE)
  2039.     If BitAND($IATTRIBUTES, 2) <> 0 Then $IFA = BitOR($IFA, $FILE_ATTRIBUTE_HIDDEN)
  2040.     If BitAND($IATTRIBUTES, 4) <> 0 Then $IFA = BitOR($IFA, $FILE_ATTRIBUTE_READONLY)
  2041.     If BitAND($IATTRIBUTES, 8) <> 0 Then $IFA = BitOR($IFA, $FILE_ATTRIBUTE_SYSTEM)
  2042.     Local $ARESULT = DllCall("kernel32.dll", "handle", "CreateFileW", "wstr", $SFILENAME, "dword", $IDA, "dword", $ISM, "ptr", $PSECURITY, "dword", $ICD, "dword", $IFA, "ptr", 0)
  2043.     If @error Or $ARESULT[0] = Ptr(-1) Then Return SetError(@error, @extended, 0)
  2044.     Return $ARESULT[0]
  2045. EndFunc
  2046. Func _WinAPI_CreateFont($NHEIGHT, $NWIDTH, $NESCAPE = 0, $NORIENTN = 0, $FNWEIGHT = $__WINAPICONSTANT_FW_NORMAL, $BITALIC = False, $BUNDERLINE = False, $BSTRIKEOUT = False, $NCHARSET = $__WINAPICONSTANT_DEFAULT_CHARSET, $NOUTPUTPREC = $__WINAPICONSTANT_OUT_DEFAULT_PRECIS, $NCLIPPREC = $__WINAPICONSTANT_CLIP_DEFAULT_PRECIS, $NQUALITY = $__WINAPICONSTANT_DEFAULT_QUALITY, $NPITCH = 0, $SZFACE = "Arial")
  2047.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateFontW", "int", $NHEIGHT, "int", $NWIDTH, "int", $NESCAPE, "int", $NORIENTN, "int", $FNWEIGHT, "dword", $BITALIC, "dword", $BUNDERLINE, "dword", $BSTRIKEOUT, "dword", $NCHARSET, "dword", $NOUTPUTPREC, "dword", $NCLIPPREC, "dword", $NQUALITY, "dword", $NPITCH, "wstr", $SZFACE)
  2048.     If @error Then Return SetError(@error, @extended, 0)
  2049.     Return $ARESULT[0]
  2050. EndFunc
  2051. Func _WinAPI_CreateFontIndirect($TLOGFONT)
  2052.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateFontIndirectW", "ptr", DllStructGetPtr($TLOGFONT))
  2053.     If @error Then Return SetError(@error, @extended, 0)
  2054.     Return $ARESULT[0]
  2055. EndFunc
  2056. Func _WINAPI_CREATEPEN($IPENSTYLE, $IWIDTH, $NCOLOR)
  2057.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreatePen", "int", $IPENSTYLE, "int", $IWIDTH, "dword", $NCOLOR)
  2058.     If @error Then Return SetError(@error, @extended, 0)
  2059.     Return $ARESULT[0]
  2060. EndFunc
  2061. Func _WinAPI_CreateProcess($SAPPNAME, $SCOMMAND, $PSECURITY, $PTHREAD, $FINHERIT, $IFLAGS, $PENVIRON, $SDIR, $PSTARTUPINFO, $PPROCESS)
  2062.     Local $PCOMMAND = 0
  2063.     Local $SAPPNAMETYPE = "wstr", $SDIRTYPE = "wstr"
  2064.     If $SAPPNAME = "" Then
  2065.         $SAPPNAMETYPE = "ptr"
  2066.         $SAPPNAME = 0
  2067.     EndIf
  2068.     If $SCOMMAND <> "" Then
  2069.         Local $TCOMMAND = DllStructCreate("wchar Text[" & 260 + 1 & "]")
  2070.         $PCOMMAND = DllStructGetPtr($TCOMMAND)
  2071.         DllStructSetData($TCOMMAND, "Text", $SCOMMAND)
  2072.     EndIf
  2073.     If $SDIR = "" Then
  2074.         $SDIRTYPE = "ptr"
  2075.         $SDIR = 0
  2076.     EndIf
  2077.     Local $ARESULT = DllCall("kernel32.dll", "bool", "CreateProcessW", $SAPPNAMETYPE, $SAPPNAME, "ptr", $PCOMMAND, "ptr", $PSECURITY, "ptr", $PTHREAD, "bool", $FINHERIT, "dword", $IFLAGS, "ptr", $PENVIRON, $SDIRTYPE, $SDIR, "ptr", $PSTARTUPINFO, "ptr", $PPROCESS)
  2078.     If @error Then Return SetError(@error, @extended, False)
  2079.     Return $ARESULT[0]
  2080. EndFunc
  2081. Func _WINAPI_CREATERECTRGN($ILEFTRECT, $ITOPRECT, $IRIGHTRECT, $IBOTTOMRECT)
  2082.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateRectRgn", "int", $ILEFTRECT, "int", $ITOPRECT, "int", $IRIGHTRECT, "int", $IBOTTOMRECT)
  2083.     If @error Then Return SetError(@error, @extended, 0)
  2084.     Return $ARESULT[0]
  2085. EndFunc
  2086. Func _WINAPI_CREATEROUNDRECTRGN($ILEFTRECT, $ITOPRECT, $IRIGHTRECT, $IBOTTOMRECT, $IWIDTHELLIPSE, $IHEIGHTELLIPSE)
  2087.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateRoundRectRgn", "int", $ILEFTRECT, "int", $ITOPRECT, "int", $IRIGHTRECT, "int", $IBOTTOMRECT, "int", $IWIDTHELLIPSE, "int", $IHEIGHTELLIPSE)
  2088.     If @error Then Return SetError(@error, @extended, 0)
  2089.     Return $ARESULT[0]
  2090. EndFunc
  2091. Func _WinAPI_CreateSolidBitmap($HWND, $ICOLOR, $IWIDTH, $IHEIGHT, $BRGB = 1)
  2092.     Local $HDC = _WinAPI_GetDC($HWND)
  2093.     Local $HDESTDC = _WinAPI_CreateCompatibleDC($HDC)
  2094.     Local $HBITMAP = _WinAPI_CreateCompatibleBitmap($HDC, $IWIDTH, $IHEIGHT)
  2095.     Local $HOLD = _WinAPI_SelectObject($HDESTDC, $HBITMAP)
  2096.     Local $TRECT = DllStructCreate($TAGRECT)
  2097.     DllStructSetData($TRECT, 1, 0)
  2098.     DllStructSetData($TRECT, 2, 0)
  2099.     DllStructSetData($TRECT, 3, $IWIDTH)
  2100.     DllStructSetData($TRECT, 4, $IHEIGHT)
  2101.     If $BRGB Then
  2102.         $ICOLOR = BitOR(BitAND($ICOLOR, 65280), BitShift(BitAND($ICOLOR, 255), -16), BitShift(BitAND($ICOLOR, 16711680), 16))
  2103.     EndIf
  2104.     Local $HBRUSH = _WinAPI_CreateSolidBrush($ICOLOR)
  2105.     _WinAPI_FillRect($HDESTDC, DllStructGetPtr($TRECT), $HBRUSH)
  2106.     If @error Then
  2107.         _WinAPI_DeleteObject($HBITMAP)
  2108.         $HBITMAP = 0
  2109.     EndIf
  2110.     _WinAPI_DeleteObject($HBRUSH)
  2111.     _WinAPI_ReleaseDC($HWND, $HDC)
  2112.     _WinAPI_SelectObject($HDESTDC, $HOLD)
  2113.     _WinAPI_DeleteDC($HDESTDC)
  2114.     If Not $HBITMAP Then Return SetError(1, 0, 0)
  2115.     Return $HBITMAP
  2116. EndFunc
  2117. Func _WinAPI_CreateSolidBrush($NCOLOR)
  2118.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateSolidBrush", "dword", $NCOLOR)
  2119.     If @error Then Return SetError(@error, @extended, 0)
  2120.     Return $ARESULT[0]
  2121. EndFunc
  2122. Func _WinAPI_CreateWindowEx($IEXSTYLE, $SCLASS, $SNAME, $ISTYLE, $IX, $IY, $IWIDTH, $IHEIGHT, $HPARENT, $HMENU = 0, $HINSTANCE = 0, $PPARAM = 0)
  2123.     If $HINSTANCE = 0 Then $HINSTANCE = _WinAPI_GetModuleHandle("")
  2124.     Local $ARESULT = DllCall("user32.dll", "hwnd", "CreateWindowExW", "dword", $IEXSTYLE, "wstr", $SCLASS, "wstr", $SNAME, "dword", $ISTYLE, "int", $IX, "int", $IY, "int", $IWIDTH, "int", $IHEIGHT, "hwnd", $HPARENT, "handle", $HMENU, "handle", $HINSTANCE, "ptr", $PPARAM)
  2125.     If @error Then Return SetError(@error, @extended, 0)
  2126.     Return $ARESULT[0]
  2127. EndFunc
  2128. Func _WinAPI_DefWindowProc($HWND, $IMSG, $IWPARAM, $ILPARAM)
  2129.     Local $ARESULT = DllCall("user32.dll", "lresult", "DefWindowProc", "hwnd", $HWND, "uint", $IMSG, "wparam", $IWPARAM, "lparam", $ILPARAM)
  2130.     If @error Then Return SetError(@error, @extended, 0)
  2131.     Return $ARESULT[0]
  2132. EndFunc
  2133. Func _WinAPI_DeleteDC($HDC)
  2134.     Local $ARESULT = DllCall("gdi32.dll", "bool", "DeleteDC", "handle", $HDC)
  2135.     If @error Then Return SetError(@error, @extended, False)
  2136.     Return $ARESULT[0]
  2137. EndFunc
  2138. Func _WinAPI_DeleteObject($HOBJECT)
  2139.     Local $ARESULT = DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $HOBJECT)
  2140.     If @error Then Return SetError(@error, @extended, False)
  2141.     Return $ARESULT[0]
  2142. EndFunc
  2143. Func _WinAPI_DestroyIcon($HICON)
  2144.     Local $ARESULT = DllCall("user32.dll", "bool", "DestroyIcon", "handle", $HICON)
  2145.     If @error Then Return SetError(@error, @extended, False)
  2146.     Return $ARESULT[0]
  2147. EndFunc
  2148. Func _WinAPI_DestroyWindow($HWND)
  2149.     Local $ARESULT = DllCall("user32.dll", "bool", "DestroyWindow", "hwnd", $HWND)
  2150.     If @error Then Return SetError(@error, @extended, False)
  2151.     Return $ARESULT[0]
  2152. EndFunc
  2153. Func _WinAPI_DrawEdge($HDC, $PTRRECT, $NEDGETYPE, $GRFFLAGS)
  2154.     Local $ARESULT = DllCall("user32.dll", "bool", "DrawEdge", "handle", $HDC, "ptr", $PTRRECT, "uint", $NEDGETYPE, "uint", $GRFFLAGS)
  2155.     If @error Then Return SetError(@error, @extended, False)
  2156.     Return $ARESULT[0]
  2157. EndFunc
  2158. Func _WinAPI_DrawFrameControl($HDC, $PTRRECT, $NTYPE, $NSTATE)
  2159.     Local $ARESULT = DllCall("user32.dll", "bool", "DrawFrameControl", "handle", $HDC, "ptr", $PTRRECT, "uint", $NTYPE, "uint", $NSTATE)
  2160.     If @error Then Return SetError(@error, @extended, False)
  2161.     Return $ARESULT[0]
  2162. EndFunc
  2163. Func _WinAPI_DrawIcon($HDC, $IX, $IY, $HICON)
  2164.     Local $ARESULT = DllCall("user32.dll", "bool", "DrawIcon", "handle", $HDC, "int", $IX, "int", $IY, "handle", $HICON)
  2165.     If @error Then Return SetError(@error, @extended, False)
  2166.     Return $ARESULT[0]
  2167. EndFunc
  2168. Func _WinAPI_DrawIconEx($HDC, $IX, $IY, $HICON, $IWIDTH = 0, $IHEIGHT = 0, $ISTEP = 0, $HBRUSH = 0, $IFLAGS = 3)
  2169.     Local $IOPTIONS
  2170.     Switch $IFLAGS
  2171.         Case 1
  2172.             $IOPTIONS = $__WINAPICONSTANT_DI_MASK
  2173.         Case 2
  2174.             $IOPTIONS = $__WINAPICONSTANT_DI_IMAGE
  2175.         Case 3
  2176.             $IOPTIONS = $__WINAPICONSTANT_DI_NORMAL
  2177.         Case 4
  2178.             $IOPTIONS = $__WINAPICONSTANT_DI_COMPAT
  2179.         Case 5
  2180.             $IOPTIONS = $__WINAPICONSTANT_DI_DEFAULTSIZE
  2181.         Case Else
  2182.             $IOPTIONS = $__WINAPICONSTANT_DI_NOMIRROR
  2183.     EndSwitch
  2184.     Local $ARESULT = DllCall("user32.dll", "bool", "DrawIconEx", "handle", $HDC, "int", $IX, "int", $IY, "handle", $HICON, "int", $IWIDTH, "int", $IHEIGHT, "uint", $ISTEP, "handle", $HBRUSH, "uint", $IOPTIONS)
  2185.     If @error Then Return SetError(@error, @extended, False)
  2186.     Return $ARESULT[0]
  2187. EndFunc
  2188. Func _WINAPI_DRAWLINE($HDC, $IX1, $IY1, $IX2, $IY2)
  2189.     _WINAPI_MOVETO($HDC, $IX1, $IY1)
  2190.     If @error Then Return SetError(@error, @extended, False)
  2191.     _WINAPI_LINETO($HDC, $IX2, $IY2)
  2192.     If @error Then Return SetError(@error, @extended, False)
  2193.     Return True
  2194. EndFunc
  2195. Func _WinAPI_DrawText($HDC, $STEXT, ByRef $TRECT, $IFLAGS)
  2196.     Local $ARESULT = DllCall("user32.dll", "int", "DrawTextW", "handle", $HDC, "wstr", $STEXT, "int", -1, "ptr", DllStructGetPtr($TRECT), "uint", $IFLAGS)
  2197.     If @error Then Return SetError(@error, @extended, 0)
  2198.     Return $ARESULT[0]
  2199. EndFunc
  2200. Func _WinAPI_EnableWindow($HWND, $FENABLE = True)
  2201.     Local $ARESULT = DllCall("user32.dll", "bool", "EnableWindow", "hwnd", $HWND, "bool", $FENABLE)
  2202.     If @error Then Return SetError(@error, @extended, False)
  2203.     Return $ARESULT[0]
  2204. EndFunc
  2205. Func _WinAPI_EnumDisplayDevices($SDEVICE, $IDEVNUM)
  2206.     Local $PNAME = 0, $IFLAGS = 0, $ADEVICE[5]
  2207.     If $SDEVICE <> "" Then
  2208.         Local $TNAME = DllStructCreate("wchar Text[" & StringLen($SDEVICE) + 1 & "]")
  2209.         $PNAME = DllStructGetPtr($TNAME)
  2210.         DllStructSetData($TNAME, "Text", $SDEVICE)
  2211.     EndIf
  2212.     Local $TDEVICE = DllStructCreate($TAGDISPLAY_DEVICE)
  2213.     Local $PDEVICE = DllStructGetPtr($TDEVICE)
  2214.     Local $IDEVICE = DllStructGetSize($TDEVICE)
  2215.     DllStructSetData($TDEVICE, "Size", $IDEVICE)
  2216.     DllCall("user32.dll", "bool", "EnumDisplayDevicesW", "ptr", $PNAME, "dword", $IDEVNUM, "ptr", $PDEVICE, "dword", 1)
  2217.     If @error Then Return SetError(@error, @extended, 0)
  2218.     Local $IN = DllStructGetData($TDEVICE, "Flags")
  2219.     If BitAND($IN, $__WINAPICONSTANT_DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) <> 0 Then $IFLAGS = BitOR($IFLAGS, 1)
  2220.     If BitAND($IN, $__WINAPICONSTANT_DISPLAY_DEVICE_PRIMARY_DEVICE) <> 0 Then $IFLAGS = BitOR($IFLAGS, 2)
  2221.     If BitAND($IN, $__WINAPICONSTANT_DISPLAY_DEVICE_MIRRORING_DRIVER) <> 0 Then $IFLAGS = BitOR($IFLAGS, 4)
  2222.     If BitAND($IN, $__WINAPICONSTANT_DISPLAY_DEVICE_VGA_COMPATIBLE) <> 0 Then $IFLAGS = BitOR($IFLAGS, 8)
  2223.     If BitAND($IN, $__WINAPICONSTANT_DISPLAY_DEVICE_REMOVABLE) <> 0 Then $IFLAGS = BitOR($IFLAGS, 16)
  2224.     If BitAND($IN, $__WINAPICONSTANT_DISPLAY_DEVICE_MODESPRUNED) <> 0 Then $IFLAGS = BitOR($IFLAGS, 32)
  2225.     $ADEVICE[0] = True
  2226.     $ADEVICE[1] = DllStructGetData($TDEVICE, "Name")
  2227.     $ADEVICE[2] = DllStructGetData($TDEVICE, "String")
  2228.     $ADEVICE[3] = $IFLAGS
  2229.     $ADEVICE[4] = DllStructGetData($TDEVICE, "ID")
  2230.     Return $ADEVICE
  2231. EndFunc
  2232. Func _WinAPI_EnumWindows($FVISIBLE = True, $HWND = Default)
  2233.     __WINAPI_ENUMWINDOWSINIT()
  2234.     If $HWND = Default Then $HWND = _WinAPI_GetDesktopWindow()
  2235.     __WINAPI_ENUMWINDOWSCHILD($HWND, $FVISIBLE)
  2236.     Return $__GAWINLIST_WINAPI
  2237. EndFunc
  2238. Func __WINAPI_ENUMWINDOWSADD($HWND, $SCLASS = "")
  2239.     If $SCLASS = "" Then $SCLASS = _WinAPI_GetClassName($HWND)
  2240.     $__GAWINLIST_WINAPI[0][0] += 1
  2241.     Local $ICOUNT = $__GAWINLIST_WINAPI[0][0]
  2242.     If $ICOUNT >= $__GAWINLIST_WINAPI[0][1] Then
  2243.         ReDim $__GAWINLIST_WINAPI[$ICOUNT + 64][2]
  2244.         $__GAWINLIST_WINAPI[0][1] += 64
  2245.     EndIf
  2246.     $__GAWINLIST_WINAPI[$ICOUNT][0] = $HWND
  2247.     $__GAWINLIST_WINAPI[$ICOUNT][1] = $SCLASS
  2248. EndFunc
  2249. Func __WINAPI_ENUMWINDOWSCHILD($HWND, $FVISIBLE = True)
  2250.     $HWND = _WinAPI_GetWindow($HWND, $__WINAPICONSTANT_GW_CHILD)
  2251.     While $HWND <> 0
  2252.         If (Not $FVISIBLE) Or _WinAPI_IsWindowVisible($HWND) Then
  2253.             __WINAPI_ENUMWINDOWSCHILD($HWND, $FVISIBLE)
  2254.             __WINAPI_ENUMWINDOWSADD($HWND)
  2255.         EndIf
  2256.         $HWND = _WinAPI_GetWindow($HWND, $__WINAPICONSTANT_GW_HWNDNEXT)
  2257.     WEnd
  2258. EndFunc
  2259. Func __WINAPI_ENUMWINDOWSINIT()
  2260.     ReDim $__GAWINLIST_WINAPI[64][2]
  2261.     $__GAWINLIST_WINAPI[0][0] = 0
  2262.     $__GAWINLIST_WINAPI[0][1] = 64
  2263. EndFunc
  2264. Func _WinAPI_EnumWindowsPopup()
  2265.     __WINAPI_ENUMWINDOWSINIT()
  2266.     Local $HWND = _WinAPI_GetWindow(_WinAPI_GetDesktopWindow(), $__WINAPICONSTANT_GW_CHILD)
  2267.     Local $SCLASS
  2268.     While $HWND <> 0
  2269.         If _WinAPI_IsWindowVisible($HWND) Then
  2270.             $SCLASS = _WinAPI_GetClassName($HWND)
  2271.             If $SCLASS = "#32768" Then
  2272.                 __WINAPI_ENUMWINDOWSADD($HWND)
  2273.             ElseIf $SCLASS = "ToolbarWindow32" Then
  2274.                 __WINAPI_ENUMWINDOWSADD($HWND)
  2275.             ElseIf $SCLASS = "ToolTips_Class32" Then
  2276.                 __WINAPI_ENUMWINDOWSADD($HWND)
  2277.             ElseIf $SCLASS = "BaseBar" Then
  2278.                 __WINAPI_ENUMWINDOWSCHILD($HWND)
  2279.             EndIf
  2280.         EndIf
  2281.         $HWND = _WinAPI_GetWindow($HWND, $__WINAPICONSTANT_GW_HWNDNEXT)
  2282.     WEnd
  2283.     Return $__GAWINLIST_WINAPI
  2284. EndFunc
  2285. Func _WinAPI_EnumWindowsTop()
  2286.     __WINAPI_ENUMWINDOWSINIT()
  2287.     Local $HWND = _WinAPI_GetWindow(_WinAPI_GetDesktopWindow(), $__WINAPICONSTANT_GW_CHILD)
  2288.     While $HWND <> 0
  2289.         If _WinAPI_IsWindowVisible($HWND) Then __WINAPI_ENUMWINDOWSADD($HWND)
  2290.         $HWND = _WinAPI_GetWindow($HWND, $__WINAPICONSTANT_GW_HWNDNEXT)
  2291.     WEnd
  2292.     Return $__GAWINLIST_WINAPI
  2293. EndFunc
  2294. Func _WinAPI_ExpandEnvironmentStrings($SSTRING)
  2295.     Local $ARESULT = DllCall("kernel32.dll", "dword", "ExpandEnvironmentStringsW", "wstr", $SSTRING, "wstr", "", "dword", 4096)
  2296.     If @error Then Return SetError(@error, @extended, "")
  2297.     Return $ARESULT[2]
  2298. EndFunc
  2299. Func _WinAPI_ExtractIconEx($SFILE, $IINDEX, $PLARGE, $PSMALL, $IICONS)
  2300.     Local $ARESULT = DllCall("shell32.dll", "uint", "ExtractIconExW", "wstr", $SFILE, "int", $IINDEX, "handle", $PLARGE, "handle", $PSMALL, "uint", $IICONS)
  2301.     If @error Then Return SetError(@error, @extended, 0)
  2302.     Return $ARESULT[0]
  2303. EndFunc
  2304. Func _WinAPI_FatalAppExit($SMESSAGE)
  2305.     DllCall("kernel32.dll", "none", "FatalAppExitW", "uint", 0, "wstr", $SMESSAGE)
  2306.     If @error Then Return SetError(@error, @extended)
  2307. EndFunc
  2308. Func _WinAPI_FillRect($HDC, $PTRRECT, $HBRUSH)
  2309.     Local $ARESULT
  2310.     If IsPtr($HBRUSH) Then
  2311.         $ARESULT = DllCall("user32.dll", "int", "FillRect", "handle", $HDC, "ptr", $PTRRECT, "handle", $HBRUSH)
  2312.     Else
  2313.         $ARESULT = DllCall("user32.dll", "int", "FillRect", "handle", $HDC, "ptr", $PTRRECT, "dword", $HBRUSH)
  2314.     EndIf
  2315.     If @error Then Return SetError(@error, @extended, False)
  2316.     Return $ARESULT[0]
  2317. EndFunc
  2318. Func _WinAPI_FindExecutable($SFILENAME, $SDIRECTORY = "")
  2319.     Local $ARESULT = DllCall("shell32.dll", "INT", "FindExecutableW", "wstr", $SFILENAME, "wstr", $SDIRECTORY, "wstr", "")
  2320.     If @error Then Return SetError(@error, @extended, 0)
  2321.     Return SetExtended($ARESULT[0], $ARESULT[3])
  2322. EndFunc
  2323. Func _WinAPI_FindWindow($SCLASSNAME, $SWINDOWNAME)
  2324.     Local $ARESULT = DllCall("user32.dll", "hwnd", "FindWindowW", "wstr", $SCLASSNAME, "wstr", $SWINDOWNAME)
  2325.     If @error Then Return SetError(@error, @extended, 0)
  2326.     Return $ARESULT[0]
  2327. EndFunc
  2328. Func _WinAPI_FlashWindow($HWND, $FINVERT = True)
  2329.     Local $ARESULT = DllCall("user32.dll", "bool", "FlashWindow", "hwnd", $HWND, "bool", $FINVERT)
  2330.     If @error Then Return SetError(@error, @extended, False)
  2331.     Return $ARESULT[0]
  2332. EndFunc
  2333. Func _WinAPI_FlashWindowEx($HWND, $IFLAGS = 3, $ICOUNT = 3, $ITIMEOUT = 0)
  2334.     Local $TFLASH = DllStructCreate($TAGFLASHWINFO)
  2335.     Local $PFLASH = DllStructGetPtr($TFLASH)
  2336.     Local $IFLASH = DllStructGetSize($TFLASH)
  2337.     Local $IMODE = 0
  2338.     If BitAND($IFLAGS, 1) <> 0 Then $IMODE = BitOR($IMODE, $__WINAPICONSTANT_FLASHW_CAPTION)
  2339.     If BitAND($IFLAGS, 2) <> 0 Then $IMODE = BitOR($IMODE, $__WINAPICONSTANT_FLASHW_TRAY)
  2340.     If BitAND($IFLAGS, 4) <> 0 Then $IMODE = BitOR($IMODE, $__WINAPICONSTANT_FLASHW_TIMER)
  2341.     If BitAND($IFLAGS, 8) <> 0 Then $IMODE = BitOR($IMODE, $__WINAPICONSTANT_FLASHW_TIMERNOFG)
  2342.     DllStructSetData($TFLASH, "Size", $IFLASH)
  2343.     DllStructSetData($TFLASH, "hWnd", $HWND)
  2344.     DllStructSetData($TFLASH, "Flags", $IMODE)
  2345.     DllStructSetData($TFLASH, "Count", $ICOUNT)
  2346.     DllStructSetData($TFLASH, "Timeout", $ITIMEOUT)
  2347.     Local $ARESULT = DllCall("user32.dll", "bool", "FlashWindowEx", "ptr", $PFLASH)
  2348.     If @error Then Return SetError(@error, @extended, False)
  2349.     Return $ARESULT[0]
  2350. EndFunc
  2351. Func _WinAPI_FloatToInt($NFLOAT)
  2352.     Local $TFLOAT = DllStructCreate("float")
  2353.     Local $TINT = DllStructCreate("int", DllStructGetPtr($TFLOAT))
  2354.     DllStructSetData($TFLOAT, 1, $NFLOAT)
  2355.     Return DllStructGetData($TINT, 1)
  2356. EndFunc
  2357. Func _WinAPI_FlushFileBuffers($HFILE)
  2358.     Local $ARESULT = DllCall("kernel32.dll", "bool", "FlushFileBuffers", "handle", $HFILE)
  2359.     If @error Then Return SetError(@error, @extended, False)
  2360.     Return $ARESULT[0]
  2361. EndFunc
  2362. Func _WinAPI_FormatMessage($IFLAGS, $PSOURCE, $IMESSAGEID, $ILANGUAGEID, ByRef $PBUFFER, $ISIZE, $VARGUMENTS)
  2363.     Local $SBUFFERTYPE = "ptr"
  2364.     If IsString($PBUFFER) Then $SBUFFERTYPE = "wstr"
  2365.     Local $ARESULT = DllCall("Kernel32.dll", "dword", "FormatMessageW", "dword", $IFLAGS, "ptr", $PSOURCE, "dword", $IMESSAGEID, "dword", $ILANGUAGEID, $SBUFFERTYPE, $PBUFFER, "dword", $ISIZE, "ptr", $VARGUMENTS)
  2366.     If @error Then Return SetError(@error, @extended, 0)
  2367.     If $SBUFFERTYPE = "wstr" Then $PBUFFER = $ARESULT[5]
  2368.     Return $ARESULT[0]
  2369. EndFunc
  2370. Func _WinAPI_FrameRect($HDC, $PTRRECT, $HBRUSH)
  2371.     Local $ARESULT = DllCall("user32.dll", "int", "FrameRect", "handle", $HDC, "ptr", $PTRRECT, "handle", $HBRUSH)
  2372.     If @error Then Return SetError(@error, @extended, False)
  2373.     Return $ARESULT[0]
  2374. EndFunc
  2375. Func _WinAPI_FreeLibrary($HMODULE)
  2376.     Local $ARESULT = DllCall("kernel32.dll", "bool", "FreeLibrary", "handle", $HMODULE)
  2377.     If @error Then Return SetError(@error, @extended, False)
  2378.     Return $ARESULT[0]
  2379. EndFunc
  2380. Func _WinAPI_GetAncestor($HWND, $IFLAGS = 1)
  2381.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetAncestor", "hwnd", $HWND, "uint", $IFLAGS)
  2382.     If @error Then Return SetError(@error, @extended, 0)
  2383.     Return $ARESULT[0]
  2384. EndFunc
  2385. Func _WinAPI_GetAsyncKeyState($IKEY)
  2386.     Local $ARESULT = DllCall("user32.dll", "short", "GetAsyncKeyState", "int", $IKEY)
  2387.     If @error Then Return SetError(@error, @extended, 0)
  2388.     Return $ARESULT[0]
  2389. EndFunc
  2390. Func _WINAPI_GETBKMODE($HDC)
  2391.     Local $ARESULT = DllCall("gdi32.dll", "int", "GetBkMode", "handle", $HDC)
  2392.     If @error Then Return SetError(@error, @extended, 0)
  2393.     Return $ARESULT[0]
  2394. EndFunc
  2395. Func _WinAPI_GetClassName($HWND)
  2396.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  2397.     Local $ARESULT = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $HWND, "wstr", "", "int", 4096)
  2398.     If @error Then Return SetError(@error, @extended, False)
  2399.     Return SetExtended($ARESULT[0], $ARESULT[2])
  2400. EndFunc
  2401. Func _WinAPI_GetClientHeight($HWND)
  2402.     Local $TRECT = _WinAPI_GetClientRect($HWND)
  2403.     If @error Then Return SetError(@error, @extended, 0)
  2404.     Return DllStructGetData($TRECT, "Bottom") - DllStructGetData($TRECT, "Top")
  2405. EndFunc
  2406. Func _WinAPI_GetClientWidth($HWND)
  2407.     Local $TRECT = _WinAPI_GetClientRect($HWND)
  2408.     If @error Then Return SetError(@error, @extended, 0)
  2409.     Return DllStructGetData($TRECT, "Right") - DllStructGetData($TRECT, "Left")
  2410. EndFunc
  2411. Func _WinAPI_GetClientRect($HWND)
  2412.     Local $TRECT = DllStructCreate($TAGRECT)
  2413.     DllCall("user32.dll", "bool", "GetClientRect", "hwnd", $HWND, "ptr", DllStructGetPtr($TRECT))
  2414.     If @error Then Return SetError(@error, @extended, 0)
  2415.     Return $TRECT
  2416. EndFunc
  2417. Func _WinAPI_GetCurrentProcess()
  2418.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GetCurrentProcess")
  2419.     If @error Then Return SetError(@error, @extended, 0)
  2420.     Return $ARESULT[0]
  2421. EndFunc
  2422. Func _WinAPI_GetCurrentProcessID()
  2423.     Local $ARESULT = DllCall("kernel32.dll", "dword", "GetCurrentProcessId")
  2424.     If @error Then Return SetError(@error, @extended, 0)
  2425.     Return $ARESULT[0]
  2426. EndFunc
  2427. Func _WinAPI_GetCurrentThread()
  2428.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GetCurrentThread")
  2429.     If @error Then Return SetError(@error, @extended, 0)
  2430.     Return $ARESULT[0]
  2431. EndFunc
  2432. Func _WinAPI_GetCurrentThreadId()
  2433.     Local $ARESULT = DllCall("kernel32.dll", "dword", "GetCurrentThreadId")
  2434.     If @error Then Return SetError(@error, @extended, 0)
  2435.     Return $ARESULT[0]
  2436. EndFunc
  2437. Func _WinAPI_GetCursorInfo()
  2438.     Local $TCURSOR = DllStructCreate($TAGCURSORINFO)
  2439.     Local $ICURSOR = DllStructGetSize($TCURSOR)
  2440.     DllStructSetData($TCURSOR, "Size", $ICURSOR)
  2441.     DllCall("user32.dll", "bool", "GetCursorInfo", "ptr", DllStructGetPtr($TCURSOR))
  2442.     If @error Then Return SetError(@error, @extended, 0)
  2443.     Local $ACURSOR[5]
  2444.     $ACURSOR[0] = True
  2445.     $ACURSOR[1] = DllStructGetData($TCURSOR, "Flags") <> 0
  2446.     $ACURSOR[2] = DllStructGetData($TCURSOR, "hCursor")
  2447.     $ACURSOR[3] = DllStructGetData($TCURSOR, "X")
  2448.     $ACURSOR[4] = DllStructGetData($TCURSOR, "Y")
  2449.     Return $ACURSOR
  2450. EndFunc
  2451. Func _WinAPI_GetDC($HWND)
  2452.     Local $ARESULT = DllCall("user32.dll", "handle", "GetDC", "hwnd", $HWND)
  2453.     If @error Then Return SetError(@error, @extended, 0)
  2454.     Return $ARESULT[0]
  2455. EndFunc
  2456. Func _WinAPI_GetDesktopWindow()
  2457.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetDesktopWindow")
  2458.     If @error Then Return SetError(@error, @extended, 0)
  2459.     Return $ARESULT[0]
  2460. EndFunc
  2461. Func _WinAPI_GetDeviceCaps($HDC, $IINDEX)
  2462.     Local $ARESULT = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $HDC, "int", $IINDEX)
  2463.     If @error Then Return SetError(@error, @extended, 0)
  2464.     Return $ARESULT[0]
  2465. EndFunc
  2466. Func _WinAPI_GetDIBits($HDC, $HBMP, $ISTARTSCAN, $ISCANLINES, $PBITS, $PBI, $IUSAGE)
  2467.     Local $ARESULT = DllCall("gdi32.dll", "int", "GetDIBits", "handle", $HDC, "handle", $HBMP, "uint", $ISTARTSCAN, "uint", $ISCANLINES, "ptr", $PBITS, "ptr", $PBI, "uint", $IUSAGE)
  2468.     If @error Then Return SetError(@error, @extended, False)
  2469.     Return $ARESULT[0]
  2470. EndFunc
  2471. Func _WinAPI_GetDlgCtrlID($HWND)
  2472.     Local $ARESULT = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $HWND)
  2473.     If @error Then Return SetError(@error, @extended, 0)
  2474.     Return $ARESULT[0]
  2475. EndFunc
  2476. Func _WinAPI_GetDlgItem($HWND, $IITEMID)
  2477.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetDlgItem", "hwnd", $HWND, "int", $IITEMID)
  2478.     If @error Then Return SetError(@error, @extended, 0)
  2479.     Return $ARESULT[0]
  2480. EndFunc
  2481. Func _WinAPI_GetFocus()
  2482.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetFocus")
  2483.     If @error Then Return SetError(@error, @extended, 0)
  2484.     Return $ARESULT[0]
  2485. EndFunc
  2486. Func _WinAPI_GetForegroundWindow()
  2487.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetForegroundWindow")
  2488.     If @error Then Return SetError(@error, @extended, 0)
  2489.     Return $ARESULT[0]
  2490. EndFunc
  2491. Func _WINAPI_GETGUIRESOURCES($IFLAG = 0, $HPROCESS = -1)
  2492.     If $HPROCESS = -1 Then $HPROCESS = _WinAPI_GetCurrentProcess()
  2493.     Local $ARESULT = DllCall("user32.dll", "dword", "GetGuiResources", "handle", $HPROCESS, "dword", $IFLAG)
  2494.     If @error Then Return SetError(@error, @extended, 0)
  2495.     Return $ARESULT[0]
  2496. EndFunc
  2497. Func _WinAPI_GetIconInfo($HICON)
  2498.     Local $TINFO = DllStructCreate($TAGICONINFO)
  2499.     DllCall("user32.dll", "bool", "GetIconInfo", "handle", $HICON, "ptr", DllStructGetPtr($TINFO))
  2500.     If @error Then Return SetError(@error, @extended, 0)
  2501.     Local $AICON[6]
  2502.     $AICON[0] = True
  2503.     $AICON[1] = DllStructGetData($TINFO, "Icon") <> 0
  2504.     $AICON[2] = DllStructGetData($TINFO, "XHotSpot")
  2505.     $AICON[3] = DllStructGetData($TINFO, "YHotSpot")
  2506.     $AICON[4] = DllStructGetData($TINFO, "hMask")
  2507.     $AICON[5] = DllStructGetData($TINFO, "hColor")
  2508.     Return $AICON
  2509. EndFunc
  2510. Func _WinAPI_GetFileSizeEx($HFILE)
  2511.     Local $ARESULT = DllCall("kernel32.dll", "bool", "GetFileSizeEx", "handle", $HFILE, "int64*", 0)
  2512.     If @error Then Return SetError(@error, @extended, 0)
  2513.     Return $ARESULT[2]
  2514. EndFunc
  2515. Func _WinAPI_GetLastErrorMessage()
  2516.     Local $TBUFFERPTR = DllStructCreate("ptr")
  2517.     Local $PBUFFERPTR = DllStructGetPtr($TBUFFERPTR)
  2518.     Local $NCOUNT = _WinAPI_FormatMessage(BitOR($__WINAPICONSTANT_FORMAT_MESSAGE_ALLOCATE_BUFFER, $__WINAPICONSTANT_FORMAT_MESSAGE_FROM_SYSTEM), 0, _WinAPI_GetLastError(), 0, $PBUFFERPTR, 0, 0)
  2519.     If @error Then Return SetError(@error, 0, "")
  2520.     Local $STEXT = ""
  2521.     Local $PBUFFER = DllStructGetData($TBUFFERPTR, 1)
  2522.     If $PBUFFER Then
  2523.         If $NCOUNT > 0 Then
  2524.             Local $TBUFFER = DllStructCreate("wchar[" & ($NCOUNT + 1) & "]", $PBUFFER)
  2525.             $STEXT = DllStructGetData($TBUFFER, 1)
  2526.         EndIf
  2527.         _WinAPI_LocalFree($PBUFFER)
  2528.     EndIf
  2529.     Return $STEXT
  2530. EndFunc
  2531. Func _WINAPI_GETLAYEREDWINDOWATTRIBUTES($HWND, ByRef $I_TRANSCOLOR, ByRef $TRANSPARENCY, $ASCOLORREF = False)
  2532.     $I_TRANSCOLOR = -1
  2533.     $TRANSPARENCY = -1
  2534.     Local $ARESULT = DllCall("user32.dll", "bool", "GetLayeredWindowAttributes", "hwnd", $HWND, "dword*", $I_TRANSCOLOR, "byte*", $TRANSPARENCY, "dword*", 0)
  2535.     If @error Then Return SetError(@error, @extended, 0)
  2536.     If Not $ASCOLORREF Then
  2537.         $ARESULT[2] = Hex(String($ARESULT[2]), 6)
  2538.         $ARESULT[2] = "0x" & StringMid($ARESULT[2], 5, 2) & StringMid($ARESULT[2], 3, 2) & StringMid($ARESULT[2], 1, 2)
  2539.     EndIf
  2540.     $I_TRANSCOLOR = $ARESULT[2]
  2541.     $TRANSPARENCY = $ARESULT[3]
  2542.     Return $ARESULT[4]
  2543. EndFunc
  2544. Func _WinAPI_GetModuleHandle($SMODULENAME)
  2545.     Local $SMODULENAMETYPE = "wstr"
  2546.     If $SMODULENAME = "" Then
  2547.         $SMODULENAME = 0
  2548.         $SMODULENAMETYPE = "ptr"
  2549.     EndIf
  2550.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GetModuleHandleW", $SMODULENAMETYPE, $SMODULENAME)
  2551.     If @error Then Return SetError(@error, @extended, 0)
  2552.     Return $ARESULT[0]
  2553. EndFunc
  2554. Func _WinAPI_GetMousePos($FTOCLIENT = False, $HWND = 0)
  2555.     Local $IMODE = Opt("MouseCoordMode", 1)
  2556.     Local $APOS = MouseGetPos()
  2557.     Opt("MouseCoordMode", $IMODE)
  2558.     Local $TPOINT = DllStructCreate($TAGPOINT)
  2559.     DllStructSetData($TPOINT, "X", $APOS[0])
  2560.     DllStructSetData($TPOINT, "Y", $APOS[1])
  2561.     If $FTOCLIENT Then
  2562.         _WinAPI_ScreenToClient($HWND, $TPOINT)
  2563.         If @error Then Return SetError(@error, @extended, 0)
  2564.     EndIf
  2565.     Return $TPOINT
  2566. EndFunc
  2567. Func _WinAPI_GetMousePosX($FTOCLIENT = False, $HWND = 0)
  2568.     Local $TPOINT = _WinAPI_GetMousePos($FTOCLIENT, $HWND)
  2569.     If @error Then Return SetError(@error, @extended, 0)
  2570.     Return DllStructGetData($TPOINT, "X")
  2571. EndFunc
  2572. Func _WinAPI_GetMousePosY($FTOCLIENT = False, $HWND = 0)
  2573.     Local $TPOINT = _WinAPI_GetMousePos($FTOCLIENT, $HWND)
  2574.     If @error Then Return SetError(@error, @extended, 0)
  2575.     Return DllStructGetData($TPOINT, "Y")
  2576. EndFunc
  2577. Func _WinAPI_GetObject($HOBJECT, $ISIZE, $POBJECT)
  2578.     Local $ARESULT = DllCall("gdi32.dll", "int", "GetObject", "handle", $HOBJECT, "int", $ISIZE, "ptr", $POBJECT)
  2579.     If @error Then Return SetError(@error, @extended, 0)
  2580.     Return $ARESULT[0]
  2581. EndFunc
  2582. Func _WinAPI_GetOpenFileName($STITLE = "", $SFILTER = "All files (*.*)", $SINITALDIR = ".", $SDEFAULTFILE = "", $SDEFAULTEXT = "", $IFILTERINDEX = 1, $IFLAGS = 0, $IFLAGSEX = 0, $HWNDOWNER = 0)
  2583.     Local $IPATHLEN = 4096
  2584.     Local $INULLS = 0
  2585.     Local $TOFN = DllStructCreate($TAGOPENFILENAME)
  2586.     Local $AFILES[1] = [0]
  2587.     Local $IFLAG = $IFLAGS
  2588.     Local $ASFLINES = StringSplit($SFILTER, "|")
  2589.     Local $ASFILTER[$ASFLINES[0] * 2 + 1]
  2590.     Local $ISTART, $IFINAL, $STFILTER
  2591.     $ASFILTER[0] = $ASFLINES[0] * 2
  2592.     For $I = 1 To $ASFLINES[0]
  2593.         $ISTART = StringInStr($ASFLINES[$I], "(", 0, 1)
  2594.         $IFINAL = StringInStr($ASFLINES[$I], ")", 0, -1)
  2595.         $ASFILTER[$I * 2 - 1] = StringStripWS(StringLeft($ASFLINES[$I], $ISTART - 1), 3)
  2596.         $ASFILTER[$I * 2] = StringStripWS(StringTrimRight(StringTrimLeft($ASFLINES[$I], $ISTART), StringLen($ASFLINES[$I]) - $IFINAL + 1), 3)
  2597.         $STFILTER &= "wchar[" & StringLen($ASFILTER[$I * 2 - 1]) + 1 & "];wchar[" & StringLen($ASFILTER[$I * 2]) + 1 & "];"
  2598.     Next
  2599.     Local $TTITLE = DllStructCreate("wchar Title[" & StringLen($STITLE) + 1 & "]")
  2600.     Local $TINITIALDIR = DllStructCreate("wchar InitDir[" & StringLen($SINITALDIR) + 1 & "]")
  2601.     Local $TFILTER = DllStructCreate($STFILTER & "wchar")
  2602.     Local $TPATH = DllStructCreate("wchar Path[" & $IPATHLEN & "]")
  2603.     Local $TEXTN = DllStructCreate("wchar Extension[" & StringLen($SDEFAULTEXT) + 1 & "]")
  2604.     For $I = 1 To $ASFILTER[0]
  2605.         DllStructSetData($TFILTER, $I, $ASFILTER[$I])
  2606.     Next
  2607.     DllStructSetData($TTITLE, "Title", $STITLE)
  2608.     DllStructSetData($TINITIALDIR, "InitDir", $SINITALDIR)
  2609.     DllStructSetData($TPATH, "Path", $SDEFAULTFILE)
  2610.     DllStructSetData($TEXTN, "Extension", $SDEFAULTEXT)
  2611.     DllStructSetData($TOFN, "StructSize", DllStructGetSize($TOFN))
  2612.     DllStructSetData($TOFN, "hwndOwner", $HWNDOWNER)
  2613.     DllStructSetData($TOFN, "lpstrFilter", DllStructGetPtr($TFILTER))
  2614.     DllStructSetData($TOFN, "nFilterIndex", $IFILTERINDEX)
  2615.     DllStructSetData($TOFN, "lpstrFile", DllStructGetPtr($TPATH))
  2616.     DllStructSetData($TOFN, "nMaxFile", $IPATHLEN)
  2617.     DllStructSetData($TOFN, "lpstrInitialDir", DllStructGetPtr($TINITIALDIR))
  2618.     DllStructSetData($TOFN, "lpstrTitle", DllStructGetPtr($TTITLE))
  2619.     DllStructSetData($TOFN, "Flags", $IFLAG)
  2620.     DllStructSetData($TOFN, "lpstrDefExt", DllStructGetPtr($TEXTN))
  2621.     DllStructSetData($TOFN, "FlagsEx", $IFLAGSEX)
  2622.     DllCall("comdlg32.dll", "bool", "GetOpenFileNameW", "ptr", DllStructGetPtr($TOFN))
  2623.     If @error Then Return SetError(@error, @extended, $AFILES)
  2624.     If BitAND($IFLAGS, $OFN_ALLOWMULTISELECT) = $OFN_ALLOWMULTISELECT And BitAND($IFLAGS, $OFN_EXPLORER) = $OFN_EXPLORER Then
  2625.         For $X = 1 To $IPATHLEN
  2626.             If DllStructGetData($TPATH, "Path", $X) = Chr(0) Then
  2627.                 DllStructSetData($TPATH, "Path", "|", $X)
  2628.                 $INULLS += 1
  2629.             Else
  2630.                 $INULLS = 0
  2631.             EndIf
  2632.             If $INULLS = 2 Then ExitLoop
  2633.         Next
  2634.         DllStructSetData($TPATH, "Path", Chr(0), $X - 1)
  2635.         $AFILES = StringSplit(DllStructGetData($TPATH, "Path"), "|")
  2636.         If $AFILES[0] = 1 Then Return __WINAPI_PARSEFILEDIALOGPATH(DllStructGetData($TPATH, "Path"))
  2637.         Return StringSplit(DllStructGetData($TPATH, "Path"), "|")
  2638.     ElseIf BitAND($IFLAGS, $OFN_ALLOWMULTISELECT) = $OFN_ALLOWMULTISELECT Then
  2639.         $AFILES = StringSplit(DllStructGetData($TPATH, "Path"), " ")
  2640.         If $AFILES[0] = 1 Then Return __WINAPI_PARSEFILEDIALOGPATH(DllStructGetData($TPATH, "Path"))
  2641.         Return StringSplit(StringReplace(DllStructGetData($TPATH, "Path"), " ", "|"), "|")
  2642.     Else
  2643.         Return __WINAPI_PARSEFILEDIALOGPATH(DllStructGetData($TPATH, "Path"))
  2644.     EndIf
  2645. EndFunc
  2646. Func _WinAPI_GetOverlappedResult($HFILE, $POVERLAPPED, ByRef $IBYTES, $FWAIT = False)
  2647.     Local $ARESULT = DllCall("kernel32.dll", "bool", "GetOverlappedResult", "handle", $HFILE, "ptr", $POVERLAPPED, "dword*", 0, "bool", $FWAIT)
  2648.     If @error Then Return SetError(@error, @extended, False)
  2649.     $IBYTES = $ARESULT[3]
  2650.     Return $ARESULT[0]
  2651. EndFunc
  2652. Func _WinAPI_GetParent($HWND)
  2653.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $HWND)
  2654.     If @error Then Return SetError(@error, @extended, 0)
  2655.     Return $ARESULT[0]
  2656. EndFunc
  2657. Func _WinAPI_GetProcessAffinityMask($HPROCESS)
  2658.     Local $ARESULT = DllCall("kernel32.dll", "bool", "GetProcessAffinityMask", "handle", $HPROCESS, "dword_ptr*", 0, "dword_ptr*", 0)
  2659.     If @error Then Return SetError(@error, @extended, 0)
  2660.     Local $AMASK[3]
  2661.     $AMASK[0] = True
  2662.     $AMASK[1] = $ARESULT[2]
  2663.     $AMASK[2] = $ARESULT[3]
  2664.     Return $AMASK
  2665. EndFunc
  2666. Func _WinAPI_GetSaveFileName($STITLE = "", $SFILTER = "All files (*.*)", $SINITALDIR = ".", $SDEFAULTFILE = "", $SDEFAULTEXT = "", $IFILTERINDEX = 1, $IFLAGS = 0, $IFLAGSEX = 0, $HWNDOWNER = 0)
  2667.     Local $IPATHLEN = 4096
  2668.     Local $TOFN = DllStructCreate($TAGOPENFILENAME)
  2669.     Local $AFILES[1] = [0]
  2670.     Local $IFLAG = $IFLAGS
  2671.     Local $ASFLINES = StringSplit($SFILTER, "|")
  2672.     Local $ASFILTER[$ASFLINES[0] * 2 + 1]
  2673.     Local $ISTART, $IFINAL, $STFILTER
  2674.     $ASFILTER[0] = $ASFLINES[0] * 2
  2675.     For $I = 1 To $ASFLINES[0]
  2676.         $ISTART = StringInStr($ASFLINES[$I], "(", 0, 1)
  2677.         $IFINAL = StringInStr($ASFLINES[$I], ")", 0, -1)
  2678.         $ASFILTER[$I * 2 - 1] = StringStripWS(StringLeft($ASFLINES[$I], $ISTART - 1), 3)
  2679.         $ASFILTER[$I * 2] = StringStripWS(StringTrimRight(StringTrimLeft($ASFLINES[$I], $ISTART), StringLen($ASFLINES[$I]) - $IFINAL + 1), 3)
  2680.         $STFILTER &= "wchar[" & StringLen($ASFILTER[$I * 2 - 1]) + 1 & "];wchar[" & StringLen($ASFILTER[$I * 2]) + 1 & "];"
  2681.     Next
  2682.     Local $TTITLE = DllStructCreate("wchar Title[" & StringLen($STITLE) + 1 & "]")
  2683.     Local $TINITIALDIR = DllStructCreate("wchar InitDir[" & StringLen($SINITALDIR) + 1 & "]")
  2684.     Local $TFILTER = DllStructCreate($STFILTER & "wchar")
  2685.     Local $TPATH = DllStructCreate("wchar Path[" & $IPATHLEN & "]")
  2686.     Local $TEXTN = DllStructCreate("wchar Extension[" & StringLen($SDEFAULTEXT) + 1 & "]")
  2687.     For $I = 1 To $ASFILTER[0]
  2688.         DllStructSetData($TFILTER, $I, $ASFILTER[$I])
  2689.     Next
  2690.     DllStructSetData($TTITLE, "Title", $STITLE)
  2691.     DllStructSetData($TINITIALDIR, "InitDir", $SINITALDIR)
  2692.     DllStructSetData($TPATH, "Path", $SDEFAULTFILE)
  2693.     DllStructSetData($TEXTN, "Extension", $SDEFAULTEXT)
  2694.     DllStructSetData($TOFN, "StructSize", DllStructGetSize($TOFN))
  2695.     DllStructSetData($TOFN, "hwndOwner", $HWNDOWNER)
  2696.     DllStructSetData($TOFN, "lpstrFilter", DllStructGetPtr($TFILTER))
  2697.     DllStructSetData($TOFN, "nFilterIndex", $IFILTERINDEX)
  2698.     DllStructSetData($TOFN, "lpstrFile", DllStructGetPtr($TPATH))
  2699.     DllStructSetData($TOFN, "nMaxFile", $IPATHLEN)
  2700.     DllStructSetData($TOFN, "lpstrInitialDir", DllStructGetPtr($TINITIALDIR))
  2701.     DllStructSetData($TOFN, "lpstrTitle", DllStructGetPtr($TTITLE))
  2702.     DllStructSetData($TOFN, "Flags", $IFLAG)
  2703.     DllStructSetData($TOFN, "lpstrDefExt", DllStructGetPtr($TEXTN))
  2704.     DllStructSetData($TOFN, "FlagsEx", $IFLAGSEX)
  2705.     DllCall("comdlg32.dll", "bool", "GetSaveFileNameW", "ptr", DllStructGetPtr($TOFN))
  2706.     If @error Then Return SetError(@error, @extended, $AFILES)
  2707.     Return __WINAPI_PARSEFILEDIALOGPATH(DllStructGetData($TPATH, "Path"))
  2708. EndFunc
  2709. Func _WinAPI_GetStockObject($IOBJECT)
  2710.     Local $ARESULT = DllCall("gdi32.dll", "handle", "GetStockObject", "int", $IOBJECT)
  2711.     If @error Then Return SetError(@error, @extended, 0)
  2712.     Return $ARESULT[0]
  2713. EndFunc
  2714. Func _WinAPI_GetStdHandle($ISTDHANDLE)
  2715.     If $ISTDHANDLE < 0 Or $ISTDHANDLE > 2 Then Return SetError(2, 0, -1)
  2716.     Local Const $AHANDLE[3] = [-10, -11, -12]
  2717.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GetStdHandle", "dword", $AHANDLE[$ISTDHANDLE])
  2718.     If @error Then Return SetError(@error, @extended, -1)
  2719.     Return $ARESULT[0]
  2720. EndFunc
  2721. Func _WinAPI_GetSysColor($IINDEX)
  2722.     Local $ARESULT = DllCall("user32.dll", "dword", "GetSysColor", "int", $IINDEX)
  2723.     If @error Then Return SetError(@error, @extended, 0)
  2724.     Return $ARESULT[0]
  2725. EndFunc
  2726. Func _WinAPI_GetSysColorBrush($IINDEX)
  2727.     Local $ARESULT = DllCall("user32.dll", "handle", "GetSysColorBrush", "int", $IINDEX)
  2728.     If @error Then Return SetError(@error, @extended, 0)
  2729.     Return $ARESULT[0]
  2730. EndFunc
  2731. Func _WinAPI_GetSystemMetrics($IINDEX)
  2732.     Local $ARESULT = DllCall("user32.dll", "int", "GetSystemMetrics", "int", $IINDEX)
  2733.     If @error Then Return SetError(@error, @extended, 0)
  2734.     Return $ARESULT[0]
  2735. EndFunc
  2736. Func _WinAPI_GetTextExtentPoint32($HDC, $STEXT)
  2737.     Local $TSIZE = DllStructCreate($TAGSIZE)
  2738.     Local $ISIZE = StringLen($STEXT)
  2739.     DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $HDC, "wstr", $STEXT, "int", $ISIZE, "ptr", DllStructGetPtr($TSIZE))
  2740.     If @error Then Return SetError(@error, @extended, 0)
  2741.     Return $TSIZE
  2742. EndFunc
  2743. Func _WinAPI_GetWindow($HWND, $ICMD)
  2744.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetWindow", "hwnd", $HWND, "uint", $ICMD)
  2745.     If @error Then Return SetError(@error, @extended, 0)
  2746.     Return $ARESULT[0]
  2747. EndFunc
  2748. Func _WinAPI_GetWindowDC($HWND)
  2749.     Local $ARESULT = DllCall("user32.dll", "handle", "GetWindowDC", "hwnd", $HWND)
  2750.     If @error Then Return SetError(@error, @extended, 0)
  2751.     Return $ARESULT[0]
  2752. EndFunc
  2753. Func _WinAPI_GetWindowHeight($HWND)
  2754.     Local $TRECT = _WinAPI_GetWindowRect($HWND)
  2755.     If @error Then Return SetError(@error, @extended, 0)
  2756.     Return DllStructGetData($TRECT, "Bottom") - DllStructGetData($TRECT, "Top")
  2757. EndFunc
  2758. Func _WinAPI_GetWindowLong($HWND, $IINDEX)
  2759.     Local $SFUNCNAME = "GetWindowLongW"
  2760.     If @AutoItX64 Then $SFUNCNAME = "GetWindowLongPtrW"
  2761.     Local $ARESULT = DllCall("user32.dll", "long_ptr", $SFUNCNAME, "hwnd", $HWND, "int", $IINDEX)
  2762.     If @error Then Return SetError(@error, @extended, 0)
  2763.     Return $ARESULT[0]
  2764. EndFunc
  2765. Func _WINAPI_GETWINDOWPLACEMENT($HWND)
  2766.     Local $TWINDOWPLACEMENT = DllStructCreate($TAGWINDOWPLACEMENT)
  2767.     DllStructSetData($TWINDOWPLACEMENT, "length", DllStructGetSize($TWINDOWPLACEMENT))
  2768.     Local $PWINDOWPLACEMENT = DllStructGetPtr($TWINDOWPLACEMENT)
  2769.     DllCall("user32.dll", "bool", "GetWindowPlacement", "hwnd", $HWND, "ptr", $PWINDOWPLACEMENT)
  2770.     If @error Then Return SetError(@error, @extended, 0)
  2771.     Return $TWINDOWPLACEMENT
  2772. EndFunc
  2773. Func _WinAPI_GetWindowRect($HWND)
  2774.     Local $TRECT = DllStructCreate($TAGRECT)
  2775.     DllCall("user32.dll", "bool", "GetWindowRect", "hwnd", $HWND, "ptr", DllStructGetPtr($TRECT))
  2776.     If @error Then Return SetError(@error, @extended, 0)
  2777.     Return $TRECT
  2778. EndFunc
  2779. Func _WINAPI_GETWINDOWRGN($HWND, $HRGN)
  2780.     Local $ARESULT = DllCall("user32.dll", "int", "GetWindowRgn", "hwnd", $HWND, "handle", $HRGN)
  2781.     If @error Then Return SetError(@error, @extended, 0)
  2782.     Return $ARESULT[0]
  2783. EndFunc
  2784. Func _WinAPI_GetWindowText($HWND)
  2785.     Local $ARESULT = DllCall("user32.dll", "int", "GetWindowTextW", "hwnd", $HWND, "wstr", "", "int", 4096)
  2786.     If @error Then Return SetError(@error, @extended, "")
  2787.     Return SetExtended($ARESULT[0], $ARESULT[2])
  2788. EndFunc
  2789. Func _WinAPI_GetWindowThreadProcessId($HWND, ByRef $IPID)
  2790.     Local $ARESULT = DllCall("user32.dll", "dword", "GetWindowThreadProcessId", "hwnd", $HWND, "dword*", 0)
  2791.     If @error Then Return SetError(@error, @extended, 0)
  2792.     $IPID = $ARESULT[2]
  2793.     Return $ARESULT[0]
  2794. EndFunc
  2795. Func _WinAPI_GetWindowWidth($HWND)
  2796.     Local $TRECT = _WinAPI_GetWindowRect($HWND)
  2797.     If @error Then Return SetError(@error, @extended, 0)
  2798.     Return DllStructGetData($TRECT, "Right") - DllStructGetData($TRECT, "Left")
  2799. EndFunc
  2800. Func _WinAPI_GetXYFromPoint(ByRef $TPOINT, ByRef $IX, ByRef $IY)
  2801.     $IX = DllStructGetData($TPOINT, "X")
  2802.     $IY = DllStructGetData($TPOINT, "Y")
  2803. EndFunc
  2804. Func _WINAPI_GLOBALMEMORYSTATUS()
  2805.     Local $TMEM = DllStructCreate($TAGMEMORYSTATUSEX)
  2806.     Local $PMEM = DllStructGetPtr($TMEM)
  2807.     Local $IMEM = DllStructGetSize($TMEM)
  2808.     DllStructSetData($TMEM, 1, $IMEM)
  2809.     DllCall("kernel32.dll", "none", "GlobalMemoryStatusEx", "ptr", $PMEM)
  2810.     If @error Then Return SetError(@error, @extended, 0)
  2811.     Local $AMEM[7]
  2812.     $AMEM[0] = DllStructGetData($TMEM, 2)
  2813.     $AMEM[1] = DllStructGetData($TMEM, 3)
  2814.     $AMEM[2] = DllStructGetData($TMEM, 4)
  2815.     $AMEM[3] = DllStructGetData($TMEM, 5)
  2816.     $AMEM[4] = DllStructGetData($TMEM, 6)
  2817.     $AMEM[5] = DllStructGetData($TMEM, 7)
  2818.     $AMEM[6] = DllStructGetData($TMEM, 8)
  2819.     Return $AMEM
  2820. EndFunc
  2821. Func _WinAPI_GUIDFromString($SGUID)
  2822.     Local $TGUID = DllStructCreate($TAGGUID)
  2823.     _WinAPI_GUIDFromStringEx($SGUID, DllStructGetPtr($TGUID))
  2824.     If @error Then Return SetError(@error, @extended, 0)
  2825.     Return $TGUID
  2826. EndFunc
  2827. Func _WinAPI_GUIDFromStringEx($SGUID, $PGUID)
  2828.     Local $ARESULT = DllCall("ole32.dll", "long", "CLSIDFromString", "wstr", $SGUID, "ptr", $PGUID)
  2829.     If @error Then Return SetError(@error, @extended, False)
  2830.     Return $ARESULT[0]
  2831. EndFunc
  2832. Func _WinAPI_HiWord($ILONG)
  2833.     Return BitShift($ILONG, 16)
  2834. EndFunc
  2835. Func _WinAPI_InProcess($HWND, ByRef $HLASTWND)
  2836.     If $HWND = $HLASTWND Then Return True
  2837.     For $II = $__GAINPROCESS_WINAPI[0][0] To 1 Step -1
  2838.         If $HWND = $__GAINPROCESS_WINAPI[$II][0] Then
  2839.             If $__GAINPROCESS_WINAPI[$II][1] Then
  2840.                 $HLASTWND = $HWND
  2841.                 Return True
  2842.             Else
  2843.                 Return False
  2844.             EndIf
  2845.         EndIf
  2846.     Next
  2847.     Local $IPROCESSID
  2848.     _WinAPI_GetWindowThreadProcessId($HWND, $IPROCESSID)
  2849.     Local $ICOUNT = $__GAINPROCESS_WINAPI[0][0] + 1
  2850.     If $ICOUNT >= 64 Then $ICOUNT = 1
  2851.     $__GAINPROCESS_WINAPI[0][0] = $ICOUNT
  2852.     $__GAINPROCESS_WINAPI[$ICOUNT][0] = $HWND
  2853.     $__GAINPROCESS_WINAPI[$ICOUNT][1] = ($IPROCESSID = @AutoItPID)
  2854.     Return $__GAINPROCESS_WINAPI[$ICOUNT][1]
  2855. EndFunc
  2856. Func _WinAPI_IntToFloat($IINT)
  2857.     Local $TINT = DllStructCreate("int")
  2858.     Local $TFLOAT = DllStructCreate("float", DllStructGetPtr($TINT))
  2859.     DllStructSetData($TINT, 1, $IINT)
  2860.     Return DllStructGetData($TFLOAT, 1)
  2861. EndFunc
  2862. Func _WinAPI_IsClassName($HWND, $SCLASSNAME)
  2863.     Local $SSEPARATOR = Opt("GUIDataSeparatorChar")
  2864.     Local $ACLASSNAME = StringSplit($SCLASSNAME, $SSEPARATOR)
  2865.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  2866.     Local $SCLASSCHECK = _WinAPI_GetClassName($HWND)
  2867.     For $X = 1 To UBound($ACLASSNAME) - 1
  2868.         If StringUpper(StringMid($SCLASSCHECK, 1, StringLen($ACLASSNAME[$X]))) = StringUpper($ACLASSNAME[$X]) Then Return True
  2869.     Next
  2870.     Return False
  2871. EndFunc
  2872. Func _WinAPI_IsWindow($HWND)
  2873.     Local $ARESULT = DllCall("user32.dll", "bool", "IsWindow", "hwnd", $HWND)
  2874.     If @error Then Return SetError(@error, @extended, 0)
  2875.     Return $ARESULT[0]
  2876. EndFunc
  2877. Func _WinAPI_IsWindowVisible($HWND)
  2878.     Local $ARESULT = DllCall("user32.dll", "bool", "IsWindowVisible", "hwnd", $HWND)
  2879.     If @error Then Return SetError(@error, @extended, 0)
  2880.     Return $ARESULT[0]
  2881. EndFunc
  2882. Func _WinAPI_InvalidateRect($HWND, $TRECT = 0, $FERASE = True)
  2883.     Local $PRECT = 0
  2884.     If IsDllStruct($TRECT) Then $PRECT = DllStructGetPtr($TRECT)
  2885.     Local $ARESULT = DllCall("user32.dll", "bool", "InvalidateRect", "hwnd", $HWND, "ptr", $PRECT, "bool", $FERASE)
  2886.     If @error Then Return SetError(@error, @extended, False)
  2887.     Return $ARESULT[0]
  2888. EndFunc
  2889. Func _WINAPI_LINETO($HDC, $IX, $IY)
  2890.     Local $ARESULT = DllCall("gdi32.dll", "bool", "LineTo", "handle", $HDC, "int", $IX, "int", $IY)
  2891.     If @error Then Return SetError(@error, @extended, False)
  2892.     Return $ARESULT[0]
  2893. EndFunc
  2894. Func _WinAPI_LoadBitmap($HINSTANCE, $SBITMAP)
  2895.     Local $SBITMAPTYPE = "int"
  2896.     If IsString($SBITMAP) Then $SBITMAPTYPE = "wstr"
  2897.     Local $ARESULT = DllCall("user32.dll", "handle", "LoadBitmapW", "handle", $HINSTANCE, $SBITMAPTYPE, $SBITMAP)
  2898.     If @error Then Return SetError(@error, @extended, 0)
  2899.     Return $ARESULT[0]
  2900. EndFunc
  2901. Func _WinAPI_LoadImage($HINSTANCE, $SIMAGE, $ITYPE, $IXDESIRED, $IYDESIRED, $ILOAD)
  2902.     Local $ARESULT, $SIMAGETYPE = "int"
  2903.     If IsString($SIMAGE) Then $SIMAGETYPE = "wstr"
  2904.     $ARESULT = DllCall("user32.dll", "handle", "LoadImageW", "handle", $HINSTANCE, $SIMAGETYPE, $SIMAGE, "uint", $ITYPE, "int", $IXDESIRED, "int", $IYDESIRED, "uint", $ILOAD)
  2905.     If @error Then Return SetError(@error, @extended, 0)
  2906.     Return $ARESULT[0]
  2907. EndFunc
  2908. Func _WinAPI_LoadLibrary($SFILENAME)
  2909.     Local $ARESULT = DllCall("kernel32.dll", "handle", "LoadLibraryW", "wstr", $SFILENAME)
  2910.     If @error Then Return SetError(@error, @extended, 0)
  2911.     Return $ARESULT[0]
  2912. EndFunc
  2913. Func _WinAPI_LoadLibraryEx($SFILENAME, $IFLAGS = 0)
  2914.     Local $ARESULT = DllCall("kernel32.dll", "handle", "LoadLibraryExW", "wstr", $SFILENAME, "ptr", 0, "dword", $IFLAGS)
  2915.     If @error Then Return SetError(@error, @extended, 0)
  2916.     Return $ARESULT[0]
  2917. EndFunc
  2918. Func _WinAPI_LoadShell32Icon($IICONID)
  2919.     Local $TICONS = DllStructCreate("ptr Data")
  2920.     Local $PICONS = DllStructGetPtr($TICONS)
  2921.     Local $IICONS = _WinAPI_ExtractIconEx("shell32.dll", $IICONID, 0, $PICONS, 1)
  2922.     If @error Then Return SetError(@error, @extended, 0)
  2923.     If $IICONS <= 0 Then Return SetError(1, 0, 0)
  2924.     Return DllStructGetData($TICONS, "Data")
  2925. EndFunc
  2926. Func _WinAPI_LoadString($HINSTANCE, $ISTRINGID)
  2927.     Local $ARESULT = DllCall("user32.dll", "int", "LoadStringW", "handle", $HINSTANCE, "uint", $ISTRINGID, "wstr", "", "int", 4096)
  2928.     If @error Then Return SetError(@error, @extended, "")
  2929.     Return SetExtended($ARESULT[0], $ARESULT[3])
  2930. EndFunc
  2931. Func _WinAPI_LocalFree($HMEM)
  2932.     Local $ARESULT = DllCall("kernel32.dll", "handle", "LocalFree", "handle", $HMEM)
  2933.     If @error Then Return SetError(@error, @extended, False)
  2934.     Return $ARESULT[0]
  2935. EndFunc
  2936. Func _WinAPI_LoWord($ILONG)
  2937.     Return BitAND($ILONG, 65535)
  2938. EndFunc
  2939. Func _WinAPI_MAKELANGID($LGIDPRIMARY, $LGIDSUB)
  2940.     Return BitOR(BitShift($LGIDSUB, -10), $LGIDPRIMARY)
  2941. EndFunc
  2942. Func _WinAPI_MAKELCID($LGID, $SRTID)
  2943.     Return BitOR(BitShift($SRTID, -16), $LGID)
  2944. EndFunc
  2945. Func _WinAPI_MakeLong($ILO, $IHI)
  2946.     Return BitOR(BitShift($IHI, -16), BitAND($ILO, 65535))
  2947. EndFunc
  2948. Func _WINAPI_MAKEQWORD($LODWORD, $HIDWORD)
  2949.     Local $TINT64 = DllStructCreate("uint64")
  2950.     Local $TDWORDS = DllStructCreate("dword;dword", DllStructGetPtr($TINT64))
  2951.     DllStructSetData($TDWORDS, 1, $LODWORD)
  2952.     DllStructSetData($TDWORDS, 2, $HIDWORD)
  2953.     Return DllStructGetData($TINT64, 1)
  2954. EndFunc
  2955. Func _WinAPI_MessageBeep($ITYPE = 1)
  2956.     Local $ISOUND
  2957.     Switch $ITYPE
  2958.         Case 1
  2959.             $ISOUND = 0
  2960.         Case 2
  2961.             $ISOUND = 16
  2962.         Case 3
  2963.             $ISOUND = 32
  2964.         Case 4
  2965.             $ISOUND = 48
  2966.         Case 5
  2967.             $ISOUND = 64
  2968.         Case Else
  2969.             $ISOUND = -1
  2970.     EndSwitch
  2971.     Local $ARESULT = DllCall("user32.dll", "bool", "MessageBeep", "uint", $ISOUND)
  2972.     If @error Then Return SetError(@error, @extended, False)
  2973.     Return $ARESULT[0]
  2974. EndFunc
  2975. Func _WinAPI_MsgBox($IFLAGS, $STITLE, $STEXT)
  2976.     BlockInput(0)
  2977.     MsgBox($IFLAGS, $STITLE, $STEXT & "      ")
  2978. EndFunc
  2979. Func _WinAPI_Mouse_Event($IFLAGS, $IX = 0, $IY = 0, $IDATA = 0, $IEXTRAINFO = 0)
  2980.     DllCall("user32.dll", "none", "mouse_event", "dword", $IFLAGS, "dword", $IX, "dword", $IY, "dword", $IDATA, "ulong_ptr", $IEXTRAINFO)
  2981.     If @error Then Return SetError(@error, @extended)
  2982. EndFunc
  2983. Func _WINAPI_MOVETO($HDC, $IX, $IY)
  2984.     Local $ARESULT = DllCall("gdi32.dll", "bool", "MoveToEx", "handle", $HDC, "int", $IX, "int", $IY, "ptr", 0)
  2985.     If @error Then Return SetError(@error, @extended, False)
  2986.     Return $ARESULT[0]
  2987. EndFunc
  2988. Func _WinAPI_MoveWindow($HWND, $IX, $IY, $IWIDTH, $IHEIGHT, $FREPAINT = True)
  2989.     Local $ARESULT = DllCall("user32.dll", "bool", "MoveWindow", "hwnd", $HWND, "int", $IX, "int", $IY, "int", $IWIDTH, "int", $IHEIGHT, "bool", $FREPAINT)
  2990.     If @error Then Return SetError(@error, @extended, False)
  2991.     Return $ARESULT[0]
  2992. EndFunc
  2993. Func _WinAPI_MulDiv($INUMBER, $INUMERATOR, $IDENOMINATOR)
  2994.     Local $ARESULT = DllCall("kernel32.dll", "int", "MulDiv", "int", $INUMBER, "int", $INUMERATOR, "int", $IDENOMINATOR)
  2995.     If @error Then Return SetError(@error, @extended, -1)
  2996.     Return $ARESULT[0]
  2997. EndFunc
  2998. Func _WinAPI_MultiByteToWideChar($STEXT, $ICODEPAGE = 0, $IFLAGS = 0, $BRETSTRING = False)
  2999.     Local $STEXTTYPE = "ptr", $PTEXT = $STEXT
  3000.     If IsDllStruct($STEXT) Then
  3001.         $PTEXT = DllStructGetPtr($STEXT)
  3002.     Else
  3003.         If Not IsPtr($STEXT) Then $STEXTTYPE = "STR"
  3004.     EndIf
  3005.     Local $ARESULT = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $ICODEPAGE, "dword", $IFLAGS, $STEXTTYPE, $PTEXT, "int", -1, "ptr", 0, "int", 0)
  3006.     If @error Then Return SetError(@error, @extended, 0)
  3007.     Local $IOUT = $ARESULT[0]
  3008.     Local $TOUT = DllStructCreate("wchar[" & $IOUT & "]")
  3009.     Local $POUT = DllStructGetPtr($TOUT)
  3010.     $ARESULT = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $ICODEPAGE, "dword", $IFLAGS, $STEXTTYPE, $PTEXT, "int", -1, "ptr", $POUT, "int", $IOUT)
  3011.     If @error Then Return SetError(@error, @extended, 0)
  3012.     If $BRETSTRING Then Return DllStructGetData($TOUT, 1)
  3013.     Return $TOUT
  3014. EndFunc
  3015. Func _WinAPI_MultiByteToWideCharEx($STEXT, $PTEXT, $ICODEPAGE = 0, $IFLAGS = 0)
  3016.     Local $ARESULT = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $ICODEPAGE, "dword", $IFLAGS, "STR", $STEXT, "int", -1, "ptr", $PTEXT, "int", (StringLen($STEXT) + 1) * 2)
  3017.     If @error Then Return SetError(@error, @extended, False)
  3018.     Return $ARESULT[0]
  3019. EndFunc
  3020. Func _WinAPI_OpenProcess($IACCESS, $FINHERIT, $IPROCESSID, $FDEBUGPRIV = False)
  3021.     Local $ARESULT = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $IACCESS, "bool", $FINHERIT, "dword", $IPROCESSID)
  3022.     If @error Then Return SetError(@error, @extended, 0)
  3023.     If $ARESULT[0] Then Return $ARESULT[0]
  3024.     If Not $FDEBUGPRIV Then Return 0
  3025.     Local $HTOKEN = _Security__OpenThreadTokenEx(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
  3026.     If @error Then Return SetError(@error, @extended, 0)
  3027.     _Security__SetPrivilege($HTOKEN, "SeDebugPrivilege", True)
  3028.     Local $IERROR = @error
  3029.     Local $ILASTERROR = @extended
  3030.     Local $IRET = 0
  3031.     If Not @error Then
  3032.         $ARESULT = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $IACCESS, "bool", $FINHERIT, "dword", $IPROCESSID)
  3033.         $IERROR = @error
  3034.         $ILASTERROR = @extended
  3035.         If $ARESULT[0] Then $IRET = $ARESULT[0]
  3036.         _Security__SetPrivilege($HTOKEN, "SeDebugPrivilege", False)
  3037.         If @error Then
  3038.             $IERROR = @error
  3039.             $ILASTERROR = @extended
  3040.         EndIf
  3041.     EndIf
  3042.     _WinAPI_CloseHandle($HTOKEN)
  3043.     Return SetError($IERROR, $ILASTERROR, $IRET)
  3044. EndFunc
  3045. Func __WINAPI_PARSEFILEDIALOGPATH($SPATH)
  3046.     Local $AFILES[3]
  3047.     $AFILES[0] = 2
  3048.     Local $STEMP = StringMid($SPATH, 1, StringInStr($SPATH, "\", 0, -1) - 1)
  3049.     $AFILES[1] = $STEMP
  3050.     $AFILES[2] = StringMid($SPATH, StringInStr($SPATH, "\", 0, -1) + 1)
  3051.     Return $AFILES
  3052. EndFunc
  3053. Func _WINAPI_PATHFINDONPATH(Const $SZFILE, $AEXTRAPATHS = "", Const $SZPATHDELIMITER = @LF)
  3054.     Local $IEXTRACOUNT = 0
  3055.     If IsString($AEXTRAPATHS) Then
  3056.         If StringLen($AEXTRAPATHS) Then
  3057.             $AEXTRAPATHS = StringSplit($AEXTRAPATHS, $SZPATHDELIMITER, 1 + 2)
  3058.             $IEXTRACOUNT = UBound($AEXTRAPATHS, 1)
  3059.         EndIf
  3060.     ElseIf IsArray($AEXTRAPATHS) Then
  3061.         $IEXTRACOUNT = UBound($AEXTRAPATHS)
  3062.     EndIf
  3063.     Local $TPATHS, $TPATHPTRS
  3064.     If $IEXTRACOUNT Then
  3065.         Local $SZSTRUCT = ""
  3066.         For $PATH In $AEXTRAPATHS
  3067.             $SZSTRUCT &= "wchar[" & StringLen($PATH) + 1 & "];"
  3068.         Next
  3069.         $TPATHS = DllStructCreate($SZSTRUCT)
  3070.         $TPATHPTRS = DllStructCreate("ptr[" & $IEXTRACOUNT + 1 & "]")
  3071.         For $I = 1 To $IEXTRACOUNT
  3072.             DllStructSetData($TPATHS, $I, $AEXTRAPATHS[$I - 1])
  3073.             DllStructSetData($TPATHPTRS, 1, DllStructGetPtr($TPATHS, $I), $I)
  3074.         Next
  3075.         DllStructSetData($TPATHPTRS, 1, Ptr(0), $IEXTRACOUNT + 1)
  3076.     EndIf
  3077.     Local $ARESULT = DllCall("shlwapi.dll", "bool", "PathFindOnPathW", "wstr", $SZFILE, "ptr", DllStructGetPtr($TPATHPTRS))
  3078.     If @error Then Return SetError(@error, @extended, False)
  3079.     If $ARESULT[0] = 0 Then Return SetError(1, 0, $SZFILE)
  3080.     Return $ARESULT[1]
  3081. EndFunc
  3082. Func _WinAPI_PointFromRect(ByRef $TRECT, $FCENTER = True)
  3083.     Local $IX1 = DllStructGetData($TRECT, "Left")
  3084.     Local $IY1 = DllStructGetData($TRECT, "Top")
  3085.     Local $IX2 = DllStructGetData($TRECT, "Right")
  3086.     Local $IY2 = DllStructGetData($TRECT, "Bottom")
  3087.     If $FCENTER Then
  3088.         $IX1 = $IX1 + (($IX2 - $IX1) / 2)
  3089.         $IY1 = $IY1 + (($IY2 - $IY1) / 2)
  3090.     EndIf
  3091.     Local $TPOINT = DllStructCreate($TAGPOINT)
  3092.     DllStructSetData($TPOINT, "X", $IX1)
  3093.     DllStructSetData($TPOINT, "Y", $IY1)
  3094.     Return $TPOINT
  3095. EndFunc
  3096. Func _WinAPI_PostMessage($HWND, $IMSG, $IWPARAM, $ILPARAM)
  3097.     Local $ARESULT = DllCall("user32.dll", "bool", "PostMessage", "hwnd", $HWND, "uint", $IMSG, "wparam", $IWPARAM, "lparam", $ILPARAM)
  3098.     If @error Then Return SetError(@error, @extended, False)
  3099.     Return $ARESULT[0]
  3100. EndFunc
  3101. Func _WinAPI_PrimaryLangId($LGID)
  3102.     Return BitAND($LGID, 1023)
  3103. EndFunc
  3104. Func _WinAPI_PtInRect(ByRef $TRECT, ByRef $TPOINT)
  3105.     Local $IX = DllStructGetData($TPOINT, "X")
  3106.     Local $IY = DllStructGetData($TPOINT, "Y")
  3107.     Local $ARESULT = DllCall("user32.dll", "bool", "PtInRect", "ptr", DllStructGetPtr($TRECT), "long", $IX, "long", $IY)
  3108.     If @error Then Return SetError(@error, @extended, False)
  3109.     Return $ARESULT[0]
  3110. EndFunc
  3111. Func _WinAPI_ReadFile($HFILE, $PBUFFER, $ITOREAD, ByRef $IREAD, $POVERLAPPED = 0)
  3112.     Local $ARESULT = DllCall("kernel32.dll", "bool", "ReadFile", "handle", $HFILE, "ptr", $PBUFFER, "dword", $ITOREAD, "dword*", 0, "ptr", $POVERLAPPED)
  3113.     If @error Then Return SetError(@error, @extended, False)
  3114.     $IREAD = $ARESULT[4]
  3115.     Return $ARESULT[0]
  3116. EndFunc
  3117. Func _WinAPI_ReadProcessMemory($HPROCESS, $PBASEADDRESS, $PBUFFER, $ISIZE, ByRef $IREAD)
  3118.     Local $ARESULT = DllCall("kernel32.dll", "bool", "ReadProcessMemory", "handle", $HPROCESS, "ptr", $PBASEADDRESS, "ptr", $PBUFFER, "ulong_ptr", $ISIZE, "ulong_ptr*", 0)
  3119.     If @error Then Return SetError(@error, @extended, False)
  3120.     $IREAD = $ARESULT[5]
  3121.     Return $ARESULT[0]
  3122. EndFunc
  3123. Func _WinAPI_RectIsEmpty(ByRef $TRECT)
  3124.     Return (DllStructGetData($TRECT, "Left") = 0) And (DllStructGetData($TRECT, "Top") = 0) And (DllStructGetData($TRECT, "Right") = 0) And (DllStructGetData($TRECT, "Bottom") = 0)
  3125. EndFunc
  3126. Func _WinAPI_RedrawWindow($HWND, $TRECT = 0, $HREGION = 0, $IFLAGS = 5)
  3127.     Local $PRECT = 0
  3128.     If $TRECT <> 0 Then $PRECT = DllStructGetPtr($TRECT)
  3129.     Local $ARESULT = DllCall("user32.dll", "bool", "RedrawWindow", "hwnd", $HWND, "ptr", $PRECT, "handle", $HREGION, "uint", $IFLAGS)
  3130.     If @error Then Return SetError(@error, @extended, False)
  3131.     Return $ARESULT[0]
  3132. EndFunc
  3133. Func _WinAPI_RegisterWindowMessage($SMESSAGE)
  3134.     Local $ARESULT = DllCall("user32.dll", "uint", "RegisterWindowMessageW", "wstr", $SMESSAGE)
  3135.     If @error Then Return SetError(@error, @extended, 0)
  3136.     Return $ARESULT[0]
  3137. EndFunc
  3138. Func _WinAPI_ReleaseCapture()
  3139.     Local $ARESULT = DllCall("user32.dll", "bool", "ReleaseCapture")
  3140.     If @error Then Return SetError(@error, @extended, False)
  3141.     Return $ARESULT[0]
  3142. EndFunc
  3143. Func _WinAPI_ReleaseDC($HWND, $HDC)
  3144.     Local $ARESULT = DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $HWND, "handle", $HDC)
  3145.     If @error Then Return SetError(@error, @extended, False)
  3146.     Return $ARESULT[0]
  3147. EndFunc
  3148. Func _WinAPI_ScreenToClient($HWND, ByRef $TPOINT)
  3149.     Local $ARESULT = DllCall("user32.dll", "bool", "ScreenToClient", "hwnd", $HWND, "ptr", DllStructGetPtr($TPOINT))
  3150.     If @error Then Return SetError(@error, @extended, False)
  3151.     Return $ARESULT[0]
  3152. EndFunc
  3153. Func _WinAPI_SelectObject($HDC, $HGDIOBJ)
  3154.     Local $ARESULT = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $HDC, "handle", $HGDIOBJ)
  3155.     If @error Then Return SetError(@error, @extended, False)
  3156.     Return $ARESULT[0]
  3157. EndFunc
  3158. Func _WinAPI_SetBkColor($HDC, $ICOLOR)
  3159.     Local $ARESULT = DllCall("gdi32.dll", "INT", "SetBkColor", "handle", $HDC, "dword", $ICOLOR)
  3160.     If @error Then Return SetError(@error, @extended, -1)
  3161.     Return $ARESULT[0]
  3162. EndFunc
  3163. Func _WINAPI_SETBKMODE($HDC, $IBKMODE)
  3164.     Local $ARESULT = DllCall("gdi32.dll", "int", "SetBkMode", "handle", $HDC, "int", $IBKMODE)
  3165.     If @error Then Return SetError(@error, @extended, 0)
  3166.     Return $ARESULT[0]
  3167. EndFunc
  3168. Func _WinAPI_SetCapture($HWND)
  3169.     Local $ARESULT = DllCall("user32.dll", "hwnd", "SetCapture", "hwnd", $HWND)
  3170.     If @error Then Return SetError(@error, @extended, 0)
  3171.     Return $ARESULT[0]
  3172. EndFunc
  3173. Func _WinAPI_SetCursor($HCURSOR)
  3174.     Local $ARESULT = DllCall("user32.dll", "handle", "SetCursor", "handle", $HCURSOR)
  3175.     If @error Then Return SetError(@error, @extended, 0)
  3176.     Return $ARESULT[0]
  3177. EndFunc
  3178. Func _WinAPI_SetDefaultPrinter($SPRINTER)
  3179.     Local $ARESULT = DllCall("winspool.drv", "bool", "SetDefaultPrinterW", "wstr", $SPRINTER)
  3180.     If @error Then Return SetError(@error, @extended, False)
  3181.     Return $ARESULT[0]
  3182. EndFunc
  3183. Func _WinAPI_SetDIBits($HDC, $HBMP, $ISTARTSCAN, $ISCANLINES, $PBITS, $PBMI, $ICOLORUSE = 0)
  3184.     Local $ARESULT = DllCall("gdi32.dll", "int", "SetDIBits", "handle", $HDC, "handle", $HBMP, "uint", $ISTARTSCAN, "uint", $ISCANLINES, "ptr", $PBITS, "ptr", $PBMI, "uint", $ICOLORUSE)
  3185.     If @error Then Return SetError(@error, @extended, False)
  3186.     Return $ARESULT[0]
  3187. EndFunc
  3188. Func _WINAPI_SETENDOFFILE($HFILE)
  3189.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SetEndOfFile", "handle", $HFILE)
  3190.     If @error Then Return SetError(@error, @extended, False)
  3191.     Return $ARESULT[0]
  3192. EndFunc
  3193. Func _WinAPI_SetEvent($HEVENT)
  3194.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SetEvent", "handle", $HEVENT)
  3195.     If @error Then Return SetError(@error, @extended, False)
  3196.     Return $ARESULT[0]
  3197. EndFunc
  3198. Func _WINAPI_SETFILEPOINTER($HFILE, $IPOS, $IMETHOD = 0)
  3199.     Local $ARESULT = DllCall("kernel32.dll", "INT", "SetFilePointer", "handle", $HFILE, "long", $IPOS, "ptr", 0, "long", $IMETHOD)
  3200.     If @error Then Return SetError(@error, @extended, -1)
  3201.     Return $ARESULT[0]
  3202. EndFunc
  3203. Func _WinAPI_SetFocus($HWND)
  3204.     Local $ARESULT = DllCall("user32.dll", "hwnd", "SetFocus", "hwnd", $HWND)
  3205.     If @error Then Return SetError(@error, @extended, 0)
  3206.     Return $ARESULT[0]
  3207. EndFunc
  3208. Func _WinAPI_SetFont($HWND, $HFONT, $FREDRAW = True)
  3209.     _SendMessage($HWND, $__WINAPICONSTANT_WM_SETFONT, $HFONT, $FREDRAW, 0, "hwnd")
  3210. EndFunc
  3211. Func _WinAPI_SetHandleInformation($HOBJECT, $IMASK, $IFLAGS)
  3212.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SetHandleInformation", "handle", $HOBJECT, "dword", $IMASK, "dword", $IFLAGS)
  3213.     If @error Then Return SetError(@error, @extended, False)
  3214.     Return $ARESULT[0]
  3215. EndFunc
  3216. Func _WINAPI_SETLAYEREDWINDOWATTRIBUTES($HWND, $I_TRANSCOLOR, $TRANSPARENCY = 255, $DWFLAGS = 3, $ISCOLORREF = False)
  3217.     If $DWFLAGS = Default Or $DWFLAGS = "" Or $DWFLAGS < 0 Then $DWFLAGS = 3
  3218.     If Not $ISCOLORREF Then
  3219.         $I_TRANSCOLOR = Hex(String($I_TRANSCOLOR), 6)
  3220.         $I_TRANSCOLOR = Execute("0x00" & StringMid($I_TRANSCOLOR, 5, 2) & StringMid($I_TRANSCOLOR, 3, 2) & StringMid($I_TRANSCOLOR, 1, 2))
  3221.     EndIf
  3222.     Local $ARESULT = DllCall("user32.dll", "bool", "SetLayeredWindowAttributes", "hwnd", $HWND, "dword", $I_TRANSCOLOR, "byte", $TRANSPARENCY, "dword", $DWFLAGS)
  3223.     If @error Then Return SetError(@error, @extended, False)
  3224.     Return $ARESULT[0]
  3225. EndFunc
  3226. Func _WinAPI_SetParent($HWNDCHILD, $HWNDPARENT)
  3227.     Local $ARESULT = DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $HWNDCHILD, "hwnd", $HWNDPARENT)
  3228.     If @error Then Return SetError(@error, @extended, 0)
  3229.     Return $ARESULT[0]
  3230. EndFunc
  3231. Func _WinAPI_SetProcessAffinityMask($HPROCESS, $IMASK)
  3232.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SetProcessAffinityMask", "handle", $HPROCESS, "ulong_ptr", $IMASK)
  3233.     If @error Then Return SetError(@error, @extended, False)
  3234.     Return $ARESULT[0]
  3235. EndFunc
  3236. Func _WinAPI_SetSysColors($VELEMENTS, $VCOLORS)
  3237.     Local $ISEARRAY = IsArray($VELEMENTS), $ISCARRAY = IsArray($VCOLORS)
  3238.     Local $IELEMENTNUM
  3239.     If Not $ISCARRAY And Not $ISEARRAY Then
  3240.         $IELEMENTNUM = 1
  3241.     ElseIf $ISCARRAY Or $ISEARRAY Then
  3242.         If Not $ISCARRAY Or Not $ISEARRAY Then Return SetError(-1, -1, False)
  3243.         If UBound($VELEMENTS) <> UBound($VCOLORS) Then Return SetError(-1, -1, False)
  3244.         $IELEMENTNUM = UBound($VELEMENTS)
  3245.     EndIf
  3246.     Local $TELEMENTS = DllStructCreate("int Element[" & $IELEMENTNUM & "]")
  3247.     Local $TCOLORS = DllStructCreate("dword NewColor[" & $IELEMENTNUM & "]")
  3248.     Local $PELEMENTS = DllStructGetPtr($TELEMENTS)
  3249.     Local $PCOLORS = DllStructGetPtr($TCOLORS)
  3250.     If Not $ISEARRAY Then
  3251.         DllStructSetData($TELEMENTS, "Element", $VELEMENTS, 1)
  3252.     Else
  3253.         For $X = 0 To $IELEMENTNUM - 1
  3254.             DllStructSetData($TELEMENTS, "Element", $VELEMENTS[$X], $X + 1)
  3255.         Next
  3256.     EndIf
  3257.     If Not $ISCARRAY Then
  3258.         DllStructSetData($TCOLORS, "NewColor", $VCOLORS, 1)
  3259.     Else
  3260.         For $X = 0 To $IELEMENTNUM - 1
  3261.             DllStructSetData($TCOLORS, "NewColor", $VCOLORS[$X], $X + 1)
  3262.         Next
  3263.     EndIf
  3264.     Local $ARESULT = DllCall("user32.dll", "bool", "SetSysColors", "int", $IELEMENTNUM, "ptr", $PELEMENTS, "ptr", $PCOLORS)
  3265.     If @error Then Return SetError(@error, @extended, False)
  3266.     Return $ARESULT[0]
  3267. EndFunc
  3268. Func _WinAPI_SetTextColor($HDC, $ICOLOR)
  3269.     Local $ARESULT = DllCall("gdi32.dll", "INT", "SetTextColor", "handle", $HDC, "dword", $ICOLOR)
  3270.     If @error Then Return SetError(@error, @extended, -1)
  3271.     Return $ARESULT[0]
  3272. EndFunc
  3273. Func _WinAPI_SetWindowLong($HWND, $IINDEX, $IVALUE)
  3274.     _WinAPI_SetLastError(0)
  3275.     Local $SFUNCNAME = "SetWindowLongW"
  3276.     If @AutoItX64 Then $SFUNCNAME = "SetWindowLongPtrW"
  3277.     Local $ARESULT = DllCall("user32.dll", "long_ptr", $SFUNCNAME, "hwnd", $HWND, "int", $IINDEX, "long_ptr", $IVALUE)
  3278.     If @error Then Return SetError(@error, @extended, 0)
  3279.     Return $ARESULT[0]
  3280. EndFunc
  3281. Func _WINAPI_SETWINDOWPLACEMENT($HWND, $PWINDOWPLACEMENT)
  3282.     Local $ARESULT = DllCall("user32.dll", "bool", "SetWindowPlacement", "hwnd", $HWND, "ptr", $PWINDOWPLACEMENT)
  3283.     If @error Then Return SetError(@error, @extended, False)
  3284.     Return $ARESULT[0]
  3285. EndFunc
  3286. Func _WinAPI_SetWindowPos($HWND, $HAFTER, $IX, $IY, $ICX, $ICY, $IFLAGS)
  3287.     Local $ARESULT = DllCall("user32.dll", "bool", "SetWindowPos", "hwnd", $HWND, "hwnd", $HAFTER, "int", $IX, "int", $IY, "int", $ICX, "int", $ICY, "uint", $IFLAGS)
  3288.     If @error Then Return SetError(@error, @extended, False)
  3289.     Return $ARESULT[0]
  3290. EndFunc
  3291. Func _WINAPI_SETWINDOWRGN($HWND, $HRGN, $BREDRAW = True)
  3292.     Local $ARESULT = DllCall("user32.dll", "int", "SetWindowRgn", "hwnd", $HWND, "handle", $HRGN, "bool", $BREDRAW)
  3293.     If @error Then Return SetError(@error, @extended, False)
  3294.     Return $ARESULT[0]
  3295. EndFunc
  3296. Func _WinAPI_SetWindowsHookEx($IDHOOK, $LPFN, $HMOD, $DWTHREADID = 0)
  3297.     Local $ARESULT = DllCall("user32.dll", "handle", "SetWindowsHookEx", "int", $IDHOOK, "ptr", $LPFN, "handle", $HMOD, "dword", $DWTHREADID)
  3298.     If @error Then Return SetError(@error, @extended, 0)
  3299.     Return $ARESULT[0]
  3300. EndFunc
  3301. Func _WinAPI_SetWindowText($HWND, $STEXT)
  3302.     Local $ARESULT = DllCall("user32.dll", "bool", "SetWindowTextW", "hwnd", $HWND, "wstr", $STEXT)
  3303.     If @error Then Return SetError(@error, @extended, False)
  3304.     Return $ARESULT[0]
  3305. EndFunc
  3306. Func _WinAPI_ShowCursor($FSHOW)
  3307.     Local $ARESULT = DllCall("user32.dll", "int", "ShowCursor", "bool", $FSHOW)
  3308.     If @error Then Return SetError(@error, @extended, 0)
  3309.     Return $ARESULT[0]
  3310. EndFunc
  3311. Func _WinAPI_ShowError($STEXT, $FEXIT = True)
  3312.     _WinAPI_MsgBox(266256, "Error", $STEXT)
  3313.     If $FEXIT Then Exit
  3314. EndFunc
  3315. Func _WinAPI_ShowMsg($STEXT)
  3316.     _WinAPI_MsgBox(64 + 4096, "Information", $STEXT)
  3317. EndFunc
  3318. Func _WinAPI_ShowWindow($HWND, $ICMDSHOW = 5)
  3319.     Local $ARESULT = DllCall("user32.dll", "bool", "ShowWindow", "hwnd", $HWND, "int", $ICMDSHOW)
  3320.     If @error Then Return SetError(@error, @extended, False)
  3321.     Return $ARESULT[0]
  3322. EndFunc
  3323. Func _WinAPI_StringFromGUID($PGUID)
  3324.     Local $ARESULT = DllCall("ole32.dll", "int", "StringFromGUID2", "ptr", $PGUID, "wstr", "", "int", 40)
  3325.     If @error Then Return SetError(@error, @extended, "")
  3326.     Return SetExtended($ARESULT[0], $ARESULT[2])
  3327. EndFunc
  3328. Func _WinAPI_SubLangId($LGID)
  3329.     Return BitShift($LGID, 10)
  3330. EndFunc
  3331. Func _WinAPI_SystemParametersInfo($IACTION, $IPARAM = 0, $VPARAM = 0, $IWININI = 0)
  3332.     Local $ARESULT = DllCall("user32.dll", "bool", "SystemParametersInfoW", "uint", $IACTION, "uint", $IPARAM, "ptr", $VPARAM, "uint", $IWININI)
  3333.     If @error Then Return SetError(@error, @extended, False)
  3334.     Return $ARESULT[0]
  3335. EndFunc
  3336. Func _WinAPI_TwipsPerPixelX()
  3337.     Local $LNGDC, $TWIPSPERPIXELX
  3338.     $LNGDC = _WinAPI_GetDC(0)
  3339.     $TWIPSPERPIXELX = 1440 / _WinAPI_GetDeviceCaps($LNGDC, $__WINAPICONSTANT_LOGPIXELSX)
  3340.     _WinAPI_ReleaseDC(0, $LNGDC)
  3341.     Return $TWIPSPERPIXELX
  3342. EndFunc
  3343. Func _WinAPI_TwipsPerPixelY()
  3344.     Local $LNGDC, $TWIPSPERPIXELY
  3345.     $LNGDC = _WinAPI_GetDC(0)
  3346.     $TWIPSPERPIXELY = 1440 / _WinAPI_GetDeviceCaps($LNGDC, $__WINAPICONSTANT_LOGPIXELSY)
  3347.     _WinAPI_ReleaseDC(0, $LNGDC)
  3348.     Return $TWIPSPERPIXELY
  3349. EndFunc
  3350. Func _WinAPI_UnhookWindowsHookEx($HHK)
  3351.     Local $ARESULT = DllCall("user32.dll", "bool", "UnhookWindowsHookEx", "handle", $HHK)
  3352.     If @error Then Return SetError(@error, @extended, False)
  3353.     Return $ARESULT[0]
  3354. EndFunc
  3355. Func _WinAPI_UpdateLayeredWindow($HWND, $HDCDEST, $PPTDEST, $PSIZE, $HDCSRCE, $PPTSRCE, $IRGB, $PBLEND, $IFLAGS)
  3356.     Local $ARESULT = DllCall("user32.dll", "bool", "UpdateLayeredWindow", "hwnd", $HWND, "handle", $HDCDEST, "ptr", $PPTDEST, "ptr", $PSIZE, "handle", $HDCSRCE, "ptr", $PPTSRCE, "dword", $IRGB, "ptr", $PBLEND, "dword", $IFLAGS)
  3357.     If @error Then Return SetError(@error, @extended, False)
  3358.     Return $ARESULT[0]
  3359. EndFunc
  3360. Func _WinAPI_UpdateWindow($HWND)
  3361.     Local $ARESULT = DllCall("user32.dll", "bool", "UpdateWindow", "hwnd", $HWND)
  3362.     If @error Then Return SetError(@error, @extended, False)
  3363.     Return $ARESULT[0]
  3364. EndFunc
  3365. Func _WinAPI_WaitForInputIdle($HPROCESS, $ITIMEOUT = -1)
  3366.     Local $ARESULT = DllCall("user32.dll", "dword", "WaitForInputIdle", "handle", $HPROCESS, "dword", $ITIMEOUT)
  3367.     If @error Then Return SetError(@error, @extended, False)
  3368.     Return $ARESULT[0]
  3369. EndFunc
  3370. Func _WinAPI_WaitForMultipleObjects($ICOUNT, $PHANDLES, $FWAITALL = False, $ITIMEOUT = -1)
  3371.     Local $ARESULT = DllCall("kernel32.dll", "INT", "WaitForMultipleObjects", "dword", $ICOUNT, "ptr", $PHANDLES, "bool", $FWAITALL, "dword", $ITIMEOUT)
  3372.     If @error Then Return SetError(@error, @extended, -1)
  3373.     Return $ARESULT[0]
  3374. EndFunc
  3375. Func _WinAPI_WaitForSingleObject($HHANDLE, $ITIMEOUT = -1)
  3376.     Local $ARESULT = DllCall("kernel32.dll", "INT", "WaitForSingleObject", "handle", $HHANDLE, "dword", $ITIMEOUT)
  3377.     If @error Then Return SetError(@error, @extended, -1)
  3378.     Return $ARESULT[0]
  3379. EndFunc
  3380. Func _WinAPI_WideCharToMultiByte($PUNICODE, $ICODEPAGE = 0, $BRETSTRING = True)
  3381.     Local $SUNICODETYPE = "ptr"
  3382.     If IsDllStruct($PUNICODE) Then
  3383.         $PUNICODE = DllStructGetPtr($PUNICODE)
  3384.     Else
  3385.         If Not IsPtr($PUNICODE) Then $SUNICODETYPE = "wstr"
  3386.     EndIf
  3387.     Local $ARESULT = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", $ICODEPAGE, "dword", 0, $SUNICODETYPE, $PUNICODE, "int", -1, "ptr", 0, "int", 0, "ptr", 0, "ptr", 0)
  3388.     If @error Then Return SetError(@error, @extended, "")
  3389.     Local $TMULTIBYTE = DllStructCreate("char[" & $ARESULT[0] & "]")
  3390.     Local $PMULTIBYTE = DllStructGetPtr($TMULTIBYTE)
  3391.     $ARESULT = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", $ICODEPAGE, "dword", 0, $SUNICODETYPE, $PUNICODE, "int", -1, "ptr", $PMULTIBYTE, "int", $ARESULT[0], "ptr", 0, "ptr", 0)
  3392.     If @error Then Return SetError(@error, @extended, "")
  3393.     If $BRETSTRING Then Return DllStructGetData($TMULTIBYTE, 1)
  3394.     Return $TMULTIBYTE
  3395. EndFunc
  3396. Func _WinAPI_WindowFromPoint(ByRef $TPOINT)
  3397.     Local $TPOINTCAST = DllStructCreate("int64", DllStructGetPtr($TPOINT))
  3398.     Local $ARESULT = DllCall("user32.dll", "hwnd", "WindowFromPoint", "int64", DllStructGetData($TPOINTCAST, 1))
  3399.     If @error Then Return SetError(@error, @extended, 0)
  3400.     Return $ARESULT[0]
  3401. EndFunc
  3402. Func _WinAPI_WriteConsole($HCONSOLE, $STEXT)
  3403.     Local $ARESULT = DllCall("kernel32.dll", "bool", "WriteConsoleW", "handle", $HCONSOLE, "wstr", $STEXT, "dword", StringLen($STEXT), "dword*", 0, "ptr", 0)
  3404.     If @error Then Return SetError(@error, @extended, False)
  3405.     Return $ARESULT[0]
  3406. EndFunc
  3407. Func _WinAPI_WriteFile($HFILE, $PBUFFER, $ITOWRITE, ByRef $IWRITTEN, $POVERLAPPED = 0)
  3408.     Local $ARESULT = DllCall("kernel32.dll", "bool", "WriteFile", "handle", $HFILE, "ptr", $PBUFFER, "dword", $ITOWRITE, "dword*", 0, "ptr", $POVERLAPPED)
  3409.     If @error Then Return SetError(@error, @extended, False)
  3410.     $IWRITTEN = $ARESULT[4]
  3411.     Return $ARESULT[0]
  3412. EndFunc
  3413. Func _WinAPI_WriteProcessMemory($HPROCESS, $PBASEADDRESS, $PBUFFER, $ISIZE, ByRef $IWRITTEN, $SBUFFER = "ptr")
  3414.     Local $ARESULT = DllCall("kernel32.dll", "bool", "WriteProcessMemory", "handle", $HPROCESS, "ptr", $PBASEADDRESS, $SBUFFER, $PBUFFER, "ulong_ptr", $ISIZE, "ulong_ptr*", 0)
  3415.     If @error Then Return SetError(@error, @extended, False)
  3416.     $IWRITTEN = $ARESULT[5]
  3417.     Return $ARESULT[0]
  3418. EndFunc
  3419. Func _DateAdd($STYPE, $IVALTOADD, $SDATE)
  3420.     Local $ASTIMEPART[4]
  3421.     Local $ASDATEPART[4]
  3422.     Local $IJULIANDATE
  3423.     $STYPE = StringLeft($STYPE, 1)
  3424.     If StringInStr("D,M,Y,w,h,n,s", $STYPE) = 0 Or $STYPE = "" Then
  3425.         Return SetError(1, 0, 0)
  3426.     EndIf
  3427.     If Not StringIsInt($IVALTOADD) Then
  3428.         Return SetError(2, 0, 0)
  3429.     EndIf
  3430.     If Not _DateIsValid($SDATE) Then
  3431.         Return SetError(3, 0, 0)
  3432.     EndIf
  3433.     _DateTimeSplit($SDATE, $ASDATEPART, $ASTIMEPART)
  3434.     If $STYPE = "d" Or $STYPE = "w" Then
  3435.         If $STYPE = "w" Then $IVALTOADD = $IVALTOADD * 7
  3436.         $IJULIANDATE = _DateToDayValue($ASDATEPART[1], $ASDATEPART[2], $ASDATEPART[3]) + $IVALTOADD
  3437.         _DayValueToDate($IJULIANDATE, $ASDATEPART[1], $ASDATEPART[2], $ASDATEPART[3])
  3438.     EndIf
  3439.     If $STYPE = "m" Then
  3440.         $ASDATEPART[2] = $ASDATEPART[2] + $IVALTOADD
  3441.         While $ASDATEPART[2] > 12
  3442.             $ASDATEPART[2] = $ASDATEPART[2] - 12
  3443.             $ASDATEPART[1] = $ASDATEPART[1] + 1
  3444.         WEnd
  3445.         While $ASDATEPART[2] < 1
  3446.             $ASDATEPART[2] = $ASDATEPART[2] + 12
  3447.             $ASDATEPART[1] = $ASDATEPART[1] - 1
  3448.         WEnd
  3449.     EndIf
  3450.     If $STYPE = "y" Then
  3451.         $ASDATEPART[1] = $ASDATEPART[1] + $IVALTOADD
  3452.     EndIf
  3453.     If $STYPE = "h" Or $STYPE = "n" Or $STYPE = "s" Then
  3454.         Local $ITIMEVAL = _TimeToTicks($ASTIMEPART[1], $ASTIMEPART[2], $ASTIMEPART[3]) / 1000
  3455.         If $STYPE = "h" Then $ITIMEVAL = $ITIMEVAL + $IVALTOADD * 3600
  3456.         If $STYPE = "n" Then $ITIMEVAL = $ITIMEVAL + $IVALTOADD * 60
  3457.         If $STYPE = "s" Then $ITIMEVAL = $ITIMEVAL + $IVALTOADD
  3458.         Local $DAY2ADD = Int($ITIMEVAL / (24 * 60 * 60))
  3459.         $ITIMEVAL = $ITIMEVAL - $DAY2ADD * 24 * 60 * 60
  3460.         If $ITIMEVAL < 0 Then
  3461.             $DAY2ADD = $DAY2ADD - 1
  3462.             $ITIMEVAL = $ITIMEVAL + 24 * 60 * 60
  3463.         EndIf
  3464.         $IJULIANDATE = _DateToDayValue($ASDATEPART[1], $ASDATEPART[2], $ASDATEPART[3]) + $DAY2ADD
  3465.         _DayValueToDate($IJULIANDATE, $ASDATEPART[1], $ASDATEPART[2], $ASDATEPART[3])
  3466.         _TicksToTime($ITIMEVAL * 1000, $ASTIMEPART[1], $ASTIMEPART[2], $ASTIMEPART[3])
  3467.     EndIf
  3468.     Local $INUMDAYS = _DAYSINMONTH($ASDATEPART[1])
  3469.     If $INUMDAYS[$ASDATEPART[2]] < $ASDATEPART[3] Then $ASDATEPART[3] = $INUMDAYS[$ASDATEPART[2]]
  3470.     $SDATE = $ASDATEPART[1] & "/" & StringRight("0" & $ASDATEPART[2], 2) & "/" & StringRight("0" & $ASDATEPART[3], 2)
  3471.     If $ASTIMEPART[0] > 0 Then
  3472.         If $ASTIMEPART[0] > 2 Then
  3473.             $SDATE = $SDATE & " " & StringRight("0" & $ASTIMEPART[1], 2) & ":" & StringRight("0" & $ASTIMEPART[2], 2) & ":" & StringRight("0" & $ASTIMEPART[3], 2)
  3474.         Else
  3475.             $SDATE = $SDATE & " " & StringRight("0" & $ASTIMEPART[1], 2) & ":" & StringRight("0" & $ASTIMEPART[2], 2)
  3476.         EndIf
  3477.     EndIf
  3478.     Return ($SDATE)
  3479. EndFunc
  3480. Func _DateDayOfWeek($IDAYNUM, $ISHORT = 0)
  3481.     Local Const $ADAYOFWEEK[8] = ["", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
  3482.     Select
  3483.         Case Not StringIsInt($IDAYNUM) Or Not StringIsInt($ISHORT)
  3484.             Return SetError(1, 0, "")
  3485.         Case $IDAYNUM < 1 Or $IDAYNUM > 7
  3486.             Return SetError(1, 0, "")
  3487.         Case Else
  3488.             Select
  3489.                 Case $ISHORT = 0
  3490.                     Return $ADAYOFWEEK[$IDAYNUM]
  3491.                 Case $ISHORT = 1
  3492.                     Return StringLeft($ADAYOFWEEK[$IDAYNUM], 3)
  3493.                 Case Else
  3494.                     Return SetError(1, 0, "")
  3495.             EndSelect
  3496.     EndSelect
  3497. EndFunc
  3498. Func _DateDaysInMonth($IYEAR, $IMONTHNUM)
  3499.     If __DATEISMONTH($IMONTHNUM) And __DATEISYEAR($IYEAR) Then
  3500.         Local $AINUMDAYS = _DAYSINMONTH($IYEAR)
  3501.         Return $AINUMDAYS[$IMONTHNUM]
  3502.     EndIf
  3503.     Return SetError(1, 0, 0)
  3504. EndFunc
  3505. Func _DateDiff($STYPE, $SSTARTDATE, $SENDDATE)
  3506.     $STYPE = StringLeft($STYPE, 1)
  3507.     If StringInStr("d,m,y,w,h,n,s", $STYPE) = 0 Or $STYPE = "" Then
  3508.         Return SetError(1, 0, 0)
  3509.     EndIf
  3510.     If Not _DateIsValid($SSTARTDATE) Then
  3511.         Return SetError(2, 0, 0)
  3512.     EndIf
  3513.     If Not _DateIsValid($SENDDATE) Then
  3514.         Return SetError(3, 0, 0)
  3515.     EndIf
  3516.     Local $ASSTARTDATEPART[4], $ASSTARTTIMEPART[4], $ASENDDATEPART[4], $ASENDTIMEPART[4]
  3517.     _DateTimeSplit($SSTARTDATE, $ASSTARTDATEPART, $ASSTARTTIMEPART)
  3518.     _DateTimeSplit($SENDDATE, $ASENDDATEPART, $ASENDTIMEPART)
  3519.     Local $ADAYSDIFF = _DateToDayValue($ASENDDATEPART[1], $ASENDDATEPART[2], $ASENDDATEPART[3]) - _DateToDayValue($ASSTARTDATEPART[1], $ASSTARTDATEPART[2], $ASSTARTDATEPART[3])
  3520.     Local $ITIMEDIFF, $IYEARDIFF, $ISTARTTIMEINSECS, $IENDTIMEINSECS
  3521.     If $ASSTARTTIMEPART[0] > 1 And $ASENDTIMEPART[0] > 1 Then
  3522.         $ISTARTTIMEINSECS = $ASSTARTTIMEPART[1] * 3600 + $ASSTARTTIMEPART[2] * 60 + $ASSTARTTIMEPART[3]
  3523.         $IENDTIMEINSECS = $ASENDTIMEPART[1] * 3600 + $ASENDTIMEPART[2] * 60 + $ASENDTIMEPART[3]
  3524.         $ITIMEDIFF = $IENDTIMEINSECS - $ISTARTTIMEINSECS
  3525.         If $ITIMEDIFF < 0 Then
  3526.             $ADAYSDIFF = $ADAYSDIFF - 1
  3527.             $ITIMEDIFF = $ITIMEDIFF + 24 * 60 * 60
  3528.         EndIf
  3529.     Else
  3530.         $ITIMEDIFF = 0
  3531.     EndIf
  3532.     Select
  3533.         Case $STYPE = "d"
  3534.             Return ($ADAYSDIFF)
  3535.         Case $STYPE = "m"
  3536.             $IYEARDIFF = $ASENDDATEPART[1] - $ASSTARTDATEPART[1]
  3537.             Local $IMONTHDIFF = $ASENDDATEPART[2] - $ASSTARTDATEPART[2] + $IYEARDIFF * 12
  3538.             If $ASENDDATEPART[3] < $ASSTARTDATEPART[3] Then $IMONTHDIFF = $IMONTHDIFF - 1
  3539.             $ISTARTTIMEINSECS = $ASSTARTTIMEPART[1] * 3600 + $ASSTARTTIMEPART[2] * 60 + $ASSTARTTIMEPART[3]
  3540.             $IENDTIMEINSECS = $ASENDTIMEPART[1] * 3600 + $ASENDTIMEPART[2] * 60 + $ASENDTIMEPART[3]
  3541.             $ITIMEDIFF = $IENDTIMEINSECS - $ISTARTTIMEINSECS
  3542.             If $ASENDDATEPART[3] = $ASSTARTDATEPART[3] And $ITIMEDIFF < 0 Then $IMONTHDIFF = $IMONTHDIFF - 1
  3543.             Return ($IMONTHDIFF)
  3544.         Case $STYPE = "y"
  3545.             $IYEARDIFF = $ASENDDATEPART[1] - $ASSTARTDATEPART[1]
  3546.             If $ASENDDATEPART[2] < $ASSTARTDATEPART[2] Then $IYEARDIFF = $IYEARDIFF - 1
  3547.             If $ASENDDATEPART[2] = $ASSTARTDATEPART[2] And $ASENDDATEPART[3] < $ASSTARTDATEPART[3] Then $IYEARDIFF = $IYEARDIFF - 1
  3548.             $ISTARTTIMEINSECS = $ASSTARTTIMEPART[1] * 3600 + $ASSTARTTIMEPART[2] * 60 + $ASSTARTTIMEPART[3]
  3549.             $IENDTIMEINSECS = $ASENDTIMEPART[1] * 3600 + $ASENDTIMEPART[2] * 60 + $ASENDTIMEPART[3]
  3550.             $ITIMEDIFF = $IENDTIMEINSECS - $ISTARTTIMEINSECS
  3551.             If $ASENDDATEPART[2] = $ASSTARTDATEPART[2] And $ASENDDATEPART[3] = $ASSTARTDATEPART[3] And $ITIMEDIFF < 0 Then $IYEARDIFF = $IYEARDIFF - 1
  3552.             Return ($IYEARDIFF)
  3553.         Case $STYPE = "w"
  3554.             Return (Int($ADAYSDIFF / 7))
  3555.         Case $STYPE = "h"
  3556.             Return ($ADAYSDIFF * 24 + Int($ITIMEDIFF / 3600))
  3557.         Case $STYPE = "n"
  3558.             Return ($ADAYSDIFF * 24 * 60 + Int($ITIMEDIFF / 60))
  3559.         Case $STYPE = "s"
  3560.             Return ($ADAYSDIFF * 24 * 60 * 60 + $ITIMEDIFF)
  3561.     EndSelect
  3562. EndFunc
  3563. Func _DateIsLeapYear($IYEAR)
  3564.     If StringIsInt($IYEAR) Then
  3565.         Select
  3566.             Case Mod($IYEAR, 4) = 0 And Mod($IYEAR, 100) <> 0
  3567.                 Return 1
  3568.             Case Mod($IYEAR, 400) = 0
  3569.                 Return 1
  3570.             Case Else
  3571.                 Return 0
  3572.         EndSelect
  3573.     EndIf
  3574.     Return SetError(1, 0, 0)
  3575. EndFunc
  3576. Func __DATEISMONTH($INUMBER)
  3577.     If StringIsInt($INUMBER) Then
  3578.         If $INUMBER >= 1 And $INUMBER <= 12 Then
  3579.             Return 1
  3580.         Else
  3581.             Return 0
  3582.         EndIf
  3583.     EndIf
  3584.     Return 0
  3585. EndFunc
  3586. Func _DateIsValid($SDATE)
  3587.     Local $ASDATEPART[4], $ASTIMEPART[4]
  3588.     Local $SDATETIME = StringSplit($SDATE, " T")
  3589.     If $SDATETIME[0] > 0 Then $ASDATEPART = StringSplit($SDATETIME[1], "/-.")
  3590.     If UBound($ASDATEPART) <> 4 Then Return (0)
  3591.     If $ASDATEPART[0] <> 3 Then Return (0)
  3592.     If Not StringIsInt($ASDATEPART[1]) Then Return (0)
  3593.     If Not StringIsInt($ASDATEPART[2]) Then Return (0)
  3594.     If Not StringIsInt($ASDATEPART[3]) Then Return (0)
  3595.     $ASDATEPART[1] = Number($ASDATEPART[1])
  3596.     $ASDATEPART[2] = Number($ASDATEPART[2])
  3597.     $ASDATEPART[3] = Number($ASDATEPART[3])
  3598.     Local $INUMDAYS = _DAYSINMONTH($ASDATEPART[1])
  3599.     If $ASDATEPART[1] < 1000 Or $ASDATEPART[1] > 2999 Then Return (0)
  3600.     If $ASDATEPART[2] < 1 Or $ASDATEPART[2] > 12 Then Return (0)
  3601.     If $ASDATEPART[3] < 1 Or $ASDATEPART[3] > $INUMDAYS[$ASDATEPART[2]] Then Return (0)
  3602.     If $SDATETIME[0] > 1 Then
  3603.         $ASTIMEPART = StringSplit($SDATETIME[2], ":")
  3604.         If UBound($ASTIMEPART) < 4 Then ReDim $ASTIMEPART[4]
  3605.     Else
  3606.         Dim $ASTIMEPART[4]
  3607.     EndIf
  3608.     If $ASTIMEPART[0] < 1 Then Return (1)
  3609.     If $ASTIMEPART[0] < 2 Then Return (0)
  3610.     If $ASTIMEPART[0] = 2 Then $ASTIMEPART[3] = "00"
  3611.     If Not StringIsInt($ASTIMEPART[1]) Then Return (0)
  3612.     If Not StringIsInt($ASTIMEPART[2]) Then Return (0)
  3613.     If Not StringIsInt($ASTIMEPART[3]) Then Return (0)
  3614.     $ASTIMEPART[1] = Number($ASTIMEPART[1])
  3615.     $ASTIMEPART[2] = Number($ASTIMEPART[2])
  3616.     $ASTIMEPART[3] = Number($ASTIMEPART[3])
  3617.     If $ASTIMEPART[1] < 0 Or $ASTIMEPART[1] > 23 Then Return (0)
  3618.     If $ASTIMEPART[2] < 0 Or $ASTIMEPART[2] > 59 Then Return (0)
  3619.     If $ASTIMEPART[3] < 0 Or $ASTIMEPART[3] > 59 Then Return (0)
  3620.     Return 1
  3621. EndFunc
  3622. Func __DATEISYEAR($INUMBER)
  3623.     If StringIsInt($INUMBER) Then
  3624.         If StringLen($INUMBER) = 4 Then
  3625.             Return 1
  3626.         Else
  3627.             Return 0
  3628.         EndIf
  3629.     EndIf
  3630.     Return 0
  3631. EndFunc
  3632. Func _DATELASTWEEKDAYNUM($IWEEKDAYNUM)
  3633.     Select
  3634.         Case Not StringIsInt($IWEEKDAYNUM)
  3635.             Return SetError(1, 0, 0)
  3636.         Case $IWEEKDAYNUM < 1 Or $IWEEKDAYNUM > 7
  3637.             Return SetError(1, 0, 0)
  3638.         Case Else
  3639.             Local $ILASTWEEKDAYNUM
  3640.             If $IWEEKDAYNUM = 1 Then
  3641.                 $ILASTWEEKDAYNUM = 7
  3642.             Else
  3643.                 $ILASTWEEKDAYNUM = $IWEEKDAYNUM - 1
  3644.             EndIf
  3645.             Return $ILASTWEEKDAYNUM
  3646.     EndSelect
  3647. EndFunc
  3648. Func _DATELASTMONTHNUM($IMONTHNUM)
  3649.     Select
  3650.         Case Not StringIsInt($IMONTHNUM)
  3651.             Return SetError(1, 0, 0)
  3652.         Case $IMONTHNUM < 1 Or $IMONTHNUM > 12
  3653.             Return SetError(1, 0, 0)
  3654.         Case Else
  3655.             Local $ILASTMONTHNUM
  3656.             If $IMONTHNUM = 1 Then
  3657.                 $ILASTMONTHNUM = 12
  3658.             Else
  3659.                 $ILASTMONTHNUM = $IMONTHNUM - 1
  3660.             EndIf
  3661.             $ILASTMONTHNUM = StringFormat("%02d", $ILASTMONTHNUM)
  3662.             Return $ILASTMONTHNUM
  3663.     EndSelect
  3664. EndFunc
  3665. Func _DATELASTMONTHYEAR($IMONTHNUM, $IYEAR)
  3666.     Select
  3667.         Case Not StringIsInt($IMONTHNUM) Or Not StringIsInt($IYEAR)
  3668.             Return SetError(1, 0, 0)
  3669.         Case $IMONTHNUM < 1 Or $IMONTHNUM > 12
  3670.             Return SetError(1, 0, 0)
  3671.         Case Else
  3672.             Local $ILASTYEAR
  3673.             If $IMONTHNUM = 1 Then
  3674.                 $ILASTYEAR = $IYEAR - 1
  3675.             Else
  3676.                 $ILASTYEAR = $IYEAR
  3677.             EndIf
  3678.             $ILASTYEAR = StringFormat("%04d", $ILASTYEAR)
  3679.             Return $ILASTYEAR
  3680.     EndSelect
  3681. EndFunc
  3682. Func _DATENEXTWEEKDAYNUM($IWEEKDAYNUM)
  3683.     Select
  3684.         Case Not StringIsInt($IWEEKDAYNUM)
  3685.             Return SetError(1, 0, 0)
  3686.         Case $IWEEKDAYNUM < 1 Or $IWEEKDAYNUM > 7
  3687.             Return SetError(1, 0, 0)
  3688.         Case Else
  3689.             Local $INEXTWEEKDAYNUM
  3690.             If $IWEEKDAYNUM = 7 Then
  3691.                 $INEXTWEEKDAYNUM = 1
  3692.             Else
  3693.                 $INEXTWEEKDAYNUM = $IWEEKDAYNUM + 1
  3694.             EndIf
  3695.             Return $INEXTWEEKDAYNUM
  3696.     EndSelect
  3697. EndFunc
  3698. Func _DATENEXTMONTHNUM($IMONTHNUM)
  3699.     Select
  3700.         Case Not StringIsInt($IMONTHNUM)
  3701.             Return SetError(1, 0, 0)
  3702.         Case $IMONTHNUM < 1 Or $IMONTHNUM > 12
  3703.             Return SetError(1, 0, 0)
  3704.         Case Else
  3705.             Local $INEXTMONTHNUM
  3706.             If $IMONTHNUM = 12 Then
  3707.                 $INEXTMONTHNUM = 1
  3708.             Else
  3709.                 $INEXTMONTHNUM = $IMONTHNUM + 1
  3710.             EndIf
  3711.             $INEXTMONTHNUM = StringFormat("%02d", $INEXTMONTHNUM)
  3712.             Return $INEXTMONTHNUM
  3713.     EndSelect
  3714. EndFunc
  3715. Func _DATENEXTMONTHYEAR($IMONTHNUM, $IYEAR)
  3716.     Select
  3717.         Case Not StringIsInt($IMONTHNUM) Or Not StringIsInt($IYEAR)
  3718.             Return SetError(1, 0, 0)
  3719.         Case $IMONTHNUM < 1 Or $IMONTHNUM > 12
  3720.             Return SetError(1, 0, 0)
  3721.         Case Else
  3722.             Local $INEXTYEAR
  3723.             If $IMONTHNUM = 12 Then
  3724.                 $INEXTYEAR = $IYEAR + 1
  3725.             Else
  3726.                 $INEXTYEAR = $IYEAR
  3727.             EndIf
  3728.             $INEXTYEAR = StringFormat("%04d", $INEXTYEAR)
  3729.             Return $INEXTYEAR
  3730.     EndSelect
  3731. EndFunc
  3732. Func _DateTimeFormat($SDATE, $STYPE)
  3733.     Local $ASDATEPART[4], $ASTIMEPART[4]
  3734.     Local $STEMPDATE = "", $STEMPTIME = ""
  3735.     Local $SAM, $SPM, $LNGX
  3736.     If Not _DateIsValid($SDATE) Then
  3737.         Return SetError(1, 0, "")
  3738.     EndIf
  3739.     If $STYPE < 0 Or $STYPE > 5 Or Not IsInt($STYPE) Then
  3740.         Return SetError(2, 0, "")
  3741.     EndIf
  3742.     _DateTimeSplit($SDATE, $ASDATEPART, $ASTIMEPART)
  3743.     Switch $STYPE
  3744.         Case 0
  3745.             $LNGX = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 31, "wstr", "", "int", 255)
  3746.             If Not @error And $LNGX[0] <> 0 Then
  3747.                 $STEMPDATE = $LNGX[3]
  3748.             Else
  3749.                 $STEMPDATE = "M/d/yyyy"
  3750.             EndIf
  3751.             If $ASTIMEPART[0] > 1 Then
  3752.                 $LNGX = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 4099, "wstr", "", "int", 255)
  3753.                 If Not @error And $LNGX[0] <> 0 Then
  3754.                     $STEMPTIME = $LNGX[3]
  3755.                 Else
  3756.                     $STEMPTIME = "h:mm:ss tt"
  3757.                 EndIf
  3758.             EndIf
  3759.         Case 1
  3760.             $LNGX = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 32, "wstr", "", "int", 255)
  3761.             If Not @error And $LNGX[0] <> 0 Then
  3762.                 $STEMPDATE = $LNGX[3]
  3763.             Else
  3764.                 $STEMPDATE = "dddd, MMMM dd, yyyy"
  3765.             EndIf
  3766.         Case 2
  3767.             $LNGX = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 31, "wstr", "", "int", 255)
  3768.             If Not @error And $LNGX[0] <> 0 Then
  3769.                 $STEMPDATE = $LNGX[3]
  3770.             Else
  3771.                 $STEMPDATE = "M/d/yyyy"
  3772.             EndIf
  3773.         Case 3
  3774.             If $ASTIMEPART[0] > 1 Then
  3775.                 $LNGX = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 4099, "wstr", "", "int", 255)
  3776.                 If Not @error And $LNGX[0] <> 0 Then
  3777.                     $STEMPTIME = $LNGX[3]
  3778.                 Else
  3779.                     $STEMPTIME = "h:mm:ss tt"
  3780.                 EndIf
  3781.             EndIf
  3782.         Case 4
  3783.             If $ASTIMEPART[0] > 1 Then
  3784.                 $STEMPTIME = "hh:mm"
  3785.             EndIf
  3786.         Case 5
  3787.             If $ASTIMEPART[0] > 1 Then
  3788.                 $STEMPTIME = "hh:mm:ss"
  3789.             EndIf
  3790.     EndSwitch
  3791.     If $STEMPDATE <> "" Then
  3792.         $LNGX = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 29, "wstr", "", "int", 255)
  3793.         If Not @error And $LNGX[0] <> 0 Then
  3794.             $STEMPDATE = StringReplace($STEMPDATE, "/", $LNGX[3])
  3795.         EndIf
  3796.         Local $IWDAY = _DateToDayOfWeek($ASDATEPART[1], $ASDATEPART[2], $ASDATEPART[3])
  3797.         $ASDATEPART[3] = StringRight("0" & $ASDATEPART[3], 2)
  3798.         $ASDATEPART[2] = StringRight("0" & $ASDATEPART[2], 2)
  3799.         $STEMPDATE = StringReplace($STEMPDATE, "d", "@")
  3800.         $STEMPDATE = StringReplace($STEMPDATE, "m", "#")
  3801.         $STEMPDATE = StringReplace($STEMPDATE, "y", "&")
  3802.         $STEMPDATE = StringReplace($STEMPDATE, "@@@@", _DateDayOfWeek($IWDAY, 0))
  3803.         $STEMPDATE = StringReplace($STEMPDATE, "@@@", _DateDayOfWeek($IWDAY, 1))
  3804.         $STEMPDATE = StringReplace($STEMPDATE, "@@", $ASDATEPART[3])
  3805.         $STEMPDATE = StringReplace($STEMPDATE, "@", StringReplace(StringLeft($ASDATEPART[3], 1), "0", "") & StringRight($ASDATEPART[3], 1))
  3806.         $STEMPDATE = StringReplace($STEMPDATE, "####", _DateToMonth($ASDATEPART[2], 0))
  3807.         $STEMPDATE = StringReplace($STEMPDATE, "###", _DateToMonth($ASDATEPART[2], 1))
  3808.         $STEMPDATE = StringReplace($STEMPDATE, "##", $ASDATEPART[2])
  3809.         $STEMPDATE = StringReplace($STEMPDATE, "#", StringReplace(StringLeft($ASDATEPART[2], 1), "0", "") & StringRight($ASDATEPART[2], 1))
  3810.         $STEMPDATE = StringReplace($STEMPDATE, "&&&&", $ASDATEPART[1])
  3811.         $STEMPDATE = StringReplace($STEMPDATE, "&&", StringRight($ASDATEPART[1], 2))
  3812.     EndIf
  3813.     If $STEMPTIME <> "" Then
  3814.         $LNGX = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 40, "wstr", "", "int", 255)
  3815.         If Not @error And $LNGX[0] <> 0 Then
  3816.             $SAM = $LNGX[3]
  3817.         Else
  3818.             $SAM = "AM"
  3819.         EndIf
  3820.         $LNGX = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 41, "wstr", "", "int", 255)
  3821.         If Not @error And $LNGX[0] <> 0 Then
  3822.             $SPM = $LNGX[3]
  3823.         Else
  3824.             $SPM = "PM"
  3825.         EndIf
  3826.         $LNGX = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 30, "wstr", "", "int", 255)
  3827.         If Not @error And $LNGX[0] <> 0 Then
  3828.             $STEMPTIME = StringReplace($STEMPTIME, ":", $LNGX[3])
  3829.         EndIf
  3830.         If StringInStr($STEMPTIME, "tt") Then
  3831.             If $ASTIMEPART[1] < 12 Then
  3832.                 $STEMPTIME = StringReplace($STEMPTIME, "tt", $SAM)
  3833.                 If $ASTIMEPART[1] = 0 Then $ASTIMEPART[1] = 12
  3834.             Else
  3835.                 $STEMPTIME = StringReplace($STEMPTIME, "tt", $SPM)
  3836.                 If $ASTIMEPART[1] > 12 Then $ASTIMEPART[1] = $ASTIMEPART[1] - 12
  3837.             EndIf
  3838.         EndIf
  3839.         $ASTIMEPART[1] = StringRight("0" & $ASTIMEPART[1], 2)
  3840.         $ASTIMEPART[2] = StringRight("0" & $ASTIMEPART[2], 2)
  3841.         $ASTIMEPART[3] = StringRight("0" & $ASTIMEPART[3], 2)
  3842.         $STEMPTIME = StringReplace($STEMPTIME, "hh", StringFormat("%02d", $ASTIMEPART[1]))
  3843.         $STEMPTIME = StringReplace($STEMPTIME, "h", StringReplace(StringLeft($ASTIMEPART[1], 1), "0", "") & StringRight($ASTIMEPART[1], 1))
  3844.         $STEMPTIME = StringReplace($STEMPTIME, "mm", StringFormat("%02d", $ASTIMEPART[2]))
  3845.         $STEMPTIME = StringReplace($STEMPTIME, "ss", StringFormat("%02d", $ASTIMEPART[3]))
  3846.         $STEMPDATE = StringStripWS($STEMPDATE & " " & $STEMPTIME, 3)
  3847.     EndIf
  3848.     Return $STEMPDATE
  3849. EndFunc
  3850. Func _DateTimeSplit($SDATE, ByRef $ASDATEPART, ByRef $ITIMEPART)
  3851.     Local $SDATETIME = StringSplit($SDATE, " T")
  3852.     If $SDATETIME[0] > 0 Then $ASDATEPART = StringSplit($SDATETIME[1], "/-.")
  3853.     If $SDATETIME[0] > 1 Then
  3854.         $ITIMEPART = StringSplit($SDATETIME[2], ":")
  3855.         If UBound($ITIMEPART) < 4 Then ReDim $ITIMEPART[4]
  3856.     Else
  3857.         Dim $ITIMEPART[4]
  3858.     EndIf
  3859.     If UBound($ASDATEPART) < 4 Then ReDim $ASDATEPART[4]
  3860.     For $X = 1 To 3
  3861.         If StringIsInt($ASDATEPART[$X]) Then
  3862.             $ASDATEPART[$X] = Number($ASDATEPART[$X])
  3863.         Else
  3864.             $ASDATEPART[$X] = -1
  3865.         EndIf
  3866.         If StringIsInt($ITIMEPART[$X]) Then
  3867.             $ITIMEPART[$X] = Number($ITIMEPART[$X])
  3868.         Else
  3869.             $ITIMEPART[$X] = 0
  3870.         EndIf
  3871.     Next
  3872.     Return 1
  3873. EndFunc
  3874. Func _DateToDayOfWeek($IYEAR, $IMONTH, $IDAY)
  3875.     If Not _DateIsValid($IYEAR & "/" & $IMONTH & "/" & $IDAY) Then
  3876.         Return SetError(1, 0, "")
  3877.     EndIf
  3878.     Local $I_AFACTOR = Int((14 - $IMONTH) / 12)
  3879.     Local $I_YFACTOR = $IYEAR - $I_AFACTOR
  3880.     Local $I_MFACTOR = $IMONTH + (12 * $I_AFACTOR) - 2
  3881.     Local $I_DFACTOR = Mod($IDAY + $I_YFACTOR + Int($I_YFACTOR / 4) - Int($I_YFACTOR / 100) + Int($I_YFACTOR / 400) + Int((31 * $I_MFACTOR) / 12), 7)
  3882.     Return ($I_DFACTOR + 1)
  3883. EndFunc
  3884. Func _DateToDayOfWeekISO($IYEAR, $IMONTH, $IDAY)
  3885.     Local $IDOW = _DateToDayOfWeek($IYEAR, $IMONTH, $IDAY)
  3886.     If @error Then
  3887.         Return SetError(1, 0, "")
  3888.     EndIf
  3889.     If $IDOW >= 2 Then Return $IDOW - 1
  3890.     Return 7
  3891. EndFunc
  3892. Func _DateToDayValue($IYEAR, $IMONTH, $IDAY)
  3893.     If Not _DateIsValid(StringFormat("%04d/%02d/%02d", $IYEAR, $IMONTH, $IDAY)) Then
  3894.         Return SetError(1, 0, "")
  3895.     EndIf
  3896.     If $IMONTH < 3 Then
  3897.         $IMONTH = $IMONTH + 12
  3898.         $IYEAR = $IYEAR - 1
  3899.     EndIf
  3900.     Local $I_AFACTOR = Int($IYEAR / 100)
  3901.     Local $I_BFACTOR = Int($I_AFACTOR / 4)
  3902.     Local $I_CFACTOR = 2 - $I_AFACTOR + $I_BFACTOR
  3903.     Local $I_EFACTOR = Int(1461 * ($IYEAR + 4716) / 4)
  3904.     Local $I_FFACTOR = Int(153 * ($IMONTH + 1) / 5)
  3905.     Local $IJULIANDATE = $I_CFACTOR + $IDAY + $I_EFACTOR + $I_FFACTOR - 1524.5
  3906.     Return ($IJULIANDATE)
  3907. EndFunc
  3908. Func _DateToMonth($IMONTH, $ISHORT = 0)
  3909.     Local $AMONTHNUMBER[13] = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
  3910.     Local $AMONTHNUMBERABBREV[13] = ["", "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]
  3911.     Select
  3912.         Case Not StringIsInt($IMONTH)
  3913.             Return SetError(1, 0, "")
  3914.         Case $IMONTH < 1 Or $IMONTH > 12
  3915.             Return SetError(1, 0, "")
  3916.         Case Else
  3917.             Select
  3918.                 Case $ISHORT = 0
  3919.                     Return $AMONTHNUMBER[$IMONTH]
  3920.                 Case $ISHORT = 1
  3921.                     Return $AMONTHNUMBERABBREV[$IMONTH]
  3922.                 Case Else
  3923.                     Return SetError(1, 0, "")
  3924.             EndSelect
  3925.     EndSelect
  3926. EndFunc
  3927. Func _DayValueToDate($IJULIANDATE, ByRef $IYEAR, ByRef $IMONTH, ByRef $IDAY)
  3928.     If $IJULIANDATE < 0 Or Not IsNumber($IJULIANDATE) Then
  3929.         Return SetError(1, 0, 0)
  3930.     EndIf
  3931.     Local $I_ZFACTOR = Int($IJULIANDATE + 0.5)
  3932.     Local $I_WFACTOR = Int(($I_ZFACTOR - 1867216.25) / 36524.25)
  3933.     Local $I_XFACTOR = Int($I_WFACTOR / 4)
  3934.     Local $I_AFACTOR = $I_ZFACTOR + 1 + $I_WFACTOR - $I_XFACTOR
  3935.     Local $I_BFACTOR = $I_AFACTOR + 1524
  3936.     Local $I_CFACTOR = Int(($I_BFACTOR - 122.1) / 365.25)
  3937.     Local $I_DFACTOR = Int(365.25 * $I_CFACTOR)
  3938.     Local $I_EFACTOR = Int(($I_BFACTOR - $I_DFACTOR) / 30.6001)
  3939.     Local $I_FFACTOR = Int(30.6001 * $I_EFACTOR)
  3940.     $IDAY = $I_BFACTOR - $I_DFACTOR - $I_FFACTOR
  3941.     If $I_EFACTOR - 1 < 13 Then
  3942.         $IMONTH = $I_EFACTOR - 1
  3943.     Else
  3944.         $IMONTH = $I_EFACTOR - 13
  3945.     EndIf
  3946.     If $IMONTH < 3 Then
  3947.         $IYEAR = $I_CFACTOR - 4715
  3948.     Else
  3949.         $IYEAR = $I_CFACTOR - 4716
  3950.     EndIf
  3951.     $IYEAR = StringFormat("%04d", $IYEAR)
  3952.     $IMONTH = StringFormat("%02d", $IMONTH)
  3953.     $IDAY = StringFormat("%02d", $IDAY)
  3954.     Return $IYEAR & "/" & $IMONTH & "/" & $IDAY
  3955. EndFunc
  3956. Func _DATE_JULIANDAYNO($IYEAR, $IMONTH, $IDAY)
  3957.     Local $SFULLDATE = StringFormat("%04d/%02d/%02d", $IYEAR, $IMONTH, $IDAY)
  3958.     If Not _DateIsValid($SFULLDATE) Then
  3959.         Return SetError(1, 0, "")
  3960.     EndIf
  3961.     Local $IJDAY = 0
  3962.     Local $AIDAYSINMONTH = _DAYSINMONTH($IYEAR)
  3963.     For $ICNTR = 1 To $IMONTH - 1
  3964.         $IJDAY = $IJDAY + $AIDAYSINMONTH[$ICNTR]
  3965.     Next
  3966.     $IJDAY = ($IYEAR * 1000) + ($IJDAY + $IDAY)
  3967.     Return $IJDAY
  3968. EndFunc
  3969. Func _JULIANTODATE($IJDAY, $SSEP = "/")
  3970.     Local $IYEAR = Int($IJDAY / 1000)
  3971.     Local $IDAYS = Mod($IJDAY, 1000)
  3972.     Local $IMAXDAYS = 365
  3973.     If _DateIsLeapYear($IYEAR) Then $IMAXDAYS = 366
  3974.     If $IDAYS > $IMAXDAYS Then
  3975.         Return SetError(1, 0, "")
  3976.     EndIf
  3977.     Local $AIDAYSINMONTH = _DAYSINMONTH($IYEAR)
  3978.     Local $IMONTH = 1
  3979.     While $IDAYS > $AIDAYSINMONTH[$IMONTH]
  3980.         $IDAYS = $IDAYS - $AIDAYSINMONTH[$IMONTH]
  3981.         $IMONTH = $IMONTH + 1
  3982.     WEnd
  3983.     Return StringFormat("%04d%s%02d%s%02d", $IYEAR, $SSEP, $IMONTH, $SSEP, $IDAYS)
  3984. EndFunc
  3985. Func _Now()
  3986.     Return (_DateTimeFormat(@YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC, 0))
  3987. EndFunc
  3988. Func _NowCalc()
  3989.     Return (@YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)
  3990. EndFunc
  3991. Func _NowCalcDate()
  3992.     Return (@YEAR & "/" & @MON & "/" & @MDAY)
  3993. EndFunc
  3994. Func _NowDate()
  3995.     Return (_DateTimeFormat(@YEAR & "/" & @MON & "/" & @MDAY, 0))
  3996. EndFunc
  3997. Func _NowTime($STYPE = 3)
  3998.     If $STYPE < 3 Or $STYPE > 5 Then $STYPE = 3
  3999.     Return (_DateTimeFormat(@YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC, $STYPE))
  4000. EndFunc
  4001. Func _SetDate($IDAY, $IMONTH = 0, $IYEAR = 0)
  4002.     If $IYEAR = 0 Then $IYEAR = @YEAR
  4003.     If $IMONTH = 0 Then $IMONTH = @MON
  4004.     If Not _DateIsValid($IYEAR & "/" & $IMONTH & "/" & $IDAY) Then Return 1
  4005.     Local $TSYSTEMTIME = DllStructCreate($TAGSYSTEMTIME)
  4006.     Local $LPSYSTEMTIME = DllStructGetPtr($TSYSTEMTIME)
  4007.     DllCall("kernel32.dll", "none", "GetLocalTime", "ptr", $LPSYSTEMTIME)
  4008.     If @error Then Return SetError(@error, @extended, 0)
  4009.     DllStructSetData($TSYSTEMTIME, 4, $IDAY)
  4010.     If $IMONTH > 0 Then DllStructSetData($TSYSTEMTIME, 2, $IMONTH)
  4011.     If $IYEAR > 0 Then DllStructSetData($TSYSTEMTIME, 1, $IYEAR)
  4012.     Local $IRETVAL = _Date_Time_SetLocalTime($LPSYSTEMTIME)
  4013.     If @error Then Return SetError(@error, @extended, 0)
  4014.     Return Int($IRETVAL)
  4015. EndFunc
  4016. Func _SetTime($IHOUR, $IMINUTE, $ISECOND = 0)
  4017.     If $IHOUR < 0 Or $IHOUR > 23 Then Return 1
  4018.     If $IMINUTE < 0 Or $IMINUTE > 59 Then Return 1
  4019.     If $ISECOND < 0 Or $ISECOND > 59 Then Return 1
  4020.     Local $TSYSTEMTIME = DllStructCreate($TAGSYSTEMTIME)
  4021.     Local $LPSYSTEMTIME = DllStructGetPtr($TSYSTEMTIME)
  4022.     DllCall("kernel32.dll", "none", "GetLocalTime", "ptr", $LPSYSTEMTIME)
  4023.     If @error Then Return SetError(@error, @extended, 0)
  4024.     DllStructSetData($TSYSTEMTIME, 5, $IHOUR)
  4025.     DllStructSetData($TSYSTEMTIME, 6, $IMINUTE)
  4026.     If $ISECOND > 0 Then DllStructSetData($TSYSTEMTIME, 7, $ISECOND)
  4027.     Local $IRETVAL = _Date_Time_SetLocalTime($LPSYSTEMTIME)
  4028.     If @error Then Return SetError(@error, @extended, 0)
  4029.     Return Int($IRETVAL)
  4030. EndFunc
  4031. Func _TicksToTime($ITICKS, ByRef $IHOURS, ByRef $IMINS, ByRef $ISECS)
  4032.     If Number($ITICKS) > 0 Then
  4033.         $ITICKS = Int($ITICKS / 1000)
  4034.         $IHOURS = Int($ITICKS / 3600)
  4035.         $ITICKS = Mod($ITICKS, 3600)
  4036.         $IMINS = Int($ITICKS / 60)
  4037.         $ISECS = Mod($ITICKS, 60)
  4038.         Return 1
  4039.     ElseIf Number($ITICKS) = 0 Then
  4040.         $IHOURS = 0
  4041.         $ITICKS = 0
  4042.         $IMINS = 0
  4043.         $ISECS = 0
  4044.         Return 1
  4045.     Else
  4046.         Return SetError(1, 0, 0)
  4047.     EndIf
  4048. EndFunc
  4049. Func _TimeToTicks($IHOURS = @HOUR, $IMINS = @MIN, $ISECS = @SEC)
  4050.     If StringIsInt($IHOURS) And StringIsInt($IMINS) And StringIsInt($ISECS) Then
  4051.         Local $ITICKS = 1000 * ((3600 * $IHOURS) + (60 * $IMINS) + $ISECS)
  4052.         Return $ITICKS
  4053.     Else
  4054.         Return SetError(1, 0, 0)
  4055.     EndIf
  4056. EndFunc
  4057. Func _WeekNumberISO($IYEAR = @YEAR, $IMONTH = @MON, $IDAY = @MDAY)
  4058.     If $IDAY > 31 Or $IDAY < 1 Then
  4059.         Return SetError(1, 0, -1)
  4060.     ElseIf $IMONTH > 12 Or $IMONTH < 1 Then
  4061.         Return SetError(1, 0, -1)
  4062.     ElseIf $IYEAR < 1 Or $IYEAR > 2999 Then
  4063.         Return SetError(1, 0, -1)
  4064.     EndIf
  4065.     Local $IDOW = _DateToDayOfWeekISO($IYEAR, $IMONTH, $IDAY)
  4066.     Local $IDOW0101 = _DateToDayOfWeekISO($IYEAR, 1, 1)
  4067.     If ($IMONTH = 1 And 3 < $IDOW0101 And $IDOW0101 < 7 - ($IDAY - 1)) Then
  4068.         $IDOW = $IDOW0101 - 1
  4069.         $IDOW0101 = _DateToDayOfWeekISO($IYEAR - 1, 1, 1)
  4070.         $IMONTH = 12
  4071.         $IDAY = 31
  4072.         $IYEAR = $IYEAR - 1
  4073.     ElseIf ($IMONTH = 12 And 30 - ($IDAY - 1) < _DateToDayOfWeekISO($IYEAR + 1, 1, 1) And _DateToDayOfWeekISO($IYEAR + 1, 1, 1) < 4) Then
  4074.         Return 1
  4075.     EndIf
  4076.     Return Int((_DateToDayOfWeekISO($IYEAR, 1, 1) < 4) + 4 * ($IMONTH - 1) + (2 * ($IMONTH - 1) + ($IDAY - 1) + $IDOW0101 - $IDOW + 6) * 36 / 256)
  4077. EndFunc
  4078. Func _WEEKNUMBER($IYEAR = @YEAR, $IMONTH = @MON, $IDAY = @MDAY, $IWEEKSTART = 1)
  4079.     If $IDAY > 31 Or $IDAY < 1 Then
  4080.         Return SetError(1, 0, -1)
  4081.     ElseIf $IMONTH > 12 Or $IMONTH < 1 Then
  4082.         Return SetError(1, 0, -1)
  4083.     ElseIf $IYEAR < 1 Or $IYEAR > 2999 Then
  4084.         Return SetError(1, 0, -1)
  4085.     ElseIf $IWEEKSTART < 1 Or $IWEEKSTART > 2 Then
  4086.         Return SetError(2, 0, -1)
  4087.     EndIf
  4088.     Local $ISTARTWEEK1, $IENDWEEK1
  4089.     Local $IDOW0101 = _DateToDayOfWeekISO($IYEAR, 1, 1)
  4090.     Local $IDATE = $IYEAR & "/" & $IMONTH & "/" & $IDAY
  4091.     If $IWEEKSTART = 1 Then
  4092.         If $IDOW0101 = 6 Then
  4093.             $ISTARTWEEK1 = 0
  4094.         Else
  4095.             $ISTARTWEEK1 = -1 * $IDOW0101 - 1
  4096.         EndIf
  4097.         $IENDWEEK1 = $ISTARTWEEK1 + 6
  4098.     Else
  4099.         $ISTARTWEEK1 = $IDOW0101 * - 1
  4100.         $IENDWEEK1 = $ISTARTWEEK1 + 6
  4101.     EndIf
  4102.     Local $ISTARTWEEK1NY
  4103.     Local $IENDWEEK1DATE = _DateAdd("d", $IENDWEEK1, $IYEAR & "/01/01")
  4104.     Local $IDOW0101NY = _DateToDayOfWeekISO($IYEAR + 1, 1, 1)
  4105.     If $IWEEKSTART = 1 Then
  4106.         If $IDOW0101NY = 6 Then
  4107.             $ISTARTWEEK1NY = 0
  4108.         Else
  4109.             $ISTARTWEEK1NY = -1 * $IDOW0101NY - 1
  4110.         EndIf
  4111.     Else
  4112.         $ISTARTWEEK1NY = $IDOW0101NY * - 1
  4113.     EndIf
  4114.     Local $ISTARTWEEK1DATENY = _DateAdd("d", $ISTARTWEEK1NY, $IYEAR + 1 & "/01/01")
  4115.     Local $ICURRDATEDIFF = _DateDiff("d", $IENDWEEK1DATE, $IDATE) - 1
  4116.     Local $ICURRDATEDIFFNY = _DateDiff("d", $ISTARTWEEK1DATENY, $IDATE)
  4117.     If $ICURRDATEDIFF >= 0 And $ICURRDATEDIFFNY < 0 Then Return 2 + Int($ICURRDATEDIFF / 7)
  4118.     If $ICURRDATEDIFF < 0 Or $ICURRDATEDIFFNY >= 0 Then Return 1
  4119. EndFunc
  4120. Func _DAYSINMONTH($IYEAR)
  4121.     Local $AIDAYS[13] = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  4122.     If _DateIsLeapYear($IYEAR) Then $AIDAYS[2] = 29
  4123.     Return $AIDAYS
  4124. EndFunc
  4125. Func __DATE_TIME_CLONESYSTEMTIME($PSYSTEMTIME)
  4126.     Local $TSYSTEMTIME1 = DllStructCreate($TAGSYSTEMTIME, $PSYSTEMTIME)
  4127.     Local $TSYSTEMTIME2 = DllStructCreate($TAGSYSTEMTIME)
  4128.     DllStructSetData($TSYSTEMTIME2, "Month", DllStructGetData($TSYSTEMTIME1, "Month"))
  4129.     DllStructSetData($TSYSTEMTIME2, "Day", DllStructGetData($TSYSTEMTIME1, "Day"))
  4130.     DllStructSetData($TSYSTEMTIME2, "Year", DllStructGetData($TSYSTEMTIME1, "Year"))
  4131.     DllStructSetData($TSYSTEMTIME2, "Hour", DllStructGetData($TSYSTEMTIME1, "Hour"))
  4132.     DllStructSetData($TSYSTEMTIME2, "Minute", DllStructGetData($TSYSTEMTIME1, "Minute"))
  4133.     DllStructSetData($TSYSTEMTIME2, "Second", DllStructGetData($TSYSTEMTIME1, "Second"))
  4134.     DllStructSetData($TSYSTEMTIME2, "MSeconds", DllStructGetData($TSYSTEMTIME1, "MSeconds"))
  4135.     DllStructSetData($TSYSTEMTIME2, "DOW", DllStructGetData($TSYSTEMTIME1, "DOW"))
  4136.     Return $TSYSTEMTIME2
  4137. EndFunc
  4138. Func _Date_Time_CompareFileTime($PFILETIME1, $PFILETIME2)
  4139.     Local $ARESULT = DllCall("kernel32.dll", "long", "CompareFileTime", "ptr", $PFILETIME1, "ptr", $PFILETIME2)
  4140.     If @error Then Return SetError(@error, @extended, 0)
  4141.     Return $ARESULT[0]
  4142. EndFunc
  4143. Func _Date_Time_DOSDateTimeToFileTime($IFATDATE, $IFATTIME)
  4144.     Local $TTIME = DllStructCreate($TAGFILETIME)
  4145.     Local $PTIME = DllStructGetPtr($TTIME)
  4146.     Local $ARESULT = DllCall("kernel32.dll", "bool", "DosDateTimeToFileTime", "word", $IFATDATE, "word", $IFATTIME, "ptr", $PTIME)
  4147.     If @error Then Return SetError(@error, @extended, 0)
  4148.     Return SetExtended($ARESULT[0], $TTIME)
  4149. EndFunc
  4150. Func _Date_Time_DOSDateToArray($IDOSDATE)
  4151.     Local $ADATE[3]
  4152.     $ADATE[0] = BitAND($IDOSDATE, 31)
  4153.     $ADATE[1] = BitAND(BitShift($IDOSDATE, 5), 15)
  4154.     $ADATE[2] = BitAND(BitShift($IDOSDATE, 9), 63) + 1980
  4155.     Return $ADATE
  4156. EndFunc
  4157. Func _Date_Time_DOSDateTimeToArray($IDOSDATE, $IDOSTIME)
  4158.     Local $ADATE[6]
  4159.     $ADATE[0] = BitAND($IDOSDATE, 31)
  4160.     $ADATE[1] = BitAND(BitShift($IDOSDATE, 5), 15)
  4161.     $ADATE[2] = BitAND(BitShift($IDOSDATE, 9), 63) + 1980
  4162.     $ADATE[5] = BitAND($IDOSTIME, 31) * 2
  4163.     $ADATE[4] = BitAND(BitShift($IDOSTIME, 5), 63)
  4164.     $ADATE[3] = BitAND(BitShift($IDOSTIME, 11), 31)
  4165.     Return $ADATE
  4166. EndFunc
  4167. Func _Date_Time_DOSDateTimeToStr($IDOSDATE, $IDOSTIME)
  4168.     Local $ADATE = _Date_Time_DOSDateTimeToArray($IDOSDATE, $IDOSTIME)
  4169.     Return StringFormat("%02d/%02d/%04d %02d:%02d:%02d", $ADATE[0], $ADATE[1], $ADATE[2], $ADATE[3], $ADATE[4], $ADATE[5])
  4170. EndFunc
  4171. Func _Date_Time_DOSDateToStr($IDOSDATE)
  4172.     Local $ADATE = _Date_Time_DOSDateToArray($IDOSDATE)
  4173.     Return StringFormat("%02d/%02d/%04d", $ADATE[0], $ADATE[1], $ADATE[2])
  4174. EndFunc
  4175. Func _Date_Time_DOSTimeToArray($IDOSTIME)
  4176.     Local $ATIME[3]
  4177.     $ATIME[2] = BitAND($IDOSTIME, 31) * 2
  4178.     $ATIME[1] = BitAND(BitShift($IDOSTIME, 5), 63)
  4179.     $ATIME[0] = BitAND(BitShift($IDOSTIME, 11), 31)
  4180.     Return $ATIME
  4181. EndFunc
  4182. Func _Date_Time_DOSTimeToStr($IDOSTIME)
  4183.     Local $ATIME = _Date_Time_DOSTimeToArray($IDOSTIME)
  4184.     Return StringFormat("%02d:%02d:%02d", $ATIME[0], $ATIME[1], $ATIME[2])
  4185. EndFunc
  4186. Func _Date_Time_EncodeFileTime($IMONTH, $IDAY, $IYEAR, $IHOUR = 0, $IMINUTE = 0, $ISECOND = 0, $IMSECONDS = 0)
  4187.     Local $TSYSTEMTIME = _Date_Time_EncodeSystemTime($IMONTH, $IDAY, $IYEAR, $IHOUR, $IMINUTE, $ISECOND, $IMSECONDS)
  4188.     Return _Date_Time_SystemTimeToFileTime(DllStructGetPtr($TSYSTEMTIME))
  4189. EndFunc
  4190. Func _Date_Time_EncodeSystemTime($IMONTH, $IDAY, $IYEAR, $IHOUR = 0, $IMINUTE = 0, $ISECOND = 0, $IMSECONDS = 0)
  4191.     Local $TSYSTEMTIME = DllStructCreate($TAGSYSTEMTIME)
  4192.     DllStructSetData($TSYSTEMTIME, "Month", $IMONTH)
  4193.     DllStructSetData($TSYSTEMTIME, "Day", $IDAY)
  4194.     DllStructSetData($TSYSTEMTIME, "Year", $IYEAR)
  4195.     DllStructSetData($TSYSTEMTIME, "Hour", $IHOUR)
  4196.     DllStructSetData($TSYSTEMTIME, "Minute", $IMINUTE)
  4197.     DllStructSetData($TSYSTEMTIME, "Second", $ISECOND)
  4198.     DllStructSetData($TSYSTEMTIME, "MSeconds", $IMSECONDS)
  4199.     Return $TSYSTEMTIME
  4200. EndFunc
  4201. Func _Date_Time_FileTimeToArray(ByRef $TFILETIME)
  4202.     If ((DllStructGetData($TFILETIME, 1) + DllStructGetData($TFILETIME, 2)) = 0) Then Return SetError(1, 0, 0)
  4203.     Local $TSYSTEMTIME = _Date_Time_FileTimeToSystemTime(DllStructGetPtr($TFILETIME))
  4204.     If @error Then Return SetError(@error, @extended, 0)
  4205.     Return _Date_Time_SystemTimeToArray($TSYSTEMTIME)
  4206. EndFunc
  4207. Func _Date_Time_FileTimeToStr(ByRef $TFILETIME, $BFMT = 0)
  4208.     Local $ADATE = _Date_Time_FileTimeToArray($TFILETIME)
  4209.     If @error Then Return SetError(@error, @extended, "")
  4210.     If $BFMT Then
  4211.         Return StringFormat("%04d/%02d/%02d %02d:%02d:%02d", $ADATE[2], $ADATE[1], $ADATE[0], $ADATE[3], $ADATE[4], $ADATE[5])
  4212.     Else
  4213.         Return StringFormat("%02d/%02d/%04d %02d:%02d:%02d", $ADATE[0], $ADATE[1], $ADATE[2], $ADATE[3], $ADATE[4], $ADATE[5])
  4214.     EndIf
  4215. EndFunc
  4216. Func _Date_Time_FileTimeToDOSDateTime($PFILETIME)
  4217.     Local $ADATE[2]
  4218.     Local $ARESULT = DllCall("kernel32.dll", "bool", "FileTimeToDosDateTime", "ptr", $PFILETIME, "word*", 0, "word*", 0)
  4219.     If @error Then Return SetError(@error, @extended, $ADATE)
  4220.     $ADATE[0] = $ARESULT[2]
  4221.     $ADATE[1] = $ARESULT[3]
  4222.     Return SetExtended($ARESULT[0], $ADATE)
  4223. EndFunc
  4224. Func _Date_Time_FileTimeToLocalFileTime($PFILETIME)
  4225.     Local $TLOCAL = DllStructCreate($TAGFILETIME)
  4226.     Local $ARESULT = DllCall("kernel32.dll", "bool", "FileTimeToLocalFileTime", "ptr", $PFILETIME, "ptr", DllStructGetPtr($TLOCAL))
  4227.     If @error Then Return SetError(@error, @extended, 0)
  4228.     Return SetExtended($ARESULT[0], $TLOCAL)
  4229. EndFunc
  4230. Func _Date_Time_FileTimeToSystemTime($PFILETIME)
  4231.     Local $TSYSTTIME = DllStructCreate($TAGSYSTEMTIME)
  4232.     Local $ARESULT = DllCall("kernel32.dll", "bool", "FileTimeToSystemTime", "ptr", $PFILETIME, "ptr", DllStructGetPtr($TSYSTTIME))
  4233.     If @error Then Return SetError(@error, @extended, 0)
  4234.     Return SetExtended($ARESULT[0], $TSYSTTIME)
  4235. EndFunc
  4236. Func _Date_Time_GetFileTime($HFILE)
  4237.     Local $ADATE[3]
  4238.     $ADATE[0] = DllStructCreate($TAGFILETIME)
  4239.     $ADATE[1] = DllStructCreate($TAGFILETIME)
  4240.     $ADATE[2] = DllStructCreate($TAGFILETIME)
  4241.     Local $PCT = DllStructGetPtr($ADATE[0])
  4242.     Local $PLA = DllStructGetPtr($ADATE[1])
  4243.     Local $PLM = DllStructGetPtr($ADATE[2])
  4244.     Local $ARESULT = DllCall("Kernel32.dll", "bool", "GetFileTime", "handle", $HFILE, "ptr", $PCT, "ptr", $PLA, "ptr", $PLM)
  4245.     If @error Then Return SetError(@error, @extended, 0)
  4246.     Return SetExtended($ARESULT[0], $ADATE)
  4247. EndFunc
  4248. Func _Date_Time_GetLocalTime()
  4249.     Local $TSYSTTIME = DllStructCreate($TAGSYSTEMTIME)
  4250.     DllCall("kernel32.dll", "none", "GetLocalTime", "ptr", DllStructGetPtr($TSYSTTIME))
  4251.     If @error Then Return SetError(@error, @extended, 0)
  4252.     Return $TSYSTTIME
  4253. EndFunc
  4254. Func _Date_Time_GetSystemTime()
  4255.     Local $TSYSTTIME = DllStructCreate($TAGSYSTEMTIME)
  4256.     DllCall("kernel32.dll", "none", "GetSystemTime", "ptr", DllStructGetPtr($TSYSTTIME))
  4257.     If @error Then Return SetError(@error, @extended, 0)
  4258.     Return $TSYSTTIME
  4259. EndFunc
  4260. Func _Date_Time_GetSystemTimeAdjustment()
  4261.     Local $AINFO[3]
  4262.     Local $ARESULT = DllCall("kernel32.dll", "bool", "GetSystemTimeAdjustment", "dword*", 0, "dword*", 0, "bool*", 0)
  4263.     If @error Then Return SetError(@error, @extended, 0)
  4264.     $AINFO[0] = $ARESULT[1]
  4265.     $AINFO[1] = $ARESULT[2]
  4266.     $AINFO[2] = $ARESULT[3] <> 0
  4267.     Return SetExtended($ARESULT[0], $AINFO)
  4268. EndFunc
  4269. Func _Date_Time_GetSystemTimeAsFileTime()
  4270.     Local $TFILETIME = DllStructCreate($TAGFILETIME)
  4271.     DllCall("kernel32.dll", "none", "GetSystemTimeAsFileTime", "ptr", DllStructGetPtr($TFILETIME))
  4272.     If @error Then Return SetError(@error, @extended, 0)
  4273.     Return $TFILETIME
  4274. EndFunc
  4275. Func _Date_Time_GetSystemTimes()
  4276.     Local $AINFO[3]
  4277.     $AINFO[0] = DllStructCreate($TAGFILETIME)
  4278.     $AINFO[1] = DllStructCreate($TAGFILETIME)
  4279.     $AINFO[2] = DllStructCreate($TAGFILETIME)
  4280.     Local $PIDLE = DllStructGetPtr($AINFO[0])
  4281.     Local $PKERNEL = DllStructGetPtr($AINFO[1])
  4282.     Local $PUSER = DllStructGetPtr($AINFO[2])
  4283.     Local $ARESULT = DllCall("kernel32.dll", "bool", "GetSystemTimes", "ptr", $PIDLE, "ptr", $PKERNEL, "ptr", $PUSER)
  4284.     If @error Then Return SetError(@error, @extended, 0)
  4285.     Return SetExtended($ARESULT[0], $AINFO)
  4286. EndFunc
  4287. Func _Date_Time_GetTickCount()
  4288.     Local $ARESULT = DllCall("kernel32.dll", "dword", "GetTickCount")
  4289.     If @error Then Return SetError(@error, @extended, 0)
  4290.     Return $ARESULT[0]
  4291. EndFunc
  4292. Func _Date_Time_GetTimeZoneInformation()
  4293.     Local $TTIMEZONE = DllStructCreate($TAGTIME_ZONE_INFORMATION)
  4294.     Local $ARESULT = DllCall("kernel32.dll", "dword", "GetTimeZoneInformation", "ptr", DllStructGetPtr($TTIMEZONE))
  4295.     If @error Or $ARESULT[0] = -1 Then Return SetError(@error, @extended, 0)
  4296.     Local $AINFO[8]
  4297.     $AINFO[0] = $ARESULT[0]
  4298.     $AINFO[1] = DllStructGetData($TTIMEZONE, "Bias")
  4299.     $AINFO[2] = _WinAPI_WideCharToMultiByte(DllStructGetPtr($TTIMEZONE, "StdName"))
  4300.     $AINFO[3] = __DATE_TIME_CLONESYSTEMTIME(DllStructGetPtr($TTIMEZONE, "StdDate"))
  4301.     $AINFO[4] = DllStructGetData($TTIMEZONE, "StdBias")
  4302.     $AINFO[5] = _WinAPI_WideCharToMultiByte(DllStructGetPtr($TTIMEZONE, "DayName"))
  4303.     $AINFO[6] = __DATE_TIME_CLONESYSTEMTIME(DllStructGetPtr($TTIMEZONE, "DayDate"))
  4304.     $AINFO[7] = DllStructGetData($TTIMEZONE, "DayBias")
  4305.     Return $AINFO
  4306. EndFunc
  4307. Func _Date_Time_LocalFileTimeToFileTime($PLOCALTIME)
  4308.     Local $TFILETIME = DllStructCreate($TAGFILETIME)
  4309.     Local $ARESULT = DllCall("kernel32.dll", "bool", "LocalFileTimeToFileTime", "ptr", $PLOCALTIME, "ptr", DllStructGetPtr($TFILETIME))
  4310.     If @error Then Return SetError(@error, @extended, 0)
  4311.     Return SetExtended($ARESULT[0], $TFILETIME)
  4312. EndFunc
  4313. Func _Date_Time_SetFileTime($HFILE, $PCREATETIME, $PLASTACCESS, $PLASTWRITE)
  4314.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SetFileTime", "handle", $HFILE, "ptr", $PCREATETIME, "ptr", $PLASTACCESS, "ptr", $PLASTWRITE)
  4315.     If @error Then Return SetError(@error, @extended, False)
  4316.     Return $ARESULT[0]
  4317. EndFunc
  4318. Func _Date_Time_SetLocalTime($PSYSTEMTIME)
  4319.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SetLocalTime", "ptr", $PSYSTEMTIME)
  4320.     If @error Or Not $ARESULT[0] Then Return SetError(@error, @extended, False)
  4321.     $ARESULT = DllCall("kernel32.dll", "bool", "SetLocalTime", "ptr", $PSYSTEMTIME)
  4322.     If @error Then Return SetError(@error, @extended, False)
  4323.     Return $ARESULT[0]
  4324. EndFunc
  4325. Func _Date_Time_SetSystemTime($PSYSTEMTIME)
  4326.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SetSystemTime", "ptr", $PSYSTEMTIME)
  4327.     If @error Then Return SetError(@error, @extended, False)
  4328.     Return $ARESULT[0]
  4329. EndFunc
  4330. Func _Date_Time_SetSystemTimeAdjustment($IADJUSTMENT, $FDISABLED)
  4331.     Local $HTOKEN = _Security__OpenThreadTokenEx(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
  4332.     If @error Then Return SetError(@error, @extended, False)
  4333.     _Security__SetPrivilege($HTOKEN, "SeSystemtimePrivilege", True)
  4334.     Local $IERROR = @error
  4335.     Local $ILASTERROR = @extended
  4336.     Local $IRET = False
  4337.     If Not @error Then
  4338.         Local $ARESULT = DllCall("kernel32.dll", "bool", "SetSystemTimeAdjustment", "dword", $IADJUSTMENT, "bool", $FDISABLED)
  4339.         If @error Then
  4340.             $IERROR = @error
  4341.             $ILASTERROR = @extended
  4342.         ElseIf $ARESULT[0] Then
  4343.             $IRET = True
  4344.         Else
  4345.             $IERROR = 1
  4346.             $ILASTERROR = _WinAPI_GetLastError()
  4347.         EndIf
  4348.         _Security__SetPrivilege($HTOKEN, "SeSystemtimePrivilege", False)
  4349.         If @error Then $IERROR = 2
  4350.     EndIf
  4351.     _WinAPI_CloseHandle($HTOKEN)
  4352.     Return SetError($IERROR, $ILASTERROR, $IRET)
  4353. EndFunc
  4354. Func _Date_Time_SetTimeZoneInformation($IBIAS, $SSTDNAME, $TSTDDATE, $ISTDBIAS, $SDAYNAME, $TDAYDATE, $IDAYBIAS)
  4355.     Local $TSTDNAME = _WinAPI_MultiByteToWideChar($SSTDNAME)
  4356.     Local $TDAYNAME = _WinAPI_MultiByteToWideChar($SDAYNAME)
  4357.     Local $TZONEINFO = DllStructCreate($TAGTIME_ZONE_INFORMATION)
  4358.     DllStructSetData($TZONEINFO, "Bias", $IBIAS)
  4359.     DllStructSetData($TZONEINFO, "StdName", DllStructGetData($TSTDNAME, 1))
  4360.     _MemMoveMemory(DllStructGetPtr($TSTDDATE), DllStructGetPtr($TZONEINFO, "StdDate"), DllStructGetSize($TSTDDATE))
  4361.     DllStructSetData($TZONEINFO, "StdBias", $ISTDBIAS)
  4362.     DllStructSetData($TZONEINFO, "DayName", DllStructGetData($TDAYNAME, 1))
  4363.     _MemMoveMemory(DllStructGetPtr($TDAYDATE), DllStructGetPtr($TZONEINFO, "DayDate"), DllStructGetSize($TDAYDATE))
  4364.     DllStructSetData($TZONEINFO, "DayBias", $IDAYBIAS)
  4365.     Local $HTOKEN = _Security__OpenThreadTokenEx(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
  4366.     If @error Then Return SetError(@error, @extended, False)
  4367.     _Security__SetPrivilege($HTOKEN, "SeSystemtimePrivilege", True)
  4368.     Local $IERROR = @error
  4369.     Local $ILASTERROR = @extended
  4370.     Local $IRET = False
  4371.     If Not @error Then
  4372.         Local $ARESULT = DllCall("kernel32.dll", "bool", "SetTimeZoneInformation", "ptr", DllStructGetPtr($TZONEINFO))
  4373.         If @error Then
  4374.             $IERROR = @error
  4375.             $ILASTERROR = @extended
  4376.         ElseIf $ARESULT[0] Then
  4377.             $ILASTERROR = 0
  4378.             $IRET = True
  4379.         Else
  4380.             $IERROR = 1
  4381.             $ILASTERROR = _WinAPI_GetLastError()
  4382.         EndIf
  4383.         _Security__SetPrivilege($HTOKEN, "SeSystemtimePrivilege", False)
  4384.         If @error Then $IERROR = 2
  4385.     EndIf
  4386.     _WinAPI_CloseHandle($HTOKEN)
  4387.     Return SetError($IERROR, $ILASTERROR, $IRET)
  4388. EndFunc
  4389. Func _Date_Time_SystemTimeToArray(ByRef $TSYSTEMTIME)
  4390.     Local $AINFO[8]
  4391.     $AINFO[0] = DllStructGetData($TSYSTEMTIME, "Month")
  4392.     $AINFO[1] = DllStructGetData($TSYSTEMTIME, "Day")
  4393.     $AINFO[2] = DllStructGetData($TSYSTEMTIME, "Year")
  4394.     $AINFO[3] = DllStructGetData($TSYSTEMTIME, "Hour")
  4395.     $AINFO[4] = DllStructGetData($TSYSTEMTIME, "Minute")
  4396.     $AINFO[5] = DllStructGetData($TSYSTEMTIME, "Second")
  4397.     $AINFO[6] = DllStructGetData($TSYSTEMTIME, "MSeconds")
  4398.     $AINFO[7] = DllStructGetData($TSYSTEMTIME, "DOW")
  4399.     Return $AINFO
  4400. EndFunc
  4401. Func _Date_Time_SystemTimeToDateStr(ByRef $TSYSTEMTIME, $BFMT = 0)
  4402.     Local $AINFO = _Date_Time_SystemTimeToArray($TSYSTEMTIME)
  4403.     If @error Then Return SetError(@error, @extended, "")
  4404.     If $BFMT Then
  4405.         Return StringFormat("%04d/%02d/%02d", $AINFO[2], $AINFO[0], $AINFO[1])
  4406.     Else
  4407.         Return StringFormat("%02d/%02d/%04d", $AINFO[0], $AINFO[1], $AINFO[2])
  4408.     EndIf
  4409. EndFunc
  4410. Func _Date_Time_SystemTimeToDateTimeStr(ByRef $TSYSTEMTIME, $BFMT = 0)
  4411.     Local $AINFO = _Date_Time_SystemTimeToArray($TSYSTEMTIME)
  4412.     If @error Then Return SetError(@error, @extended, "")
  4413.     If $BFMT Then
  4414.         Return StringFormat("%04d/%02d/%02d %02d:%02d:%02d", $AINFO[2], $AINFO[0], $AINFO[1], $AINFO[3], $AINFO[4], $AINFO[5])
  4415.     Else
  4416.         Return StringFormat("%02d/%02d/%04d %02d:%02d:%02d", $AINFO[0], $AINFO[1], $AINFO[2], $AINFO[3], $AINFO[4], $AINFO[5])
  4417.     EndIf
  4418. EndFunc
  4419. Func _Date_Time_SystemTimeToFileTime($PSYSTEMTIME)
  4420.     Local $TFILETIME = DllStructCreate($TAGFILETIME)
  4421.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SystemTimeToFileTime", "ptr", $PSYSTEMTIME, "ptr", DllStructGetPtr($TFILETIME))
  4422.     If @error Then Return SetError(@error, @extended, 0)
  4423.     Return SetExtended($ARESULT[0], $TFILETIME)
  4424. EndFunc
  4425. Func _Date_Time_SystemTimeToTimeStr(ByRef $TSYSTEMTIME)
  4426.     Local $AINFO = _Date_Time_SystemTimeToArray($TSYSTEMTIME)
  4427.     Return StringFormat("%02d:%02d:%02d", $AINFO[3], $AINFO[4], $AINFO[5])
  4428. EndFunc
  4429. Func _Date_Time_SystemTimeToTzSpecificLocalTime($PUTC, $PTIMEZONE = 0)
  4430.     Local $TLOCALTIME = DllStructCreate($TAGSYSTEMTIME)
  4431.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SystemTimeToTzSpecificLocalTime", "ptr", $PTIMEZONE, "ptr", $PUTC, "ptr", DllStructGetPtr($TLOCALTIME))
  4432.     If @error Then Return SetError(@error, @extended, 0)
  4433.     Return SetExtended($ARESULT[0], $TLOCALTIME)
  4434. EndFunc
  4435. Func _Date_Time_TzSpecificLocalTimeToSystemTime($PLOCALTIME, $PTIMEZONE = 0)
  4436.     Local $TUTC = DllStructCreate($TAGSYSTEMTIME)
  4437.     Local $ARESULT = DllCall("kernel32.dll", "ptr", "TzSpecificLocalTimeToSystemTime", "ptr", $PTIMEZONE, "ptr", $PLOCALTIME, "ptr", DllStructGetPtr($TUTC))
  4438.     If @error Then Return SetError(@error, @extended, 0)
  4439.     Return SetExtended($ARESULT[0], $TUTC)
  4440. EndFunc
  4441. Global Const $CB_ERR = -1
  4442. Global Const $CB_ERRATTRIBUTE = -3
  4443. Global Const $CB_ERRREQUIRED = -4
  4444. Global Const $CB_ERRSPACE = -2
  4445. Global Const $CB_OKAY = 0
  4446. Global Const $STATE_SYSTEM_INVISIBLE = 32768
  4447. Global Const $STATE_SYSTEM_PRESSED = 8
  4448. Global Const $CBS_AUTOHSCROLL = 64
  4449. Global Const $CBS_DISABLENOSCROLL = 2048
  4450. Global Const $CBS_DROPDOWN = 2
  4451. Global Const $CBS_DROPDOWNLIST = 3
  4452. Global Const $CBS_HASSTRINGS = 512
  4453. Global Const $CBS_LOWERCASE = 16384
  4454. Global Const $CBS_NOINTEGRALHEIGHT = 1024
  4455. Global Const $CBS_OEMCONVERT = 128
  4456. Global Const $CBS_OWNERDRAWFIXED = 16
  4457. Global Const $CBS_OWNERDRAWVARIABLE = 32
  4458. Global Const $CBS_SIMPLE = 1
  4459. Global Const $CBS_SORT = 256
  4460. Global Const $CBS_UPPERCASE = 8192
  4461. Global Const $CBM_FIRST = 5888
  4462. Global Const $CB_ADDSTRING = 323
  4463. Global Const $CB_DELETESTRING = 324
  4464. Global Const $CB_DIR = 325
  4465. Global Const $CB_FINDSTRING = 332
  4466. Global Const $CB_FINDSTRINGEXACT = 344
  4467. Global Const $CB_GETCOMBOBOXINFO = 356
  4468. Global Const $CB_GETCOUNT = 326
  4469. Global Const $CB_GETCUEBANNER = ($CBM_FIRST + 4)
  4470. Global Const $CB_GETCURSEL = 327
  4471. Global Const $CB_GETDROPPEDCONTROLRECT = 338
  4472. Global Const $CB_GETDROPPEDSTATE = 343
  4473. Global Const $CB_GETDROPPEDWIDTH = 351
  4474. Global Const $CB_GETEDITSEL = 320
  4475. Global Const $CB_GETEXTENDEDUI = 342
  4476. Global Const $CB_GETHORIZONTALEXTENT = 349
  4477. Global Const $CB_GETITEMDATA = 336
  4478. Global Const $CB_GETITEMHEIGHT = 340
  4479. Global Const $CB_GETLBTEXT = 328
  4480. Global Const $CB_GETLBTEXTLEN = 329
  4481. Global Const $CB_GETLOCALE = 346
  4482. Global Const $CB_GETMINVISIBLE = 5890
  4483. Global Const $CB_GETTOPINDEX = 347
  4484. Global Const $CB_INITSTORAGE = 353
  4485. Global Const $CB_LIMITTEXT = 321
  4486. Global Const $CB_RESETCONTENT = 331
  4487. Global Const $CB_INSERTSTRING = 330
  4488. Global Const $CB_SELECTSTRING = 333
  4489. Global Const $CB_SETCUEBANNER = ($CBM_FIRST + 3)
  4490. Global Const $CB_SETCURSEL = 334
  4491. Global Const $CB_SETDROPPEDWIDTH = 352
  4492. Global Const $CB_SETEDITSEL = 322
  4493. Global Const $CB_SETEXTENDEDUI = 341
  4494. Global Const $CB_SETHORIZONTALEXTENT = 350
  4495. Global Const $CB_SETITEMDATA = 337
  4496. Global Const $CB_SETITEMHEIGHT = 339
  4497. Global Const $CB_SETLOCALE = 345
  4498. Global Const $CB_SETMINVISIBLE = 5889
  4499. Global Const $CB_SETTOPINDEX = 348
  4500. Global Const $CB_SHOWDROPDOWN = 335
  4501. Global Const $CBN_CLOSEUP = 8
  4502. Global Const $CBN_DBLCLK = 2
  4503. Global Const $CBN_DROPDOWN = 7
  4504. Global Const $CBN_EDITCHANGE = 5
  4505. Global Const $CBN_EDITUPDATE = 6
  4506. Global Const $CBN_ERRSPACE = (-1)
  4507. Global Const $CBN_KILLFOCUS = 4
  4508. Global Const $CBN_SELCHANGE = 1
  4509. Global Const $CBN_SELENDCANCEL = 10
  4510. Global Const $CBN_SELENDOK = 9
  4511. Global Const $CBN_SETFOCUS = 3
  4512. Global Const $CBES_EX_CASESENSITIVE = 16
  4513. Global Const $CBES_EX_NOEDITIMAGE = 1
  4514. Global Const $CBES_EX_NOEDITIMAGEINDENT = 2
  4515. Global Const $CBES_EX_NOSIZELIMIT = 8
  4516. Global Const $CBES_EX_PATHWORDBREAKPROC = 4
  4517. Global Const $__COMBOBOXCONSTANT_WM_USER = 1024
  4518. Global Const $CBEM_DELETEITEM = $CB_DELETESTRING
  4519. Global Const $CBEM_GETCOMBOCONTROL = ($__COMBOBOXCONSTANT_WM_USER + 6)
  4520. Global Const $CBEM_GETEDITCONTROL = ($__COMBOBOXCONSTANT_WM_USER + 7)
  4521. Global Const $CBEM_GETEXSTYLE = ($__COMBOBOXCONSTANT_WM_USER + 9)
  4522. Global Const $CBEM_GETEXTENDEDSTYLE = ($__COMBOBOXCONSTANT_WM_USER + 9)
  4523. Global Const $CBEM_GETIMAGELIST = ($__COMBOBOXCONSTANT_WM_USER + 3)
  4524. Global Const $CBEM_GETITEMA = ($__COMBOBOXCONSTANT_WM_USER + 4)
  4525. Global Const $CBEM_GETITEMW = ($__COMBOBOXCONSTANT_WM_USER + 13)
  4526. Global Const $CBEM_GETUNICODEFORMAT = 8192 + 6
  4527. Global Const $CBEM_HASEDITCHANGED = ($__COMBOBOXCONSTANT_WM_USER + 10)
  4528. Global Const $CBEM_INSERTITEMA = ($__COMBOBOXCONSTANT_WM_USER + 1)
  4529. Global Const $CBEM_INSERTITEMW = ($__COMBOBOXCONSTANT_WM_USER + 11)
  4530. Global Const $CBEM_SETEXSTYLE = ($__COMBOBOXCONSTANT_WM_USER + 8)
  4531. Global Const $CBEM_SETEXTENDEDSTYLE = ($__COMBOBOXCONSTANT_WM_USER + 14)
  4532. Global Const $CBEM_SETIMAGELIST = ($__COMBOBOXCONSTANT_WM_USER + 2)
  4533. Global Const $CBEM_SETITEMA = ($__COMBOBOXCONSTANT_WM_USER + 5)
  4534. Global Const $CBEM_SETITEMW = ($__COMBOBOXCONSTANT_WM_USER + 12)
  4535. Global Const $CBEM_SETUNICODEFORMAT = 8192 + 5
  4536. Global Const $CBEM_SETWINDOWTHEME = 8192 + 11
  4537. Global Const $CBEN_FIRST = (-800)
  4538. Global Const $CBEN_LAST = (-830)
  4539. Global Const $CBEN_BEGINEDIT = ($CBEN_FIRST - 4)
  4540. Global Const $CBEN_DELETEITEM = ($CBEN_FIRST - 2)
  4541. Global Const $CBEN_DRAGBEGINA = ($CBEN_FIRST - 8)
  4542. Global Const $CBEN_DRAGBEGINW = ($CBEN_FIRST - 9)
  4543. Global Const $CBEN_ENDEDITA = ($CBEN_FIRST - 5)
  4544. Global Const $CBEN_ENDEDITW = ($CBEN_FIRST - 6)
  4545. Global Const $CBEN_GETDISPINFO = ($CBEN_FIRST - 0)
  4546. Global Const $CBEN_GETDISPINFOA = ($CBEN_FIRST - 0)
  4547. Global Const $CBEN_GETDISPINFOW = ($CBEN_FIRST - 7)
  4548. Global Const $CBEN_INSERTITEM = ($CBEN_FIRST - 1)
  4549. Global Const $CBEIF_DI_SETITEM = 268435456
  4550. Global Const $CBEIF_IMAGE = 2
  4551. Global Const $CBEIF_INDENT = 16
  4552. Global Const $CBEIF_LPARAM = 32
  4553. Global Const $CBEIF_OVERLAY = 8
  4554. Global Const $CBEIF_SELECTEDIMAGE = 4
  4555. Global Const $CBEIF_TEXT = 1
  4556. Global Const $__COMBOBOXCONSTANT_WS_VSCROLL = 2097152
  4557. Global Const $GUI_SS_DEFAULT_COMBO = BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $__COMBOBOXCONSTANT_WS_VSCROLL)
  4558. Global Const $DDL_ARCHIVE = 32
  4559. Global Const $DDL_DIRECTORY = 16
  4560. Global Const $DDL_DRIVES = 16384
  4561. Global Const $DDL_EXCLUSIVE = 32768
  4562. Global Const $DDL_HIDDEN = 2
  4563. Global Const $DDL_READONLY = 1
  4564. Global Const $DDL_READWRITE = 0
  4565. Global Const $DDL_SYSTEM = 4
  4566. Global Const $_UDF_GLOBALIDS_OFFSET = 2
  4567. Global Const $_UDF_GLOBALID_MAX_WIN = 16
  4568. Global Const $_UDF_STARTID = 10000
  4569. Global Const $_UDF_GLOBALID_MAX_IDS = 55535
  4570. Global Const $__UDFGUICONSTANT_WS_VISIBLE = 268435456
  4571. Global Const $__UDFGUICONSTANT_WS_CHILD = 1073741824
  4572. Global $_UDF_GLOBALIDS_USED[$_UDF_GLOBALID_MAX_WIN][$_UDF_GLOBALID_MAX_IDS + $_UDF_GLOBALIDS_OFFSET + 1]
  4573. Func __UDF_GETNEXTGLOBALID($HWND)
  4574.     Local $NCTRLID, $IUSEDINDEX = -1, $FALLUSED = True
  4575.     If Not WinExists($HWND) Then Return SetError(-1, -1, 0)
  4576.     For $IINDEX = 0 To $_UDF_GLOBALID_MAX_WIN - 1
  4577.         If $_UDF_GLOBALIDS_USED[$IINDEX][0] <> 0 Then
  4578.             If Not WinExists($_UDF_GLOBALIDS_USED[$IINDEX][0]) Then
  4579.                 For $X = 0 To UBound($_UDF_GLOBALIDS_USED, 2) - 1
  4580.                     $_UDF_GLOBALIDS_USED[$IINDEX][$X] = 0
  4581.                 Next
  4582.                 $_UDF_GLOBALIDS_USED[$IINDEX][1] = $_UDF_STARTID
  4583.                 $FALLUSED = False
  4584.             EndIf
  4585.         EndIf
  4586.     Next
  4587.     For $IINDEX = 0 To $_UDF_GLOBALID_MAX_WIN - 1
  4588.         If $_UDF_GLOBALIDS_USED[$IINDEX][0] = $HWND Then
  4589.             $IUSEDINDEX = $IINDEX
  4590.             ExitLoop
  4591.         EndIf
  4592.     Next
  4593.     If $IUSEDINDEX = -1 Then
  4594.         For $IINDEX = 0 To $_UDF_GLOBALID_MAX_WIN - 1
  4595.             If $_UDF_GLOBALIDS_USED[$IINDEX][0] = 0 Then
  4596.                 $_UDF_GLOBALIDS_USED[$IINDEX][0] = $HWND
  4597.                 $_UDF_GLOBALIDS_USED[$IINDEX][1] = $_UDF_STARTID
  4598.                 $FALLUSED = False
  4599.                 $IUSEDINDEX = $IINDEX
  4600.                 ExitLoop
  4601.             EndIf
  4602.         Next
  4603.     EndIf
  4604.     If $IUSEDINDEX = -1 And $FALLUSED Then Return SetError(16, 0, 0)
  4605.     If $_UDF_GLOBALIDS_USED[$IUSEDINDEX][1] = $_UDF_STARTID + $_UDF_GLOBALID_MAX_IDS Then
  4606.         For $IIDINDEX = $_UDF_GLOBALIDS_OFFSET To UBound($_UDF_GLOBALIDS_USED, 2) - 1
  4607.             If $_UDF_GLOBALIDS_USED[$IUSEDINDEX][$IIDINDEX] = 0 Then
  4608.                 $NCTRLID = ($IIDINDEX - $_UDF_GLOBALIDS_OFFSET) + 10000
  4609.                 $_UDF_GLOBALIDS_USED[$IUSEDINDEX][$IIDINDEX] = $NCTRLID
  4610.                 Return $NCTRLID
  4611.             EndIf
  4612.         Next
  4613.         Return SetError(-1, $_UDF_GLOBALID_MAX_IDS, 0)
  4614.     EndIf
  4615.     $NCTRLID = $_UDF_GLOBALIDS_USED[$IUSEDINDEX][1]
  4616.     $_UDF_GLOBALIDS_USED[$IUSEDINDEX][1] += 1
  4617.     $_UDF_GLOBALIDS_USED[$IUSEDINDEX][($NCTRLID - 10000) + $_UDF_GLOBALIDS_OFFSET] = $NCTRLID
  4618.     Return $NCTRLID
  4619. EndFunc
  4620. Func __UDF_FREEGLOBALID($HWND, $IGLOBALID)
  4621.     If $IGLOBALID - $_UDF_STARTID < 0 Or $IGLOBALID - $_UDF_STARTID > $_UDF_GLOBALID_MAX_IDS Then Return SetError(-1, 0, False)
  4622.     For $IINDEX = 0 To $_UDF_GLOBALID_MAX_WIN - 1
  4623.         If $_UDF_GLOBALIDS_USED[$IINDEX][0] = $HWND Then
  4624.             For $X = $_UDF_GLOBALIDS_OFFSET To UBound($_UDF_GLOBALIDS_USED, 2) - 1
  4625.                 If $_UDF_GLOBALIDS_USED[$IINDEX][$X] = $IGLOBALID Then
  4626.                     $_UDF_GLOBALIDS_USED[$IINDEX][$X] = 0
  4627.                     Return True
  4628.                 EndIf
  4629.             Next
  4630.             Return SetError(-3, 0, False)
  4631.         EndIf
  4632.     Next
  4633.     Return SetError(-2, 0, False)
  4634. EndFunc
  4635. Func __UDF_DEBUGPRINT($STEXT, $ILINE = @ScriptLineNumber, $ERR = @error, $EXT = @extended)
  4636.     ConsoleWrite("!===========================================================" & @CRLF & "+======================================================" & @CRLF & "-->Line(" & StringFormat("%04d", $ILINE) & "):" & @TAB & $STEXT & @CRLF & "+======================================================" & @CRLF)
  4637.     Return SetError($ERR, $EXT, 1)
  4638. EndFunc
  4639. Func __UDF_VALIDATECLASSNAME($HWND, $SCLASSNAMES)
  4640.     __UDF_DEBUGPRINT("This is for debugging only, set the debug variable to false before submitting")
  4641.     If _WinAPI_IsClassName($HWND, $SCLASSNAMES) Then Return True
  4642.     Local $SSEPARATOR = Opt("GUIDataSeparatorChar")
  4643.     $SCLASSNAMES = StringReplace($SCLASSNAMES, $SSEPARATOR, ",")
  4644.     __UDF_DEBUGPRINT("Invalid Class Type(s):" & @LF & @TAB & "Expecting Type(s): " & $SCLASSNAMES & @LF & @TAB & "Received Type : " & _WinAPI_GetClassName($HWND))
  4645.     Exit
  4646. EndFunc
  4647. Global $_GHCBLASTWND
  4648. Global $DEBUG_CB = False
  4649. Global Const $__COMBOBOXCONSTANT_CLASSNAME = "ComboBox"
  4650. Global Const $__COMBOBOXCONSTANT_EM_GETLINE = 196
  4651. Global Const $__COMBOBOXCONSTANT_EM_LINEINDEX = 187
  4652. Global Const $__COMBOBOXCONSTANT_EM_LINELENGTH = 193
  4653. Global Const $__COMBOBOXCONSTANT_EM_REPLACESEL = 194
  4654. Global Const $__COMBOBOXCONSTANT_WM_SETREDRAW = 11
  4655. Global Const $__COMBOBOXCONSTANT_WS_TABSTOP = 65536
  4656. Global Const $__COMBOBOXCONSTANT_DEFAULT_GUI_FONT = 17
  4657. Global Const $TAGCOMBOBOXINFO = "dword Size;long EditLeft;long EditTop;long EditRight;long EditBottom;long BtnLeft;long BtnTop;" & "long BtnRight;long BtnBottom;dword BtnState;hwnd hCombo;hwnd hEdit;hwnd hList"
  4658. Func _GUICtrlComboBox_AddDir($HWND, $SFILE, $IATTRIBUTES = 0, $FBRACKETS = True)
  4659.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4660.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4661.     If BitAND($IATTRIBUTES, $DDL_DRIVES) = $DDL_DRIVES And Not $FBRACKETS Then
  4662.         Local $STEXT
  4663.         Local $GUI_NO_BRACKETS = GUICreate("no brackets")
  4664.         Local $COMBO_NO_BRACKETS = GUICtrlCreateCombo("", 240, 40, 120, 120)
  4665.         Local $V_RET = GUICtrlSendMsg($COMBO_NO_BRACKETS, $CB_DIR, $IATTRIBUTES, $SFILE)
  4666.         For $I = 0 To _GUICtrlComboBox_GetCount($COMBO_NO_BRACKETS) - 1
  4667.             _GUICtrlComboBox_GetLBText($COMBO_NO_BRACKETS, $I, $STEXT)
  4668.             $STEXT = StringReplace(StringReplace(StringReplace($STEXT, "[", ""), "]", ":"), "-", "")
  4669.             _GUICtrlComboBox_InsertString($HWND, $STEXT)
  4670.         Next
  4671.         GUIDelete($GUI_NO_BRACKETS)
  4672.         Return $V_RET
  4673.     Else
  4674.         Return _SendMessage($HWND, $CB_DIR, $IATTRIBUTES, $SFILE, 0, "wparam", "wstr")
  4675.     EndIf
  4676. EndFunc
  4677. Func _GUICtrlComboBox_AddString($HWND, $STEXT)
  4678.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4679.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4680.     Return _SendMessage($HWND, $CB_ADDSTRING, 0, $STEXT, 0, "wparam", "wstr")
  4681. EndFunc
  4682. Func _GUICtrlComboBox_AutoComplete($HWND)
  4683.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4684.     If Not __GUICTRLCOMBOBOX_ISPRESSED("08") And Not __GUICTRLCOMBOBOX_ISPRESSED("2E") Then
  4685.         Local $SEDITTEXT = _GUICtrlComboBox_GetEditText($HWND)
  4686.         If StringLen($SEDITTEXT) Then
  4687.             Local $SINPUTTEXT
  4688.             Local $RET = _GUICtrlComboBox_FindString($HWND, $SEDITTEXT)
  4689.             If ($RET <> $CB_ERR) Then
  4690.                 _GUICtrlComboBox_GetLBText($HWND, $RET, $SINPUTTEXT)
  4691.                 _GUICtrlComboBox_SetEditText($HWND, $SINPUTTEXT)
  4692.                 _GUICtrlComboBox_SetEditSel($HWND, StringLen($SEDITTEXT), StringLen($SINPUTTEXT))
  4693.             EndIf
  4694.         EndIf
  4695.     EndIf
  4696. EndFunc
  4697. Func _GUICtrlComboBox_BeginUpdate($HWND)
  4698.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4699.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4700.     Return _SendMessage($HWND, $__COMBOBOXCONSTANT_WM_SETREDRAW) = 0
  4701. EndFunc
  4702. Func _GUICtrlComboBox_Create($HWND, $STEXT, $IX, $IY, $IWIDTH = 100, $IHEIGHT = 120, $ISTYLE = 2097218, $IEXSTYLE = 0)
  4703.     If Not IsHWnd($HWND) Then Return SetError(1, 0, 0)
  4704.     If Not IsString($STEXT) Then Return SetError(2, 0, 0)
  4705.     Local $ATEXT, $SDELIMITER = Opt("GUIDataSeparatorChar")
  4706.     If $IWIDTH = -1 Then $IWIDTH = 100
  4707.     If $IHEIGHT = -1 Then $IHEIGHT = 120
  4708.     Local Const $WS_VSCROLL = 2097152
  4709.     If $ISTYLE = -1 Then $ISTYLE = BitOR($WS_VSCROLL, $CBS_AUTOHSCROLL, $CBS_DROPDOWN)
  4710.     If $IEXSTYLE = -1 Then $IEXSTYLE = 0
  4711.     $ISTYLE = BitOR($ISTYLE, $__UDFGUICONSTANT_WS_CHILD, $__COMBOBOXCONSTANT_WS_TABSTOP, $__UDFGUICONSTANT_WS_VISIBLE)
  4712.     Local $NCTRLID = __UDF_GETNEXTGLOBALID($HWND)
  4713.     If @error Then Return SetError(@error, @extended, 0)
  4714.     Local $HCOMBO = _WinAPI_CreateWindowEx($IEXSTYLE, $__COMBOBOXCONSTANT_CLASSNAME, "", $ISTYLE, $IX, $IY, $IWIDTH, $IHEIGHT, $HWND, $NCTRLID)
  4715.     _WinAPI_SetFont($HCOMBO, _WinAPI_GetStockObject($__COMBOBOXCONSTANT_DEFAULT_GUI_FONT))
  4716.     If StringLen($STEXT) Then
  4717.         $ATEXT = StringSplit($STEXT, $SDELIMITER)
  4718.         For $X = 1 To $ATEXT[0]
  4719.             _GUICtrlComboBox_AddString($HCOMBO, $ATEXT[$X])
  4720.         Next
  4721.     EndIf
  4722.     Return $HCOMBO
  4723. EndFunc
  4724. Func _GUICtrlComboBox_DeleteString($HWND, $IINDEX)
  4725.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4726.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4727.     Return _SendMessage($HWND, $CB_DELETESTRING, $IINDEX)
  4728. EndFunc
  4729. Func _GUICtrlComboBox_Destroy(ByRef $HWND)
  4730.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4731.     If Not _WinAPI_IsClassName($HWND, $__COMBOBOXCONSTANT_CLASSNAME) Then Return SetError(2, 2, False)
  4732.     Local $DESTROYED = 0
  4733.     If IsHWnd($HWND) Then
  4734.         If _WinAPI_InProcess($HWND, $_GHCBLASTWND) Then
  4735.             Local $NCTRLID = _WinAPI_GetDlgCtrlID($HWND)
  4736.             Local $HPARENT = _WinAPI_GetParent($HWND)
  4737.             $DESTROYED = _WinAPI_DestroyWindow($HWND)
  4738.             Local $IRET = __UDF_FREEGLOBALID($HPARENT, $NCTRLID)
  4739.             If Not $IRET Then
  4740.             EndIf
  4741.         Else
  4742.             Return SetError(1, 1, False)
  4743.         EndIf
  4744.     Else
  4745.         $DESTROYED = GUICtrlDelete($HWND)
  4746.     EndIf
  4747.     If $DESTROYED Then $HWND = 0
  4748.     Return $DESTROYED <> 0
  4749. EndFunc
  4750. Func _GUICtrlComboBox_EndUpdate($HWND)
  4751.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4752.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4753.     Return _SendMessage($HWND, $__COMBOBOXCONSTANT_WM_SETREDRAW, 1) = 0
  4754. EndFunc
  4755. Func _GUICtrlComboBox_FindString($HWND, $STEXT, $IINDEX = -1)
  4756.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4757.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4758.     Return _SendMessage($HWND, $CB_FINDSTRING, $IINDEX, $STEXT, 0, "int", "wstr")
  4759. EndFunc
  4760. Func _GUICtrlComboBox_FindStringExact($HWND, $STEXT, $IINDEX = -1)
  4761.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4762.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4763.     Return _SendMessage($HWND, $CB_FINDSTRINGEXACT, $IINDEX, $STEXT, 0, "wparam", "wstr")
  4764. EndFunc
  4765. Func _GUICtrlComboBox_GetComboBoxInfo($HWND, ByRef $TINFO)
  4766.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4767.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4768.     $TINFO = DllStructCreate($TAGCOMBOBOXINFO)
  4769.     Local $PINFO = DllStructGetPtr($TINFO)
  4770.     Local $IINFO = DllStructGetSize($TINFO)
  4771.     DllStructSetData($TINFO, "Size", $IINFO)
  4772.     Return _SendMessage($HWND, $CB_GETCOMBOBOXINFO, 0, $PINFO, 0, "wparam", "ptr") <> 0
  4773. EndFunc
  4774. Func _GUICtrlComboBox_GetCount($HWND)
  4775.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4776.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4777.     Return _SendMessage($HWND, $CB_GETCOUNT)
  4778. EndFunc
  4779. Func _GUICtrlComboBox_GetCueBanner($HWND)
  4780.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4781.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4782.     Local $TTEXT = DllStructCreate("wchar[4096]")
  4783.     If _SendMessage($HWND, $CB_GETCUEBANNER, DllStructGetPtr($TTEXT), 4096) <> 1 Then Return SetError(-1, 0, "")
  4784.     Return _WinAPI_WideCharToMultiByte(DllStructGetPtr($TTEXT))
  4785. EndFunc
  4786. Func _GUICtrlComboBox_GetCurSel($HWND)
  4787.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4788.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4789.     Return _SendMessage($HWND, $CB_GETCURSEL)
  4790. EndFunc
  4791. Func _GUICtrlComboBox_GetDroppedControlRect($HWND)
  4792.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4793.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4794.     Local $ARECT[4]
  4795.     Local $TRECT = _GUICtrlComboBox_GetDroppedControlRectEx($HWND)
  4796.     $ARECT[0] = DllStructGetData($TRECT, "Left")
  4797.     $ARECT[1] = DllStructGetData($TRECT, "Top")
  4798.     $ARECT[2] = DllStructGetData($TRECT, "Right")
  4799.     $ARECT[3] = DllStructGetData($TRECT, "Bottom")
  4800.     Return $ARECT
  4801. EndFunc
  4802. Func _GUICtrlComboBox_GetDroppedControlRectEx($HWND)
  4803.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4804.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4805.     Local $TRECT = DllStructCreate($TAGRECT)
  4806.     _SendMessage($HWND, $CB_GETDROPPEDCONTROLRECT, 0, DllStructGetPtr($TRECT), 0, "wparam", "ptr")
  4807.     Return $TRECT
  4808. EndFunc
  4809. Func _GUICtrlComboBox_GetDroppedState($HWND)
  4810.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4811.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4812.     Return _SendMessage($HWND, $CB_GETDROPPEDSTATE) <> 0
  4813. EndFunc
  4814. Func _GUICtrlComboBox_GetDroppedWidth($HWND)
  4815.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4816.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4817.     Return _SendMessage($HWND, $CB_GETDROPPEDWIDTH)
  4818. EndFunc
  4819. Func _GUICtrlComboBox_GetEditSel($HWND)
  4820.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4821.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4822.     Local $TSTART = DllStructCreate("dword Start")
  4823.     Local $TEND = DllStructCreate("dword End")
  4824.     Local $IRET = _SendMessage($HWND, $CB_GETEDITSEL, DllStructGetPtr($TSTART), DllStructGetPtr($TEND), 0, "ptr", "ptr")
  4825.     If $IRET = 0 Then Return SetError($CB_ERR, $CB_ERR, $CB_ERR)
  4826.     Local $ASEL[2]
  4827.     $ASEL[0] = DllStructGetData($TSTART, "Start")
  4828.     $ASEL[1] = DllStructGetData($TEND, "End")
  4829.     Return $ASEL
  4830. EndFunc
  4831. Func _GUICtrlComboBox_GetEditText($HWND)
  4832.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4833.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4834.     Local $TINFO
  4835.     If _GUICtrlComboBox_GetComboBoxInfo($HWND, $TINFO) Then
  4836.         Local $HEDIT = DllStructGetData($TINFO, "hEdit")
  4837.         Local $ILINE = 0
  4838.         Local $IINDEX = _SendMessage($HEDIT, $__COMBOBOXCONSTANT_EM_LINEINDEX, $ILINE)
  4839.         Local $ILENGTH = _SendMessage($HEDIT, $__COMBOBOXCONSTANT_EM_LINELENGTH, $IINDEX)
  4840.         If $ILENGTH = 0 Then Return ""
  4841.         Local $TBUFFER = DllStructCreate("short Len;wchar Text[" & $ILENGTH + 2 & "]")
  4842.         DllStructSetData($TBUFFER, "Len", $ILENGTH + 2)
  4843.         Local $IRET = _SendMessage($HEDIT, $__COMBOBOXCONSTANT_EM_GETLINE, $ILINE, DllStructGetPtr($TBUFFER), 0, "wparam", "ptr")
  4844.         If $IRET = 0 Then Return SetError(-1, -1, "")
  4845.         Local $TTEXT = DllStructCreate("wchar Text[" & $ILENGTH + 1 & "]", DllStructGetPtr($TBUFFER))
  4846.         Return DllStructGetData($TTEXT, "Text")
  4847.     Else
  4848.         Return SetError(-1, -1, "")
  4849.     EndIf
  4850. EndFunc
  4851. Func _GUICtrlComboBox_GetExtendedUI($HWND)
  4852.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4853.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4854.     Return _SendMessage($HWND, $CB_GETEXTENDEDUI) <> 0
  4855. EndFunc
  4856. Func _GUICtrlComboBox_GetHorizontalExtent($HWND)
  4857.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4858.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4859.     Return _SendMessage($HWND, $CB_GETHORIZONTALEXTENT)
  4860. EndFunc
  4861. Func _GUICtrlComboBox_GetItemHeight($HWND, $IINDEX = -1)
  4862.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4863.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4864.     Return _SendMessage($HWND, $CB_GETITEMHEIGHT, $IINDEX)
  4865. EndFunc
  4866. Func _GUICtrlComboBox_GetLBText($HWND, $IINDEX, ByRef $STEXT)
  4867.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4868.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4869.     Local $ILEN = _GUICtrlComboBox_GetLBTextLen($HWND, $IINDEX)
  4870.     Local $TBUFFER = DllStructCreate("wchar Text[" & $ILEN + 1 & "]")
  4871.     Local $IRET = _SendMessage($HWND, $CB_GETLBTEXT, $IINDEX, DllStructGetPtr($TBUFFER), 0, "wparam", "ptr")
  4872.     If ($IRET == $CB_ERR) Then Return SetError($CB_ERR, $CB_ERR, $CB_ERR)
  4873.     $STEXT = DllStructGetData($TBUFFER, "Text")
  4874.     Return $IRET
  4875. EndFunc
  4876. Func _GUICtrlComboBox_GetLBTextLen($HWND, $IINDEX)
  4877.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4878.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4879.     Return _SendMessage($HWND, $CB_GETLBTEXTLEN, $IINDEX)
  4880. EndFunc
  4881. Func _GUICtrlComboBox_GetList($HWND)
  4882.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4883.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4884.     Local $SDELIMITER = Opt("GUIDataSeparatorChar")
  4885.     Local $SRESULT = "", $SITEM
  4886.     For $I = 0 To _GUICtrlComboBox_GetCount($HWND) - 1
  4887.         _GUICtrlComboBox_GetLBText($HWND, $I, $SITEM)
  4888.         $SRESULT &= $SITEM & $SDELIMITER
  4889.     Next
  4890.     Return StringTrimRight($SRESULT, StringLen($SDELIMITER))
  4891. EndFunc
  4892. Func _GUICtrlComboBox_GetListArray($HWND)
  4893.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4894.     Local $SDELIMITER = Opt("GUIDataSeparatorChar")
  4895.     Return StringSplit(_GUICtrlComboBox_GetList($HWND), $SDELIMITER)
  4896. EndFunc
  4897. Func _GUICtrlComboBox_GetLocale($HWND)
  4898.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4899.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4900.     Return _SendMessage($HWND, $CB_GETLOCALE)
  4901. EndFunc
  4902. Func _GUICtrlComboBox_GetLocaleCountry($HWND)
  4903.     Return _WinAPI_HiWord(_GUICtrlComboBox_GetLocale($HWND))
  4904. EndFunc
  4905. Func _GUICtrlComboBox_GetLocaleLang($HWND)
  4906.     Return _WinAPI_LoWord(_GUICtrlComboBox_GetLocale($HWND))
  4907. EndFunc
  4908. Func _GUICtrlComboBox_GetLocalePrimLang($HWND)
  4909.     Return _WinAPI_PrimaryLangId(_GUICtrlComboBox_GetLocaleLang($HWND))
  4910. EndFunc
  4911. Func _GUICtrlComboBox_GetLocaleSubLang($HWND)
  4912.     Return _WinAPI_SubLangId(_GUICtrlComboBox_GetLocaleLang($HWND))
  4913. EndFunc
  4914. Func _GUICtrlComboBox_GetMinVisible($HWND)
  4915.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4916.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4917.     Return _SendMessage($HWND, $CB_GETMINVISIBLE)
  4918. EndFunc
  4919. Func _GUICtrlComboBox_GetTopIndex($HWND)
  4920.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4921.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4922.     Return _SendMessage($HWND, $CB_GETTOPINDEX)
  4923. EndFunc
  4924. Func _GUICtrlComboBox_InitStorage($HWND, $INUM, $IBYTES)
  4925.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4926.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4927.     Return _SendMessage($HWND, $CB_INITSTORAGE, $INUM, $IBYTES)
  4928. EndFunc
  4929. Func _GUICtrlComboBox_InsertString($HWND, $STEXT, $IINDEX = -1)
  4930.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4931.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4932.     Return _SendMessage($HWND, $CB_INSERTSTRING, $IINDEX, $STEXT, 0, "wparam", "wstr")
  4933. EndFunc
  4934. Func _GUICtrlComboBox_LimitText($HWND, $ILIMIT = 0)
  4935.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4936.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4937.     _SendMessage($HWND, $CB_LIMITTEXT, $ILIMIT)
  4938. EndFunc
  4939. Func _GUICtrlComboBox_ReplaceEditSel($HWND, $STEXT)
  4940.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4941.     Local $TINFO
  4942.     If _GUICtrlComboBox_GetComboBoxInfo($HWND, $TINFO) Then
  4943.         Local $HEDIT = DllStructGetData($TINFO, "hEdit")
  4944.         _SendMessage($HEDIT, $__COMBOBOXCONSTANT_EM_REPLACESEL, True, $STEXT, 0, "wparam", "wstr")
  4945.     EndIf
  4946. EndFunc
  4947. Func _GUICtrlComboBox_ResetContent($HWND)
  4948.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4949.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4950.     _SendMessage($HWND, $CB_RESETCONTENT)
  4951. EndFunc
  4952. Func _GUICtrlComboBox_SelectString($HWND, $STEXT, $IINDEX = -1)
  4953.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4954.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4955.     Return _SendMessage($HWND, $CB_SELECTSTRING, $IINDEX, $STEXT, 0, "wparam", "wstr")
  4956. EndFunc
  4957. Func _GUICtrlComboBox_SetCueBanner($HWND, $STEXT)
  4958.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4959.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4960.     Local $TTEXT = _WinAPI_MultiByteToWideChar($STEXT)
  4961.     Return _SendMessage($HWND, $CB_SETCUEBANNER, 0, DllStructGetPtr($TTEXT)) = 1
  4962. EndFunc
  4963. Func _GUICtrlComboBox_SetCurSel($HWND, $IINDEX = -1)
  4964.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4965.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4966.     Return _SendMessage($HWND, $CB_SETCURSEL, $IINDEX)
  4967. EndFunc
  4968. Func _GUICtrlComboBox_SetDroppedWidth($HWND, $IWIDTH)
  4969.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4970.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4971.     Return _SendMessage($HWND, $CB_SETDROPPEDWIDTH, $IWIDTH)
  4972. EndFunc
  4973. Func _GUICtrlComboBox_SetEditSel($HWND, $ISTART, $ISTOP)
  4974.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4975.     If Not HWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4976.     Return _SendMessage($HWND, $CB_SETEDITSEL, 0, _WinAPI_MakeLong($ISTART, $ISTOP)) <> -1
  4977. EndFunc
  4978. Func _GUICtrlComboBox_SetEditText($HWND, $STEXT)
  4979.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4980.     _GUICtrlComboBox_SetEditSel($HWND, 0, -1)
  4981.     _GUICtrlComboBox_ReplaceEditSel($HWND, $STEXT)
  4982. EndFunc
  4983. Func _GUICtrlComboBox_SetExtendedUI($HWND, $FEXTENDED = False)
  4984.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4985.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4986.     Return _SendMessage($HWND, $CB_SETEXTENDEDUI, $FEXTENDED) = 0
  4987. EndFunc
  4988. Func _GUICtrlComboBox_SetHorizontalExtent($HWND, $IWIDTH)
  4989.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4990.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4991.     _SendMessage($HWND, $CB_SETHORIZONTALEXTENT, $IWIDTH)
  4992. EndFunc
  4993. Func _GUICtrlComboBox_SetItemHeight($HWND, $IHEIGHT, $ICOMPONENT = -1)
  4994.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  4995.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  4996.     Return _SendMessage($HWND, $CB_SETITEMHEIGHT, $ICOMPONENT, $IHEIGHT)
  4997. EndFunc
  4998. Func _GUICTRLCOMBOBOX_SETLOCALE($HWND, $ILOCAL)
  4999.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  5000.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  5001.     Return _SendMessage($HWND, $CB_SETLOCALE, $ILOCAL)
  5002. EndFunc
  5003. Func _GUICtrlComboBox_SetMinVisible($HWND, $IMINIMUM)
  5004.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  5005.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  5006.     Return _SendMessage($HWND, $CB_SETMINVISIBLE, $IMINIMUM) <> 0
  5007. EndFunc
  5008. Func _GUICtrlComboBox_SetTopIndex($HWND, $IINDEX)
  5009.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  5010.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  5011.     Return _SendMessage($HWND, $CB_SETTOPINDEX, $IINDEX) = 0
  5012. EndFunc
  5013. Func _GUICtrlComboBox_ShowDropDown($HWND, $FSHOW = False)
  5014.     If $DEBUG_CB Then __UDF_VALIDATECLASSNAME($HWND, $__COMBOBOXCONSTANT_CLASSNAME)
  5015.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  5016.     _SendMessage($HWND, $CB_SHOWDROPDOWN, $FSHOW)
  5017. EndFunc
  5018. Func __GUICTRLCOMBOBOX_ISPRESSED($SHEXKEY, $VDLL = "user32.dll")
  5019.     Local $A_R = DllCall($VDLL, "short", "GetAsyncKeyState", "int", "0x" & $SHEXKEY)
  5020.     If @error Then Return SetError(@error, @extended, False)
  5021.     Return BitAND($A_R[0], 32768) <> 0
  5022. EndFunc
  5023. Global Const $GUI_EVENT_CLOSE = -3
  5024. Global Const $GUI_EVENT_MINIMIZE = -4
  5025. Global Const $GUI_EVENT_RESTORE = -5
  5026. Global Const $GUI_EVENT_MAXIMIZE = -6
  5027. Global Const $GUI_EVENT_PRIMARYDOWN = -7
  5028. Global Const $GUI_EVENT_PRIMARYUP = -8
  5029. Global Const $GUI_EVENT_SECONDARYDOWN = -9
  5030. Global Const $GUI_EVENT_SECONDARYUP = -10
  5031. Global Const $GUI_EVENT_MOUSEMOVE = -11
  5032. Global Const $GUI_EVENT_RESIZED = -12
  5033. Global Const $GUI_EVENT_DROPPED = -13
  5034. Global Const $GUI_RUNDEFMSG = "GUI_RUNDEFMSG"
  5035. Global Const $GUI_AVISTOP = 0
  5036. Global Const $GUI_AVISTART = 1
  5037. Global Const $GUI_AVICLOSE = 2
  5038. Global Const $GUI_CHECKED = 1
  5039. Global Const $GUI_INDETERMINATE = 2
  5040. Global Const $GUI_UNCHECKED = 4
  5041. Global Const $GUI_DROPACCEPTED = 8
  5042. Global Const $GUI_NODROPACCEPTED = 4096
  5043. Global Const $GUI_ACCEPTFILES = $GUI_DROPACCEPTED
  5044. Global Const $GUI_SHOW = 16
  5045. Global Const $GUI_HIDE = 32
  5046. Global Const $GUI_ENABLE = 64
  5047. Global Const $GUI_DISABLE = 128
  5048. Global Const $GUI_FOCUS = 256
  5049. Global Const $GUI_NOFOCUS = 8192
  5050. Global Const $GUI_DEFBUTTON = 512
  5051. Global Const $GUI_EXPAND = 1024
  5052. Global Const $GUI_ONTOP = 2048
  5053. Global Const $GUI_FONTITALIC = 2
  5054. Global Const $GUI_FONTUNDER = 4
  5055. Global Const $GUI_FONTSTRIKE = 8
  5056. Global Const $GUI_DOCKAUTO = 1
  5057. Global Const $GUI_DOCKLEFT = 2
  5058. Global Const $GUI_DOCKRIGHT = 4
  5059. Global Const $GUI_DOCKHCENTER = 8
  5060. Global Const $GUI_DOCKTOP = 32
  5061. Global Const $GUI_DOCKBOTTOM = 64
  5062. Global Const $GUI_DOCKVCENTER = 128
  5063. Global Const $GUI_DOCKWIDTH = 256
  5064. Global Const $GUI_DOCKHEIGHT = 512
  5065. Global Const $GUI_DOCKSIZE = 768
  5066. Global Const $GUI_DOCKMENUBAR = 544
  5067. Global Const $GUI_DOCKSTATEBAR = 576
  5068. Global Const $GUI_DOCKALL = 802
  5069. Global Const $GUI_DOCKBORDERS = 102
  5070. Global Const $GUI_GR_CLOSE = 1
  5071. Global Const $GUI_GR_LINE = 2
  5072. Global Const $GUI_GR_BEZIER = 4
  5073. Global Const $GUI_GR_MOVE = 6
  5074. Global Const $GUI_GR_COLOR = 8
  5075. Global Const $GUI_GR_RECT = 10
  5076. Global Const $GUI_GR_ELLIPSE = 12
  5077. Global Const $GUI_GR_PIE = 14
  5078. Global Const $GUI_GR_DOT = 16
  5079. Global Const $GUI_GR_PIXEL = 18
  5080. Global Const $GUI_GR_HINT = 20
  5081. Global Const $GUI_GR_REFRESH = 22
  5082. Global Const $GUI_GR_PENSIZE = 24
  5083. Global Const $GUI_GR_NOBKCOLOR = -2
  5084. Global Const $GUI_BKCOLOR_DEFAULT = -1
  5085. Global Const $GUI_BKCOLOR_TRANSPARENT = -2
  5086. Global Const $GUI_BKCOLOR_LV_ALTERNATE = -33554432
  5087. Global Const $GUI_WS_EX_PARENTDRAG = 1048576
  5088. Global Const $ES_LEFT = 0
  5089. Global Const $ES_CENTER = 1
  5090. Global Const $ES_RIGHT = 2
  5091. Global Const $ES_MULTILINE = 4
  5092. Global Const $ES_UPPERCASE = 8
  5093. Global Const $ES_LOWERCASE = 16
  5094. Global Const $ES_PASSWORD = 32
  5095. Global Const $ES_AUTOVSCROLL = 64
  5096. Global Const $ES_AUTOHSCROLL = 128
  5097. Global Const $ES_NOHIDESEL = 256
  5098. Global Const $ES_OEMCONVERT = 1024
  5099. Global Const $ES_READONLY = 2048
  5100. Global Const $ES_WANTRETURN = 4096
  5101. Global Const $ES_NUMBER = 8192
  5102. Global Const $EC_ERR = -1
  5103. Global Const $ECM_FIRST = 5376
  5104. Global Const $EM_CANUNDO = 198
  5105. Global Const $EM_CHARFROMPOS = 215
  5106. Global Const $EM_EMPTYUNDOBUFFER = 205
  5107. Global Const $EM_FMTLINES = 200
  5108. Global Const $EM_GETCUEBANNER = ($ECM_FIRST + 2)
  5109. Global Const $EM_GETFIRSTVISIBLELINE = 206
  5110. Global Const $EM_GETHANDLE = 189
  5111. Global Const $EM_GETIMESTATUS = 217
  5112. Global Const $EM_GETLIMITTEXT = 213
  5113. Global Const $EM_GETLINE = 196
  5114. Global Const $EM_GETLINECOUNT = 186
  5115. Global Const $EM_GETMARGINS = 212
  5116. Global Const $EM_GETMODIFY = 184
  5117. Global Const $EM_GETPASSWORDCHAR = 210
  5118. Global Const $EM_GETRECT = 178
  5119. Global Const $EM_GETSEL = 176
  5120. Global Const $EM_GETTHUMB = 190
  5121. Global Const $EM_GETWORDBREAKPROC = 209
  5122. Global Const $EM_HIDEBALLOONTIP = ($ECM_FIRST + 4)
  5123. Global Const $EM_LIMITTEXT = 197
  5124. Global Const $EM_LINEFROMCHAR = 201
  5125. Global Const $EM_LINEINDEX = 187
  5126. Global Const $EM_LINELENGTH = 193
  5127. Global Const $EM_LINESCROLL = 182
  5128. Global Const $EM_POSFROMCHAR = 214
  5129. Global Const $EM_REPLACESEL = 194
  5130. Global Const $EM_SCROLL = 181
  5131. Global Const $EM_SCROLLCARET = 183
  5132. Global Const $EM_SETCUEBANNER = ($ECM_FIRST + 1)
  5133. Global Const $EM_SETHANDLE = 188
  5134. Global Const $EM_SETIMESTATUS = 216
  5135. Global Const $EM_SETLIMITTEXT = $EM_LIMITTEXT
  5136. Global Const $EM_SETMARGINS = 211
  5137. Global Const $EM_SETMODIFY = 185
  5138. Global Const $EM_SETPASSWORDCHAR = 204
  5139. Global Const $EM_SETREADONLY = 207
  5140. Global Const $EM_SETRECT = 179
  5141. Global Const $EM_SETRECTNP = 180
  5142. Global Const $EM_SETSEL = 177
  5143. Global Const $EM_SETTABSTOPS = 203
  5144. Global Const $EM_SETWORDBREAKPROC = 208
  5145. Global Const $EM_SHOWBALLOONTIP = ($ECM_FIRST + 3)
  5146. Global Const $EM_UNDO = 199
  5147. Global Const $EC_LEFTMARGIN = 1
  5148. Global Const $EC_RIGHTMARGIN = 2
  5149. Global Const $EC_USEFONTINFO = 65535
  5150. Global Const $EMSIS_COMPOSITIONSTRING = 1
  5151. Global Const $EIMES_GETCOMPSTRATONCE = 1
  5152. Global Const $EIMES_CANCELCOMPSTRINFOCUS = 2
  5153. Global Const $EIMES_COMPLETECOMPSTRKILLFOCUS = 4
  5154. Global Const $EN_ALIGN_LTR_EC = 1792
  5155. Global Const $EN_ALIGN_RTL_EC = 1793
  5156. Global Const $EN_CHANGE = 768
  5157. Global Const $EN_ERRSPACE = 1280
  5158. Global Const $EN_HSCROLL = 1537
  5159. Global Const $EN_KILLFOCUS = 512
  5160. Global Const $EN_MAXTEXT = 1281
  5161. Global Const $EN_SETFOCUS = 256
  5162. Global Const $EN_UPDATE = 1024
  5163. Global Const $EN_VSCROLL = 1538
  5164. Global Const $TTI_NONE = 0
  5165. Global Const $TTI_INFO = 1
  5166. Global Const $TTI_WARNING = 2
  5167. Global Const $TTI_ERROR = 3
  5168. Global Const $TTI_INFO_LARGE = 4
  5169. Global Const $TTI_WARNING_LARGE = 5
  5170. Global Const $TTI_ERROR_LARGE = 6
  5171. Global Const $__EDITCONSTANT_WS_VSCROLL = 2097152
  5172. Global Const $__EDITCONSTANT_WS_HSCROLL = 1048576
  5173. Global Const $GUI_SS_DEFAULT_EDIT = BitOR($ES_WANTRETURN, $__EDITCONSTANT_WS_VSCROLL, $__EDITCONSTANT_WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL)
  5174. Global Const $GUI_SS_DEFAULT_INPUT = BitOR($ES_LEFT, $ES_AUTOHSCROLL)
  5175. $GO = 0
  5176. $HGUI = GUICreate("affectionBot v1.0", 400, 330)
  5177. Global $ARRAY1[8][10]
  5178. $I = 0
  5179. While ($I < 8)
  5180.     $II = 0
  5181.     While ($II < 10)
  5182.         $ARRAY1[$I][$II] = GUICtrlCreateCheckbox("", $II * 30 + 100, $I * 30 + 50, 20, 20)
  5183.         $II = $II + 1
  5184.     WEnd
  5185.     $I = $I + 1
  5186. WEnd
  5187. Global $ARRAY2[8]
  5188. $I = 0
  5189. While ($I < 8)
  5190.     $ARRAY2[$I] = GUICtrlCreateCheckbox("", 20, $I * 30 + 50, 20, 20)
  5191.     $I = $I + 1
  5192. WEnd
  5193. $HLABEL1 = GUICtrlCreateLabel("Select", 10, 5, 50, 15)
  5194. $HLABEL2 = GUICtrlCreateLabel("Row", 15, 25, 50, 15)
  5195. $HLABEL3 = GUICtrlCreateLabel("Q: Start", 100, 300, 50, 20)
  5196. $HLABEL4 = GUICtrlCreateLabel("E: Exit", 200, 300, 50, 20)
  5197. $HLABEL5 = GUICtrlCreateLabel("STOPPED", 300, 290, 50, 20)
  5198. $HLABEL7 = GUICtrlCreateLabel("STOPPED", 300, 310, 50, 20)
  5199. $HLABEL6 = GUICtrlCreateLabel("Don't click things while this is on, bad things happen.", 100, 10, 300, 20)
  5200. $HLABEL8 = GUICtrlCreateLabel("HOW TO USE: Open Inv(left side), Click boxes to use, Press Q.", 50, 30, 400, 20)
  5201. HotKeySet("q", "FStart")
  5202. Func FSTART()
  5203.     $WINDOWNAME = "Star Wars: The Old Republic"
  5204.     WinMove($WINDOWNAME, "", 0, 0, 800, 600)
  5205.     $I = 0
  5206.     $II = 0
  5207.     $GO = 1
  5208.     GUICtrlSetData($HLABEL5, "STARTED")
  5209. EndFunc
  5210. HotKeySet("e", "FQuit")
  5211. Func FQUIT()
  5212.     $GO = 0
  5213.     GUICtrlSetData($HLABEL5, "STOPPED")
  5214.     Exit
  5215. EndFunc
  5216. GUISetState(@SW_SHOW)
  5217. Global $STATES[8]
  5218. $IIIII = 0
  5219. While ($IIIII < 8)
  5220.     $STATES[$IIIII] = 0
  5221.     $IIIII = $IIIII + 1
  5222. WEnd
  5223. While (1)
  5224.     Sleep(100)
  5225.     $III = 0
  5226.     While ($III < 8)
  5227.         $CURR = GUICtrlRead($ARRAY2[$III])
  5228.         If ($CURR <> $STATES[$III]) Then
  5229.             $IIII = 0
  5230.             While ($IIII < 10)
  5231.                 GUICtrlSetState($ARRAY1[$III][$IIII], $CURR)
  5232.                 $IIII = $IIII + 1
  5233.             WEnd
  5234.         EndIf
  5235.         $STATES[$III] = $CURR
  5236.         $III = $III + 1
  5237.     WEnd
  5238.     While ($GO)
  5239.         If (GUICtrlRead($ARRAY1[$I][$II]) = 1) Then
  5240.             MouseMove(64 + $II * 28, 214 + $I * 28, 5)
  5241.             Sleep(400)
  5242.             MouseClick("right")
  5243.             Sleep(400)
  5244.             GUICtrlSetState($ARRAY1[$I][$II], 4)
  5245.             $SLEEPCOUNT = 0
  5246.             While ($SLEEPCOUNT < 33)
  5247.                 Sleep(1000)
  5248.                 $SLEEPCOUNT = $SLEEPCOUNT + 1
  5249.                 GUICtrlSetData($HLABEL7, "Sleep: " & $SLEEPCOUNT)
  5250.             WEnd
  5251.         EndIf
  5252.         $II = $II + 1
  5253.         If ($II = 10) Then
  5254.             $II = 0
  5255.             $I = $I + 1
  5256.             If ($I > 7) Then
  5257.                 $GO = 0
  5258.                 GUICtrlSetData($HLABEL5, "DONE")
  5259.                 GUICtrlSetData($HLABEL7, "DONE")
  5260.             EndIf
  5261.         EndIf
  5262.     WEnd
  5263. WEnd
  5264.  
  5265. ; DeTokenise by myAut2Exe >The Open Source AutoIT/AutoHotKey script decompiler< 2.9 build(138)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement