Advertisement
Guest User

Untitled

a guest
Feb 29th, 2020
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 438.37 KB | None | 0 0
  1. Global Const $FC_NOOVERWRITE = 0
  2. Global Const $FC_OVERWRITE = 1
  3. Global Const $FC_CREATEPATH = 8
  4. Global Const $FT_MODIFIED = 0
  5. Global Const $FT_CREATED = 1
  6. Global Const $FT_ACCESSED = 2
  7. Global Const $FT_ARRAY = 0
  8. Global Const $FT_STRING = 1
  9. Global Const $FSF_CREATEBUTTON = 1
  10. Global Const $FSF_NEWDIALOG = 2
  11. Global Const $FSF_EDITCONTROL = 4
  12. Global Const $FT_NONRECURSIVE = 0
  13. Global Const $FT_RECURSIVE = 1
  14. Global Const $FO_READ = 0
  15. Global Const $FO_APPEND = 1
  16. Global Const $FO_OVERWRITE = 2
  17. Global Const $FO_CREATEPATH = 8
  18. Global Const $FO_BINARY = 16
  19. Global Const $FO_UNICODE = 32
  20. Global Const $FO_UTF16_LE = 32
  21. Global Const $FO_UTF16_BE = 64
  22. Global Const $FO_UTF8 = 128
  23. Global Const $FO_UTF8_NOBOM = 256
  24. Global Const $FO_ANSI = 512
  25. Global Const $FO_UTF16_LE_NOBOM = 1024
  26. Global Const $FO_UTF16_BE_NOBOM = 2048
  27. Global Const $FO_UTF8_FULL = 16384
  28. Global Const $FO_FULLFILE_DETECT = 16384
  29. Global Const $EOF = -1
  30. Global Const $FD_FILEMUSTEXIST = 1
  31. Global Const $FD_PATHMUSTEXIST = 2
  32. Global Const $FD_MULTISELECT = 4
  33. Global Const $FD_PROMPTCREATENEW = 8
  34. Global Const $FD_PROMPTOVERWRITE = 16
  35. Global Const $CREATE_NEW = 1
  36. Global Const $CREATE_ALWAYS = 2
  37. Global Const $OPEN_EXISTING = 3
  38. Global Const $OPEN_ALWAYS = 4
  39. Global Const $TRUNCATE_EXISTING = 5
  40. Global Const $INVALID_SET_FILE_POINTER = -1
  41. Global Const $FILE_BEGIN = 0
  42. Global Const $FILE_CURRENT = 1
  43. Global Const $FILE_END = 2
  44. Global Const $FILE_ATTRIBUTE_READONLY = 1
  45. Global Const $FILE_ATTRIBUTE_HIDDEN = 2
  46. Global Const $FILE_ATTRIBUTE_SYSTEM = 4
  47. Global Const $FILE_ATTRIBUTE_DIRECTORY = 16
  48. Global Const $FILE_ATTRIBUTE_ARCHIVE = 32
  49. Global Const $FILE_ATTRIBUTE_DEVICE = 64
  50. Global Const $FILE_ATTRIBUTE_NORMAL = 128
  51. Global Const $FILE_ATTRIBUTE_TEMPORARY = 256
  52. Global Const $FILE_ATTRIBUTE_SPARSE_FILE = 512
  53. Global Const $FILE_ATTRIBUTE_REPARSE_POINT = 1024
  54. Global Const $FILE_ATTRIBUTE_COMPRESSED = 2048
  55. Global Const $FILE_ATTRIBUTE_OFFLINE = 4096
  56. Global Const $FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 8192
  57. Global Const $FILE_ATTRIBUTE_ENCRYPTED = 16384
  58. Global Const $FILE_SHARE_READ = 1
  59. Global Const $FILE_SHARE_WRITE = 2
  60. Global Const $FILE_SHARE_DELETE = 4
  61. Global Const $FILE_SHARE_READWRITE = BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE)
  62. Global Const $FILE_SHARE_ANY = BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE, $FILE_SHARE_DELETE)
  63. Global Const $GENERIC_ALL = 268435456
  64. Global Const $GENERIC_EXECUTE = 536870912
  65. Global Const $GENERIC_WRITE = 1073741824
  66. Global Const $GENERIC_READ = -2147483648
  67. Global Const $GENERIC_READWRITE = BitOR($GENERIC_READ, $GENERIC_WRITE)
  68. Global Const $FILE_ENCODING_UTF16LE = 32
  69. Global Const $FE_ENTIRE_UTF8 = 1
  70. Global Const $FE_PARTIALFIRST_UTF8 = 2
  71. Global Const $FN_FULLPATH = 0
  72. Global Const $FN_RELATIVEPATH = 1
  73. Global Const $FV_COMMENTS = "Comments"
  74. Global Const $FV_COMPANYNAME = "CompanyName"
  75. Global Const $FV_FILEDESCRIPTION = "FileDescription"
  76. Global Const $FV_FILEVERSION = "FileVersion"
  77. Global Const $FV_INTERNALNAME = "InternalName"
  78. Global Const $FV_LEGALCOPYRIGHT = "LegalCopyright"
  79. Global Const $FV_LEGALTRADEMARKS = "LegalTrademarks"
  80. Global Const $FV_ORIGINALFILENAME = "OriginalFilename"
  81. Global Const $FV_PRODUCTNAME = "ProductName"
  82. Global Const $FV_PRODUCTVERSION = "ProductVersion"
  83. Global Const $FV_PRIVATEBUILD = "PrivateBuild"
  84. Global Const $FV_SPECIALBUILD = "SpecialBuild"
  85. Global Const $FRTA_NOCOUNT = 0
  86. Global Const $FRTA_COUNT = 1
  87. Global Const $FRTA_INTARRAYS = 2
  88. Global Const $FRTA_ENTIRESPLIT = 4
  89. Global Const $FLTA_FILESFOLDERS = 0
  90. Global Const $FLTA_FILES = 1
  91. Global Const $FLTA_FOLDERS = 2
  92. Global Const $FLTAR_FILESFOLDERS = 0
  93. Global Const $FLTAR_FILES = 1
  94. Global Const $FLTAR_FOLDERS = 2
  95. Global Const $FLTAR_NOHIDDEN = 4
  96. Global Const $FLTAR_NOSYSTEM = 8
  97. Global Const $FLTAR_NOLINK = 16
  98. Global Const $FLTAR_NORECUR = 0
  99. Global Const $FLTAR_RECUR = 1
  100. Global Const $FLTAR_NOSORT = 0
  101. Global Const $FLTAR_SORT = 1
  102. Global Const $FLTAR_FASTSORT = 2
  103. Global Const $FLTAR_NOPATH = 0
  104. Global Const $FLTAR_RELPATH = 1
  105. Global Const $FLTAR_FULLPATH = 2
  106. Global Const $PATH_ORIGINAL = 0
  107. Global Const $PATH_DRIVE = 1
  108. Global Const $PATH_DIRECTORY = 2
  109. Global Const $PATH_FILENAME = 3
  110. Global Const $PATH_EXTENSION = 4
  111. Global Const $MB_OK = 0
  112. Global Const $MB_OKCANCEL = 1
  113. Global Const $MB_ABORTRETRYIGNORE = 2
  114. Global Const $MB_YESNOCANCEL = 3
  115. Global Const $MB_YESNO = 4
  116. Global Const $MB_RETRYCANCEL = 5
  117. Global Const $MB_CANCELTRYCONTINUE = 6
  118. Global Const $MB_HELP = 16384
  119. Global Const $MB_ICONSTOP = 16
  120. Global Const $MB_ICONERROR = 16
  121. Global Const $MB_ICONHAND = 16
  122. Global Const $MB_ICONQUESTION = 32
  123. Global Const $MB_ICONEXCLAMATION = 48
  124. Global Const $MB_ICONWARNING = 48
  125. Global Const $MB_ICONINFORMATION = 64
  126. Global Const $MB_ICONASTERISK = 64
  127. Global Const $MB_USERICON = 128
  128. Global Const $MB_DEFBUTTON1 = 0
  129. Global Const $MB_DEFBUTTON2 = 256
  130. Global Const $MB_DEFBUTTON3 = 512
  131. Global Const $MB_DEFBUTTON4 = 768
  132. Global Const $MB_APPLMODAL = 0
  133. Global Const $MB_SYSTEMMODAL = 4096
  134. Global Const $MB_TASKMODAL = 8192
  135. Global Const $MB_DEFAULT_DESKTOP_ONLY = 131072
  136. Global Const $MB_RIGHT = 524288
  137. Global Const $MB_RTLREADING = 1048576
  138. Global Const $MB_SETFOREGROUND = 65536
  139. Global Const $MB_TOPMOST = 262144
  140. Global Const $MB_SERVICE_NOTIFICATION = 2097152
  141. Global Const $MB_RIGHTJUSTIFIED = $MB_RIGHT
  142. Global Const $IDTIMEOUT = -1
  143. Global Const $IDOK = 1
  144. Global Const $IDCANCEL = 2
  145. Global Const $IDABORT = 3
  146. Global Const $IDRETRY = 4
  147. Global Const $IDIGNORE = 5
  148. Global Const $IDYES = 6
  149. Global Const $IDNO = 7
  150. Global Const $IDCLOSE = 8
  151. Global Const $IDHELP = 9
  152. Global Const $IDTRYAGAIN = 10
  153. Global Const $IDCONTINUE = 11
  154. Global Const $STR_NOCASESENSE = 0
  155. Global Const $STR_CASESENSE = 1
  156. Global Const $STR_NOCASESENSEBASIC = 2
  157. Global Const $STR_STRIPLEADING = 1
  158. Global Const $STR_STRIPTRAILING = 2
  159. Global Const $STR_STRIPSPACES = 4
  160. Global Const $STR_STRIPALL = 8
  161. Global Const $STR_CHRSPLIT = 0
  162. Global Const $STR_ENTIRESPLIT = 1
  163. Global Const $STR_NOCOUNT = 2
  164. Global Const $STR_REGEXPMATCH = 0
  165. Global Const $STR_REGEXPARRAYMATCH = 1
  166. Global Const $STR_REGEXPARRAYFULLMATCH = 2
  167. Global Const $STR_REGEXPARRAYGLOBALMATCH = 3
  168. Global Const $STR_REGEXPARRAYGLOBALFULLMATCH = 4
  169. Global Const $STR_ENDISSTART = 0
  170. Global Const $STR_ENDNOTSTART = 1
  171. Global Const $SB_ANSI = 1
  172. Global Const $SB_UTF16LE = 2
  173. Global Const $SB_UTF16BE = 3
  174. Global Const $SB_UTF8 = 4
  175. Global Const $SE_UTF16 = 0
  176. Global Const $SE_ANSI = 1
  177. Global Const $SE_UTF8 = 2
  178. Global Const $STR_UTF16 = 0
  179. Global Const $STR_UCS2 = 1
  180. #Region Global Variables and Constants
  181. Global Const $FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
  182. Global Const $FORMAT_MESSAGE_IGNORE_INSERTS = 512
  183. Global Const $FORMAT_MESSAGE_FROM_STRING = 1024
  184. Global Const $FORMAT_MESSAGE_FROM_HMODULE = 2048
  185. Global Const $FORMAT_MESSAGE_FROM_SYSTEM = 4096
  186. Global Const $FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192
  187. #EndRegion Global Variables and Constants
  188. Func _WinAPI_Beep($IFREQ = 500, $IDURATION = 1000)
  189.     Local $ARESULT = DllCall("kernel32.dll", "bool", "Beep", "dword", $IFREQ, "dword", $IDURATION)
  190.     If @error Then Return SetError(@error, @extended, False)
  191.     Return $ARESULT[0]
  192. EndFunc   ;==>_WinAPI_Beep
  193. Func _WinAPI_FormatMessage($IFLAGS, $PSOURCE, $IMESSAGEID, $ILANGUAGEID, ByRef $PBUFFER, $ISIZE, $VARGUMENTS)
  194.     Local $SBUFFERTYPE = "struct*"
  195.     If IsString($PBUFFER) Then $SBUFFERTYPE = "wstr"
  196.     Local $ARESULT = DllCall("kernel32.dll", "dword", "FormatMessageW", "dword", $IFLAGS, "struct*", $PSOURCE, "dword", $IMESSAGEID, "dword", $ILANGUAGEID, $SBUFFERTYPE, $PBUFFER, "dword", $ISIZE, "ptr", $VARGUMENTS)
  197.     If @error Or Not $ARESULT[0] Then Return SetError(@error + 10, @extended, 0)
  198.     If $SBUFFERTYPE = "wstr" Then $PBUFFER = $ARESULT[5]
  199.     Return $ARESULT[0]
  200. EndFunc   ;==>_WinAPI_FormatMessage
  201. Func _WinAPI_GetErrorMessage($ICODE, $ILANGUAGE = 0, Const $_ICURRENTERROR = @error, Const $_ICURRENTEXTENDED = @extended)
  202.     Local $ARET = DllCall("kernel32.dll", "dword", "FormatMessageW", "dword", 4096, "ptr", 0, "dword", $ICODE, "dword", $ILANGUAGE, "wstr", "", "dword", 4096, "ptr", 0)
  203.     If @error Or Not $ARET[0] Then Return SetError(@error, @extended, "")
  204.     Return SetError($_ICURRENTERROR, $_ICURRENTEXTENDED, StringRegExpReplace($ARET[5], "[" & @LF & "," & @CR & "]*\Z", ""))
  205. EndFunc   ;==>_WINAPI_GETERRORMESSAGE
  206. Func _WinAPI_GetLastError(Const $_ICURRENTERROR = @error, Const $_ICURRENTEXTENDED = @extended)
  207.     Local $ARESULT = DllCall("kernel32.dll", "dword", "GetLastError")
  208.     Return SetError($_ICURRENTERROR, $_ICURRENTEXTENDED, $ARESULT[0])
  209. EndFunc   ;==>_WinAPI_GetLastError
  210. Func _WinAPI_GetLastErrorMessage(Const $_ICURRENTERROR = @error, Const $_ICURRENTEXTENDED = @extended)
  211.     Local $ILASTERROR = _WinAPI_GetLastError()
  212.     Local $TBUFFERPTR = DllStructCreate("ptr")
  213.     Local $NCOUNT = _WinAPI_FormatMessage(BitOR($FORMAT_MESSAGE_ALLOCATE_BUFFER, $FORMAT_MESSAGE_FROM_SYSTEM), 0, $ILASTERROR, 0, $TBUFFERPTR, 0, 0)
  214.     If @error Then Return SetError(-@error, @extended, "")
  215.     Local $STEXT = ""
  216.     Local $PBUFFER = DllStructGetData($TBUFFERPTR, 1)
  217.     If $PBUFFER Then
  218.         If $NCOUNT > 0 Then
  219.             Local $TBUFFER = DllStructCreate("wchar[" & ($NCOUNT + 1) & "]", $PBUFFER)
  220.             $STEXT = DllStructGetData($TBUFFER, 1)
  221.             If StringRight($STEXT, 2) = @CRLF Then $STEXT = StringTrimRight($STEXT, 2)
  222.         EndIf
  223.         DllCall("kernel32.dll", "handle", "LocalFree", "handle", $PBUFFER)
  224.     EndIf
  225.     Return SetError($_ICURRENTERROR, $_ICURRENTEXTENDED, $STEXT)
  226. EndFunc   ;==>_WinAPI_GetLastErrorMessage
  227. Func _WinAPI_MessageBeep($ITYPE = 1)
  228.     Local $ISOUND
  229.     Switch $ITYPE
  230.         Case 1
  231.             $ISOUND = 0
  232.         Case 2
  233.             $ISOUND = 16
  234.         Case 3
  235.             $ISOUND = 32
  236.         Case 4
  237.             $ISOUND = 48
  238.         Case 5
  239.             $ISOUND = 64
  240.         Case Else
  241.             $ISOUND = -1
  242.     EndSwitch
  243.     Local $ARESULT = DllCall("user32.dll", "bool", "MessageBeep", "uint", $ISOUND)
  244.     If @error Then Return SetError(@error, @extended, False)
  245.     Return $ARESULT[0]
  246. EndFunc   ;==>_WinAPI_MessageBeep
  247. Func _WinAPI_MsgBox($IFLAGS, $STITLE, $STEXT)
  248.     BlockInput(0)
  249.     MsgBox($IFLAGS, $STITLE, $STEXT & "      ")
  250. EndFunc   ;==>_WinAPI_MsgBox
  251. Func _WinAPI_SetLastError($IERRORCODE, Const $_ICURRENTERROR = @error, Const $_ICURRENTEXTENDED = @extended)
  252.     DllCall("kernel32.dll", "none", "SetLastError", "dword", $IERRORCODE)
  253.     Return SetError($_ICURRENTERROR, $_ICURRENTEXTENDED, Null)
  254. EndFunc   ;==>_WinAPI_SetLastError
  255. Func _WinAPI_ShowError($STEXT, $BEXIT = True)
  256.     BlockInput(0)
  257.     MsgBox($MB_SYSTEMMODAL, "Error", $STEXT & "      ")
  258.     If $BEXIT Then Exit
  259. EndFunc   ;==>_WinAPI_ShowError
  260. Func _WinAPI_ShowLastError($STEXT = "", $BABORT = False, $ILANGUAGE = 0, Const $_ICURRENTERROR = @error, Const $_ICURRENTEXTENDED = @extended)
  261.     Local $SERROR
  262.     Local $ILASTERROR = _WinAPI_GetLastError()
  263.     While 1
  264.         $SERROR = _WinAPI_GetErrorMessage($ILASTERROR, $ILANGUAGE)
  265.         If @error And $ILANGUAGE Then
  266.             $ILANGUAGE = 0
  267.         Else
  268.             ExitLoop
  269.         EndIf
  270.     WEnd
  271.     If StringStripWS($STEXT, $STR_STRIPLEADING + $STR_STRIPTRAILING) Then
  272.         $STEXT &= @CRLF & @CRLF
  273.     Else
  274.         $STEXT = ""
  275.     EndIf
  276.     _WinAPI_MsgBox(BitOR(262144, BitShift(16, -2 * (Not $ILASTERROR))), $ILASTERROR, $STEXT & $SERROR)
  277.     If $ILASTERROR Then
  278.         _WinAPI_SetLastError($ILASTERROR)
  279.         If $BABORT Then
  280.             Exit $ILASTERROR
  281.         EndIf
  282.     EndIf
  283.     Return SetError($_ICURRENTERROR, $_ICURRENTEXTENDED, 1)
  284. EndFunc   ;==>_WINAPI_SHOWLASTERROR
  285. Func _WinAPI_ShowMsg($STEXT)
  286.     _WinAPI_MsgBox($MB_SYSTEMMODAL, "Information", $STEXT)
  287. EndFunc   ;==>_WinAPI_ShowMsg
  288. Func __COMERRORFORMATING(ByRef $OCOMERROR, $SPREFIX = @TAB)
  289.     Local Const $STR_STRIPTRAILING = 2
  290.     Local $SERROR = "COM Error encountered in " & @ScriptName & " (" & $OCOMERROR.Scriptline & ") :" & @CRLF & $SPREFIX & "Number        " & @TAB & "= 0x" & Hex($OCOMERROR.Number, 8) & " (" & $OCOMERROR.Number & ")" & @CRLF & $SPREFIX & "WinDescription" & @TAB & "= " & StringStripWS($OCOMERROR.WinDescription, $STR_STRIPTRAILING) & @CRLF & $SPREFIX & "Description   " & @TAB & "= " & StringStripWS($OCOMERROR.Description, $STR_STRIPTRAILING) & @CRLF & $SPREFIX & "Source        " & @TAB & "= " & $OCOMERROR.Source & @CRLF & $SPREFIX & "HelpFile      " & @TAB & "= " & $OCOMERROR.HelpFile & @CRLF & $SPREFIX & "HelpContext   " & @TAB & "= " & $OCOMERROR.HelpContext & @CRLF & $SPREFIX & "LastDllError  " & @TAB & "= " & $OCOMERROR.LastDllError & @CRLF & $SPREFIX & "Retcode       " & @TAB & "= 0x" & Hex($OCOMERROR.retcode)
  291.     Return $SERROR
  292. EndFunc   ;==>__COMERRORFORMATING
  293. Global Const $PROV_RSA_FULL = 1
  294. Global Const $PROV_RSA_AES = 24
  295. Global Const $CRYPT_VERIFYCONTEXT = -268435456
  296. Global Const $HP_HASHSIZE = 4
  297. Global Const $HP_HASHVAL = 2
  298. Global Const $CRYPT_EXPORTABLE = 1
  299. Global Const $CRYPT_USERDATA = 1
  300. Global Const $KP_ALGID = 7
  301. Global Const $CALG_MD2 = 32769
  302. Global Const $CALG_MD4 = 32770
  303. Global Const $CALG_MD5 = 32771
  304. Global Const $CALG_SHA1 = 32772
  305. Global Const $CALG_SHA_256 = 32780
  306. Global Const $CALG_SHA_384 = 32781
  307. Global Const $CALG_SHA_512 = 32782
  308. Global Const $CALG_3DES = 26115
  309. Global Const $CALG_AES_128 = 26126
  310. Global Const $CALG_AES_192 = 26127
  311. Global Const $CALG_AES_256 = 26128
  312. Global Const $CALG_DES = 26113
  313. Global Const $CALG_RC2 = 26114
  314. Global Const $CALG_RC4 = 26625
  315. Global Const $CALG_USERKEY = 0
  316. Global $__G_ACRYPTINTERNALDATA[3]
  317. Func _Crypt_Startup()
  318.     If __CRYPT_REFCOUNT() = 0 Then
  319.         Local $HADVAPI32 = DllOpen("Advapi32.dll")
  320.         If $HADVAPI32 = -1 Then Return SetError(1001, 0, False)
  321.         __CRYPT_DLLHANDLESET($HADVAPI32)
  322.         Local $IPROVIDERID = $PROV_RSA_AES
  323.         Local $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptAcquireContext", "handle*", 0, "ptr", 0, "ptr", 0, "dword", $IPROVIDERID, "dword", $CRYPT_VERIFYCONTEXT)
  324.         If @error Or Not $ARET[0] Then
  325.             Local $IERROR = @error + 1002, $IEXTENDED = @extended
  326.             If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  327.             DllClose(__CRYPT_DLLHANDLE())
  328.             Return SetError($IERROR, $IEXTENDED, False)
  329.         Else
  330.             __CRYPT_CONTEXTSET($ARET[1])
  331.         EndIf
  332.     EndIf
  333.     __CRYPT_REFCOUNTINC()
  334.     Return True
  335. EndFunc   ;==>_Crypt_Startup
  336. Func _Crypt_Shutdown()
  337.     __CRYPT_REFCOUNTDEC()
  338.     If __CRYPT_REFCOUNT() = 0 Then
  339.         DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptReleaseContext", "handle", __CRYPT_CONTEXT(), "dword", 0)
  340.         DllClose(__CRYPT_DLLHANDLE())
  341.     EndIf
  342. EndFunc   ;==>_Crypt_Shutdown
  343. Func _Crypt_DeriveKey($VPASSWORD, $IALGID, $IHASHPASSWORDID = $CALG_MD5)
  344.     Local $ARET = 0, $TBUFF = 0, $HCRYPTHASH = 0, $IERROR = 0, $IEXTENDED = 0, $VRETURN = 0
  345.     _Crypt_Startup()
  346.     If @error Then Return SetError(@error, @extended, -1)
  347.     Do
  348.         $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptCreateHash", "handle", __CRYPT_CONTEXT(), "uint", $IHASHPASSWORDID, "ptr", 0, "dword", 0, "handle*", 0)
  349.         If @error Or Not $ARET[0] Then
  350.             $IERROR = @error + 10
  351.             $IEXTENDED = @extended
  352.             If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  353.             $VRETURN = -1
  354.             ExitLoop
  355.         EndIf
  356.         $HCRYPTHASH = $ARET[5]
  357.         $TBUFF = DllStructCreate("byte[" & BinaryLen($VPASSWORD) & "]")
  358.         DllStructSetData($TBUFF, 1, $VPASSWORD)
  359.         $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptHashData", "handle", $HCRYPTHASH, "struct*", $TBUFF, "dword", DllStructGetSize($TBUFF), "dword", $CRYPT_USERDATA)
  360.         If @error Or Not $ARET[0] Then
  361.             $IERROR = @error + 20
  362.             $IEXTENDED = @extended
  363.             If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  364.             $VRETURN = -1
  365.             ExitLoop
  366.         EndIf
  367.         $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptDeriveKey", "handle", __CRYPT_CONTEXT(), "uint", $IALGID, "handle", $HCRYPTHASH, "dword", $CRYPT_EXPORTABLE, "handle*", 0)
  368.         If @error Or Not $ARET[0] Then
  369.             $IERROR = @error + 30
  370.             $IEXTENDED = @extended
  371.             If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  372.             $VRETURN = -1
  373.             ExitLoop
  374.         EndIf
  375.         $VRETURN = $ARET[5]
  376.     Until True
  377.     If $HCRYPTHASH <> 0 Then DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptDestroyHash", "handle", $HCRYPTHASH)
  378.     Return SetError($IERROR, $IEXTENDED, $VRETURN)
  379. EndFunc   ;==>_Crypt_DeriveKey
  380. Func _Crypt_DestroyKey($HCRYPTKEY)
  381.     Local $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptDestroyKey", "handle", $HCRYPTKEY)
  382.     Local $IERROR = @error, $IEXTENDED = @extended
  383.     If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  384.     _Crypt_Shutdown()
  385.     If $IERROR Or Not $ARET[0] Then
  386.         Return SetError($IERROR + 10, $IEXTENDED, False)
  387.     Else
  388.         Return True
  389.     EndIf
  390. EndFunc   ;==>_Crypt_DestroyKey
  391. Func _Crypt_EncryptData($VDATA, $VCRYPTKEY, $IALGID, $BFINAL = True)
  392.     Switch $IALGID
  393.         Case $CALG_USERKEY
  394.             Local $ICALGUSED = __CRYPT_GETCALGFROMCRYPTKEY($VCRYPTKEY)
  395.             If @error Then Return SetError(@error, @extended, -1)
  396.             If $ICALGUSED = $CALG_RC4 Then ContinueCase
  397.         Case $CALG_RC4
  398.             If BinaryLen($VDATA) = 0 Then Return SetError(0, 0, Binary(""))
  399.     EndSwitch
  400.     Local $IREQBUFFSIZE = 0, $ARET = 0, $TBUFF = 0, $IERROR = 0, $IEXTENDED = 0, $VRETURN = 0
  401.     _Crypt_Startup()
  402.     If @error Then Return SetError(@error, @extended, -1)
  403.     Do
  404.         If $IALGID <> $CALG_USERKEY Then
  405.             $VCRYPTKEY = _Crypt_DeriveKey($VCRYPTKEY, $IALGID)
  406.             If @error Then
  407.                 $IERROR = @error
  408.                 $IEXTENDED = @extended
  409.                 $VRETURN = -1
  410.                 ExitLoop
  411.             EndIf
  412.         EndIf
  413.         $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptEncrypt", "handle", $VCRYPTKEY, "handle", 0, "bool", $BFINAL, "dword", 0, "ptr", 0, "dword*", BinaryLen($VDATA), "dword", 0)
  414.         If @error Or Not $ARET[0] Then
  415.             $IERROR = @error + 50
  416.             $IEXTENDED = @extended
  417.             If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  418.             $VRETURN = -1
  419.             ExitLoop
  420.         EndIf
  421.         $IREQBUFFSIZE = $ARET[6]
  422.         $TBUFF = DllStructCreate("byte[" & $IREQBUFFSIZE + 1 & "]")
  423.         DllStructSetData($TBUFF, 1, $VDATA)
  424.         $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptEncrypt", "handle", $VCRYPTKEY, "handle", 0, "bool", $BFINAL, "dword", 0, "struct*", $TBUFF, "dword*", BinaryLen($VDATA), "dword", $IREQBUFFSIZE)
  425.         If @error Or Not $ARET[0] Then
  426.             $IERROR = @error + 60
  427.             $IEXTENDED = @extended
  428.             If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  429.             $VRETURN = -1
  430.             ExitLoop
  431.         EndIf
  432.         $VRETURN = BinaryMid(DllStructGetData($TBUFF, 1), 1, $IREQBUFFSIZE)
  433.     Until True
  434.     If $IALGID <> $CALG_USERKEY Then _Crypt_DestroyKey($VCRYPTKEY)
  435.     _Crypt_Shutdown()
  436.     Return SetError($IERROR, $IEXTENDED, $VRETURN)
  437. EndFunc   ;==>_Crypt_EncryptData
  438. Func _Crypt_DecryptData($VDATA, $VCRYPTKEY, $IALGID, $BFINAL = True)
  439.     Switch $IALGID
  440.         Case $CALG_USERKEY
  441.             Local $ICALGUSED = __CRYPT_GETCALGFROMCRYPTKEY($VCRYPTKEY)
  442.             If @error Then Return SetError(@error, @extended, -1)
  443.             If $ICALGUSED = $CALG_RC4 Then ContinueCase
  444.         Case $CALG_RC4
  445.             If BinaryLen($VDATA) = 0 Then Return SetError(0, 0, Binary(""))
  446.     EndSwitch
  447.     Local $ARET = 0, $TBUFF = 0, $TTEMPSTRUCT = 0, $IERROR = 0, $IEXTENDED = 0, $IPLAINTEXTSIZE = 0, $VRETURN = 0
  448.     _Crypt_Startup()
  449.     If @error Then Return SetError(@error, @extended, -1)
  450.     Do
  451.         If $IALGID <> $CALG_USERKEY Then
  452.             $VCRYPTKEY = _Crypt_DeriveKey($VCRYPTKEY, $IALGID)
  453.             If @error Then
  454.                 $IERROR = @error
  455.                 $IEXTENDED = @extended
  456.                 $VRETURN = -1
  457.                 ExitLoop
  458.             EndIf
  459.         EndIf
  460.         $TBUFF = DllStructCreate("byte[" & BinaryLen($VDATA) + 1000 & "]")
  461.         If BinaryLen($VDATA) > 0 Then DllStructSetData($TBUFF, 1, $VDATA)
  462.         $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptDecrypt", "handle", $VCRYPTKEY, "handle", 0, "bool", $BFINAL, "dword", 0, "struct*", $TBUFF, "dword*", BinaryLen($VDATA))
  463.         If @error Or Not $ARET[0] Then
  464.             $IERROR = @error + 70
  465.             $IEXTENDED = @extended
  466.             If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  467.             $VRETURN = -1
  468.             ExitLoop
  469.         EndIf
  470.         $IPLAINTEXTSIZE = $ARET[6]
  471.         $TTEMPSTRUCT = DllStructCreate("byte[" & $IPLAINTEXTSIZE + 1 & "]", DllStructGetPtr($TBUFF))
  472.         $VRETURN = BinaryMid(DllStructGetData($TTEMPSTRUCT, 1), 1, $IPLAINTEXTSIZE)
  473.     Until True
  474.     If $IALGID <> $CALG_USERKEY Then _Crypt_DestroyKey($VCRYPTKEY)
  475.     _Crypt_Shutdown()
  476.     Return SetError($IERROR, $IEXTENDED, $VRETURN)
  477. EndFunc   ;==>_Crypt_DecryptData
  478. Func _Crypt_HashData($VDATA, $IALGID, $BFINAL = True, $HCRYPTHASH = 0)
  479.     Local $ARET = 0, $TBUFF = 0, $IERROR = 0, $IEXTENDED = 0, $IHASHSIZE = 0, $VRETURN = 0
  480.     _Crypt_Startup()
  481.     If @error Then Return SetError(@error, @extended, -1)
  482.     Do
  483.         If $HCRYPTHASH = 0 Then
  484.             $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptCreateHash", "handle", __CRYPT_CONTEXT(), "uint", $IALGID, "ptr", 0, "dword", 0, "handle*", 0)
  485.             If @error Or Not $ARET[0] Then
  486.                 $IERROR = @error + 10
  487.                 $IEXTENDED = @extended
  488.                 If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  489.                 $VRETURN = -1
  490.                 ExitLoop
  491.             EndIf
  492.             $HCRYPTHASH = $ARET[5]
  493.         EndIf
  494.         $TBUFF = DllStructCreate("byte[" & BinaryLen($VDATA) & "]")
  495.         DllStructSetData($TBUFF, 1, $VDATA)
  496.         $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptHashData", "handle", $HCRYPTHASH, "struct*", $TBUFF, "dword", DllStructGetSize($TBUFF), "dword", $CRYPT_USERDATA)
  497.         If @error Or Not $ARET[0] Then
  498.             $IERROR = @error + 20
  499.             $IEXTENDED = @extended
  500.             If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  501.             $VRETURN = -1
  502.             ExitLoop
  503.         EndIf
  504.         If $BFINAL Then
  505.             $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptGetHashParam", "handle", $HCRYPTHASH, "dword", $HP_HASHSIZE, "dword*", 0, "dword*", 4, "dword", 0)
  506.             If @error Or Not $ARET[0] Then
  507.                 $IERROR = @error + 30
  508.                 $IEXTENDED = @extended
  509.                 If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  510.                 $VRETURN = -1
  511.                 ExitLoop
  512.             EndIf
  513.             $IHASHSIZE = $ARET[3]
  514.             $TBUFF = DllStructCreate("byte[" & $IHASHSIZE & "]")
  515.             $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptGetHashParam", "handle", $HCRYPTHASH, "dword", $HP_HASHVAL, "struct*", $TBUFF, "dword*", $IHASHSIZE, "dword", 0)
  516.             If @error Or Not $ARET[0] Then
  517.                 $IERROR = @error + 40
  518.                 $IEXTENDED = @extended
  519.                 If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  520.                 $VRETURN = -1
  521.                 ExitLoop
  522.             EndIf
  523.             $VRETURN = DllStructGetData($TBUFF, 1)
  524.         Else
  525.             $VRETURN = $HCRYPTHASH
  526.         EndIf
  527.     Until True
  528.     If $HCRYPTHASH <> 0 And $BFINAL Then DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptDestroyHash", "handle", $HCRYPTHASH)
  529.     _Crypt_Shutdown()
  530.     Return SetError($IERROR, $IEXTENDED, $VRETURN)
  531. EndFunc   ;==>_Crypt_HashData
  532. Func _Crypt_HashFile($SFILEPATH, $IALGID)
  533.     Local $DTEMPDATA = 0, $HFILE = 0, $HHASHOBJECT = 0, $IERROR = 0, $IEXTENDED = 0, $VRETURN = 0
  534.     _Crypt_Startup()
  535.     If @error Then Return SetError(@error, @extended, -1)
  536.     Do
  537.         $HFILE = FileOpen($SFILEPATH, $FO_BINARY)
  538.         If $HFILE = -1 Then
  539.             $IERROR = 1
  540.             $IEXTENDED = _WinAPI_GetLastError()
  541.             $VRETURN = -1
  542.             ExitLoop
  543.         EndIf
  544.         Do
  545.             $DTEMPDATA = FileRead($HFILE, 512 * 1024)
  546.             If @error Then
  547.                 $VRETURN = _Crypt_HashData($DTEMPDATA, $IALGID, True, $HHASHOBJECT)
  548.                 If @error Then
  549.                     $IERROR = @error
  550.                     $IEXTENDED = @extended
  551.                     $VRETURN = -1
  552.                     ExitLoop 2
  553.                 EndIf
  554.                 ExitLoop 2
  555.             Else
  556.                 $HHASHOBJECT = _Crypt_HashData($DTEMPDATA, $IALGID, False, $HHASHOBJECT)
  557.                 If @error Then
  558.                     $IERROR = @error + 100
  559.                     $IEXTENDED = @extended
  560.                     $VRETURN = -1
  561.                     ExitLoop 2
  562.                 EndIf
  563.             EndIf
  564.         Until False
  565.     Until True
  566.     _Crypt_Shutdown()
  567.     If $HFILE <> -1 Then FileClose($HFILE)
  568.     Return SetError($IERROR, $IEXTENDED, $VRETURN)
  569. EndFunc   ;==>_Crypt_HashFile
  570. Func _Crypt_EncryptFile($SSOURCEFILE, $SDESTINATIONFILE, $VCRYPTKEY, $IALGID)
  571.     Local $DTEMPDATA = 0, $HINFILE = 0, $HOUTFILE = 0, $IERROR = 0, $IEXTENDED = 0, $IFILESIZE = FileGetSize($SSOURCEFILE), $IREAD = 0, $BRETURN = True
  572.     _Crypt_Startup()
  573.     If @error Then Return SetError(@error, @extended, -1)
  574.     Do
  575.         If $IALGID <> $CALG_USERKEY Then
  576.             $VCRYPTKEY = _Crypt_DeriveKey($VCRYPTKEY, $IALGID)
  577.             If @error Then
  578.                 $IERROR = @error
  579.                 $IEXTENDED = @extended
  580.                 $BRETURN = False
  581.                 ExitLoop
  582.             EndIf
  583.         EndIf
  584.         $HINFILE = FileOpen($SSOURCEFILE, $FO_BINARY)
  585.         If $HINFILE = -1 Then
  586.             $IERROR = 2
  587.             $IEXTENDED = _WinAPI_GetLastError()
  588.             $BRETURN = False
  589.             ExitLoop
  590.         EndIf
  591.         $HOUTFILE = FileOpen($SDESTINATIONFILE, $FO_OVERWRITE + $FO_CREATEPATH + $FO_BINARY)
  592.         If $HOUTFILE = -1 Then
  593.             $IERROR = 3
  594.             $IEXTENDED = _WinAPI_GetLastError()
  595.             $BRETURN = False
  596.             ExitLoop
  597.         EndIf
  598.         Do
  599.             $DTEMPDATA = FileRead($HINFILE, 1024 * 1024)
  600.             $IREAD += BinaryLen($DTEMPDATA)
  601.             If $IREAD = $IFILESIZE Then
  602.                 $DTEMPDATA = _Crypt_EncryptData($DTEMPDATA, $VCRYPTKEY, $CALG_USERKEY, True)
  603.                 If @error Then
  604.                     $IERROR = @error + 400
  605.                     $IEXTENDED = @extended
  606.                     $BRETURN = False
  607.                 EndIf
  608.                 FileWrite($HOUTFILE, $DTEMPDATA)
  609.                 ExitLoop 2
  610.             Else
  611.                 $DTEMPDATA = _Crypt_EncryptData($DTEMPDATA, $VCRYPTKEY, $CALG_USERKEY, False)
  612.                 If @error Then
  613.                     $IERROR = @error + 500
  614.                     $IEXTENDED = @extended
  615.                     $BRETURN = False
  616.                     ExitLoop 2
  617.                 EndIf
  618.                 FileWrite($HOUTFILE, $DTEMPDATA)
  619.             EndIf
  620.         Until False
  621.     Until True
  622.     If $IALGID <> $CALG_USERKEY Then _Crypt_DestroyKey($VCRYPTKEY)
  623.     _Crypt_Shutdown()
  624.     If $HINFILE <> -1 Then FileClose($HINFILE)
  625.     If $HOUTFILE <> -1 Then FileClose($HOUTFILE)
  626.     Return SetError($IERROR, $IEXTENDED, $BRETURN)
  627. EndFunc   ;==>_Crypt_EncryptFile
  628. Func _Crypt_DecryptFile($SSOURCEFILE, $SDESTINATIONFILE, $VCRYPTKEY, $IALGID)
  629.     Local $DTEMPDATA = 0, $HINFILE = 0, $HOUTFILE = 0, $IERROR = 0, $IEXTENDED = 0, $IFILESIZE = FileGetSize($SSOURCEFILE), $IREAD = 0, $BRETURN = True
  630.     _Crypt_Startup()
  631.     If @error Then Return SetError(@error, @extended, -1)
  632.     Do
  633.         If $IALGID <> $CALG_USERKEY Then
  634.             $VCRYPTKEY = _Crypt_DeriveKey($VCRYPTKEY, $IALGID)
  635.             If @error Then
  636.                 $IERROR = @error
  637.                 $IEXTENDED = @extended
  638.                 $BRETURN = False
  639.                 ExitLoop
  640.             EndIf
  641.         EndIf
  642.         $HINFILE = FileOpen($SSOURCEFILE, $FO_BINARY)
  643.         If $HINFILE = -1 Then
  644.             $IERROR = 2
  645.             $IEXTENDED = _WinAPI_GetLastError()
  646.             $BRETURN = False
  647.             ExitLoop
  648.         EndIf
  649.         $HOUTFILE = FileOpen($SDESTINATIONFILE, $FO_OVERWRITE + $FO_CREATEPATH + $FO_BINARY)
  650.         If $HOUTFILE = -1 Then
  651.             $IERROR = 3
  652.             $IEXTENDED = _WinAPI_GetLastError()
  653.             $BRETURN = False
  654.             ExitLoop
  655.         EndIf
  656.         Do
  657.             $DTEMPDATA = FileRead($HINFILE, 1024 * 1024)
  658.             $IREAD += BinaryLen($DTEMPDATA)
  659.             If $IREAD = $IFILESIZE Then
  660.                 $DTEMPDATA = _Crypt_DecryptData($DTEMPDATA, $VCRYPTKEY, $CALG_USERKEY, True)
  661.                 If @error Then
  662.                     $IERROR = @error + 400
  663.                     $IEXTENDED = @extended
  664.                     $BRETURN = False
  665.                 EndIf
  666.                 FileWrite($HOUTFILE, $DTEMPDATA)
  667.                 ExitLoop 2
  668.             Else
  669.                 $DTEMPDATA = _Crypt_DecryptData($DTEMPDATA, $VCRYPTKEY, $CALG_USERKEY, False)
  670.                 If @error Then
  671.                     $IERROR = @error + 500
  672.                     $IEXTENDED = @extended
  673.                     $BRETURN = False
  674.                     ExitLoop 2
  675.                 EndIf
  676.                 FileWrite($HOUTFILE, $DTEMPDATA)
  677.             EndIf
  678.         Until False
  679.     Until True
  680.     If $IALGID <> $CALG_USERKEY Then _Crypt_DestroyKey($VCRYPTKEY)
  681.     _Crypt_Shutdown()
  682.     If $HINFILE <> -1 Then FileClose($HINFILE)
  683.     If $HOUTFILE <> -1 Then FileClose($HOUTFILE)
  684.     Return SetError($IERROR, $IEXTENDED, $BRETURN)
  685. EndFunc   ;==>_Crypt_DecryptFile
  686. Func _Crypt_GenRandom($PBUFFER, $ISIZE)
  687.     _Crypt_Startup()
  688.     If @error Then Return SetError(@error, @extended, False)
  689.     Local $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptGenRandom", "handle", __CRYPT_CONTEXT(), "dword", $ISIZE, "struct*", $PBUFFER)
  690.     Local $IERROR = @error, $IEXTENDED = @extended
  691.     If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  692.     _Crypt_Shutdown()
  693.     If $IERROR Or (Not $ARET[0]) Then
  694.         Return SetError($IERROR + 10, $IEXTENDED, False)
  695.     Else
  696.         Return True
  697.     EndIf
  698. EndFunc   ;==>_CRYPT_GENRANDOM
  699. Func __CRYPT_REFCOUNT()
  700.     Return $__G_ACRYPTINTERNALDATA[0]
  701. EndFunc   ;==>__CRYPT_REFCOUNT
  702. Func __CRYPT_REFCOUNTINC()
  703.     $__G_ACRYPTINTERNALDATA[0] += 1
  704. EndFunc   ;==>__CRYPT_REFCOUNTINC
  705. Func __CRYPT_REFCOUNTDEC()
  706.     If $__G_ACRYPTINTERNALDATA[0] > 0 Then $__G_ACRYPTINTERNALDATA[0] -= 1
  707. EndFunc   ;==>__CRYPT_REFCOUNTDEC
  708. Func __CRYPT_DLLHANDLE()
  709.     Return $__G_ACRYPTINTERNALDATA[1]
  710. EndFunc   ;==>__CRYPT_DLLHANDLE
  711. Func __CRYPT_DLLHANDLESET($HADVAPI32)
  712.     $__G_ACRYPTINTERNALDATA[1] = $HADVAPI32
  713. EndFunc   ;==>__CRYPT_DLLHANDLESET
  714. Func __CRYPT_CONTEXT()
  715.     Return $__G_ACRYPTINTERNALDATA[2]
  716. EndFunc   ;==>__CRYPT_CONTEXT
  717. Func __CRYPT_CONTEXTSET($HCRYPTCONTEXT)
  718.     $__G_ACRYPTINTERNALDATA[2] = $HCRYPTCONTEXT
  719. EndFunc   ;==>__CRYPT_CONTEXTSET
  720. Func __CRYPT_GETCALGFROMCRYPTKEY($VCRYPTKEY)
  721.     Local $TALGID = DllStructCreate("uint")
  722.     Local $ARET = DllCall(__CRYPT_DLLHANDLE(), "bool", "CryptGetKeyParam", "handle", $VCRYPTKEY, "dword", $KP_ALGID, "struct*", $TALGID, "dword*", DllStructGetSize($TALGID), "dword", 0)
  723.     Local $IERROR = @error, $IEXTENDED = @extended
  724.     If Not $ARET[0] Then $IEXTENDED = _WinAPI_GetLastError()
  725.     If $IERROR Or Not $ARET[0] Then
  726.         Return SetError($IERROR + 80, $IEXTENDED, $CRYPT_USERDATA)
  727.     Else
  728.         Return DllStructGetData($TALGID, 1)
  729.     EndIf
  730. EndFunc   ;==>__CRYPT_GETCALGFROMCRYPTKEY
  731. Global Const $BS_GROUPBOX = 7
  732. Global Const $BS_BOTTOM = 2048
  733. Global Const $BS_CENTER = 768
  734. Global Const $BS_DEFPUSHBUTTON = 1
  735. Global Const $BS_LEFT = 256
  736. Global Const $BS_MULTILINE = 8192
  737. Global Const $BS_PUSHBOX = 10
  738. Global Const $BS_PUSHLIKE = 4096
  739. Global Const $BS_RIGHT = 512
  740. Global Const $BS_RIGHTBUTTON = 32
  741. Global Const $BS_TOP = 1024
  742. Global Const $BS_VCENTER = 3072
  743. Global Const $BS_FLAT = 32768
  744. Global Const $BS_ICON = 64
  745. Global Const $BS_BITMAP = 128
  746. Global Const $BS_NOTIFY = 16384
  747. Global Const $BS_SPLITBUTTON = 12
  748. Global Const $BS_DEFSPLITBUTTON = 13
  749. Global Const $BS_COMMANDLINK = 14
  750. Global Const $BS_DEFCOMMANDLINK = 15
  751. Global Const $BCSIF_GLYPH = 1
  752. Global Const $BCSIF_IMAGE = 2
  753. Global Const $BCSIF_STYLE = 4
  754. Global Const $BCSIF_SIZE = 8
  755. Global Const $BCSS_NOSPLIT = 1
  756. Global Const $BCSS_STRETCH = 2
  757. Global Const $BCSS_ALIGNLEFT = 4
  758. Global Const $BCSS_IMAGE = 8
  759. Global Const $BUTTON_IMAGELIST_ALIGN_LEFT = 0
  760. Global Const $BUTTON_IMAGELIST_ALIGN_RIGHT = 1
  761. Global Const $BUTTON_IMAGELIST_ALIGN_TOP = 2
  762. Global Const $BUTTON_IMAGELIST_ALIGN_BOTTOM = 3
  763. Global Const $BUTTON_IMAGELIST_ALIGN_CENTER = 4
  764. Global Const $BS_3STATE = 5
  765. Global Const $BS_AUTO3STATE = 6
  766. Global Const $BS_AUTOCHECKBOX = 3
  767. Global Const $BS_CHECKBOX = 2
  768. Global Const $BS_RADIOBUTTON = 4
  769. Global Const $BS_AUTORADIOBUTTON = 9
  770. Global Const $BS_OWNERDRAW = 11
  771. Global Const $GUI_SS_DEFAULT_BUTTON = 0
  772. Global Const $GUI_SS_DEFAULT_CHECKBOX = 0
  773. Global Const $GUI_SS_DEFAULT_GROUP = 0
  774. Global Const $GUI_SS_DEFAULT_RADIO = 0
  775. Global Const $BCM_FIRST = 5632
  776. Global Const $BCM_GETIDEALSIZE = ($BCM_FIRST + 1)
  777. Global Const $BCM_GETIMAGELIST = ($BCM_FIRST + 3)
  778. Global Const $BCM_GETNOTE = ($BCM_FIRST + 10)
  779. Global Const $BCM_GETNOTELENGTH = ($BCM_FIRST + 11)
  780. Global Const $BCM_GETSPLITINFO = ($BCM_FIRST + 8)
  781. Global Const $BCM_GETTEXTMARGIN = ($BCM_FIRST + 5)
  782. Global Const $BCM_SETDROPDOWNSTATE = ($BCM_FIRST + 6)
  783. Global Const $BCM_SETIMAGELIST = ($BCM_FIRST + 2)
  784. Global Const $BCM_SETNOTE = ($BCM_FIRST + 9)
  785. Global Const $BCM_SETSHIELD = ($BCM_FIRST + 12)
  786. Global Const $BCM_SETSPLITINFO = ($BCM_FIRST + 7)
  787. Global Const $BCM_SETTEXTMARGIN = ($BCM_FIRST + 4)
  788. Global Const $BM_CLICK = 245
  789. Global Const $BM_GETCHECK = 240
  790. Global Const $BM_GETIMAGE = 246
  791. Global Const $BM_GETSTATE = 242
  792. Global Const $BM_SETCHECK = 241
  793. Global Const $BM_SETDONTCLICK = 248
  794. Global Const $BM_SETIMAGE = 247
  795. Global Const $BM_SETSTATE = 243
  796. Global Const $BM_SETSTYLE = 244
  797. Global Const $BCN_FIRST = -1250
  798. Global Const $BCN_DROPDOWN = ($BCN_FIRST + 2)
  799. Global Const $BCN_HOTITEMCHANGE = ($BCN_FIRST + 1)
  800. Global Const $BN_CLICKED = 0
  801. Global Const $BN_PAINT = 1
  802. Global Const $BN_HILITE = 2
  803. Global Const $BN_UNHILITE = 3
  804. Global Const $BN_DISABLE = 4
  805. Global Const $BN_DOUBLECLICKED = 5
  806. Global Const $BN_SETFOCUS = 6
  807. Global Const $BN_KILLFOCUS = 7
  808. Global Const $BN_PUSHED = $BN_HILITE
  809. Global Const $BN_UNPUSHED = $BN_UNHILITE
  810. Global Const $BN_DBLCLK = $BN_DOUBLECLICKED
  811. Global Const $BST_CHECKED = 1
  812. Global Const $BST_INDETERMINATE = 2
  813. Global Const $BST_UNCHECKED = 0
  814. Global Const $BST_FOCUS = 8
  815. Global Const $BST_PUSHED = 4
  816. Global Const $BST_DONTCLICK = 128
  817. Global Const $CB_ERR = -1
  818. Global Const $CB_ERRATTRIBUTE = -3
  819. Global Const $CB_ERRREQUIRED = -4
  820. Global Const $CB_ERRSPACE = -2
  821. Global Const $CB_OKAY = 0
  822. Global Const $STATE_SYSTEM_INVISIBLE = 32768
  823. Global Const $STATE_SYSTEM_PRESSED = 8
  824. Global Const $CBS_AUTOHSCROLL = 64
  825. Global Const $CBS_DISABLENOSCROLL = 2048
  826. Global Const $CBS_DROPDOWN = 2
  827. Global Const $CBS_DROPDOWNLIST = 3
  828. Global Const $CBS_HASSTRINGS = 512
  829. Global Const $CBS_LOWERCASE = 16384
  830. Global Const $CBS_NOINTEGRALHEIGHT = 1024
  831. Global Const $CBS_OEMCONVERT = 128
  832. Global Const $CBS_OWNERDRAWFIXED = 16
  833. Global Const $CBS_OWNERDRAWVARIABLE = 32
  834. Global Const $CBS_SIMPLE = 1
  835. Global Const $CBS_SORT = 256
  836. Global Const $CBS_UPPERCASE = 8192
  837. Global Const $CBM_FIRST = 5888
  838. Global Const $CB_ADDSTRING = 323
  839. Global Const $CB_DELETESTRING = 324
  840. Global Const $CB_DIR = 325
  841. Global Const $CB_FINDSTRING = 332
  842. Global Const $CB_FINDSTRINGEXACT = 344
  843. Global Const $CB_GETCOMBOBOXINFO = 356
  844. Global Const $CB_GETCOUNT = 326
  845. Global Const $CB_GETCUEBANNER = ($CBM_FIRST + 4)
  846. Global Const $CB_GETCURSEL = 327
  847. Global Const $CB_GETDROPPEDCONTROLRECT = 338
  848. Global Const $CB_GETDROPPEDSTATE = 343
  849. Global Const $CB_GETDROPPEDWIDTH = 351
  850. Global Const $CB_GETEDITSEL = 320
  851. Global Const $CB_GETEXTENDEDUI = 342
  852. Global Const $CB_GETHORIZONTALEXTENT = 349
  853. Global Const $CB_GETITEMDATA = 336
  854. Global Const $CB_GETITEMHEIGHT = 340
  855. Global Const $CB_GETLBTEXT = 328
  856. Global Const $CB_GETLBTEXTLEN = 329
  857. Global Const $CB_GETLOCALE = 346
  858. Global Const $CB_GETMINVISIBLE = 5890
  859. Global Const $CB_GETTOPINDEX = 347
  860. Global Const $CB_INITSTORAGE = 353
  861. Global Const $CB_LIMITTEXT = 321
  862. Global Const $CB_RESETCONTENT = 331
  863. Global Const $CB_INSERTSTRING = 330
  864. Global Const $CB_SELECTSTRING = 333
  865. Global Const $CB_SETCUEBANNER = ($CBM_FIRST + 3)
  866. Global Const $CB_SETCURSEL = 334
  867. Global Const $CB_SETDROPPEDWIDTH = 352
  868. Global Const $CB_SETEDITSEL = 322
  869. Global Const $CB_SETEXTENDEDUI = 341
  870. Global Const $CB_SETHORIZONTALEXTENT = 350
  871. Global Const $CB_SETITEMDATA = 337
  872. Global Const $CB_SETITEMHEIGHT = 339
  873. Global Const $CB_SETLOCALE = 345
  874. Global Const $CB_SETMINVISIBLE = 5889
  875. Global Const $CB_SETTOPINDEX = 348
  876. Global Const $CB_SHOWDROPDOWN = 335
  877. Global Const $CBN_CLOSEUP = 8
  878. Global Const $CBN_DBLCLK = 2
  879. Global Const $CBN_DROPDOWN = 7
  880. Global Const $CBN_EDITCHANGE = 5
  881. Global Const $CBN_EDITUPDATE = 6
  882. Global Const $CBN_ERRSPACE = (-1)
  883. Global Const $CBN_KILLFOCUS = 4
  884. Global Const $CBN_SELCHANGE = 1
  885. Global Const $CBN_SELENDCANCEL = 10
  886. Global Const $CBN_SELENDOK = 9
  887. Global Const $CBN_SETFOCUS = 3
  888. Global Const $CBES_EX_CASESENSITIVE = 16
  889. Global Const $CBES_EX_NOEDITIMAGE = 1
  890. Global Const $CBES_EX_NOEDITIMAGEINDENT = 2
  891. Global Const $CBES_EX_NOSIZELIMIT = 8
  892. Global Const $__COMBOBOXCONSTANT_WM_USER = 1024
  893. Global Const $CBEM_DELETEITEM = $CB_DELETESTRING
  894. Global Const $CBEM_GETCOMBOCONTROL = ($__COMBOBOXCONSTANT_WM_USER + 6)
  895. Global Const $CBEM_GETEDITCONTROL = ($__COMBOBOXCONSTANT_WM_USER + 7)
  896. Global Const $CBEM_GETEXSTYLE = ($__COMBOBOXCONSTANT_WM_USER + 9)
  897. Global Const $CBEM_GETEXTENDEDSTYLE = ($__COMBOBOXCONSTANT_WM_USER + 9)
  898. Global Const $CBEM_GETIMAGELIST = ($__COMBOBOXCONSTANT_WM_USER + 3)
  899. Global Const $CBEM_GETITEMA = ($__COMBOBOXCONSTANT_WM_USER + 4)
  900. Global Const $CBEM_GETITEMW = ($__COMBOBOXCONSTANT_WM_USER + 13)
  901. Global Const $CBEM_GETUNICODEFORMAT = 8192 + 6
  902. Global Const $CBEM_HASEDITCHANGED = ($__COMBOBOXCONSTANT_WM_USER + 10)
  903. Global Const $CBEM_INSERTITEMA = ($__COMBOBOXCONSTANT_WM_USER + 1)
  904. Global Const $CBEM_INSERTITEMW = ($__COMBOBOXCONSTANT_WM_USER + 11)
  905. Global Const $CBEM_SETEXSTYLE = ($__COMBOBOXCONSTANT_WM_USER + 8)
  906. Global Const $CBEM_SETEXTENDEDSTYLE = ($__COMBOBOXCONSTANT_WM_USER + 14)
  907. Global Const $CBEM_SETIMAGELIST = ($__COMBOBOXCONSTANT_WM_USER + 2)
  908. Global Const $CBEM_SETITEMA = ($__COMBOBOXCONSTANT_WM_USER + 5)
  909. Global Const $CBEM_SETITEMW = ($__COMBOBOXCONSTANT_WM_USER + 12)
  910. Global Const $CBEM_SETUNICODEFORMAT = 8192 + 5
  911. Global Const $CBEM_SETWINDOWTHEME = 8192 + 11
  912. Global Const $CBEN_FIRST = (-800)
  913. Global Const $CBEN_LAST = (-830)
  914. Global Const $CBEN_BEGINEDIT = ($CBEN_FIRST - 4)
  915. Global Const $CBEN_DELETEITEM = ($CBEN_FIRST - 2)
  916. Global Const $CBEN_DRAGBEGINA = ($CBEN_FIRST - 8)
  917. Global Const $CBEN_DRAGBEGINW = ($CBEN_FIRST - 9)
  918. Global Const $CBEN_ENDEDITA = ($CBEN_FIRST - 5)
  919. Global Const $CBEN_ENDEDITW = ($CBEN_FIRST - 6)
  920. Global Const $CBEN_GETDISPINFO = ($CBEN_FIRST + 0)
  921. Global Const $CBEN_GETDISPINFOA = ($CBEN_FIRST + 0)
  922. Global Const $CBEN_GETDISPINFOW = ($CBEN_FIRST - 7)
  923. Global Const $CBEN_INSERTITEM = ($CBEN_FIRST - 1)
  924. Global Const $CBEIF_DI_SETITEM = 268435456
  925. Global Const $CBEIF_IMAGE = 2
  926. Global Const $CBEIF_INDENT = 16
  927. Global Const $CBEIF_LPARAM = 32
  928. Global Const $CBEIF_OVERLAY = 8
  929. Global Const $CBEIF_SELECTEDIMAGE = 4
  930. Global Const $CBEIF_TEXT = 1
  931. Global Const $GUI_SS_DEFAULT_COMBO = 2097218
  932. Global Const $GUI_EVENT_SINGLE = 0
  933. Global Const $GUI_EVENT_ARRAY = 1
  934. Global Const $GUI_EVENT_NONE = 0
  935. Global Const $GUI_EVENT_CLOSE = -3
  936. Global Const $GUI_EVENT_MINIMIZE = -4
  937. Global Const $GUI_EVENT_RESTORE = -5
  938. Global Const $GUI_EVENT_MAXIMIZE = -6
  939. Global Const $GUI_EVENT_PRIMARYDOWN = -7
  940. Global Const $GUI_EVENT_PRIMARYUP = -8
  941. Global Const $GUI_EVENT_SECONDARYDOWN = -9
  942. Global Const $GUI_EVENT_SECONDARYUP = -10
  943. Global Const $GUI_EVENT_MOUSEMOVE = -11
  944. Global Const $GUI_EVENT_RESIZED = -12
  945. Global Const $GUI_EVENT_DROPPED = -13
  946. Global Const $GUI_RUNDEFMSG = "GUI_RUNDEFMSG"
  947. Global Const $GUI_AVISTOP = 0
  948. Global Const $GUI_AVISTART = 1
  949. Global Const $GUI_AVICLOSE = 2
  950. Global Const $GUI_CHECKED = 1
  951. Global Const $GUI_INDETERMINATE = 2
  952. Global Const $GUI_UNCHECKED = 4
  953. Global Const $GUI_DROPACCEPTED = 8
  954. Global Const $GUI_NODROPACCEPTED = 4096
  955. Global Const $GUI_ACCEPTFILES = $GUI_DROPACCEPTED
  956. Global Const $GUI_SHOW = 16
  957. Global Const $GUI_HIDE = 32
  958. Global Const $GUI_ENABLE = 64
  959. Global Const $GUI_DISABLE = 128
  960. Global Const $GUI_FOCUS = 256
  961. Global Const $GUI_NOFOCUS = 8192
  962. Global Const $GUI_DEFBUTTON = 512
  963. Global Const $GUI_EXPAND = 1024
  964. Global Const $GUI_ONTOP = 2048
  965. Global Const $GUI_FONTNORMAL = 0
  966. Global Const $GUI_FONTITALIC = 2
  967. Global Const $GUI_FONTUNDER = 4
  968. Global Const $GUI_FONTSTRIKE = 8
  969. Global Const $GUI_DOCKAUTO = 1
  970. Global Const $GUI_DOCKLEFT = 2
  971. Global Const $GUI_DOCKRIGHT = 4
  972. Global Const $GUI_DOCKHCENTER = 8
  973. Global Const $GUI_DOCKTOP = 32
  974. Global Const $GUI_DOCKBOTTOM = 64
  975. Global Const $GUI_DOCKVCENTER = 128
  976. Global Const $GUI_DOCKWIDTH = 256
  977. Global Const $GUI_DOCKHEIGHT = 512
  978. Global Const $GUI_DOCKSIZE = 768
  979. Global Const $GUI_DOCKMENUBAR = 544
  980. Global Const $GUI_DOCKSTATEBAR = 576
  981. Global Const $GUI_DOCKALL = 802
  982. Global Const $GUI_DOCKBORDERS = 102
  983. Global Const $GUI_GR_CLOSE = 1
  984. Global Const $GUI_GR_LINE = 2
  985. Global Const $GUI_GR_BEZIER = 4
  986. Global Const $GUI_GR_MOVE = 6
  987. Global Const $GUI_GR_COLOR = 8
  988. Global Const $GUI_GR_RECT = 10
  989. Global Const $GUI_GR_ELLIPSE = 12
  990. Global Const $GUI_GR_PIE = 14
  991. Global Const $GUI_GR_DOT = 16
  992. Global Const $GUI_GR_PIXEL = 18
  993. Global Const $GUI_GR_HINT = 20
  994. Global Const $GUI_GR_REFRESH = 22
  995. Global Const $GUI_GR_PENSIZE = 24
  996. Global Const $GUI_GR_NOBKCOLOR = -2
  997. Global Const $GUI_BKCOLOR_DEFAULT = -1
  998. Global Const $GUI_BKCOLOR_TRANSPARENT = -2
  999. Global Const $GUI_BKCOLOR_LV_ALTERNATE = -33554432
  1000. Global Const $GUI_READ_DEFAULT = 0
  1001. Global Const $GUI_READ_EXTENDED = 1
  1002. Global Const $GUI_CURSOR_NOOVERRIDE = 0
  1003. Global Const $GUI_CURSOR_OVERRIDE = 1
  1004. Global Const $GUI_WS_EX_PARENTDRAG = 1048576
  1005. Global Const $WC_ANIMATE = "SysAnimate32"
  1006. Global Const $WC_BUTTON = "Button"
  1007. Global Const $WC_COMBOBOX = "ComboBox"
  1008. Global Const $WC_COMBOBOXEX = "ComboBoxEx32"
  1009. Global Const $WC_DATETIMEPICK = "SysDateTimePick32"
  1010. Global Const $WC_EDIT = "Edit"
  1011. Global Const $WC_HEADER = "SysHeader32"
  1012. Global Const $WC_HOTKEY = "msctls_hotkey32"
  1013. Global Const $WC_IPADDRESS = "SysIPAddress32"
  1014. Global Const $WC_LINK = "SysLink"
  1015. Global Const $WC_LISTBOX = "ListBox"
  1016. Global Const $WC_LISTVIEW = "SysListView32"
  1017. Global Const $WC_MONTHCAL = "SysMonthCal32"
  1018. Global Const $WC_NATIVEFONTCTL = "NativeFontCtl"
  1019. Global Const $WC_PAGESCROLLER = "SysPager"
  1020. Global Const $WC_PROGRESS = "msctls_progress32"
  1021. Global Const $WC_REBAR = "ReBarWindow32"
  1022. Global Const $WC_SCROLLBAR = "ScrollBar"
  1023. Global Const $WC_STATIC = "Static"
  1024. Global Const $WC_STATUSBAR = "msctls_statusbar32"
  1025. Global Const $WC_TABCONTROL = "SysTabControl32"
  1026. Global Const $WC_TOOLBAR = "ToolbarWindow32"
  1027. Global Const $WC_TOOLTIPS = "tooltips_class32"
  1028. Global Const $WC_TRACKBAR = "msctls_trackbar32"
  1029. Global Const $WC_TREEVIEW = "SysTreeView32"
  1030. Global Const $WC_UPDOWN = "msctls_updown32"
  1031. Global Const $WS_OVERLAPPED = 0
  1032. Global Const $WS_TILED = $WS_OVERLAPPED
  1033. Global Const $WS_MAXIMIZEBOX = 65536
  1034. Global Const $WS_MINIMIZEBOX = 131072
  1035. Global Const $WS_TABSTOP = 65536
  1036. Global Const $WS_GROUP = 131072
  1037. Global Const $WS_SIZEBOX = 262144
  1038. Global Const $WS_THICKFRAME = $WS_SIZEBOX
  1039. Global Const $WS_SYSMENU = 524288
  1040. Global Const $WS_HSCROLL = 1048576
  1041. Global Const $WS_VSCROLL = 2097152
  1042. Global Const $WS_DLGFRAME = 4194304
  1043. Global Const $WS_BORDER = 8388608
  1044. Global Const $WS_CAPTION = 12582912
  1045. Global Const $WS_OVERLAPPEDWINDOW = BitOR($WS_CAPTION, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_OVERLAPPED, $WS_SYSMENU, $WS_THICKFRAME)
  1046. Global Const $WS_TILEDWINDOW = $WS_OVERLAPPEDWINDOW
  1047. Global Const $WS_MAXIMIZE = 16777216
  1048. Global Const $WS_CLIPCHILDREN = 33554432
  1049. Global Const $WS_CLIPSIBLINGS = 67108864
  1050. Global Const $WS_DISABLED = 134217728
  1051. Global Const $WS_VISIBLE = 268435456
  1052. Global Const $WS_MINIMIZE = 536870912
  1053. Global Const $WS_ICONIC = $WS_MINIMIZE
  1054. Global Const $WS_CHILD = 1073741824
  1055. Global Const $WS_CHILDWINDOW = $WS_CHILD
  1056. Global Const $WS_POPUP = -2147483648
  1057. Global Const $WS_POPUPWINDOW = -2138570752
  1058. Global Const $DS_3DLOOK = 4
  1059. Global Const $DS_ABSALIGN = 1
  1060. Global Const $DS_CENTER = 2048
  1061. Global Const $DS_CENTERMOUSE = 4096
  1062. Global Const $DS_CONTEXTHELP = 8192
  1063. Global Const $DS_CONTROL = 1024
  1064. Global Const $DS_FIXEDSYS = 8
  1065. Global Const $DS_LOCALEDIT = 32
  1066. Global Const $DS_MODALFRAME = 128
  1067. Global Const $DS_NOFAILCREATE = 16
  1068. Global Const $DS_NOIDLEMSG = 256
  1069. Global Const $DS_SETFONT = 64
  1070. Global Const $DS_SETFOREGROUND = 512
  1071. Global Const $DS_SHELLFONT = BitOR($DS_FIXEDSYS, $DS_SETFONT)
  1072. Global Const $DS_SYSMODAL = 2
  1073. Global Const $WS_EX_ACCEPTFILES = 16
  1074. Global Const $WS_EX_APPWINDOW = 262144
  1075. Global Const $WS_EX_COMPOSITED = 33554432
  1076. Global Const $WS_EX_CONTROLPARENT = 65536
  1077. Global Const $WS_EX_CLIENTEDGE = 512
  1078. Global Const $WS_EX_CONTEXTHELP = 1024
  1079. Global Const $WS_EX_DLGMODALFRAME = 1
  1080. Global Const $WS_EX_LAYERED = 524288
  1081. Global Const $WS_EX_LAYOUTRTL = 4194304
  1082. Global Const $WS_EX_LEFT = 0
  1083. Global Const $WS_EX_LEFTSCROLLBAR = 16384
  1084. Global Const $WS_EX_LTRREADING = 0
  1085. Global Const $WS_EX_MDICHILD = 64
  1086. Global Const $WS_EX_NOACTIVATE = 134217728
  1087. Global Const $WS_EX_NOINHERITLAYOUT = 1048576
  1088. Global Const $WS_EX_NOPARENTNOTIFY = 4
  1089. Global Const $WS_EX_RIGHT = 4096
  1090. Global Const $WS_EX_RIGHTSCROLLBAR = 0
  1091. Global Const $WS_EX_RTLREADING = 8192
  1092. Global Const $WS_EX_STATICEDGE = 131072
  1093. Global Const $WS_EX_TOOLWINDOW = 128
  1094. Global Const $WS_EX_TOPMOST = 8
  1095. Global Const $WS_EX_TRANSPARENT = 32
  1096. Global Const $WS_EX_WINDOWEDGE = 256
  1097. Global Const $WS_EX_OVERLAPPEDWINDOW = BitOR($WS_EX_CLIENTEDGE, $WS_EX_WINDOWEDGE)
  1098. Global Const $WS_EX_PALETTEWINDOW = BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $WS_EX_WINDOWEDGE)
  1099. Global Const $WM_NULL = 0
  1100. Global Const $WM_CREATE = 1
  1101. Global Const $WM_DESTROY = 2
  1102. Global Const $WM_MOVE = 3
  1103. Global Const $WM_SIZEWAIT = 4
  1104. Global Const $WM_SIZE = 5
  1105. Global Const $WM_ACTIVATE = 6
  1106. Global Const $WM_SETFOCUS = 7
  1107. Global Const $WM_KILLFOCUS = 8
  1108. Global Const $WM_SETVISIBLE = 9
  1109. Global Const $WM_ENABLE = 10
  1110. Global Const $WM_SETREDRAW = 11
  1111. Global Const $WM_SETTEXT = 12
  1112. Global Const $WM_GETTEXT = 13
  1113. Global Const $WM_GETTEXTLENGTH = 14
  1114. Global Const $WM_PAINT = 15
  1115. Global Const $WM_CLOSE = 16
  1116. Global Const $WM_QUERYENDSESSION = 17
  1117. Global Const $WM_QUIT = 18
  1118. Global Const $WM_ERASEBKGND = 20
  1119. Global Const $WM_QUERYOPEN = 19
  1120. Global Const $WM_SYSCOLORCHANGE = 21
  1121. Global Const $WM_ENDSESSION = 22
  1122. Global Const $WM_SYSTEMERROR = 23
  1123. Global Const $WM_SHOWWINDOW = 24
  1124. Global Const $WM_CTLCOLOR = 25
  1125. Global Const $WM_SETTINGCHANGE = 26
  1126. Global Const $WM_WININICHANGE = 26
  1127. Global Const $WM_DEVMODECHANGE = 27
  1128. Global Const $WM_ACTIVATEAPP = 28
  1129. Global Const $WM_FONTCHANGE = 29
  1130. Global Const $WM_TIMECHANGE = 30
  1131. Global Const $WM_CANCELMODE = 31
  1132. Global Const $WM_SETCURSOR = 32
  1133. Global Const $WM_MOUSEACTIVATE = 33
  1134. Global Const $WM_CHILDACTIVATE = 34
  1135. Global Const $WM_QUEUESYNC = 35
  1136. Global Const $WM_GETMINMAXINFO = 36
  1137. Global Const $WM_LOGOFF = 37
  1138. Global Const $WM_PAINTICON = 38
  1139. Global Const $WM_ICONERASEBKGND = 39
  1140. Global Const $WM_NEXTDLGCTL = 40
  1141. Global Const $WM_ALTTABACTIVE = 41
  1142. Global Const $WM_SPOOLERSTATUS = 42
  1143. Global Const $WM_DRAWITEM = 43
  1144. Global Const $WM_MEASUREITEM = 44
  1145. Global Const $WM_DELETEITEM = 45
  1146. Global Const $WM_VKEYTOITEM = 46
  1147. Global Const $WM_CHARTOITEM = 47
  1148. Global Const $WM_SETFONT = 48
  1149. Global Const $WM_GETFONT = 49
  1150. Global Const $WM_SETHOTKEY = 50
  1151. Global Const $WM_GETHOTKEY = 51
  1152. Global Const $WM_FILESYSCHANGE = 52
  1153. Global Const $WM_ISACTIVEICON = 53
  1154. Global Const $WM_QUERYPARKICON = 54
  1155. Global Const $WM_QUERYDRAGICON = 55
  1156. Global Const $WM_WINHELP = 56
  1157. Global Const $WM_COMPAREITEM = 57
  1158. Global Const $WM_FULLSCREEN = 58
  1159. Global Const $WM_CLIENTSHUTDOWN = 59
  1160. Global Const $WM_DDEMLEVENT = 60
  1161. Global Const $WM_GETOBJECT = 61
  1162. Global Const $WM_CALCSCROLL = 63
  1163. Global Const $WM_TESTING = 64
  1164. Global Const $WM_COMPACTING = 65
  1165. Global Const $WM_OTHERWINDOWCREATED = 66
  1166. Global Const $WM_OTHERWINDOWDESTROYED = 67
  1167. Global Const $WM_COMMNOTIFY = 68
  1168. Global Const $WM_MEDIASTATUSCHANGE = 69
  1169. Global Const $WM_WINDOWPOSCHANGING = 70
  1170. Global Const $WM_WINDOWPOSCHANGED = 71
  1171. Global Const $WM_POWER = 72
  1172. Global Const $WM_COPYGLOBALDATA = 73
  1173. Global Const $WM_COPYDATA = 74
  1174. Global Const $WM_CANCELJOURNAL = 75
  1175. Global Const $WM_LOGONNOTIFY = 76
  1176. Global Const $WM_KEYF1 = 77
  1177. Global Const $WM_NOTIFY = 78
  1178. Global Const $WM_ACCESS_WINDOW = 79
  1179. Global Const $WM_INPUTLANGCHANGEREQUEST = 80
  1180. Global Const $WM_INPUTLANGCHANGE = 81
  1181. Global Const $WM_TCARD = 82
  1182. Global Const $WM_HELP = 83
  1183. Global Const $WM_USERCHANGED = 84
  1184. Global Const $WM_NOTIFYFORMAT = 85
  1185. Global Const $WM_QM_ACTIVATE = 96
  1186. Global Const $WM_HOOK_DO_CALLBACK = 97
  1187. Global Const $WM_SYSCOPYDATA = 98
  1188. Global Const $WM_FINALDESTROY = 112
  1189. Global Const $WM_MEASUREITEM_CLIENTDATA = 113
  1190. Global Const $WM_CONTEXTMENU = 123
  1191. Global Const $WM_STYLECHANGING = 124
  1192. Global Const $WM_STYLECHANGED = 125
  1193. Global Const $WM_DISPLAYCHANGE = 126
  1194. Global Const $WM_GETICON = 127
  1195. Global Const $WM_SETICON = 128
  1196. Global Const $WM_NCCREATE = 129
  1197. Global Const $WM_NCDESTROY = 130
  1198. Global Const $WM_NCCALCSIZE = 131
  1199. Global Const $WM_NCHITTEST = 132
  1200. Global Const $WM_NCPAINT = 133
  1201. Global Const $WM_NCACTIVATE = 134
  1202. Global Const $WM_GETDLGCODE = 135
  1203. Global Const $WM_SYNCPAINT = 136
  1204. Global Const $WM_SYNCTASK = 137
  1205. Global Const $WM_KLUDGEMINRECT = 139
  1206. Global Const $WM_LPKDRAWSWITCHWND = 140
  1207. Global Const $WM_UAHDESTROYWINDOW = 144
  1208. Global Const $WM_UAHDRAWMENU = 145
  1209. Global Const $WM_UAHDRAWMENUITEM = 146
  1210. Global Const $WM_UAHINITMENU = 147
  1211. Global Const $WM_UAHMEASUREMENUITEM = 148
  1212. Global Const $WM_UAHNCPAINTMENUPOPUP = 149
  1213. Global Const $WM_NCMOUSEMOVE = 160
  1214. Global Const $WM_NCLBUTTONDOWN = 161
  1215. Global Const $WM_NCLBUTTONUP = 162
  1216. Global Const $WM_NCLBUTTONDBLCLK = 163
  1217. Global Const $WM_NCRBUTTONDOWN = 164
  1218. Global Const $WM_NCRBUTTONUP = 165
  1219. Global Const $WM_NCRBUTTONDBLCLK = 166
  1220. Global Const $WM_NCMBUTTONDOWN = 167
  1221. Global Const $WM_NCMBUTTONUP = 168
  1222. Global Const $WM_NCMBUTTONDBLCLK = 169
  1223. Global Const $WM_NCXBUTTONDOWN = 171
  1224. Global Const $WM_NCXBUTTONUP = 172
  1225. Global Const $WM_NCXBUTTONDBLCLK = 173
  1226. Global Const $WM_NCUAHDRAWCAPTION = 174
  1227. Global Const $WM_NCUAHDRAWFRAME = 175
  1228. Global Const $WM_INPUT_DEVICE_CHANGE = 254
  1229. Global Const $WM_INPUT = 255
  1230. Global Const $WM_KEYDOWN = 256
  1231. Global Const $WM_KEYFIRST = 256
  1232. Global Const $WM_KEYUP = 257
  1233. Global Const $WM_CHAR = 258
  1234. Global Const $WM_DEADCHAR = 259
  1235. Global Const $WM_SYSKEYDOWN = 260
  1236. Global Const $WM_SYSKEYUP = 261
  1237. Global Const $WM_SYSCHAR = 262
  1238. Global Const $WM_SYSDEADCHAR = 263
  1239. Global Const $WM_YOMICHAR = 264
  1240. Global Const $WM_KEYLAST = 265
  1241. Global Const $WM_UNICHAR = 265
  1242. Global Const $WM_CONVERTREQUEST = 266
  1243. Global Const $WM_CONVERTRESULT = 267
  1244. Global Const $WM_IM_INFO = 268
  1245. Global Const $WM_IME_STARTCOMPOSITION = 269
  1246. Global Const $WM_IME_ENDCOMPOSITION = 270
  1247. Global Const $WM_IME_COMPOSITION = 271
  1248. Global Const $WM_IME_KEYLAST = 271
  1249. Global Const $WM_INITDIALOG = 272
  1250. Global Const $WM_COMMAND = 273
  1251. Global Const $WM_SYSCOMMAND = 274
  1252. Global Const $WM_TIMER = 275
  1253. Global Const $WM_HSCROLL = 276
  1254. Global Const $WM_VSCROLL = 277
  1255. Global Const $WM_INITMENU = 278
  1256. Global Const $WM_INITMENUPOPUP = 279
  1257. Global Const $WM_SYSTIMER = 280
  1258. Global Const $WM_GESTURE = 281
  1259. Global Const $WM_GESTURENOTIFY = 282
  1260. Global Const $WM_GESTUREINPUT = 283
  1261. Global Const $WM_GESTURENOTIFIED = 284
  1262. Global Const $WM_MENUSELECT = 287
  1263. Global Const $WM_MENUCHAR = 288
  1264. Global Const $WM_ENTERIDLE = 289
  1265. Global Const $WM_MENURBUTTONUP = 290
  1266. Global Const $WM_MENUDRAG = 291
  1267. Global Const $WM_MENUGETOBJECT = 292
  1268. Global Const $WM_UNINITMENUPOPUP = 293
  1269. Global Const $WM_MENUCOMMAND = 294
  1270. Global Const $WM_CHANGEUISTATE = 295
  1271. Global Const $WM_UPDATEUISTATE = 296
  1272. Global Const $WM_QUERYUISTATE = 297
  1273. Global Const $WM_LBTRACKPOINT = 305
  1274. Global Const $WM_CTLCOLORMSGBOX = 306
  1275. Global Const $WM_CTLCOLOREDIT = 307
  1276. Global Const $WM_CTLCOLORLISTBOX = 308
  1277. Global Const $WM_CTLCOLORBTN = 309
  1278. Global Const $WM_CTLCOLORDLG = 310
  1279. Global Const $WM_CTLCOLORSCROLLBAR = 311
  1280. Global Const $WM_CTLCOLORSTATIC = 312
  1281. Global Const $MN_GETHMENU = 481
  1282. Global Const $WM_PARENTNOTIFY = 528
  1283. Global Const $WM_ENTERMENULOOP = 529
  1284. Global Const $WM_EXITMENULOOP = 530
  1285. Global Const $WM_NEXTMENU = 531
  1286. Global Const $WM_SIZING = 532
  1287. Global Const $WM_CAPTURECHANGED = 533
  1288. Global Const $WM_MOVING = 534
  1289. Global Const $WM_POWERBROADCAST = 536
  1290. Global Const $WM_DEVICECHANGE = 537
  1291. Global Const $WM_MDICREATE = 544
  1292. Global Const $WM_MDIDESTROY = 545
  1293. Global Const $WM_MDIACTIVATE = 546
  1294. Global Const $WM_MDIRESTORE = 547
  1295. Global Const $WM_MDINEXT = 548
  1296. Global Const $WM_MDIMAXIMIZE = 549
  1297. Global Const $WM_MDITILE = 550
  1298. Global Const $WM_MDICASCADE = 551
  1299. Global Const $WM_MDIICONARRANGE = 552
  1300. Global Const $WM_MDIGETACTIVE = 553
  1301. Global Const $WM_DROPOBJECT = 554
  1302. Global Const $WM_QUERYDROPOBJECT = 555
  1303. Global Const $WM_BEGINDRAG = 556
  1304. Global Const $WM_DRAGLOOP = 557
  1305. Global Const $WM_DRAGSELECT = 558
  1306. Global Const $WM_DRAGMOVE = 559
  1307. Global Const $WM_MDISETMENU = 560
  1308. Global Const $WM_ENTERSIZEMOVE = 561
  1309. Global Const $WM_EXITSIZEMOVE = 562
  1310. Global Const $WM_DROPFILES = 563
  1311. Global Const $WM_MDIREFRESHMENU = 564
  1312. Global Const $WM_TOUCH = 576
  1313. Global Const $WM_IME_SETCONTEXT = 641
  1314. Global Const $WM_IME_NOTIFY = 642
  1315. Global Const $WM_IME_CONTROL = 643
  1316. Global Const $WM_IME_COMPOSITIONFULL = 644
  1317. Global Const $WM_IME_SELECT = 645
  1318. Global Const $WM_IME_CHAR = 646
  1319. Global Const $WM_IME_SYSTEM = 647
  1320. Global Const $WM_IME_REQUEST = 648
  1321. Global Const $WM_IME_KEYDOWN = 656
  1322. Global Const $WM_IME_KEYUP = 657
  1323. Global Const $WM_NCMOUSEHOVER = 672
  1324. Global Const $WM_MOUSEHOVER = 673
  1325. Global Const $WM_NCMOUSELEAVE = 674
  1326. Global Const $WM_MOUSELEAVE = 675
  1327. Global Const $WM_WTSSESSION_CHANGE = 689
  1328. Global Const $WM_TABLET_FIRST = 704
  1329. Global Const $WM_TABLET_LAST = 735
  1330. Global Const $WM_CUT = 768
  1331. Global Const $WM_COPY = 769
  1332. Global Const $WM_PASTE = 770
  1333. Global Const $WM_CLEAR = 771
  1334. Global Const $WM_UNDO = 772
  1335. Global Const $WM_PALETTEISCHANGING = 784
  1336. Global Const $WM_HOTKEY = 786
  1337. Global Const $WM_PALETTECHANGED = 785
  1338. Global Const $WM_SYSMENU = 787
  1339. Global Const $WM_HOOKMSG = 788
  1340. Global Const $WM_EXITPROCESS = 789
  1341. Global Const $WM_WAKETHREAD = 790
  1342. Global Const $WM_PRINT = 791
  1343. Global Const $WM_PRINTCLIENT = 792
  1344. Global Const $WM_APPCOMMAND = 793
  1345. Global Const $WM_QUERYNEWPALETTE = 783
  1346. Global Const $WM_THEMECHANGED = 794
  1347. Global Const $WM_UAHINIT = 795
  1348. Global Const $WM_DESKTOPNOTIFY = 796
  1349. Global Const $WM_CLIPBOARDUPDATE = 797
  1350. Global Const $WM_DWMCOMPOSITIONCHANGED = 798
  1351. Global Const $WM_DWMNCRENDERINGCHANGED = 799
  1352. Global Const $WM_DWMCOLORIZATIONCOLORCHANGED = 800
  1353. Global Const $WM_DWMWINDOWMAXIMIZEDCHANGE = 801
  1354. Global Const $WM_DWMEXILEFRAME = 802
  1355. Global Const $WM_DWMSENDICONICTHUMBNAIL = 803
  1356. Global Const $WM_MAGNIFICATION_STARTED = 804
  1357. Global Const $WM_MAGNIFICATION_ENDED = 805
  1358. Global Const $WM_DWMSENDICONICLIVEPREVIEWBITMAP = 806
  1359. Global Const $WM_DWMTHUMBNAILSIZECHANGED = 807
  1360. Global Const $WM_MAGNIFICATION_OUTPUT = 808
  1361. Global Const $WM_MEASURECONTROL = 816
  1362. Global Const $WM_GETACTIONTEXT = 817
  1363. Global Const $WM_FORWARDKEYDOWN = 819
  1364. Global Const $WM_FORWARDKEYUP = 820
  1365. Global Const $WM_GETTITLEBARINFOEX = 831
  1366. Global Const $WM_NOTIFYWOW = 832
  1367. Global Const $WM_HANDHELDFIRST = 856
  1368. Global Const $WM_HANDHELDLAST = 863
  1369. Global Const $WM_AFXFIRST = 864
  1370. Global Const $WM_AFXLAST = 895
  1371. Global Const $WM_PENWINFIRST = 896
  1372. Global Const $WM_PENWINLAST = 911
  1373. Global Const $WM_DDE_INITIATE = 992
  1374. Global Const $WM_DDE_TERMINATE = 993
  1375. Global Const $WM_DDE_ADVISE = 994
  1376. Global Const $WM_DDE_UNADVISE = 995
  1377. Global Const $WM_DDE_ACK = 996
  1378. Global Const $WM_DDE_DATA = 997
  1379. Global Const $WM_DDE_REQUEST = 998
  1380. Global Const $WM_DDE_POKE = 999
  1381. Global Const $WM_DDE_EXECUTE = 1000
  1382. Global Const $WM_DBNOTIFICATION = 1021
  1383. Global Const $WM_NETCONNECT = 1022
  1384. Global Const $WM_HIBERNATE = 1023
  1385. Global Const $WM_USER = 1024
  1386. Global Const $WM_APP = 32768
  1387. Global Const $NM_FIRST = 0
  1388. Global Const $NM_OUTOFMEMORY = $NM_FIRST - 1
  1389. Global Const $NM_CLICK = $NM_FIRST - 2
  1390. Global Const $NM_DBLCLK = $NM_FIRST - 3
  1391. Global Const $NM_RETURN = $NM_FIRST - 4
  1392. Global Const $NM_RCLICK = $NM_FIRST - 5
  1393. Global Const $NM_RDBLCLK = $NM_FIRST - 6
  1394. Global Const $NM_SETFOCUS = $NM_FIRST - 7
  1395. Global Const $NM_KILLFOCUS = $NM_FIRST - 8
  1396. Global Const $NM_CUSTOMDRAW = $NM_FIRST - 12
  1397. Global Const $NM_HOVER = $NM_FIRST - 13
  1398. Global Const $NM_NCHITTEST = $NM_FIRST - 14
  1399. Global Const $NM_KEYDOWN = $NM_FIRST - 15
  1400. Global Const $NM_RELEASEDCAPTURE = $NM_FIRST - 16
  1401. Global Const $NM_SETCURSOR = $NM_FIRST - 17
  1402. Global Const $NM_CHAR = $NM_FIRST - 18
  1403. Global Const $NM_TOOLTIPSCREATED = $NM_FIRST - 19
  1404. Global Const $NM_LDOWN = $NM_FIRST - 20
  1405. Global Const $NM_RDOWN = $NM_FIRST - 21
  1406. Global Const $NM_THEMECHANGED = $NM_FIRST - 22
  1407. Global Const $WM_MOUSEFIRST = 512
  1408. Global Const $WM_MOUSEMOVE = 512
  1409. Global Const $WM_LBUTTONDOWN = 513
  1410. Global Const $WM_LBUTTONUP = 514
  1411. Global Const $WM_LBUTTONDBLCLK = 515
  1412. Global Const $WM_RBUTTONDOWN = 516
  1413. Global Const $WM_RBUTTONUP = 517
  1414. Global Const $WM_RBUTTONDBLCLK = 518
  1415. Global Const $WM_MBUTTONDOWN = 519
  1416. Global Const $WM_MBUTTONUP = 520
  1417. Global Const $WM_MBUTTONDBLCLK = 521
  1418. Global Const $WM_MOUSEWHEEL = 522
  1419. Global Const $WM_XBUTTONDOWN = 523
  1420. Global Const $WM_XBUTTONUP = 524
  1421. Global Const $WM_XBUTTONDBLCLK = 525
  1422. Global Const $WM_MOUSEHWHEEL = 526
  1423. Global Const $PS_SOLID = 0
  1424. Global Const $PS_DASH = 1
  1425. Global Const $PS_DOT = 2
  1426. Global Const $PS_DASHDOT = 3
  1427. Global Const $PS_DASHDOTDOT = 4
  1428. Global Const $PS_NULL = 5
  1429. Global Const $PS_INSIDEFRAME = 6
  1430. Global Const $PS_USERSTYLE = 7
  1431. Global Const $PS_ALTERNATE = 8
  1432. Global Const $PS_ENDCAP_ROUND = 0
  1433. Global Const $PS_ENDCAP_SQUARE = 256
  1434. Global Const $PS_ENDCAP_FLAT = 512
  1435. Global Const $PS_JOIN_BEVEL = 4096
  1436. Global Const $PS_JOIN_MITER = 8192
  1437. Global Const $PS_JOIN_ROUND = 0
  1438. Global Const $PS_GEOMETRIC = 65536
  1439. Global Const $PS_COSMETIC = 0
  1440. Global Const $LWA_ALPHA = 2
  1441. Global Const $LWA_COLORKEY = 1
  1442. Global Const $RGN_AND = 1
  1443. Global Const $RGN_OR = 2
  1444. Global Const $RGN_XOR = 3
  1445. Global Const $RGN_DIFF = 4
  1446. Global Const $RGN_COPY = 5
  1447. Global Const $ERRORREGION = 0
  1448. Global Const $NULLREGION = 1
  1449. Global Const $SIMPLEREGION = 2
  1450. Global Const $COMPLEXREGION = 3
  1451. Global Const $TRANSPARENT = 1
  1452. Global Const $OPAQUE = 2
  1453. Global Const $CCM_FIRST = 8192
  1454. Global Const $CCM_GETUNICODEFORMAT = ($CCM_FIRST + 6)
  1455. Global Const $CCM_SETUNICODEFORMAT = ($CCM_FIRST + 5)
  1456. Global Const $CCM_SETBKCOLOR = $CCM_FIRST + 1
  1457. Global Const $CCM_SETCOLORSCHEME = $CCM_FIRST + 2
  1458. Global Const $CCM_GETCOLORSCHEME = $CCM_FIRST + 3
  1459. Global Const $CCM_GETDROPTARGET = $CCM_FIRST + 4
  1460. Global Const $CCM_SETWINDOWTHEME = $CCM_FIRST + 11
  1461. Global Const $GA_PARENT = 1
  1462. Global Const $GA_ROOT = 2
  1463. Global Const $GA_ROOTOWNER = 3
  1464. Global Const $SM_CXSCREEN = 0
  1465. Global Const $SM_CYSCREEN = 1
  1466. Global Const $SM_CXVSCROLL = 2
  1467. Global Const $SM_CYHSCROLL = 3
  1468. Global Const $SM_CYCAPTION = 4
  1469. Global Const $SM_CXBORDER = 5
  1470. Global Const $SM_CYBORDER = 6
  1471. Global Const $SM_CXFIXEDFRAME = 7
  1472. Global Const $SM_CXDLGFRAME = $SM_CXFIXEDFRAME
  1473. Global Const $SM_CYFIXEDFRAME = 8
  1474. Global Const $SM_CYDLGFRAME = $SM_CYFIXEDFRAME
  1475. Global Const $SM_CYVTHUMB = 9
  1476. Global Const $SM_CXHTHUMB = 10
  1477. Global Const $SM_CXICON = 11
  1478. Global Const $SM_CYICON = 12
  1479. Global Const $SM_CXCURSOR = 13
  1480. Global Const $SM_CYCURSOR = 14
  1481. Global Const $SM_CYMENU = 15
  1482. Global Const $SM_CXFULLSCREEN = 16
  1483. Global Const $SM_CYFULLSCREEN = 17
  1484. Global Const $SM_CYKANJIWINDOW = 18
  1485. Global Const $SM_MOUSEPRESENT = 19
  1486. Global Const $SM_CYVSCROLL = 20
  1487. Global Const $SM_CXHSCROLL = 21
  1488. Global Const $SM_DEBUG = 22
  1489. Global Const $SM_SWAPBUTTON = 23
  1490. Global Const $SM_RESERVED1 = 24
  1491. Global Const $SM_RESERVED2 = 25
  1492. Global Const $SM_RESERVED3 = 26
  1493. Global Const $SM_RESERVED4 = 27
  1494. Global Const $SM_CXMIN = 28
  1495. Global Const $SM_CYMIN = 29
  1496. Global Const $SM_CXSIZE = 30
  1497. Global Const $SM_CYSIZE = 31
  1498. Global Const $SM_CXSIZEFRAME = 32
  1499. Global Const $SM_CXFRAME = $SM_CXSIZEFRAME
  1500. Global Const $SM_CYSIZEFRAME = 33
  1501. Global Const $SM_CYFRAME = $SM_CYSIZEFRAME
  1502. Global Const $SM_CXMINTRACK = 34
  1503. Global Const $SM_CYMINTRACK = 35
  1504. Global Const $SM_CXDOUBLECLK = 36
  1505. Global Const $SM_CYDOUBLECLK = 37
  1506. Global Const $SM_CXICONSPACING = 38
  1507. Global Const $SM_CYICONSPACING = 39
  1508. Global Const $SM_MENUDROPALIGNMENT = 40
  1509. Global Const $SM_PENWINDOWS = 41
  1510. Global Const $SM_DBCSENABLED = 42
  1511. Global Const $SM_CMOUSEBUTTONS = 43
  1512. Global Const $SM_SECURE = 44
  1513. Global Const $SM_CXEDGE = 45
  1514. Global Const $SM_CYEDGE = 46
  1515. Global Const $SM_CXMINSPACING = 47
  1516. Global Const $SM_CYMINSPACING = 48
  1517. Global Const $SM_CXSMICON = 49
  1518. Global Const $SM_CYSMICON = 50
  1519. Global Const $SM_CYSMCAPTION = 51
  1520. Global Const $SM_CXSMSIZE = 52
  1521. Global Const $SM_CYSMSIZE = 53
  1522. Global Const $SM_CXMENUSIZE = 54
  1523. Global Const $SM_CYMENUSIZE = 55
  1524. Global Const $SM_ARRANGE = 56
  1525. Global Const $SM_CXMINIMIZED = 57
  1526. Global Const $SM_CYMINIMIZED = 58
  1527. Global Const $SM_CXMAXTRACK = 59
  1528. Global Const $SM_CYMAXTRACK = 60
  1529. Global Const $SM_CXMAXIMIZED = 61
  1530. Global Const $SM_CYMAXIMIZED = 62
  1531. Global Const $SM_NETWORK = 63
  1532. Global Const $SM_CLEANBOOT = 67
  1533. Global Const $SM_CXDRAG = 68
  1534. Global Const $SM_CYDRAG = 69
  1535. Global Const $SM_SHOWSOUNDS = 70
  1536. Global Const $SM_CXMENUCHECK = 71
  1537. Global Const $SM_CYMENUCHECK = 72
  1538. Global Const $SM_SLOWMACHINE = 73
  1539. Global Const $SM_MIDEASTENABLED = 74
  1540. Global Const $SM_MOUSEWHEELPRESENT = 75
  1541. Global Const $SM_XVIRTUALSCREEN = 76
  1542. Global Const $SM_YVIRTUALSCREEN = 77
  1543. Global Const $SM_CXVIRTUALSCREEN = 78
  1544. Global Const $SM_CYVIRTUALSCREEN = 79
  1545. Global Const $SM_CMONITORS = 80
  1546. Global Const $SM_SAMEDISPLAYFORMAT = 81
  1547. Global Const $SM_IMMENABLED = 82
  1548. Global Const $SM_CXFOCUSBORDER = 83
  1549. Global Const $SM_CYFOCUSBORDER = 84
  1550. Global Const $SM_TABLETPC = 86
  1551. Global Const $SM_MEDIACENTER = 87
  1552. Global Const $SM_STARTER = 88
  1553. Global Const $SM_SERVERR2 = 89
  1554. Global Const $SM_CMETRICS = 90
  1555. Global Const $SM_REMOTESESSION = 4096
  1556. Global Const $SM_SHUTTINGDOWN = 8192
  1557. Global Const $SM_REMOTECONTROL = 8193
  1558. Global Const $SM_CARETBLINKINGENABLED = 8194
  1559. Global Const $BLACKNESS = 66
  1560. Global Const $CAPTUREBLT = 1073741824
  1561. Global Const $DSTINVERT = 5570569
  1562. Global Const $MERGECOPY = 12583114
  1563. Global Const $MERGEPAINT = 12255782
  1564. Global Const $NOMIRRORBITMAP = -2147483648
  1565. Global Const $NOTSRCCOPY = 3342344
  1566. Global Const $NOTSRCERASE = 1114278
  1567. Global Const $PATCOPY = 15728673
  1568. Global Const $PATINVERT = 5898313
  1569. Global Const $PATPAINT = 16452105
  1570. Global Const $SRCAND = 8913094
  1571. Global Const $SRCCOPY = 13369376
  1572. Global Const $SRCERASE = 4457256
  1573. Global Const $SRCINVERT = 6684742
  1574. Global Const $SRCPAINT = 15597702
  1575. Global Const $WHITENESS = 16711778
  1576. Global Const $DT_BOTTOM = 8
  1577. Global Const $DT_CALCRECT = 1024
  1578. Global Const $DT_CENTER = 1
  1579. Global Const $DT_EDITCONTROL = 8192
  1580. Global Const $DT_END_ELLIPSIS = 32768
  1581. Global Const $DT_EXPANDTABS = 64
  1582. Global Const $DT_EXTERNALLEADING = 512
  1583. Global Const $DT_HIDEPREFIX = 1048576
  1584. Global Const $DT_INTERNAL = 4096
  1585. Global Const $DT_LEFT = 0
  1586. Global Const $DT_MODIFYSTRING = 65536
  1587. Global Const $DT_NOCLIP = 256
  1588. Global Const $DT_NOFULLWIDTHCHARBREAK = 524288
  1589. Global Const $DT_NOPREFIX = 2048
  1590. Global Const $DT_PATH_ELLIPSIS = 16384
  1591. Global Const $DT_PREFIXONLY = 2097152
  1592. Global Const $DT_RIGHT = 2
  1593. Global Const $DT_RTLREADING = 131072
  1594. Global Const $DT_SINGLELINE = 32
  1595. Global Const $DT_TABSTOP = 128
  1596. Global Const $DT_TOP = 0
  1597. Global Const $DT_VCENTER = 4
  1598. Global Const $DT_WORDBREAK = 16
  1599. Global Const $DT_WORD_ELLIPSIS = 262144
  1600. Global Const $RDW_ERASE = 4
  1601. Global Const $RDW_FRAME = 1024
  1602. Global Const $RDW_INTERNALPAINT = 2
  1603. Global Const $RDW_INVALIDATE = 1
  1604. Global Const $RDW_NOERASE = 32
  1605. Global Const $RDW_NOFRAME = 2048
  1606. Global Const $RDW_NOINTERNALPAINT = 16
  1607. Global Const $RDW_VALIDATE = 8
  1608. Global Const $RDW_ERASENOW = 512
  1609. Global Const $RDW_UPDATENOW = 256
  1610. Global Const $RDW_ALLCHILDREN = 128
  1611. Global Const $RDW_NOCHILDREN = 64
  1612. Global Const $WM_RENDERFORMAT = 773
  1613. Global Const $WM_RENDERALLFORMATS = 774
  1614. Global Const $WM_DESTROYCLIPBOARD = 775
  1615. Global Const $WM_DRAWCLIPBOARD = 776
  1616. Global Const $WM_PAINTCLIPBOARD = 777
  1617. Global Const $WM_VSCROLLCLIPBOARD = 778
  1618. Global Const $WM_SIZECLIPBOARD = 779
  1619. Global Const $WM_ASKCBFORMATNAME = 780
  1620. Global Const $WM_CHANGECBCHAIN = 781
  1621. Global Const $WM_HSCROLLCLIPBOARD = 782
  1622. Global Const $HTERROR = -2
  1623. Global Const $HTTRANSPARENT = -1
  1624. Global Const $HTNOWHERE = 0
  1625. Global Const $HTCLIENT = 1
  1626. Global Const $HTCAPTION = 2
  1627. Global Const $HTSYSMENU = 3
  1628. Global Const $HTGROWBOX = 4
  1629. Global Const $HTSIZE = $HTGROWBOX
  1630. Global Const $HTMENU = 5
  1631. Global Const $HTHSCROLL = 6
  1632. Global Const $HTVSCROLL = 7
  1633. Global Const $HTMINBUTTON = 8
  1634. Global Const $HTMAXBUTTON = 9
  1635. Global Const $HTLEFT = 10
  1636. Global Const $HTRIGHT = 11
  1637. Global Const $HTTOP = 12
  1638. Global Const $HTTOPLEFT = 13
  1639. Global Const $HTTOPRIGHT = 14
  1640. Global Const $HTBOTTOM = 15
  1641. Global Const $HTBOTTOMLEFT = 16
  1642. Global Const $HTBOTTOMRIGHT = 17
  1643. Global Const $HTBORDER = 18
  1644. Global Const $HTREDUCE = $HTMINBUTTON
  1645. Global Const $HTZOOM = $HTMAXBUTTON
  1646. Global Const $HTSIZEFIRST = $HTLEFT
  1647. Global Const $HTSIZELAST = $HTBOTTOMRIGHT
  1648. Global Const $HTOBJECT = 19
  1649. Global Const $HTCLOSE = 20
  1650. Global Const $HTHELP = 21
  1651. Global Const $COLOR_SCROLLBAR = 0
  1652. Global Const $COLOR_BACKGROUND = 1
  1653. Global Const $COLOR_ACTIVECAPTION = 2
  1654. Global Const $COLOR_INACTIVECAPTION = 3
  1655. Global Const $COLOR_MENU = 4
  1656. Global Const $COLOR_WINDOW = 5
  1657. Global Const $COLOR_WINDOWFRAME = 6
  1658. Global Const $COLOR_MENUTEXT = 7
  1659. Global Const $COLOR_WINDOWTEXT = 8
  1660. Global Const $COLOR_CAPTIONTEXT = 9
  1661. Global Const $COLOR_ACTIVEBORDER = 10
  1662. Global Const $COLOR_INACTIVEBORDER = 11
  1663. Global Const $COLOR_APPWORKSPACE = 12
  1664. Global Const $COLOR_HIGHLIGHT = 13
  1665. Global Const $COLOR_HIGHLIGHTTEXT = 14
  1666. Global Const $COLOR_BTNFACE = 15
  1667. Global Const $COLOR_BTNSHADOW = 16
  1668. Global Const $COLOR_GRAYTEXT = 17
  1669. Global Const $COLOR_BTNTEXT = 18
  1670. Global Const $COLOR_INACTIVECAPTIONTEXT = 19
  1671. Global Const $COLOR_BTNHIGHLIGHT = 20
  1672. Global Const $COLOR_3DDKSHADOW = 21
  1673. Global Const $COLOR_3DLIGHT = 22
  1674. Global Const $COLOR_INFOTEXT = 23
  1675. Global Const $COLOR_INFOBK = 24
  1676. Global Const $COLOR_HOTLIGHT = 26
  1677. Global Const $COLOR_GRADIENTACTIVECAPTION = 27
  1678. Global Const $COLOR_GRADIENTINACTIVECAPTION = 28
  1679. Global Const $COLOR_MENUHILIGHT = 29
  1680. Global Const $COLOR_MENUBAR = 30
  1681. Global Const $COLOR_DESKTOP = 1
  1682. Global Const $COLOR_3DFACE = 15
  1683. Global Const $COLOR_3DSHADOW = 16
  1684. Global Const $COLOR_3DHIGHLIGHT = 20
  1685. Global Const $COLOR_3DHILIGHT = 20
  1686. Global Const $COLOR_BTNHILIGHT = 20
  1687. Global Const $HINST_COMMCTRL = -1
  1688. Global Const $IDB_STD_SMALL_COLOR = 0
  1689. Global Const $IDB_STD_LARGE_COLOR = 1
  1690. Global Const $IDB_VIEW_SMALL_COLOR = 4
  1691. Global Const $IDB_VIEW_LARGE_COLOR = 5
  1692. Global Const $IDB_HIST_SMALL_COLOR = 8
  1693. Global Const $IDB_HIST_LARGE_COLOR = 9
  1694. Global Const $STARTF_FORCEOFFFEEDBACK = 128
  1695. Global Const $STARTF_FORCEONFEEDBACK = 64
  1696. Global Const $STARTF_PREVENTPINNING = 8192
  1697. Global Const $STARTF_RUNFULLSCREEN = 32
  1698. Global Const $STARTF_TITLEISAPPID = 4096
  1699. Global Const $STARTF_TITLEISLINKNAME = 2048
  1700. Global Const $STARTF_USECOUNTCHARS = 8
  1701. Global Const $STARTF_USEFILLATTRIBUTE = 16
  1702. Global Const $STARTF_USEHOTKEY = 512
  1703. Global Const $STARTF_USEPOSITION = 4
  1704. Global Const $STARTF_USESHOWWINDOW = 1
  1705. Global Const $STARTF_USESIZE = 2
  1706. Global Const $STARTF_USESTDHANDLES = 256
  1707. Global Const $CDDS_PREPAINT = 1
  1708. Global Const $CDDS_POSTPAINT = 2
  1709. Global Const $CDDS_PREERASE = 3
  1710. Global Const $CDDS_POSTERASE = 4
  1711. Global Const $CDDS_ITEM = 65536
  1712. Global Const $CDDS_ITEMPREPAINT = 65537
  1713. Global Const $CDDS_ITEMPOSTPAINT = 65538
  1714. Global Const $CDDS_ITEMPREERASE = 65539
  1715. Global Const $CDDS_ITEMPOSTERASE = 65540
  1716. Global Const $CDDS_SUBITEM = 131072
  1717. Global Const $CDIS_SELECTED = 1
  1718. Global Const $CDIS_GRAYED = 2
  1719. Global Const $CDIS_DISABLED = 4
  1720. Global Const $CDIS_CHECKED = 8
  1721. Global Const $CDIS_FOCUS = 16
  1722. Global Const $CDIS_DEFAULT = 32
  1723. Global Const $CDIS_HOT = 64
  1724. Global Const $CDIS_MARKED = 128
  1725. Global Const $CDIS_INDETERMINATE = 256
  1726. Global Const $CDIS_SHOWKEYBOARDCUES = 512
  1727. Global Const $CDIS_NEARHOT = 1024
  1728. Global Const $CDIS_OTHERSIDEHOT = 2048
  1729. Global Const $CDIS_DROPHILITED = 4096
  1730. Global Const $CDRF_DODEFAULT = 0
  1731. Global Const $CDRF_NEWFONT = 2
  1732. Global Const $CDRF_SKIPDEFAULT = 4
  1733. Global Const $CDRF_NOTIFYPOSTPAINT = 16
  1734. Global Const $CDRF_NOTIFYITEMDRAW = 32
  1735. Global Const $CDRF_NOTIFYSUBITEMDRAW = 32
  1736. Global Const $CDRF_NOTIFYPOSTERASE = 64
  1737. Global Const $CDRF_DOERASE = 8
  1738. Global Const $CDRF_SKIPPOSTPAINT = 256
  1739. Global Const $GUI_SS_DEFAULT_GUI = BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU)
  1740. Global Const $OPT_COORDSRELATIVE = 0
  1741. Global Const $OPT_COORDSABSOLUTE = 1
  1742. Global Const $OPT_COORDSCLIENT = 2
  1743. Global Const $OPT_ERRORSILENT = 0
  1744. Global Const $OPT_ERRORFATAL = 1
  1745. Global Const $OPT_CAPSNOSTORE = 0
  1746. Global Const $OPT_CAPSSTORE = 1
  1747. Global Const $OPT_MATCHSTART = 1
  1748. Global Const $OPT_MATCHANY = 2
  1749. Global Const $OPT_MATCHEXACT = 3
  1750. Global Const $OPT_MATCHADVANCED = 4
  1751. Global Const $CCS_TOP = 1
  1752. Global Const $CCS_NOMOVEY = 2
  1753. Global Const $CCS_BOTTOM = 3
  1754. Global Const $CCS_NORESIZE = 4
  1755. Global Const $CCS_NOPARENTALIGN = 8
  1756. Global Const $CCS_NOHILITE = 16
  1757. Global Const $CCS_ADJUSTABLE = 32
  1758. Global Const $CCS_NODIVIDER = 64
  1759. Global Const $CCS_VERT = 128
  1760. Global Const $CCS_LEFT = 129
  1761. Global Const $CCS_NOMOVEX = 130
  1762. Global Const $CCS_RIGHT = 131
  1763. Global Const $DT_DRIVETYPE = 1
  1764. Global Const $DT_SSDSTATUS = 2
  1765. Global Const $DT_BUSTYPE = 3
  1766. Global Const $PROXY_IE = 0
  1767. Global Const $PROXY_NONE = 1
  1768. Global Const $PROXY_SPECIFIED = 2
  1769. Global Const $OBJID_WINDOW = 0
  1770. Global Const $OBJID_TITLEBAR = -2
  1771. Global Const $OBJID_SIZEGRIP = -7
  1772. Global Const $OBJID_CARET = -8
  1773. Global Const $OBJID_CURSOR = -9
  1774. Global Const $OBJID_ALERT = -10
  1775. Global Const $OBJID_SOUND = -11
  1776. Global Const $DLG_CENTERONTOP = 0
  1777. Global Const $DLG_NOTITLE = 1
  1778. Global Const $DLG_NOTONTOP = 2
  1779. Global Const $DLG_TEXTLEFT = 4
  1780. Global Const $DLG_TEXTRIGHT = 8
  1781. Global Const $DLG_MOVEABLE = 16
  1782. Global Const $DLG_TEXTVCENTER = 32
  1783. Global Const $IDC_UNKNOWN = 0
  1784. Global Const $IDC_APPSTARTING = 1
  1785. Global Const $IDC_ARROW = 2
  1786. Global Const $IDC_CROSS = 3
  1787. Global Const $IDC_HAND = 32649
  1788. Global Const $IDC_HELP = 4
  1789. Global Const $IDC_IBEAM = 5
  1790. Global Const $IDC_ICON = 6
  1791. Global Const $IDC_NO = 7
  1792. Global Const $IDC_SIZE = 8
  1793. Global Const $IDC_SIZEALL = 9
  1794. Global Const $IDC_SIZENESW = 10
  1795. Global Const $IDC_SIZENS = 11
  1796. Global Const $IDC_SIZENWSE = 12
  1797. Global Const $IDC_SIZEWE = 13
  1798. Global Const $IDC_UPARROW = 14
  1799. Global Const $IDC_WAIT = 15
  1800. Global Const $IDI_APPLICATION = 32512
  1801. Global Const $IDI_ASTERISK = 32516
  1802. Global Const $IDI_EXCLAMATION = 32515
  1803. Global Const $IDI_HAND = 32513
  1804. Global Const $IDI_QUESTION = 32514
  1805. Global Const $IDI_WINLOGO = 32517
  1806. Global Const $IDI_SHIELD = 32518
  1807. Global Const $IDI_ERROR = $IDI_HAND
  1808. Global Const $IDI_INFORMATION = $IDI_ASTERISK
  1809. Global Const $IDI_WARNING = $IDI_EXCLAMATION
  1810. Global Const $SD_LOGOFF = 0
  1811. Global Const $SD_SHUTDOWN = 1
  1812. Global Const $SD_REBOOT = 2
  1813. Global Const $SD_FORCE = 4
  1814. Global Const $SD_POWERDOWN = 8
  1815. Global Const $SD_FORCEHUNG = 16
  1816. Global Const $SD_STANDBY = 32
  1817. Global Const $SD_HIBERNATE = 64
  1818. Global Const $STDIN_CHILD = 1
  1819. Global Const $STDOUT_CHILD = 2
  1820. Global Const $STDERR_CHILD = 4
  1821. Global Const $STDERR_MERGED = 8
  1822. Global Const $STDIO_INHERIT_PARENT = 16
  1823. Global Const $RUN_CREATE_NEW_CONSOLE = 65536
  1824. Global Const $UBOUND_DIMENSIONS = 0
  1825. Global Const $UBOUND_ROWS = 1
  1826. Global Const $UBOUND_COLUMNS = 2
  1827. Global Const $MOUSEEVENTF_ABSOLUTE = 32768
  1828. Global Const $MOUSEEVENTF_MOVE = 1
  1829. Global Const $MOUSEEVENTF_LEFTDOWN = 2
  1830. Global Const $MOUSEEVENTF_LEFTUP = 4
  1831. Global Const $MOUSEEVENTF_RIGHTDOWN = 8
  1832. Global Const $MOUSEEVENTF_RIGHTUP = 16
  1833. Global Const $MOUSEEVENTF_MIDDLEDOWN = 32
  1834. Global Const $MOUSEEVENTF_MIDDLEUP = 64
  1835. Global Const $MOUSEEVENTF_WHEEL = 2048
  1836. Global Const $MOUSEEVENTF_XDOWN = 128
  1837. Global Const $MOUSEEVENTF_XUP = 256
  1838. Global Const $REG_NONE = 0
  1839. Global Const $REG_SZ = 1
  1840. Global Const $REG_EXPAND_SZ = 2
  1841. Global Const $REG_BINARY = 3
  1842. Global Const $REG_DWORD = 4
  1843. Global Const $REG_DWORD_LITTLE_ENDIAN = 4
  1844. Global Const $REG_DWORD_BIG_ENDIAN = 5
  1845. Global Const $REG_LINK = 6
  1846. Global Const $REG_MULTI_SZ = 7
  1847. Global Const $REG_RESOURCE_LIST = 8
  1848. Global Const $REG_FULL_RESOURCE_DESCRIPTOR = 9
  1849. Global Const $REG_RESOURCE_REQUIREMENTS_LIST = 10
  1850. Global Const $REG_QWORD = 11
  1851. Global Const $REG_QWORD_LITTLE_ENDIAN = 11
  1852. Global Const $HWND_BOTTOM = 1
  1853. Global Const $HWND_NOTOPMOST = -2
  1854. Global Const $HWND_TOP = 0
  1855. Global Const $HWND_TOPMOST = -1
  1856. Global Const $SWP_NOSIZE = 1
  1857. Global Const $SWP_NOMOVE = 2
  1858. Global Const $SWP_NOZORDER = 4
  1859. Global Const $SWP_NOREDRAW = 8
  1860. Global Const $SWP_NOACTIVATE = 16
  1861. Global Const $SWP_FRAMECHANGED = 32
  1862. Global Const $SWP_DRAWFRAME = 32
  1863. Global Const $SWP_SHOWWINDOW = 64
  1864. Global Const $SWP_HIDEWINDOW = 128
  1865. Global Const $SWP_NOCOPYBITS = 256
  1866. Global Const $SWP_NOOWNERZORDER = 512
  1867. Global Const $SWP_NOREPOSITION = 512
  1868. Global Const $SWP_NOSENDCHANGING = 1024
  1869. Global Const $SWP_DEFERERASE = 8192
  1870. Global Const $SWP_ASYNCWINDOWPOS = 16384
  1871. Global Const $KEYWORD_DEFAULT = 1
  1872. Global Const $KEYWORD_NULL = 2
  1873. Global Const $DECLARED_LOCAL = -1
  1874. Global Const $DECLARED_UNKNOWN = 0
  1875. Global Const $DECLARED_GLOBAL = 1
  1876. Global Const $ASSIGN_CREATE = 0
  1877. Global Const $ASSIGN_FORCELOCAL = 1
  1878. Global Const $ASSIGN_FORCEGLOBAL = 2
  1879. Global Const $ASSIGN_EXISTFAIL = 4
  1880. Global Const $BI_ENABLE = 0
  1881. Global Const $BI_DISABLE = 1
  1882. Global Const $BREAK_ENABLE = 1
  1883. Global Const $BREAK_DISABLE = 0
  1884. Global Const $CDTRAY_OPEN = "open"
  1885. Global Const $CDTRAY_CLOSED = "closed"
  1886. Global Const $SEND_DEFAULT = 0
  1887. Global Const $SEND_RAW = 1
  1888. Global Const $DIR_DEFAULT = 0
  1889. Global Const $DIR_EXTENDED = 1
  1890. Global Const $DIR_NORECURSE = 2
  1891. Global Const $DIR_REMOVE = 1
  1892. Global Const $DT_ALL = "ALL"
  1893. Global Const $DT_CDROM = "CDROM"
  1894. Global Const $DT_REMOVABLE = "REMOVABLE"
  1895. Global Const $DT_FIXED = "FIXED"
  1896. Global Const $DT_NETWORK = "NETWORK"
  1897. Global Const $DT_RAMDISK = "RAMDISK"
  1898. Global Const $DT_UNKNOWN = "UNKNOWN"
  1899. Global Const $DT_UNDEFINED = 1
  1900. Global Const $DT_FAT = "FAT"
  1901. Global Const $DT_FAT32 = "FAT32"
  1902. Global Const $DT_EXFAT = "exFAT"
  1903. Global Const $DT_NTFS = "NTFS"
  1904. Global Const $DT_NWFS = "NWFS"
  1905. Global Const $DT_CDFS = "CDFS"
  1906. Global Const $DT_UDF = "UDF"
  1907. Global Const $DMA_DEFAULT = 0
  1908. Global Const $DMA_PERSISTENT = 1
  1909. Global Const $DMA_AUTHENTICATION = 8
  1910. Global Const $DS_UNKNOWN = "UNKNOWN"
  1911. Global Const $DS_READY = "READY"
  1912. Global Const $DS_NOTREADY = "NOTREADY"
  1913. Global Const $DS_INVALID = "INVALID"
  1914. Global Const $MOUSE_CLICK_LEFT = "left"
  1915. Global Const $MOUSE_CLICK_RIGHT = "right"
  1916. Global Const $MOUSE_CLICK_MIDDLE = "middle"
  1917. Global Const $MOUSE_CLICK_MAIN = "main"
  1918. Global Const $MOUSE_CLICK_MENU = "menu"
  1919. Global Const $MOUSE_CLICK_PRIMARY = "primary"
  1920. Global Const $MOUSE_CLICK_SECONDARY = "secondary"
  1921. Global Const $MOUSE_WHEEL_UP = "up"
  1922. Global Const $MOUSE_WHEEL_DOWN = "down"
  1923. Global Const $NUMBER_AUTO = 0
  1924. Global Const $NUMBER_32BIT = 1
  1925. Global Const $NUMBER_64BIT = 2
  1926. Global Const $NUMBER_DOUBLE = 3
  1927. Global Const $OBJ_NAME = 1
  1928. Global Const $OBJ_STRING = 2
  1929. Global Const $OBJ_PROGID = 3
  1930. Global Const $OBJ_FILE = 4
  1931. Global Const $OBJ_MODULE = 5
  1932. Global Const $OBJ_CLSID = 6
  1933. Global Const $OBJ_IID = 7
  1934. Global Const $EXITCLOSE_NORMAL = 0
  1935. Global Const $EXITCLOSE_BYEXIT = 1
  1936. Global Const $EXITCLOSE_BYCLICK = 2
  1937. Global Const $EXITCLOSE_BYLOGOFF = 3
  1938. Global Const $EXITCLOSE_BYSHUTDOWN = 4
  1939. Global Const $PROCESS_STATS_MEMORY = 0
  1940. Global Const $PROCESS_STATS_IO = 1
  1941. Global Const $PROCESS_LOW = 0
  1942. Global Const $PROCESS_BELOWNORMAL = 1
  1943. Global Const $PROCESS_NORMAL = 2
  1944. Global Const $PROCESS_ABOVENORMAL = 3
  1945. Global Const $PROCESS_HIGH = 4
  1946. Global Const $PROCESS_REALTIME = 5
  1947. Global Const $RUN_LOGON_NOPROFILE = 0
  1948. Global Const $RUN_LOGON_PROFILE = 1
  1949. Global Const $RUN_LOGON_NETWORK = 2
  1950. Global Const $RUN_LOGON_INHERIT = 4
  1951. Global Const $SOUND_NOWAIT = 0
  1952. Global Const $SOUND_WAIT = 1
  1953. Global Const $SHEX_OPEN = "open"
  1954. Global Const $SHEX_EDIT = "edit"
  1955. Global Const $SHEX_PRINT = "print"
  1956. Global Const $SHEX_PROPERTIES = "properties"
  1957. Global Const $TCP_DATA_DEFAULT = 0
  1958. Global Const $TCP_DATA_BINARY = 1
  1959. Global Const $UDP_OPEN_DEFAULT = 0
  1960. Global Const $UDP_OPEN_BROADCAST = 1
  1961. Global Const $UDP_DATA_DEFAULT = 0
  1962. Global Const $UDP_DATA_BINARY = 1
  1963. Global Const $UDP_DATA_ARRAY = 2
  1964. Global Const $TIP_NOICON = 0
  1965. Global Const $TIP_INFOICON = 1
  1966. Global Const $TIP_WARNINGICON = 2
  1967. Global Const $TIP_ERRORICON = 3
  1968. Global Const $TIP_BALLOON = 1
  1969. Global Const $TIP_CENTER = 2
  1970. Global Const $TIP_FORCEVISIBLE = 4
  1971. Global Const $WINDOWS_NOONTOP = 0
  1972. Global Const $WINDOWS_ONTOP = 1
  1973. Global Const $WIN_STATE_EXISTS = 1
  1974. Global Const $WIN_STATE_VISIBLE = 2
  1975. Global Const $WIN_STATE_ENABLED = 4
  1976. Global Const $WIN_STATE_ACTIVE = 8
  1977. Global Const $WIN_STATE_MINIMIZED = 16
  1978. Global Const $WIN_STATE_MAXIMIZED = 32
  1979. #Region Global Variables and Constants
  1980. Global Const $_ARRAYCONSTANT_SORTINFOSIZE = 11
  1981. Global $__G_AARRAYDISPLAY_SORTINFO[$_ARRAYCONSTANT_SORTINFOSIZE]
  1982. Global Const $ARRAYDISPLAY_COLALIGNLEFT = 0
  1983. Global Const $ARRAYDISPLAY_TRANSPOSE = 1
  1984. Global Const $ARRAYDISPLAY_COLALIGNRIGHT = 2
  1985. Global Const $ARRAYDISPLAY_COLALIGNCENTER = 4
  1986. Global Const $ARRAYDISPLAY_VERBOSE = 8
  1987. Global Const $ARRAYDISPLAY_NOROW = 64
  1988. Global Const $_ARRAYCONSTANT_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"
  1989. Global Const $_ARRAYCONSTANT_TAGLVITEM = "struct;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;ptr piColFmt;int iGroup;endstruct"
  1990. #EndRegion Global Variables and Constants
  1991. #Region Functions list
  1992. #EndRegion Functions list
  1993. Func __ARRAYDISPLAY_SHARE(Const ByRef $AARRAY, $STITLE = Default, $SARRAYRANGE = Default, $IFLAGS = Default, $VUSER_SEPARATOR = Default, $SHEADER = Default, $IMAX_COLWIDTH = Default, $HUSER_FUNCTION = Default, $BDEBUG = True)
  1994.     Local $VTMP, $SMSGBOXTITLE = (($BDEBUG) ? ("DebugArray") : ("ArrayDisplay"))
  1995.     If $STITLE = Default Then $STITLE = $SMSGBOXTITLE
  1996.     If $SARRAYRANGE = Default Then $SARRAYRANGE = ""
  1997.     If $IFLAGS = Default Then $IFLAGS = 0
  1998.     If $VUSER_SEPARATOR = Default Then $VUSER_SEPARATOR = ""
  1999.     If $SHEADER = Default Then $SHEADER = ""
  2000.     If $IMAX_COLWIDTH = Default Then $IMAX_COLWIDTH = 350
  2001.     If $HUSER_FUNCTION = Default Then $HUSER_FUNCTION = 0
  2002.     Local $ITRANSPOSE = BitAND($IFLAGS, $ARRAYDISPLAY_TRANSPOSE)
  2003.     Local $ICOLALIGN = BitAND($IFLAGS, 6)
  2004.     Local $IVERBOSE = BitAND($IFLAGS, $ARRAYDISPLAY_VERBOSE)
  2005.     Local $INOROW = BitAND($IFLAGS, $ARRAYDISPLAY_NOROW)
  2006.     Local $IBUTTONBORDER = (($BDEBUG) ? (40) : (20))
  2007.     Local $SMSG = "", $IRET = 1
  2008.     If IsArray($AARRAY) Then
  2009.         Local $IDIMENSION = UBound($AARRAY, $UBOUND_DIMENSIONS), $IROWCOUNT = UBound($AARRAY, $UBOUND_ROWS), $ICOLCOUNT = UBound($AARRAY, $UBOUND_COLUMNS)
  2010.         If $IDIMENSION > 2 Then
  2011.             $SMSG = "Larger than 2D array passed to function"
  2012.             $IRET = 2
  2013.         EndIf
  2014.         If $IDIMENSION = 1 Then
  2015.             $ITRANSPOSE = 0
  2016.         EndIf
  2017.     Else
  2018.         $SMSG = "No array variable passed to function"
  2019.     EndIf
  2020.     If $SMSG Then
  2021.         If $IVERBOSE And MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR + $MB_YESNO, $SMSGBOXTITLE & " Error: " & $STITLE, $SMSG & @CRLF & @CRLF & "Exit the script?") = $IDYES Then
  2022.             Exit
  2023.         Else
  2024.             Return SetError($IRET, 0, 0)
  2025.         EndIf
  2026.     EndIf
  2027.     Local $ICW_COLWIDTH = Number($VUSER_SEPARATOR)
  2028.     Local $SCURR_SEPARATOR = Opt("GUIDataSeparatorChar")
  2029.     If $VUSER_SEPARATOR = "" Then $VUSER_SEPARATOR = $SCURR_SEPARATOR
  2030.     Local $IITEM_START = 0, $IITEM_END = $IROWCOUNT - 1, $ISUBITEM_START = 0, $ISUBITEM_END = (($IDIMENSION = 2) ? ($ICOLCOUNT - 1) : (0))
  2031.     Local $BRANGE_FLAG = False, $AVRANGESPLIT
  2032.     If $SARRAYRANGE Then
  2033.         Local $AARRAY_RANGE = StringRegExp($SARRAYRANGE & "||", "(?U)(.*)\|", 3)
  2034.         If $AARRAY_RANGE[0] Then
  2035.             $AVRANGESPLIT = StringSplit($AARRAY_RANGE[0], ":")
  2036.             If @error Then
  2037.                 $IITEM_END = Number($AVRANGESPLIT[1])
  2038.             Else
  2039.                 $IITEM_START = Number($AVRANGESPLIT[1])
  2040.                 If $AVRANGESPLIT[2] <> "" Then
  2041.                     $IITEM_END = Number($AVRANGESPLIT[2])
  2042.                 EndIf
  2043.             EndIf
  2044.         EndIf
  2045.         If $IITEM_START < 0 Then $IITEM_START = 0
  2046.         If $IITEM_END > $IROWCOUNT - 1 Then $IITEM_END = $IROWCOUNT - 1
  2047.         If $IITEM_START > $IITEM_END Then
  2048.             $VTMP = $IITEM_START
  2049.             $IITEM_START = $IITEM_END
  2050.             $IITEM_END = $VTMP
  2051.         EndIf
  2052.         If $IITEM_START <> 0 Or $IITEM_END <> $IROWCOUNT - 1 Then $BRANGE_FLAG = True
  2053.         If $IDIMENSION = 2 And $AARRAY_RANGE[1] Then
  2054.             $AVRANGESPLIT = StringSplit($AARRAY_RANGE[1], ":")
  2055.             If @error Then
  2056.                 $ISUBITEM_END = Number($AVRANGESPLIT[1])
  2057.             Else
  2058.                 $ISUBITEM_START = Number($AVRANGESPLIT[1])
  2059.                 If $AVRANGESPLIT[2] <> "" Then
  2060.                     $ISUBITEM_END = Number($AVRANGESPLIT[2])
  2061.                 EndIf
  2062.             EndIf
  2063.             If $ISUBITEM_START > $ISUBITEM_END Then
  2064.                 $VTMP = $ISUBITEM_START
  2065.                 $ISUBITEM_START = $ISUBITEM_END
  2066.                 $ISUBITEM_END = $VTMP
  2067.             EndIf
  2068.             If $ISUBITEM_START < 0 Then $ISUBITEM_START = 0
  2069.             If $ISUBITEM_END > $ICOLCOUNT - 1 Then $ISUBITEM_END = $ICOLCOUNT - 1
  2070.             If $ISUBITEM_START <> 0 Or $ISUBITEM_END <> $ICOLCOUNT - 1 Then $BRANGE_FLAG = True
  2071.         EndIf
  2072.     EndIf
  2073.     Local $SDISPLAYDATA = "[" & $IROWCOUNT & "]"
  2074.     If $IDIMENSION = 2 Then
  2075.         $SDISPLAYDATA &= " [" & $ICOLCOUNT & "]"
  2076.     EndIf
  2077.     Local $STIPDATA = ""
  2078.     If $BRANGE_FLAG Then
  2079.         If $STIPDATA Then $STIPDATA &= " - "
  2080.         $STIPDATA &= "Range set"
  2081.     EndIf
  2082.     If $ITRANSPOSE Then
  2083.         If $STIPDATA Then $STIPDATA &= " - "
  2084.         $STIPDATA &= "Transposed"
  2085.     EndIf
  2086.     Local $ASHEADER = StringSplit($SHEADER, $SCURR_SEPARATOR, $STR_NOCOUNT)
  2087.     If UBound($ASHEADER) = 0 Then Local $ASHEADER[1] = [""]
  2088.     $SHEADER = "Row"
  2089.     Local $IINDEX = $ISUBITEM_START
  2090.     If $ITRANSPOSE Then
  2091.         $SHEADER = "Col"
  2092.         For $J = $IITEM_START To $IITEM_END
  2093.             $SHEADER &= $SCURR_SEPARATOR & "Row " & $J
  2094.         Next
  2095.     Else
  2096.         If $ASHEADER[0] Then
  2097.             For $IINDEX = $ISUBITEM_START To $ISUBITEM_END
  2098.                 If $IINDEX >= UBound($ASHEADER) Then ExitLoop
  2099.                 $SHEADER &= $SCURR_SEPARATOR & $ASHEADER[$IINDEX]
  2100.             Next
  2101.         EndIf
  2102.         For $J = $IINDEX To $ISUBITEM_END
  2103.             $SHEADER &= $SCURR_SEPARATOR & "Col " & $J
  2104.         Next
  2105.     EndIf
  2106.     If $INOROW Then $SHEADER = StringTrimLeft($SHEADER, 4)
  2107.     If $IVERBOSE And ($IITEM_END - $IITEM_START + 1) * ($ISUBITEM_END - $ISUBITEM_START + 1) > 10000 Then
  2108.         SplashTextOn($SMSGBOXTITLE, "Preparing display" & @CRLF & @CRLF & "Please be patient", 300, 100)
  2109.     EndIf
  2110.     Local Const $_ARRAYCONSTANT_GUI_DOCKBOTTOM = 64
  2111.     Local Const $_ARRAYCONSTANT_GUI_DOCKBORDERS = 102
  2112.     Local Const $_ARRAYCONSTANT_GUI_DOCKHEIGHT = 512
  2113.     Local Const $_ARRAYCONSTANT_GUI_DOCKLEFT = 2
  2114.     Local Const $_ARRAYCONSTANT_GUI_DOCKRIGHT = 4
  2115.     Local Const $_ARRAYCONSTANT_GUI_DOCKHCENTER = 8
  2116.     Local Const $_ARRAYCONSTANT_GUI_EVENT_CLOSE = -3
  2117.     Local Const $_ARRAYCONSTANT_GUI_FOCUS = 256
  2118.     Local Const $_ARRAYCONSTANT_SS_CENTER = 1
  2119.     Local Const $_ARRAYCONSTANT_SS_CENTERIMAGE = 512
  2120.     Local Const $_ARRAYCONSTANT_LVM_GETITEMCOUNT = (4096 + 4)
  2121.     Local Const $_ARRAYCONSTANT_LVM_GETITEMRECT = (4096 + 14)
  2122.     Local Const $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH = (4096 + 29)
  2123.     Local Const $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH = (4096 + 30)
  2124.     Local Const $_ARRAYCONSTANT_LVM_GETITEMSTATE = (4096 + 44)
  2125.     Local Const $_ARRAYCONSTANT_LVM_GETSELECTEDCOUNT = (4096 + 50)
  2126.     Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (4096 + 54)
  2127.     Local Const $_ARRAYCONSTANT_LVS_EX_GRIDLINES = 1
  2128.     Local Const $_ARRAYCONSTANT_LVIS_SELECTED = 2
  2129.     Local Const $_ARRAYCONSTANT_LVS_SHOWSELALWAYS = 8
  2130.     Local Const $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT = 32
  2131.     Local Const $_ARRAYCONSTANT_WS_EX_CLIENTEDGE = 512
  2132.     Local Const $_ARRAYCONSTANT_WS_MAXIMIZEBOX = 65536
  2133.     Local Const $_ARRAYCONSTANT_WS_MINIMIZEBOX = 131072
  2134.     Local Const $_ARRAYCONSTANT_WS_SIZEBOX = 262144
  2135.     Local Const $_ARRAYCONSTANT_WM_SETREDRAW = 11
  2136.     Local Const $_ARRAYCONSTANT_LVSCW_AUTOSIZE = -1
  2137.     Local Const $_ARRAYCONSTANT_LVSCW_AUTOSIZE_USEHEADER = -2
  2138.     Local $ICOORDMODE = Opt("GUICoordMode", 1)
  2139.     Local $IORGWIDTH = 210, $IHEIGHT = 200, $IMINSIZE = 250
  2140.     Local $HGUI = GUICreate($STITLE, $IORGWIDTH, $IHEIGHT, Default, Default, BitOR($_ARRAYCONSTANT_WS_SIZEBOX, $_ARRAYCONSTANT_WS_MINIMIZEBOX, $_ARRAYCONSTANT_WS_MAXIMIZEBOX))
  2141.     Local $AIGUISIZE = WinGetClientSize($HGUI)
  2142.     Local $IBUTTONWIDTH_1 = $AIGUISIZE[0] / 2
  2143.     Local $IBUTTONWIDTH_2 = $AIGUISIZE[0] / 3
  2144.     Local $IDLISTVIEW = GUICtrlCreateListView($SHEADER, 0, 0, $AIGUISIZE[0], $AIGUISIZE[1] - $IBUTTONBORDER, $_ARRAYCONSTANT_LVS_SHOWSELALWAYS)
  2145.     GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_GRIDLINES, $_ARRAYCONSTANT_LVS_EX_GRIDLINES)
  2146.     GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT)
  2147.     GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE)
  2148.     Local $IDCOPY_ID = 9999, $IDCOPY_DATA = 99999, $IDDATA_LABEL = 99999, $IDUSER_FUNC = 99999, $IDEXIT_SCRIPT = 99999
  2149.     If $BDEBUG Then
  2150.         $IDCOPY_ID = GUICtrlCreateButton("Copy Data && Hdr/Row", 0, $AIGUISIZE[1] - $IBUTTONBORDER, $IBUTTONWIDTH_1, 20)
  2151.         $IDCOPY_DATA = GUICtrlCreateButton("Copy Data Only", $IBUTTONWIDTH_1, $AIGUISIZE[1] - $IBUTTONBORDER, $IBUTTONWIDTH_1, 20)
  2152.         Local $IBUTTONWIDTH_VAR = $IBUTTONWIDTH_1
  2153.         Local $IOFFSET = $IBUTTONWIDTH_1
  2154.         If IsFunc($HUSER_FUNCTION) Then
  2155.             $IDUSER_FUNC = GUICtrlCreateButton("Run User Func", $IBUTTONWIDTH_2, $AIGUISIZE[1] - 20, $IBUTTONWIDTH_2, 20)
  2156.             $IBUTTONWIDTH_VAR = $IBUTTONWIDTH_2
  2157.             $IOFFSET = $IBUTTONWIDTH_2 * 2
  2158.         EndIf
  2159.         $IDEXIT_SCRIPT = GUICtrlCreateButton("Exit Script", $IOFFSET, $AIGUISIZE[1] - 20, $IBUTTONWIDTH_VAR, 20)
  2160.         $IDDATA_LABEL = GUICtrlCreateLabel($SDISPLAYDATA, 0, $AIGUISIZE[1] - 20, $IBUTTONWIDTH_VAR, 18, BitOR($_ARRAYCONSTANT_SS_CENTER, $_ARRAYCONSTANT_SS_CENTERIMAGE))
  2161.     Else
  2162.         $IDDATA_LABEL = GUICtrlCreateLabel($SDISPLAYDATA, 0, $AIGUISIZE[1] - 20, $AIGUISIZE[0], 18, BitOR($_ARRAYCONSTANT_SS_CENTER, $_ARRAYCONSTANT_SS_CENTERIMAGE))
  2163.     EndIf
  2164.     Select
  2165.         Case $ITRANSPOSE Or $BRANGE_FLAG
  2166.             GUICtrlSetColor($IDDATA_LABEL, 16711680)
  2167.             GUICtrlSetTip($IDDATA_LABEL, $STIPDATA)
  2168.     EndSelect
  2169.     GUICtrlSetResizing($IDLISTVIEW, $_ARRAYCONSTANT_GUI_DOCKBORDERS)
  2170.     GUICtrlSetResizing($IDCOPY_ID, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
  2171.     GUICtrlSetResizing($IDCOPY_DATA, $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
  2172.     GUICtrlSetResizing($IDDATA_LABEL, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
  2173.     GUICtrlSetResizing($IDUSER_FUNC, $_ARRAYCONSTANT_GUI_DOCKHCENTER + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
  2174.     GUICtrlSetResizing($IDEXIT_SCRIPT, $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
  2175.     GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_WM_SETREDRAW, 0, 0)
  2176.     Local $IROWINDEX, $ICOLFILL
  2177.     If $ITRANSPOSE Then
  2178.         For $I = $ISUBITEM_START To $ISUBITEM_END
  2179.             $IROWINDEX = __ARRAYDISPLAY_ADDITEM($IDLISTVIEW, "NULL")
  2180.             If $INOROW Then
  2181.                 $ICOLFILL = 0
  2182.             Else
  2183.                 __ARRAYDISPLAY_ADDSUBITEM($IDLISTVIEW, $IROWINDEX, "Col " & $I, 0)
  2184.                 $ICOLFILL = 1
  2185.             EndIf
  2186.             For $J = $IITEM_START To $IITEM_END
  2187.                 If $IDIMENSION = 2 Then
  2188.                     $VTMP = $AARRAY[$J][$I]
  2189.                 Else
  2190.                     $VTMP = $AARRAY[$J]
  2191.                 EndIf
  2192.                 Switch VarGetType($VTMP)
  2193.                     Case "Array"
  2194.                         __ARRAYDISPLAY_ADDSUBITEM($IDLISTVIEW, $IROWINDEX, "{Array}", $ICOLFILL)
  2195.                     Case Else
  2196.                         __ARRAYDISPLAY_ADDSUBITEM($IDLISTVIEW, $IROWINDEX, $VTMP, $ICOLFILL)
  2197.                 EndSwitch
  2198.                 $ICOLFILL += 1
  2199.             Next
  2200.         Next
  2201.     Else
  2202.         For $I = $IITEM_START To $IITEM_END
  2203.             $IROWINDEX = __ARRAYDISPLAY_ADDITEM($IDLISTVIEW, "NULL")
  2204.             If $INOROW Then
  2205.                 $ICOLFILL = 0
  2206.             Else
  2207.                 __ARRAYDISPLAY_ADDSUBITEM($IDLISTVIEW, $IROWINDEX, "Row " & $I, 0)
  2208.                 $ICOLFILL = 1
  2209.             EndIf
  2210.             For $J = $ISUBITEM_START To $ISUBITEM_END
  2211.                 If $IDIMENSION = 2 Then
  2212.                     $VTMP = $AARRAY[$I][$J]
  2213.                 Else
  2214.                     $VTMP = $AARRAY[$I]
  2215.                 EndIf
  2216.                 Switch VarGetType($VTMP)
  2217.                     Case "Array"
  2218.                         __ARRAYDISPLAY_ADDSUBITEM($IDLISTVIEW, $IROWINDEX, "{Array}", $ICOLFILL)
  2219.                     Case Else
  2220.                         __ARRAYDISPLAY_ADDSUBITEM($IDLISTVIEW, $IROWINDEX, $VTMP, $ICOLFILL)
  2221.                 EndSwitch
  2222.                 $ICOLFILL += 1
  2223.             Next
  2224.         Next
  2225.     EndIf
  2226.     If $ICOLALIGN Then
  2227.         For $I = 0 To $ICOLFILL - 1
  2228.             __ARRAYDISPLAY_JUSTIFYCOLUMN($IDLISTVIEW, $I, $ICOLALIGN / 2)
  2229.         Next
  2230.     EndIf
  2231.     GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_WM_SETREDRAW, 1, 0)
  2232.     Local $IBORDER = (($IROWINDEX > 19) ? (65) : (45))
  2233.     Local $IWIDTH = $IBORDER, $ICOLWIDTH = 0, $AICOLWIDTH[$ICOLFILL], $IMIN_COLWIDTH = 55
  2234.     For $I = 0 To UBound($AICOLWIDTH) - 1
  2235.         GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH, $I, $_ARRAYCONSTANT_LVSCW_AUTOSIZE)
  2236.         $ICOLWIDTH = GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $I, 0)
  2237.         If $SHEADER <> "" Then
  2238.             GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH, $I, $_ARRAYCONSTANT_LVSCW_AUTOSIZE_USEHEADER)
  2239.             Local $ICOLWIDTHHEADER = GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $I, 0)
  2240.             If $ICOLWIDTH < $IMIN_COLWIDTH And $ICOLWIDTHHEADER < $IMIN_COLWIDTH Then
  2241.                 GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH, $I, $IMIN_COLWIDTH)
  2242.                 $ICOLWIDTH = $IMIN_COLWIDTH
  2243.             ElseIf $ICOLWIDTHHEADER < $ICOLWIDTH Then
  2244.                 GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH, $I, $ICOLWIDTH)
  2245.             Else
  2246.                 $ICOLWIDTH = $ICOLWIDTHHEADER
  2247.             EndIf
  2248.         Else
  2249.             If $ICOLWIDTH < $IMIN_COLWIDTH Then
  2250.                 GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH, $I, $IMIN_COLWIDTH)
  2251.                 $ICOLWIDTH = $IMIN_COLWIDTH
  2252.             EndIf
  2253.         EndIf
  2254.         $IWIDTH += $ICOLWIDTH
  2255.         $AICOLWIDTH[$I] = $ICOLWIDTH
  2256.     Next
  2257.     If $IWIDTH > @DesktopWidth - 100 Then
  2258.         $IWIDTH = $IBORDER
  2259.         For $I = 0 To UBound($AICOLWIDTH) - 1
  2260.             If $AICOLWIDTH[$I] > $IMAX_COLWIDTH Then
  2261.                 GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH, $I, $IMAX_COLWIDTH)
  2262.                 $IWIDTH += $IMAX_COLWIDTH
  2263.             Else
  2264.                 $IWIDTH += $AICOLWIDTH[$I]
  2265.             EndIf
  2266.         Next
  2267.     EndIf
  2268.     If $IWIDTH > @DesktopWidth - 100 Then
  2269.         $IWIDTH = @DesktopWidth - 100
  2270.     ElseIf $IWIDTH < $IMINSIZE Then
  2271.         $IWIDTH = $IMINSIZE
  2272.     EndIf
  2273.     Local $TRECT = DllStructCreate("struct; long Left;long Top;long Right;long Bottom; endstruct")
  2274.     DllCall("user32.dll", "struct*", "SendMessageW", "hwnd", GUICtrlGetHandle($IDLISTVIEW), "uint", $_ARRAYCONSTANT_LVM_GETITEMRECT, "wparam", 0, "struct*", $TRECT)
  2275.     Local $AIWIN_POS = WinGetPos($HGUI)
  2276.     Local $AILV_POS = ControlGetPos($HGUI, "", $IDLISTVIEW)
  2277.     $IHEIGHT = (($IROWINDEX + 4) * (DllStructGetData($TRECT, "Bottom") - DllStructGetData($TRECT, "Top"))) + $AIWIN_POS[3] - $AILV_POS[3]
  2278.     If $IHEIGHT > @DesktopHeight - 100 Then
  2279.         $IHEIGHT = @DesktopHeight - 100
  2280.     ElseIf $IHEIGHT < $IMINSIZE Then
  2281.         $IHEIGHT = $IMINSIZE
  2282.     EndIf
  2283.     If $IVERBOSE Then SplashOff()
  2284.     GUISetState(@SW_HIDE, $HGUI)
  2285.     WinMove($HGUI, "", (@DesktopWidth - $IWIDTH) / 2, (@DesktopHeight - $IHEIGHT) / 2, $IWIDTH, $IHEIGHT)
  2286.     GUISetState(@SW_SHOW, $HGUI)
  2287.     Local $IONEVENTMODE = Opt("GUIOnEventMode", 0), $IMSG
  2288.     __ARRAYDISPLAY_REGISTERSORTCALLBACK($IDLISTVIEW, 2, True, "__ArrayDisplay_SortCallBack")
  2289.     While 1
  2290.         $IMSG = GUIGetMsg()
  2291.         Switch $IMSG
  2292.             Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
  2293.                 ExitLoop
  2294.             Case $IDCOPY_ID, $IDCOPY_DATA
  2295.                 Local $ISEL_COUNT = GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_GETSELECTEDCOUNT, 0, 0)
  2296.                 If $IVERBOSE And (Not $ISEL_COUNT) And ($IITEM_END - $IITEM_START) * ($ISUBITEM_END - $ISUBITEM_START) > 10000 Then
  2297.                     SplashTextOn($SMSGBOXTITLE, "Copying data" & @CRLF & @CRLF & "Please be patient", 300, 100)
  2298.                 EndIf
  2299.                 Local $SCLIP = "", $SITEM, $ASPLIT
  2300.                 For $I = 0 To GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0) - 1
  2301.                     If $ISEL_COUNT And Not (GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $I, $_ARRAYCONSTANT_LVIS_SELECTED) <> 0) Then
  2302.                         ContinueLoop
  2303.                     EndIf
  2304.                     $SITEM = __ARRAYDISPLAY_GETITEMTEXTSTRING($IDLISTVIEW, $I)
  2305.                     If $IMSG = $IDCOPY_ID And $INOROW Then
  2306.                         $SITEM = "Row " & ($I + (($ITRANSPOSE) ? ($ISUBITEM_START) : ($IITEM_START))) & $SCURR_SEPARATOR & $SITEM
  2307.                     EndIf
  2308.                     If $IMSG = $IDCOPY_DATA And Not $INOROW Then
  2309.                         $SITEM = StringRegExpReplace($SITEM, "^Row\s\d+\|(.*)$", "$1")
  2310.                     EndIf
  2311.                     If $ICW_COLWIDTH Then
  2312.                         $ASPLIT = StringSplit($SITEM, $SCURR_SEPARATOR)
  2313.                         $SITEM = ""
  2314.                         For $J = 1 To $ASPLIT[0]
  2315.                             $SITEM &= StringFormat("%-" & $ICW_COLWIDTH + 1 & "s", StringLeft($ASPLIT[$J], $ICW_COLWIDTH))
  2316.                         Next
  2317.                     Else
  2318.                         $SITEM = StringReplace($SITEM, $SCURR_SEPARATOR, $VUSER_SEPARATOR)
  2319.                     EndIf
  2320.                     $SCLIP &= $SITEM & @CRLF
  2321.                 Next
  2322.                 $SITEM = $SHEADER
  2323.                 If $IMSG = $IDCOPY_ID Then
  2324.                     $SITEM = $SHEADER
  2325.                     If $INOROW Then
  2326.                         $SITEM = "Row|" & $SITEM
  2327.                     EndIf
  2328.                     If $ICW_COLWIDTH Then
  2329.                         $ASPLIT = StringSplit($SITEM, $SCURR_SEPARATOR)
  2330.                         $SITEM = ""
  2331.                         For $J = 1 To $ASPLIT[0]
  2332.                             $SITEM &= StringFormat("%-" & $ICW_COLWIDTH + 1 & "s", StringLeft($ASPLIT[$J], $ICW_COLWIDTH))
  2333.                         Next
  2334.                     Else
  2335.                         $SITEM = StringReplace($SITEM, $SCURR_SEPARATOR, $VUSER_SEPARATOR)
  2336.                     EndIf
  2337.                     $SCLIP = $SITEM & @CRLF & $SCLIP
  2338.                 EndIf
  2339.                 ClipPut($SCLIP)
  2340.                 SplashOff()
  2341.                 GUICtrlSetState($IDLISTVIEW, $_ARRAYCONSTANT_GUI_FOCUS)
  2342.             Case $IDLISTVIEW
  2343.                 __ARRAYDISPLAY_SORTITEMS($IDLISTVIEW, GUICtrlGetState($IDLISTVIEW))
  2344.             Case $IDUSER_FUNC
  2345.                 Local $AISELITEMS[1] = [0]
  2346.                 For $I = 0 To GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0) - 1
  2347.                     If (GUICtrlSendMsg($IDLISTVIEW, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $I, $_ARRAYCONSTANT_LVIS_SELECTED) <> 0) Then
  2348.                         $AISELITEMS[0] += 1
  2349.                         ReDim $AISELITEMS[$AISELITEMS[0] + 1]
  2350.                         $AISELITEMS[$AISELITEMS[0]] = $I + $IITEM_START
  2351.                     EndIf
  2352.                 Next
  2353.                 $HUSER_FUNCTION($AARRAY, $AISELITEMS)
  2354.                 GUICtrlSetState($IDLISTVIEW, $_ARRAYCONSTANT_GUI_FOCUS)
  2355.             Case $IDEXIT_SCRIPT
  2356.                 GUIDelete($HGUI)
  2357.                 Exit
  2358.         EndSwitch
  2359.     WEnd
  2360.     GUIDelete($HGUI)
  2361.     Opt("GUICoordMode", $ICOORDMODE)
  2362.     Opt("GUIOnEventMode", $IONEVENTMODE)
  2363.     Return 1
  2364. EndFunc   ;==>__ARRAYDISPLAY_SHARE
  2365. Func __ARRAYDISPLAY_REGISTERSORTCALLBACK($HWND, $VCOMPARETYPE = 2, $BARROWS = True, $SSORT_CALLBACK = "__ArrayDisplay_SortCallBack")
  2366.     #Au3Stripper_Ignore_Funcs=$sSort_Callback
  2367.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  2368.     Local $HHEADER = HWnd(GUICtrlSendMsg($HWND, 4127, 0, 0))
  2369.     $__G_AARRAYDISPLAY_SORTINFO[1] = $HWND
  2370.     $__G_AARRAYDISPLAY_SORTINFO[2] = DllCallbackRegister($SSORT_CALLBACK, "int", "int;int;hwnd")
  2371.     $__G_AARRAYDISPLAY_SORTINFO[3] = -1
  2372.     $__G_AARRAYDISPLAY_SORTINFO[4] = -1
  2373.     $__G_AARRAYDISPLAY_SORTINFO[5] = 1
  2374.     $__G_AARRAYDISPLAY_SORTINFO[6] = -1
  2375.     $__G_AARRAYDISPLAY_SORTINFO[7] = 0
  2376.     $__G_AARRAYDISPLAY_SORTINFO[8] = $VCOMPARETYPE
  2377.     $__G_AARRAYDISPLAY_SORTINFO[9] = $BARROWS
  2378.     $__G_AARRAYDISPLAY_SORTINFO[10] = $HHEADER
  2379.     Return $__G_AARRAYDISPLAY_SORTINFO[2] <> 0
  2380. EndFunc   ;==>__ARRAYDISPLAY_REGISTERSORTCALLBACK
  2381. #Au3Stripper_Ignore_Funcs=__ArrayDisplay_SortCallBack
  2382. Func __ARRAYDISPLAY_SORTCALLBACK($NITEM1, $NITEM2, $HWND)
  2383.     If $__G_AARRAYDISPLAY_SORTINFO[3] = $__G_AARRAYDISPLAY_SORTINFO[4] Then
  2384.         If Not $__G_AARRAYDISPLAY_SORTINFO[7] Then
  2385.             $__G_AARRAYDISPLAY_SORTINFO[5] *= -1
  2386.             $__G_AARRAYDISPLAY_SORTINFO[7] = 1
  2387.         EndIf
  2388.     Else
  2389.         $__G_AARRAYDISPLAY_SORTINFO[7] = 1
  2390.     EndIf
  2391.     $__G_AARRAYDISPLAY_SORTINFO[6] = $__G_AARRAYDISPLAY_SORTINFO[3]
  2392.     Local $SVAL1 = __ARRAYDISPLAY_GETITEMTEXT($HWND, $NITEM1, $__G_AARRAYDISPLAY_SORTINFO[3])
  2393.     Local $SVAL2 = __ARRAYDISPLAY_GETITEMTEXT($HWND, $NITEM2, $__G_AARRAYDISPLAY_SORTINFO[3])
  2394.     If $__G_AARRAYDISPLAY_SORTINFO[8] = 1 Then
  2395.         If (StringIsFloat($SVAL1) Or StringIsInt($SVAL1)) Then $SVAL1 = Number($SVAL1)
  2396.         If (StringIsFloat($SVAL2) Or StringIsInt($SVAL2)) Then $SVAL2 = Number($SVAL2)
  2397.     EndIf
  2398.     Local $NRESULT
  2399.     If $__G_AARRAYDISPLAY_SORTINFO[8] < 2 Then
  2400.         $NRESULT = 0
  2401.         If $SVAL1 < $SVAL2 Then
  2402.             $NRESULT = -1
  2403.         ElseIf $SVAL1 > $SVAL2 Then
  2404.             $NRESULT = 1
  2405.         EndIf
  2406.     Else
  2407.         $NRESULT = DllCall("shlwapi.dll", "int", "StrCmpLogicalW", "wstr", $SVAL1, "wstr", $SVAL2)[0]
  2408.     EndIf
  2409.     $NRESULT = $NRESULT * $__G_AARRAYDISPLAY_SORTINFO[5]
  2410.     Return $NRESULT
  2411. EndFunc   ;==>__ARRAYDISPLAY_SORTCALLBACK
  2412. Func __ARRAYDISPLAY_SORTITEMS($HWND, $ICOL)
  2413.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  2414.     Local $PFUNCTION = DllCallbackGetPtr($__G_AARRAYDISPLAY_SORTINFO[2])
  2415.     $__G_AARRAYDISPLAY_SORTINFO[3] = $ICOL
  2416.     $__G_AARRAYDISPLAY_SORTINFO[7] = 0
  2417.     $__G_AARRAYDISPLAY_SORTINFO[4] = $__G_AARRAYDISPLAY_SORTINFO[6]
  2418.     Local $ARESULT = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $HWND, "uint", 4177, "hwnd", $HWND, "ptr", $PFUNCTION)
  2419.     If $ARESULT[0] <> 0 Then
  2420.         If $__G_AARRAYDISPLAY_SORTINFO[9] Then
  2421.             Local $HHEADER = $__G_AARRAYDISPLAY_SORTINFO[10], $IFORMAT
  2422.             For $X = 0 To __ARRAYDISPLAY_GETITEMCOUNT($HHEADER) - 1
  2423.                 $IFORMAT = __ARRAYDISPLAY_GETITEMFORMAT($HHEADER, $X)
  2424.                 If BitAND($IFORMAT, 512) Then
  2425.                     __ARRAYDISPLAY_SETITEMFORMAT($HHEADER, $X, BitXOR($IFORMAT, 512))
  2426.                 ElseIf BitAND($IFORMAT, 1024) Then
  2427.                     __ARRAYDISPLAY_SETITEMFORMAT($HHEADER, $X, BitXOR($IFORMAT, 1024))
  2428.                 EndIf
  2429.             Next
  2430.             $IFORMAT = __ARRAYDISPLAY_GETITEMFORMAT($HHEADER, $ICOL)
  2431.             If $__G_AARRAYDISPLAY_SORTINFO[5] = 1 Then
  2432.                 __ARRAYDISPLAY_SETITEMFORMAT($HHEADER, $ICOL, BitOR($IFORMAT, 1024))
  2433.             Else
  2434.                 __ARRAYDISPLAY_SETITEMFORMAT($HHEADER, $ICOL, BitOR($IFORMAT, 512))
  2435.             EndIf
  2436.         EndIf
  2437.         Return True
  2438.     EndIf
  2439.     Return False
  2440. EndFunc   ;==>__ARRAYDISPLAY_SORTITEMS
  2441. Func __ARRAYDISPLAY_ADDITEM($HWND, $STEXT)
  2442.     Local $TITEM = DllStructCreate($_ARRAYCONSTANT_TAGLVITEM)
  2443.     DllStructSetData($TITEM, "Param", 0)
  2444.     Local $IBUFFER = StringLen($STEXT) + 1
  2445.     Local $TBUFFER = DllStructCreate("wchar Text[" & $IBUFFER & "]")
  2446.     $IBUFFER *= 2
  2447.     DllStructSetData($TBUFFER, "Text", $STEXT)
  2448.     DllStructSetData($TITEM, "Text", DllStructGetPtr($TBUFFER))
  2449.     DllStructSetData($TITEM, "TextMax", $IBUFFER)
  2450.     Local $IMASK = 5
  2451.     DllStructSetData($TITEM, "Mask", $IMASK)
  2452.     DllStructSetData($TITEM, "Item", 999999999)
  2453.     DllStructSetData($TITEM, "Image", -1)
  2454.     Local $PITEM = DllStructGetPtr($TITEM)
  2455.     Local $IRET = GUICtrlSendMsg($HWND, 4173, 0, $PITEM)
  2456.     Return $IRET
  2457. EndFunc   ;==>__ARRAYDISPLAY_ADDITEM
  2458. Func __ARRAYDISPLAY_ADDSUBITEM($HWND, $IINDEX, $STEXT, $ISUBITEM)
  2459.     Local $IBUFFER = StringLen($STEXT) + 1
  2460.     Local $TBUFFER = DllStructCreate("wchar Text[" & $IBUFFER & "]")
  2461.     $IBUFFER *= 2
  2462.     Local $PBUFFER = DllStructGetPtr($TBUFFER)
  2463.     Local $TITEM = DllStructCreate($_ARRAYCONSTANT_TAGLVITEM)
  2464.     Local $IMASK = 1
  2465.     DllStructSetData($TBUFFER, "Text", $STEXT)
  2466.     DllStructSetData($TITEM, "Mask", $IMASK)
  2467.     DllStructSetData($TITEM, "Item", $IINDEX)
  2468.     DllStructSetData($TITEM, "SubItem", $ISUBITEM)
  2469.     DllStructSetData($TITEM, "Image", -1)
  2470.     Local $PITEM = DllStructGetPtr($TITEM)
  2471.     DllStructSetData($TITEM, "Text", $PBUFFER)
  2472.     Local $IRET = GUICtrlSendMsg($HWND, 4172, 0, $PITEM)
  2473.     Return $IRET <> 0
  2474. EndFunc   ;==>__ARRAYDISPLAY_ADDSUBITEM
  2475. Func __ARRAYDISPLAY_GETCOLUMNCOUNT($HWND)
  2476.     Local $HHEADER = HWnd(GUICtrlSendMsg($HWND, 4127, 0, 0))
  2477.     Return __ARRAYDISPLAY_GETITEMCOUNT($HHEADER)
  2478. EndFunc   ;==>__ARRAYDISPLAY_GETCOLUMNCOUNT
  2479. Func __ARRAYDISPLAY_GETHEADER($HWND)
  2480.     Return HWnd(GUICtrlSendMsg($HWND, 4127, 0, 0))
  2481. EndFunc   ;==>__ARRAYDISPLAY_GETHEADER
  2482. Func __ARRAYDISPLAY_GETITEM($HWND, $IINDEX, ByRef $TITEM)
  2483.     Local $ARESULT = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $HWND, "uint", 4619, "wparam", $IINDEX, "struct*", $TITEM)
  2484.     Return $ARESULT[0] <> 0
  2485. EndFunc   ;==>__ARRAYDISPLAY_GETITEM
  2486. Func __ARRAYDISPLAY_GETITEMCOUNT($HWND)
  2487.     Local $ARESULT = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $HWND, "uint", 4608, "wparam", 0, "lparam", 0)
  2488.     Return $ARESULT[0]
  2489. EndFunc   ;==>__ARRAYDISPLAY_GETITEMCOUNT
  2490. Func __ARRAYDISPLAY_GETITEMFORMAT($HWND, $IINDEX)
  2491.     Local $TITEM = DllStructCreate($_ARRAYCONSTANT_TAGHDITEM)
  2492.     DllStructSetData($TITEM, "Mask", 4)
  2493.     __ARRAYDISPLAY_GETITEM($HWND, $IINDEX, $TITEM)
  2494.     Return DllStructGetData($TITEM, "Fmt")
  2495. EndFunc   ;==>__ARRAYDISPLAY_GETITEMFORMAT
  2496. Func __ARRAYDISPLAY_GETITEMTEXT($HWND, $IINDEX, $ISUBITEM = 0)
  2497.     Local $TBUFFER = DllStructCreate("wchar Text[4096]")
  2498.     Local $PBUFFER = DllStructGetPtr($TBUFFER)
  2499.     Local $TITEM = DllStructCreate($_ARRAYCONSTANT_TAGLVITEM)
  2500.     DllStructSetData($TITEM, "SubItem", $ISUBITEM)
  2501.     DllStructSetData($TITEM, "TextMax", 4096)
  2502.     DllStructSetData($TITEM, "Text", $PBUFFER)
  2503.     If IsHWnd($HWND) Then
  2504.         DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $HWND, "uint", 4211, "wparam", $IINDEX, "struct*", $TITEM)
  2505.     Else
  2506.         Local $PITEM = DllStructGetPtr($TITEM)
  2507.         GUICtrlSendMsg($HWND, 4211, $IINDEX, $PITEM)
  2508.     EndIf
  2509.     Return DllStructGetData($TBUFFER, "Text")
  2510. EndFunc   ;==>__ARRAYDISPLAY_GETITEMTEXT
  2511. Func __ARRAYDISPLAY_GETITEMTEXTSTRING($HWND, $IITEM)
  2512.     Local $SROW = "", $SSEPARATORCHAR = Opt("GUIDataSeparatorChar")
  2513.     Local $ISELECTED = $IITEM
  2514.     For $X = 0 To __ARRAYDISPLAY_GETCOLUMNCOUNT($HWND) - 1
  2515.         $SROW &= __ARRAYDISPLAY_GETITEMTEXT($HWND, $ISELECTED, $X) & $SSEPARATORCHAR
  2516.     Next
  2517.     Return StringTrimRight($SROW, 1)
  2518. EndFunc   ;==>__ARRAYDISPLAY_GETITEMTEXTSTRING
  2519. Func __ARRAYDISPLAY_JUSTIFYCOLUMN($IDLISTVIEW, $IINDEX, $IALIGN = -1)
  2520.     Local $TCOLUMN = DllStructCreate("uint Mask;int Fmt;int CX;ptr Text;int TextMax;int SubItem;int Image;int Order;int cxMin;int cxDefault;int cxIdeal")
  2521.     If $IALIGN < 0 Or $IALIGN > 2 Then $IALIGN = 0
  2522.     DllStructSetData($TCOLUMN, "Mask", 1)
  2523.     DllStructSetData($TCOLUMN, "Fmt", $IALIGN)
  2524.     Local $PCOLUMN = DllStructGetPtr($TCOLUMN)
  2525.     Local $IRET = GUICtrlSendMsg($IDLISTVIEW, 4192, $IINDEX, $PCOLUMN)
  2526.     Return $IRET <> 0
  2527. EndFunc   ;==>__ARRAYDISPLAY_JUSTIFYCOLUMN
  2528. Func __ARRAYDISPLAY_SETITEMFORMAT($HWND, $IINDEX, $IFORMAT)
  2529.     Local $TITEM = DllStructCreate($_ARRAYCONSTANT_TAGHDITEM)
  2530.     DllStructSetData($TITEM, "Mask", 4)
  2531.     DllStructSetData($TITEM, "Fmt", $IFORMAT)
  2532.     Local $ARESULT = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $HWND, "uint", 4620, "wparam", $IINDEX, "struct*", $TITEM)
  2533.     Return $ARESULT[0] <> 0
  2534. EndFunc   ;==>__ARRAYDISPLAY_SETITEMFORMAT
  2535. Global Enum $ARRAYFILL_FORCE_DEFAULT, $ARRAYFILL_FORCE_SINGLEITEM, $ARRAYFILL_FORCE_INT, $ARRAYFILL_FORCE_NUMBER, $ARRAYFILL_FORCE_PTR, $ARRAYFILL_FORCE_HWND, $ARRAYFILL_FORCE_STRING, $ARRAYFILL_FORCE_BOOLEAN
  2536. Global Enum $ARRAYUNIQUE_NOCOUNT, $ARRAYUNIQUE_COUNT
  2537. Global Enum $ARRAYUNIQUE_AUTO, $ARRAYUNIQUE_FORCE32, $ARRAYUNIQUE_FORCE64, $ARRAYUNIQUE_MATCH, $ARRAYUNIQUE_DISTINCT
  2538. Func _ArrayAdd(ByRef $AARRAY, $VVALUE, $ISTART = 0, $SDELIM_ITEM = "|", $SDELIM_ROW = @CRLF, $IFORCE = $ARRAYFILL_FORCE_DEFAULT)
  2539.     If $ISTART = Default Then $ISTART = 0
  2540.     If $SDELIM_ITEM = Default Then $SDELIM_ITEM = "|"
  2541.     If $SDELIM_ROW = Default Then $SDELIM_ROW = @CRLF
  2542.     If $IFORCE = Default Then $IFORCE = $ARRAYFILL_FORCE_DEFAULT
  2543.     If Not IsArray($AARRAY) Then Return SetError(1, 0, -1)
  2544.     Local $IDIM_1 = UBound($AARRAY, $UBOUND_ROWS)
  2545.     Local $HDATATYPE = 0
  2546.     Switch $IFORCE
  2547.         Case $ARRAYFILL_FORCE_INT
  2548.             $HDATATYPE = INT
  2549.         Case $ARRAYFILL_FORCE_NUMBER
  2550.             $HDATATYPE = NUMBER
  2551.         Case $ARRAYFILL_FORCE_PTR
  2552.             $HDATATYPE = PTR
  2553.         Case $ARRAYFILL_FORCE_HWND
  2554.             $HDATATYPE = HWND
  2555.         Case $ARRAYFILL_FORCE_STRING
  2556.             $HDATATYPE = STRING
  2557.         Case $ARRAYFILL_FORCE_BOOLEAN
  2558.             $HDATATYPE = "Boolean"
  2559.     EndSwitch
  2560.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  2561.         Case 1
  2562.             If $IFORCE = $ARRAYFILL_FORCE_SINGLEITEM Then
  2563.                 ReDim $AARRAY[$IDIM_1 + 1]
  2564.                 $AARRAY[$IDIM_1] = $VVALUE
  2565.                 Return $IDIM_1
  2566.             EndIf
  2567.             If IsArray($VVALUE) Then
  2568.                 If UBound($VVALUE, $UBOUND_DIMENSIONS) <> 1 Then Return SetError(5, 0, -1)
  2569.                 $HDATATYPE = 0
  2570.             Else
  2571.                 Local $ATMP = StringSplit($VVALUE, $SDELIM_ITEM, $STR_NOCOUNT + $STR_ENTIRESPLIT)
  2572.                 If UBound($ATMP, $UBOUND_ROWS) = 1 Then
  2573.                     $ATMP[0] = $VVALUE
  2574.                 EndIf
  2575.                 $VVALUE = $ATMP
  2576.             EndIf
  2577.             Local $IADD = UBound($VVALUE, $UBOUND_ROWS)
  2578.             ReDim $AARRAY[$IDIM_1 + $IADD]
  2579.             For $I = 0 To $IADD - 1
  2580.                 If String($HDATATYPE) = "Boolean" Then
  2581.                     Switch $VVALUE[$I]
  2582.                         Case "True", "1"
  2583.                             $AARRAY[$IDIM_1 + $I] = True
  2584.                         Case "False", "0", ""
  2585.                             $AARRAY[$IDIM_1 + $I] = False
  2586.                     EndSwitch
  2587.                 ElseIf IsFunc($HDATATYPE) Then
  2588.                     $AARRAY[$IDIM_1 + $I] = $HDATATYPE($VVALUE[$I])
  2589.                 Else
  2590.                     $AARRAY[$IDIM_1 + $I] = $VVALUE[$I]
  2591.                 EndIf
  2592.             Next
  2593.             Return $IDIM_1 + $IADD - 1
  2594.         Case 2
  2595.             Local $IDIM_2 = UBound($AARRAY, $UBOUND_COLUMNS)
  2596.             If $ISTART < 0 Or $ISTART > $IDIM_2 - 1 Then Return SetError(4, 0, -1)
  2597.             Local $IVALDIM_1, $IVALDIM_2 = 0, $ICOLCOUNT
  2598.             If IsArray($VVALUE) Then
  2599.                 If UBound($VVALUE, $UBOUND_DIMENSIONS) <> 2 Then Return SetError(5, 0, -1)
  2600.                 $IVALDIM_1 = UBound($VVALUE, $UBOUND_ROWS)
  2601.                 $IVALDIM_2 = UBound($VVALUE, $UBOUND_COLUMNS)
  2602.                 $HDATATYPE = 0
  2603.             Else
  2604.                 Local $ASPLIT_1 = StringSplit($VVALUE, $SDELIM_ROW, $STR_NOCOUNT + $STR_ENTIRESPLIT)
  2605.                 $IVALDIM_1 = UBound($ASPLIT_1, $UBOUND_ROWS)
  2606.                 Local $ATMP[$IVALDIM_1][0], $ASPLIT_2
  2607.                 For $I = 0 To $IVALDIM_1 - 1
  2608.                     $ASPLIT_2 = StringSplit($ASPLIT_1[$I], $SDELIM_ITEM, $STR_NOCOUNT + $STR_ENTIRESPLIT)
  2609.                     $ICOLCOUNT = UBound($ASPLIT_2)
  2610.                     If $ICOLCOUNT > $IVALDIM_2 Then
  2611.                         $IVALDIM_2 = $ICOLCOUNT
  2612.                         ReDim $ATMP[$IVALDIM_1][$IVALDIM_2]
  2613.                     EndIf
  2614.                     For $J = 0 To $ICOLCOUNT - 1
  2615.                         $ATMP[$I][$J] = $ASPLIT_2[$J]
  2616.                     Next
  2617.                 Next
  2618.                 $VVALUE = $ATMP
  2619.             EndIf
  2620.             If UBound($VVALUE, $UBOUND_COLUMNS) + $ISTART > UBound($AARRAY, $UBOUND_COLUMNS) Then Return SetError(3, 0, -1)
  2621.             ReDim $AARRAY[$IDIM_1 + $IVALDIM_1][$IDIM_2]
  2622.             For $IWRITETO_INDEX = 0 To $IVALDIM_1 - 1
  2623.                 For $J = 0 To $IDIM_2 - 1
  2624.                     If $J < $ISTART Then
  2625.                         $AARRAY[$IWRITETO_INDEX + $IDIM_1][$J] = ""
  2626.                     ElseIf $J - $ISTART > $IVALDIM_2 - 1 Then
  2627.                         $AARRAY[$IWRITETO_INDEX + $IDIM_1][$J] = ""
  2628.                     Else
  2629.                         If String($HDATATYPE) = "Boolean" Then
  2630.                             Switch $VVALUE[$IWRITETO_INDEX][$J - $ISTART]
  2631.                                 Case "True", "1"
  2632.                                     $AARRAY[$IWRITETO_INDEX + $IDIM_1][$J] = True
  2633.                                 Case "False", "0", ""
  2634.                                     $AARRAY[$IWRITETO_INDEX + $IDIM_1][$J] = False
  2635.                             EndSwitch
  2636.                         ElseIf IsFunc($HDATATYPE) Then
  2637.                             $AARRAY[$IWRITETO_INDEX + $IDIM_1][$J] = $HDATATYPE($VVALUE[$IWRITETO_INDEX][$J - $ISTART])
  2638.                         Else
  2639.                             $AARRAY[$IWRITETO_INDEX + $IDIM_1][$J] = $VVALUE[$IWRITETO_INDEX][$J - $ISTART]
  2640.                         EndIf
  2641.                     EndIf
  2642.                 Next
  2643.             Next
  2644.         Case Else
  2645.             Return SetError(2, 0, -1)
  2646.     EndSwitch
  2647.     Return UBound($AARRAY, $UBOUND_ROWS) - 1
  2648. EndFunc   ;==>_ArrayAdd
  2649. Func _ArrayBinarySearch(Const ByRef $AARRAY, $VVALUE, $ISTART = 0, $IEND = 0, $ICOLUMN = 0)
  2650.     If $ISTART = Default Then $ISTART = 0
  2651.     If $IEND = Default Then $IEND = 0
  2652.     If $ICOLUMN = Default Then $ICOLUMN = 0
  2653.     If Not IsArray($AARRAY) Then Return SetError(1, 0, -1)
  2654.     Local $IDIM_1 = UBound($AARRAY, $UBOUND_ROWS)
  2655.     If $IDIM_1 = 0 Then Return SetError(6, 0, -1)
  2656.     If $IEND < 1 Or $IEND > $IDIM_1 - 1 Then $IEND = $IDIM_1 - 1
  2657.     If $ISTART < 0 Then $ISTART = 0
  2658.     If $ISTART > $IEND Then Return SetError(4, 0, -1)
  2659.     Local $IMID = Int(($IEND + $ISTART) / 2)
  2660.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  2661.         Case 1
  2662.             If $AARRAY[$ISTART] > $VVALUE Or $AARRAY[$IEND] < $VVALUE Then Return SetError(2, 0, -1)
  2663.             While $ISTART <= $IMID And $VVALUE <> $AARRAY[$IMID]
  2664.                 If $VVALUE < $AARRAY[$IMID] Then
  2665.                     $IEND = $IMID - 1
  2666.                 Else
  2667.                     $ISTART = $IMID + 1
  2668.                 EndIf
  2669.                 $IMID = Int(($IEND + $ISTART) / 2)
  2670.             WEnd
  2671.             If $ISTART > $IEND Then Return SetError(3, 0, -1)
  2672.         Case 2
  2673.             Local $IDIM_2 = UBound($AARRAY, $UBOUND_COLUMNS) - 1
  2674.             If $ICOLUMN < 0 Or $ICOLUMN > $IDIM_2 Then Return SetError(7, 0, -1)
  2675.             If $AARRAY[$ISTART][$ICOLUMN] > $VVALUE Or $AARRAY[$IEND][$ICOLUMN] < $VVALUE Then Return SetError(2, 0, -1)
  2676.             While $ISTART <= $IMID And $VVALUE <> $AARRAY[$IMID][$ICOLUMN]
  2677.                 If $VVALUE < $AARRAY[$IMID][$ICOLUMN] Then
  2678.                     $IEND = $IMID - 1
  2679.                 Else
  2680.                     $ISTART = $IMID + 1
  2681.                 EndIf
  2682.                 $IMID = Int(($IEND + $ISTART) / 2)
  2683.             WEnd
  2684.             If $ISTART > $IEND Then Return SetError(3, 0, -1)
  2685.         Case Else
  2686.             Return SetError(5, 0, -1)
  2687.     EndSwitch
  2688.     Return $IMID
  2689. EndFunc   ;==>_ArrayBinarySearch
  2690. Func _ArrayColDelete(ByRef $AARRAY, $ICOLUMN, $BCONVERT = False)
  2691.     If $BCONVERT = Default Then $BCONVERT = False
  2692.     If Not IsArray($AARRAY) Then Return SetError(1, 0, -1)
  2693.     Local $IDIM_1 = UBound($AARRAY, $UBOUND_ROWS)
  2694.     If UBound($AARRAY, $UBOUND_DIMENSIONS) <> 2 Then Return SetError(2, 0, -1)
  2695.     Local $IDIM_2 = UBound($AARRAY, $UBOUND_COLUMNS)
  2696.     Switch $IDIM_2
  2697.         Case 2
  2698.             If $ICOLUMN < 0 Or $ICOLUMN > 1 Then Return SetError(3, 0, -1)
  2699.             If $BCONVERT Then
  2700.                 Local $ATEMPARRAY[$IDIM_1]
  2701.                 For $I = 0 To $IDIM_1 - 1
  2702.                     $ATEMPARRAY[$I] = $AARRAY[$I][(Not $ICOLUMN)]
  2703.                 Next
  2704.                 $AARRAY = $ATEMPARRAY
  2705.             Else
  2706.                 ContinueCase
  2707.             EndIf
  2708.         Case Else
  2709.             If $ICOLUMN < 0 Or $ICOLUMN > $IDIM_2 - 1 Then Return SetError(3, 0, -1)
  2710.             For $I = 0 To $IDIM_1 - 1
  2711.                 For $J = $ICOLUMN To $IDIM_2 - 2
  2712.                     $AARRAY[$I][$J] = $AARRAY[$I][$J + 1]
  2713.                 Next
  2714.             Next
  2715.             ReDim $AARRAY[$IDIM_1][$IDIM_2 - 1]
  2716.     EndSwitch
  2717.     Return UBound($AARRAY, $UBOUND_COLUMNS)
  2718. EndFunc   ;==>_ARRAYCOLDELETE
  2719. Func _ArrayColInsert(ByRef $AARRAY, $ICOLUMN)
  2720.     If Not IsArray($AARRAY) Then Return SetError(1, 0, -1)
  2721.     Local $IDIM_1 = UBound($AARRAY, $UBOUND_ROWS)
  2722.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  2723.         Case 1
  2724.             Local $ATEMPARRAY[$IDIM_1][2]
  2725.             Switch $ICOLUMN
  2726.                 Case 0, 1
  2727.                     For $I = 0 To $IDIM_1 - 1
  2728.                         $ATEMPARRAY[$I][(Not $ICOLUMN)] = $AARRAY[$I]
  2729.                     Next
  2730.                 Case Else
  2731.                     Return SetError(3, 0, -1)
  2732.             EndSwitch
  2733.             $AARRAY = $ATEMPARRAY
  2734.         Case 2
  2735.             Local $IDIM_2 = UBound($AARRAY, $UBOUND_COLUMNS)
  2736.             If $ICOLUMN < 0 Or $ICOLUMN > $IDIM_2 Then Return SetError(3, 0, -1)
  2737.             ReDim $AARRAY[$IDIM_1][$IDIM_2 + 1]
  2738.             For $I = 0 To $IDIM_1 - 1
  2739.                 For $J = $IDIM_2 To $ICOLUMN + 1 Step -1
  2740.                     $AARRAY[$I][$J] = $AARRAY[$I][$J - 1]
  2741.                 Next
  2742.                 $AARRAY[$I][$ICOLUMN] = ""
  2743.             Next
  2744.         Case Else
  2745.             Return SetError(2, 0, -1)
  2746.     EndSwitch
  2747.     Return UBound($AARRAY, $UBOUND_COLUMNS)
  2748. EndFunc   ;==>_ARRAYCOLINSERT
  2749. Func _ArrayCombinations(Const ByRef $AARRAY, $ISET, $SDELIMITER = "")
  2750.     If $SDELIMITER = Default Then $SDELIMITER = ""
  2751.     If Not IsArray($AARRAY) Then Return SetError(1, 0, 0)
  2752.     If UBound($AARRAY, $UBOUND_DIMENSIONS) <> 1 Then Return SetError(2, 0, 0)
  2753.     Local $IN = UBound($AARRAY)
  2754.     Local $IR = $ISET
  2755.     Local $AIDX[$IR]
  2756.     For $I = 0 To $IR - 1
  2757.         $AIDX[$I] = $I
  2758.     Next
  2759.     Local $ITOTAL = __ARRAY_COMBINATIONS($IN, $IR)
  2760.     Local $ILEFT = $ITOTAL
  2761.     Local $ARESULT[$ITOTAL + 1]
  2762.     $ARESULT[0] = $ITOTAL
  2763.     Local $ICOUNT = 1
  2764.     While $ILEFT > 0
  2765.         __ARRAY_GETNEXT($IN, $IR, $ILEFT, $ITOTAL, $AIDX)
  2766.         For $I = 0 To $ISET - 1
  2767.             $ARESULT[$ICOUNT] &= $AARRAY[$AIDX[$I]] & $SDELIMITER
  2768.         Next
  2769.         If $SDELIMITER <> "" Then $ARESULT[$ICOUNT] = StringTrimRight($ARESULT[$ICOUNT], 1)
  2770.         $ICOUNT += 1
  2771.     WEnd
  2772.     Return $ARESULT
  2773. EndFunc   ;==>_ArrayCombinations
  2774. Func _ArrayConcatenate(ByRef $AARRAYTARGET, Const ByRef $AARRAYSOURCE, $ISTART = 0)
  2775.     If $ISTART = Default Then $ISTART = 0
  2776.     If Not IsArray($AARRAYTARGET) Then Return SetError(1, 0, -1)
  2777.     If Not IsArray($AARRAYSOURCE) Then Return SetError(2, 0, -1)
  2778.     Local $IDIM_TOTAL_TGT = UBound($AARRAYTARGET, $UBOUND_DIMENSIONS)
  2779.     Local $IDIM_TOTAL_SRC = UBound($AARRAYSOURCE, $UBOUND_DIMENSIONS)
  2780.     Local $IDIM_1_TGT = UBound($AARRAYTARGET, $UBOUND_ROWS)
  2781.     Local $IDIM_1_SRC = UBound($AARRAYSOURCE, $UBOUND_ROWS)
  2782.     If $ISTART < 0 Or $ISTART > $IDIM_1_SRC - 1 Then Return SetError(6, 0, -1)
  2783.     Switch $IDIM_TOTAL_TGT
  2784.         Case 1
  2785.             If $IDIM_TOTAL_SRC <> 1 Then Return SetError(4, 0, -1)
  2786.             ReDim $AARRAYTARGET[$IDIM_1_TGT + $IDIM_1_SRC - $ISTART]
  2787.             For $I = $ISTART To $IDIM_1_SRC - 1
  2788.                 $AARRAYTARGET[$IDIM_1_TGT + $I - $ISTART] = $AARRAYSOURCE[$I]
  2789.             Next
  2790.         Case 2
  2791.             If $IDIM_TOTAL_SRC <> 2 Then Return SetError(4, 0, -1)
  2792.             Local $IDIM_2_TGT = UBound($AARRAYTARGET, $UBOUND_COLUMNS)
  2793.             If UBound($AARRAYSOURCE, $UBOUND_COLUMNS) <> $IDIM_2_TGT Then Return SetError(5, 0, -1)
  2794.             ReDim $AARRAYTARGET[$IDIM_1_TGT + $IDIM_1_SRC - $ISTART][$IDIM_2_TGT]
  2795.             For $I = $ISTART To $IDIM_1_SRC - 1
  2796.                 For $J = 0 To $IDIM_2_TGT - 1
  2797.                     $AARRAYTARGET[$IDIM_1_TGT + $I - $ISTART][$J] = $AARRAYSOURCE[$I][$J]
  2798.                 Next
  2799.             Next
  2800.         Case Else
  2801.             Return SetError(3, 0, -1)
  2802.     EndSwitch
  2803.     Return UBound($AARRAYTARGET, $UBOUND_ROWS)
  2804. EndFunc   ;==>_ArrayConcatenate
  2805. Func _ArrayDelete(ByRef $AARRAY, $VRANGE)
  2806.     If Not IsArray($AARRAY) Then Return SetError(1, 0, -1)
  2807.     Local $IDIM_1 = UBound($AARRAY, $UBOUND_ROWS) - 1
  2808.     If IsArray($VRANGE) Then
  2809.         If UBound($VRANGE, $UBOUND_DIMENSIONS) <> 1 Or UBound($VRANGE, $UBOUND_ROWS) < 2 Then Return SetError(4, 0, -1)
  2810.     Else
  2811.         Local $INUMBER, $ASPLIT_1, $ASPLIT_2
  2812.         $VRANGE = StringStripWS($VRANGE, 8)
  2813.         $ASPLIT_1 = StringSplit($VRANGE, ";")
  2814.         $VRANGE = ""
  2815.         For $I = 1 To $ASPLIT_1[0]
  2816.             If Not StringRegExp($ASPLIT_1[$I], "^\d+(-\d+)?$") Then Return SetError(3, 0, -1)
  2817.             $ASPLIT_2 = StringSplit($ASPLIT_1[$I], "-")
  2818.             Switch $ASPLIT_2[0]
  2819.                 Case 1
  2820.                     $VRANGE &= $ASPLIT_2[1] & ";"
  2821.                 Case 2
  2822.                     If Number($ASPLIT_2[2]) >= Number($ASPLIT_2[1]) Then
  2823.                         $INUMBER = $ASPLIT_2[1] - 1
  2824.                         Do
  2825.                             $INUMBER += 1
  2826.                             $VRANGE &= $INUMBER & ";"
  2827.                         Until $INUMBER = $ASPLIT_2[2]
  2828.                     EndIf
  2829.             EndSwitch
  2830.         Next
  2831.         $VRANGE = StringSplit(StringTrimRight($VRANGE, 1), ";")
  2832.     EndIf
  2833.     If $VRANGE[1] < 0 Or $VRANGE[$VRANGE[0]] > $IDIM_1 Then Return SetError(5, 0, -1)
  2834.     Local $ICOPYTO_INDEX = 0
  2835.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  2836.         Case 1
  2837.             For $I = 1 To $VRANGE[0]
  2838.                 $AARRAY[$VRANGE[$I]] = ChrW(64177)
  2839.             Next
  2840.             For $IREADFROM_INDEX = 0 To $IDIM_1
  2841.                 If $AARRAY[$IREADFROM_INDEX] == ChrW(64177) Then
  2842.                     ContinueLoop
  2843.                 Else
  2844.                     If $IREADFROM_INDEX <> $ICOPYTO_INDEX Then
  2845.                         $AARRAY[$ICOPYTO_INDEX] = $AARRAY[$IREADFROM_INDEX]
  2846.                     EndIf
  2847.                     $ICOPYTO_INDEX += 1
  2848.                 EndIf
  2849.             Next
  2850.             ReDim $AARRAY[$IDIM_1 - $VRANGE[0] + 1]
  2851.         Case 2
  2852.             Local $IDIM_2 = UBound($AARRAY, $UBOUND_COLUMNS) - 1
  2853.             For $I = 1 To $VRANGE[0]
  2854.                 $AARRAY[$VRANGE[$I]][0] = ChrW(64177)
  2855.             Next
  2856.             For $IREADFROM_INDEX = 0 To $IDIM_1
  2857.                 If $AARRAY[$IREADFROM_INDEX][0] == ChrW(64177) Then
  2858.                     ContinueLoop
  2859.                 Else
  2860.                     If $IREADFROM_INDEX <> $ICOPYTO_INDEX Then
  2861.                         For $J = 0 To $IDIM_2
  2862.                             $AARRAY[$ICOPYTO_INDEX][$J] = $AARRAY[$IREADFROM_INDEX][$J]
  2863.                         Next
  2864.                     EndIf
  2865.                     $ICOPYTO_INDEX += 1
  2866.                 EndIf
  2867.             Next
  2868.             ReDim $AARRAY[$IDIM_1 - $VRANGE[0] + 1][$IDIM_2 + 1]
  2869.         Case Else
  2870.             Return SetError(2, 0, False)
  2871.     EndSwitch
  2872.     Return UBound($AARRAY, $UBOUND_ROWS)
  2873. EndFunc   ;==>_ArrayDelete
  2874. Func _ArrayDisplay(Const ByRef $AARRAY, $STITLE = Default, $SARRAYRANGE = Default, $IFLAGS = Default, $VUSER_SEPARATOR = Default, $SHEADER = Default, $IMAX_COLWIDTH = Default)
  2875.     #forceref $VUSER_SEPARATOR
  2876.     Local $IRET = __ARRAYDISPLAY_SHARE($AARRAY, $STITLE, $SARRAYRANGE, $IFLAGS, Default, $SHEADER, $IMAX_COLWIDTH, 0, False)
  2877.     Return SetError(@error, @extended, $IRET)
  2878. EndFunc   ;==>_ArrayDisplay
  2879. Func _ArrayExtract(Const ByRef $AARRAY, $ISTART_ROW = -1, $IEND_ROW = -1, $ISTART_COL = -1, $IEND_COL = -1)
  2880.     If $ISTART_ROW = Default Then $ISTART_ROW = -1
  2881.     If $IEND_ROW = Default Then $IEND_ROW = -1
  2882.     If $ISTART_COL = Default Then $ISTART_COL = -1
  2883.     If $IEND_COL = Default Then $IEND_COL = -1
  2884.     If Not IsArray($AARRAY) Then Return SetError(1, 0, -1)
  2885.     Local $IDIM_1 = UBound($AARRAY, $UBOUND_ROWS) - 1
  2886.     If $IEND_ROW = -1 Then $IEND_ROW = $IDIM_1
  2887.     If $ISTART_ROW = -1 Then $ISTART_ROW = 0
  2888.     If $ISTART_ROW < -1 Or $IEND_ROW < -1 Then Return SetError(3, 0, -1)
  2889.     If $ISTART_ROW > $IDIM_1 Or $IEND_ROW > $IDIM_1 Then Return SetError(3, 0, -1)
  2890.     If $ISTART_ROW > $IEND_ROW Then Return SetError(4, 0, -1)
  2891.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  2892.         Case 1
  2893.             Local $ARETARRAY[$IEND_ROW - $ISTART_ROW + 1]
  2894.             For $I = 0 To $IEND_ROW - $ISTART_ROW
  2895.                 $ARETARRAY[$I] = $AARRAY[$I + $ISTART_ROW]
  2896.             Next
  2897.             Return $ARETARRAY
  2898.         Case 2
  2899.             Local $IDIM_2 = UBound($AARRAY, $UBOUND_COLUMNS) - 1
  2900.             If $IEND_COL = -1 Then $IEND_COL = $IDIM_2
  2901.             If $ISTART_COL = -1 Then $ISTART_COL = 0
  2902.             If $ISTART_COL < -1 Or $IEND_COL < -1 Then Return SetError(5, 0, -1)
  2903.             If $ISTART_COL > $IDIM_2 Or $IEND_COL > $IDIM_2 Then Return SetError(5, 0, -1)
  2904.             If $ISTART_COL > $IEND_COL Then Return SetError(6, 0, -1)
  2905.             If $ISTART_COL = $IEND_COL Then
  2906.                 Local $ARETARRAY[$IEND_ROW - $ISTART_ROW + 1]
  2907.             Else
  2908.                 Local $ARETARRAY[$IEND_ROW - $ISTART_ROW + 1][$IEND_COL - $ISTART_COL + 1]
  2909.             EndIf
  2910.             For $I = 0 To $IEND_ROW - $ISTART_ROW
  2911.                 For $J = 0 To $IEND_COL - $ISTART_COL
  2912.                     If $ISTART_COL = $IEND_COL Then
  2913.                         $ARETARRAY[$I] = $AARRAY[$I + $ISTART_ROW][$J + $ISTART_COL]
  2914.                     Else
  2915.                         $ARETARRAY[$I][$J] = $AARRAY[$I + $ISTART_ROW][$J + $ISTART_COL]
  2916.                     EndIf
  2917.                 Next
  2918.             Next
  2919.             Return $ARETARRAY
  2920.         Case Else
  2921.             Return SetError(2, 0, -1)
  2922.     EndSwitch
  2923.     Return 1
  2924. EndFunc   ;==>_ARRAYEXTRACT
  2925. Func _ArrayFindAll(Const ByRef $AARRAY, $VVALUE, $ISTART = 0, $IEND = 0, $ICASE = 0, $ICOMPARE = 0, $ISUBITEM = 0, $BROW = False)
  2926.     If $ISTART = Default Then $ISTART = 0
  2927.     If $IEND = Default Then $IEND = 0
  2928.     If $ICASE = Default Then $ICASE = 0
  2929.     If $ICOMPARE = Default Then $ICOMPARE = 0
  2930.     If $ISUBITEM = Default Then $ISUBITEM = 0
  2931.     If $BROW = Default Then $BROW = False
  2932.     $ISTART = _ArraySearch($AARRAY, $VVALUE, $ISTART, $IEND, $ICASE, $ICOMPARE, 1, $ISUBITEM, $BROW)
  2933.     If @error Then Return SetError(@error, 0, -1)
  2934.     Local $IINDEX = 0, $AVRESULT[UBound($AARRAY, ($BROW ? $UBOUND_COLUMNS : $UBOUND_ROWS))]
  2935.     Do
  2936.         $AVRESULT[$IINDEX] = $ISTART
  2937.         $IINDEX += 1
  2938.         $ISTART = _ArraySearch($AARRAY, $VVALUE, $ISTART + 1, $IEND, $ICASE, $ICOMPARE, 1, $ISUBITEM, $BROW)
  2939.     Until @error
  2940.     ReDim $AVRESULT[$IINDEX]
  2941.     Return $AVRESULT
  2942. EndFunc   ;==>_ArrayFindAll
  2943. Func _ArrayInsert(ByRef $AARRAY, $VRANGE, $VVALUE = "", $ISTART = 0, $SDELIM_ITEM = "|", $SDELIM_ROW = @CRLF, $IFORCE = $ARRAYFILL_FORCE_DEFAULT)
  2944.     If $VVALUE = Default Then $VVALUE = ""
  2945.     If $ISTART = Default Then $ISTART = 0
  2946.     If $SDELIM_ITEM = Default Then $SDELIM_ITEM = "|"
  2947.     If $SDELIM_ROW = Default Then $SDELIM_ROW = @CRLF
  2948.     If $IFORCE = Default Then $IFORCE = $ARRAYFILL_FORCE_DEFAULT
  2949.     If Not IsArray($AARRAY) Then Return SetError(1, 0, -1)
  2950.     Local $IDIM_1 = UBound($AARRAY, $UBOUND_ROWS) - 1
  2951.     Local $HDATATYPE = 0
  2952.     Switch $IFORCE
  2953.         Case $ARRAYFILL_FORCE_INT
  2954.             $HDATATYPE = INT
  2955.         Case $ARRAYFILL_FORCE_NUMBER
  2956.             $HDATATYPE = NUMBER
  2957.         Case $ARRAYFILL_FORCE_PTR
  2958.             $HDATATYPE = PTR
  2959.         Case $ARRAYFILL_FORCE_HWND
  2960.             $HDATATYPE = HWND
  2961.         Case $ARRAYFILL_FORCE_STRING
  2962.             $HDATATYPE = STRING
  2963.     EndSwitch
  2964.     Local $ASPLIT_1, $ASPLIT_2
  2965.     If IsArray($VRANGE) Then
  2966.         If UBound($VRANGE, $UBOUND_DIMENSIONS) <> 1 Or UBound($VRANGE, $UBOUND_ROWS) < 2 Then Return SetError(4, 0, -1)
  2967.     Else
  2968.         Local $INUMBER
  2969.         $VRANGE = StringStripWS($VRANGE, 8)
  2970.         $ASPLIT_1 = StringSplit($VRANGE, ";")
  2971.         $VRANGE = ""
  2972.         For $I = 1 To $ASPLIT_1[0]
  2973.             If Not StringRegExp($ASPLIT_1[$I], "^\d+(-\d+)?$") Then Return SetError(3, 0, -1)
  2974.             $ASPLIT_2 = StringSplit($ASPLIT_1[$I], "-")
  2975.             Switch $ASPLIT_2[0]
  2976.                 Case 1
  2977.                     $VRANGE &= $ASPLIT_2[1] & ";"
  2978.                 Case 2
  2979.                     If Number($ASPLIT_2[2]) >= Number($ASPLIT_2[1]) Then
  2980.                         $INUMBER = $ASPLIT_2[1] - 1
  2981.                         Do
  2982.                             $INUMBER += 1
  2983.                             $VRANGE &= $INUMBER & ";"
  2984.                         Until $INUMBER = $ASPLIT_2[2]
  2985.                     EndIf
  2986.             EndSwitch
  2987.         Next
  2988.         $VRANGE = StringSplit(StringTrimRight($VRANGE, 1), ";")
  2989.     EndIf
  2990.     If $VRANGE[1] < 0 Or $VRANGE[$VRANGE[0]] > $IDIM_1 Then Return SetError(5, 0, -1)
  2991.     For $I = 2 To $VRANGE[0]
  2992.         If $VRANGE[$I] < $VRANGE[$I - 1] Then Return SetError(3, 0, -1)
  2993.     Next
  2994.     Local $ICOPYTO_INDEX = $IDIM_1 + $VRANGE[0]
  2995.     Local $IINSERTPOINT_INDEX = $VRANGE[0]
  2996.     Local $IINSERT_INDEX = $VRANGE[$IINSERTPOINT_INDEX]
  2997.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  2998.         Case 1
  2999.             If $IFORCE = $ARRAYFILL_FORCE_SINGLEITEM Then
  3000.                 ReDim $AARRAY[$IDIM_1 + $VRANGE[0] + 1]
  3001.                 For $IREADFROMINDEX = $IDIM_1 To 0 Step -1
  3002.                     $AARRAY[$ICOPYTO_INDEX] = $AARRAY[$IREADFROMINDEX]
  3003.                     $ICOPYTO_INDEX -= 1
  3004.                     $IINSERT_INDEX = $VRANGE[$IINSERTPOINT_INDEX]
  3005.                     While $IREADFROMINDEX = $IINSERT_INDEX
  3006.                         $AARRAY[$ICOPYTO_INDEX] = $VVALUE
  3007.                         $ICOPYTO_INDEX -= 1
  3008.                         $IINSERTPOINT_INDEX -= 1
  3009.                         If $IINSERTPOINT_INDEX < 1 Then ExitLoop 2
  3010.                         $IINSERT_INDEX = $VRANGE[$IINSERTPOINT_INDEX]
  3011.                     WEnd
  3012.                 Next
  3013.                 Return $IDIM_1 + $VRANGE[0] + 1
  3014.             EndIf
  3015.             ReDim $AARRAY[$IDIM_1 + $VRANGE[0] + 1]
  3016.             If IsArray($VVALUE) Then
  3017.                 If UBound($VVALUE, $UBOUND_DIMENSIONS) <> 1 Then Return SetError(5, 0, -1)
  3018.                 $HDATATYPE = 0
  3019.             Else
  3020.                 Local $ATMP = StringSplit($VVALUE, $SDELIM_ITEM, $STR_NOCOUNT + $STR_ENTIRESPLIT)
  3021.                 If UBound($ATMP, $UBOUND_ROWS) = 1 Then
  3022.                     $ATMP[0] = $VVALUE
  3023.                     $HDATATYPE = 0
  3024.                 EndIf
  3025.                 $VVALUE = $ATMP
  3026.             EndIf
  3027.             For $IREADFROMINDEX = $IDIM_1 To 0 Step -1
  3028.                 $AARRAY[$ICOPYTO_INDEX] = $AARRAY[$IREADFROMINDEX]
  3029.                 $ICOPYTO_INDEX -= 1
  3030.                 $IINSERT_INDEX = $VRANGE[$IINSERTPOINT_INDEX]
  3031.                 While $IREADFROMINDEX = $IINSERT_INDEX
  3032.                     If $IINSERTPOINT_INDEX <= UBound($VVALUE, $UBOUND_ROWS) Then
  3033.                         If IsFunc($HDATATYPE) Then
  3034.                             $AARRAY[$ICOPYTO_INDEX] = $HDATATYPE($VVALUE[$IINSERTPOINT_INDEX - 1])
  3035.                         Else
  3036.                             $AARRAY[$ICOPYTO_INDEX] = $VVALUE[$IINSERTPOINT_INDEX - 1]
  3037.                         EndIf
  3038.                     Else
  3039.                         $AARRAY[$ICOPYTO_INDEX] = ""
  3040.                     EndIf
  3041.                     $ICOPYTO_INDEX -= 1
  3042.                     $IINSERTPOINT_INDEX -= 1
  3043.                     If $IINSERTPOINT_INDEX = 0 Then ExitLoop 2
  3044.                     $IINSERT_INDEX = $VRANGE[$IINSERTPOINT_INDEX]
  3045.                 WEnd
  3046.             Next
  3047.         Case 2
  3048.             Local $IDIM_2 = UBound($AARRAY, $UBOUND_COLUMNS)
  3049.             If $ISTART < 0 Or $ISTART > $IDIM_2 - 1 Then Return SetError(6, 0, -1)
  3050.             Local $IVALDIM_1, $IVALDIM_2
  3051.             If IsArray($VVALUE) Then
  3052.                 If UBound($VVALUE, $UBOUND_DIMENSIONS) <> 2 Then Return SetError(7, 0, -1)
  3053.                 $IVALDIM_1 = UBound($VVALUE, $UBOUND_ROWS)
  3054.                 $IVALDIM_2 = UBound($VVALUE, $UBOUND_COLUMNS)
  3055.                 $HDATATYPE = 0
  3056.             Else
  3057.                 $ASPLIT_1 = StringSplit($VVALUE, $SDELIM_ROW, $STR_NOCOUNT + $STR_ENTIRESPLIT)
  3058.                 $IVALDIM_1 = UBound($ASPLIT_1, $UBOUND_ROWS)
  3059.                 StringReplace($ASPLIT_1[0], $SDELIM_ITEM, "")
  3060.                 $IVALDIM_2 = @extended + 1
  3061.                 Local $ATMP[$IVALDIM_1][$IVALDIM_2]
  3062.                 For $I = 0 To $IVALDIM_1 - 1
  3063.                     $ASPLIT_2 = StringSplit($ASPLIT_1[$I], $SDELIM_ITEM, $STR_NOCOUNT + $STR_ENTIRESPLIT)
  3064.                     For $J = 0 To $IVALDIM_2 - 1
  3065.                         $ATMP[$I][$J] = $ASPLIT_2[$J]
  3066.                     Next
  3067.                 Next
  3068.                 $VVALUE = $ATMP
  3069.             EndIf
  3070.             If UBound($VVALUE, $UBOUND_COLUMNS) + $ISTART > UBound($AARRAY, $UBOUND_COLUMNS) Then Return SetError(8, 0, -1)
  3071.             ReDim $AARRAY[$IDIM_1 + $VRANGE[0] + 1][$IDIM_2]
  3072.             For $IREADFROMINDEX = $IDIM_1 To 0 Step -1
  3073.                 For $J = 0 To $IDIM_2 - 1
  3074.                     $AARRAY[$ICOPYTO_INDEX][$J] = $AARRAY[$IREADFROMINDEX][$J]
  3075.                 Next
  3076.                 $ICOPYTO_INDEX -= 1
  3077.                 $IINSERT_INDEX = $VRANGE[$IINSERTPOINT_INDEX]
  3078.                 While $IREADFROMINDEX = $IINSERT_INDEX
  3079.                     For $J = 0 To $IDIM_2 - 1
  3080.                         If $J < $ISTART Then
  3081.                             $AARRAY[$ICOPYTO_INDEX][$J] = ""
  3082.                         ElseIf $J - $ISTART > $IVALDIM_2 - 1 Then
  3083.                             $AARRAY[$ICOPYTO_INDEX][$J] = ""
  3084.                         Else
  3085.                             If $IINSERTPOINT_INDEX - 1 < $IVALDIM_1 Then
  3086.                                 If IsFunc($HDATATYPE) Then
  3087.                                     $AARRAY[$ICOPYTO_INDEX][$J] = $HDATATYPE($VVALUE[$IINSERTPOINT_INDEX - 1][$J - $ISTART])
  3088.                                 Else
  3089.                                     $AARRAY[$ICOPYTO_INDEX][$J] = $VVALUE[$IINSERTPOINT_INDEX - 1][$J - $ISTART]
  3090.                                 EndIf
  3091.                             Else
  3092.                                 $AARRAY[$ICOPYTO_INDEX][$J] = ""
  3093.                             EndIf
  3094.                         EndIf
  3095.                     Next
  3096.                     $ICOPYTO_INDEX -= 1
  3097.                     $IINSERTPOINT_INDEX -= 1
  3098.                     If $IINSERTPOINT_INDEX = 0 Then ExitLoop 2
  3099.                     $IINSERT_INDEX = $VRANGE[$IINSERTPOINT_INDEX]
  3100.                 WEnd
  3101.             Next
  3102.         Case Else
  3103.             Return SetError(2, 0, -1)
  3104.     EndSwitch
  3105.     Return UBound($AARRAY, $UBOUND_ROWS)
  3106. EndFunc   ;==>_ArrayInsert
  3107. Func _ArrayMax(Const ByRef $AARRAY, $ICOMPNUMERIC = 0, $ISTART = -1, $IEND = -1, $ISUBITEM = 0)
  3108.     Local $IRESULT = _ArrayMaxIndex($AARRAY, $ICOMPNUMERIC, $ISTART, $IEND, $ISUBITEM)
  3109.     If @error Then Return SetError(@error, 0, "")
  3110.     If UBound($AARRAY, $UBOUND_DIMENSIONS) = 1 Then
  3111.         Return $AARRAY[$IRESULT]
  3112.     Else
  3113.         Return $AARRAY[$IRESULT][$ISUBITEM]
  3114.     EndIf
  3115. EndFunc   ;==>_ArrayMax
  3116. Func _ArrayMaxIndex(Const ByRef $AARRAY, $ICOMPNUMERIC = 0, $ISTART = -1, $IEND = -1, $ISUBITEM = 0)
  3117.     If $ICOMPNUMERIC = Default Then $ICOMPNUMERIC = 0
  3118.     If $ISTART = Default Then $ISTART = -1
  3119.     If $IEND = Default Then $IEND = -1
  3120.     If $ISUBITEM = Default Then $ISUBITEM = 0
  3121.     Local $IRET = __ARRAY_MINMAXINDEX($AARRAY, $ICOMPNUMERIC, $ISTART, $IEND, $ISUBITEM, __ARRAY_GREATERTHAN)
  3122.     Return SetError(@error, 0, $IRET)
  3123. EndFunc   ;==>_ArrayMaxIndex
  3124. Func _ArrayMin(Const ByRef $AARRAY, $ICOMPNUMERIC = 0, $ISTART = -1, $IEND = -1, $ISUBITEM = 0)
  3125.     Local $IRESULT = _ArrayMinIndex($AARRAY, $ICOMPNUMERIC, $ISTART, $IEND, $ISUBITEM)
  3126.     If @error Then Return SetError(@error, 0, "")
  3127.     If UBound($AARRAY, $UBOUND_DIMENSIONS) = 1 Then
  3128.         Return $AARRAY[$IRESULT]
  3129.     Else
  3130.         Return $AARRAY[$IRESULT][$ISUBITEM]
  3131.     EndIf
  3132. EndFunc   ;==>_ArrayMin
  3133. Func _ArrayMinIndex(Const ByRef $AARRAY, $ICOMPNUMERIC = 0, $ISTART = -1, $IEND = -1, $ISUBITEM = 0)
  3134.     If $ICOMPNUMERIC = Default Then $ICOMPNUMERIC = 0
  3135.     If $ISTART = Default Then $ISTART = -1
  3136.     If $IEND = Default Then $IEND = -1
  3137.     If $ISUBITEM = Default Then $ISUBITEM = 0
  3138.     Local $IRET = __ARRAY_MINMAXINDEX($AARRAY, $ICOMPNUMERIC, $ISTART, $IEND, $ISUBITEM, __ARRAY_LESSTHAN)
  3139.     Return SetError(@error, 0, $IRET)
  3140. EndFunc   ;==>_ArrayMinIndex
  3141. Func _ArrayPermute(ByRef $AARRAY, $SDELIMITER = "")
  3142.     If $SDELIMITER = Default Then $SDELIMITER = ""
  3143.     If Not IsArray($AARRAY) Then Return SetError(1, 0, 0)
  3144.     If UBound($AARRAY, $UBOUND_DIMENSIONS) <> 1 Then Return SetError(2, 0, 0)
  3145.     Local $ISIZE = UBound($AARRAY), $IFACTORIAL = 1, $AIDX[$ISIZE], $ARESULT[1], $ICOUNT = 1
  3146.     If UBound($AARRAY) Then
  3147.         For $I = 0 To $ISIZE - 1
  3148.             $AIDX[$I] = $I
  3149.         Next
  3150.         For $I = $ISIZE To 1 Step -1
  3151.             $IFACTORIAL *= $I
  3152.         Next
  3153.         ReDim $ARESULT[$IFACTORIAL + 1]
  3154.         $ARESULT[0] = $IFACTORIAL
  3155.         __ARRAY_EXETERINTERNAL($AARRAY, 0, $ISIZE, $SDELIMITER, $AIDX, $ARESULT, $ICOUNT)
  3156.     Else
  3157.         $ARESULT[0] = 0
  3158.     EndIf
  3159.     Return $ARESULT
  3160. EndFunc   ;==>_ArrayPermute
  3161. Func _ArrayPop(ByRef $AARRAY)
  3162.     If (Not IsArray($AARRAY)) Then Return SetError(1, 0, "")
  3163.     If UBound($AARRAY, $UBOUND_DIMENSIONS) <> 1 Then Return SetError(2, 0, "")
  3164.     Local $IUBOUND = UBound($AARRAY) - 1
  3165.     If $IUBOUND = -1 Then Return SetError(3, 0, "")
  3166.     Local $SLASTVAL = $AARRAY[$IUBOUND]
  3167.     If $IUBOUND > -1 Then
  3168.         ReDim $AARRAY[$IUBOUND]
  3169.     EndIf
  3170.     Return $SLASTVAL
  3171. EndFunc   ;==>_ArrayPop
  3172. Func _ArrayPush(ByRef $AARRAY, $VVALUE, $IDIRECTION = 0)
  3173.     If $IDIRECTION = Default Then $IDIRECTION = 0
  3174.     If (Not IsArray($AARRAY)) Then Return SetError(1, 0, 0)
  3175.     If UBound($AARRAY, $UBOUND_DIMENSIONS) <> 1 Then Return SetError(3, 0, 0)
  3176.     Local $IUBOUND = UBound($AARRAY) - 1
  3177.     If IsArray($VVALUE) Then
  3178.         Local $IUBOUNDS = UBound($VVALUE)
  3179.         If ($IUBOUNDS - 1) > $IUBOUND Then Return SetError(2, 0, 0)
  3180.         If $IDIRECTION Then
  3181.             For $I = $IUBOUND To $IUBOUNDS Step -1
  3182.                 $AARRAY[$I] = $AARRAY[$I - $IUBOUNDS]
  3183.             Next
  3184.             For $I = 0 To $IUBOUNDS - 1
  3185.                 $AARRAY[$I] = $VVALUE[$I]
  3186.             Next
  3187.         Else
  3188.             For $I = 0 To $IUBOUND - $IUBOUNDS
  3189.                 $AARRAY[$I] = $AARRAY[$I + $IUBOUNDS]
  3190.             Next
  3191.             For $I = 0 To $IUBOUNDS - 1
  3192.                 $AARRAY[$I + $IUBOUND - $IUBOUNDS + 1] = $VVALUE[$I]
  3193.             Next
  3194.         EndIf
  3195.     Else
  3196.         If $IUBOUND > -1 Then
  3197.             If $IDIRECTION Then
  3198.                 For $I = $IUBOUND To 1 Step -1
  3199.                     $AARRAY[$I] = $AARRAY[$I - 1]
  3200.                 Next
  3201.                 $AARRAY[0] = $VVALUE
  3202.             Else
  3203.                 For $I = 0 To $IUBOUND - 1
  3204.                     $AARRAY[$I] = $AARRAY[$I + 1]
  3205.                 Next
  3206.                 $AARRAY[$IUBOUND] = $VVALUE
  3207.             EndIf
  3208.         EndIf
  3209.     EndIf
  3210.     Return 1
  3211. EndFunc   ;==>_ArrayPush
  3212. Func _ArrayReverse(ByRef $AARRAY, $ISTART = 0, $IEND = 0)
  3213.     If $ISTART = Default Then $ISTART = 0
  3214.     If $IEND = Default Then $IEND = 0
  3215.     If Not IsArray($AARRAY) Then Return SetError(1, 0, 0)
  3216.     If UBound($AARRAY, $UBOUND_DIMENSIONS) <> 1 Then Return SetError(3, 0, 0)
  3217.     If Not UBound($AARRAY) Then Return SetError(4, 0, 0)
  3218.     Local $VTMP, $IUBOUND = UBound($AARRAY) - 1
  3219.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  3220.     If $ISTART < 0 Then $ISTART = 0
  3221.     If $ISTART > $IEND Then Return SetError(2, 0, 0)
  3222.     For $I = $ISTART To Int(($ISTART + $IEND - 1) / 2)
  3223.         $VTMP = $AARRAY[$I]
  3224.         $AARRAY[$I] = $AARRAY[$IEND]
  3225.         $AARRAY[$IEND] = $VTMP
  3226.         $IEND -= 1
  3227.     Next
  3228.     Return 1
  3229. EndFunc   ;==>_ArrayReverse
  3230. Func _ArraySearch(Const ByRef $AARRAY, $VVALUE, $ISTART = 0, $IEND = 0, $ICASE = 0, $ICOMPARE = 0, $IFORWARD = 1, $ISUBITEM = -1, $BROW = False)
  3231.     If $ISTART = Default Then $ISTART = 0
  3232.     If $IEND = Default Then $IEND = 0
  3233.     If $ICASE = Default Then $ICASE = 0
  3234.     If $ICOMPARE = Default Then $ICOMPARE = 0
  3235.     If $IFORWARD = Default Then $IFORWARD = 1
  3236.     If $ISUBITEM = Default Then $ISUBITEM = -1
  3237.     If $BROW = Default Then $BROW = False
  3238.     If Not IsArray($AARRAY) Then Return SetError(1, 0, -1)
  3239.     Local $IDIM_1 = UBound($AARRAY) - 1
  3240.     If $IDIM_1 = -1 Then Return SetError(3, 0, -1)
  3241.     Local $IDIM_2 = UBound($AARRAY, $UBOUND_COLUMNS) - 1
  3242.     Local $BCOMPTYPE = False
  3243.     If $ICOMPARE = 2 Then
  3244.         $ICOMPARE = 0
  3245.         $BCOMPTYPE = True
  3246.     EndIf
  3247.     If $BROW Then
  3248.         If UBound($AARRAY, $UBOUND_DIMENSIONS) = 1 Then Return SetError(5, 0, -1)
  3249.         If $IEND < 1 Or $IEND > $IDIM_2 Then $IEND = $IDIM_2
  3250.         If $ISTART < 0 Then $ISTART = 0
  3251.         If $ISTART > $IEND Then Return SetError(4, 0, -1)
  3252.     Else
  3253.         If $IEND < 1 Or $IEND > $IDIM_1 Then $IEND = $IDIM_1
  3254.         If $ISTART < 0 Then $ISTART = 0
  3255.         If $ISTART > $IEND Then Return SetError(4, 0, -1)
  3256.     EndIf
  3257.     Local $ISTEP = 1
  3258.     If Not $IFORWARD Then
  3259.         Local $ITMP = $ISTART
  3260.         $ISTART = $IEND
  3261.         $IEND = $ITMP
  3262.         $ISTEP = -1
  3263.     EndIf
  3264.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  3265.         Case 1
  3266.             If Not $ICOMPARE Then
  3267.                 If Not $ICASE Then
  3268.                     For $I = $ISTART To $IEND Step $ISTEP
  3269.                         If $BCOMPTYPE And VarGetType($AARRAY[$I]) <> VarGetType($VVALUE) Then ContinueLoop
  3270.                         If $AARRAY[$I] = $VVALUE Then Return $I
  3271.                     Next
  3272.                 Else
  3273.                     For $I = $ISTART To $IEND Step $ISTEP
  3274.                         If $BCOMPTYPE And VarGetType($AARRAY[$I]) <> VarGetType($VVALUE) Then ContinueLoop
  3275.                         If $AARRAY[$I] == $VVALUE Then Return $I
  3276.                     Next
  3277.                 EndIf
  3278.             Else
  3279.                 For $I = $ISTART To $IEND Step $ISTEP
  3280.                     If $ICOMPARE = 3 Then
  3281.                         If StringRegExp($AARRAY[$I], $VVALUE) Then Return $I
  3282.                     Else
  3283.                         If StringInStr($AARRAY[$I], $VVALUE, $ICASE) > 0 Then Return $I
  3284.                     EndIf
  3285.                 Next
  3286.             EndIf
  3287.         Case 2
  3288.             Local $IDIM_SUB
  3289.             If $BROW Then
  3290.                 $IDIM_SUB = $IDIM_1
  3291.                 If $ISUBITEM > $IDIM_SUB Then $ISUBITEM = $IDIM_SUB
  3292.                 If $ISUBITEM < 0 Then
  3293.                     $ISUBITEM = 0
  3294.                 Else
  3295.                     $IDIM_SUB = $ISUBITEM
  3296.                 EndIf
  3297.             Else
  3298.                 $IDIM_SUB = $IDIM_2
  3299.                 If $ISUBITEM > $IDIM_SUB Then $ISUBITEM = $IDIM_SUB
  3300.                 If $ISUBITEM < 0 Then
  3301.                     $ISUBITEM = 0
  3302.                 Else
  3303.                     $IDIM_SUB = $ISUBITEM
  3304.                 EndIf
  3305.             EndIf
  3306.             For $J = $ISUBITEM To $IDIM_SUB
  3307.                 If Not $ICOMPARE Then
  3308.                     If Not $ICASE Then
  3309.                         For $I = $ISTART To $IEND Step $ISTEP
  3310.                             If $BROW Then
  3311.                                 If $BCOMPTYPE And VarGetType($AARRAY[$J][$I]) <> VarGetType($VVALUE) Then ContinueLoop
  3312.                                 If $AARRAY[$J][$I] = $VVALUE Then Return $I
  3313.                             Else
  3314.                                 If $BCOMPTYPE And VarGetType($AARRAY[$I][$J]) <> VarGetType($VVALUE) Then ContinueLoop
  3315.                                 If $AARRAY[$I][$J] = $VVALUE Then Return $I
  3316.                             EndIf
  3317.                         Next
  3318.                     Else
  3319.                         For $I = $ISTART To $IEND Step $ISTEP
  3320.                             If $BROW Then
  3321.                                 If $BCOMPTYPE And VarGetType($AARRAY[$J][$I]) <> VarGetType($VVALUE) Then ContinueLoop
  3322.                                 If $AARRAY[$J][$I] == $VVALUE Then Return $I
  3323.                             Else
  3324.                                 If $BCOMPTYPE And VarGetType($AARRAY[$I][$J]) <> VarGetType($VVALUE) Then ContinueLoop
  3325.                                 If $AARRAY[$I][$J] == $VVALUE Then Return $I
  3326.                             EndIf
  3327.                         Next
  3328.                     EndIf
  3329.                 Else
  3330.                     For $I = $ISTART To $IEND Step $ISTEP
  3331.                         If $ICOMPARE = 3 Then
  3332.                             If $BROW Then
  3333.                                 If StringRegExp($AARRAY[$J][$I], $VVALUE) Then Return $I
  3334.                             Else
  3335.                                 If StringRegExp($AARRAY[$I][$J], $VVALUE) Then Return $I
  3336.                             EndIf
  3337.                         Else
  3338.                             If $BROW Then
  3339.                                 If StringInStr($AARRAY[$J][$I], $VVALUE, $ICASE) > 0 Then Return $I
  3340.                             Else
  3341.                                 If StringInStr($AARRAY[$I][$J], $VVALUE, $ICASE) > 0 Then Return $I
  3342.                             EndIf
  3343.                         EndIf
  3344.                     Next
  3345.                 EndIf
  3346.             Next
  3347.         Case Else
  3348.             Return SetError(2, 0, -1)
  3349.     EndSwitch
  3350.     Return SetError(6, 0, -1)
  3351. EndFunc   ;==>_ArraySearch
  3352. Func _ArrayShuffle(ByRef $AARRAY, $ISTART_ROW = 0, $IEND_ROW = 0, $ICOL = -1)
  3353.     If $ISTART_ROW = Default Then $ISTART_ROW = 0
  3354.     If $IEND_ROW = Default Then $IEND_ROW = 0
  3355.     If $ICOL = Default Then $ICOL = -1
  3356.     If Not IsArray($AARRAY) Then Return SetError(1, 0, -1)
  3357.     Local $IDIM_1 = UBound($AARRAY, $UBOUND_ROWS)
  3358.     If $IEND_ROW = 0 Then $IEND_ROW = $IDIM_1 - 1
  3359.     If $ISTART_ROW < 0 Or $ISTART_ROW > $IDIM_1 - 1 Then Return SetError(3, 0, -1)
  3360.     If $IEND_ROW < 1 Or $IEND_ROW > $IDIM_1 - 1 Then Return SetError(3, 0, -1)
  3361.     If $ISTART_ROW > $IEND_ROW Then Return SetError(4, 0, -1)
  3362.     Local $VTMP, $IRAND
  3363.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  3364.         Case 1
  3365.             For $I = $IEND_ROW To $ISTART_ROW + 1 Step -1
  3366.                 $IRAND = Random($ISTART_ROW, $I, 1)
  3367.                 $VTMP = $AARRAY[$I]
  3368.                 $AARRAY[$I] = $AARRAY[$IRAND]
  3369.                 $AARRAY[$IRAND] = $VTMP
  3370.             Next
  3371.             Return 1
  3372.         Case 2
  3373.             Local $IDIM_2 = UBound($AARRAY, $UBOUND_COLUMNS)
  3374.             If $ICOL < -1 Or $ICOL > $IDIM_2 - 1 Then Return SetError(5, 0, -1)
  3375.             Local $ICOL_START, $ICOL_END
  3376.             If $ICOL = -1 Then
  3377.                 $ICOL_START = 0
  3378.                 $ICOL_END = $IDIM_2 - 1
  3379.             Else
  3380.                 $ICOL_START = $ICOL
  3381.                 $ICOL_END = $ICOL
  3382.             EndIf
  3383.             For $I = $IEND_ROW To $ISTART_ROW + 1 Step -1
  3384.                 $IRAND = Random($ISTART_ROW, $I, 1)
  3385.                 For $J = $ICOL_START To $ICOL_END
  3386.                     $VTMP = $AARRAY[$I][$J]
  3387.                     $AARRAY[$I][$J] = $AARRAY[$IRAND][$J]
  3388.                     $AARRAY[$IRAND][$J] = $VTMP
  3389.                 Next
  3390.             Next
  3391.             Return 1
  3392.         Case Else
  3393.             Return SetError(2, 0, -1)
  3394.     EndSwitch
  3395. EndFunc   ;==>_ARRAYSHUFFLE
  3396. Func _ArraySort(ByRef $AARRAY, $IDESCENDING = 0, $ISTART = 0, $IEND = 0, $ISUBITEM = 0, $IPIVOT = 0)
  3397.     If $IDESCENDING = Default Then $IDESCENDING = 0
  3398.     If $ISTART = Default Then $ISTART = 0
  3399.     If $IEND = Default Then $IEND = 0
  3400.     If $ISUBITEM = Default Then $ISUBITEM = 0
  3401.     If $IPIVOT = Default Then $IPIVOT = 0
  3402.     If Not IsArray($AARRAY) Then Return SetError(1, 0, 0)
  3403.     Local $IUBOUND = UBound($AARRAY) - 1
  3404.     If $IUBOUND = -1 Then Return SetError(5, 0, 0)
  3405.     If $IEND = Default Then $IEND = 0
  3406.     If $IEND < 1 Or $IEND > $IUBOUND Or $IEND = Default Then $IEND = $IUBOUND
  3407.     If $ISTART < 0 Or $ISTART = Default Then $ISTART = 0
  3408.     If $ISTART > $IEND Then Return SetError(2, 0, 0)
  3409.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  3410.         Case 1
  3411.             If $IPIVOT Then
  3412.                 __ARRAYDUALPIVOTSORT($AARRAY, $ISTART, $IEND)
  3413.             Else
  3414.                 __ARRAYQUICKSORT1D($AARRAY, $ISTART, $IEND)
  3415.             EndIf
  3416.             If $IDESCENDING Then _ArrayReverse($AARRAY, $ISTART, $IEND)
  3417.         Case 2
  3418.             If $IPIVOT Then Return SetError(6, 0, 0)
  3419.             Local $ISUBMAX = UBound($AARRAY, $UBOUND_COLUMNS) - 1
  3420.             If $ISUBITEM > $ISUBMAX Then Return SetError(3, 0, 0)
  3421.             If $IDESCENDING Then
  3422.                 $IDESCENDING = -1
  3423.             Else
  3424.                 $IDESCENDING = 1
  3425.             EndIf
  3426.             __ARRAYQUICKSORT2D($AARRAY, $IDESCENDING, $ISTART, $IEND, $ISUBITEM, $ISUBMAX)
  3427.         Case Else
  3428.             Return SetError(4, 0, 0)
  3429.     EndSwitch
  3430.     Return 1
  3431. EndFunc   ;==>_ArraySort
  3432. Func __ARRAYQUICKSORT1D(ByRef $AARRAY, Const ByRef $ISTART, Const ByRef $IEND)
  3433.     If $IEND <= $ISTART Then Return
  3434.     Local $VTMP
  3435.     If ($IEND - $ISTART) < 15 Then
  3436.         Local $VCUR
  3437.         For $I = $ISTART + 1 To $IEND
  3438.             $VTMP = $AARRAY[$I]
  3439.             If IsNumber($VTMP) Then
  3440.                 For $J = $I - 1 To $ISTART Step -1
  3441.                     $VCUR = $AARRAY[$J]
  3442.                     If ($VTMP >= $VCUR And IsNumber($VCUR)) Or (Not IsNumber($VCUR) And StringCompare($VTMP, $VCUR) >= 0) Then ExitLoop
  3443.                     $AARRAY[$J + 1] = $VCUR
  3444.                 Next
  3445.             Else
  3446.                 For $J = $I - 1 To $ISTART Step -1
  3447.                     If (StringCompare($VTMP, $AARRAY[$J]) >= 0) Then ExitLoop
  3448.                     $AARRAY[$J + 1] = $AARRAY[$J]
  3449.                 Next
  3450.             EndIf
  3451.             $AARRAY[$J + 1] = $VTMP
  3452.         Next
  3453.         Return
  3454.     EndIf
  3455.     Local $L = $ISTART, $R = $IEND, $VPIVOT = $AARRAY[Int(($ISTART + $IEND) / 2)], $BNUM = IsNumber($VPIVOT)
  3456.     Do
  3457.         If $BNUM Then
  3458.             While ($AARRAY[$L] < $VPIVOT And IsNumber($AARRAY[$L])) Or (Not IsNumber($AARRAY[$L]) And StringCompare($AARRAY[$L], $VPIVOT) < 0)
  3459.                 $L += 1
  3460.             WEnd
  3461.             While ($AARRAY[$R] > $VPIVOT And IsNumber($AARRAY[$R])) Or (Not IsNumber($AARRAY[$R]) And StringCompare($AARRAY[$R], $VPIVOT) > 0)
  3462.                 $R -= 1
  3463.             WEnd
  3464.         Else
  3465.             While (StringCompare($AARRAY[$L], $VPIVOT) < 0)
  3466.                 $L += 1
  3467.             WEnd
  3468.             While (StringCompare($AARRAY[$R], $VPIVOT) > 0)
  3469.                 $R -= 1
  3470.             WEnd
  3471.         EndIf
  3472.         If $L <= $R Then
  3473.             $VTMP = $AARRAY[$L]
  3474.             $AARRAY[$L] = $AARRAY[$R]
  3475.             $AARRAY[$R] = $VTMP
  3476.             $L += 1
  3477.             $R -= 1
  3478.         EndIf
  3479.     Until $L > $R
  3480.     __ARRAYQUICKSORT1D($AARRAY, $ISTART, $R)
  3481.     __ARRAYQUICKSORT1D($AARRAY, $L, $IEND)
  3482. EndFunc   ;==>__ARRAYQUICKSORT1D
  3483. Func __ARRAYQUICKSORT2D(ByRef $AARRAY, Const ByRef $ISTEP, Const ByRef $ISTART, Const ByRef $IEND, Const ByRef $ISUBITEM, Const ByRef $ISUBMAX)
  3484.     If $IEND <= $ISTART Then Return
  3485.     Local $VTMP, $L = $ISTART, $R = $IEND, $VPIVOT = $AARRAY[Int(($ISTART + $IEND) / 2)][$ISUBITEM], $BNUM = IsNumber($VPIVOT)
  3486.     Do
  3487.         If $BNUM Then
  3488.             While ($ISTEP * ($AARRAY[$L][$ISUBITEM] - $VPIVOT) < 0 And IsNumber($AARRAY[$L][$ISUBITEM])) Or (Not IsNumber($AARRAY[$L][$ISUBITEM]) And $ISTEP * StringCompare($AARRAY[$L][$ISUBITEM], $VPIVOT) < 0)
  3489.                 $L += 1
  3490.             WEnd
  3491.             While ($ISTEP * ($AARRAY[$R][$ISUBITEM] - $VPIVOT) > 0 And IsNumber($AARRAY[$R][$ISUBITEM])) Or (Not IsNumber($AARRAY[$R][$ISUBITEM]) And $ISTEP * StringCompare($AARRAY[$R][$ISUBITEM], $VPIVOT) > 0)
  3492.                 $R -= 1
  3493.             WEnd
  3494.         Else
  3495.             While ($ISTEP * StringCompare($AARRAY[$L][$ISUBITEM], $VPIVOT) < 0)
  3496.                 $L += 1
  3497.             WEnd
  3498.             While ($ISTEP * StringCompare($AARRAY[$R][$ISUBITEM], $VPIVOT) > 0)
  3499.                 $R -= 1
  3500.             WEnd
  3501.         EndIf
  3502.         If $L <= $R Then
  3503.             For $I = 0 To $ISUBMAX
  3504.                 $VTMP = $AARRAY[$L][$I]
  3505.                 $AARRAY[$L][$I] = $AARRAY[$R][$I]
  3506.                 $AARRAY[$R][$I] = $VTMP
  3507.             Next
  3508.             $L += 1
  3509.             $R -= 1
  3510.         EndIf
  3511.     Until $L > $R
  3512.     __ARRAYQUICKSORT2D($AARRAY, $ISTEP, $ISTART, $R, $ISUBITEM, $ISUBMAX)
  3513.     __ARRAYQUICKSORT2D($AARRAY, $ISTEP, $L, $IEND, $ISUBITEM, $ISUBMAX)
  3514. EndFunc   ;==>__ARRAYQUICKSORT2D
  3515. Func __ARRAYDUALPIVOTSORT(ByRef $AARRAY, $IPIVOT_LEFT, $IPIVOT_RIGHT, $BLEFTMOST = True)
  3516.     If $IPIVOT_LEFT > $IPIVOT_RIGHT Then Return
  3517.     Local $ILENGTH = $IPIVOT_RIGHT - $IPIVOT_LEFT + 1
  3518.     Local $I, $J, $K, $IAI, $IAK, $IA1, $IA2, $ILAST
  3519.     If $ILENGTH < 45 Then
  3520.         If $BLEFTMOST Then
  3521.             $I = $IPIVOT_LEFT
  3522.             While $I < $IPIVOT_RIGHT
  3523.                 $J = $I
  3524.                 $IAI = $AARRAY[$I + 1]
  3525.                 While $IAI < $AARRAY[$J]
  3526.                     $AARRAY[$J + 1] = $AARRAY[$J]
  3527.                     $J -= 1
  3528.                     If $J + 1 = $IPIVOT_LEFT Then ExitLoop
  3529.                 WEnd
  3530.                 $AARRAY[$J + 1] = $IAI
  3531.                 $I += 1
  3532.             WEnd
  3533.         Else
  3534.             While 1
  3535.                 If $IPIVOT_LEFT >= $IPIVOT_RIGHT Then Return 1
  3536.                 $IPIVOT_LEFT += 1
  3537.                 If $AARRAY[$IPIVOT_LEFT] < $AARRAY[$IPIVOT_LEFT - 1] Then ExitLoop
  3538.             WEnd
  3539.             While 1
  3540.                 $K = $IPIVOT_LEFT
  3541.                 $IPIVOT_LEFT += 1
  3542.                 If $IPIVOT_LEFT > $IPIVOT_RIGHT Then ExitLoop
  3543.                 $IA1 = $AARRAY[$K]
  3544.                 $IA2 = $AARRAY[$IPIVOT_LEFT]
  3545.                 If $IA1 < $IA2 Then
  3546.                     $IA2 = $IA1
  3547.                     $IA1 = $AARRAY[$IPIVOT_LEFT]
  3548.                 EndIf
  3549.                 $K -= 1
  3550.                 While $IA1 < $AARRAY[$K]
  3551.                     $AARRAY[$K + 2] = $AARRAY[$K]
  3552.                     $K -= 1
  3553.                 WEnd
  3554.                 $AARRAY[$K + 2] = $IA1
  3555.                 While $IA2 < $AARRAY[$K]
  3556.                     $AARRAY[$K + 1] = $AARRAY[$K]
  3557.                     $K -= 1
  3558.                 WEnd
  3559.                 $AARRAY[$K + 1] = $IA2
  3560.                 $IPIVOT_LEFT += 1
  3561.             WEnd
  3562.             $ILAST = $AARRAY[$IPIVOT_RIGHT]
  3563.             $IPIVOT_RIGHT -= 1
  3564.             While $ILAST < $AARRAY[$IPIVOT_RIGHT]
  3565.                 $AARRAY[$IPIVOT_RIGHT + 1] = $AARRAY[$IPIVOT_RIGHT]
  3566.                 $IPIVOT_RIGHT -= 1
  3567.             WEnd
  3568.             $AARRAY[$IPIVOT_RIGHT + 1] = $ILAST
  3569.         EndIf
  3570.         Return 1
  3571.     EndIf
  3572.     Local $ISEVENTH = BitShift($ILENGTH, 3) + BitShift($ILENGTH, 6) + 1
  3573.     Local $IE1, $IE2, $IE3, $IE4, $IE5, $T
  3574.     $IE3 = Ceiling(($IPIVOT_LEFT + $IPIVOT_RIGHT) / 2)
  3575.     $IE2 = $IE3 - $ISEVENTH
  3576.     $IE1 = $IE2 - $ISEVENTH
  3577.     $IE4 = $IE3 + $ISEVENTH
  3578.     $IE5 = $IE4 + $ISEVENTH
  3579.     If $AARRAY[$IE2] < $AARRAY[$IE1] Then
  3580.         $T = $AARRAY[$IE2]
  3581.         $AARRAY[$IE2] = $AARRAY[$IE1]
  3582.         $AARRAY[$IE1] = $T
  3583.     EndIf
  3584.     If $AARRAY[$IE3] < $AARRAY[$IE2] Then
  3585.         $T = $AARRAY[$IE3]
  3586.         $AARRAY[$IE3] = $AARRAY[$IE2]
  3587.         $AARRAY[$IE2] = $T
  3588.         If $T < $AARRAY[$IE1] Then
  3589.             $AARRAY[$IE2] = $AARRAY[$IE1]
  3590.             $AARRAY[$IE1] = $T
  3591.         EndIf
  3592.     EndIf
  3593.     If $AARRAY[$IE4] < $AARRAY[$IE3] Then
  3594.         $T = $AARRAY[$IE4]
  3595.         $AARRAY[$IE4] = $AARRAY[$IE3]
  3596.         $AARRAY[$IE3] = $T
  3597.         If $T < $AARRAY[$IE2] Then
  3598.             $AARRAY[$IE3] = $AARRAY[$IE2]
  3599.             $AARRAY[$IE2] = $T
  3600.             If $T < $AARRAY[$IE1] Then
  3601.                 $AARRAY[$IE2] = $AARRAY[$IE1]
  3602.                 $AARRAY[$IE1] = $T
  3603.             EndIf
  3604.         EndIf
  3605.     EndIf
  3606.     If $AARRAY[$IE5] < $AARRAY[$IE4] Then
  3607.         $T = $AARRAY[$IE5]
  3608.         $AARRAY[$IE5] = $AARRAY[$IE4]
  3609.         $AARRAY[$IE4] = $T
  3610.         If $T < $AARRAY[$IE3] Then
  3611.             $AARRAY[$IE4] = $AARRAY[$IE3]
  3612.             $AARRAY[$IE3] = $T
  3613.             If $T < $AARRAY[$IE2] Then
  3614.                 $AARRAY[$IE3] = $AARRAY[$IE2]
  3615.                 $AARRAY[$IE2] = $T
  3616.                 If $T < $AARRAY[$IE1] Then
  3617.                     $AARRAY[$IE2] = $AARRAY[$IE1]
  3618.                     $AARRAY[$IE1] = $T
  3619.                 EndIf
  3620.             EndIf
  3621.         EndIf
  3622.     EndIf
  3623.     Local $ILESS = $IPIVOT_LEFT
  3624.     Local $IGREATER = $IPIVOT_RIGHT
  3625.     If (($AARRAY[$IE1] <> $AARRAY[$IE2]) And ($AARRAY[$IE2] <> $AARRAY[$IE3]) And ($AARRAY[$IE3] <> $AARRAY[$IE4]) And ($AARRAY[$IE4] <> $AARRAY[$IE5])) Then
  3626.         Local $IPIVOT_1 = $AARRAY[$IE2]
  3627.         Local $IPIVOT_2 = $AARRAY[$IE4]
  3628.         $AARRAY[$IE2] = $AARRAY[$IPIVOT_LEFT]
  3629.         $AARRAY[$IE4] = $AARRAY[$IPIVOT_RIGHT]
  3630.         Do
  3631.             $ILESS += 1
  3632.         Until $AARRAY[$ILESS] >= $IPIVOT_1
  3633.         Do
  3634.             $IGREATER -= 1
  3635.         Until $AARRAY[$IGREATER] <= $IPIVOT_2
  3636.         $K = $ILESS
  3637.         While $K <= $IGREATER
  3638.             $IAK = $AARRAY[$K]
  3639.             If $IAK < $IPIVOT_1 Then
  3640.                 $AARRAY[$K] = $AARRAY[$ILESS]
  3641.                 $AARRAY[$ILESS] = $IAK
  3642.                 $ILESS += 1
  3643.             ElseIf $IAK > $IPIVOT_2 Then
  3644.                 While $AARRAY[$IGREATER] > $IPIVOT_2
  3645.                     $IGREATER -= 1
  3646.                     If $IGREATER + 1 = $K Then ExitLoop 2
  3647.                 WEnd
  3648.                 If $AARRAY[$IGREATER] < $IPIVOT_1 Then
  3649.                     $AARRAY[$K] = $AARRAY[$ILESS]
  3650.                     $AARRAY[$ILESS] = $AARRAY[$IGREATER]
  3651.                     $ILESS += 1
  3652.                 Else
  3653.                     $AARRAY[$K] = $AARRAY[$IGREATER]
  3654.                 EndIf
  3655.                 $AARRAY[$IGREATER] = $IAK
  3656.                 $IGREATER -= 1
  3657.             EndIf
  3658.             $K += 1
  3659.         WEnd
  3660.         $AARRAY[$IPIVOT_LEFT] = $AARRAY[$ILESS - 1]
  3661.         $AARRAY[$ILESS - 1] = $IPIVOT_1
  3662.         $AARRAY[$IPIVOT_RIGHT] = $AARRAY[$IGREATER + 1]
  3663.         $AARRAY[$IGREATER + 1] = $IPIVOT_2
  3664.         __ARRAYDUALPIVOTSORT($AARRAY, $IPIVOT_LEFT, $ILESS - 2, True)
  3665.         __ARRAYDUALPIVOTSORT($AARRAY, $IGREATER + 2, $IPIVOT_RIGHT, False)
  3666.         If ($ILESS < $IE1) And ($IE5 < $IGREATER) Then
  3667.             While $AARRAY[$ILESS] = $IPIVOT_1
  3668.                 $ILESS += 1
  3669.             WEnd
  3670.             While $AARRAY[$IGREATER] = $IPIVOT_2
  3671.                 $IGREATER -= 1
  3672.             WEnd
  3673.             $K = $ILESS
  3674.             While $K <= $IGREATER
  3675.                 $IAK = $AARRAY[$K]
  3676.                 If $IAK = $IPIVOT_1 Then
  3677.                     $AARRAY[$K] = $AARRAY[$ILESS]
  3678.                     $AARRAY[$ILESS] = $IAK
  3679.                     $ILESS += 1
  3680.                 ElseIf $IAK = $IPIVOT_2 Then
  3681.                     While $AARRAY[$IGREATER] = $IPIVOT_2
  3682.                         $IGREATER -= 1
  3683.                         If $IGREATER + 1 = $K Then ExitLoop 2
  3684.                     WEnd
  3685.                     If $AARRAY[$IGREATER] = $IPIVOT_1 Then
  3686.                         $AARRAY[$K] = $AARRAY[$ILESS]
  3687.                         $AARRAY[$ILESS] = $IPIVOT_1
  3688.                         $ILESS += 1
  3689.                     Else
  3690.                         $AARRAY[$K] = $AARRAY[$IGREATER]
  3691.                     EndIf
  3692.                     $AARRAY[$IGREATER] = $IAK
  3693.                     $IGREATER -= 1
  3694.                 EndIf
  3695.                 $K += 1
  3696.             WEnd
  3697.         EndIf
  3698.         __ARRAYDUALPIVOTSORT($AARRAY, $ILESS, $IGREATER, False)
  3699.     Else
  3700.         Local $IPIVOT = $AARRAY[$IE3]
  3701.         $K = $ILESS
  3702.         While $K <= $IGREATER
  3703.             If $AARRAY[$K] = $IPIVOT Then
  3704.                 $K += 1
  3705.                 ContinueLoop
  3706.             EndIf
  3707.             $IAK = $AARRAY[$K]
  3708.             If $IAK < $IPIVOT Then
  3709.                 $AARRAY[$K] = $AARRAY[$ILESS]
  3710.                 $AARRAY[$ILESS] = $IAK
  3711.                 $ILESS += 1
  3712.             Else
  3713.                 While $AARRAY[$IGREATER] > $IPIVOT
  3714.                     $IGREATER -= 1
  3715.                 WEnd
  3716.                 If $AARRAY[$IGREATER] < $IPIVOT Then
  3717.                     $AARRAY[$K] = $AARRAY[$ILESS]
  3718.                     $AARRAY[$ILESS] = $AARRAY[$IGREATER]
  3719.                     $ILESS += 1
  3720.                 Else
  3721.                     $AARRAY[$K] = $IPIVOT
  3722.                 EndIf
  3723.                 $AARRAY[$IGREATER] = $IAK
  3724.                 $IGREATER -= 1
  3725.             EndIf
  3726.             $K += 1
  3727.         WEnd
  3728.         __ARRAYDUALPIVOTSORT($AARRAY, $IPIVOT_LEFT, $ILESS - 1, True)
  3729.         __ARRAYDUALPIVOTSORT($AARRAY, $IGREATER + 1, $IPIVOT_RIGHT, False)
  3730.     EndIf
  3731. EndFunc   ;==>__ARRAYDUALPIVOTSORT
  3732. Func _ArraySwap(ByRef $AARRAY, $IINDEX_1, $IINDEX_2, $BCOL = False, $ISTART = -1, $IEND = -1)
  3733.     If $BCOL = Default Then $BCOL = False
  3734.     If $ISTART = Default Then $ISTART = -1
  3735.     If $IEND = Default Then $IEND = -1
  3736.     If Not IsArray($AARRAY) Then Return SetError(1, 0, -1)
  3737.     Local $IDIM_1 = UBound($AARRAY, $UBOUND_ROWS) - 1
  3738.     Local $IDIM_2 = UBound($AARRAY, $UBOUND_COLUMNS) - 1
  3739.     If $IDIM_2 = -1 Then
  3740.         $BCOL = False
  3741.         $ISTART = -1
  3742.         $IEND = -1
  3743.     EndIf
  3744.     If $ISTART > $IEND Then Return SetError(5, 0, -1)
  3745.     If $BCOL Then
  3746.         If $IINDEX_1 < 0 Or $IINDEX_2 > $IDIM_2 Then Return SetError(3, 0, -1)
  3747.         If $ISTART = -1 Then $ISTART = 0
  3748.         If $IEND = -1 Then $IEND = $IDIM_1
  3749.     Else
  3750.         If $IINDEX_1 < 0 Or $IINDEX_2 > $IDIM_1 Then Return SetError(3, 0, -1)
  3751.         If $ISTART = -1 Then $ISTART = 0
  3752.         If $IEND = -1 Then $IEND = $IDIM_2
  3753.     EndIf
  3754.     Local $VTMP
  3755.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  3756.         Case 1
  3757.             $VTMP = $AARRAY[$IINDEX_1]
  3758.             $AARRAY[$IINDEX_1] = $AARRAY[$IINDEX_2]
  3759.             $AARRAY[$IINDEX_2] = $VTMP
  3760.         Case 2
  3761.             If $ISTART < -1 Or $IEND < -1 Then Return SetError(4, 0, -1)
  3762.             If $BCOL Then
  3763.                 If $ISTART > $IDIM_1 Or $IEND > $IDIM_1 Then Return SetError(4, 0, -1)
  3764.                 For $J = $ISTART To $IEND
  3765.                     $VTMP = $AARRAY[$J][$IINDEX_1]
  3766.                     $AARRAY[$J][$IINDEX_1] = $AARRAY[$J][$IINDEX_2]
  3767.                     $AARRAY[$J][$IINDEX_2] = $VTMP
  3768.                 Next
  3769.             Else
  3770.                 If $ISTART > $IDIM_2 Or $IEND > $IDIM_2 Then Return SetError(4, 0, -1)
  3771.                 For $J = $ISTART To $IEND
  3772.                     $VTMP = $AARRAY[$IINDEX_1][$J]
  3773.                     $AARRAY[$IINDEX_1][$J] = $AARRAY[$IINDEX_2][$J]
  3774.                     $AARRAY[$IINDEX_2][$J] = $VTMP
  3775.                 Next
  3776.             EndIf
  3777.         Case Else
  3778.             Return SetError(2, 0, -1)
  3779.     EndSwitch
  3780.     Return 1
  3781. EndFunc   ;==>_ArraySwap
  3782. Func _ArrayToClip(Const ByRef $AARRAY, $SDELIM_COL = "|", $ISTART_ROW = -1, $IEND_ROW = -1, $SDELIM_ROW = @CRLF, $ISTART_COL = -1, $IEND_COL = -1)
  3783.     Local $SRESULT = _ArrayToString($AARRAY, $SDELIM_COL, $ISTART_ROW, $IEND_ROW, $SDELIM_ROW, $ISTART_COL, $IEND_COL)
  3784.     If @error Then Return SetError(@error, 0, 0)
  3785.     If ClipPut($SRESULT) Then Return 1
  3786.     Return SetError(-1, 0, 0)
  3787. EndFunc   ;==>_ArrayToClip
  3788. Func _ArrayToString(Const ByRef $AARRAY, $SDELIM_COL = "|", $ISTART_ROW = -1, $IEND_ROW = -1, $SDELIM_ROW = @CRLF, $ISTART_COL = -1, $IEND_COL = -1)
  3789.     If $SDELIM_COL = Default Then $SDELIM_COL = "|"
  3790.     If $SDELIM_ROW = Default Then $SDELIM_ROW = @CRLF
  3791.     If $ISTART_ROW = Default Then $ISTART_ROW = -1
  3792.     If $IEND_ROW = Default Then $IEND_ROW = -1
  3793.     If $ISTART_COL = Default Then $ISTART_COL = -1
  3794.     If $IEND_COL = Default Then $IEND_COL = -1
  3795.     If Not IsArray($AARRAY) Then Return SetError(1, 0, -1)
  3796.     Local $IDIM_1 = UBound($AARRAY, $UBOUND_ROWS) - 1
  3797.     If $ISTART_ROW = -1 Then $ISTART_ROW = 0
  3798.     If $IEND_ROW = -1 Then $IEND_ROW = $IDIM_1
  3799.     If $ISTART_ROW < -1 Or $IEND_ROW < -1 Then Return SetError(3, 0, -1)
  3800.     If $ISTART_ROW > $IDIM_1 Or $IEND_ROW > $IDIM_1 Then Return SetError(3, 0, "")
  3801.     If $ISTART_ROW > $IEND_ROW Then Return SetError(4, 0, -1)
  3802.     Local $SRET = ""
  3803.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  3804.         Case 1
  3805.             For $I = $ISTART_ROW To $IEND_ROW
  3806.                 $SRET &= $AARRAY[$I] & $SDELIM_COL
  3807.             Next
  3808.             Return StringTrimRight($SRET, StringLen($SDELIM_COL))
  3809.         Case 2
  3810.             Local $IDIM_2 = UBound($AARRAY, $UBOUND_COLUMNS) - 1
  3811.             If $ISTART_COL = -1 Then $ISTART_COL = 0
  3812.             If $IEND_COL = -1 Then $IEND_COL = $IDIM_2
  3813.             If $ISTART_COL < -1 Or $IEND_COL < -1 Then Return SetError(5, 0, -1)
  3814.             If $ISTART_COL > $IDIM_2 Or $IEND_COL > $IDIM_2 Then Return SetError(5, 0, -1)
  3815.             If $ISTART_COL > $IEND_COL Then Return SetError(6, 0, -1)
  3816.             For $I = $ISTART_ROW To $IEND_ROW
  3817.                 For $J = $ISTART_COL To $IEND_COL
  3818.                     $SRET &= $AARRAY[$I][$J] & $SDELIM_COL
  3819.                 Next
  3820.                 $SRET = StringTrimRight($SRET, StringLen($SDELIM_COL)) & $SDELIM_ROW
  3821.             Next
  3822.             Return StringTrimRight($SRET, StringLen($SDELIM_ROW))
  3823.         Case Else
  3824.             Return SetError(2, 0, -1)
  3825.     EndSwitch
  3826.     Return 1
  3827. EndFunc   ;==>_ArrayToString
  3828. Func _ArrayTranspose(ByRef $AARRAY)
  3829.     Switch UBound($AARRAY, 0)
  3830.         Case 0
  3831.             Return SetError(2, 0, 0)
  3832.         Case 1
  3833.             Local $ATEMP[1][UBound($AARRAY)]
  3834.             For $I = 0 To UBound($AARRAY) - 1
  3835.                 $ATEMP[0][$I] = $AARRAY[$I]
  3836.             Next
  3837.             $AARRAY = $ATEMP
  3838.         Case 2
  3839.             Local $IDIM_1 = UBound($AARRAY, 1), $IDIM_2 = UBound($AARRAY, 2)
  3840.             If $IDIM_1 <> $IDIM_2 Then
  3841.                 Local $ATEMP[$IDIM_2][$IDIM_1]
  3842.                 For $I = 0 To $IDIM_1 - 1
  3843.                     For $J = 0 To $IDIM_2 - 1
  3844.                         $ATEMP[$J][$I] = $AARRAY[$I][$J]
  3845.                     Next
  3846.                 Next
  3847.                 $AARRAY = $ATEMP
  3848.             Else
  3849.                 Local $VELEMENT
  3850.                 For $I = 0 To $IDIM_1 - 1
  3851.                     For $J = $I + 1 To $IDIM_2 - 1
  3852.                         $VELEMENT = $AARRAY[$I][$J]
  3853.                         $AARRAY[$I][$J] = $AARRAY[$J][$I]
  3854.                         $AARRAY[$J][$I] = $VELEMENT
  3855.                     Next
  3856.                 Next
  3857.             EndIf
  3858.         Case Else
  3859.             Return SetError(1, 0, 0)
  3860.     EndSwitch
  3861.     Return 1
  3862. EndFunc   ;==>_ARRAYTRANSPOSE
  3863. Func _ArrayTrim(ByRef $AARRAY, $ITRIMNUM, $IDIRECTION = 0, $ISTART = 0, $IEND = 0, $ISUBITEM = 0)
  3864.     If $IDIRECTION = Default Then $IDIRECTION = 0
  3865.     If $ISTART = Default Then $ISTART = 0
  3866.     If $IEND = Default Then $IEND = 0
  3867.     If $ISUBITEM = Default Then $ISUBITEM = 0
  3868.     If Not IsArray($AARRAY) Then Return SetError(1, 0, 0)
  3869.     Local $IDIM_1 = UBound($AARRAY, $UBOUND_ROWS) - 1
  3870.     If $IEND = 0 Then $IEND = $IDIM_1
  3871.     If $ISTART > $IEND Then Return SetError(3, 0, -1)
  3872.     If $ISTART < 0 Or $IEND < 0 Then Return SetError(3, 0, -1)
  3873.     If $ISTART > $IDIM_1 Or $IEND > $IDIM_1 Then Return SetError(3, 0, -1)
  3874.     If $ISTART > $IEND Then Return SetError(4, 0, -1)
  3875.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  3876.         Case 1
  3877.             If $IDIRECTION Then
  3878.                 For $I = $ISTART To $IEND
  3879.                     $AARRAY[$I] = StringTrimRight($AARRAY[$I], $ITRIMNUM)
  3880.                 Next
  3881.             Else
  3882.                 For $I = $ISTART To $IEND
  3883.                     $AARRAY[$I] = StringTrimLeft($AARRAY[$I], $ITRIMNUM)
  3884.                 Next
  3885.             EndIf
  3886.         Case 2
  3887.             Local $IDIM_2 = UBound($AARRAY, $UBOUND_COLUMNS) - 1
  3888.             If $ISUBITEM < 0 Or $ISUBITEM > $IDIM_2 Then Return SetError(5, 0, -1)
  3889.             If $IDIRECTION Then
  3890.                 For $I = $ISTART To $IEND
  3891.                     $AARRAY[$I][$ISUBITEM] = StringTrimRight($AARRAY[$I][$ISUBITEM], $ITRIMNUM)
  3892.                 Next
  3893.             Else
  3894.                 For $I = $ISTART To $IEND
  3895.                     $AARRAY[$I][$ISUBITEM] = StringTrimLeft($AARRAY[$I][$ISUBITEM], $ITRIMNUM)
  3896.                 Next
  3897.             EndIf
  3898.         Case Else
  3899.             Return SetError(2, 0, 0)
  3900.     EndSwitch
  3901.     Return 1
  3902. EndFunc   ;==>_ArrayTrim
  3903. Func _ArrayUnique(Const ByRef $AARRAY, $ICOLUMN = 0, $IBASE = 0, $ICASE = 0, $ICOUNT = $ARRAYUNIQUE_COUNT, $IINTTYPE = $ARRAYUNIQUE_AUTO)
  3904.     If $ICOLUMN = Default Then $ICOLUMN = 0
  3905.     If $IBASE = Default Then $IBASE = 0
  3906.     If $ICASE = Default Then $ICASE = 0
  3907.     If $ICOUNT = Default Then $ICOUNT = $ARRAYUNIQUE_COUNT
  3908.     If UBound($AARRAY, $UBOUND_ROWS) = 0 Then Return SetError(1, 0, 0)
  3909.     Local $IDIMS = UBound($AARRAY, $UBOUND_DIMENSIONS), $INUMCOLUMNS = UBound($AARRAY, $UBOUND_COLUMNS)
  3910.     If $IDIMS > 2 Then Return SetError(2, 0, 0)
  3911.     If $IBASE < 0 Or $IBASE > 1 Or (Not IsInt($IBASE)) Then Return SetError(3, 0, 0)
  3912.     If $ICASE < 0 Or $ICASE > 1 Or (Not IsInt($ICASE)) Then Return SetError(3, 0, 0)
  3913.     If $ICOUNT < 0 Or $ICOUNT > 1 Or (Not IsInt($ICOUNT)) Then Return SetError(4, 0, 0)
  3914.     If $IINTTYPE < 0 Or $IINTTYPE > 4 Or (Not IsInt($IINTTYPE)) Then Return SetError(5, 0, 0)
  3915.     If $ICOLUMN < 0 Or ($INUMCOLUMNS = 0 And $ICOLUMN > 0) Or ($INUMCOLUMNS > 0 And $ICOLUMN >= $INUMCOLUMNS) Then Return SetError(6, 0, 0)
  3916.     If $IINTTYPE = $ARRAYUNIQUE_AUTO Then
  3917.         Local $BINT, $SVARTYPE
  3918.         If $IDIMS = 1 Then
  3919.             $BINT = IsInt($AARRAY[$IBASE])
  3920.             $SVARTYPE = VarGetType($AARRAY[$IBASE])
  3921.         Else
  3922.             $BINT = IsInt($AARRAY[$IBASE][$ICOLUMN])
  3923.             $SVARTYPE = VarGetType($AARRAY[$IBASE][$ICOLUMN])
  3924.         EndIf
  3925.         If $BINT And $SVARTYPE = "Int64" Then
  3926.             $IINTTYPE = $ARRAYUNIQUE_FORCE64
  3927.         Else
  3928.             $IINTTYPE = $ARRAYUNIQUE_FORCE32
  3929.         EndIf
  3930.     EndIf
  3931.     ObjEvent("AutoIt.Error", __ARRAYUNIQUE_AUTOERRFUNC)
  3932.     Local $ODICTIONARY = ObjCreate("Scripting.Dictionary")
  3933.     $ODICTIONARY.CompareMode = Number(Not $ICASE)
  3934.     Local $VELEM, $STYPE, $VKEY, $BCOMERROR = False
  3935.     For $I = $IBASE To UBound($AARRAY) - 1
  3936.         If $IDIMS = 1 Then
  3937.             $VELEM = $AARRAY[$I]
  3938.         Else
  3939.             $VELEM = $AARRAY[$I][$ICOLUMN]
  3940.         EndIf
  3941.         Switch $IINTTYPE
  3942.             Case $ARRAYUNIQUE_FORCE32
  3943.                 $ODICTIONARY.Item($VELEM)
  3944.                 If @error Then
  3945.                     $BCOMERROR = True
  3946.                     ExitLoop
  3947.                 EndIf
  3948.             Case $ARRAYUNIQUE_FORCE64
  3949.                 $STYPE = VarGetType($VELEM)
  3950.                 If $STYPE = "Int32" Then
  3951.                     $BCOMERROR = True
  3952.                     ExitLoop
  3953.                 EndIf
  3954.                 $VKEY = "#" & $STYPE & "#" & String($VELEM)
  3955.                 If Not $ODICTIONARY.Item($VKEY) Then
  3956.                     $ODICTIONARY($VKEY) = $VELEM
  3957.                 EndIf
  3958.             Case $ARRAYUNIQUE_MATCH
  3959.                 $STYPE = VarGetType($VELEM)
  3960.                 If StringLeft($STYPE, 3) = "Int" Then
  3961.                     $VKEY = "#Int#" & String($VELEM)
  3962.                 Else
  3963.                     $VKEY = "#" & $STYPE & "#" & String($VELEM)
  3964.                 EndIf
  3965.                 If Not $ODICTIONARY.Item($VKEY) Then
  3966.                     $ODICTIONARY($VKEY) = $VELEM
  3967.                 EndIf
  3968.             Case $ARRAYUNIQUE_DISTINCT
  3969.                 $VKEY = "#" & VarGetType($VELEM) & "#" & String($VELEM)
  3970.                 If Not $ODICTIONARY.Item($VKEY) Then
  3971.                     $ODICTIONARY($VKEY) = $VELEM
  3972.                 EndIf
  3973.         EndSwitch
  3974.     Next
  3975.     Local $AVALUES, $J = 0
  3976.     If $BCOMERROR Then
  3977.         Return SetError(7, 0, 0)
  3978.     ElseIf $IINTTYPE <> $ARRAYUNIQUE_FORCE32 Then
  3979.         Local $AVALUES[$ODICTIONARY.Count]
  3980.         For $VKEY In $ODICTIONARY.Keys()
  3981.             $AVALUES[$J] = $ODICTIONARY($VKEY)
  3982.             If StringLeft($VKEY, 5) = "#Ptr#" Then
  3983.                 $AVALUES[$J] = Ptr($AVALUES[$J])
  3984.             EndIf
  3985.             $J += 1
  3986.         Next
  3987.     Else
  3988.         $AVALUES = $ODICTIONARY.Keys()
  3989.     EndIf
  3990.     If $ICOUNT Then
  3991.         _ArrayInsert($AVALUES, 0, $ODICTIONARY.Count)
  3992.     EndIf
  3993.     Return $AVALUES
  3994. EndFunc   ;==>_ArrayUnique
  3995. Func _Array1DToHistogram($AARRAY, $ISIZING = 100)
  3996.     If UBound($AARRAY, 0) > 1 Then Return SetError(1, 0, "")
  3997.     $ISIZING = $ISIZING * 8
  3998.     Local $T, $N, $IMIN = 0, $IMAX = 0, $IOFFSET = 0
  3999.     For $I = 0 To UBound($AARRAY) - 1
  4000.         $T = $AARRAY[$I]
  4001.         $T = IsNumber($T) ? Round($T) : 0
  4002.         If $T < $IMIN Then $IMIN = $T
  4003.         If $T > $IMAX Then $IMAX = $T
  4004.     Next
  4005.     Local $IRANGE = Int(Round(($IMAX - $IMIN) / 8)) * 8
  4006.     Local $ISPACERATIO = 4
  4007.     For $I = 0 To UBound($AARRAY) - 1
  4008.         $T = $AARRAY[$I]
  4009.         If $T Then
  4010.             $N = Abs(Round(($ISIZING * $T) / $IRANGE) / 8)
  4011.             $AARRAY[$I] = ""
  4012.             If $T > 0 Then
  4013.                 If $IMIN Then
  4014.                     $IOFFSET = Int(Abs(Round(($ISIZING * $IMIN) / $IRANGE) / 8) / 8 * $ISPACERATIO)
  4015.                     $AARRAY[$I] = __ARRAY_STRINGREPEAT(ChrW(32), $IOFFSET)
  4016.                 EndIf
  4017.             Else
  4018.                 If $IMIN <> $T Then
  4019.                     $IOFFSET = Int(Abs(Round(($ISIZING * ($T - $IMIN)) / $IRANGE) / 8) / 8 * $ISPACERATIO)
  4020.                     $AARRAY[$I] = __ARRAY_STRINGREPEAT(ChrW(32), $IOFFSET)
  4021.                 EndIf
  4022.             EndIf
  4023.             $AARRAY[$I] &= __ARRAY_STRINGREPEAT(ChrW(9608), Int($N / 8))
  4024.             $N = Mod($N, 8)
  4025.             If $N > 0 Then $AARRAY[$I] &= ChrW(9608 + 8 - $N)
  4026.             $AARRAY[$I] &= " " & $T
  4027.         Else
  4028.             $AARRAY[$I] = ""
  4029.         EndIf
  4030.     Next
  4031.     Return $AARRAY
  4032. EndFunc   ;==>_ARRAY1DTOHISTOGRAM
  4033. Func __ARRAY_STRINGREPEAT($SSTRING, $IREPEATCOUNT)
  4034.     $IREPEATCOUNT = Int($IREPEATCOUNT)
  4035.     If StringLen($SSTRING) < 1 Or $IREPEATCOUNT <= 0 Then Return SetError(1, 0, "")
  4036.     Local $SRESULT = ""
  4037.     While $IREPEATCOUNT > 1
  4038.         If BitAND($IREPEATCOUNT, 1) Then $SRESULT &= $SSTRING
  4039.         $SSTRING &= $SSTRING
  4040.         $IREPEATCOUNT = BitShift($IREPEATCOUNT, 1)
  4041.     WEnd
  4042.     Return $SSTRING & $SRESULT
  4043. EndFunc   ;==>__ARRAY_STRINGREPEAT
  4044. Func __ARRAY_EXETERINTERNAL(ByRef $AARRAY, $ISTART, $ISIZE, $SDELIMITER, ByRef $AIDX, ByRef $ARESULT, ByRef $ICOUNT)
  4045.     If $ISTART == $ISIZE - 1 Then
  4046.         For $I = 0 To $ISIZE - 1
  4047.             $ARESULT[$ICOUNT] &= $AARRAY[$AIDX[$I]] & $SDELIMITER
  4048.         Next
  4049.         If $SDELIMITER <> "" Then $ARESULT[$ICOUNT] = StringTrimRight($ARESULT[$ICOUNT], StringLen($SDELIMITER))
  4050.         $ICOUNT += 1
  4051.     Else
  4052.         Local $ITEMP
  4053.         For $I = $ISTART To $ISIZE - 1
  4054.             $ITEMP = $AIDX[$I]
  4055.             $AIDX[$I] = $AIDX[$ISTART]
  4056.             $AIDX[$ISTART] = $ITEMP
  4057.             __ARRAY_EXETERINTERNAL($AARRAY, $ISTART + 1, $ISIZE, $SDELIMITER, $AIDX, $ARESULT, $ICOUNT)
  4058.             $AIDX[$ISTART] = $AIDX[$I]
  4059.             $AIDX[$I] = $ITEMP
  4060.         Next
  4061.     EndIf
  4062. EndFunc   ;==>__ARRAY_EXETERINTERNAL
  4063. Func __ARRAY_COMBINATIONS($IN, $IR)
  4064.     Local $I_TOTAL = 1
  4065.     For $I = $IR To 1 Step -1
  4066.         $I_TOTAL *= ($IN / $I)
  4067.         $IN -= 1
  4068.     Next
  4069.     Return Round($I_TOTAL)
  4070. EndFunc   ;==>__ARRAY_COMBINATIONS
  4071. Func __ARRAY_GETNEXT($IN, $IR, ByRef $ILEFT, $ITOTAL, ByRef $AIDX)
  4072.     If $ILEFT == $ITOTAL Then
  4073.         $ILEFT -= 1
  4074.         Return
  4075.     EndIf
  4076.     Local $I = $IR - 1
  4077.     While $AIDX[$I] == $IN - $IR + $I
  4078.         $I -= 1
  4079.     WEnd
  4080.     $AIDX[$I] += 1
  4081.     For $J = $I + 1 To $IR - 1
  4082.         $AIDX[$J] = $AIDX[$I] + $J - $I
  4083.     Next
  4084.     $ILEFT -= 1
  4085. EndFunc   ;==>__ARRAY_GETNEXT
  4086. Func __ARRAY_MINMAXINDEX(Const ByRef $AARRAY, $ICOMPNUMERIC, $ISTART, $IEND, $ISUBITEM, $FUCOMPARISON)
  4087.     If $ICOMPNUMERIC = Default Then $ICOMPNUMERIC = 0
  4088.     If $ICOMPNUMERIC <> 1 Then $ICOMPNUMERIC = 0
  4089.     If $ISTART = Default Then $ISTART = 0
  4090.     If $IEND = Default Then $IEND = 0
  4091.     If $ISUBITEM = Default Then $ISUBITEM = 0
  4092.     If Not IsArray($AARRAY) Then Return SetError(1, 0, -1)
  4093.     Local $IDIM_1 = UBound($AARRAY, $UBOUND_ROWS) - 1
  4094.     If $IDIM_1 < 0 Then Return SetError(1, 0, -1)
  4095.     If $IEND = -1 Then $IEND = $IDIM_1
  4096.     If $ISTART = -1 Then $ISTART = 0
  4097.     If $ISTART < -1 Or $IEND < -1 Then Return SetError(3, 0, -1)
  4098.     If $ISTART > $IDIM_1 Or $IEND > $IDIM_1 Then Return SetError(3, 0, -1)
  4099.     If $ISTART > $IEND Then Return SetError(4, 0, -1)
  4100.     If $IDIM_1 < 0 Then Return SetError(5, 0, -1)
  4101.     Local $IMAXMININDEX = $ISTART
  4102.     Switch UBound($AARRAY, $UBOUND_DIMENSIONS)
  4103.         Case 1
  4104.             If $ICOMPNUMERIC Then
  4105.                 For $I = $ISTART To $IEND
  4106.                     If $FUCOMPARISON(Number($AARRAY[$I]), Number($AARRAY[$IMAXMININDEX])) Then $IMAXMININDEX = $I
  4107.                 Next
  4108.             Else
  4109.                 For $I = $ISTART To $IEND
  4110.                     If $FUCOMPARISON($AARRAY[$I], $AARRAY[$IMAXMININDEX]) Then $IMAXMININDEX = $I
  4111.                 Next
  4112.             EndIf
  4113.         Case 2
  4114.             If $ISUBITEM < 0 Or $ISUBITEM > UBound($AARRAY, $UBOUND_COLUMNS) - 1 Then Return SetError(6, 0, -1)
  4115.             If $ICOMPNUMERIC Then
  4116.                 For $I = $ISTART To $IEND
  4117.                     If $FUCOMPARISON(Number($AARRAY[$I][$ISUBITEM]), Number($AARRAY[$IMAXMININDEX][$ISUBITEM])) Then $IMAXMININDEX = $I
  4118.                 Next
  4119.             Else
  4120.                 For $I = $ISTART To $IEND
  4121.                     If $FUCOMPARISON($AARRAY[$I][$ISUBITEM], $AARRAY[$IMAXMININDEX][$ISUBITEM]) Then $IMAXMININDEX = $I
  4122.                 Next
  4123.             EndIf
  4124.         Case Else
  4125.             Return SetError(2, 0, -1)
  4126.     EndSwitch
  4127.     Return $IMAXMININDEX
  4128. EndFunc   ;==>__ARRAY_MINMAXINDEX
  4129. Func __ARRAY_GREATERTHAN($VVALUE1, $VVALUE2)
  4130.     Return $VVALUE1 > $VVALUE2
  4131. EndFunc   ;==>__ARRAY_GREATERTHAN
  4132. Func __ARRAY_LESSTHAN($VVALUE1, $VVALUE2)
  4133.     Return $VVALUE1 < $VVALUE2
  4134. EndFunc   ;==>__ARRAY_LESSTHAN
  4135. Func __ARRAYUNIQUE_AUTOERRFUNC()
  4136. EndFunc   ;==>__ARRAYUNIQUE_AUTOERRFUNC
  4137. Global Const $HDF_LEFT = 0
  4138. Global Const $HDF_RIGHT = 1
  4139. Global Const $HDF_CENTER = 2
  4140. Global Const $HDF_JUSTIFYMASK = 3
  4141. Global Const $HDF_BITMAP_ON_RIGHT = 4096
  4142. Global Const $HDF_BITMAP = 8192
  4143. Global Const $HDF_STRING = 16384
  4144. Global Const $HDF_OWNERDRAW = 32768
  4145. Global Const $HDF_DISPLAYMASK = 61440
  4146. Global Const $HDF_RTLREADING = 4
  4147. Global Const $HDF_SORTDOWN = 512
  4148. Global Const $HDF_IMAGE = 2048
  4149. Global Const $HDF_SORTUP = 1024
  4150. Global Const $HDF_FLAGMASK = 3588
  4151. Global Const $HDI_WIDTH = 1
  4152. Global Const $HDI_TEXT = 2
  4153. Global Const $HDI_FORMAT = 4
  4154. Global Const $HDI_PARAM = 8
  4155. Global Const $HDI_BITMAP = 16
  4156. Global Const $HDI_IMAGE = 32
  4157. Global Const $HDI_DI_SETITEM = 64
  4158. Global Const $HDI_ORDER = 128
  4159. Global Const $HDI_FILTER = 256
  4160. Global Const $HHT_NOWHERE = 1
  4161. Global Const $HHT_ONHEADER = 2
  4162. Global Const $HHT_ONDIVIDER = 4
  4163. Global Const $HHT_ONDIVOPEN = 8
  4164. Global Const $HHT_ONFILTER = 16
  4165. Global Const $HHT_ONFILTERBUTTON = 32
  4166. Global Const $HHT_ABOVE = 256
  4167. Global Const $HHT_BELOW = 512
  4168. Global Const $HHT_TORIGHT = 1024
  4169. Global Const $HHT_TOLEFT = 2048
  4170. Global Const $HDM_FIRST = 4608
  4171. Global Const $HDM_CLEARFILTER = $HDM_FIRST + 24
  4172. Global Const $HDM_CREATEDRAGIMAGE = $HDM_FIRST + 16
  4173. Global Const $HDM_DELETEITEM = $HDM_FIRST + 2
  4174. Global Const $HDM_EDITFILTER = $HDM_FIRST + 23
  4175. Global Const $HDM_GETBITMAPMARGIN = $HDM_FIRST + 21
  4176. Global Const $HDM_GETFOCUSEDITEM = $HDM_FIRST + 27
  4177. Global Const $HDM_GETIMAGELIST = $HDM_FIRST + 9
  4178. Global Const $HDM_GETITEMA = $HDM_FIRST + 3
  4179. Global Const $HDM_GETITEMW = $HDM_FIRST + 11
  4180. Global Const $HDM_GETITEMCOUNT = $HDM_FIRST + 0
  4181. Global Const $HDM_GETITEMDROPDOWNRECT = $HDM_FIRST + 25
  4182. Global Const $HDM_GETITEMRECT = $HDM_FIRST + 7
  4183. Global Const $HDM_GETORDERARRAY = $HDM_FIRST + 17
  4184. Global Const $HDM_GETOVERFLOWRECT = $HDM_FIRST + 26
  4185. Global Const $HDM_GETUNICODEFORMAT = 8192 + 6
  4186. Global Const $HDM_HITTEST = $HDM_FIRST + 6
  4187. Global Const $HDM_INSERTITEMA = $HDM_FIRST + 1
  4188. Global Const $HDM_INSERTITEMW = $HDM_FIRST + 10
  4189. Global Const $HDM_LAYOUT = $HDM_FIRST + 5
  4190. Global Const $HDM_ORDERTOINDEX = $HDM_FIRST + 15
  4191. Global Const $HDM_SETBITMAPMARGIN = $HDM_FIRST + 20
  4192. Global Const $HDM_SETFILTERCHANGETIMEOUT = $HDM_FIRST + 22
  4193. Global Const $HDM_SETFOCUSEDITEM = $HDM_FIRST + 28
  4194. Global Const $HDM_SETHOTDIVIDER = $HDM_FIRST + 19
  4195. Global Const $HDM_SETIMAGELIST = $HDM_FIRST + 8
  4196. Global Const $HDM_SETITEMA = $HDM_FIRST + 4
  4197. Global Const $HDM_SETITEMW = $HDM_FIRST + 12
  4198. Global Const $HDM_SETORDERARRAY = $HDM_FIRST + 18
  4199. Global Const $HDM_SETUNICODEFORMAT = 8192 + 5
  4200. Global Const $HDN_FIRST = -300
  4201. Global Const $HDN_BEGINDRAG = $HDN_FIRST - 10
  4202. Global Const $HDN_BEGINTRACK = $HDN_FIRST - 6
  4203. Global Const $HDN_DIVIDERDBLCLICK = $HDN_FIRST - 5
  4204. Global Const $HDN_ENDDRAG = $HDN_FIRST - 11
  4205. Global Const $HDN_ENDTRACK = $HDN_FIRST - 7
  4206. Global Const $HDN_FILTERBTNCLICK = $HDN_FIRST - 13
  4207. Global Const $HDN_FILTERCHANGE = $HDN_FIRST - 12
  4208. Global Const $HDN_GETDISPINFO = $HDN_FIRST - 9
  4209. Global Const $HDN_ITEMCHANGED = $HDN_FIRST - 1
  4210. Global Const $HDN_ITEMCHANGING = $HDN_FIRST + 0
  4211. Global Const $HDN_ITEMCLICK = $HDN_FIRST - 2
  4212. Global Const $HDN_ITEMDBLCLICK = $HDN_FIRST - 3
  4213. Global Const $HDN_TRACK = $HDN_FIRST - 8
  4214. Global Const $HDN_BEGINTRACKW = $HDN_FIRST - 26
  4215. Global Const $HDN_DIVIDERDBLCLICKW = $HDN_FIRST - 25
  4216. Global Const $HDN_ENDTRACKW = $HDN_FIRST - 27
  4217. Global Const $HDN_GETDISPINFOW = $HDN_FIRST - 29
  4218. Global Const $HDN_ITEMCHANGEDW = $HDN_FIRST - 21
  4219. Global Const $HDN_ITEMCHANGINGW = $HDN_FIRST - 20
  4220. Global Const $HDN_ITEMCLICKW = $HDN_FIRST - 22
  4221. Global Const $HDN_ITEMDBLCLICKW = $HDN_FIRST - 23
  4222. Global Const $HDN_TRACKW = $HDN_FIRST - 28
  4223. Global Const $HDS_BUTTONS = 2
  4224. Global Const $HDS_CHECKBOXES = 1024
  4225. Global Const $HDS_DRAGDROP = 64
  4226. Global Const $HDS_FILTERBAR = 256
  4227. Global Const $HDS_FLAT = 512
  4228. Global Const $HDS_FULLDRAG = 128
  4229. Global Const $HDS_HIDDEN = 8
  4230. Global Const $HDS_HORZ = 0
  4231. Global Const $HDS_HOTTRACK = 4
  4232. Global Const $HDS_NOSIZING = 2048
  4233. Global Const $HDS_OVERFLOW = 4096
  4234. Global Const $HDS_DEFAULT = 70
  4235. Global Const $GMEM_FIXED = 0
  4236. Global Const $GMEM_MOVEABLE = 2
  4237. Global Const $GMEM_NOCOMPACT = 16
  4238. Global Const $GMEM_NODISCARD = 32
  4239. Global Const $GMEM_ZEROINIT = 64
  4240. Global Const $GMEM_MODIFY = 128
  4241. Global Const $GMEM_DISCARDABLE = 256
  4242. Global Const $GMEM_NOT_BANKED = 4096
  4243. Global Const $GMEM_SHARE = 8192
  4244. Global Const $GMEM_DDESHARE = 8192
  4245. Global Const $GMEM_NOTIFY = 16384
  4246. Global Const $GMEM_LOWER = 4096
  4247. Global Const $GMEM_VALID_FLAGS = 32626
  4248. Global Const $GMEM_INVALID_HANDLE = 32768
  4249. Global Const $GPTR = BitOR($GMEM_FIXED, $GMEM_ZEROINIT)
  4250. Global Const $GHND = BitOR($GMEM_MOVEABLE, $GMEM_ZEROINIT)
  4251. Global Const $MEM_COMMIT = 4096
  4252. Global Const $MEM_RESERVE = 8192
  4253. Global Const $MEM_TOP_DOWN = 1048576
  4254. Global Const $MEM_SHARED = 134217728
  4255. Global Const $PAGE_NOACCESS = 1
  4256. Global Const $PAGE_READONLY = 2
  4257. Global Const $PAGE_READWRITE = 4
  4258. Global Const $PAGE_EXECUTE = 16
  4259. Global Const $PAGE_EXECUTE_READ = 32
  4260. Global Const $PAGE_EXECUTE_READWRITE = 64
  4261. Global Const $PAGE_EXECUTE_WRITECOPY = 128
  4262. Global Const $PAGE_GUARD = 256
  4263. Global Const $PAGE_NOCACHE = 512
  4264. Global Const $PAGE_WRITECOMBINE = 1024
  4265. Global Const $PAGE_WRITECOPY = 8
  4266. Global Const $MEM_DECOMMIT = 16384
  4267. Global Const $MEM_RELEASE = 32768
  4268. Global Enum $MEM_LOAD, $MEM_TOTALPHYSRAM, $MEM_AVAILPHYSRAM, $MEM_TOTALPAGEFILE, $MEM_AVAILPAGEFILE, $MEM_TOTALVIRTUAL, $MEM_AVAILVIRTUAL
  4269. Global Const $PROCESS_TERMINATE = 1
  4270. Global Const $PROCESS_CREATE_THREAD = 2
  4271. Global Const $PROCESS_SET_SESSIONID = 4
  4272. Global Const $PROCESS_VM_OPERATION = 8
  4273. Global Const $PROCESS_VM_READ = 16
  4274. Global Const $PROCESS_VM_WRITE = 32
  4275. Global Const $PROCESS_DUP_HANDLE = 64
  4276. Global Const $PROCESS_CREATE_PROCESS = 128
  4277. Global Const $PROCESS_SET_QUOTA = 256
  4278. Global Const $PROCESS_SET_INFORMATION = 512
  4279. Global Const $PROCESS_QUERY_INFORMATION = 1024
  4280. Global Const $PROCESS_QUERY_LIMITED_INFORMATION = 4096
  4281. Global Const $PROCESS_SUSPEND_RESUME = 2048
  4282. Global Const $PROCESS_ALL_ACCESS = 2035711
  4283. Global Const $SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege"
  4284. Global Const $SE_AUDIT_NAME = "SeAuditPrivilege"
  4285. Global Const $SE_BACKUP_NAME = "SeBackupPrivilege"
  4286. Global Const $SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege"
  4287. Global Const $SE_CREATE_GLOBAL_NAME = "SeCreateGlobalPrivilege"
  4288. Global Const $SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege"
  4289. Global Const $SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege"
  4290. Global Const $SE_CREATE_SYMBOLIC_LINK_NAME = "SeCreateSymbolicLinkPrivilege"
  4291. Global Const $SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege"
  4292. Global Const $SE_DEBUG_NAME = "SeDebugPrivilege"
  4293. Global Const $SE_ENABLE_DELEGATION_NAME = "SeEnableDelegationPrivilege"
  4294. Global Const $SE_IMPERSONATE_NAME = "SeImpersonatePrivilege"
  4295. Global Const $SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege"
  4296. Global Const $SE_INC_WORKING_SET_NAME = "SeIncreaseWorkingSetPrivilege"
  4297. Global Const $SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege"
  4298. Global Const $SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege"
  4299. Global Const $SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege"
  4300. Global Const $SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege"
  4301. Global Const $SE_MANAGE_VOLUME_NAME = "SeManageVolumePrivilege"
  4302. Global Const $SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege"
  4303. Global Const $SE_RELABEL_NAME = "SeRelabelPrivilege"
  4304. Global Const $SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege"
  4305. Global Const $SE_RESTORE_NAME = "SeRestorePrivilege"
  4306. Global Const $SE_SECURITY_NAME = "SeSecurityPrivilege"
  4307. Global Const $SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
  4308. Global Const $SE_SYNC_AGENT_NAME = "SeSyncAgentPrivilege"
  4309. Global Const $SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege"
  4310. Global Const $SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege"
  4311. Global Const $SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege"
  4312. Global Const $SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege"
  4313. Global Const $SE_TCB_NAME = "SeTcbPrivilege"
  4314. Global Const $SE_TIME_ZONE_NAME = "SeTimeZonePrivilege"
  4315. Global Const $SE_TRUSTED_CREDMAN_ACCESS_NAME = "SeTrustedCredManAccessPrivilege"
  4316. Global Const $SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege"
  4317. Global Const $SE_UNDOCK_NAME = "SeUndockPrivilege"
  4318. Global Const $SE_PRIVILEGE_ENABLED_BY_DEFAULT = 1
  4319. Global Const $SE_PRIVILEGE_ENABLED = 2
  4320. Global Const $SE_PRIVILEGE_REMOVED = 4
  4321. Global Const $SE_PRIVILEGE_USED_FOR_ACCESS = -2147483648
  4322. Global Const $SE_GROUP_MANDATORY = 1
  4323. Global Const $SE_GROUP_ENABLED_BY_DEFAULT = 2
  4324. Global Const $SE_GROUP_ENABLED = 4
  4325. Global Const $SE_GROUP_OWNER = 8
  4326. Global Const $SE_GROUP_USE_FOR_DENY_ONLY = 16
  4327. Global Const $SE_GROUP_INTEGRITY = 32
  4328. Global Const $SE_GROUP_INTEGRITY_ENABLED = 64
  4329. Global Const $SE_GROUP_RESOURCE = 536870912
  4330. Global Const $SE_GROUP_LOGON_ID = -1073741824
  4331. Global Enum $TOKENPRIMARY = 1, $TOKENIMPERSONATION
  4332. Global Enum $SECURITYANONYMOUS = 0, $SECURITYIDENTIFICATION, $SECURITYIMPERSONATION, $SECURITYDELEGATION
  4333. Global Enum $TOKENUSER = 1, $TOKENGROUPS, $TOKENPRIVILEGES, $TOKENOWNER, $TOKENPRIMARYGROUP, $TOKENDEFAULTDACL, $TOKENSOURCE, $TOKENTYPE, $TOKENIMPERSONATIONLEVEL, $TOKENSTATISTICS, $TOKENRESTRICTEDSIDS, $TOKENSESSIONID, $TOKENGROUPSANDPRIVILEGES, $TOKENSESSIONREFERENCE, $TOKENSANDBOXINERT, $TOKENAUDITPOLICY, $TOKENORIGIN, $TOKENELEVATIONTYPE, $TOKENLINKEDTOKEN, $TOKENELEVATION, $TOKENHASRESTRICTIONS, $TOKENACCESSINFORMATION, $TOKENVIRTUALIZATIONALLOWED, $TOKENVIRTUALIZATIONENABLED, $TOKENINTEGRITYLEVEL, $TOKENUIACCESS, $TOKENMANDATORYPOLICY, $TOKENLOGONSID
  4334. Global Const $TOKEN_ASSIGN_PRIMARY = 1
  4335. Global Const $TOKEN_DUPLICATE = 2
  4336. Global Const $TOKEN_IMPERSONATE = 4
  4337. Global Const $TOKEN_QUERY = 8
  4338. Global Const $TOKEN_QUERY_SOURCE = 16
  4339. Global Const $TOKEN_ADJUST_PRIVILEGES = 32
  4340. Global Const $TOKEN_ADJUST_GROUPS = 64
  4341. Global Const $TOKEN_ADJUST_DEFAULT = 128
  4342. Global Const $TOKEN_ADJUST_SESSIONID = 256
  4343. Global Const $TOKEN_ALL_ACCESS = 983551
  4344. Global Const $TOKEN_READ = 131080
  4345. Global Const $TOKEN_WRITE = 131296
  4346. Global Const $TOKEN_EXECUTE = 131072
  4347. Global Const $TOKEN_HAS_TRAVERSE_PRIVILEGE = 1
  4348. Global Const $TOKEN_HAS_BACKUP_PRIVILEGE = 2
  4349. Global Const $TOKEN_HAS_RESTORE_PRIVILEGE = 4
  4350. Global Const $TOKEN_HAS_ADMIN_GROUP = 8
  4351. Global Const $TOKEN_IS_RESTRICTED = 16
  4352. Global Const $TOKEN_SESSION_NOT_REFERENCED = 32
  4353. Global Const $TOKEN_SANDBOX_INERT = 64
  4354. Global Const $TOKEN_HAS_IMPERSONATE_PRIVILEGE = 128
  4355. Global Const $RIGHTS_DELETE = 65536
  4356. Global Const $READ_CONTROL = 131072
  4357. Global Const $WRITE_DAC = 262144
  4358. Global Const $WRITE_OWNER = 524288
  4359. Global Const $SYNCHRONIZE = 1048576
  4360. Global Const $ACCESS_SYSTEM_SECURITY = 16777216
  4361. Global Const $STANDARD_RIGHTS_REQUIRED = 983040
  4362. Global Const $STANDARD_RIGHTS_READ = $READ_CONTROL
  4363. Global Const $STANDARD_RIGHTS_WRITE = $READ_CONTROL
  4364. Global Const $STANDARD_RIGHTS_EXECUTE = $READ_CONTROL
  4365. Global Const $STANDARD_RIGHTS_ALL = 2031616
  4366. Global Const $SPECIFIC_RIGHTS_ALL = 65535
  4367. Global Enum $NOT_USED_ACCESS = 0, $GRANT_ACCESS, $SET_ACCESS, $DENY_ACCESS, $REVOKE_ACCESS, $SET_AUDIT_SUCCESS, $SET_AUDIT_FAILURE
  4368. Global Enum $TRUSTEE_IS_UNKNOWN = 0, $TRUSTEE_IS_USER, $TRUSTEE_IS_GROUP, $TRUSTEE_IS_DOMAIN, $TRUSTEE_IS_ALIAS, $TRUSTEE_IS_WELL_KNOWN_GROUP, $TRUSTEE_IS_DELETED, $TRUSTEE_IS_INVALID, $TRUSTEE_IS_COMPUTER
  4369. Global Const $LOGON_WITH_PROFILE = 1
  4370. Global Const $LOGON_NETCREDENTIALS_ONLY = 2
  4371. Global Enum $SIDTYPEUSER = 1, $SIDTYPEGROUP, $SIDTYPEDOMAIN, $SIDTYPEALIAS, $SIDTYPEWELLKNOWNGROUP, $SIDTYPEDELETEDACCOUNT, $SIDTYPEINVALID, $SIDTYPEUNKNOWN, $SIDTYPECOMPUTER, $SIDTYPELABEL
  4372. Global Const $SID_ADMINISTRATORS = "S-1-5-32-544"
  4373. Global Const $SID_USERS = "S-1-5-32-545"
  4374. Global Const $SID_GUESTS = "S-1-5-32-546"
  4375. Global Const $SID_ACCOUNT_OPERATORS = "S-1-5-32-548"
  4376. Global Const $SID_SERVER_OPERATORS = "S-1-5-32-549"
  4377. Global Const $SID_PRINT_OPERATORS = "S-1-5-32-550"
  4378. Global Const $SID_BACKUP_OPERATORS = "S-1-5-32-551"
  4379. Global Const $SID_REPLICATOR = "S-1-5-32-552"
  4380. Global Const $SID_OWNER = "S-1-3-0"
  4381. Global Const $SID_EVERYONE = "S-1-1-0"
  4382. Global Const $SID_NETWORK = "S-1-5-2"
  4383. Global Const $SID_INTERACTIVE = "S-1-5-4"
  4384. Global Const $SID_SYSTEM = "S-1-5-18"
  4385. Global Const $SID_AUTHENTICATED_USERS = "S-1-5-11"
  4386. Global Const $SID_SCHANNEL_AUTHENTICATION = "S-1-5-64-14"
  4387. Global Const $SID_DIGEST_AUTHENTICATION = "S-1-5-64-21"
  4388. Global Const $SID_NT_SERVICE = "S-1-5-80"
  4389. Global Const $SID_UNTRUSTED_MANDATORY_LEVEL = "S-1-16-0"
  4390. Global Const $SID_LOW_MANDATORY_LEVEL = "S-1-16-4096"
  4391. Global Const $SID_MEDIUM_MANDATORY_LEVEL = "S-1-16-8192"
  4392. Global Const $SID_MEDIUM_PLUS_MANDATORY_LEVEL = "S-1-16-8448"
  4393. Global Const $SID_HIGH_MANDATORY_LEVEL = "S-1-16-12288"
  4394. Global Const $SID_SYSTEM_MANDATORY_LEVEL = "S-1-16-16384"
  4395. Global Const $SID_PROTECTED_PROCESS_MANDATORY_LEVEL = "S-1-16-20480"
  4396. Global Const $SID_SECURE_PROCESS_MANDATORY_LEVEL = "S-1-16-28672"
  4397. Global Const $SID_ALL_SERVICES = "S-1-5-80-0"
  4398. Func _Security__AdjustTokenPrivileges($HTOKEN, $BDISABLEALL, $TNEWSTATE, $IBUFFERLEN, $TPREVSTATE = 0, $PREQUIRED = 0)
  4399.     Local $ACALL = DllCall("advapi32.dll", "bool", "AdjustTokenPrivileges", "handle", $HTOKEN, "bool", $BDISABLEALL, "struct*", $TNEWSTATE, "dword", $IBUFFERLEN, "struct*", $TPREVSTATE, "struct*", $PREQUIRED)
  4400.     If @error Then Return SetError(@error, @extended, False)
  4401.     Return Not ($ACALL[0] = 0)
  4402. EndFunc   ;==>_Security__AdjustTokenPrivileges
  4403. Func _Security__CreateProcessWithToken($HTOKEN, $ILOGONFLAGS, $SCOMMANDLINE, $ICREATIONFLAGS, $SCURDIR, $TSTARTUPINFO, $TPROCESS_INFORMATION)
  4404.     Local $ACALL = DllCall("advapi32.dll", "bool", "CreateProcessWithTokenW", "handle", $HTOKEN, "dword", $ILOGONFLAGS, "ptr", 0, "wstr", $SCOMMANDLINE, "dword", $ICREATIONFLAGS, "struct*", 0, "wstr", $SCURDIR, "struct*", $TSTARTUPINFO, "struct*", $TPROCESS_INFORMATION)
  4405.     If @error Or Not $ACALL[0] Then Return SetError(@error, @extended, False)
  4406.     Return True
  4407. EndFunc   ;==>_Security__CreateProcessWithToken
  4408. Func _Security__DuplicateTokenEx($HEXISTINGTOKEN, $IDESIREDACCESS, $IIMPERSONATIONLEVEL, $ITOKENTYPE)
  4409.     Local $ACALL = DllCall("advapi32.dll", "bool", "DuplicateTokenEx", "handle", $HEXISTINGTOKEN, "dword", $IDESIREDACCESS, "struct*", 0, "int", $IIMPERSONATIONLEVEL, "int", $ITOKENTYPE, "handle*", 0)
  4410.     If @error Or Not $ACALL[0] Then Return SetError(@error, @extended, 0)
  4411.     Return $ACALL[6]
  4412. EndFunc   ;==>_Security__DuplicateTokenEx
  4413. Func _Security__GetAccountSid($SACCOUNT, $SSYSTEM = "")
  4414.     Local $AACCT = _Security__LookupAccountName($SACCOUNT, $SSYSTEM)
  4415.     If @error Then Return SetError(@error, @extended, 0)
  4416.     If IsArray($AACCT) Then Return _Security__StringSidToSid($AACCT[0])
  4417.     Return ""
  4418. EndFunc   ;==>_Security__GetAccountSid
  4419. Func _Security__GetLengthSid($PSID)
  4420.     If Not _Security__IsValidSid($PSID) Then Return SetError(@error + 10, @extended, 0)
  4421.     Local $ACALL = DllCall("advapi32.dll", "dword", "GetLengthSid", "struct*", $PSID)
  4422.     If @error Then Return SetError(@error, @extended, 0)
  4423.     Return $ACALL[0]
  4424. EndFunc   ;==>_Security__GetLengthSid
  4425. Func _Security__GetTokenInformation($HTOKEN, $ICLASS)
  4426.     Local $ACALL = DllCall("advapi32.dll", "bool", "GetTokenInformation", "handle", $HTOKEN, "int", $ICLASS, "struct*", 0, "dword", 0, "dword*", 0)
  4427.     If @error Or Not $ACALL[5] Then Return SetError(@error + 10, @extended, 0)
  4428.     Local $ILEN = $ACALL[5]
  4429.     Local $TBUFFER = DllStructCreate("byte[" & $ILEN & "]")
  4430.     $ACALL = DllCall("advapi32.dll", "bool", "GetTokenInformation", "handle", $HTOKEN, "int", $ICLASS, "struct*", $TBUFFER, "dword", DllStructGetSize($TBUFFER), "dword*", 0)
  4431.     If @error Or Not $ACALL[0] Then Return SetError(@error, @extended, 0)
  4432.     Return $TBUFFER
  4433. EndFunc   ;==>_Security__GetTokenInformation
  4434. Func _Security__ImpersonateSelf($ILEVEL = $SECURITYIMPERSONATION)
  4435.     Local $ACALL = DllCall("advapi32.dll", "bool", "ImpersonateSelf", "int", $ILEVEL)
  4436.     If @error Then Return SetError(@error, @extended, False)
  4437.     Return Not ($ACALL[0] = 0)
  4438. EndFunc   ;==>_Security__ImpersonateSelf
  4439. Func _Security__IsValidSid($PSID)
  4440.     Local $ACALL = DllCall("advapi32.dll", "bool", "IsValidSid", "struct*", $PSID)
  4441.     If @error Then Return SetError(@error, @extended, False)
  4442.     Return Not ($ACALL[0] = 0)
  4443. EndFunc   ;==>_Security__IsValidSid
  4444. Func _Security__LookupAccountName($SACCOUNT, $SSYSTEM = "")
  4445.     Local $TDATA = DllStructCreate("byte SID[256]")
  4446.     Local $ACALL = DllCall("advapi32.dll", "bool", "LookupAccountNameW", "wstr", $SSYSTEM, "wstr", $SACCOUNT, "struct*", $TDATA, "dword*", DllStructGetSize($TDATA), "wstr", "", "dword*", DllStructGetSize($TDATA), "int*", 0)
  4447.     If @error Or Not $ACALL[0] Then Return SetError(@error, @extended, 0)
  4448.     Local $AACCT[3]
  4449.     $AACCT[0] = _Security__SidToStringSid(DllStructGetPtr($TDATA, "SID"))
  4450.     $AACCT[1] = $ACALL[5]
  4451.     $AACCT[2] = $ACALL[7]
  4452.     Return $AACCT
  4453. EndFunc   ;==>_Security__LookupAccountName
  4454. Func _Security__LookupAccountSid($VSID, $SSYSTEM = "")
  4455.     Local $PSID, $AACCT[3]
  4456.     If IsString($VSID) Then
  4457.         $PSID = _Security__StringSidToSid($VSID)
  4458.     Else
  4459.         $PSID = $VSID
  4460.     EndIf
  4461.     If Not _Security__IsValidSid($PSID) Then Return SetError(@error + 10, @extended, 0)
  4462.     Local $STYPESYSTEM = "ptr"
  4463.     If $SSYSTEM Then $STYPESYSTEM = "wstr"
  4464.     Local $ACALL = DllCall("advapi32.dll", "bool", "LookupAccountSidW", $STYPESYSTEM, $SSYSTEM, "struct*", $PSID, "wstr", "", "dword*", 65536, "wstr", "", "dword*", 65536, "int*", 0)
  4465.     If @error Or Not $ACALL[0] Then Return SetError(@error, @extended, 0)
  4466.     Local $AACCT[3]
  4467.     $AACCT[0] = $ACALL[3]
  4468.     $AACCT[1] = $ACALL[5]
  4469.     $AACCT[2] = $ACALL[7]
  4470.     Return $AACCT
  4471. EndFunc   ;==>_Security__LookupAccountSid
  4472. Func _Security__LookupPrivilegeValue($SSYSTEM, $SNAME)
  4473.     Local $ACALL = DllCall("advapi32.dll", "bool", "LookupPrivilegeValueW", "wstr", $SSYSTEM, "wstr", $SNAME, "int64*", 0)
  4474.     If @error Or Not $ACALL[0] Then Return SetError(@error, @extended, 0)
  4475.     Return $ACALL[3]
  4476. EndFunc   ;==>_Security__LookupPrivilegeValue
  4477. Func _Security__OpenProcessToken($HPROCESS, $IACCESS)
  4478.     Local $ACALL = DllCall("advapi32.dll", "bool", "OpenProcessToken", "handle", $HPROCESS, "dword", $IACCESS, "handle*", 0)
  4479.     If @error Or Not $ACALL[0] Then Return SetError(@error, @extended, 0)
  4480.     Return $ACALL[3]
  4481. EndFunc   ;==>_Security__OpenProcessToken
  4482. Func _Security__OpenThreadToken($IACCESS, $HTHREAD = 0, $BOPENASSELF = False)
  4483.     If $HTHREAD = 0 Then
  4484.         Local $ARESULT = DllCall("kernel32.dll", "handle", "GetCurrentThread")
  4485.         If @error Then Return SetError(@error + 10, @extended, 0)
  4486.         $HTHREAD = $ARESULT[0]
  4487.     EndIf
  4488.     Local $ACALL = DllCall("advapi32.dll", "bool", "OpenThreadToken", "handle", $HTHREAD, "dword", $IACCESS, "bool", $BOPENASSELF, "handle*", 0)
  4489.     If @error Or Not $ACALL[0] Then Return SetError(@error, @extended, 0)
  4490.     Return $ACALL[4]
  4491. EndFunc   ;==>_Security__OpenThreadToken
  4492. Func _Security__OpenThreadTokenEx($IACCESS, $HTHREAD = 0, $BOPENASSELF = False)
  4493.     Local $HTOKEN = _Security__OpenThreadToken($IACCESS, $HTHREAD, $BOPENASSELF)
  4494.     If $HTOKEN = 0 Then
  4495.         Local Const $ERROR_NO_TOKEN = 1008
  4496.         If _WinAPI_GetLastError() <> $ERROR_NO_TOKEN Then Return SetError(20, _WinAPI_GetLastError(), 0)
  4497.         If Not _Security__ImpersonateSelf() Then Return SetError(@error + 10, _WinAPI_GetLastError(), 0)
  4498.         $HTOKEN = _Security__OpenThreadToken($IACCESS, $HTHREAD, $BOPENASSELF)
  4499.         If $HTOKEN = 0 Then Return SetError(@error, _WinAPI_GetLastError(), 0)
  4500.     EndIf
  4501.     Return $HTOKEN
  4502. EndFunc   ;==>_Security__OpenThreadTokenEx
  4503. Func _Security__SetPrivilege($HTOKEN, $SPRIVILEGE, $BENABLE)
  4504.     Local $ILUID = _Security__LookupPrivilegeValue("", $SPRIVILEGE)
  4505.     If $ILUID = 0 Then Return SetError(@error + 10, @extended, False)
  4506.     Local Const $TAGTOKEN_PRIVILEGES = "dword Count;align 4;int64 LUID;dword Attributes"
  4507.     Local $TCURRSTATE = DllStructCreate($TAGTOKEN_PRIVILEGES)
  4508.     Local $ICURRSTATE = DllStructGetSize($TCURRSTATE)
  4509.     Local $TPREVSTATE = DllStructCreate($TAGTOKEN_PRIVILEGES)
  4510.     Local $IPREVSTATE = DllStructGetSize($TPREVSTATE)
  4511.     Local $TREQUIRED = DllStructCreate("int Data")
  4512.     DllStructSetData($TCURRSTATE, "Count", 1)
  4513.     DllStructSetData($TCURRSTATE, "LUID", $ILUID)
  4514.     If Not _Security__AdjustTokenPrivileges($HTOKEN, False, $TCURRSTATE, $ICURRSTATE, $TPREVSTATE, $TREQUIRED) Then Return SetError(2, @error, False)
  4515.     DllStructSetData($TPREVSTATE, "Count", 1)
  4516.     DllStructSetData($TPREVSTATE, "LUID", $ILUID)
  4517.     Local $IATTRIBUTES = DllStructGetData($TPREVSTATE, "Attributes")
  4518.     If $BENABLE Then
  4519.         $IATTRIBUTES = BitOR($IATTRIBUTES, $SE_PRIVILEGE_ENABLED)
  4520.     Else
  4521.         $IATTRIBUTES = BitAND($IATTRIBUTES, BitNOT($SE_PRIVILEGE_ENABLED))
  4522.     EndIf
  4523.     DllStructSetData($TPREVSTATE, "Attributes", $IATTRIBUTES)
  4524.     If Not _Security__AdjustTokenPrivileges($HTOKEN, False, $TPREVSTATE, $IPREVSTATE, $TCURRSTATE, $TREQUIRED) Then Return SetError(3, @error, False)
  4525.     Return True
  4526. EndFunc   ;==>_Security__SetPrivilege
  4527. Func _Security__SetTokenInformation($HTOKEN, $ITOKENINFORMATION, $VTOKENINFORMATION, $ITOKENINFORMATIONLENGTH)
  4528.     Local $ACALL = DllCall("advapi32.dll", "bool", "SetTokenInformation", "handle", $HTOKEN, "int", $ITOKENINFORMATION, "struct*", $VTOKENINFORMATION, "dword", $ITOKENINFORMATIONLENGTH)
  4529.     If @error Or Not $ACALL[0] Then Return SetError(@error, @extended, False)
  4530.     Return True
  4531. EndFunc   ;==>_Security__SetTokenInformation
  4532. Func _Security__SidToStringSid($PSID)
  4533.     If Not _Security__IsValidSid($PSID) Then Return SetError(@error + 10, 0, "")
  4534.     Local $ACALL = DllCall("advapi32.dll", "bool", "ConvertSidToStringSidW", "struct*", $PSID, "ptr*", 0)
  4535.     If @error Or Not $ACALL[0] Then Return SetError(@error, @extended, "")
  4536.     Local $PSTRINGSID = $ACALL[2]
  4537.     Local $ALEN = DllCall("kernel32.dll", "int", "lstrlenW", "struct*", $PSTRINGSID)
  4538.     Local $SSID = DllStructGetData(DllStructCreate("wchar Text[" & $ALEN[0] + 1 & "]", $PSTRINGSID), "Text")
  4539.     DllCall("kernel32.dll", "handle", "LocalFree", "handle", $PSTRINGSID)
  4540.     Return $SSID
  4541. EndFunc   ;==>_Security__SidToStringSid
  4542. Func _Security__SidTypeStr($ITYPE)
  4543.     Switch $ITYPE
  4544.         Case $SIDTYPEUSER
  4545.             Return "User"
  4546.         Case $SIDTYPEGROUP
  4547.             Return "Group"
  4548.         Case $SIDTYPEDOMAIN
  4549.             Return "Domain"
  4550.         Case $SIDTYPEALIAS
  4551.             Return "Alias"
  4552.         Case $SIDTYPEWELLKNOWNGROUP
  4553.             Return "Well Known Group"
  4554.         Case $SIDTYPEDELETEDACCOUNT
  4555.             Return "Deleted Account"
  4556.         Case $SIDTYPEINVALID
  4557.             Return "Invalid"
  4558.         Case $SIDTYPEUNKNOWN
  4559.             Return "Unknown Type"
  4560.         Case $SIDTYPECOMPUTER
  4561.             Return "Computer"
  4562.         Case $SIDTYPELABEL
  4563.             Return "A mandatory integrity label SID"
  4564.         Case Else
  4565.             Return "Unknown SID Type"
  4566.     EndSwitch
  4567. EndFunc   ;==>_Security__SidTypeStr
  4568. Func _Security__StringSidToSid($SSID)
  4569.     Local $ACALL = DllCall("advapi32.dll", "bool", "ConvertStringSidToSidW", "wstr", $SSID, "ptr*", 0)
  4570.     If @error Or Not $ACALL[0] Then Return SetError(@error, @extended, 0)
  4571.     Local $PSID = $ACALL[2]
  4572.     Local $TBUFFER = DllStructCreate("byte Data[" & _Security__GetLengthSid($PSID) & "]", $PSID)
  4573.     Local $TSID = DllStructCreate("byte Data[" & DllStructGetSize($TBUFFER) & "]")
  4574.     DllStructSetData($TSID, "Data", DllStructGetData($TBUFFER, "Data"))
  4575.     DllCall("kernel32.dll", "handle", "LocalFree", "handle", $PSID)
  4576.     Return $TSID
  4577. EndFunc   ;==>_Security__StringSidToSid
  4578. Global Const $TAGPOINT = "struct;long X;long Y;endstruct"
  4579. Global Const $TAGRECT = "struct;long Left;long Top;long Right;long Bottom;endstruct"
  4580. Global Const $TAGSIZE = "struct;long X;long Y;endstruct"
  4581. Global Const $TAGMARGINS = "int cxLeftWidth;int cxRightWidth;int cyTopHeight;int cyBottomHeight"
  4582. Global Const $TAGFILETIME = "struct;dword Lo;dword Hi;endstruct"
  4583. Global Const $TAGSYSTEMTIME = "struct;word Year;word Month;word Dow;word Day;word Hour;word Minute;word Second;word MSeconds;endstruct"
  4584. Global Const $TAGTIME_ZONE_INFORMATION = "struct;long Bias;wchar StdName[32];word StdDate[8];long StdBias;wchar DayName[32];word DayDate[8];long DayBias;endstruct"
  4585. Global Const $TAGNMHDR = "struct;hwnd hWndFrom;uint_ptr IDFrom;INT Code;endstruct"
  4586. Global Const $TAGCOMBOBOXEXITEM = "uint Mask;int_ptr Item;ptr Text;int TextMax;int Image;int SelectedImage;int OverlayImage;" & "int Indent;lparam Param"
  4587. Global Const $TAGNMCBEDRAGBEGIN = $TAGNMHDR & ";int ItemID;wchar szText[260]"
  4588. Global Const $TAGNMCBEENDEDIT = $TAGNMHDR & ";bool fChanged;int NewSelection;wchar szText[260];int Why"
  4589. Global Const $TAGNMCOMBOBOXEX = $TAGNMHDR & ";uint Mask;int_ptr Item;ptr Text;int TextMax;int Image;" & "int SelectedImage;int OverlayImage;int Indent;lparam Param"
  4590. 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"
  4591. Global Const $TAGNMDATETIMECHANGE = $TAGNMHDR & ";dword Flag;" & $TAGSYSTEMTIME
  4592. Global Const $TAGNMDATETIMEFORMAT = $TAGNMHDR & ";ptr Format;" & $TAGSYSTEMTIME & ";ptr pDisplay;wchar Display[64]"
  4593. Global Const $TAGNMDATETIMEFORMATQUERY = $TAGNMHDR & ";ptr Format;struct;long SizeX;long SizeY;endstruct"
  4594. Global Const $TAGNMDATETIMEKEYDOWN = $TAGNMHDR & ";int VirtKey;ptr Format;" & $TAGSYSTEMTIME
  4595. Global Const $TAGNMDATETIMESTRING = $TAGNMHDR & ";ptr UserString;" & $TAGSYSTEMTIME & ";dword Flags"
  4596. 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"
  4597. Global Const $TAGGDIP_EFFECTPARAMS_BLUR = "float Radius; bool ExpandEdge"
  4598. Global Const $TAGGDIP_EFFECTPARAMS_BRIGHTNESSCONTRAST = "int BrightnessLevel; int ContrastLevel"
  4599. Global Const $TAGGDIP_EFFECTPARAMS_COLORBALANCE = "int CyanRed; int MagentaGreen; int YellowBlue"
  4600. Global Const $TAGGDIP_EFFECTPARAMS_COLORCURVE = "int Adjustment; int Channel; int AdjustValue"
  4601. Global Const $TAGGDIP_EFFECTPARAMS_COLORLUT = "byte LutB[256]; byte LutG[256]; byte LutR[256]; byte LutA[256]"
  4602. Global Const $TAGGDIP_EFFECTPARAMS_HUESATURATIONLIGHTNESS = "int HueLevel; int SaturationLevel; int LightnessLevel"
  4603. Global Const $TAGGDIP_EFFECTPARAMS_LEVELS = "int Highlight; int Midtone; int Shadow"
  4604. Global Const $TAGGDIP_EFFECTPARAMS_REDEYECORRECTION = "uint NumberOfAreas; ptr Areas"
  4605. Global Const $TAGGDIP_EFFECTPARAMS_SHARPEN = "float Radius; float Amount"
  4606. Global Const $TAGGDIP_EFFECTPARAMS_TINT = "int Hue; int Amount"
  4607. Global Const $TAGGDIPBITMAPDATA = "uint Width;uint Height;int Stride;int Format;ptr Scan0;uint_ptr Reserved"
  4608. Global Const $TAGGDIPCOLORMATRIX = "float m[25]"
  4609. Global Const $TAGGDIPENCODERPARAM = "struct;byte GUID[16];ulong NumberOfValues;ulong Type;ptr Values;endstruct"
  4610. Global Const $TAGGDIPENCODERPARAMS = "uint Count;" & $TAGGDIPENCODERPARAM
  4611. Global Const $TAGGDIPRECTF = "struct;float X;float Y;float Width;float Height;endstruct"
  4612. Global Const $TAGGDIPSTARTUPINPUT = "uint Version;ptr Callback;bool NoThread;bool NoCodecs"
  4613. Global Const $TAGGDIPSTARTUPOUTPUT = "ptr HookProc;ptr UnhookProc"
  4614. 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"
  4615. Global Const $TAGGDIPPENCODERPARAMS = "uint Count;byte Params[1]"
  4616. 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"
  4617. Global Const $TAGNMHDDISPINFO = $TAGNMHDR & ";int Item;uint Mask;ptr Text;int TextMax;int Image;lparam lParam"
  4618. Global Const $TAGNMHDFILTERBTNCLICK = $TAGNMHDR & ";int Item;" & $TAGRECT
  4619. Global Const $TAGNMHEADER = $TAGNMHDR & ";int Item;int Button;ptr pItem"
  4620. Global Const $TAGGETIPADDRESS = "byte Field4;byte Field3;byte Field2;byte Field1"
  4621. Global Const $TAGNMIPADDRESS = $TAGNMHDR & ";int Field;int Value"
  4622. Global Const $TAGLVFINDINFO = "struct;uint Flags;ptr Text;lparam Param;" & $TAGPOINT & ";uint Direction;endstruct"
  4623. Global Const $TAGLVHITTESTINFO = $TAGPOINT & ";uint Flags;int Item;int SubItem;int iGroup"
  4624. Global Const $TAGLVITEM = "struct;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;ptr piColFmt;int iGroup;endstruct"
  4625. Global Const $TAGNMLISTVIEW = $TAGNMHDR & ";int Item;int SubItem;uint NewState;uint OldState;uint Changed;" & "struct;long ActionX;long ActionY;endstruct;lparam Param"
  4626. Global Const $TAGNMLVCUSTOMDRAW = "struct;" & $TAGNMHDR & ";dword dwDrawStage;handle hdc;" & $TAGRECT & ";dword_ptr dwItemSpec;uint uItemState;lparam lItemlParam;endstruct" & ";dword clrText;dword clrTextBk;int iSubItem;dword dwItemType;dword clrFace;int iIconEffect;" & "int iIconPhase;int iPartID;int iStateID;struct;long TextLeft;long TextTop;long TextRight;long TextBottom;endstruct;uint uAlign"
  4627. Global Const $TAGNMLVDISPINFO = $TAGNMHDR & ";" & $TAGLVITEM
  4628. Global Const $TAGNMLVFINDITEM = $TAGNMHDR & ";int Start;" & $TAGLVFINDINFO
  4629. Global Const $TAGNMLVGETINFOTIP = $TAGNMHDR & ";dword Flags;ptr Text;int TextMax;int Item;int SubItem;lparam lParam"
  4630. Global Const $TAGNMITEMACTIVATE = $TAGNMHDR & ";int Index;int SubItem;uint NewState;uint OldState;uint Changed;" & $TAGPOINT & ";lparam lParam;uint KeyFlags"
  4631. Global Const $TAGNMLVKEYDOWN = "align 1;" & $TAGNMHDR & ";word VKey;uint Flags"
  4632. Global Const $TAGNMLVSCROLL = $TAGNMHDR & ";int DX;int DY"
  4633. Global Const $TAGMCHITTESTINFO = "uint Size;" & $TAGPOINT & ";uint Hit;" & $TAGSYSTEMTIME & ";" & $TAGRECT & ";int iOffset;int iRow;int iCol"
  4634. 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"
  4635. 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"
  4636. 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"
  4637. Global Const $TAGNMDAYSTATE = $TAGNMHDR & ";" & $TAGSYSTEMTIME & ";int DayState;ptr pDayState"
  4638. Global Const $TAGNMSELCHANGE = $TAGNMHDR & ";struct;word BegYear;word BegMonth;word BegDOW;word BegDay;word BegHour;word BegMinute;word BegSecond;word BegMSeconds;endstruct;" & "struct;word EndYear;word EndMonth;word EndDOW;word EndDay;word EndHour;word EndMinute;word EndSecond;word EndMSeconds;endstruct"
  4639. Global Const $TAGNMOBJECTNOTIFY = $TAGNMHDR & ";int Item;ptr piid;ptr pObject;long Result;dword dwFlags"
  4640. Global Const $TAGNMTCKEYDOWN = "align 1;" & $TAGNMHDR & ";word VKey;uint Flags"
  4641. Global Const $TAGTVITEM = "struct;uint Mask;handle hItem;uint State;uint StateMask;ptr Text;int TextMax;int Image;int SelectedImage;" & "int Children;lparam Param;endstruct"
  4642. Global Const $TAGTVITEMEX = "struct;" & $TAGTVITEM & ";int Integral;uint uStateEx;hwnd hwnd;int iExpandedImage;int iReserved;endstruct"
  4643. Global Const $TAGNMTREEVIEW = $TAGNMHDR & ";uint Action;" & "struct;uint OldMask;handle OldhItem;uint OldState;uint OldStateMask;" & "ptr OldText;int OldTextMax;int OldImage;int OldSelectedImage;int OldChildren;lparam OldParam;endstruct;" & "struct;uint NewMask;handle NewhItem;uint NewState;uint NewStateMask;" & "ptr NewText;int NewTextMax;int NewImage;int NewSelectedImage;int NewChildren;lparam NewParam;endstruct;" & "struct;long PointX;long PointY;endstruct"
  4644. Global Const $TAGNMTVCUSTOMDRAW = "struct;" & $TAGNMHDR & ";dword DrawStage;handle HDC;" & $TAGRECT & ";dword_ptr ItemSpec;uint ItemState;lparam ItemParam;endstruct" & ";dword ClrText;dword ClrTextBk;int Level"
  4645. Global Const $TAGNMTVDISPINFO = $TAGNMHDR & ";" & $TAGTVITEM
  4646. Global Const $TAGNMTVGETINFOTIP = $TAGNMHDR & ";ptr Text;int TextMax;handle hItem;lparam lParam"
  4647. Global Const $TAGNMTVITEMCHANGE = $TAGNMHDR & ";uint Changed;handle hItem;uint StateNew;uint StateOld;lparam lParam;"
  4648. Global Const $TAGTVHITTESTINFO = $TAGPOINT & ";uint Flags;handle Item"
  4649. Global Const $TAGNMTVKEYDOWN = "align 1;" & $TAGNMHDR & ";word VKey;uint Flags"
  4650. Global Const $TAGNMMOUSE = $TAGNMHDR & ";dword_ptr ItemSpec;dword_ptr ItemData;" & $TAGPOINT & ";lparam HitInfo"
  4651. Global Const $TAGTOKEN_PRIVILEGES = "dword Count;align 4;int64 LUID;dword Attributes"
  4652. Global Const $TAGIMAGEINFO = "handle hBitmap;handle hMask;int Unused1;int Unused2;" & $TAGRECT
  4653. Global Const $TAGMENUINFO = "dword Size;INT Mask;dword Style;uint YMax;handle hBack;dword ContextHelpID;ulong_ptr MenuData"
  4654. 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"
  4655. ;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" & ((@OSVersion = "WIN_XP") """;" & $TAGRECT & ";uint uChevronState")
  4656. Global Const $TAGNMREBARAUTOBREAK = $TAGNMHDR & ";uint uBand;uint wID;lparam lParam;uint uMsg;uint fStyleCurrent;bool fAutoBreak"
  4657. Global Const $TAGNMRBAUTOSIZE = $TAGNMHDR & ";bool fChanged;" & "struct;long TargetLeft;long TargetTop;long TargetRight;long TargetBottom;endstruct;" & "struct;long ActualLeft;long ActualTop;long ActualRight;long ActualBottom;endstruct"
  4658. Global Const $TAGNMREBAR = $TAGNMHDR & ";dword dwMask;uint uBand;uint fStyle;uint wID;lparam lParam"
  4659. Global Const $TAGNMREBARCHEVRON = $TAGNMHDR & ";uint uBand;uint wID;lparam lParam;" & $TAGRECT & ";lparam lParamNM"
  4660. Global Const $TAGNMREBARCHILDSIZE = $TAGNMHDR & ";uint uBand;uint wID;" & "struct;long CLeft;long CTop;long CRight;long CBottom;endstruct;" & "struct;long BLeft;long BTop;long BRight;long BBottom;endstruct"
  4661. Global Const $TAGCOLORSCHEME = "dword Size;dword BtnHighlight;dword BtnShadow"
  4662. Global Const $TAGNMTOOLBAR = $TAGNMHDR & ";int iItem;" & "struct;int iBitmap;int idCommand;byte fsState;byte fsStyle;dword_ptr dwData;int_ptr iString;endstruct" & ";int cchText;ptr pszText;" & $TAGRECT
  4663. Global Const $TAGNMTBHOTITEM = $TAGNMHDR & ";int idOld;int idNew;dword dwFlags"
  4664. Global Const $TAGTBBUTTON = "int Bitmap;int Command;byte State;byte Style;dword_ptr Param;int_ptr String"
  4665. Global Const $TAGTBBUTTONINFO = "uint Size;dword Mask;int Command;int Image;byte State;byte Style;word CX;dword_ptr Param;ptr Text;int TextMax"
  4666. Global Const $TAGNETRESOURCE = "dword Scope;dword Type;dword DisplayType;dword Usage;ptr LocalName;ptr RemoteName;ptr Comment;ptr Provider"
  4667. Global Const $TAGOVERLAPPED = "ulong_ptr Internal;ulong_ptr InternalHigh;struct;dword Offset;dword OffsetHigh;endstruct;handle hEvent"
  4668. 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"
  4669. Global Const $TAGBITMAPINFOHEADER = "struct;dword biSize;long biWidth;long biHeight;word biPlanes;word biBitCount;" & "dword biCompression;dword biSizeImage;long biXPelsPerMeter;long biYPelsPerMeter;dword biClrUsed;dword biClrImportant;endstruct"
  4670. Global Const $TAGBITMAPINFO = $TAGBITMAPINFOHEADER & ";dword biRGBQuad[1]"
  4671. Global Const $TAGBLENDFUNCTION = "byte Op;byte Flags;byte Alpha;byte Format"
  4672. Global Const $TAGGUID = "struct;ulong Data1;ushort Data2;ushort Data3;byte Data4[8];endstruct"
  4673. Global Const $TAGWINDOWPLACEMENT = "uint length;uint flags;uint showCmd;long ptMinPosition[2];long ptMaxPosition[2];long rcNormalPosition[4]"
  4674. Global Const $TAGWINDOWPOS = "hwnd hWnd;hwnd InsertAfter;int X;int Y;int CX;int CY;uint Flags"
  4675. Global Const $TAGSCROLLINFO = "uint cbSize;uint fMask;int nMin;int nMax;uint nPage;int nPos;int nTrackPos"
  4676. Global Const $TAGSCROLLBARINFO = "dword cbSize;" & $TAGRECT & ";int dxyLineButton;int xyThumbTop;" & "int xyThumbBottom;int reserved;dword rgstate[6]"
  4677. Global Const $TAGLOGFONT = "struct;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];endstruct"
  4678. Global Const $TAGKBDLLHOOKSTRUCT = "dword vkCode;dword scanCode;dword flags;dword time;ulong_ptr dwExtraInfo"
  4679. Global Const $TAGPROCESS_INFORMATION = "handle hProcess;handle hThread;dword ProcessID;dword ThreadID"
  4680. 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"
  4681. Global Const $TAGSECURITY_ATTRIBUTES = "dword Length;ptr Descriptor;bool InheritHandle"
  4682. 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]"
  4683. Global Const $TAGTEXTMETRIC = "long tmHeight;long tmAscent;long tmDescent;long tmInternalLeading;long tmExternalLeading;" & "long tmAveCharWidth;long tmMaxCharWidth;long tmWeight;long tmOverhang;long tmDigitizedAspectX;long tmDigitizedAspectY;" & "wchar tmFirstChar;wchar tmLastChar;wchar tmDefaultChar;wchar tmBreakChar;byte tmItalic;byte tmUnderlined;byte tmStruckOut;" & "byte tmPitchAndFamily;byte tmCharSet"
  4684. Global Const $TAGMEMMAP = "handle hProc;ulong_ptr Size;ptr Mem"
  4685. Func _MEMFREE(ByRef $TMEMMAP)
  4686.     Local $PMEMORY = DllStructGetData($TMEMMAP, "Mem")
  4687.     Local $HPROCESS = DllStructGetData($TMEMMAP, "hProc")
  4688.     Local $BRESULT = _MemVirtualFreeEx($HPROCESS, $PMEMORY, 0, $MEM_RELEASE)
  4689.     DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $HPROCESS)
  4690.     If @error Then Return SetError(@error, @extended, False)
  4691.     Return $BRESULT
  4692. EndFunc   ;==>_MEMFREE
  4693. Func _MemGlobalAlloc($IBYTES, $IFLAGS = 0)
  4694.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GlobalAlloc", "uint", $IFLAGS, "ulong_ptr", $IBYTES)
  4695.     If @error Then Return SetError(@error, @extended, 0)
  4696.     Return $ARESULT[0]
  4697. EndFunc   ;==>_MemGlobalAlloc
  4698. Func _MemGlobalFree($HMEMORY)
  4699.     Local $ARESULT = DllCall("kernel32.dll", "ptr", "GlobalFree", "handle", $HMEMORY)
  4700.     If @error Then Return SetError(@error, @extended, False)
  4701.     Return $ARESULT[0]
  4702. EndFunc   ;==>_MemGlobalFree
  4703. Func _MemGlobalLock($HMEMORY)
  4704.     Local $ARESULT = DllCall("kernel32.dll", "ptr", "GlobalLock", "handle", $HMEMORY)
  4705.     If @error Then Return SetError(@error, @extended, 0)
  4706.     Return $ARESULT[0]
  4707. EndFunc   ;==>_MemGlobalLock
  4708. Func _MemGlobalSize($HMEMORY)
  4709.     Local $ARESULT = DllCall("kernel32.dll", "ulong_ptr", "GlobalSize", "handle", $HMEMORY)
  4710.     If @error Then Return SetError(@error, @extended, 0)
  4711.     Return $ARESULT[0]
  4712. EndFunc   ;==>_MemGlobalSize
  4713. Func _MemGlobalUnlock($HMEMORY)
  4714.     Local $ARESULT = DllCall("kernel32.dll", "bool", "GlobalUnlock", "handle", $HMEMORY)
  4715.     If @error Then Return SetError(@error, @extended, 0)
  4716.     Return $ARESULT[0]
  4717. EndFunc   ;==>_MemGlobalUnlock
  4718. Func _MEMINIT($HWND, $ISIZE, ByRef $TMEMMAP)
  4719.     Local $ARESULT = DllCall("user32.dll", "dword", "GetWindowThreadProcessId", "hwnd", $HWND, "dword*", 0)
  4720.     If @error Then Return SetError(@error + 10, @extended, 0)
  4721.     Local $IPROCESSID = $ARESULT[2]
  4722.     If $IPROCESSID = 0 Then Return SetError(1, 0, 0)
  4723.     Local $IACCESS = BitOR($PROCESS_VM_OPERATION, $PROCESS_VM_READ, $PROCESS_VM_WRITE)
  4724.     Local $HPROCESS = __MEM_OPENPROCESS($IACCESS, False, $IPROCESSID, True)
  4725.     Local $IALLOC = BitOR($MEM_RESERVE, $MEM_COMMIT)
  4726.     Local $PMEMORY = _MemVirtualAllocEx($HPROCESS, 0, $ISIZE, $IALLOC, $PAGE_READWRITE)
  4727.     If $PMEMORY = 0 Then Return SetError(2, 0, 0)
  4728.     $TMEMMAP = DllStructCreate($TAGMEMMAP)
  4729.     DllStructSetData($TMEMMAP, "hProc", $HPROCESS)
  4730.     DllStructSetData($TMEMMAP, "Size", $ISIZE)
  4731.     DllStructSetData($TMEMMAP, "Mem", $PMEMORY)
  4732.     Return $PMEMORY
  4733. EndFunc   ;==>_MEMINIT
  4734. Func _MemMoveMemory($PSOURCE, $PDEST, $ILENGTH)
  4735.     DllCall("kernel32.dll", "none", "RtlMoveMemory", "struct*", $PDEST, "struct*", $PSOURCE, "ulong_ptr", $ILENGTH)
  4736.     If @error Then Return SetError(@error, @extended)
  4737. EndFunc   ;==>_MemMoveMemory
  4738. Func _MEMREAD(ByRef $TMEMMAP, $PSRCE, $PDEST, $ISIZE)
  4739.     Local $ARESULT = DllCall("kernel32.dll", "bool", "ReadProcessMemory", "handle", DllStructGetData($TMEMMAP, "hProc"), "ptr", $PSRCE, "struct*", $PDEST, "ulong_ptr", $ISIZE, "ulong_ptr*", 0)
  4740.     If @error Then Return SetError(@error, @extended, False)
  4741.     Return $ARESULT[0]
  4742. EndFunc   ;==>_MEMREAD
  4743. Func _MEMWRITE(ByRef $TMEMMAP, $PSRCE, $PDEST = 0, $ISIZE = 0, $SSRCE = "struct*")
  4744.     If $PDEST = 0 Then $PDEST = DllStructGetData($TMEMMAP, "Mem")
  4745.     If $ISIZE = 0 Then $ISIZE = DllStructGetData($TMEMMAP, "Size")
  4746.     Local $ARESULT = DllCall("kernel32.dll", "bool", "WriteProcessMemory", "handle", DllStructGetData($TMEMMAP, "hProc"), "ptr", $PDEST, $SSRCE, $PSRCE, "ulong_ptr", $ISIZE, "ulong_ptr*", 0)
  4747.     If @error Then Return SetError(@error, @extended, False)
  4748.     Return $ARESULT[0]
  4749. EndFunc   ;==>_MEMWRITE
  4750. Func _MemVirtualAlloc($PADDRESS, $ISIZE, $IALLOCATION, $IPROTECT)
  4751.     Local $ARESULT = DllCall("kernel32.dll", "ptr", "VirtualAlloc", "ptr", $PADDRESS, "ulong_ptr", $ISIZE, "dword", $IALLOCATION, "dword", $IPROTECT)
  4752.     If @error Then Return SetError(@error, @extended, 0)
  4753.     Return $ARESULT[0]
  4754. EndFunc   ;==>_MemVirtualAlloc
  4755. Func _MemVirtualAllocEx($HPROCESS, $PADDRESS, $ISIZE, $IALLOCATION, $IPROTECT)
  4756.     Local $ARESULT = DllCall("kernel32.dll", "ptr", "VirtualAllocEx", "handle", $HPROCESS, "ptr", $PADDRESS, "ulong_ptr", $ISIZE, "dword", $IALLOCATION, "dword", $IPROTECT)
  4757.     If @error Then Return SetError(@error, @extended, 0)
  4758.     Return $ARESULT[0]
  4759. EndFunc   ;==>_MemVirtualAllocEx
  4760. Func _MemVirtualFree($PADDRESS, $ISIZE, $IFREETYPE)
  4761.     Local $ARESULT = DllCall("kernel32.dll", "bool", "VirtualFree", "ptr", $PADDRESS, "ulong_ptr", $ISIZE, "dword", $IFREETYPE)
  4762.     If @error Then Return SetError(@error, @extended, False)
  4763.     Return $ARESULT[0]
  4764. EndFunc   ;==>_MemVirtualFree
  4765. Func _MemVirtualFreeEx($HPROCESS, $PADDRESS, $ISIZE, $IFREETYPE)
  4766.     Local $ARESULT = DllCall("kernel32.dll", "bool", "VirtualFreeEx", "handle", $HPROCESS, "ptr", $PADDRESS, "ulong_ptr", $ISIZE, "dword", $IFREETYPE)
  4767.     If @error Then Return SetError(@error, @extended, False)
  4768.     Return $ARESULT[0]
  4769. EndFunc   ;==>_MemVirtualFreeEx
  4770. Func __MEM_OPENPROCESS($IACCESS, $BINHERIT, $IPID, $BDEBUGPRIV = False)
  4771.     Local $ARESULT = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $IACCESS, "bool", $BINHERIT, "dword", $IPID)
  4772.     If @error Then Return SetError(@error, @extended, 0)
  4773.     If $ARESULT[0] Then Return $ARESULT[0]
  4774.     If Not $BDEBUGPRIV Then Return SetError(100, 0, 0)
  4775.     Local $HTOKEN = _Security__OpenThreadTokenEx(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
  4776.     If @error Then Return SetError(@error + 10, @extended, 0)
  4777.     _Security__SetPrivilege($HTOKEN, "SeDebugPrivilege", True)
  4778.     Local $IERROR = @error
  4779.     Local $IEXTENDED = @extended
  4780.     Local $IRET = 0
  4781.     If Not @error Then
  4782.         $ARESULT = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $IACCESS, "bool", $BINHERIT, "dword", $IPID)
  4783.         $IERROR = @error
  4784.         $IEXTENDED = @extended
  4785.         If $ARESULT[0] Then $IRET = $ARESULT[0]
  4786.         _Security__SetPrivilege($HTOKEN, "SeDebugPrivilege", False)
  4787.         If @error Then
  4788.             $IERROR = @error + 20
  4789.             $IEXTENDED = @extended
  4790.         EndIf
  4791.     Else
  4792.         $IERROR = @error + 30
  4793.     EndIf
  4794.     DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $HTOKEN)
  4795.     Return SetError($IERROR, $IEXTENDED, $IRET)
  4796. EndFunc   ;==>__MEM_OPENPROCESS
  4797. Func _SendMessage($HWND, $IMSG, $WPARAM = 0, $LPARAM = 0, $IRETURN = 0, $WPARAMTYPE = "wparam", $LPARAMTYPE = "lparam", $SRETURNTYPE = "lresult")
  4798.     Local $ARESULT = DllCall("user32.dll", $SRETURNTYPE, "SendMessageW", "hwnd", $HWND, "uint", $IMSG, $WPARAMTYPE, $WPARAM, $LPARAMTYPE, $LPARAM)
  4799.     If @error Then Return SetError(@error, @extended, "")
  4800.     If $IRETURN >= 0 And $IRETURN <= 4 Then Return $ARESULT[$IRETURN]
  4801.     Return $ARESULT
  4802. EndFunc   ;==>_SendMessage
  4803. Func _SendMessageA($HWND, $IMSG, $WPARAM = 0, $LPARAM = 0, $IRETURN = 0, $WPARAMTYPE = "wparam", $LPARAMTYPE = "lparam", $SRETURNTYPE = "lresult")
  4804.     Local $ARESULT = DllCall("user32.dll", $SRETURNTYPE, "SendMessageA", "hwnd", $HWND, "uint", $IMSG, $WPARAMTYPE, $WPARAM, $LPARAMTYPE, $LPARAM)
  4805.     If @error Then Return SetError(@error, @extended, "")
  4806.     If $IRETURN >= 0 And $IRETURN <= 4 Then Return $ARESULT[$IRETURN]
  4807.     Return $ARESULT
  4808. EndFunc   ;==>_SendMessageA
  4809. Global Const $_UDF_GLOBALIDS_OFFSET = 2
  4810. Global Const $_UDF_GLOBALID_MAX_WIN = 16
  4811. Global Const $_UDF_STARTID = 10000
  4812. Global Const $_UDF_GLOBALID_MAX_IDS = 55535
  4813. Global Const $__UDFGUICONSTANT_WS_TABSTOP = 65536
  4814. Global Const $__UDFGUICONSTANT_WS_VISIBLE = 268435456
  4815. Global Const $__UDFGUICONSTANT_WS_CHILD = 1073741824
  4816. Global $__G_AUDF_GLOBALIDS_USED[$_UDF_GLOBALID_MAX_WIN][$_UDF_GLOBALID_MAX_IDS + $_UDF_GLOBALIDS_OFFSET + 1]
  4817. Func __UDF_GETNEXTGLOBALID($HWND)
  4818.     Local $NCTRLID, $IUSEDINDEX = -1, $BALLUSED = True
  4819.     If Not WinExists($HWND) Then Return SetError(-1, -1, 0)
  4820.     For $IINDEX = 0 To $_UDF_GLOBALID_MAX_WIN - 1
  4821.         If $__G_AUDF_GLOBALIDS_USED[$IINDEX][0] <> 0 Then
  4822.             If Not WinExists($__G_AUDF_GLOBALIDS_USED[$IINDEX][0]) Then
  4823.                 For $X = 0 To UBound($__G_AUDF_GLOBALIDS_USED, $UBOUND_COLUMNS) - 1
  4824.                     $__G_AUDF_GLOBALIDS_USED[$IINDEX][$X] = 0
  4825.                 Next
  4826.                 $__G_AUDF_GLOBALIDS_USED[$IINDEX][1] = $_UDF_STARTID
  4827.                 $BALLUSED = False
  4828.             EndIf
  4829.         EndIf
  4830.     Next
  4831.     For $IINDEX = 0 To $_UDF_GLOBALID_MAX_WIN - 1
  4832.         If $__G_AUDF_GLOBALIDS_USED[$IINDEX][0] = $HWND Then
  4833.             $IUSEDINDEX = $IINDEX
  4834.             ExitLoop
  4835.         EndIf
  4836.     Next
  4837.     If $IUSEDINDEX = -1 Then
  4838.         For $IINDEX = 0 To $_UDF_GLOBALID_MAX_WIN - 1
  4839.             If $__G_AUDF_GLOBALIDS_USED[$IINDEX][0] = 0 Then
  4840.                 $__G_AUDF_GLOBALIDS_USED[$IINDEX][0] = $HWND
  4841.                 $__G_AUDF_GLOBALIDS_USED[$IINDEX][1] = $_UDF_STARTID
  4842.                 $BALLUSED = False
  4843.                 $IUSEDINDEX = $IINDEX
  4844.                 ExitLoop
  4845.             EndIf
  4846.         Next
  4847.     EndIf
  4848.     If $IUSEDINDEX = -1 And $BALLUSED Then Return SetError(16, 0, 0)
  4849.     If $__G_AUDF_GLOBALIDS_USED[$IUSEDINDEX][1] = $_UDF_STARTID + $_UDF_GLOBALID_MAX_IDS Then
  4850.         For $IIDINDEX = $_UDF_GLOBALIDS_OFFSET To UBound($__G_AUDF_GLOBALIDS_USED, $UBOUND_COLUMNS) - 1
  4851.             If $__G_AUDF_GLOBALIDS_USED[$IUSEDINDEX][$IIDINDEX] = 0 Then
  4852.                 $NCTRLID = ($IIDINDEX - $_UDF_GLOBALIDS_OFFSET) + 10000
  4853.                 $__G_AUDF_GLOBALIDS_USED[$IUSEDINDEX][$IIDINDEX] = $NCTRLID
  4854.                 Return $NCTRLID
  4855.             EndIf
  4856.         Next
  4857.         Return SetError(-1, $_UDF_GLOBALID_MAX_IDS, 0)
  4858.     EndIf
  4859.     $NCTRLID = $__G_AUDF_GLOBALIDS_USED[$IUSEDINDEX][1]
  4860.     $__G_AUDF_GLOBALIDS_USED[$IUSEDINDEX][1] += 1
  4861.     $__G_AUDF_GLOBALIDS_USED[$IUSEDINDEX][($NCTRLID - 10000) + $_UDF_GLOBALIDS_OFFSET] = $NCTRLID
  4862.     Return $NCTRLID
  4863. EndFunc   ;==>__UDF_GETNEXTGLOBALID
  4864. Func __UDF_FREEGLOBALID($HWND, $IGLOBALID)
  4865.     If $IGLOBALID - $_UDF_STARTID < 0 Or $IGLOBALID - $_UDF_STARTID > $_UDF_GLOBALID_MAX_IDS Then Return SetError(-1, 0, False)
  4866.     For $IINDEX = 0 To $_UDF_GLOBALID_MAX_WIN - 1
  4867.         If $__G_AUDF_GLOBALIDS_USED[$IINDEX][0] = $HWND Then
  4868.             For $X = $_UDF_GLOBALIDS_OFFSET To UBound($__G_AUDF_GLOBALIDS_USED, $UBOUND_COLUMNS) - 1
  4869.                 If $__G_AUDF_GLOBALIDS_USED[$IINDEX][$X] = $IGLOBALID Then
  4870.                     $__G_AUDF_GLOBALIDS_USED[$IINDEX][$X] = 0
  4871.                     Return True
  4872.                 EndIf
  4873.             Next
  4874.             Return SetError(-3, 0, False)
  4875.         EndIf
  4876.     Next
  4877.     Return SetError(-2, 0, False)
  4878. EndFunc   ;==>__UDF_FREEGLOBALID
  4879. #Region Global Variables and Constants
  4880. Global $__G_VENUM, $__G_VEXT = 0
  4881. Global $__G_IRGBMODE = 1
  4882. Global Const $TAGOSVERSIONINFO = "struct;dword OSVersionInfoSize;dword MajorVersion;dword MinorVersion;dword BuildNumber;dword PlatformId;wchar CSDVersion[128];endstruct"
  4883. Global Const $IMAGE_BITMAP = 0
  4884. Global Const $IMAGE_ICON = 1
  4885. Global Const $IMAGE_CURSOR = 2
  4886. Global Const $IMAGE_ENHMETAFILE = 3
  4887. Global Const $LR_DEFAULTCOLOR = 0
  4888. Global Const $LR_MONOCHROME = 1
  4889. Global Const $LR_COLOR = 2
  4890. Global Const $LR_COPYRETURNORG = 4
  4891. Global Const $LR_COPYDELETEORG = 8
  4892. Global Const $LR_LOADFROMFILE = 16
  4893. Global Const $LR_LOADTRANSPARENT = 32
  4894. Global Const $LR_DEFAULTSIZE = 64
  4895. Global Const $LR_VGACOLOR = 128
  4896. Global Const $LR_LOADMAP3DCOLORS = 4096
  4897. Global Const $LR_CREATEDIBSECTION = 8192
  4898. Global Const $LR_COPYFROMRESOURCE = 16384
  4899. Global Const $LR_SHARED = 32768
  4900. Global Const $__TAGCURSORINFO = "dword Size;dword Flags;handle hCursor;" & "struct;long X;long Y;endstruct"
  4901. Global Const $__WINVER = __WINVER()
  4902. #EndRegion Global Variables and Constants
  4903. #Region Functions list
  4904. #EndRegion Functions list
  4905. #Region Public Functions
  4906. Func _WinAPI_CreateFile($SFILENAME, $ICREATION, $IACCESS = 4, $ISHARE = 0, $IATTRIBUTES = 0, $TSECURITY = 0)
  4907.     Local $IDA = 0, $ISM = 0, $ICD = 0, $IFA = 0
  4908.     If BitAND($IACCESS, 1) <> 0 Then $IDA = BitOR($IDA, $GENERIC_EXECUTE)
  4909.     If BitAND($IACCESS, 2) <> 0 Then $IDA = BitOR($IDA, $GENERIC_READ)
  4910.     If BitAND($IACCESS, 4) <> 0 Then $IDA = BitOR($IDA, $GENERIC_WRITE)
  4911.     If BitAND($ISHARE, 1) <> 0 Then $ISM = BitOR($ISM, $FILE_SHARE_DELETE)
  4912.     If BitAND($ISHARE, 2) <> 0 Then $ISM = BitOR($ISM, $FILE_SHARE_READ)
  4913.     If BitAND($ISHARE, 4) <> 0 Then $ISM = BitOR($ISM, $FILE_SHARE_WRITE)
  4914.     Switch $ICREATION
  4915.         Case 0
  4916.             $ICD = $CREATE_NEW
  4917.         Case 1
  4918.             $ICD = $CREATE_ALWAYS
  4919.         Case 2
  4920.             $ICD = $OPEN_EXISTING
  4921.         Case 3
  4922.             $ICD = $OPEN_ALWAYS
  4923.         Case 4
  4924.             $ICD = $TRUNCATE_EXISTING
  4925.     EndSwitch
  4926.     If BitAND($IATTRIBUTES, 1) <> 0 Then $IFA = BitOR($IFA, $FILE_ATTRIBUTE_ARCHIVE)
  4927.     If BitAND($IATTRIBUTES, 2) <> 0 Then $IFA = BitOR($IFA, $FILE_ATTRIBUTE_HIDDEN)
  4928.     If BitAND($IATTRIBUTES, 4) <> 0 Then $IFA = BitOR($IFA, $FILE_ATTRIBUTE_READONLY)
  4929.     If BitAND($IATTRIBUTES, 8) <> 0 Then $IFA = BitOR($IFA, $FILE_ATTRIBUTE_SYSTEM)
  4930.     Local $ARESULT = DllCall("kernel32.dll", "handle", "CreateFileW", "wstr", $SFILENAME, "dword", $IDA, "dword", $ISM, "struct*", $TSECURITY, "dword", $ICD, "dword", $IFA, "ptr", 0)
  4931.     If @error Or ($ARESULT[0] = Ptr(-1)) Then Return SetError(@error, @extended, 0)
  4932.     Return $ARESULT[0]
  4933. EndFunc   ;==>_WinAPI_CreateFile
  4934. Func _WinAPI_FreeLibrary($HMODULE)
  4935.     Local $ARESULT = DllCall("kernel32.dll", "bool", "FreeLibrary", "handle", $HMODULE)
  4936.     If @error Then Return SetError(@error, @extended, False)
  4937.     Return $ARESULT[0]
  4938. EndFunc   ;==>_WinAPI_FreeLibrary
  4939. Func _WinAPI_GetCursorInfo()
  4940.     Local $TCURSOR = DllStructCreate($__TAGCURSORINFO)
  4941.     Local $ICURSOR = DllStructGetSize($TCURSOR)
  4942.     DllStructSetData($TCURSOR, "Size", $ICURSOR)
  4943.     Local $ARET = DllCall("user32.dll", "bool", "GetCursorInfo", "struct*", $TCURSOR)
  4944.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  4945.     Local $ACURSOR[5]
  4946.     $ACURSOR[0] = True
  4947.     $ACURSOR[1] = DllStructGetData($TCURSOR, "Flags") <> 0
  4948.     $ACURSOR[2] = DllStructGetData($TCURSOR, "hCursor")
  4949.     $ACURSOR[3] = DllStructGetData($TCURSOR, "X")
  4950.     $ACURSOR[4] = DllStructGetData($TCURSOR, "Y")
  4951.     Return $ACURSOR
  4952. EndFunc   ;==>_WinAPI_GetCursorInfo
  4953. Func _WinAPI_GetDlgCtrlID($HWND)
  4954.     Local $ARESULT = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $HWND)
  4955.     If @error Then Return SetError(@error, @extended, 0)
  4956.     Return $ARESULT[0]
  4957. EndFunc   ;==>_WinAPI_GetDlgCtrlID
  4958. Func _WinAPI_GetModuleHandle($SMODULENAME)
  4959.     Local $SMODULENAMETYPE = "wstr"
  4960.     If $SMODULENAME = "" Then
  4961.         $SMODULENAME = 0
  4962.         $SMODULENAMETYPE = "ptr"
  4963.     EndIf
  4964.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GetModuleHandleW", $SMODULENAMETYPE, $SMODULENAME)
  4965.     If @error Then Return SetError(@error, @extended, 0)
  4966.     Return $ARESULT[0]
  4967. EndFunc   ;==>_WinAPI_GetModuleHandle
  4968. Func _WinAPI_GetString($PSTRING, $BUNICODE = True)
  4969.     Local $ILENGTH = _WinAPI_StrLen($PSTRING, $BUNICODE)
  4970.     If @error Or Not $ILENGTH Then Return SetError(@error + 10, @extended, "")
  4971.     Local $TSTRING = DllStructCreate(($BUNICODE ? "wchar" : "char") & "[" & ($ILENGTH + 1) & "]", $PSTRING)
  4972.     If @error Then Return SetError(@error, @extended, "")
  4973.     Return SetExtended($ILENGTH, DllStructGetData($TSTRING, 1))
  4974. EndFunc   ;==>_WINAPI_GETSTRING
  4975. Func _WinAPI_IsWow64Process($IPID = 0)
  4976.     If Not $IPID Then $IPID = @AutoItPID
  4977.     Local $HPROCESS = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", ($__WINVER < 153610244096), "bool", 0, "dword", $IPID)
  4978.     If @error Or Not $HPROCESS[0] Then Return SetError(@error + 20, @extended, False)
  4979.     Local $ARET = DllCall("kernel32.dll", "bool", "IsWow64Process", "handle", $HPROCESS[0], "bool*", 0)
  4980.     If __CHECKERRORCLOSEHANDLE($ARET, $HPROCESS[0]) Then Return SetError(@error, @extended, False)
  4981.     Return $ARET[2]
  4982. EndFunc   ;==>_WINAPI_ISWOW64PROCESS
  4983. Func _WinAPI_LoadImage($HINSTANCE, $SIMAGE, $ITYPE, $IXDESIRED, $IYDESIRED, $ILOAD)
  4984.     Local $ARESULT, $SIMAGETYPE = "int"
  4985.     If IsString($SIMAGE) Then $SIMAGETYPE = "wstr"
  4986.     $ARESULT = DllCall("user32.dll", "handle", "LoadImageW", "handle", $HINSTANCE, $SIMAGETYPE, $SIMAGE, "uint", $ITYPE, "int", $IXDESIRED, "int", $IYDESIRED, "uint", $ILOAD)
  4987.     If @error Then Return SetError(@error, @extended, 0)
  4988.     Return $ARESULT[0]
  4989. EndFunc   ;==>_WinAPI_LoadImage
  4990. Func _WinAPI_LoadLibrary($SFILENAME)
  4991.     Local $ARESULT = DllCall("kernel32.dll", "handle", "LoadLibraryW", "wstr", $SFILENAME)
  4992.     If @error Then Return SetError(@error, @extended, 0)
  4993.     Return $ARESULT[0]
  4994. EndFunc   ;==>_WinAPI_LoadLibrary
  4995. Func _WinAPI_PathIsDirectory($SFILEPATH)
  4996.     Local $ARET = DllCall("shlwapi.dll", "bool", "PathIsDirectoryW", "wstr", $SFILEPATH)
  4997.     If @error Then Return SetError(@error, @extended, False)
  4998.     Return $ARET[0]
  4999. EndFunc   ;==>_WINAPI_PATHISDIRECTORY
  5000. Func _WinAPI_ReadFile($HFILE, $PBUFFER, $ITOREAD, ByRef $IREAD, $TOVERLAPPED = 0)
  5001.     Local $ARESULT = DllCall("kernel32.dll", "bool", "ReadFile", "handle", $HFILE, "struct*", $PBUFFER, "dword", $ITOREAD, "dword*", 0, "struct*", $TOVERLAPPED)
  5002.     If @error Then Return SetError(@error, @extended, False)
  5003.     $IREAD = $ARESULT[4]
  5004.     Return $ARESULT[0]
  5005. EndFunc   ;==>_WinAPI_ReadFile
  5006. Func _WinAPI_StrLen($PSTRING, $BUNICODE = True)
  5007.     Local $W = ""
  5008.     If $BUNICODE Then $W = "W"
  5009.     Local $ARET = DllCall("kernel32.dll", "int", "lstrlen" & $W, "struct*", $PSTRING)
  5010.     If @error Then Return SetError(@error, @extended, 0)
  5011.     Return $ARET[0]
  5012. EndFunc   ;==>_WINAPI_STRLEN
  5013. Func _WinAPI_SwitchColor($ICOLOR)
  5014.     If $ICOLOR = -1 Then Return $ICOLOR
  5015.     Return BitOR(BitAND($ICOLOR, 65280), BitShift(BitAND($ICOLOR, 255), -16), BitShift(BitAND($ICOLOR, 16711680), 16))
  5016. EndFunc   ;==>_WINAPI_SWITCHCOLOR
  5017. Func _WinAPI_WriteFile($HFILE, $PBUFFER, $ITOWRITE, ByRef $IWRITTEN, $TOVERLAPPED = 0)
  5018.     Local $ARESULT = DllCall("kernel32.dll", "bool", "WriteFile", "handle", $HFILE, "struct*", $PBUFFER, "dword", $ITOWRITE, "dword*", 0, "struct*", $TOVERLAPPED)
  5019.     If @error Then Return SetError(@error, @extended, False)
  5020.     $IWRITTEN = $ARESULT[4]
  5021.     Return $ARESULT[0]
  5022. EndFunc   ;==>_WinAPI_WriteFile
  5023. #EndRegion Public Functions
  5024. #Region Internal Functions
  5025. Func __CHECKERRORARRAYBOUNDS(Const ByRef $ADATA, ByRef $ISTART, ByRef $IEND, $NDIM = 1, $IDIM = $UBOUND_DIMENSIONS)
  5026.     If Not IsArray($ADATA) Then Return SetError(1, 0, 1)
  5027.     If UBound($ADATA, $IDIM) <> $NDIM Then Return SetError(2, 0, 1)
  5028.     If $ISTART < 0 Then $ISTART = 0
  5029.     Local $IUBOUND = UBound($ADATA) - 1
  5030.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  5031.     If $ISTART > $IEND Then Return SetError(4, 0, 1)
  5032.     Return 0
  5033. EndFunc   ;==>__CHECKERRORARRAYBOUNDS
  5034. Func __CHECKERRORCLOSEHANDLE($ARET, $HFILE, $BLASTERROR = False, $ICURERR = @error, $ICUREXT = @extended)
  5035.     If Not $ICURERR And Not $ARET[0] Then $ICURERR = 10
  5036.     Local $ALASTERROR = DllCall("kernel32.dll", "dword", "GetLastError")
  5037.     DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $HFILE)
  5038.     If $ICURERR Then DllCall("kernel32.dll", "none", "SetLastError", "dword", $ALASTERROR[0])
  5039.     If $BLASTERROR Then $ICUREXT = $ALASTERROR[0]
  5040.     Return SetError($ICURERR, $ICUREXT, $ICURERR)
  5041. EndFunc   ;==>__CHECKERRORCLOSEHANDLE
  5042. Func __DLL($SPATH, $BPIN = False)
  5043.     Local $ARET = DllCall("kernel32.dll", "bool", "GetModuleHandleExW", "dword", ($BPIN ? 1 : 2), "wstr", $SPATH, "ptr*", 0)
  5044.     If Not $ARET[3] Then
  5045.         Local $ARESULT = DllCall("kernel32.dll", "handle", "LoadLibraryW", "wstr", $SPATH)
  5046.         If Not $ARESULT[0] Then Return 0
  5047.     EndIf
  5048.     Return 1
  5049. EndFunc   ;==>__DLL
  5050. Func __ENUMWINDOWSPROC($HWND, $BVISIBLE)
  5051.     Local $ARESULT
  5052.     If $BVISIBLE Then
  5053.         $ARESULT = DllCall("user32.dll", "bool", "IsWindowVisible", "hwnd", $HWND)
  5054.         If Not $ARESULT[0] Then
  5055.             Return 1
  5056.         EndIf
  5057.     EndIf
  5058.     __INC($__G_VENUM)
  5059.     $__G_VENUM[$__G_VENUM[0][0]][0] = $HWND
  5060.     $ARESULT = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $HWND, "wstr", "", "int", 4096)
  5061.     $__G_VENUM[$__G_VENUM[0][0]][1] = $ARESULT[2]
  5062.     Return 1
  5063. EndFunc   ;==>__ENUMWINDOWSPROC
  5064. Func __FATALEXIT($ICODE, $STEXT = "")
  5065.     If $STEXT Then MsgBox($MB_SYSTEMMODAL, "AutoIt", $STEXT)
  5066.     DllCall("kernel32.dll", "none", "FatalExit", "int", $ICODE)
  5067. EndFunc   ;==>__FATALEXIT
  5068. Func __INC(ByRef $ADATA, $IINCREMENT = 100)
  5069.     Select
  5070.         Case UBound($ADATA, $UBOUND_COLUMNS)
  5071.             If $IINCREMENT < 0 Then
  5072.                 ReDim $ADATA[$ADATA[0][0] + 1][UBound($ADATA, $UBOUND_COLUMNS)]
  5073.             Else
  5074.                 $ADATA[0][0] += 1
  5075.                 If $ADATA[0][0] > UBound($ADATA) - 1 Then
  5076.                     ReDim $ADATA[$ADATA[0][0] + $IINCREMENT][UBound($ADATA, $UBOUND_COLUMNS)]
  5077.                 EndIf
  5078.             EndIf
  5079.         Case UBound($ADATA, $UBOUND_ROWS)
  5080.             If $IINCREMENT < 0 Then
  5081.                 ReDim $ADATA[$ADATA[0] + 1]
  5082.             Else
  5083.                 $ADATA[0] += 1
  5084.                 If $ADATA[0] > UBound($ADATA) - 1 Then
  5085.                     ReDim $ADATA[$ADATA[0] + $IINCREMENT]
  5086.                 EndIf
  5087.             EndIf
  5088.         Case Else
  5089.             Return 0
  5090.     EndSelect
  5091.     Return 1
  5092. EndFunc   ;==>__INC
  5093. Func __RGB($ICOLOR)
  5094.     If $__G_IRGBMODE Then
  5095.         $ICOLOR = _WinAPI_SwitchColor($ICOLOR)
  5096.     EndIf
  5097.     Return $ICOLOR
  5098. EndFunc   ;==>__RGB
  5099. Func __WINVER()
  5100.     Local $TOSVI = DllStructCreate($TAGOSVERSIONINFO)
  5101.     DllStructSetData($TOSVI, 1, DllStructGetSize($TOSVI))
  5102.     Local $ARET = DllCall("kernel32.dll", "bool", "GetVersionExW", "struct*", $TOSVI)
  5103.     If @error Or Not $ARET[0] Then Return SetError(@error, @extended, 0)
  5104.     Return BitOR(BitShift(DllStructGetData($TOSVI, 2), -8), DllStructGetData($TOSVI, 3))
  5105. EndFunc   ;==>__WINVER
  5106. #EndRegion Internal Functions
  5107. #Region Global Variables and Constants
  5108. #EndRegion Global Variables and Constants
  5109. #Region Functions list
  5110. #EndRegion Functions list
  5111. #Region Public Functions
  5112. Func _WinAPI_CharToOem($SSTR)
  5113.     Local $ARET = DllCall("user32.dll", "bool", "CharToOemW", "wstr", $SSTR, "wstr", "")
  5114.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, "")
  5115.     Return $ARET[2]
  5116. EndFunc   ;==>_WINAPI_CHARTOOEM
  5117. Func _WinAPI_ClientToScreen($HWND, ByRef $TPOINT)
  5118.     Local $ARET = DllCall("user32.dll", "bool", "ClientToScreen", "hwnd", $HWND, "struct*", $TPOINT)
  5119.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  5120.     Return $TPOINT
  5121. EndFunc   ;==>_WinAPI_ClientToScreen
  5122. Func _WinAPI_DWordToFloat($IVALUE)
  5123.     Local $TDWORD = DllStructCreate("dword")
  5124.     Local $TFLOAT = DllStructCreate("float", DllStructGetPtr($TDWORD))
  5125.     DllStructSetData($TDWORD, 1, $IVALUE)
  5126.     Return DllStructGetData($TFLOAT, 1)
  5127. EndFunc   ;==>_WINAPI_DWORDTOFLOAT
  5128. Func _WinAPI_DWordToInt($IVALUE)
  5129.     Local $TDATA = DllStructCreate("int")
  5130.     DllStructSetData($TDATA, 1, $IVALUE)
  5131.     Return DllStructGetData($TDATA, 1)
  5132. EndFunc   ;==>_WINAPI_DWORDTOINT
  5133. Func _WinAPI_FloatToDWord($IVALUE)
  5134.     Local $TFLOAT = DllStructCreate("float")
  5135.     Local $TDWORD = DllStructCreate("dword", DllStructGetPtr($TFLOAT))
  5136.     DllStructSetData($TFLOAT, 1, $IVALUE)
  5137.     Return DllStructGetData($TDWORD, 1)
  5138. EndFunc   ;==>_WINAPI_FLOATTODWORD
  5139. Func _WinAPI_FloatToInt($NFLOAT)
  5140.     Local $TFLOAT = DllStructCreate("float")
  5141.     Local $TINT = DllStructCreate("int", DllStructGetPtr($TFLOAT))
  5142.     DllStructSetData($TFLOAT, 1, $NFLOAT)
  5143.     Return DllStructGetData($TINT, 1)
  5144. EndFunc   ;==>_WinAPI_FloatToInt
  5145. Func _WinAPI_GetXYFromPoint(ByRef $TPOINT, ByRef $IX, ByRef $IY)
  5146.     $IX = DllStructGetData($TPOINT, "X")
  5147.     $IY = DllStructGetData($TPOINT, "Y")
  5148. EndFunc   ;==>_WinAPI_GetXYFromPoint
  5149. Func _WinAPI_GUIDFromString($SGUID)
  5150.     Local $TGUID = DllStructCreate($TAGGUID)
  5151.     _WinAPI_GUIDFromStringEx($SGUID, $TGUID)
  5152.     If @error Then Return SetError(@error + 10, @extended, 0)
  5153.     Return $TGUID
  5154. EndFunc   ;==>_WinAPI_GUIDFromString
  5155. Func _WinAPI_GUIDFromStringEx($SGUID, $TGUID)
  5156.     Local $ARESULT = DllCall("ole32.dll", "long", "CLSIDFromString", "wstr", $SGUID, "struct*", $TGUID)
  5157.     If @error Then Return SetError(@error, @extended, False)
  5158.     Return $ARESULT[0]
  5159. EndFunc   ;==>_WinAPI_GUIDFromStringEx
  5160. Func _WinAPI_HashData($PMEMORY, $ISIZE, $ILENGTH = 32)
  5161.     If ($ILENGTH <= 0) Or ($ILENGTH > 256) Then Return SetError(11, 0, 0)
  5162.     Local $TDATA = DllStructCreate("byte[" & $ILENGTH & "]")
  5163.     Local $ARET = DllCall("shlwapi.dll", "uint", "HashData", "struct*", $PMEMORY, "dword", $ISIZE, "struct*", $TDATA, "dword", $ILENGTH)
  5164.     If @error Then Return SetError(@error, @extended, 0)
  5165.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  5166.     Return DllStructGetData($TDATA, 1)
  5167. EndFunc   ;==>_WINAPI_HASHDATA
  5168. Func _WinAPI_HashString($SSTRING, $BCASESENSITIVE = True, $ILENGTH = 32)
  5169.     Local $ILENGTHS = StringLen($SSTRING)
  5170.     If Not $ILENGTHS Or ($ILENGTH > 256) Then Return SetError(12, 0, 0)
  5171.     Local $TSTRING = DllStructCreate("wchar[" & ($ILENGTHS + 1) & "]")
  5172.     If Not $BCASESENSITIVE Then
  5173.         $SSTRING = StringLower($SSTRING)
  5174.     EndIf
  5175.     DllStructSetData($TSTRING, 1, $SSTRING)
  5176.     Local $SHASH = _WinAPI_HashData($TSTRING, 2 * $ILENGTHS, $ILENGTH)
  5177.     If @error Then Return SetError(@error, @extended, 0)
  5178.     Return $SHASH
  5179. EndFunc   ;==>_WINAPI_HASHSTRING
  5180. Func _WinAPI_HiByte($IVALUE)
  5181.     Return BitAND(BitShift($IVALUE, 8), 255)
  5182. EndFunc   ;==>_WINAPI_HIBYTE
  5183. Func _WinAPI_HiDWord($IVALUE)
  5184.     Local $TINT64 = DllStructCreate("int64")
  5185.     Local $TQWORD = DllStructCreate("dword;dword", DllStructGetPtr($TINT64))
  5186.     DllStructSetData($TINT64, 1, $IVALUE)
  5187.     Return DllStructGetData($TQWORD, 2)
  5188. EndFunc   ;==>_WINAPI_HIDWORD
  5189. Func _WinAPI_HiWord($ILONG)
  5190.     Return BitShift($ILONG, 16)
  5191. EndFunc   ;==>_WinAPI_HiWord
  5192. Func _WinAPI_IntToDWord($IVALUE)
  5193.     Local $TDATA = DllStructCreate("dword")
  5194.     DllStructSetData($TDATA, 1, $IVALUE)
  5195.     Return DllStructGetData($TDATA, 1)
  5196. EndFunc   ;==>_WINAPI_INTTODWORD
  5197. Func _WinAPI_IntToFloat($IINT)
  5198.     Local $TINT = DllStructCreate("int")
  5199.     Local $TFLOAT = DllStructCreate("float", DllStructGetPtr($TINT))
  5200.     DllStructSetData($TINT, 1, $IINT)
  5201.     Return DllStructGetData($TFLOAT, 1)
  5202. EndFunc   ;==>_WinAPI_IntToFloat
  5203. Func _WinAPI_LoByte($IVALUE)
  5204.     Return BitAND($IVALUE, 255)
  5205. EndFunc   ;==>_WINAPI_LOBYTE
  5206. Func _WinAPI_LoDWord($IVALUE)
  5207.     Local $TINT64 = DllStructCreate("int64")
  5208.     Local $TQWORD = DllStructCreate("dword;dword", DllStructGetPtr($TINT64))
  5209.     DllStructSetData($TINT64, 1, $IVALUE)
  5210.     Return DllStructGetData($TQWORD, 1)
  5211. EndFunc   ;==>_WINAPI_LODWORD
  5212. Func _WinAPI_LoWord($ILONG)
  5213.     Return BitAND($ILONG, 65535)
  5214. EndFunc   ;==>_WinAPI_LoWord
  5215. Func _WinAPI_LongMid($IVALUE, $ISTART, $ICOUNT)
  5216.     Return BitAND(BitShift($IVALUE, $ISTART), BitOR(BitShift(BitShift(2147483647, 32 - ($ICOUNT + 1)), 1), BitShift(1, -($ICOUNT - 1))))
  5217. EndFunc   ;==>_WINAPI_LONGMID
  5218. Func _WinAPI_MAKELANGID($ILNGIDPRIMARY, $ILNGIDSUB)
  5219.     Return BitOR(BitShift($ILNGIDSUB, -10), $ILNGIDPRIMARY)
  5220. EndFunc   ;==>_WinAPI_MAKELANGID
  5221. Func _WinAPI_MAKELCID($ILNGID, $ISORTID)
  5222.     Return BitOR(BitShift($ISORTID, -16), $ILNGID)
  5223. EndFunc   ;==>_WinAPI_MAKELCID
  5224. Func _WinAPI_MakeLong($ILO, $IHI)
  5225.     Return BitOR(BitShift($IHI, -16), BitAND($ILO, 65535))
  5226. EndFunc   ;==>_WinAPI_MakeLong
  5227. Func _WinAPI_MakeQWord($ILODWORD, $IHIDWORD)
  5228.     Local $TINT64 = DllStructCreate("uint64")
  5229.     Local $TDWORDS = DllStructCreate("dword;dword", DllStructGetPtr($TINT64))
  5230.     DllStructSetData($TDWORDS, 1, $ILODWORD)
  5231.     DllStructSetData($TDWORDS, 2, $IHIDWORD)
  5232.     Return DllStructGetData($TINT64, 1)
  5233. EndFunc   ;==>_WinAPI_MakeQWord
  5234. Func _WinAPI_MakeWord($ILO, $IHI)
  5235.     Local $TWORD = DllStructCreate("ushort")
  5236.     Local $TBYTE = DllStructCreate("byte;byte", DllStructGetPtr($TWORD))
  5237.     DllStructSetData($TBYTE, 1, $IHI)
  5238.     DllStructSetData($TBYTE, 2, $ILO)
  5239.     Return DllStructGetData($TWORD, 1)
  5240. EndFunc   ;==>_WINAPI_MAKEWORD
  5241. Func _WinAPI_MultiByteToWideChar($VTEXT, $ICODEPAGE = 0, $IFLAGS = 0, $BRETSTRING = False)
  5242.     Local $STEXTTYPE = "str"
  5243.     If Not IsString($VTEXT) Then $STEXTTYPE = "struct*"
  5244.     Local $ARESULT = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $ICODEPAGE, "dword", $IFLAGS, $STEXTTYPE, $VTEXT, "int", -1, "ptr", 0, "int", 0)
  5245.     If @error Or Not $ARESULT[0] Then Return SetError(@error + 10, @extended, 0)
  5246.     Local $IOUT = $ARESULT[0]
  5247.     Local $TOUT = DllStructCreate("wchar[" & $IOUT & "]")
  5248.     $ARESULT = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $ICODEPAGE, "dword", $IFLAGS, $STEXTTYPE, $VTEXT, "int", -1, "struct*", $TOUT, "int", $IOUT)
  5249.     If @error Or Not $ARESULT[0] Then Return SetError(@error + 20, @extended, 0)
  5250.     If $BRETSTRING Then Return DllStructGetData($TOUT, 1)
  5251.     Return $TOUT
  5252. EndFunc   ;==>_WinAPI_MultiByteToWideChar
  5253. Func _WinAPI_MultiByteToWideCharEx($STEXT, $PTEXT, $ICODEPAGE = 0, $IFLAGS = 0)
  5254.     Local $ARESULT = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $ICODEPAGE, "dword", $IFLAGS, "STR", $STEXT, "int", -1, "struct*", $PTEXT, "int", (StringLen($STEXT) + 1) * 2)
  5255.     If @error Then Return SetError(@error, @extended, False)
  5256.     Return $ARESULT[0]
  5257. EndFunc   ;==>_WinAPI_MultiByteToWideCharEx
  5258. Func _WinAPI_OemToChar($SSTR)
  5259.     Local $ARET = DllCall("user32.dll", "bool", "OemToChar", "str", $SSTR, "str", "")
  5260.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, "")
  5261.     Return $ARET[2]
  5262. EndFunc   ;==>_WINAPI_OEMTOCHAR
  5263. Func _WinAPI_PointFromRect(ByRef $TRECT, $BCENTER = True)
  5264.     Local $IX1 = DllStructGetData($TRECT, "Left")
  5265.     Local $IY1 = DllStructGetData($TRECT, "Top")
  5266.     Local $IX2 = DllStructGetData($TRECT, "Right")
  5267.     Local $IY2 = DllStructGetData($TRECT, "Bottom")
  5268.     If $BCENTER Then
  5269.         $IX1 = $IX1 + (($IX2 - $IX1) / 2)
  5270.         $IY1 = $IY1 + (($IY2 - $IY1) / 2)
  5271.     EndIf
  5272.     Local $TPOINT = DllStructCreate($TAGPOINT)
  5273.     DllStructSetData($TPOINT, "X", $IX1)
  5274.     DllStructSetData($TPOINT, "Y", $IY1)
  5275.     Return $TPOINT
  5276. EndFunc   ;==>_WinAPI_PointFromRect
  5277. Func _WinAPI_PrimaryLangId($ILNGID)
  5278.     Return BitAND($ILNGID, 1023)
  5279. EndFunc   ;==>_WinAPI_PrimaryLangId
  5280. Func _WinAPI_ScreenToClient($HWND, ByRef $TPOINT)
  5281.     Local $ARESULT = DllCall("user32.dll", "bool", "ScreenToClient", "hwnd", $HWND, "struct*", $TPOINT)
  5282.     If @error Then Return SetError(@error, @extended, False)
  5283.     Return $ARESULT[0]
  5284. EndFunc   ;==>_WinAPI_ScreenToClient
  5285. Func _WinAPI_ShortToWord($IVALUE)
  5286.     Return BitAND($IVALUE, 65535)
  5287. EndFunc   ;==>_WINAPI_SHORTTOWORD
  5288. Func _WinAPI_StrFormatByteSize($ISIZE)
  5289.     Local $ARET = DllCall("shlwapi.dll", "ptr", "StrFormatByteSizeW", "int64", $ISIZE, "wstr", "", "uint", 1024)
  5290.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, "")
  5291.     Return $ARET[2]
  5292. EndFunc   ;==>_WINAPI_STRFORMATBYTESIZE
  5293. Func _WinAPI_StrFormatByteSizeEx($ISIZE)
  5294.     Local $ASYMBOL = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 15, "wstr", "", "int", 2048)
  5295.     If @error Then Return SetError(@error + 10, @extended, "")
  5296.     Local $SSIZE = _WinAPI_StrFormatByteSize(0)
  5297.     If @error Then Return SetError(@error, @extended, "")
  5298.     Return StringReplace($SSIZE, "0", StringRegExpReplace(Number($ISIZE), "(?<=\d)(?=(\d{3})+\z)", $ASYMBOL[3]))
  5299. EndFunc   ;==>_WINAPI_STRFORMATBYTESIZEEX
  5300. Func _WinAPI_StrFormatKBSize($ISIZE)
  5301.     Local $ARET = DllCall("shlwapi.dll", "ptr", "StrFormatKBSizeW", "int64", $ISIZE, "wstr", "", "uint", 1024)
  5302.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, "")
  5303.     Return $ARET[2]
  5304. EndFunc   ;==>_WINAPI_STRFORMATKBSIZE
  5305. Func _WinAPI_StrFromTimeInterval($ITIME, $IDIGITS = 7)
  5306.     Local $ARET = DllCall("shlwapi.dll", "int", "StrFromTimeIntervalW", "wstr", "", "uint", 1024, "dword", $ITIME, "int", $IDIGITS)
  5307.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, "")
  5308.     Return StringStripWS($ARET[1], $STR_STRIPLEADING + $STR_STRIPTRAILING)
  5309. EndFunc   ;==>_WINAPI_STRFROMTIMEINTERVAL
  5310. Func _WinAPI_StringFromGUID($TGUID)
  5311.     Local $ARESULT = DllCall("ole32.dll", "int", "StringFromGUID2", "struct*", $TGUID, "wstr", "", "int", 40)
  5312.     If @error Or Not $ARESULT[0] Then Return SetError(@error, @extended, "")
  5313.     Return SetExtended($ARESULT[0], $ARESULT[2])
  5314. EndFunc   ;==>_WinAPI_StringFromGUID
  5315. Func _WinAPI_SubLangId($ILNGID)
  5316.     Return BitShift($ILNGID, 10)
  5317. EndFunc   ;==>_WinAPI_SubLangId
  5318. Func _WinAPI_SwapDWord($IVALUE)
  5319.     Local $TSTRUCT1 = DllStructCreate("dword;dword")
  5320.     Local $TSTRUCT2 = DllStructCreate("byte[4];byte[4]", DllStructGetPtr($TSTRUCT1))
  5321.     DllStructSetData($TSTRUCT1, 1, $IVALUE)
  5322.     For $I = 1 To 4
  5323.         DllStructSetData($TSTRUCT2, 2, DllStructGetData($TSTRUCT2, 1, 5 - $I), $I)
  5324.     Next
  5325.     Return DllStructGetData($TSTRUCT1, 2)
  5326. EndFunc   ;==>_WINAPI_SWAPDWORD
  5327. Func _WinAPI_SwapQWord($IVALUE)
  5328.     Local $TSTRUCT1 = DllStructCreate("int64;int64")
  5329.     Local $TSTRUCT2 = DllStructCreate("byte[8];byte[8]", DllStructGetPtr($TSTRUCT1))
  5330.     DllStructSetData($TSTRUCT1, 1, $IVALUE)
  5331.     For $I = 1 To 8
  5332.         DllStructSetData($TSTRUCT2, 2, DllStructGetData($TSTRUCT2, 1, 9 - $I), $I)
  5333.     Next
  5334.     Return DllStructGetData($TSTRUCT1, 2)
  5335. EndFunc   ;==>_WINAPI_SWAPQWORD
  5336. Func _WinAPI_SwapWord($IVALUE)
  5337.     Local $TSTRUCT1 = DllStructCreate("word;word")
  5338.     Local $TSTRUCT2 = DllStructCreate("byte[2];byte[2]", DllStructGetPtr($TSTRUCT1))
  5339.     DllStructSetData($TSTRUCT1, 1, $IVALUE)
  5340.     For $I = 1 To 2
  5341.         DllStructSetData($TSTRUCT2, 2, DllStructGetData($TSTRUCT2, 1, 3 - $I), $I)
  5342.     Next
  5343.     Return DllStructGetData($TSTRUCT1, 2)
  5344. EndFunc   ;==>_WINAPI_SWAPWORD
  5345. Func _WinAPI_WideCharToMultiByte($VUNICODE, $ICODEPAGE = 0, $BRETNOSTRUCT = True, $BRETBINARY = False)
  5346.     Local $SUNICODETYPE = "wstr"
  5347.     If Not IsString($VUNICODE) Then $SUNICODETYPE = "struct*"
  5348.     Local $ARESULT = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", $ICODEPAGE, "dword", 0, $SUNICODETYPE, $VUNICODE, "int", -1, "ptr", 0, "int", 0, "ptr", 0, "ptr", 0)
  5349.     If @error Or Not $ARESULT[0] Then Return SetError(@error + 20, @extended, "")
  5350.     Local $TMULTIBYTE = DllStructCreate((($BRETBINARY) ? ("byte") : ("char")) & "[" & $ARESULT[0] & "]")
  5351.     $ARESULT = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", $ICODEPAGE, "dword", 0, $SUNICODETYPE, $VUNICODE, "int", -1, "struct*", $TMULTIBYTE, "int", $ARESULT[0], "ptr", 0, "ptr", 0)
  5352.     If @error Or Not $ARESULT[0] Then Return SetError(@error + 10, @extended, "")
  5353.     If $BRETNOSTRUCT Then Return DllStructGetData($TMULTIBYTE, 1)
  5354.     Return $TMULTIBYTE
  5355. EndFunc   ;==>_WinAPI_WideCharToMultiByte
  5356. Func _WinAPI_WordToShort($IVALUE)
  5357.     If BitAND($IVALUE, 32768) Then
  5358.         Return BitOR($IVALUE, -32768)
  5359.     EndIf
  5360.     Return BitAND($IVALUE, 32767)
  5361. EndFunc   ;==>_WINAPI_WORDTOSHORT
  5362. #EndRegion Public Functions
  5363. #Region Global Variables and Constants
  5364. Global Const $DUPLICATE_CLOSE_SOURCE = 1
  5365. Global Const $DUPLICATE_SAME_ACCESS = 2
  5366. Global Const $OBJ_BITMAP = 7
  5367. Global Const $OBJ_BRUSH = 2
  5368. Global Const $OBJ_COLORSPACE = 14
  5369. Global Const $OBJ_DC = 3
  5370. Global Const $OBJ_ENHMETADC = 12
  5371. Global Const $OBJ_ENHMETAFILE = 13
  5372. Global Const $OBJ_EXTPEN = 11
  5373. Global Const $OBJ_FONT = 6
  5374. Global Const $OBJ_MEMDC = 10
  5375. Global Const $OBJ_METADC = 4
  5376. Global Const $OBJ_METAFILE = 9
  5377. Global Const $OBJ_PAL = 5
  5378. Global Const $OBJ_PEN = 1
  5379. Global Const $OBJ_REGION = 8
  5380. Global Const $NULL_BRUSH = 5
  5381. Global Const $NULL_PEN = 8
  5382. Global Const $BLACK_BRUSH = 4
  5383. Global Const $DKGRAY_BRUSH = 3
  5384. Global Const $DC_BRUSH = 18
  5385. Global Const $GRAY_BRUSH = 2
  5386. Global Const $HOLLOW_BRUSH = $NULL_BRUSH
  5387. Global Const $LTGRAY_BRUSH = 1
  5388. Global Const $WHITE_BRUSH = 0
  5389. Global Const $BLACK_PEN = 7
  5390. Global Const $DC_PEN = 19
  5391. Global Const $WHITE_PEN = 6
  5392. Global Const $ANSI_FIXED_FONT = 11
  5393. Global Const $ANSI_VAR_FONT = 12
  5394. Global Const $DEVICE_DEFAULT_FONT = 14
  5395. Global Const $DEFAULT_GUI_FONT = 17
  5396. Global Const $OEM_FIXED_FONT = 10
  5397. Global Const $SYSTEM_FONT = 13
  5398. Global Const $SYSTEM_FIXED_FONT = 16
  5399. Global Const $DEFAULT_PALETTE = 15
  5400. #EndRegion Global Variables and Constants
  5401. #Region Functions list
  5402. #EndRegion Functions list
  5403. #Region Public Functions
  5404. Func _WinAPI_CloseHandle($HOBJECT)
  5405.     Local $ARESULT = DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $HOBJECT)
  5406.     If @error Then Return SetError(@error, @extended, False)
  5407.     Return $ARESULT[0]
  5408. EndFunc   ;==>_WinAPI_CloseHandle
  5409. Func _WinAPI_DeleteObject($HOBJECT)
  5410.     Local $ARESULT = DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $HOBJECT)
  5411.     If @error Then Return SetError(@error, @extended, False)
  5412.     Return $ARESULT[0]
  5413. EndFunc   ;==>_WinAPI_DeleteObject
  5414. Func _WinAPI_DuplicateHandle($HSOURCEPROCESSHANDLE, $HSOURCEHANDLE, $HTARGETPROCESSHANDLE, $IDESIREDACCESS, $IINHERITHANDLE, $IOPTIONS)
  5415.     Local $ARESULT = DllCall("kernel32.dll", "bool", "DuplicateHandle", "handle", $HSOURCEPROCESSHANDLE, "handle", $HSOURCEHANDLE, "handle", $HTARGETPROCESSHANDLE, "handle*", 0, "dword", $IDESIREDACCESS, "bool", $IINHERITHANDLE, "dword", $IOPTIONS)
  5416.     If @error Or Not $ARESULT[0] Then Return SetError(@error, @extended, 0)
  5417.     Return $ARESULT[4]
  5418. EndFunc   ;==>_WinAPI_DuplicateHandle
  5419. Func _WinAPI_GetCurrentObject($HDC, $ITYPE)
  5420.     Local $ARET = DllCall("gdi32.dll", "handle", "GetCurrentObject", "handle", $HDC, "uint", $ITYPE)
  5421.     If @error Or Not $ARET[0] Then Return SetError(@error, @extended, 0)
  5422.     Return $ARET[0]
  5423. EndFunc   ;==>_WINAPI_GETCURRENTOBJECT
  5424. Func _WinAPI_GetCurrentProcess()
  5425.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GetCurrentProcess")
  5426.     If @error Then Return SetError(@error, @extended, 0)
  5427.     Return $ARESULT[0]
  5428. EndFunc   ;==>_WinAPI_GetCurrentProcess
  5429. Func _WinAPI_GetObject($HOBJECT, $ISIZE, $POBJECT)
  5430.     Local $ARESULT = DllCall("gdi32.dll", "int", "GetObjectW", "handle", $HOBJECT, "int", $ISIZE, "struct*", $POBJECT)
  5431.     If @error Then Return SetError(@error, @extended, 0)
  5432.     Return $ARESULT[0]
  5433. EndFunc   ;==>_WinAPI_GetObject
  5434. Func _WinAPI_GetObjectInfoByHandle($HOBJECT)
  5435.     Local $TAGPUBLIC_OBJECT_BASIC_INFORMATION = "ulong Attributes;ulong GrantedAcess;ulong HandleCount;ulong PointerCount;ulong Reserved[10]"
  5436.     Local $TPOBI = DllStructCreate($TAGPUBLIC_OBJECT_BASIC_INFORMATION)
  5437.     Local $ARET = DllCall("ntdll.dll", "long", "ZwQueryObject", "handle", $HOBJECT, "uint", 0, "struct*", $TPOBI, "ulong", DllStructGetSize($TPOBI), "ptr", 0)
  5438.     If @error Then Return SetError(@error, @extended, 0)
  5439.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  5440.     Local $ARESULT[4]
  5441.     For $I = 0 To 3
  5442.         $ARESULT[$I] = DllStructGetData($TPOBI, $I + 1)
  5443.     Next
  5444.     Return $ARESULT
  5445. EndFunc   ;==>_WINAPI_GETOBJECTINFOBYHANDLE
  5446. Func _WinAPI_GetObjectNameByHandle($HOBJECT)
  5447.     Local $TAGUNICODE_STRING = "struct;ushort Length;ushort MaximumLength;ptr Buffer;endstruct"
  5448.     Local $TAGPUBLIC_OBJECT_TYPE_INFORMATION = "struct;" & $TAGUNICODE_STRING & ";ulong Reserved[22];endstruct"
  5449.     Local $TPOTI = DllStructCreate($TAGPUBLIC_OBJECT_TYPE_INFORMATION & ";byte[32]")
  5450.     Local $ARET = DllCall("ntdll.dll", "long", "ZwQueryObject", "handle", $HOBJECT, "uint", 2, "struct*", $TPOTI, "ulong", DllStructGetSize($TPOTI), "ulong*", 0)
  5451.     If @error Then Return SetError(@error, @extended, "")
  5452.     If $ARET[0] Then Return SetError(10, $ARET[0], "")
  5453.     Local $PDATA = DllStructGetData($TPOTI, 3)
  5454.     If Not $PDATA Then Return SetError(11, 0, "")
  5455.     Return _WinAPI_GetString($PDATA)
  5456. EndFunc   ;==>_WINAPI_GETOBJECTNAMEBYHANDLE
  5457. Func _WinAPI_GetObjectType($HOBJECT)
  5458.     Local $ARET = DllCall("gdi32.dll", "dword", "GetObjectType", "handle", $HOBJECT)
  5459.     If @error Then Return SetError(@error, @extended, 0)
  5460.     Return $ARET[0]
  5461. EndFunc   ;==>_WINAPI_GETOBJECTTYPE
  5462. Func _WinAPI_GetStdHandle($ISTDHANDLE)
  5463.     If $ISTDHANDLE < 0 Or $ISTDHANDLE > 2 Then Return SetError(2, 0, -1)
  5464.     Local Const $AHANDLE[3] = [-10, -11, -12]
  5465.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GetStdHandle", "dword", $AHANDLE[$ISTDHANDLE])
  5466.     If @error Then Return SetError(@error, @extended, -1)
  5467.     Return $ARESULT[0]
  5468. EndFunc   ;==>_WinAPI_GetStdHandle
  5469. Func _WinAPI_GetStockObject($IOBJECT)
  5470.     Local $ARESULT = DllCall("gdi32.dll", "handle", "GetStockObject", "int", $IOBJECT)
  5471.     If @error Then Return SetError(@error, @extended, 0)
  5472.     Return $ARESULT[0]
  5473. EndFunc   ;==>_WinAPI_GetStockObject
  5474. Func _WinAPI_SelectObject($HDC, $HGDIOBJ)
  5475.     Local $ARESULT = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $HDC, "handle", $HGDIOBJ)
  5476.     If @error Then Return SetError(@error, @extended, False)
  5477.     Return $ARESULT[0]
  5478. EndFunc   ;==>_WinAPI_SelectObject
  5479. Func _WinAPI_SetHandleInformation($HOBJECT, $IMASK, $IFLAGS)
  5480.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SetHandleInformation", "handle", $HOBJECT, "dword", $IMASK, "dword", $IFLAGS)
  5481.     If @error Then Return SetError(@error, @extended, False)
  5482.     Return $ARESULT[0]
  5483. EndFunc   ;==>_WinAPI_SetHandleInformation
  5484. #EndRegion Public Functions
  5485. #Region Global Variables and Constants
  5486. Global $__G_AINPROCESS_WINAPI[64][2] = [[0, 0]]
  5487. Global $__G_AWINLIST_WINAPI[64][2] = [[0, 0]]
  5488. Global Const $GW_HWNDFIRST = 0
  5489. Global Const $GW_HWNDLAST = 1
  5490. Global Const $GW_HWNDNEXT = 2
  5491. Global Const $GW_HWNDPREV = 3
  5492. Global Const $GW_OWNER = 4
  5493. Global Const $GW_CHILD = 5
  5494. Global Const $GW_ENABLEDPOPUP = 6
  5495. Global Const $GWL_WNDPROC = -4
  5496. Global Const $GWL_HINSTANCE = -6
  5497. Global Const $GWL_HWNDPARENT = -8
  5498. Global Const $GWL_ID = -12
  5499. Global Const $GWL_STYLE = -16
  5500. Global Const $GWL_EXSTYLE = -20
  5501. Global Const $GWL_USERDATA = -21
  5502. Global Const $__WINAPICONSTANT_WM_SETFONT = 48
  5503. #EndRegion Global Variables and Constants
  5504. #Region Functions list
  5505. #EndRegion Functions list
  5506. #Region Public Functions
  5507. Func _WinAPI_CreateWindowEx($IEXSTYLE, $SCLASS, $SNAME, $ISTYLE, $IX, $IY, $IWIDTH, $IHEIGHT, $HPARENT, $HMENU = 0, $HINSTANCE = 0, $PPARAM = 0)
  5508.     If $HINSTANCE = 0 Then $HINSTANCE = _WinAPI_GetModuleHandle("")
  5509.     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, "struct*", $PPARAM)
  5510.     If @error Then Return SetError(@error, @extended, 0)
  5511.     Return $ARESULT[0]
  5512. EndFunc   ;==>_WinAPI_CreateWindowEx
  5513. Func _WinAPI_GetClientRect($HWND)
  5514.     Local $TRECT = DllStructCreate($TAGRECT)
  5515.     Local $ARET = DllCall("user32.dll", "bool", "GetClientRect", "hwnd", $HWND, "struct*", $TRECT)
  5516.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  5517.     Return $TRECT
  5518. EndFunc   ;==>_WinAPI_GetClientRect
  5519. Func _WinAPI_GetDesktopWindow()
  5520.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetDesktopWindow")
  5521.     If @error Then Return SetError(@error, @extended, 0)
  5522.     Return $ARESULT[0]
  5523. EndFunc   ;==>_WinAPI_GetDesktopWindow
  5524. Func _WinAPI_DestroyWindow($HWND)
  5525.     Local $ARESULT = DllCall("user32.dll", "bool", "DestroyWindow", "hwnd", $HWND)
  5526.     If @error Then Return SetError(@error, @extended, False)
  5527.     Return $ARESULT[0]
  5528. EndFunc   ;==>_WinAPI_DestroyWindow
  5529. Func _WinAPI_EnableWindow($HWND, $BENABLE = True)
  5530.     Local $ARESULT = DllCall("user32.dll", "bool", "EnableWindow", "hwnd", $HWND, "bool", $BENABLE)
  5531.     If @error Then Return SetError(@error, @extended, False)
  5532.     Return $ARESULT[0]
  5533. EndFunc   ;==>_WinAPI_EnableWindow
  5534. Func _WinAPI_EnumWindows($BVISIBLE = True, $HWND = Default)
  5535.     __WINAPI_ENUMWINDOWSINIT()
  5536.     If $HWND = Default Then $HWND = _WinAPI_GetDesktopWindow()
  5537.     __WINAPI_ENUMWINDOWSCHILD($HWND, $BVISIBLE)
  5538.     Return $__G_AWINLIST_WINAPI
  5539. EndFunc   ;==>_WinAPI_EnumWindows
  5540. Func _WinAPI_EnumWindowsPopup()
  5541.     __WINAPI_ENUMWINDOWSINIT()
  5542.     Local $HWND = _WinAPI_GetWindow(_WinAPI_GetDesktopWindow(), $GW_CHILD)
  5543.     Local $SCLASS
  5544.     While $HWND <> 0
  5545.         If _WinAPI_IsWindowVisible($HWND) Then
  5546.             $SCLASS = _WinAPI_GetClassName($HWND)
  5547.             If $SCLASS = "#32768" Then
  5548.                 __WINAPI_ENUMWINDOWSADD($HWND)
  5549.             ElseIf $SCLASS = "ToolbarWindow32" Then
  5550.                 __WINAPI_ENUMWINDOWSADD($HWND)
  5551.             ElseIf $SCLASS = "ToolTips_Class32" Then
  5552.                 __WINAPI_ENUMWINDOWSADD($HWND)
  5553.             ElseIf $SCLASS = "BaseBar" Then
  5554.                 __WINAPI_ENUMWINDOWSCHILD($HWND)
  5555.             EndIf
  5556.         EndIf
  5557.         $HWND = _WinAPI_GetWindow($HWND, $GW_HWNDNEXT)
  5558.     WEnd
  5559.     Return $__G_AWINLIST_WINAPI
  5560. EndFunc   ;==>_WinAPI_EnumWindowsPopup
  5561. Func _WinAPI_EnumWindowsTop()
  5562.     __WINAPI_ENUMWINDOWSINIT()
  5563.     Local $HWND = _WinAPI_GetWindow(_WinAPI_GetDesktopWindow(), $GW_CHILD)
  5564.     While $HWND <> 0
  5565.         If _WinAPI_IsWindowVisible($HWND) Then __WINAPI_ENUMWINDOWSADD($HWND)
  5566.         $HWND = _WinAPI_GetWindow($HWND, $GW_HWNDNEXT)
  5567.     WEnd
  5568.     Return $__G_AWINLIST_WINAPI
  5569. EndFunc   ;==>_WinAPI_EnumWindowsTop
  5570. Func _WinAPI_GetClassName($HWND)
  5571.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  5572.     Local $ARESULT = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $HWND, "wstr", "", "int", 4096)
  5573.     If @error Or Not $ARESULT[0] Then Return SetError(@error, @extended, "")
  5574.     Return SetExtended($ARESULT[0], $ARESULT[2])
  5575. EndFunc   ;==>_WinAPI_GetClassName
  5576. Func _WinAPI_GetFocus()
  5577.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetFocus")
  5578.     If @error Then Return SetError(@error, @extended, 0)
  5579.     Return $ARESULT[0]
  5580. EndFunc   ;==>_WinAPI_GetFocus
  5581. Func _WinAPI_GetParent($HWND)
  5582.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $HWND)
  5583.     If @error Then Return SetError(@error, @extended, 0)
  5584.     Return $ARESULT[0]
  5585. EndFunc   ;==>_WinAPI_GetParent
  5586. Func _WinAPI_GetSysColor($IINDEX)
  5587.     Local $ARESULT = DllCall("user32.dll", "INT", "GetSysColor", "int", $IINDEX)
  5588.     If @error Then Return SetError(@error, @extended, 0)
  5589.     Return $ARESULT[0]
  5590. EndFunc   ;==>_WinAPI_GetSysColor
  5591. Func _WinAPI_GetSystemMetrics($IINDEX)
  5592.     Local $ARESULT = DllCall("user32.dll", "int", "GetSystemMetrics", "int", $IINDEX)
  5593.     If @error Then Return SetError(@error, @extended, 0)
  5594.     Return $ARESULT[0]
  5595. EndFunc   ;==>_WinAPI_GetSystemMetrics
  5596. Func _WinAPI_GetWindow($HWND, $ICMD)
  5597.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetWindow", "hwnd", $HWND, "uint", $ICMD)
  5598.     If @error Then Return SetError(@error, @extended, 0)
  5599.     Return $ARESULT[0]
  5600. EndFunc   ;==>_WinAPI_GetWindow
  5601. Func _WinAPI_GetWindowHeight($HWND)
  5602.     Local $TRECT = _WinAPI_GetWindowRect($HWND)
  5603.     If @error Then Return SetError(@error, @extended, 0)
  5604.     Return DllStructGetData($TRECT, "Bottom") - DllStructGetData($TRECT, "Top")
  5605. EndFunc   ;==>_WinAPI_GetWindowHeight
  5606. Func _WinAPI_GetWindowLong($HWND, $IINDEX)
  5607.     Local $SFUNCNAME = "GetWindowLongW"
  5608.     If @AutoItX64 Then $SFUNCNAME = "GetWindowLongPtrW"
  5609.     Local $ARESULT = DllCall("user32.dll", "long_ptr", $SFUNCNAME, "hwnd", $HWND, "int", $IINDEX)
  5610.     If @error Or Not $ARESULT[0] Then Return SetError(@error + 10, @extended, 0)
  5611.     Return $ARESULT[0]
  5612. EndFunc   ;==>_WinAPI_GetWindowLong
  5613. Func _WinAPI_GetWindowRect($HWND)
  5614.     Local $TRECT = DllStructCreate($TAGRECT)
  5615.     Local $ARET = DllCall("user32.dll", "bool", "GetWindowRect", "hwnd", $HWND, "struct*", $TRECT)
  5616.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  5617.     Return $TRECT
  5618. EndFunc   ;==>_WinAPI_GetWindowRect
  5619. Func _WinAPI_GetWindowText($HWND)
  5620.     Local $ARESULT = DllCall("user32.dll", "int", "GetWindowTextW", "hwnd", $HWND, "wstr", "", "int", 4096)
  5621.     If @error Or Not $ARESULT[0] Then Return SetError(@error + 10, @extended, "")
  5622.     Return SetExtended($ARESULT[0], $ARESULT[2])
  5623. EndFunc   ;==>_WinAPI_GetWindowText
  5624. Func _WinAPI_GetWindowThreadProcessId($HWND, ByRef $IPID)
  5625.     Local $ARESULT = DllCall("user32.dll", "dword", "GetWindowThreadProcessId", "hwnd", $HWND, "dword*", 0)
  5626.     If @error Then Return SetError(@error, @extended, 0)
  5627.     $IPID = $ARESULT[2]
  5628.     Return $ARESULT[0]
  5629. EndFunc   ;==>_WinAPI_GetWindowThreadProcessId
  5630. Func _WinAPI_GetWindowWidth($HWND)
  5631.     Local $TRECT = _WinAPI_GetWindowRect($HWND)
  5632.     If @error Then Return SetError(@error, @extended, 0)
  5633.     Return DllStructGetData($TRECT, "Right") - DllStructGetData($TRECT, "Left")
  5634. EndFunc   ;==>_WinAPI_GetWindowWidth
  5635. Func _WinAPI_InProcess($HWND, ByRef $HLASTWND)
  5636.     If $HWND = $HLASTWND Then Return True
  5637.     For $II = $__G_AINPROCESS_WINAPI[0][0] To 1 Step -1
  5638.         If $HWND = $__G_AINPROCESS_WINAPI[$II][0] Then
  5639.             If $__G_AINPROCESS_WINAPI[$II][1] Then
  5640.                 $HLASTWND = $HWND
  5641.                 Return True
  5642.             Else
  5643.                 Return False
  5644.             EndIf
  5645.         EndIf
  5646.     Next
  5647.     Local $IPID
  5648.     _WinAPI_GetWindowThreadProcessId($HWND, $IPID)
  5649.     Local $ICOUNT = $__G_AINPROCESS_WINAPI[0][0] + 1
  5650.     If $ICOUNT >= 64 Then $ICOUNT = 1
  5651.     $__G_AINPROCESS_WINAPI[0][0] = $ICOUNT
  5652.     $__G_AINPROCESS_WINAPI[$ICOUNT][0] = $HWND
  5653.     $__G_AINPROCESS_WINAPI[$ICOUNT][1] = ($IPID = @AutoItPID)
  5654.     Return $__G_AINPROCESS_WINAPI[$ICOUNT][1]
  5655. EndFunc   ;==>_WinAPI_InProcess
  5656. Func _WinAPI_InvalidateRect($HWND, $TRECT = 0, $BERASE = True)
  5657.     Local $ARESULT = DllCall("user32.dll", "bool", "InvalidateRect", "hwnd", $HWND, "struct*", $TRECT, "bool", $BERASE)
  5658.     If @error Then Return SetError(@error, @extended, False)
  5659.     Return $ARESULT[0]
  5660. EndFunc   ;==>_WinAPI_InvalidateRect
  5661. Func _WinAPI_IsClassName($HWND, $SCLASSNAME)
  5662.     Local $SSEPARATOR = Opt("GUIDataSeparatorChar")
  5663.     Local $ACLASSNAME = StringSplit($SCLASSNAME, $SSEPARATOR)
  5664.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  5665.     Local $SCLASSCHECK = _WinAPI_GetClassName($HWND)
  5666.     For $X = 1 To UBound($ACLASSNAME) - 1
  5667.         If StringUpper(StringMid($SCLASSCHECK, 1, StringLen($ACLASSNAME[$X]))) = StringUpper($ACLASSNAME[$X]) Then Return True
  5668.     Next
  5669.     Return False
  5670. EndFunc   ;==>_WinAPI_IsClassName
  5671. Func _WinAPI_IsWindow($HWND)
  5672.     Local $ARESULT = DllCall("user32.dll", "bool", "IsWindow", "hwnd", $HWND)
  5673.     If @error Then Return SetError(@error, @extended, 0)
  5674.     Return $ARESULT[0]
  5675. EndFunc   ;==>_WinAPI_IsWindow
  5676. Func _WinAPI_IsWindowVisible($HWND)
  5677.     Local $ARESULT = DllCall("user32.dll", "bool", "IsWindowVisible", "hwnd", $HWND)
  5678.     If @error Then Return SetError(@error, @extended, 0)
  5679.     Return $ARESULT[0]
  5680. EndFunc   ;==>_WinAPI_IsWindowVisible
  5681. Func _WinAPI_MoveWindow($HWND, $IX, $IY, $IWIDTH, $IHEIGHT, $BREPAINT = True)
  5682.     Local $ARESULT = DllCall("user32.dll", "bool", "MoveWindow", "hwnd", $HWND, "int", $IX, "int", $IY, "int", $IWIDTH, "int", $IHEIGHT, "bool", $BREPAINT)
  5683.     If @error Then Return SetError(@error, @extended, False)
  5684.     Return $ARESULT[0]
  5685. EndFunc   ;==>_WinAPI_MoveWindow
  5686. Func _WinAPI_SetFocus($HWND)
  5687.     Local $ARESULT = DllCall("user32.dll", "hwnd", "SetFocus", "hwnd", $HWND)
  5688.     If @error Then Return SetError(@error, @extended, 0)
  5689.     Return $ARESULT[0]
  5690. EndFunc   ;==>_WinAPI_SetFocus
  5691. Func _WinAPI_SetFont($HWND, $HFONT, $BREDRAW = True)
  5692.     _SendMessage($HWND, $__WINAPICONSTANT_WM_SETFONT, $HFONT, $BREDRAW, 0, "hwnd")
  5693. EndFunc   ;==>_WinAPI_SetFont
  5694. Func _WinAPI_SetParent($HWNDCHILD, $HWNDPARENT)
  5695.     Local $ARESULT = DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $HWNDCHILD, "hwnd", $HWNDPARENT)
  5696.     If @error Then Return SetError(@error, @extended, 0)
  5697.     Return $ARESULT[0]
  5698. EndFunc   ;==>_WinAPI_SetParent
  5699. Func _WinAPI_SetWindowPos($HWND, $HAFTER, $IX, $IY, $ICX, $ICY, $IFLAGS)
  5700.     Local $ARESULT = DllCall("user32.dll", "bool", "SetWindowPos", "hwnd", $HWND, "hwnd", $HAFTER, "int", $IX, "int", $IY, "int", $ICX, "int", $ICY, "uint", $IFLAGS)
  5701.     If @error Then Return SetError(@error, @extended, False)
  5702.     Return $ARESULT[0]
  5703. EndFunc   ;==>_WinAPI_SetWindowPos
  5704. Func _WinAPI_SetWindowText($HWND, $STEXT)
  5705.     Local $ARESULT = DllCall("user32.dll", "bool", "SetWindowTextW", "hwnd", $HWND, "wstr", $STEXT)
  5706.     If @error Then Return SetError(@error, @extended, False)
  5707.     Return $ARESULT[0]
  5708. EndFunc   ;==>_WinAPI_SetWindowText
  5709. Func _WinAPI_ShowWindow($HWND, $ICMDSHOW = 5)
  5710.     Local $ARESULT = DllCall("user32.dll", "bool", "ShowWindow", "hwnd", $HWND, "int", $ICMDSHOW)
  5711.     If @error Then Return SetError(@error, @extended, False)
  5712.     Return $ARESULT[0]
  5713. EndFunc   ;==>_WinAPI_ShowWindow
  5714. Func _WinAPI_UpdateWindow($HWND)
  5715.     Local $ARESULT = DllCall("user32.dll", "bool", "UpdateWindow", "hwnd", $HWND)
  5716.     If @error Then Return SetError(@error, @extended, False)
  5717.     Return $ARESULT[0]
  5718. EndFunc   ;==>_WinAPI_UpdateWindow
  5719. #EndRegion Public Functions
  5720. #Region Internal Functions
  5721. Func __WINAPI_ENUMWINDOWSADD($HWND, $SCLASS = "")
  5722.     If $SCLASS = "" Then $SCLASS = _WinAPI_GetClassName($HWND)
  5723.     $__G_AWINLIST_WINAPI[0][0] += 1
  5724.     Local $ICOUNT = $__G_AWINLIST_WINAPI[0][0]
  5725.     If $ICOUNT >= $__G_AWINLIST_WINAPI[0][1] Then
  5726.         ReDim $__G_AWINLIST_WINAPI[$ICOUNT + 64][2]
  5727.         $__G_AWINLIST_WINAPI[0][1] += 64
  5728.     EndIf
  5729.     $__G_AWINLIST_WINAPI[$ICOUNT][0] = $HWND
  5730.     $__G_AWINLIST_WINAPI[$ICOUNT][1] = $SCLASS
  5731. EndFunc   ;==>__WINAPI_ENUMWINDOWSADD
  5732. Func __WINAPI_ENUMWINDOWSCHILD($HWND, $BVISIBLE = True)
  5733.     $HWND = _WinAPI_GetWindow($HWND, $GW_CHILD)
  5734.     While $HWND <> 0
  5735.         If (Not $BVISIBLE) Or _WinAPI_IsWindowVisible($HWND) Then
  5736.             __WINAPI_ENUMWINDOWSADD($HWND)
  5737.             __WINAPI_ENUMWINDOWSCHILD($HWND, $BVISIBLE)
  5738.         EndIf
  5739.         $HWND = _WinAPI_GetWindow($HWND, $GW_HWNDNEXT)
  5740.     WEnd
  5741. EndFunc   ;==>__WINAPI_ENUMWINDOWSCHILD
  5742. Func __WINAPI_ENUMWINDOWSINIT()
  5743.     ReDim $__G_AWINLIST_WINAPI[64][2]
  5744.     $__G_AWINLIST_WINAPI[0][0] = 0
  5745.     $__G_AWINLIST_WINAPI[0][1] = 64
  5746. EndFunc   ;==>__WINAPI_ENUMWINDOWSINIT
  5747. #EndRegion Internal Functions
  5748. Global $__G_HHDRLASTWND
  5749. Global Const $__HEADERCONSTANT_CLASSNAME = "SysHeader32"
  5750. Global Const $__HEADERCONSTANT_DEFAULT_GUI_FONT = 17
  5751. Global Const $__HEADERCONSTANT_SWP_SHOWWINDOW = 64
  5752. Global Const $TAGHDHITTESTINFO = $TAGPOINT & ";uint Flags;int Item"
  5753. Global Const $TAGHDLAYOUT = "ptr Rect;ptr WindowPos"
  5754. Global Const $TAGHDTEXTFILTER = "ptr Text;int TextMax"
  5755. Func _GUICtrlHeader_AddItem($HWND, $STEXT, $IWIDTH = 50, $IALIGN = 0, $IIMAGE = -1, $BONRIGHT = False)
  5756.     Return _GUICtrlHeader_InsertItem($HWND, _GUICtrlHeader_GetItemCount($HWND), $STEXT, $IWIDTH, $IALIGN, $IIMAGE, $BONRIGHT)
  5757. EndFunc   ;==>_GUICtrlHeader_AddItem
  5758. Func _GUICtrlHeader_ClearFilter($HWND, $IINDEX)
  5759.     Return _SendMessage($HWND, $HDM_CLEARFILTER, $IINDEX) <> 0
  5760. EndFunc   ;==>_GUICtrlHeader_ClearFilter
  5761. Func _GUICtrlHeader_ClearFilterAll($HWND)
  5762.     Return _SendMessage($HWND, $HDM_CLEARFILTER, -1) <> 0
  5763. EndFunc   ;==>_GUICtrlHeader_ClearFilterAll
  5764. Func _GUICtrlHeader_Create($HWND, $ISTYLE = 70)
  5765.     $ISTYLE = BitOR($ISTYLE, $__UDFGUICONSTANT_WS_CHILD, $__UDFGUICONSTANT_WS_VISIBLE)
  5766.     Local $NCTRLID = __UDF_GETNEXTGLOBALID($HWND)
  5767.     If @error Then Return SetError(@error, @extended, 0)
  5768.     Local $HHEADER = _WinAPI_CreateWindowEx(0, $__HEADERCONSTANT_CLASSNAME, "", $ISTYLE, 0, 0, 0, 0, $HWND, $NCTRLID)
  5769.     Local $TRECT = _WinAPI_GetClientRect($HWND)
  5770.     Local $TWINDOWPOS = _GUICtrlHeader_Layout($HHEADER, $TRECT)
  5771.     Local $IFLAGS = BitOR(DllStructGetData($TWINDOWPOS, "Flags"), $__HEADERCONSTANT_SWP_SHOWWINDOW)
  5772.     _WinAPI_SetWindowPos($HHEADER, DllStructGetData($TWINDOWPOS, "InsertAfter"), DllStructGetData($TWINDOWPOS, "X"), DllStructGetData($TWINDOWPOS, "Y"), DllStructGetData($TWINDOWPOS, "CX"), DllStructGetData($TWINDOWPOS, "CY"), $IFLAGS)
  5773.     _WinAPI_SetFont($HHEADER, _WinAPI_GetStockObject($__HEADERCONSTANT_DEFAULT_GUI_FONT))
  5774.     Return $HHEADER
  5775. EndFunc   ;==>_GUICtrlHeader_Create
  5776. Func _GUICtrlHeader_CreateDragImage($HWND, $IINDEX)
  5777.     Return Ptr(_SendMessage($HWND, $HDM_CREATEDRAGIMAGE, $IINDEX))
  5778. EndFunc   ;==>_GUICtrlHeader_CreateDragImage
  5779. Func _GUICtrlHeader_DeleteItem($HWND, $IINDEX)
  5780.     Return _SendMessage($HWND, $HDM_DELETEITEM, $IINDEX) <> 0
  5781. EndFunc   ;==>_GUICtrlHeader_DeleteItem
  5782. Func _GUICtrlHeader_Destroy(ByRef $HWND)
  5783.     If Not _WinAPI_IsClassName($HWND, $__HEADERCONSTANT_CLASSNAME) Then Return SetError(2, 2, False)
  5784.     Local $IDESTROYED = 0
  5785.     If IsHWnd($HWND) Then
  5786.         If _WinAPI_InProcess($HWND, $__G_HHDRLASTWND) Then
  5787.             Local $NCTRLID = _WinAPI_GetDlgCtrlID($HWND)
  5788.             Local $HPARENT = _WinAPI_GetParent($HWND)
  5789.             $IDESTROYED = _WinAPI_DestroyWindow($HWND)
  5790.             Local $IRET = __UDF_FREEGLOBALID($HPARENT, $NCTRLID)
  5791.             If Not $IRET Then
  5792.             EndIf
  5793.         Else
  5794.             Return SetError(1, 1, False)
  5795.         EndIf
  5796.     Else
  5797.         $IDESTROYED = GUICtrlDelete($HWND)
  5798.     EndIf
  5799.     If $IDESTROYED Then $HWND = 0
  5800.     Return $IDESTROYED <> 0
  5801. EndFunc   ;==>_GUICtrlHeader_Destroy
  5802. Func _GUICtrlHeader_EditFilter($HWND, $IINDEX, $BDISCARD = True)
  5803.     Return _SendMessage($HWND, $HDM_EDITFILTER, $IINDEX, $BDISCARD) <> 0
  5804. EndFunc   ;==>_GUICtrlHeader_EditFilter
  5805. Func _GUICtrlHeader_GetBitmapMargin($HWND)
  5806.     Return _SendMessage($HWND, $HDM_GETBITMAPMARGIN)
  5807. EndFunc   ;==>_GUICtrlHeader_GetBitmapMargin
  5808. Func _GUICtrlHeader_GetImageList($HWND)
  5809.     Return Ptr(_SendMessage($HWND, $HDM_GETIMAGELIST))
  5810. EndFunc   ;==>_GUICtrlHeader_GetImageList
  5811. Func _GUICtrlHeader_GetItem($HWND, $IINDEX, ByRef $TITEM)
  5812.     Local $BUNICODE = _GUICtrlHeader_GetUnicodeFormat($HWND)
  5813.     Local $IRET
  5814.     If _WinAPI_InProcess($HWND, $__G_HHDRLASTWND) Then
  5815.         $IRET = _SendMessage($HWND, $HDM_GETITEMW, $IINDEX, $TITEM, 0, "wparam", "struct*")
  5816.     Else
  5817.         Local $IITEM = DllStructGetSize($TITEM)
  5818.         Local $TMEMMAP
  5819.         Local $PMEMORY = _MEMINIT($HWND, $IITEM, $TMEMMAP)
  5820.         _MEMWRITE($TMEMMAP, $TITEM)
  5821.         If $BUNICODE Then
  5822.             $IRET = _SendMessage($HWND, $HDM_GETITEMW, $IINDEX, $PMEMORY, 0, "wparam", "ptr")
  5823.         Else
  5824.             $IRET = _SendMessage($HWND, $HDM_GETITEMA, $IINDEX, $PMEMORY, 0, "wparam", "ptr")
  5825.         EndIf
  5826.         _MEMREAD($TMEMMAP, $PMEMORY, $TITEM, $IITEM)
  5827.         _MEMFREE($TMEMMAP)
  5828.     EndIf
  5829.     Return $IRET <> 0
  5830. EndFunc   ;==>_GUICtrlHeader_GetItem
  5831. Func _GUICtrlHeader_GetItemAlign($HWND, $IINDEX)
  5832.     Switch BitAND(_GUICtrlHeader_GetItemFormat($HWND, $IINDEX), $HDF_JUSTIFYMASK)
  5833.         Case $HDF_LEFT
  5834.             Return 0
  5835.         Case $HDF_RIGHT
  5836.             Return 1
  5837.         Case $HDF_CENTER
  5838.             Return 2
  5839.         Case Else
  5840.             Return -1
  5841.     EndSwitch
  5842. EndFunc   ;==>_GUICtrlHeader_GetItemAlign
  5843. Func _GUICtrlHeader_GetItemBitmap($HWND, $IINDEX)
  5844.     Local $TITEM = DllStructCreate($TAGHDITEM)
  5845.     DllStructSetData($TITEM, "Mask", $HDI_BITMAP)
  5846.     _GUICtrlHeader_GetItem($HWND, $IINDEX, $TITEM)
  5847.     Return DllStructGetData($TITEM, "hBmp")
  5848. EndFunc   ;==>_GUICtrlHeader_GetItemBitmap
  5849. Func _GUICtrlHeader_GetItemCount($HWND)
  5850.     Return _SendMessage($HWND, $HDM_GETITEMCOUNT)
  5851. EndFunc   ;==>_GUICtrlHeader_GetItemCount
  5852. Func _GUICtrlHeader_GetItemDisplay($HWND, $IINDEX)
  5853.     Local $IRET = 0
  5854.     Local $IFORMAT = _GUICtrlHeader_GetItemFormat($HWND, $IINDEX)
  5855.     If BitAND($IFORMAT, $HDF_BITMAP) <> 0 Then $IRET = BitOR($IRET, 1)
  5856.     If BitAND($IFORMAT, $HDF_BITMAP_ON_RIGHT) <> 0 Then $IRET = BitOR($IRET, 2)
  5857.     If BitAND($IFORMAT, $HDF_OWNERDRAW) <> 0 Then $IRET = BitOR($IRET, 4)
  5858.     If BitAND($IFORMAT, $HDF_STRING) <> 0 Then $IRET = BitOR($IRET, 8)
  5859.     Return $IRET
  5860. EndFunc   ;==>_GUICtrlHeader_GetItemDisplay
  5861. Func _GUICtrlHeader_GetItemFlags($HWND, $IINDEX)
  5862.     Local $IRET = 0
  5863.     Local $IFORMAT = _GUICtrlHeader_GetItemFormat($HWND, $IINDEX)
  5864.     If BitAND($IFORMAT, $HDF_IMAGE) <> 0 Then $IRET = BitOR($IRET, 1)
  5865.     If BitAND($IFORMAT, $HDF_RTLREADING) <> 0 Then $IRET = BitOR($IRET, 2)
  5866.     If BitAND($IFORMAT, $HDF_SORTDOWN) <> 0 Then $IRET = BitOR($IRET, 4)
  5867.     If BitAND($IFORMAT, $HDF_SORTUP) <> 0 Then $IRET = BitOR($IRET, 8)
  5868.     Return $IRET
  5869. EndFunc   ;==>_GUICtrlHeader_GetItemFlags
  5870. Func _GUICtrlHeader_GetItemFormat($HWND, $IINDEX)
  5871.     Local $TITEM = DllStructCreate($TAGHDITEM)
  5872.     DllStructSetData($TITEM, "Mask", $HDI_FORMAT)
  5873.     _GUICtrlHeader_GetItem($HWND, $IINDEX, $TITEM)
  5874.     Return DllStructGetData($TITEM, "Fmt")
  5875. EndFunc   ;==>_GUICtrlHeader_GetItemFormat
  5876. Func _GUICtrlHeader_GetItemImage($HWND, $IINDEX)
  5877.     Local $TITEM = DllStructCreate($TAGHDITEM)
  5878.     DllStructSetData($TITEM, "Mask", $HDI_IMAGE)
  5879.     _GUICtrlHeader_GetItem($HWND, $IINDEX, $TITEM)
  5880.     Return DllStructGetData($TITEM, "Image")
  5881. EndFunc   ;==>_GUICtrlHeader_GetItemImage
  5882. Func _GUICtrlHeader_GetItemOrder($HWND, $IINDEX)
  5883.     Local $TITEM = DllStructCreate($TAGHDITEM)
  5884.     DllStructSetData($TITEM, "Mask", $HDI_ORDER)
  5885.     _GUICtrlHeader_GetItem($HWND, $IINDEX, $TITEM)
  5886.     Return DllStructGetData($TITEM, "Order")
  5887. EndFunc   ;==>_GUICtrlHeader_GetItemOrder
  5888. Func _GUICtrlHeader_GetItemParam($HWND, $IINDEX)
  5889.     Local $TITEM = DllStructCreate($TAGHDITEM)
  5890.     DllStructSetData($TITEM, "Mask", $HDI_PARAM)
  5891.     _GUICtrlHeader_GetItem($HWND, $IINDEX, $TITEM)
  5892.     Return DllStructGetData($TITEM, "Param")
  5893. EndFunc   ;==>_GUICtrlHeader_GetItemParam
  5894. Func _GUICtrlHeader_GetItemRect($HWND, $IINDEX)
  5895.     Local $ARECT[4]
  5896.     Local $TRECT = _GUICtrlHeader_GetItemRectEx($HWND, $IINDEX)
  5897.     $ARECT[0] = DllStructGetData($TRECT, "Left")
  5898.     $ARECT[1] = DllStructGetData($TRECT, "Top")
  5899.     $ARECT[2] = DllStructGetData($TRECT, "Right")
  5900.     $ARECT[3] = DllStructGetData($TRECT, "Bottom")
  5901.     Return $ARECT
  5902. EndFunc   ;==>_GUICtrlHeader_GetItemRect
  5903. Func _GUICtrlHeader_GetItemRectEx($HWND, $IINDEX)
  5904.     Local $TRECT = DllStructCreate($TAGRECT)
  5905.     If _WinAPI_InProcess($HWND, $__G_HHDRLASTWND) Then
  5906.         _SendMessage($HWND, $HDM_GETITEMRECT, $IINDEX, $TRECT, 0, "wparam", "struct*")
  5907.     Else
  5908.         Local $IRECT = DllStructGetSize($TRECT)
  5909.         Local $TMEMMAP
  5910.         Local $PMEMORY = _MEMINIT($HWND, $IRECT, $TMEMMAP)
  5911.         _MEMWRITE($TMEMMAP, $TRECT)
  5912.         _SendMessage($HWND, $HDM_GETITEMRECT, $IINDEX, $PMEMORY, 0, "wparam", "ptr")
  5913.         _MEMREAD($TMEMMAP, $PMEMORY, $TRECT, $IRECT)
  5914.         _MEMFREE($TMEMMAP)
  5915.     EndIf
  5916.     Return $TRECT
  5917. EndFunc   ;==>_GUICtrlHeader_GetItemRectEx
  5918. Func _GUICtrlHeader_GetItemText($HWND, $IINDEX)
  5919.     Local $BUNICODE = _GUICtrlHeader_GetUnicodeFormat($HWND)
  5920.     Local $TBUFFER
  5921.     If $BUNICODE Then
  5922.         $TBUFFER = DllStructCreate("wchar Text[4096]")
  5923.     Else
  5924.         $TBUFFER = DllStructCreate("char Text[4096]")
  5925.     EndIf
  5926.     Local $TITEM = DllStructCreate($TAGHDITEM)
  5927.     DllStructSetData($TITEM, "Mask", $HDI_TEXT)
  5928.     DllStructSetData($TITEM, "TextMax", 4096)
  5929.     If _WinAPI_InProcess($HWND, $__G_HHDRLASTWND) Then
  5930.         DllStructSetData($TITEM, "Text", DllStructGetPtr($TBUFFER))
  5931.         _SendMessage($HWND, $HDM_GETITEMW, $IINDEX, $TITEM, 0, "wparam", "struct*")
  5932.     Else
  5933.         Local $IITEM = DllStructGetSize($TITEM)
  5934.         Local $TMEMMAP
  5935.         Local $PMEMORY = _MEMINIT($HWND, $IITEM + DllStructGetSize($TBUFFER), $TMEMMAP)
  5936.         Local $PTEXT = $PMEMORY + $IITEM
  5937.         DllStructSetData($TITEM, "Text", $PTEXT)
  5938.         _MEMWRITE($TMEMMAP, $TITEM, $PMEMORY, $IITEM)
  5939.         If $BUNICODE Then
  5940.             _SendMessage($HWND, $HDM_GETITEMW, $IINDEX, $PMEMORY, 0, "wparam", "ptr")
  5941.         Else
  5942.             _SendMessage($HWND, $HDM_GETITEMA, $IINDEX, $PMEMORY, 0, "wparam", "ptr")
  5943.         EndIf
  5944.         _MEMREAD($TMEMMAP, $PTEXT, $TBUFFER, DllStructGetSize($TBUFFER))
  5945.         _MEMFREE($TMEMMAP)
  5946.     EndIf
  5947.     Return DllStructGetData($TBUFFER, "Text")
  5948. EndFunc   ;==>_GUICtrlHeader_GetItemText
  5949. Func _GUICtrlHeader_GetItemWidth($HWND, $IINDEX)
  5950.     Local $TITEM = DllStructCreate($TAGHDITEM)
  5951.     DllStructSetData($TITEM, "Mask", $HDI_WIDTH)
  5952.     _GUICtrlHeader_GetItem($HWND, $IINDEX, $TITEM)
  5953.     Return DllStructGetData($TITEM, "XY")
  5954. EndFunc   ;==>_GUICtrlHeader_GetItemWidth
  5955. Func _GUICtrlHeader_GetOrderArray($HWND)
  5956.     Local $IITEMS = _GUICtrlHeader_GetItemCount($HWND)
  5957.     Local $TBUFFER = DllStructCreate("int[" & $IITEMS & "]")
  5958.     If _WinAPI_InProcess($HWND, $__G_HHDRLASTWND) Then
  5959.         _SendMessage($HWND, $HDM_GETORDERARRAY, $IITEMS, $TBUFFER, 0, "wparam", "struct*")
  5960.     Else
  5961.         Local $IBUFFER = DllStructGetSize($TBUFFER)
  5962.         Local $TMEMMAP
  5963.         Local $PMEMORY = _MEMINIT($HWND, $IBUFFER, $TMEMMAP)
  5964.         _SendMessage($HWND, $HDM_GETORDERARRAY, $IITEMS, $PMEMORY, 0, "wparam", "ptr")
  5965.         _MEMREAD($TMEMMAP, $PMEMORY, $TBUFFER, $IBUFFER)
  5966.         _MEMFREE($TMEMMAP)
  5967.     EndIf
  5968.     Local $ABUFFER[$IITEMS + 1]
  5969.     $ABUFFER[0] = $IITEMS
  5970.     For $II = 1 To $IITEMS
  5971.         $ABUFFER[$II] = DllStructGetData($TBUFFER, 1, $II)
  5972.     Next
  5973.     Return $ABUFFER
  5974. EndFunc   ;==>_GUICtrlHeader_GetOrderArray
  5975. Func _GUICtrlHeader_GetUnicodeFormat($HWND)
  5976.     Return _SendMessage($HWND, $HDM_GETUNICODEFORMAT) <> 0
  5977. EndFunc   ;==>_GUICtrlHeader_GetUnicodeFormat
  5978. Func _GUICtrlHeader_HitTest($HWND, $IX, $IY)
  5979.     Local $TTEST = DllStructCreate($TAGHDHITTESTINFO)
  5980.     DllStructSetData($TTEST, "X", $IX)
  5981.     DllStructSetData($TTEST, "Y", $IY)
  5982.     Local $ATEST[11]
  5983.     If _WinAPI_InProcess($HWND, $__G_HHDRLASTWND) Then
  5984.         $ATEST[0] = _SendMessage($HWND, $HDM_HITTEST, 0, $TTEST, 0, "wparam", "struct*")
  5985.     Else
  5986.         Local $ITEST = DllStructGetSize($TTEST)
  5987.         Local $TMEMMAP
  5988.         Local $PMEMORY = _MEMINIT($HWND, $ITEST, $TMEMMAP)
  5989.         _MEMWRITE($TMEMMAP, $TTEST)
  5990.         $ATEST[0] = _SendMessage($HWND, $HDM_HITTEST, 0, $PMEMORY, 0, "wparam", "ptr")
  5991.         _MEMREAD($TMEMMAP, $PMEMORY, $TTEST, $ITEST)
  5992.         _MEMFREE($TMEMMAP)
  5993.     EndIf
  5994.     Local $IFLAGS = DllStructGetData($TTEST, "Flags")
  5995.     $ATEST[1] = BitAND($IFLAGS, $HHT_NOWHERE) <> 0
  5996.     $ATEST[2] = BitAND($IFLAGS, $HHT_ONHEADER) <> 0
  5997.     $ATEST[3] = BitAND($IFLAGS, $HHT_ONDIVIDER) <> 0
  5998.     $ATEST[4] = BitAND($IFLAGS, $HHT_ONDIVOPEN) <> 0
  5999.     $ATEST[5] = BitAND($IFLAGS, $HHT_ONFILTER) <> 0
  6000.     $ATEST[6] = BitAND($IFLAGS, $HHT_ONFILTERBUTTON) <> 0
  6001.     $ATEST[7] = BitAND($IFLAGS, $HHT_ABOVE) <> 0
  6002.     $ATEST[8] = BitAND($IFLAGS, $HHT_BELOW) <> 0
  6003.     $ATEST[9] = BitAND($IFLAGS, $HHT_TORIGHT) <> 0
  6004.     $ATEST[10] = BitAND($IFLAGS, $HHT_TOLEFT) <> 0
  6005.     Return $ATEST
  6006. EndFunc   ;==>_GUICtrlHeader_HitTest
  6007. Func _GUICtrlHeader_InsertItem($HWND, $IINDEX, $STEXT, $IWIDTH = 50, $IALIGN = 0, $IIMAGE = -1, $BONRIGHT = False)
  6008.     Local $AALIGN[3] = [$HDF_LEFT, $HDF_RIGHT, $HDF_CENTER]
  6009.     Local $BUNICODE = _GUICtrlHeader_GetUnicodeFormat($HWND)
  6010.     Local $PBUFFER, $IBUFFER
  6011.     If $STEXT <> -1 Then
  6012.         $IBUFFER = StringLen($STEXT) + 1
  6013.         Local $TBUFFER
  6014.         If $BUNICODE Then
  6015.             $TBUFFER = DllStructCreate("wchar Text[" & $IBUFFER & "]")
  6016.             $IBUFFER *= 2
  6017.         Else
  6018.             $TBUFFER = DllStructCreate("char Text[" & $IBUFFER & "]")
  6019.         EndIf
  6020.         DllStructSetData($TBUFFER, "Text", $STEXT)
  6021.         $PBUFFER = DllStructGetPtr($TBUFFER)
  6022.     Else
  6023.         $IBUFFER = 0
  6024.         $PBUFFER = -1
  6025.     EndIf
  6026.     Local $TITEM = DllStructCreate($TAGHDITEM)
  6027.     Local $IFMT = $AALIGN[$IALIGN]
  6028.     Local $IMASK = BitOR($HDI_WIDTH, $HDI_FORMAT)
  6029.     If $STEXT <> "" Then
  6030.         $IMASK = BitOR($IMASK, $HDI_TEXT)
  6031.         $IFMT = BitOR($IFMT, $HDF_STRING)
  6032.     EndIf
  6033.     If $IIMAGE <> -1 Then
  6034.         $IMASK = BitOR($IMASK, $HDI_IMAGE)
  6035.         $IFMT = BitOR($IFMT, $HDF_IMAGE)
  6036.     EndIf
  6037.     If $BONRIGHT Then $IFMT = BitOR($IFMT, $HDF_BITMAP_ON_RIGHT)
  6038.     DllStructSetData($TITEM, "Mask", $IMASK)
  6039.     DllStructSetData($TITEM, "XY", $IWIDTH)
  6040.     DllStructSetData($TITEM, "Fmt", $IFMT)
  6041.     DllStructSetData($TITEM, "Image", $IIMAGE)
  6042.     Local $IRET
  6043.     If _WinAPI_InProcess($HWND, $__G_HHDRLASTWND) Then
  6044.         DllStructSetData($TITEM, "Text", $PBUFFER)
  6045.         $IRET = _SendMessage($HWND, $HDM_INSERTITEMW, $IINDEX, $TITEM, 0, "wparam", "struct*")
  6046.     Else
  6047.         Local $IITEM = DllStructGetSize($TITEM)
  6048.         Local $TMEMMAP
  6049.         Local $PMEMORY = _MEMINIT($HWND, $IITEM + $IBUFFER, $TMEMMAP)
  6050.         If $STEXT <> -1 Then
  6051.             Local $PTEXT = $PMEMORY + $IITEM
  6052.             DllStructSetData($TITEM, "Text", $PTEXT)
  6053.             _MEMWRITE($TMEMMAP, $TBUFFER, $PTEXT, $IBUFFER)
  6054.         Else
  6055.             DllStructSetData($TITEM, "Text", -1)
  6056.         EndIf
  6057.         _MEMWRITE($TMEMMAP, $TITEM, $PMEMORY, $IITEM)
  6058.         If $BUNICODE Then
  6059.             $IRET = _SendMessage($HWND, $HDM_INSERTITEMW, $IINDEX, $PMEMORY, 0, "wparam", "ptr")
  6060.         Else
  6061.             $IRET = _SendMessage($HWND, $HDM_INSERTITEMA, $IINDEX, $PMEMORY, 0, "wparam", "ptr")
  6062.         EndIf
  6063.         _MEMFREE($TMEMMAP)
  6064.     EndIf
  6065.     Return $IRET
  6066. EndFunc   ;==>_GUICtrlHeader_InsertItem
  6067. Func _GUICtrlHeader_Layout($HWND, ByRef $TRECT)
  6068.     Local $TLAYOUT = DllStructCreate($TAGHDLAYOUT)
  6069.     Local $TWINDOWPOS = DllStructCreate($TAGWINDOWPOS)
  6070.     If _WinAPI_InProcess($HWND, $__G_HHDRLASTWND) Then
  6071.         DllStructSetData($TLAYOUT, "Rect", DllStructGetPtr($TRECT))
  6072.         DllStructSetData($TLAYOUT, "WindowPos", DllStructGetPtr($TWINDOWPOS))
  6073.         _SendMessage($HWND, $HDM_LAYOUT, 0, $TLAYOUT, 0, "wparam", "struct*")
  6074.     Else
  6075.         Local $ILAYOUT = DllStructGetSize($TLAYOUT)
  6076.         Local $IRECT = DllStructGetSize($TRECT)
  6077.         Local $IWINDOWPOS = DllStructGetSize($TWINDOWPOS)
  6078.         Local $TMEMMAP
  6079.         Local $PMEMORY = _MEMINIT($HWND, $ILAYOUT + $IRECT + $IWINDOWPOS, $TMEMMAP)
  6080.         DllStructSetData($TLAYOUT, "Rect", $PMEMORY + $ILAYOUT)
  6081.         DllStructSetData($TLAYOUT, "WindowPos", $PMEMORY + $ILAYOUT + $IRECT)
  6082.         _MEMWRITE($TMEMMAP, $TLAYOUT, $PMEMORY, $ILAYOUT)
  6083.         _MEMWRITE($TMEMMAP, $TRECT, $PMEMORY + $ILAYOUT, $IRECT)
  6084.         _SendMessage($HWND, $HDM_LAYOUT, 0, $PMEMORY, 0, "wparam", "ptr")
  6085.         _MEMREAD($TMEMMAP, $PMEMORY + $ILAYOUT + $IRECT, $TWINDOWPOS, $IWINDOWPOS)
  6086.         _MEMFREE($TMEMMAP)
  6087.     EndIf
  6088.     Return $TWINDOWPOS
  6089. EndFunc   ;==>_GUICtrlHeader_Layout
  6090. Func _GUICtrlHeader_OrderToIndex($HWND, $IORDER)
  6091.     Return _SendMessage($HWND, $HDM_ORDERTOINDEX, $IORDER)
  6092. EndFunc   ;==>_GUICtrlHeader_OrderToIndex
  6093. Func _GUICtrlHeader_SetBitmapMargin($HWND, $IWIDTH)
  6094.     Return _SendMessage($HWND, $HDM_SETBITMAPMARGIN, $IWIDTH)
  6095. EndFunc   ;==>_GUICtrlHeader_SetBitmapMargin
  6096. Func _GUICtrlHeader_SetFilterChangeTimeout($HWND, $ITIMEOUT)
  6097.     Return _SendMessage($HWND, $HDM_SETFILTERCHANGETIMEOUT, 0, $ITIMEOUT)
  6098. EndFunc   ;==>_GUICtrlHeader_SetFilterChangeTimeout
  6099. Func _GUICtrlHeader_SetHotDivider($HWND, $IFLAG, $IINPUTVALUE)
  6100.     Return _SendMessage($HWND, $HDM_SETHOTDIVIDER, $IFLAG, $IINPUTVALUE)
  6101. EndFunc   ;==>_GUICtrlHeader_SetHotDivider
  6102. Func _GUICtrlHeader_SetImageList($HWND, $HIMAGE)
  6103.     Return _SendMessage($HWND, $HDM_SETIMAGELIST, 0, $HIMAGE, 0, "wparam", "handle", "handle")
  6104. EndFunc   ;==>_GUICtrlHeader_SetImageList
  6105. Func _GUICtrlHeader_SetItem($HWND, $IINDEX, ByRef $TITEM)
  6106.     Local $BUNICODE = _GUICtrlHeader_GetUnicodeFormat($HWND)
  6107.     Local $IRET
  6108.     If _WinAPI_InProcess($HWND, $__G_HHDRLASTWND) Then
  6109.         $IRET = _SendMessage($HWND, $HDM_SETITEMW, $IINDEX, $TITEM, 0, "wparam", "struct*")
  6110.     Else
  6111.         Local $IITEM = DllStructGetSize($TITEM)
  6112.         Local $TMEMMAP
  6113.         Local $PMEMORY = _MEMINIT($HWND, $IITEM, $TMEMMAP)
  6114.         _MEMWRITE($TMEMMAP, $TITEM)
  6115.         If $BUNICODE Then
  6116.             $IRET = _SendMessage($HWND, $HDM_SETITEMW, $IINDEX, $PMEMORY, 0, "wparam", "ptr")
  6117.         Else
  6118.             $IRET = _SendMessage($HWND, $HDM_SETITEMA, $IINDEX, $PMEMORY, 0, "wparam", "ptr")
  6119.         EndIf
  6120.         _MEMFREE($TMEMMAP)
  6121.     EndIf
  6122.     Return $IRET <> 0
  6123. EndFunc   ;==>_GUICtrlHeader_SetItem
  6124. Func _GUICtrlHeader_SetItemAlign($HWND, $IINDEX, $IALIGN)
  6125.     Local $AALIGN[3] = [$HDF_LEFT, $HDF_RIGHT, $HDF_CENTER]
  6126.     Local $IFORMAT = _GUICtrlHeader_GetItemFormat($HWND, $IINDEX)
  6127.     $IFORMAT = BitAND($IFORMAT, BitNOT($HDF_JUSTIFYMASK))
  6128.     $IFORMAT = BitOR($IFORMAT, $AALIGN[$IALIGN])
  6129.     Return _GUICtrlHeader_SetItemFormat($HWND, $IINDEX, $IFORMAT)
  6130. EndFunc   ;==>_GUICtrlHeader_SetItemAlign
  6131. Func _GUICtrlHeader_SetItemBitmap($HWND, $IINDEX, $HBITMAP)
  6132.     Local $TITEM = DllStructCreate($TAGHDITEM)
  6133.     DllStructSetData($TITEM, "Mask", BitOR($HDI_FORMAT, $HDI_BITMAP))
  6134.     DllStructSetData($TITEM, "Fmt", $HDF_BITMAP)
  6135.     DllStructSetData($TITEM, "hBMP", $HBITMAP)
  6136.     Return _GUICtrlHeader_SetItem($HWND, $IINDEX, $TITEM)
  6137. EndFunc   ;==>_GUICtrlHeader_SetItemBitmap
  6138. Func _GUICtrlHeader_SetItemDisplay($HWND, $IINDEX, $IDISPLAY)
  6139.     Local $IFORMAT = BitAND(_GUICtrlHeader_GetItemFormat($HWND, $IINDEX), Not $HDF_DISPLAYMASK)
  6140.     If BitAND($IDISPLAY, 1) <> 0 Then $IFORMAT = BitOR($IFORMAT, $HDF_BITMAP)
  6141.     If BitAND($IDISPLAY, 2) <> 0 Then $IFORMAT = BitOR($IFORMAT, $HDF_BITMAP_ON_RIGHT)
  6142.     If BitAND($IDISPLAY, 4) <> 0 Then $IFORMAT = BitOR($IFORMAT, $HDF_OWNERDRAW)
  6143.     If BitAND($IDISPLAY, 8) <> 0 Then $IFORMAT = BitOR($IFORMAT, $HDF_STRING)
  6144.     Return _GUICtrlHeader_SetItemFormat($HWND, $IINDEX, $IFORMAT)
  6145. EndFunc   ;==>_GUICtrlHeader_SetItemDisplay
  6146. Func _GUICtrlHeader_SetItemFlags($HWND, $IINDEX, $IFLAGS)
  6147.     Local $IFORMAT = _GUICtrlHeader_GetItemFormat($HWND, $IINDEX)
  6148.     $IFORMAT = BitAND($IFORMAT, BitNOT($HDF_FLAGMASK))
  6149.     If BitAND($IFLAGS, 1) <> 0 Then $IFORMAT = BitOR($IFORMAT, $HDF_IMAGE)
  6150.     If BitAND($IFLAGS, 2) <> 0 Then $IFORMAT = BitOR($IFORMAT, $HDF_RTLREADING)
  6151.     If BitAND($IFLAGS, 4) <> 0 Then $IFORMAT = BitOR($IFORMAT, $HDF_SORTDOWN)
  6152.     If BitAND($IFLAGS, 8) <> 0 Then $IFORMAT = BitOR($IFORMAT, $HDF_SORTUP)
  6153.     Return _GUICtrlHeader_SetItemFormat($HWND, $IINDEX, $IFORMAT)
  6154. EndFunc   ;==>_GUICtrlHeader_SetItemFlags
  6155. Func _GUICtrlHeader_SetItemFormat($HWND, $IINDEX, $IFORMAT)
  6156.     Local $TITEM = DllStructCreate($TAGHDITEM)
  6157.     DllStructSetData($TITEM, "Mask", $HDI_FORMAT)
  6158.     DllStructSetData($TITEM, "Fmt", $IFORMAT)
  6159.     Return _GUICtrlHeader_SetItem($HWND, $IINDEX, $TITEM)
  6160. EndFunc   ;==>_GUICtrlHeader_SetItemFormat
  6161. Func _GUICtrlHeader_SetItemImage($HWND, $IINDEX, $IIMAGE)
  6162.     Local $TITEM = DllStructCreate($TAGHDITEM)
  6163.     DllStructSetData($TITEM, "Mask", $HDI_IMAGE)
  6164.     DllStructSetData($TITEM, "Image", $IIMAGE)
  6165.     Return _GUICtrlHeader_SetItem($HWND, $IINDEX, $TITEM)
  6166. EndFunc   ;==>_GUICtrlHeader_SetItemImage
  6167. Func _GUICtrlHeader_SetItemOrder($HWND, $IINDEX, $IORDER)
  6168.     Local $TITEM = DllStructCreate($TAGHDITEM)
  6169.     DllStructSetData($TITEM, "Mask", $HDI_ORDER)
  6170.     DllStructSetData($TITEM, "Order", $IORDER)
  6171.     Return _GUICtrlHeader_SetItem($HWND, $IINDEX, $TITEM)
  6172. EndFunc   ;==>_GUICtrlHeader_SetItemOrder
  6173. Func _GUICtrlHeader_SetItemParam($HWND, $IINDEX, $IPARAM)
  6174.     Local $TITEM = DllStructCreate($TAGHDITEM)
  6175.     DllStructSetData($TITEM, "Mask", $HDI_PARAM)
  6176.     DllStructSetData($TITEM, "Param", $IPARAM)
  6177.     Return _GUICtrlHeader_SetItem($HWND, $IINDEX, $TITEM)
  6178. EndFunc   ;==>_GUICtrlHeader_SetItemParam
  6179. Func _GUICtrlHeader_SetItemText($HWND, $IINDEX, $STEXT)
  6180.     Local $BUNICODE = _GUICtrlHeader_GetUnicodeFormat($HWND)
  6181.     Local $IBUFFER, $PBUFFER
  6182.     If $STEXT <> -1 Then
  6183.         $IBUFFER = StringLen($STEXT) + 1
  6184.         Local $TBUFFER
  6185.         If $BUNICODE Then
  6186.             $TBUFFER = DllStructCreate("wchar Text[" & $IBUFFER & "]")
  6187.             $IBUFFER *= 2
  6188.         Else
  6189.             $TBUFFER = DllStructCreate("char Text[" & $IBUFFER & "]")
  6190.         EndIf
  6191.         DllStructSetData($TBUFFER, "Text", $STEXT)
  6192.         $PBUFFER = DllStructGetPtr($TBUFFER)
  6193.     Else
  6194.         $IBUFFER = 0
  6195.         $PBUFFER = -1
  6196.     EndIf
  6197.     Local $TITEM = DllStructCreate($TAGHDITEM)
  6198.     DllStructSetData($TITEM, "Mask", $HDI_TEXT)
  6199.     DllStructSetData($TITEM, "TextMax", $IBUFFER)
  6200.     Local $IRET
  6201.     If _WinAPI_InProcess($HWND, $__G_HHDRLASTWND) Then
  6202.         DllStructSetData($TITEM, "Text", $PBUFFER)
  6203.         $IRET = _SendMessage($HWND, $HDM_SETITEMW, $IINDEX, $TITEM, 0, "wparam", "struct*")
  6204.     Else
  6205.         Local $IITEM = DllStructGetSize($TITEM)
  6206.         Local $TMEMMAP
  6207.         Local $PMEMORY = _MEMINIT($HWND, $IITEM + $IBUFFER, $TMEMMAP)
  6208.         If $STEXT <> -1 Then
  6209.             Local $PTEXT = $PMEMORY + $IITEM
  6210.             DllStructSetData($TITEM, "Text", $PTEXT)
  6211.             _MEMWRITE($TMEMMAP, $TBUFFER, $PTEXT, $IBUFFER)
  6212.         Else
  6213.             DllStructSetData($TITEM, "Text", -1)
  6214.         EndIf
  6215.         _MEMWRITE($TMEMMAP, $TITEM, $PMEMORY, $IITEM)
  6216.         If $BUNICODE Then
  6217.             $IRET = _SendMessage($HWND, $HDM_SETITEMW, $IINDEX, $PMEMORY, 0, "wparam", "ptr")
  6218.         Else
  6219.             $IRET = _SendMessage($HWND, $HDM_SETITEMA, $IINDEX, $PMEMORY, 0, "wparam", "ptr")
  6220.         EndIf
  6221.         _MEMFREE($TMEMMAP)
  6222.     EndIf
  6223.     Return $IRET <> 0
  6224. EndFunc   ;==>_GUICtrlHeader_SetItemText
  6225. Func _GUICtrlHeader_SetItemWidth($HWND, $IINDEX, $IWIDTH)
  6226.     Local $TITEM = DllStructCreate($TAGHDITEM)
  6227.     DllStructSetData($TITEM, "Mask", $HDI_WIDTH)
  6228.     DllStructSetData($TITEM, "XY", $IWIDTH)
  6229.     Return _GUICtrlHeader_SetItem($HWND, $IINDEX, $TITEM)
  6230. EndFunc   ;==>_GUICtrlHeader_SetItemWidth
  6231. Func _GUICtrlHeader_SetOrderArray($HWND, ByRef $AORDER)
  6232.     Local $TBUFFER = DllStructCreate("int[" & $AORDER[0] & "]")
  6233.     For $II = 1 To $AORDER[0]
  6234.         DllStructSetData($TBUFFER, 1, $AORDER[$II], $II)
  6235.     Next
  6236.     Local $IRET
  6237.     If _WinAPI_InProcess($HWND, $__G_HHDRLASTWND) Then
  6238.         $IRET = _SendMessage($HWND, $HDM_SETORDERARRAY, $AORDER[0], $TBUFFER, 0, "wparam", "struct*")
  6239.     Else
  6240.         Local $IBUFFER = DllStructGetSize($TBUFFER)
  6241.         Local $TMEMMAP
  6242.         Local $PMEMORY = _MEMINIT($HWND, $IBUFFER, $TMEMMAP)
  6243.         _MEMWRITE($TMEMMAP, $TBUFFER)
  6244.         $IRET = _SendMessage($HWND, $HDM_SETORDERARRAY, $AORDER[0], $PMEMORY, 0, "wparam", "ptr")
  6245.         _MEMFREE($TMEMMAP)
  6246.     EndIf
  6247.     Return $IRET <> 0
  6248. EndFunc   ;==>_GUICtrlHeader_SetOrderArray
  6249. Func _GUICtrlHeader_SetUnicodeFormat($HWND, $BUNICODE)
  6250.     Return _SendMessage($HWND, $HDM_SETUNICODEFORMAT, $BUNICODE)
  6251. EndFunc   ;==>_GUICtrlHeader_SetUnicodeFormat
  6252. Global Const $LVGS_NORMAL = 0
  6253. Global Const $LVGS_COLLAPSED = 1
  6254. Global Const $LVGS_HIDDEN = 2
  6255. Global Const $LVGS_NOHEADER = 4
  6256. Global Const $LVGS_COLLAPSIBLE = 8
  6257. Global Const $LVGS_FOCUSED = 16
  6258. Global Const $LVGS_SELECTED = 32
  6259. Global Const $LVGS_SUBSETED = 64
  6260. Global Const $LVGS_SUBSETLINKFOCUSED = 128
  6261. Global Const $LVGGR_GROUP = 0
  6262. Global Const $LVGGR_HEADER = 1
  6263. Global Const $LVGGR_LABEL = 2
  6264. Global Const $LVGGR_SUBSETLINK = 3
  6265. Global Const $LV_ERR = -1
  6266. Global Const $LVBKIF_SOURCE_NONE = 0
  6267. Global Const $LVBKIF_SOURCE_HBITMAP = 1
  6268. Global Const $LVBKIF_SOURCE_URL = 2
  6269. Global Const $LVBKIF_SOURCE_MASK = 3
  6270. Global Const $LVBKIF_STYLE_NORMAL = 0
  6271. Global Const $LVBKIF_STYLE_TILE = 16
  6272. Global Const $LVBKIF_STYLE_MASK = 16
  6273. Global Const $LVBKIF_FLAG_TILEOFFSET = 256
  6274. Global Const $LVBKIF_TYPE_WATERMARK = 268435456
  6275. Global Const $LV_VIEW_DETAILS = 1
  6276. Global Const $LV_VIEW_ICON = 0
  6277. Global Const $LV_VIEW_LIST = 3
  6278. Global Const $LV_VIEW_SMALLICON = 2
  6279. Global Const $LV_VIEW_TILE = 4
  6280. Global Const $LVA_ALIGNLEFT = 1
  6281. Global Const $LVA_ALIGNTOP = 2
  6282. Global Const $LVA_DEFAULT = 0
  6283. Global Const $LVA_SNAPTOGRID = 5
  6284. Global Const $LVCDI_ITEM = 0
  6285. Global Const $LVCDI_GROUP = 1
  6286. Global Const $LVCF_ALLDATA = 63
  6287. Global Const $LVCF_FMT = 1
  6288. Global Const $LVCF_IMAGE = 16
  6289. Global Const $LVCFMT_JUSTIFYMASK = 3
  6290. Global Const $LVCF_TEXT = 4
  6291. Global Const $LVCF_WIDTH = 2
  6292. Global Const $LVCFMT_BITMAP_ON_RIGHT = 4096
  6293. Global Const $LVCFMT_CENTER = 2
  6294. Global Const $LVCFMT_COL_HAS_IMAGES = 32768
  6295. Global Const $LVCFMT_IMAGE = 2048
  6296. Global Const $LVCFMT_LEFT = 0
  6297. Global Const $LVCFMT_RIGHT = 1
  6298. Global Const $LVCFMT_LINE_BREAK = 1048576
  6299. Global Const $LVCFMT_FILL = 2097152
  6300. Global Const $LVCFMT_WRAP = 4194304
  6301. Global Const $LVCFMT_NO_TITLE = 8388608
  6302. Global Const $LVCFMT_TILE_PLACEMENTMASK = BitOR($LVCFMT_LINE_BREAK, $LVCFMT_FILL)
  6303. Global Const $LVFI_NEARESTXY = 64
  6304. Global Const $LVFI_PARAM = 1
  6305. Global Const $LVFI_PARTIAL = 8
  6306. Global Const $LVFI_STRING = 2
  6307. Global Const $LVFI_SUBSTRING = 4
  6308. Global Const $LVFI_WRAP = 32
  6309. Global Const $LVGA_FOOTER_LEFT = 8
  6310. Global Const $LVGA_FOOTER_CENTER = 16
  6311. Global Const $LVGA_FOOTER_RIGHT = 32
  6312. Global Const $LVGA_HEADER_LEFT = 1
  6313. Global Const $LVGA_HEADER_CENTER = 2
  6314. Global Const $LVGA_HEADER_RIGHT = 4
  6315. Global Const $LVGF_ALIGN = 8
  6316. Global Const $LVGF_DESCRIPTIONTOP = 1024
  6317. Global Const $LVGF_DESCRIPTIONBOTTOM = 2048
  6318. Global Const $LVGF_EXTENDEDIMAGE = 8192
  6319. Global Const $LVGF_FOOTER = 2
  6320. Global Const $LVGF_GROUPID = 16
  6321. Global Const $LVGF_HEADER = 1
  6322. Global Const $LVGF_ITEMS = 16384
  6323. Global Const $LVGF_NONE = 0
  6324. Global Const $LVGF_STATE = 4
  6325. Global Const $LVGF_SUBSET = 32768
  6326. Global Const $LVGF_SUBSETITEMS = 65536
  6327. Global Const $LVGF_SUBTITLE = 256
  6328. Global Const $LVGF_TASK = 512
  6329. Global Const $LVGF_TITLEIMAGE = 4096
  6330. Global Const $LVHT_ABOVE = 8
  6331. Global Const $LVHT_BELOW = 16
  6332. Global Const $LVHT_NOWHERE = 1
  6333. Global Const $LVHT_ONITEMICON = 2
  6334. Global Const $LVHT_ONITEMLABEL = 4
  6335. Global Const $LVHT_ONITEMSTATEICON = 8
  6336. Global Const $LVHT_TOLEFT = 64
  6337. Global Const $LVHT_TORIGHT = 32
  6338. Global Const $LVHT_ONITEM = BitOR($LVHT_ONITEMICON, $LVHT_ONITEMLABEL, $LVHT_ONITEMSTATEICON)
  6339. Global Const $LVHT_EX_GROUP_HEADER = 268435456
  6340. Global Const $LVHT_EX_GROUP_FOOTER = 536870912
  6341. Global Const $LVHT_EX_GROUP_COLLAPSE = 1073741824
  6342. Global Const $LVHT_EX_GROUP_BACKGROUND = -2147483648
  6343. Global Const $LVHT_EX_GROUP_STATEICON = 16777216
  6344. Global Const $LVHT_EX_GROUP_SUBSETLINK = 33554432
  6345. Global Const $LVHT_EX_GROUP = BitOR($LVHT_EX_GROUP_BACKGROUND, $LVHT_EX_GROUP_COLLAPSE, $LVHT_EX_GROUP_FOOTER, $LVHT_EX_GROUP_HEADER, $LVHT_EX_GROUP_STATEICON, $LVHT_EX_GROUP_SUBSETLINK)
  6346. Global Const $LVHT_EX_ONCONTENTS = 67108864
  6347. Global Const $LVHT_EX_FOOTER = 134217728
  6348. Global Const $LVIF_COLFMT = 65536
  6349. Global Const $LVIF_COLUMNS = 512
  6350. Global Const $LVIF_GROUPID = 256
  6351. Global Const $LVIF_IMAGE = 2
  6352. Global Const $LVIF_INDENT = 16
  6353. Global Const $LVIF_NORECOMPUTE = 2048
  6354. Global Const $LVIF_PARAM = 4
  6355. Global Const $LVIF_STATE = 8
  6356. Global Const $LVIF_TEXT = 1
  6357. Global Const $LVIM_AFTER = 1
  6358. Global Const $LVIR_BOUNDS = 0
  6359. Global Const $LVIR_ICON = 1
  6360. Global Const $LVIR_LABEL = 2
  6361. Global Const $LVIR_SELECTBOUNDS = 3
  6362. Global Const $LVIS_CUT = 4
  6363. Global Const $LVIS_DROPHILITED = 8
  6364. Global Const $LVIS_FOCUSED = 1
  6365. Global Const $LVIS_OVERLAYMASK = 3840
  6366. Global Const $LVIS_SELECTED = 2
  6367. Global Const $LVIS_STATEIMAGEMASK = 61440
  6368. Global Const $LVS_ALIGNLEFT = 2048
  6369. Global Const $LVS_ALIGNMASK = 3072
  6370. Global Const $LVS_ALIGNTOP = 0
  6371. Global Const $LVS_AUTOARRANGE = 256
  6372. Global Const $LVS_DEFAULT = 13
  6373. Global Const $LVS_EDITLABELS = 512
  6374. Global Const $LVS_ICON = 0
  6375. Global Const $LVS_LIST = 3
  6376. Global Const $LVS_NOCOLUMNHEADER = 16384
  6377. Global Const $LVS_NOLABELWRAP = 128
  6378. Global Const $LVS_NOSCROLL = 8192
  6379. Global Const $LVS_NOSORTHEADER = 32768
  6380. Global Const $LVS_OWNERDATA = 4096
  6381. Global Const $LVS_OWNERDRAWFIXED = 1024
  6382. Global Const $LVS_REPORT = 1
  6383. Global Const $LVS_SHAREIMAGELISTS = 64
  6384. Global Const $LVS_SHOWSELALWAYS = 8
  6385. Global Const $LVS_SINGLESEL = 4
  6386. Global Const $LVS_SMALLICON = 2
  6387. Global Const $LVS_SORTASCENDING = 16
  6388. Global Const $LVS_SORTDESCENDING = 32
  6389. Global Const $LVS_TYPEMASK = 3
  6390. Global Const $LVS_TYPESTYLEMASK = 64512
  6391. Global Const $LVS_EX_AUTOAUTOARRANGE = 16777216
  6392. Global Const $LVS_EX_AUTOCHECKSELECT = 134217728
  6393. Global Const $LVS_EX_AUTOSIZECOLUMNS = 268435456
  6394. Global Const $LVS_EX_BORDERSELECT = 32768
  6395. Global Const $LVS_EX_CHECKBOXES = 4
  6396. Global Const $LVS_EX_COLUMNOVERFLOW = -2147483648
  6397. Global Const $LVS_EX_COLUMNSNAPPOINTS = 1073741824
  6398. Global Const $LVS_EX_DOUBLEBUFFER = 65536
  6399. Global Const $LVS_EX_FLATSB = 256
  6400. Global Const $LVS_EX_FULLROWSELECT = 32
  6401. Global Const $LVS_EX_GRIDLINES = 1
  6402. Global Const $LVS_EX_HEADERDRAGDROP = 16
  6403. Global Const $LVS_EX_HEADERINALLVIEWS = 33554432
  6404. Global Const $LVS_EX_HIDELABELS = 131072
  6405. Global Const $LVS_EX_INFOTIP = 1024
  6406. Global Const $LVS_EX_JUSTIFYCOLUMNS = 2097152
  6407. Global Const $LVS_EX_LABELTIP = 16384
  6408. Global Const $LVS_EX_MULTIWORKAREAS = 8192
  6409. Global Const $LVS_EX_ONECLICKACTIVATE = 64
  6410. Global Const $LVS_EX_REGIONAL = 512
  6411. Global Const $LVS_EX_SIMPLESELECT = 1048576
  6412. Global Const $LVS_EX_SNAPTOGRID = 524288
  6413. Global Const $LVS_EX_SUBITEMIMAGES = 2
  6414. Global Const $LVS_EX_TRACKSELECT = 8
  6415. Global Const $LVS_EX_TRANSPARENTBKGND = 4194304
  6416. Global Const $LVS_EX_TRANSPARENTSHADOWTEXT = 8388608
  6417. Global Const $LVS_EX_TWOCLICKACTIVATE = 128
  6418. Global Const $LVS_EX_UNDERLINECOLD = 4096
  6419. Global Const $LVS_EX_UNDERLINEHOT = 2048
  6420. Global Const $GUI_SS_DEFAULT_LISTVIEW = BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL)
  6421. Global Const $LVM_FIRST = 4096
  6422. Global Const $LVM_APPROXIMATEVIEWRECT = ($LVM_FIRST + 64)
  6423. Global Const $LVM_ARRANGE = ($LVM_FIRST + 22)
  6424. Global Const $LVM_CANCELEDITLABEL = ($LVM_FIRST + 179)
  6425. Global Const $LVM_CREATEDRAGIMAGE = ($LVM_FIRST + 33)
  6426. Global Const $LVM_DELETEALLITEMS = ($LVM_FIRST + 9)
  6427. Global Const $LVM_DELETECOLUMN = ($LVM_FIRST + 28)
  6428. Global Const $LVM_DELETEITEM = ($LVM_FIRST + 8)
  6429. Global Const $LVM_EDITLABELA = ($LVM_FIRST + 23)
  6430. Global Const $LVM_EDITLABELW = ($LVM_FIRST + 118)
  6431. Global Const $LVM_EDITLABEL = $LVM_EDITLABELA
  6432. Global Const $LVM_ENABLEGROUPVIEW = ($LVM_FIRST + 157)
  6433. Global Const $LVM_ENSUREVISIBLE = ($LVM_FIRST + 19)
  6434. Global Const $LVM_FINDITEM = ($LVM_FIRST + 13)
  6435. Global Const $LVM_GETBKCOLOR = ($LVM_FIRST + 0)
  6436. Global Const $LVM_GETBKIMAGEA = ($LVM_FIRST + 69)
  6437. Global Const $LVM_GETBKIMAGEW = ($LVM_FIRST + 139)
  6438. Global Const $LVM_GETCALLBACKMASK = ($LVM_FIRST + 10)
  6439. Global Const $LVM_GETCOLUMNA = ($LVM_FIRST + 25)
  6440. Global Const $LVM_GETCOLUMNW = ($LVM_FIRST + 95)
  6441. Global Const $LVM_GETCOLUMNORDERARRAY = ($LVM_FIRST + 59)
  6442. Global Const $LVM_GETCOLUMNWIDTH = ($LVM_FIRST + 29)
  6443. Global Const $LVM_GETCOUNTPERPAGE = ($LVM_FIRST + 40)
  6444. Global Const $LVM_GETEDITCONTROL = ($LVM_FIRST + 24)
  6445. Global Const $LVM_GETEMPTYTEXT = ($LVM_FIRST + 204)
  6446. Global Const $LVM_GETEXTENDEDLISTVIEWSTYLE = ($LVM_FIRST + 55)
  6447. Global Const $LVM_GETFOCUSEDGROUP = ($LVM_FIRST + 93)
  6448. Global Const $LVM_GETFOOTERINFO = ($LVM_FIRST + 206)
  6449. Global Const $LVM_GETFOOTERITEM = ($LVM_FIRST + 208)
  6450. Global Const $LVM_GETFOOTERITEMRECT = ($LVM_FIRST + 207)
  6451. Global Const $LVM_GETFOOTERRECT = ($LVM_FIRST + 205)
  6452. Global Const $LVM_GETGROUPCOUNT = ($LVM_FIRST + 152)
  6453. Global Const $LVM_GETGROUPINFO = ($LVM_FIRST + 149)
  6454. Global Const $LVM_GETGROUPINFOBYINDEX = ($LVM_FIRST + 153)
  6455. Global Const $LVM_GETGROUPMETRICS = ($LVM_FIRST + 156)
  6456. Global Const $LVM_GETGROUPRECT = ($LVM_FIRST + 98)
  6457. Global Const $LVM_GETGROUPSTATE = ($LVM_FIRST + 92)
  6458. Global Const $LVM_GETHEADER = ($LVM_FIRST + 31)
  6459. Global Const $LVM_GETHOTCURSOR = ($LVM_FIRST + 63)
  6460. Global Const $LVM_GETHOTITEM = ($LVM_FIRST + 61)
  6461. Global Const $LVM_GETHOVERTIME = ($LVM_FIRST + 72)
  6462. Global Const $LVM_GETIMAGELIST = ($LVM_FIRST + 2)
  6463. Global Const $LVM_GETINSERTMARK = ($LVM_FIRST + 167)
  6464. Global Const $LVM_GETINSERTMARKCOLOR = ($LVM_FIRST + 171)
  6465. Global Const $LVM_GETINSERTMARKRECT = ($LVM_FIRST + 169)
  6466. Global Const $LVM_GETISEARCHSTRINGA = ($LVM_FIRST + 52)
  6467. Global Const $LVM_GETISEARCHSTRINGW = ($LVM_FIRST + 117)
  6468. Global Const $LVM_GETITEMA = ($LVM_FIRST + 5)
  6469. Global Const $LVM_GETITEMW = ($LVM_FIRST + 75)
  6470. Global Const $LVM_GETITEMCOUNT = ($LVM_FIRST + 4)
  6471. Global Const $LVM_GETITEMINDEXRECT = ($LVM_FIRST + 209)
  6472. Global Const $LVM_GETITEMPOSITION = ($LVM_FIRST + 16)
  6473. Global Const $LVM_GETITEMRECT = ($LVM_FIRST + 14)
  6474. Global Const $LVM_GETITEMSPACING = ($LVM_FIRST + 51)
  6475. Global Const $LVM_GETITEMSTATE = ($LVM_FIRST + 44)
  6476. Global Const $LVM_GETITEMTEXTA = ($LVM_FIRST + 45)
  6477. Global Const $LVM_GETITEMTEXTW = ($LVM_FIRST + 115)
  6478. Global Const $LVM_GETNEXTITEM = ($LVM_FIRST + 12)
  6479. Global Const $LVM_GETNEXTITEMINDEX = ($LVM_FIRST + 211)
  6480. Global Const $LVM_GETNUMBEROFWORKAREAS = ($LVM_FIRST + 73)
  6481. Global Const $LVM_GETORIGIN = ($LVM_FIRST + 41)
  6482. Global Const $LVM_GETOUTLINECOLOR = ($LVM_FIRST + 176)
  6483. Global Const $LVM_GETSELECTEDCOLUMN = ($LVM_FIRST + 174)
  6484. Global Const $LVM_GETSELECTEDCOUNT = ($LVM_FIRST + 50)
  6485. Global Const $LVM_GETSELECTIONMARK = ($LVM_FIRST + 66)
  6486. Global Const $LVM_GETSTRINGWIDTHA = ($LVM_FIRST + 17)
  6487. Global Const $LVM_GETSTRINGWIDTHW = ($LVM_FIRST + 87)
  6488. Global Const $LVM_GETSUBITEMRECT = ($LVM_FIRST + 56)
  6489. Global Const $LVM_GETTEXTBKCOLOR = ($LVM_FIRST + 37)
  6490. Global Const $LVM_GETTEXTCOLOR = ($LVM_FIRST + 35)
  6491. Global Const $LVM_GETTILEINFO = ($LVM_FIRST + 165)
  6492. Global Const $LVM_GETTILEVIEWINFO = ($LVM_FIRST + 163)
  6493. Global Const $LVM_GETTOOLTIPS = ($LVM_FIRST + 78)
  6494. Global Const $LVM_GETTOPINDEX = ($LVM_FIRST + 39)
  6495. Global Const $LVM_GETUNICODEFORMAT = 8192 + 6
  6496. Global Const $LVM_GETVIEW = ($LVM_FIRST + 143)
  6497. Global Const $LVM_GETVIEWRECT = ($LVM_FIRST + 34)
  6498. Global Const $LVM_GETWORKAREAS = ($LVM_FIRST + 70)
  6499. Global Const $LVM_HASGROUP = ($LVM_FIRST + 161)
  6500. Global Const $LVM_HITTEST = ($LVM_FIRST + 18)
  6501. Global Const $LVM_INSERTCOLUMNA = ($LVM_FIRST + 27)
  6502. Global Const $LVM_INSERTCOLUMNW = ($LVM_FIRST + 97)
  6503. Global Const $LVM_INSERTGROUP = ($LVM_FIRST + 145)
  6504. Global Const $LVM_INSERTGROUPSORTED = ($LVM_FIRST + 159)
  6505. Global Const $LVM_INSERTITEMA = ($LVM_FIRST + 7)
  6506. Global Const $LVM_INSERTITEMW = ($LVM_FIRST + 77)
  6507. Global Const $LVM_INSERTMARKHITTEST = ($LVM_FIRST + 168)
  6508. Global Const $LVM_ISGROUPVIEWENABLED = ($LVM_FIRST + 175)
  6509. Global Const $LVM_ISITEMVISIBLE = ($LVM_FIRST + 182)
  6510. Global Const $LVM_MAPIDTOINDEX = ($LVM_FIRST + 181)
  6511. Global Const $LVM_MAPINDEXTOID = ($LVM_FIRST + 180)
  6512. Global Const $LVM_MOVEGROUP = ($LVM_FIRST + 151)
  6513. Global Const $LVM_REDRAWITEMS = ($LVM_FIRST + 21)
  6514. Global Const $LVM_REMOVEALLGROUPS = ($LVM_FIRST + 160)
  6515. Global Const $LVM_REMOVEGROUP = ($LVM_FIRST + 150)
  6516. Global Const $LVM_SCROLL = ($LVM_FIRST + 20)
  6517. Global Const $LVM_SETBKCOLOR = ($LVM_FIRST + 1)
  6518. Global Const $LVM_SETBKIMAGEA = ($LVM_FIRST + 68)
  6519. Global Const $LVM_SETBKIMAGEW = ($LVM_FIRST + 138)
  6520. Global Const $LVM_SETCALLBACKMASK = ($LVM_FIRST + 11)
  6521. Global Const $LVM_SETCOLUMNA = ($LVM_FIRST + 26)
  6522. Global Const $LVM_SETCOLUMNW = ($LVM_FIRST + 96)
  6523. Global Const $LVM_SETCOLUMNORDERARRAY = ($LVM_FIRST + 58)
  6524. Global Const $LVM_SETCOLUMNWIDTH = ($LVM_FIRST + 30)
  6525. Global Const $LVM_SETEXTENDEDLISTVIEWSTYLE = ($LVM_FIRST + 54)
  6526. Global Const $LVM_SETGROUPINFO = ($LVM_FIRST + 147)
  6527. Global Const $LVM_SETGROUPMETRICS = ($LVM_FIRST + 155)
  6528. Global Const $LVM_SETHOTCURSOR = ($LVM_FIRST + 62)
  6529. Global Const $LVM_SETHOTITEM = ($LVM_FIRST + 60)
  6530. Global Const $LVM_SETHOVERTIME = ($LVM_FIRST + 71)
  6531. Global Const $LVM_SETICONSPACING = ($LVM_FIRST + 53)
  6532. Global Const $LVM_SETIMAGELIST = ($LVM_FIRST + 3)
  6533. Global Const $LVM_SETINFOTIP = ($LVM_FIRST + 173)
  6534. Global Const $LVM_SETINSERTMARK = ($LVM_FIRST + 166)
  6535. Global Const $LVM_SETINSERTMARKCOLOR = ($LVM_FIRST + 170)
  6536. Global Const $LVM_SETITEMA = ($LVM_FIRST + 6)
  6537. Global Const $LVM_SETITEMW = ($LVM_FIRST + 76)
  6538. Global Const $LVM_SETITEMCOUNT = ($LVM_FIRST + 47)
  6539. Global Const $LVM_SETITEMINDEXSTATE = ($LVM_FIRST + 210)
  6540. Global Const $LVM_SETITEMPOSITION = ($LVM_FIRST + 15)
  6541. Global Const $LVM_SETITEMPOSITION32 = ($LVM_FIRST + 49)
  6542. Global Const $LVM_SETITEMSTATE = ($LVM_FIRST + 43)
  6543. Global Const $LVM_SETITEMTEXTA = ($LVM_FIRST + 46)
  6544. Global Const $LVM_SETITEMTEXTW = ($LVM_FIRST + 116)
  6545. Global Const $LVM_SETOUTLINECOLOR = ($LVM_FIRST + 177)
  6546. Global Const $LVM_SETSELECTEDCOLUMN = ($LVM_FIRST + 140)
  6547. Global Const $LVM_SETSELECTIONMARK = ($LVM_FIRST + 67)
  6548. Global Const $LVM_SETTEXTBKCOLOR = ($LVM_FIRST + 38)
  6549. Global Const $LVM_SETTEXTCOLOR = ($LVM_FIRST + 36)
  6550. Global Const $LVM_SETTILEINFO = ($LVM_FIRST + 164)
  6551. Global Const $LVM_SETTILEVIEWINFO = ($LVM_FIRST + 162)
  6552. Global Const $LVM_SETTILEWIDTH = ($LVM_FIRST + 141)
  6553. Global Const $LVM_SETTOOLTIPS = ($LVM_FIRST + 74)
  6554. Global Const $LVM_SETUNICODEFORMAT = 8192 + 5
  6555. Global Const $LVM_SETVIEW = ($LVM_FIRST + 142)
  6556. Global Const $LVM_SETWORKAREAS = ($LVM_FIRST + 65)
  6557. Global Const $LVM_SORTGROUPS = ($LVM_FIRST + 158)
  6558. Global Const $LVM_SORTITEMS = ($LVM_FIRST + 48)
  6559. Global Const $LVM_SORTITEMSEX = ($LVM_FIRST + 81)
  6560. Global Const $LVM_SUBITEMHITTEST = ($LVM_FIRST + 57)
  6561. Global Const $LVM_UPDATE = ($LVM_FIRST + 42)
  6562. Global Const $LVN_FIRST = -100
  6563. Global Const $LVN_LAST = -199
  6564. Global Const $LVN_BEGINDRAG = ($LVN_FIRST - 9)
  6565. Global Const $LVN_BEGINLABELEDITA = ($LVN_FIRST - 5)
  6566. Global Const $LVN_BEGINLABELEDITW = ($LVN_FIRST - 75)
  6567. Global Const $LVN_BEGINRDRAG = ($LVN_FIRST - 11)
  6568. Global Const $LVN_BEGINSCROLL = ($LVN_FIRST - 80)
  6569. Global Const $LVN_COLUMNCLICK = ($LVN_FIRST - 8)
  6570. Global Const $LVN_COLUMNDROPDOWN = ($LVN_FIRST - 64)
  6571. Global Const $LVN_COLUMNOVERFLOWCLICK = ($LVN_FIRST - 66)
  6572. Global Const $LVN_DELETEALLITEMS = ($LVN_FIRST - 4)
  6573. Global Const $LVN_DELETEITEM = ($LVN_FIRST - 3)
  6574. Global Const $LVN_ENDLABELEDITA = ($LVN_FIRST - 6)
  6575. Global Const $LVN_ENDLABELEDITW = ($LVN_FIRST - 76)
  6576. Global Const $LVN_ENDSCROLL = ($LVN_FIRST - 81)
  6577. Global Const $LVN_GETDISPINFOA = ($LVN_FIRST - 50)
  6578. Global Const $LVN_GETDISPINFOW = ($LVN_FIRST - 77)
  6579. Global Const $LVN_GETDISPINFO = $LVN_GETDISPINFOA
  6580. Global Const $LVN_GETEMPTYMARKUP = ($LVN_FIRST - 87)
  6581. Global Const $LVN_GETINFOTIPA = ($LVN_FIRST - 57)
  6582. Global Const $LVN_GETINFOTIPW = ($LVN_FIRST - 58)
  6583. Global Const $LVN_HOTTRACK = ($LVN_FIRST - 21)
  6584. Global Const $LVN_INCREMENTALSEARCHA = ($LVN_FIRST - 62)
  6585. Global Const $LVN_INCREMENTALSEARCHW = ($LVN_FIRST - 63)
  6586. Global Const $LVN_INSERTITEM = ($LVN_FIRST - 2)
  6587. Global Const $LVN_ITEMACTIVATE = ($LVN_FIRST - 14)
  6588. Global Const $LVN_ITEMCHANGED = ($LVN_FIRST - 1)
  6589. Global Const $LVN_ITEMCHANGING = ($LVN_FIRST + 0)
  6590. Global Const $LVN_KEYDOWN = ($LVN_FIRST - 55)
  6591. Global Const $LVN_LINKCLICK = ($LVN_FIRST - 84)
  6592. Global Const $LVN_MARQUEEBEGIN = ($LVN_FIRST - 56)
  6593. Global Const $LVN_ODCACHEHINT = ($LVN_FIRST - 13)
  6594. Global Const $LVN_ODFINDITEMA = ($LVN_FIRST - 52)
  6595. Global Const $LVN_ODFINDITEMW = ($LVN_FIRST - 79)
  6596. Global Const $LVN_ODFINDITEM = $LVN_ODFINDITEMA
  6597. Global Const $LVN_ODSTATECHANGED = ($LVN_FIRST - 15)
  6598. Global Const $LVN_SETDISPINFOA = ($LVN_FIRST - 51)
  6599. Global Const $LVN_SETDISPINFOW = ($LVN_FIRST - 78)
  6600. Global Const $LVNI_ABOVE = 256
  6601. Global Const $LVNI_BELOW = 512
  6602. Global Const $LVNI_TOLEFT = 1024
  6603. Global Const $LVNI_TORIGHT = 2048
  6604. Global Const $LVNI_ALL = 0
  6605. Global Const $LVNI_CUT = 4
  6606. Global Const $LVNI_DROPHILITED = 8
  6607. Global Const $LVNI_FOCUSED = 1
  6608. Global Const $LVNI_SELECTED = 2
  6609. Global Const $LVSCW_AUTOSIZE = -1
  6610. Global Const $LVSCW_AUTOSIZE_USEHEADER = -2
  6611. Global Const $LVSICF_NOINVALIDATEALL = 1
  6612. Global Const $LVSICF_NOSCROLL = 2
  6613. Global Const $LVSIL_NORMAL = 0
  6614. Global Const $LVSIL_SMALL = 1
  6615. Global Const $LVSIL_STATE = 2
  6616. Global Const $LVFN_DIR_LEFT = 0
  6617. Global Const $LVFN_DIR_RIGHT = 1
  6618. Global Const $LVFN_DIR_UP = 2
  6619. Global Const $LVFN_DIR_DOWN = 3
  6620. Global Const $LVFN_DIR_START = 4
  6621. Global Const $LVFN_DIR_MEND = 5
  6622. Global Const $LVFN_DIR_PRIOR = 6
  6623. Global Const $LVFN_DIR_NEXT = 7
  6624. Global Const $FR_PRIVATE = 16
  6625. Global Const $FR_NOT_ENUM = 32
  6626. Global Const $COMPRESSION_BITMAP_PNG = 0
  6627. Global Const $COMPRESSION_BITMAP_JPEG = 1
  6628. Global Const $BS_DIBPATTERN = 5
  6629. Global Const $BS_DIBPATTERN8X8 = 8
  6630. Global Const $BS_DIBPATTERNPT = 6
  6631. Global Const $BS_HATCHED = 2
  6632. Global Const $BS_HOLLOW = 1
  6633. Global Const $BS_NULL = 1
  6634. Global Const $BS_PATTERN = 3
  6635. Global Const $BS_PATTERN8X8 = 7
  6636. Global Const $BS_SOLID = 0
  6637. Global Const $HS_BDIAGONAL = 3
  6638. Global Const $HS_CROSS = 4
  6639. Global Const $HS_DIAGCROSS = 5
  6640. Global Const $HS_FDIAGONAL = 2
  6641. Global Const $HS_HORIZONTAL = 0
  6642. Global Const $HS_VERTICAL = 1
  6643. Global Const $DIB_PAL_COLORS = 1
  6644. Global Const $DIB_RGB_COLORS = 0
  6645. Global Const $CA_NEGATIVE = 1
  6646. Global Const $CA_LOG_FILTER = 2
  6647. Global Const $ILLUMINANT_DEVICE_DEFAULT = 0
  6648. Global Const $ILLUMINANT_A = 1
  6649. Global Const $ILLUMINANT_B = 2
  6650. Global Const $ILLUMINANT_C = 3
  6651. Global Const $ILLUMINANT_D50 = 4
  6652. Global Const $ILLUMINANT_D55 = 5
  6653. Global Const $ILLUMINANT_D65 = 6
  6654. Global Const $ILLUMINANT_D75 = 7
  6655. Global Const $ILLUMINANT_F2 = 8
  6656. Global Const $ILLUMINANT_TUNGSTEN = $ILLUMINANT_A
  6657. Global Const $ILLUMINANT_DAYLIGHT = $ILLUMINANT_C
  6658. Global Const $ILLUMINANT_FLUORESCENT = $ILLUMINANT_F2
  6659. Global Const $ILLUMINANT_NTSC = $ILLUMINANT_C
  6660. Global Const $BI_RGB = 0
  6661. Global Const $BI_RLE8 = 1
  6662. Global Const $BI_RLE4 = 2
  6663. Global Const $BI_BITFIELDS = 3
  6664. Global Const $BI_JPEG = 4
  6665. Global Const $BI_PNG = 5
  6666. Global Const $ALTERNATE = 1
  6667. Global Const $WINDING = 2
  6668. Global Const $DWMWA_NCRENDERING_ENABLED = 1
  6669. Global Const $DWMWA_NCRENDERING_POLICY = 2
  6670. Global Const $DWMWA_TRANSITIONS_FORCEDISABLED = 3
  6671. Global Const $DWMWA_ALLOW_NCPAINT = 4
  6672. Global Const $DWMWA_CAPTION_BUTTON_BOUNDS = 5
  6673. Global Const $DWMWA_NONCLIENT_RTL_LAYOUT = 6
  6674. Global Const $DWMWA_FORCE_ICONIC_REPRESENTATION = 7
  6675. Global Const $DWMWA_FLIP3D_POLICY = 8
  6676. Global Const $DWMWA_EXTENDED_FRAME_BOUNDS = 9
  6677. Global Const $DWMWA_HAS_ICONIC_BITMAP = 10
  6678. Global Const $DWMWA_DISALLOW_PEEK = 11
  6679. Global Const $DWMWA_EXCLUDED_FROM_PEEK = 12
  6680. Global Const $DWMNCRP_USEWINDOWSTYLE = 0
  6681. Global Const $DWMNCRP_DISABLED = 1
  6682. Global Const $DWMNCRP_ENABLED = 2
  6683. Global Const $DWMFLIP3D_DEFAULT = 0
  6684. Global Const $DWMFLIP3D_EXCLUDEBELOW = 1
  6685. Global Const $DWMFLIP3D_EXCLUDEABOVE = 2
  6686. Global Const $DM_BITSPERPEL = 262144
  6687. Global Const $DM_COLLATE = 32768
  6688. Global Const $DM_COLOR = 2048
  6689. Global Const $DM_COPIES = 256
  6690. Global Const $DM_DEFAULTSOURCE = 512
  6691. Global Const $DM_DISPLAYFIXEDOUTPUT = 536870912
  6692. Global Const $DM_DISPLAYFLAGS = 2097152
  6693. Global Const $DM_DISPLAYFREQUENCY = 4194304
  6694. Global Const $DM_DISPLAYORIENTATION = 128
  6695. Global Const $DM_DITHERTYPE = 67108864
  6696. Global Const $DM_DUPLEX = 4096
  6697. Global Const $DM_FORMNAME = 65536
  6698. Global Const $DM_ICMINTENT = 16777216
  6699. Global Const $DM_ICMMETHOD = 8388608
  6700. Global Const $DM_LOGPIXELS = 131072
  6701. Global Const $DM_MEDIATYPE = 33554432
  6702. Global Const $DM_NUP = 64
  6703. Global Const $DM_ORIENTATION = 1
  6704. Global Const $DM_PANNINGHEIGHT = 268435456
  6705. Global Const $DM_PANNINGWIDTH = 134217728
  6706. Global Const $DM_PAPERLENGTH = 4
  6707. Global Const $DM_PAPERSIZE = 2
  6708. Global Const $DM_PAPERWIDTH = 8
  6709. Global Const $DM_PELSHEIGHT = 1048576
  6710. Global Const $DM_PELSWIDTH = 524288
  6711. Global Const $DM_POSITION = 32
  6712. Global Const $DM_PRINTQUALITY = 1024
  6713. Global Const $DM_SCALE = 16
  6714. Global Const $DM_TTOPTION = 16384
  6715. Global Const $DM_YRESOLUTION = 8192
  6716. Global Const $DMPAPER_LETTER = 1
  6717. Global Const $DMPAPER_LETTERSMALL = 2
  6718. Global Const $DMPAPER_TABLOID = 3
  6719. Global Const $DMPAPER_LEDGER = 4
  6720. Global Const $DMPAPER_LEGAL = 5
  6721. Global Const $DMPAPER_STATEMENT = 6
  6722. Global Const $DMPAPER_EXECUTIVE = 7
  6723. Global Const $DMPAPER_A3 = 8
  6724. Global Const $DMPAPER_A4 = 9
  6725. Global Const $DMPAPER_A4SMALL = 10
  6726. Global Const $DMPAPER_A5 = 11
  6727. Global Const $DMPAPER_B4 = 12
  6728. Global Const $DMPAPER_B5 = 13
  6729. Global Const $DMPAPER_FOLIO = 14
  6730. Global Const $DMPAPER_QUARTO = 15
  6731. Global Const $DMPAPER_10X14 = 16
  6732. Global Const $DMPAPER_11X17 = 17
  6733. Global Const $DMPAPER_NOTE = 18
  6734. Global Const $DMPAPER_ENV_9 = 19
  6735. Global Const $DMPAPER_ENV_10 = 20
  6736. Global Const $DMPAPER_ENV_11 = 21
  6737. Global Const $DMPAPER_ENV_12 = 22
  6738. Global Const $DMPAPER_ENV_14 = 23
  6739. Global Const $DMPAPER_CSHEET = 24
  6740. Global Const $DMPAPER_DSHEET = 25
  6741. Global Const $DMPAPER_ESHEET = 26
  6742. Global Const $DMPAPER_ENV_DL = 27
  6743. Global Const $DMPAPER_ENV_C5 = 28
  6744. Global Const $DMPAPER_ENV_C3 = 29
  6745. Global Const $DMPAPER_ENV_C4 = 30
  6746. Global Const $DMPAPER_ENV_C6 = 31
  6747. Global Const $DMPAPER_ENV_C65 = 32
  6748. Global Const $DMPAPER_ENV_B4 = 33
  6749. Global Const $DMPAPER_ENV_B5 = 34
  6750. Global Const $DMPAPER_ENV_B6 = 35
  6751. Global Const $DMPAPER_ENV_ITALY = 36
  6752. Global Const $DMPAPER_ENV_MONARCH = 37
  6753. Global Const $DMPAPER_ENV_PERSONAL = 38
  6754. Global Const $DMPAPER_FANFOLD_US = 39
  6755. Global Const $DMPAPER_FANFOLD_STD_GERMAN = 40
  6756. Global Const $DMPAPER_FANFOLD_LGL_GERMAN = 41
  6757. Global Const $DMPAPER_ISO_B4 = 42
  6758. Global Const $DMPAPER_JAPANESE_POSTCARD = 43
  6759. Global Const $DMPAPER_9X11 = 44
  6760. Global Const $DMPAPER_10X11 = 45
  6761. Global Const $DMPAPER_15X11 = 46
  6762. Global Const $DMPAPER_ENV_INVITE = 47
  6763. Global Const $DMPAPER_RESERVED_48 = 48
  6764. Global Const $DMPAPER_RESERVED_49 = 49
  6765. Global Const $DMPAPER_LETTER_EXTRA = 50
  6766. Global Const $DMPAPER_LEGAL_EXTRA = 51
  6767. Global Const $DMPAPER_TABLOID_EXTRA = 52
  6768. Global Const $DMPAPER_A4_EXTRA = 53
  6769. Global Const $DMPAPER_LETTER_TRANSVERSE = 54
  6770. Global Const $DMPAPER_A4_TRANSVERSE = 55
  6771. Global Const $DMPAPER_LETTER_EXTRA_TRANSVERSE = 56
  6772. Global Const $DMPAPER_A_PLUS = 57
  6773. Global Const $DMPAPER_B_PLUS = 58
  6774. Global Const $DMPAPER_LETTER_PLUS = 59
  6775. Global Const $DMPAPER_A4_PLUS = 60
  6776. Global Const $DMPAPER_A5_TRANSVERSE = 61
  6777. Global Const $DMPAPER_B5_TRANSVERSE = 62
  6778. Global Const $DMPAPER_A3_EXTRA = 63
  6779. Global Const $DMPAPER_A5_EXTRA = 64
  6780. Global Const $DMPAPER_B5_EXTRA = 65
  6781. Global Const $DMPAPER_A2 = 66
  6782. Global Const $DMPAPER_A3_TRANSVERSE = 67
  6783. Global Const $DMPAPER_A3_EXTRA_TRANSVERSE = 68
  6784. Global Const $DMPAPER_DBL_JAPANESE_POSTCARD = 69
  6785. Global Const $DMPAPER_A6 = 70
  6786. Global Const $DMPAPER_JENV_KAKU2 = 71
  6787. Global Const $DMPAPER_JENV_KAKU3 = 72
  6788. Global Const $DMPAPER_JENV_CHOU3 = 73
  6789. Global Const $DMPAPER_JENV_CHOU4 = 74
  6790. Global Const $DMPAPER_LETTER_ROTATED = 75
  6791. Global Const $DMPAPER_A3_ROTATED = 76
  6792. Global Const $DMPAPER_A4_ROTATED = 77
  6793. Global Const $DMPAPER_A5_ROTATED = 78
  6794. Global Const $DMPAPER_B4_JIS_ROTATED = 79
  6795. Global Const $DMPAPER_B5_JIS_ROTATED = 80
  6796. Global Const $DMPAPER_JAPANESE_POSTCARD_ROTATED = 81
  6797. Global Const $DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED = 82
  6798. Global Const $DMPAPER_A6_ROTATED = 83
  6799. Global Const $DMPAPER_JENV_KAKU2_ROTATED = 84
  6800. Global Const $DMPAPER_JENV_KAKU3_ROTATED = 85
  6801. Global Const $DMPAPER_JENV_CHOU3_ROTATED = 86
  6802. Global Const $DMPAPER_JENV_CHOU4_ROTATED = 87
  6803. Global Const $DMPAPER_B6_JIS = 88
  6804. Global Const $DMPAPER_B6_JIS_ROTATED = 89
  6805. Global Const $DMPAPER_12X11 = 90
  6806. Global Const $DMPAPER_JENV_YOU4 = 91
  6807. Global Const $DMPAPER_JENV_YOU4_ROTATED = 92
  6808. Global Const $DMPAPER_P16K = 93
  6809. Global Const $DMPAPER_P32K = 94
  6810. Global Const $DMPAPER_P32KBIG = 95
  6811. Global Const $DMPAPER_PENV_1 = 96
  6812. Global Const $DMPAPER_PENV_2 = 97
  6813. Global Const $DMPAPER_PENV_3 = 98
  6814. Global Const $DMPAPER_PENV_4 = 99
  6815. Global Const $DMPAPER_PENV_5 = 100
  6816. Global Const $DMPAPER_PENV_6 = 101
  6817. Global Const $DMPAPER_PENV_7 = 102
  6818. Global Const $DMPAPER_PENV_8 = 103
  6819. Global Const $DMPAPER_PENV_9 = 104
  6820. Global Const $DMPAPER_PENV_10 = 105
  6821. Global Const $DMPAPER_P16K_ROTATED = 106
  6822. Global Const $DMPAPER_P32K_ROTATED = 107
  6823. Global Const $DMPAPER_P32KBIG_ROTATED = 108
  6824. Global Const $DMPAPER_PENV_1_ROTATED = 109
  6825. Global Const $DMPAPER_PENV_2_ROTATED = 110
  6826. Global Const $DMPAPER_PENV_3_ROTATED = 111
  6827. Global Const $DMPAPER_PENV_4_ROTATED = 112
  6828. Global Const $DMPAPER_PENV_5_ROTATED = 113
  6829. Global Const $DMPAPER_PENV_6_ROTATED = 114
  6830. Global Const $DMPAPER_PENV_7_ROTATED = 115
  6831. Global Const $DMPAPER_PENV_8_ROTATED = 116
  6832. Global Const $DMPAPER_PENV_9_ROTATED = 117
  6833. Global Const $DMPAPER_PENV_10_ROTATED = 118
  6834. Global Const $DMPAPER_USER = 256
  6835. Global Const $DMBIN_UPPER = 1
  6836. Global Const $DMBIN_LOWER = 2
  6837. Global Const $DMBIN_MIDDLE = 3
  6838. Global Const $DMBIN_MANUAL = 4
  6839. Global Const $DMBIN_ENVELOPE = 5
  6840. Global Const $DMBIN_ENVMANUAL = 6
  6841. Global Const $DMBIN_AUTO = 7
  6842. Global Const $DMBIN_TRACTOR = 8
  6843. Global Const $DMBIN_SMALLFMT = 9
  6844. Global Const $DMBIN_LARGEFMT = 10
  6845. Global Const $DMBIN_LARGECAPACITY = 11
  6846. Global Const $DMBIN_CASSETTE = 14
  6847. Global Const $DMBIN_FORMSOURCE = 15
  6848. Global Const $DMBIN_USER = 256
  6849. Global Const $DMRES_DRAFT = -1
  6850. Global Const $DMRES_LOW = -2
  6851. Global Const $DMRES_MEDIUM = -3
  6852. Global Const $DMRES_HIGH = -4
  6853. Global Const $DMDO_DEFAULT = 0
  6854. Global Const $DMDO_90 = 1
  6855. Global Const $DMDO_180 = 2
  6856. Global Const $DMDO_270 = 3
  6857. Global Const $DMDFO_DEFAULT = 0
  6858. Global Const $DMDFO_STRETCH = 1
  6859. Global Const $DMDFO_CENTER = 2
  6860. Global Const $DMCOLOR_MONOCHROME = 1
  6861. Global Const $DMCOLOR_COLOR = 2
  6862. Global Const $DMDUP_SIMPLEX = 1
  6863. Global Const $DMDUP_VERTICAL = 2
  6864. Global Const $DMDUP_HORIZONTAL = 3
  6865. Global Const $DMTT_BITMAP = 1
  6866. Global Const $DMTT_DOWNLOAD = 2
  6867. Global Const $DMTT_SUBDEV = 3
  6868. Global Const $DMTT_DOWNLOAD_OUTLINE = 4
  6869. Global Const $DMCOLLATE_FALSE = 0
  6870. Global Const $DMCOLLATE_TRUE = 1
  6871. Global Const $DM_GRAYSCALE = 1
  6872. Global Const $DM_INTERLACED = 2
  6873. Global Const $DMNUP_SYSTEM = 1
  6874. Global Const $DMNUP_ONEUP = 2
  6875. Global Const $DMICMMETHOD_NONE = 1
  6876. Global Const $DMICMMETHOD_SYSTEM = 2
  6877. Global Const $DMICMMETHOD_DRIVER = 3
  6878. Global Const $DMICMMETHOD_DEVICE = 4
  6879. Global Const $DMICMMETHOD_USER = 256
  6880. Global Const $DMICM_SATURATE = 1
  6881. Global Const $DMICM_CONTRAST = 2
  6882. Global Const $DMICM_COLORIMETRIC = 3
  6883. Global Const $DMICM_ABS_COLORIMETRIC = 4
  6884. Global Const $DMICM_USER = 256
  6885. Global Const $DMMEDIA_STANDARD = 1
  6886. Global Const $DMMEDIA_TRANSPARENCY = 2
  6887. Global Const $DMMEDIA_GLOSSY = 3
  6888. Global Const $DMMEDIA_USER = 256
  6889. Global Const $DMDITHER_NONE = 1
  6890. Global Const $DMDITHER_COARSE = 2
  6891. Global Const $DMDITHER_FINE = 3
  6892. Global Const $DMDITHER_LINEART = 4
  6893. Global Const $DMDITHER_ERRORDIFFUSION = 5
  6894. Global Const $DMDITHER_RESERVED6 = 6
  6895. Global Const $DMDITHER_RESERVED7 = 7
  6896. Global Const $DMDITHER_RESERVED8 = 8
  6897. Global Const $DMDITHER_RESERVED9 = 9
  6898. Global Const $DMDITHER_GRAYSCALE = 10
  6899. Global Const $DMDITHER_USER = 256
  6900. Global Const $ENUM_CURRENT_SETTINGS = -1
  6901. Global Const $ENUM_REGISTRY_SETTINGS = -2
  6902. Global Const $DEVICE_FONTTYPE = 2
  6903. Global Const $RASTER_FONTTYPE = 1
  6904. Global Const $TRUETYPE_FONTTYPE = 4
  6905. Global Const $NTM_BOLD = 32
  6906. Global Const $NTM_DSIG = 2097152
  6907. Global Const $NTM_ITALIC = 1
  6908. Global Const $NTM_MULTIPLEMASTER = 524288
  6909. Global Const $NTM_NONNEGATIVE_AC = 65536
  6910. Global Const $NTM_PS_OPENTYPE = 131072
  6911. Global Const $NTM_REGULAR = 64
  6912. Global Const $NTM_TT_OPENTYPE = 262144
  6913. Global Const $NTM_TYPE1 = 1048576
  6914. Global Const $FLOODFILLBORDER = 0
  6915. Global Const $FLOODFILLSURFACE = 1
  6916. Global Const $AD_COUNTERCLOCKWISE = 1
  6917. Global Const $AD_CLOCKWISE = 2
  6918. Global Const $DCB_ACCUMULATE = 2
  6919. Global Const $DCB_DISABLE = 8
  6920. Global Const $DCB_ENABLE = 4
  6921. Global Const $DCB_RESET = 1
  6922. Global Const $DCB_SET = BitOR($DCB_RESET, $DCB_ACCUMULATE)
  6923. Global Const $DCX_WINDOW = 1
  6924. Global Const $DCX_CACHE = 2
  6925. Global Const $DCX_PARENTCLIP = 32
  6926. Global Const $DCX_CLIPSIBLINGS = 16
  6927. Global Const $DCX_CLIPCHILDREN = 8
  6928. Global Const $DCX_NORESETATTRS = 4
  6929. Global Const $DCX_LOCKWINDOWUPDATE = 1024
  6930. Global Const $DCX_EXCLUDERGN = 64
  6931. Global Const $DCX_INTERSECTRGN = 128
  6932. Global Const $DCX_INTERSECTUPDATE = 512
  6933. Global Const $DCX_VALIDATE = 2097152
  6934. Global Const $GGO_BEZIER = 3
  6935. Global Const $GGO_BITMAP = 1
  6936. Global Const $GGO_GLYPH_INDEX = 128
  6937. Global Const $GGO_GRAY2_BITMAP = 4
  6938. Global Const $GGO_GRAY4_BITMAP = 5
  6939. Global Const $GGO_GRAY8_BITMAP = 6
  6940. Global Const $GGO_METRICS = 0
  6941. Global Const $GGO_NATIVE = 2
  6942. Global Const $GGO_UNHINTED = 256
  6943. Global Const $GM_COMPATIBLE = 1
  6944. Global Const $GM_ADVANCED = 2
  6945. Global Const $MM_ANISOTROPIC = 8
  6946. Global Const $MM_HIENGLISH = 5
  6947. Global Const $MM_HIMETRIC = 3
  6948. Global Const $MM_ISOTROPIC = 7
  6949. Global Const $MM_LOENGLISH = 4
  6950. Global Const $MM_LOMETRIC = 2
  6951. Global Const $MM_TEXT = 1
  6952. Global Const $MM_TWIPS = 6
  6953. Global Const $R2_BLACK = 1
  6954. Global Const $R2_COPYPEN = 13
  6955. Global Const $R2_LAST = 16
  6956. Global Const $R2_MASKNOTPEN = 3
  6957. Global Const $R2_MASKPEN = 9
  6958. Global Const $R2_MASKPENNOT = 5
  6959. Global Const $R2_MERGENOTPEN = 12
  6960. Global Const $R2_MERGEPEN = 15
  6961. Global Const $R2_MERGEPENNOT = 14
  6962. Global Const $R2_NOP = 11
  6963. Global Const $R2_NOT = 6
  6964. Global Const $R2_NOTCOPYPEN = 4
  6965. Global Const $R2_NOTMASKPEN = 8
  6966. Global Const $R2_NOTMERGEPEN = 2
  6967. Global Const $R2_NOTXORPEN = 10
  6968. Global Const $R2_WHITE = 16
  6969. Global Const $R2_XORPEN = 7
  6970. Global Const $BLACKONWHITE = 1
  6971. Global Const $COLORONCOLOR = 3
  6972. Global Const $HALFTONE = 4
  6973. Global Const $WHITEONBLACK = 2
  6974. Global Const $STRETCH_ANDSCANS = $BLACKONWHITE
  6975. Global Const $STRETCH_DELETESCANS = $COLORONCOLOR
  6976. Global Const $STRETCH_HALFTONE = $HALFTONE
  6977. Global Const $STRETCH_ORSCANS = $WHITEONBLACK
  6978. Global Const $TA_BASELINE = 24
  6979. Global Const $TA_BOTTOM = 8
  6980. Global Const $TA_TOP = 0
  6981. Global Const $TA_CENTER = 6
  6982. Global Const $TA_LEFT = 0
  6983. Global Const $TA_RIGHT = 2
  6984. Global Const $TA_NOUPDATECP = 0
  6985. Global Const $TA_RTLREADING = 256
  6986. Global Const $TA_UPDATECP = 1
  6987. Global Const $VTA_BASELINE = $TA_BASELINE
  6988. Global Const $VTA_BOTTOM = $TA_RIGHT
  6989. Global Const $VTA_TOP = $TA_LEFT
  6990. Global Const $VTA_CENTER = $TA_CENTER
  6991. Global Const $VTA_LEFT = $TA_BOTTOM
  6992. Global Const $VTA_RIGHT = $TA_TOP
  6993. Global Const $UDF_BGR = 1
  6994. Global Const $UDF_RGB = 0
  6995. Global Const $MWT_IDENTITY = 1
  6996. Global Const $MWT_LEFTMULTIPLY = 2
  6997. Global Const $MWT_RIGHTMULTIPLY = 3
  6998. Global Const $MWT_SET = 4
  6999. Global Const $MONITOR_DEFAULTTONEAREST = 2
  7000. Global Const $MONITOR_DEFAULTTONULL = 0
  7001. Global Const $MONITOR_DEFAULTTOPRIMARY = 1
  7002. Global Const $PT_BEZIERTO = 4
  7003. Global Const $PT_LINETO = 2
  7004. Global Const $PT_MOVETO = 6
  7005. Global Const $PT_CLOSEFIGURE = 1
  7006. Global Const $COINIT_APARTMENTTHREADED = 2
  7007. Global Const $COINIT_DISABLE_OLE1DDE = 4
  7008. Global Const $COINIT_MULTITHREADED = 0
  7009. Global Const $COINIT_SPEED_OVER_MEMORY = 8
  7010. #Region Global Variables and Constants
  7011. Global Const $__TAGWINAPICOM_GUID = "struct;ulong Data1;ushort Data2;ushort Data3;byte Data4[8];endstruct"
  7012. #EndRegion Global Variables and Constants
  7013. #Region Functions list
  7014. #EndRegion Functions list
  7015. #Region Public Functions
  7016. Func _WinAPI_CLSIDFromProgID($SPROGID)
  7017.     Local $TGUID = DllStructCreate($__TAGWINAPICOM_GUID)
  7018.     Local $ARETURN = DllCall("ole32.dll", "long", "CLSIDFromProgID", "wstr", $SPROGID, "struct*", $TGUID)
  7019.     If @error Then Return SetError(@error, @extended, "")
  7020.     If $ARETURN[0] Then Return SetError(10, $ARETURN[0], "")
  7021.     $ARETURN = DllCall("ole32.dll", "int", "StringFromGUID2", "struct*", $TGUID, "wstr", "", "int", 39)
  7022.     If @error Or Not $ARETURN[0] Then Return SetError(@error + 20, @extended, "")
  7023.     Return $ARETURN[2]
  7024. EndFunc   ;==>_WINAPI_CLSIDFROMPROGID
  7025. Func _WinAPI_CoInitialize($IFLAGS = 0)
  7026.     Local $ARETURN = DllCall("ole32.dll", "long", "CoInitializeEx", "ptr", 0, "dword", $IFLAGS)
  7027.     If @error Then Return SetError(@error, @extended, 0)
  7028.     If $ARETURN[0] Then Return SetError(10, $ARETURN[0], 0)
  7029.     Return 1
  7030. EndFunc   ;==>_WINAPI_COINITIALIZE
  7031. Func _WinAPI_CoTaskMemAlloc($ISIZE)
  7032.     Local $ARETURN = DllCall("ole32.dll", "ptr", "CoTaskMemAlloc", "uint_ptr", $ISIZE)
  7033.     If @error Then Return SetError(@error, @extended, 0)
  7034.     Return $ARETURN[0]
  7035. EndFunc   ;==>_WINAPI_COTASKMEMALLOC
  7036. Func _WinAPI_CoTaskMemFree($PMEMORY)
  7037.     DllCall("ole32.dll", "none", "CoTaskMemFree", "ptr", $PMEMORY)
  7038.     If @error Then Return SetError(@error, @extended, 0)
  7039.     Return 1
  7040. EndFunc   ;==>_WINAPI_COTASKMEMFREE
  7041. Func _WinAPI_CoTaskMemRealloc($PMEMORY, $ISIZE)
  7042.     Local $ARETURN = DllCall("ole32.dll", "ptr", "CoTaskMemRealloc", "ptr", $PMEMORY, "ulong_ptr", $ISIZE)
  7043.     If @error Then Return SetError(@error, @extended, 0)
  7044.     Return $ARETURN[0]
  7045. EndFunc   ;==>_WINAPI_COTASKMEMREALLOC
  7046. Func _WinAPI_CoUninitialize()
  7047.     DllCall("ole32.dll", "none", "CoUninitialize")
  7048.     If @error Then Return SetError(@error, @extended, 0)
  7049.     Return 1
  7050. EndFunc   ;==>_WINAPI_COUNINITIALIZE
  7051. Func _WinAPI_CreateGUID()
  7052.     Local $TGUID = DllStructCreate($__TAGWINAPICOM_GUID)
  7053.     Local $ARETURN = DllCall("ole32.dll", "long", "CoCreateGuid", "struct*", $TGUID)
  7054.     If @error Then Return SetError(@error, @extended, "")
  7055.     If $ARETURN[0] Then Return SetError(10, $ARETURN[0], "")
  7056.     $ARETURN = DllCall("ole32.dll", "int", "StringFromGUID2", "struct*", $TGUID, "wstr", "", "int", 65536)
  7057.     If @error Or Not $ARETURN[0] Then Return SetError(@error + 20, @extended, "")
  7058.     Return $ARETURN[2]
  7059. EndFunc   ;==>_WINAPI_CREATEGUID
  7060. Func _WinAPI_CreateStreamOnHGlobal($HGLOBAL = 0, $BDELETEONRELEASE = True)
  7061.     Local $ARETURN = DllCall("ole32.dll", "long", "CreateStreamOnHGlobal", "handle", $HGLOBAL, "bool", $BDELETEONRELEASE, "ptr*", 0)
  7062.     If @error Then Return SetError(@error, @extended, 0)
  7063.     If $ARETURN[0] Then Return SetError(10, $ARETURN[0], 0)
  7064.     Return $ARETURN[3]
  7065. EndFunc   ;==>_WINAPI_CREATESTREAMONHGLOBAL
  7066. Func _WinAPI_GetHGlobalFromStream($PSTREAM)
  7067.     Local $ARETURN = DllCall("ole32.dll", "uint", "GetHGlobalFromStream", "ptr", $PSTREAM, "ptr*", 0)
  7068.     If @error Then Return SetError(@error, @extended, 0)
  7069.     If $ARETURN[0] Then Return SetError(10, $ARETURN[0], 0)
  7070.     Return $ARETURN[2]
  7071. EndFunc   ;==>_WINAPI_GETHGLOBALFROMSTREAM
  7072. Func _WinAPI_ProgIDFromCLSID($SCLSID)
  7073.     Local $TGUID = DllStructCreate($__TAGWINAPICOM_GUID)
  7074.     Local $ARETURN = DllCall("ole32.dll", "uint", "CLSIDFromString", "wstr", $SCLSID, "struct*", $TGUID)
  7075.     If @error Or $ARETURN[0] Then Return SetError(@error + 20, @extended, "")
  7076.     $ARETURN = DllCall("ole32.dll", "uint", "ProgIDFromCLSID", "struct*", $TGUID, "ptr*", 0)
  7077.     If @error Then Return SetError(@error, @extended, "")
  7078.     If $ARETURN[0] Then Return SetError(10, $ARETURN[0], "")
  7079.     Local $SID = _WinAPI_GetString($ARETURN[2])
  7080.     _WinAPI_CoTaskMemFree($ARETURN[2])
  7081.     Return $SID
  7082. EndFunc   ;==>_WINAPI_PROGIDFROMCLSID
  7083. Func _WinAPI_ReleaseStream($PSTREAM)
  7084.     Local $ARETURN = DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $PSTREAM, "ulong_ptr", 8 * (1 + @AutoItX64), "uint", 4, "ushort", 23, "uint", 0, "ptr", 0, "ptr", 0, "str", "")
  7085.     If @error Then Return SetError(@error, @extended, 0)
  7086.     If $ARETURN[0] Then Return SetError(10, $ARETURN[0], 0)
  7087.     Return 1
  7088. EndFunc   ;==>_WINAPI_RELEASESTREAM
  7089. #EndRegion Public Functions
  7090. #Region Global Variables and Constants
  7091. Global $__G_HHEAP = 0
  7092. #EndRegion Global Variables and Constants
  7093. #Region Functions list
  7094. #EndRegion Functions list
  7095. #Region Public Functions
  7096. Func _WinAPI_CreateBuffer($ILENGTH, $PBUFFER = 0, $BABORT = True)
  7097.     $PBUFFER = __HEAPREALLOC($PBUFFER, $ILENGTH, 0, $BABORT)
  7098.     If @error Then Return SetError(@error, @extended, 0)
  7099.     Return $PBUFFER
  7100. EndFunc   ;==>_WINAPI_CREATEBUFFER
  7101. Func _WinAPI_CreateBufferFromStruct($TSTRUCT, $PBUFFER = 0, $BABORT = True)
  7102.     If Not IsDllStruct($TSTRUCT) Then Return SetError(1, 0, 0)
  7103.     $PBUFFER = __HEAPREALLOC($PBUFFER, DllStructGetSize($TSTRUCT), 0, $BABORT)
  7104.     If @error Then Return SetError(@error + 100, @extended, 0)
  7105.     _WinAPI_MoveMemory($PBUFFER, $TSTRUCT, DllStructGetSize($TSTRUCT))
  7106.     Return $PBUFFER
  7107. EndFunc   ;==>_WINAPI_CREATEBUFFERFROMSTRUCT
  7108. Func _WinAPI_CreateString($SSTRING, $PSTRING = 0, $ILENGTH = -1, $BUNICODE = True, $BABORT = True)
  7109.     $ILENGTH = Number($ILENGTH)
  7110.     If $ILENGTH >= 0 Then
  7111.         $SSTRING = StringLeft($SSTRING, $ILENGTH)
  7112.     Else
  7113.         $ILENGTH = StringLen($SSTRING)
  7114.     EndIf
  7115.     Local $ISIZE = $ILENGTH + 1
  7116.     If $BUNICODE Then
  7117.         $ISIZE *= 2
  7118.     EndIf
  7119.     $PSTRING = __HEAPREALLOC($PSTRING, $ISIZE, 0, $BABORT)
  7120.     If @error Then Return SetError(@error, @extended, 0)
  7121.     DllStructSetData(DllStructCreate(($BUNICODE ? "wchar" : "char") & "[" & ($ILENGTH + 1) & "]", $PSTRING), 1, $SSTRING)
  7122.     Return SetExtended($ILENGTH, $PSTRING)
  7123. EndFunc   ;==>_WINAPI_CREATESTRING
  7124. Func _WinAPI_EqualMemory($PSOURCE1, $PSOURCE2, $ILENGTH)
  7125.     If _WinAPI_IsBadReadPtr($PSOURCE1, $ILENGTH) Then Return SetError(11, @extended, 0)
  7126.     If _WinAPI_IsBadReadPtr($PSOURCE2, $ILENGTH) Then Return SetError(12, @extended, 0)
  7127.     Local $ARET = DllCall("ntdll.dll", "ulong_ptr", "RtlCompareMemory", "struct*", $PSOURCE1, "struct*", $PSOURCE2, "ulong_ptr", $ILENGTH)
  7128.     If @error Then Return SetError(@error, @extended, 0)
  7129.     Return Number($ARET[0] = $ILENGTH)
  7130. EndFunc   ;==>_WINAPI_EQUALMEMORY
  7131. Func _WinAPI_FillMemory($PMEMORY, $ILENGTH, $IVALUE = 0)
  7132.     If _WinAPI_IsBadWritePtr($PMEMORY, $ILENGTH) Then Return SetError(11, @extended, 0)
  7133.     DllCall("ntdll.dll", "none", "RtlFillMemory", "struct*", $PMEMORY, "ulong_ptr", $ILENGTH, "byte", $IVALUE)
  7134.     If @error Then Return SetError(@error, @extended, 0)
  7135.     Return 1
  7136. EndFunc   ;==>_WINAPI_FILLMEMORY
  7137. Func _WinAPI_FreeMemory($PMEMORY)
  7138.     If Not __HEAPFREE($PMEMORY, 1) Then Return SetError(@error, @extended, 0)
  7139.     Return 1
  7140. EndFunc   ;==>_WINAPI_FREEMEMORY
  7141. Func _WinAPI_GetMemorySize($PMEMORY)
  7142.     Local $IRESULT = __HEAPSIZE($PMEMORY, 1)
  7143.     If @error Then Return SetError(@error, @extended, 0)
  7144.     Return $IRESULT
  7145. EndFunc   ;==>_WINAPI_GETMEMORYSIZE
  7146. Func _WinAPI_GlobalMemoryStatus()
  7147.     Local Const $TAGMEMORYSTATUSEX = "dword Length;dword MemoryLoad;" & "uint64 TotalPhys;uint64 AvailPhys;uint64 TotalPageFile;uint64 AvailPageFile;" & "uint64 TotalVirtual;uint64 AvailVirtual;uint64 AvailExtendedVirtual"
  7148.     Local $TMEM = DllStructCreate($TAGMEMORYSTATUSEX)
  7149.     DllStructSetData($TMEM, 1, DllStructGetSize($TMEM))
  7150.     Local $ARET = DllCall("kernel32.dll", "bool", "GlobalMemoryStatusEx", "struct*", $TMEM)
  7151.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  7152.     Local $AMEM[7]
  7153.     $AMEM[0] = DllStructGetData($TMEM, 2)
  7154.     $AMEM[1] = DllStructGetData($TMEM, 3)
  7155.     $AMEM[2] = DllStructGetData($TMEM, 4)
  7156.     $AMEM[3] = DllStructGetData($TMEM, 5)
  7157.     $AMEM[4] = DllStructGetData($TMEM, 6)
  7158.     $AMEM[5] = DllStructGetData($TMEM, 7)
  7159.     $AMEM[6] = DllStructGetData($TMEM, 8)
  7160.     Return $AMEM
  7161. EndFunc   ;==>_WinAPI_GlobalMemoryStatus
  7162. Func _WinAPI_IsBadCodePtr($PADDRESS)
  7163.     Local $ARET = DllCall("kernel32.dll", "bool", "IsBadCodePtr", "struct*", $PADDRESS)
  7164.     If @error Then Return SetError(@error, @extended, False)
  7165.     Return $ARET[0]
  7166. EndFunc   ;==>_WINAPI_ISBADCODEPTR
  7167. Func _WinAPI_IsBadReadPtr($PADDRESS, $ILENGTH)
  7168.     Local $ARET = DllCall("kernel32.dll", "bool", "IsBadReadPtr", "struct*", $PADDRESS, "uint_ptr", $ILENGTH)
  7169.     If @error Then Return SetError(@error, @extended, False)
  7170.     Return $ARET[0]
  7171. EndFunc   ;==>_WINAPI_ISBADREADPTR
  7172. Func _WinAPI_IsBadStringPtr($PADDRESS, $ILENGTH)
  7173.     Local $ARET = DllCall("kernel32.dll", "bool", "IsBadStringPtr", "struct*", $PADDRESS, "uint_ptr", $ILENGTH)
  7174.     If @error Then Return SetError(@error, @extended, False)
  7175.     Return $ARET[0]
  7176. EndFunc   ;==>_WINAPI_ISBADSTRINGPTR
  7177. Func _WinAPI_IsBadWritePtr($PADDRESS, $ILENGTH)
  7178.     Local $ARET = DllCall("kernel32.dll", "bool", "IsBadWritePtr", "struct*", $PADDRESS, "uint_ptr", $ILENGTH)
  7179.     If @error Then Return SetError(@error, @extended, False)
  7180.     Return $ARET[0]
  7181. EndFunc   ;==>_WINAPI_ISBADWRITEPTR
  7182. Func _WinAPI_IsMemory($PMEMORY)
  7183.     Local $BRESULT = __HEAPVALIDATE($PMEMORY)
  7184.     Return SetError(@error, @extended, $BRESULT)
  7185. EndFunc   ;==>_WINAPI_ISMEMORY
  7186. Func _WinAPI_LocalFree($HMEMORY)
  7187.     Local $ARESULT = DllCall("kernel32.dll", "handle", "LocalFree", "handle", $HMEMORY)
  7188.     If @error Then Return SetError(@error, @extended, False)
  7189.     Return $ARESULT[0]
  7190. EndFunc   ;==>_WinAPI_LocalFree
  7191. Func _WinAPI_MoveMemory($PDESTINATION, $PSOURCE, $ILENGTH)
  7192.     If _WinAPI_IsBadReadPtr($PSOURCE, $ILENGTH) Then Return SetError(10, @extended, 0)
  7193.     If _WinAPI_IsBadWritePtr($PDESTINATION, $ILENGTH) Then Return SetError(11, @extended, 0)
  7194.     DllCall("ntdll.dll", "none", "RtlMoveMemory", "struct*", $PDESTINATION, "struct*", $PSOURCE, "ulong_ptr", $ILENGTH)
  7195.     If @error Then Return SetError(@error, @extended, 0)
  7196.     Return 1
  7197. EndFunc   ;==>_WINAPI_MOVEMEMORY
  7198. Func _WinAPI_ReadProcessMemory($HPROCESS, $PBASEADDRESS, $PBUFFER, $ISIZE, ByRef $IREAD)
  7199.     Local $ARESULT = DllCall("kernel32.dll", "bool", "ReadProcessMemory", "handle", $HPROCESS, "ptr", $PBASEADDRESS, "struct*", $PBUFFER, "ulong_ptr", $ISIZE, "ulong_ptr*", 0)
  7200.     If @error Then Return SetError(@error, @extended, False)
  7201.     $IREAD = $ARESULT[5]
  7202.     Return $ARESULT[0]
  7203. EndFunc   ;==>_WinAPI_ReadProcessMemory
  7204. Func _WinAPI_WriteProcessMemory($HPROCESS, $PBASEADDRESS, $PBUFFER, $ISIZE, ByRef $IWRITTEN, $SBUFFER = "ptr")
  7205.     Local $ARESULT = DllCall("kernel32.dll", "bool", "WriteProcessMemory", "handle", $HPROCESS, "ptr", $PBASEADDRESS, $SBUFFER, $PBUFFER, "ulong_ptr", $ISIZE, "ulong_ptr*", 0)
  7206.     If @error Then Return SetError(@error, @extended, False)
  7207.     $IWRITTEN = $ARESULT[5]
  7208.     Return $ARESULT[0]
  7209. EndFunc   ;==>_WinAPI_WriteProcessMemory
  7210. Func _WinAPI_ZeroMemory($PMEMORY, $ILENGTH)
  7211.     If _WinAPI_IsBadWritePtr($PMEMORY, $ILENGTH) Then Return SetError(11, @extended, 0)
  7212.     DllCall("ntdll.dll", "none", "RtlZeroMemory", "struct*", $PMEMORY, "ulong_ptr", $ILENGTH)
  7213.     If @error Then Return SetError(@error, @extended, 0)
  7214.     Return 1
  7215. EndFunc   ;==>_WINAPI_ZEROMEMORY
  7216. #EndRegion Public Functions
  7217. #Region Internal Functions
  7218. Func __HEAPALLOC($ISIZE, $BABORT = False)
  7219.     Local $ARET
  7220.     If Not $__G_HHEAP Then
  7221.         $ARET = DllCall("kernel32.dll", "handle", "HeapCreate", "dword", 0, "ulong_ptr", 0, "ulong_ptr", 0)
  7222.         If @error Or Not $ARET[0] Then __FATALEXIT(1, "Error allocating memory.")
  7223.         $__G_HHEAP = $ARET[0]
  7224.     EndIf
  7225.     $ARET = DllCall("kernel32.dll", "ptr", "HeapAlloc", "handle", $__G_HHEAP, "dword", 8, "ulong_ptr", $ISIZE)
  7226.     If @error Or Not $ARET[0] Then
  7227.         If $BABORT Then __FATALEXIT(1, "Error allocating memory.")
  7228.         Return SetError(@error + 30, @extended, 0)
  7229.     EndIf
  7230.     Return $ARET[0]
  7231. EndFunc   ;==>__HEAPALLOC
  7232. Func __HEAPFREE(ByRef $PMEMORY, $BCHECK = False, $ICURERR = @error, $ICUREXT = @extended)
  7233.     If $BCHECK And (Not __HEAPVALIDATE($PMEMORY)) Then Return SetError(@error, @extended, 0)
  7234.     Local $ARET = DllCall("kernel32.dll", "int", "HeapFree", "handle", $__G_HHEAP, "dword", 0, "ptr", $PMEMORY)
  7235.     If @error Or Not $ARET[0] Then Return SetError(@error + 40, @extended, 0)
  7236.     $PMEMORY = 0
  7237.     Return SetError($ICURERR, $ICUREXT, 1)
  7238. EndFunc   ;==>__HEAPFREE
  7239. Func __HEAPREALLOC($PMEMORY, $ISIZE, $BAMOUNT = False, $BABORT = False)
  7240.     Local $ARET, $PRET
  7241.     If __HEAPVALIDATE($PMEMORY) Then
  7242.         If $BAMOUNT And (__HEAPSIZE($PMEMORY) >= $ISIZE) Then Return SetExtended(1, Ptr($PMEMORY))
  7243.         $ARET = DllCall("kernel32.dll", "ptr", "HeapReAlloc", "handle", $__G_HHEAP, "dword", 8, "ptr", $PMEMORY, "ulong_ptr", $ISIZE)
  7244.         If @error Or Not $ARET[0] Then
  7245.             If $BABORT Then __FATALEXIT(1, "Error allocating memory.")
  7246.             Return SetError(@error + 20, @extended, Ptr($PMEMORY))
  7247.         EndIf
  7248.         $PRET = $ARET[0]
  7249.     Else
  7250.         $PRET = __HEAPALLOC($ISIZE, $BABORT)
  7251.         If @error Then Return SetError(@error, @extended, 0)
  7252.     EndIf
  7253.     Return $PRET
  7254. EndFunc   ;==>__HEAPREALLOC
  7255. Func __HEAPSIZE($PMEMORY, $BCHECK = False)
  7256.     If $BCHECK And (Not __HEAPVALIDATE($PMEMORY)) Then Return SetError(@error, @extended, 0)
  7257.     Local $ARET = DllCall("kernel32.dll", "ulong_ptr", "HeapSize", "handle", $__G_HHEAP, "dword", 0, "ptr", $PMEMORY)
  7258.     If @error Or ($ARET[0] = Ptr(-1)) Then Return SetError(@error + 50, @extended, 0)
  7259.     Return $ARET[0]
  7260. EndFunc   ;==>__HEAPSIZE
  7261. Func __HEAPVALIDATE($PMEMORY)
  7262.     If (Not $__G_HHEAP) Or (Not Ptr($PMEMORY)) Then Return SetError(9, 0, False)
  7263.     Local $ARET = DllCall("kernel32.dll", "int", "HeapValidate", "handle", $__G_HHEAP, "dword", 0, "ptr", $PMEMORY)
  7264.     If @error Then Return SetError(@error, @extended, False)
  7265.     Return $ARET[0]
  7266. EndFunc   ;==>__HEAPVALIDATE
  7267. #EndRegion Internal Functions
  7268. Global Const $SND_APPLICATION = 128
  7269. Global Const $SND_ALIAS = 65536
  7270. Global Const $SND_ALIAS_ID = 1114112
  7271. Global Const $SND_ASYNC = 1
  7272. Global Const $SND_FILENAME = 131072
  7273. Global Const $SND_LOOP = 8
  7274. Global Const $SND_MEMORY = 4
  7275. Global Const $SND_NODEFAULT = 2
  7276. Global Const $SND_NOSTOP = 16
  7277. Global Const $SND_NOWAIT = 8192
  7278. Global Const $SND_PURGE = 64
  7279. Global Const $SND_RESOURCE = 262148
  7280. Global Const $SND_SENTRY = 524288
  7281. Global Const $SND_SYNC = 0
  7282. Global Const $SND_SYSTEM = 2097152
  7283. Global Const $SND_SYSTEM_NOSTOP = 2097168
  7284. Global Const $SND_ALIAS_SYSTEMASTERISK = "SystemAsterisk"
  7285. Global Const $SND_ALIAS_SYSTEMDEFAULT = "SystemDefault"
  7286. Global Const $SND_ALIAS_SYSTEMEXCLAMATION = "SystemExclamation"
  7287. Global Const $SND_ALIAS_SYSTEMEXIT = "SystemExit"
  7288. Global Const $SND_ALIAS_SYSTEMHAND = "SystemHand"
  7289. Global Const $SND_ALIAS_SYSTEMQUESTION = "SystemQuestion"
  7290. Global Const $SND_ALIAS_SYSTEMSTART = "SystemStart"
  7291. Global Const $SND_ALIAS_SYSTEMWELCOME = "SystemWelcome"
  7292. #Region Global Variables and Constants
  7293. #EndRegion Global Variables and Constants
  7294. #Region Functions list
  7295. #EndRegion Functions list
  7296. #Region Public Functions
  7297. Func _WinAPI_ArrayToStruct(Const ByRef $ADATA, $ISTART = 0, $IEND = -1)
  7298.     If __CHECKERRORARRAYBOUNDS($ADATA, $ISTART, $IEND) Then Return SetError(@error + 10, @extended, 0)
  7299.     Local $TAGSTRUCT = ""
  7300.     For $I = $ISTART To $IEND
  7301.         $TAGSTRUCT &= "wchar[" & (StringLen($ADATA[$I]) + 1) & "];"
  7302.     Next
  7303.     Local $TDATA = DllStructCreate($TAGSTRUCT & "wchar[1]")
  7304.     Local $ICOUNT = 1
  7305.     For $I = $ISTART To $IEND
  7306.         DllStructSetData($TDATA, $ICOUNT, $ADATA[$I])
  7307.         $ICOUNT += 1
  7308.     Next
  7309.     DllStructSetData($TDATA, $ICOUNT, ChrW(0))
  7310.     Return $TDATA
  7311. EndFunc   ;==>_WINAPI_ARRAYTOSTRUCT
  7312. Func _WinAPI_CreateMargins($ILEFTWIDTH, $IRIGHTWIDTH, $ITOPHEIGHT, $IBOTTOMHEIGHT)
  7313.     Local $TMARGINS = DllStructCreate($TAGMARGINS)
  7314.     DllStructSetData($TMARGINS, 1, $ILEFTWIDTH)
  7315.     DllStructSetData($TMARGINS, 2, $IRIGHTWIDTH)
  7316.     DllStructSetData($TMARGINS, 3, $ITOPHEIGHT)
  7317.     DllStructSetData($TMARGINS, 4, $IBOTTOMHEIGHT)
  7318.     Return $TMARGINS
  7319. EndFunc   ;==>_WINAPI_CREATEMARGINS
  7320. Func _WinAPI_CreatePoint($IX, $IY)
  7321.     Local $TPOINT = DllStructCreate($TAGPOINT)
  7322.     DllStructSetData($TPOINT, 1, $IX)
  7323.     DllStructSetData($TPOINT, 2, $IY)
  7324.     Return $TPOINT
  7325. EndFunc   ;==>_WINAPI_CREATEPOINT
  7326. Func _WinAPI_CreateRect($ILEFT, $ITOP, $IRIGHT, $IBOTTOM)
  7327.     Local $TRECT = DllStructCreate($TAGRECT)
  7328.     DllStructSetData($TRECT, 1, $ILEFT)
  7329.     DllStructSetData($TRECT, 2, $ITOP)
  7330.     DllStructSetData($TRECT, 3, $IRIGHT)
  7331.     DllStructSetData($TRECT, 4, $IBOTTOM)
  7332.     Return $TRECT
  7333. EndFunc   ;==>_WINAPI_CREATERECT
  7334. Func _WinAPI_CreateRectEx($IX, $IY, $IWIDTH, $IHEIGHT)
  7335.     Local $TRECT = DllStructCreate($TAGRECT)
  7336.     DllStructSetData($TRECT, 1, $IX)
  7337.     DllStructSetData($TRECT, 2, $IY)
  7338.     DllStructSetData($TRECT, 3, $IX + $IWIDTH)
  7339.     DllStructSetData($TRECT, 4, $IY + $IHEIGHT)
  7340.     Return $TRECT
  7341. EndFunc   ;==>_WINAPI_CREATERECTEX
  7342. Func _WinAPI_CreateSize($IWIDTH, $IHEIGHT)
  7343.     Local $TSIZE = DllStructCreate($TAGSIZE)
  7344.     DllStructSetData($TSIZE, 1, $IWIDTH)
  7345.     DllStructSetData($TSIZE, 2, $IHEIGHT)
  7346.     Return $TSIZE
  7347. EndFunc   ;==>_WINAPI_CREATESIZE
  7348. Func _WinAPI_CopyStruct($TSTRUCT, $SSTRUCT = "")
  7349.     Local $ISIZE = DllStructGetSize($TSTRUCT)
  7350.     If Not $ISIZE Then Return SetError(1, 0, 0)
  7351.     Local $TRESULT
  7352.     If Not StringStripWS($SSTRUCT, $STR_STRIPLEADING + $STR_STRIPTRAILING + $STR_STRIPSPACES) Then
  7353.         $TRESULT = DllStructCreate("byte[" & $ISIZE & "]")
  7354.     Else
  7355.         $TRESULT = DllStructCreate($SSTRUCT)
  7356.     EndIf
  7357.     If DllStructGetSize($TRESULT) < $ISIZE Then Return SetError(2, 0, 0)
  7358.     _WinAPI_MoveMemory($TRESULT, $TSTRUCT, $ISIZE)
  7359.     Return $TRESULT
  7360. EndFunc   ;==>_WINAPI_COPYSTRUCT
  7361. Func _WinAPI_GetExtended()
  7362.     Return $__G_VEXT
  7363. EndFunc   ;==>_WINAPI_GETEXTENDED
  7364. Func _WinAPI_GetMousePos($BTOCLIENT = False, $HWND = 0)
  7365.     Local $IMODE = Opt("MouseCoordMode", 1)
  7366.     Local $APOS = MouseGetPos()
  7367.     Opt("MouseCoordMode", $IMODE)
  7368.     Local $TPOINT = DllStructCreate($TAGPOINT)
  7369.     DllStructSetData($TPOINT, "X", $APOS[0])
  7370.     DllStructSetData($TPOINT, "Y", $APOS[1])
  7371.     If $BTOCLIENT And Not _WinAPI_ScreenToClient($HWND, $TPOINT) Then Return SetError(@error + 20, @extended, 0)
  7372.     Return $TPOINT
  7373. EndFunc   ;==>_WinAPI_GetMousePos
  7374. Func _WinAPI_GetMousePosX($BTOCLIENT = False, $HWND = 0)
  7375.     Local $TPOINT = _WinAPI_GetMousePos($BTOCLIENT, $HWND)
  7376.     If @error Then Return SetError(@error, @extended, 0)
  7377.     Return DllStructGetData($TPOINT, "X")
  7378. EndFunc   ;==>_WinAPI_GetMousePosX
  7379. Func _WinAPI_GetMousePosY($BTOCLIENT = False, $HWND = 0)
  7380.     Local $TPOINT = _WinAPI_GetMousePos($BTOCLIENT, $HWND)
  7381.     If @error Then Return SetError(@error, @extended, 0)
  7382.     Return DllStructGetData($TPOINT, "Y")
  7383. EndFunc   ;==>_WinAPI_GetMousePosY
  7384. Func _WinAPI_MulDiv($INUMBER, $INUMERATOR, $IDENOMINATOR)
  7385.     Local $ARESULT = DllCall("kernel32.dll", "int", "MulDiv", "int", $INUMBER, "int", $INUMERATOR, "int", $IDENOMINATOR)
  7386.     If @error Then Return SetError(@error, @extended, -1)
  7387.     Return $ARESULT[0]
  7388. EndFunc   ;==>_WinAPI_MulDiv
  7389. Func _WinAPI_PlaySound($SSOUND, $IFLAGS = $SND_SYSTEM_NOSTOP, $HINSTANCE = 0)
  7390.     Local $STYPEOFSOUND = "ptr"
  7391.     If $SSOUND Then
  7392.         If IsString($SSOUND) Then
  7393.             $STYPEOFSOUND = "wstr"
  7394.         EndIf
  7395.     Else
  7396.         $SSOUND = 0
  7397.         $IFLAGS = 0
  7398.     EndIf
  7399.     Local $ARET = DllCall("winmm.dll", "bool", "PlaySoundW", $STYPEOFSOUND, $SSOUND, "handle", $HINSTANCE, "dword", $IFLAGS)
  7400.     If @error Then Return SetError(@error, @extended, False)
  7401.     Return $ARET[0]
  7402. EndFunc   ;==>_WINAPI_PLAYSOUND
  7403. Func _WinAPI_StringLenA(Const ByRef $TSTRING)
  7404.     Local $ARESULT = DllCall("kernel32.dll", "int", "lstrlenA", "struct*", $TSTRING)
  7405.     If @error Then Return SetError(@error, @extended, 0)
  7406.     Return $ARESULT[0]
  7407. EndFunc   ;==>_WinAPI_StringLenA
  7408. Func _WinAPI_StringLenW(Const ByRef $TSTRING)
  7409.     Local $ARESULT = DllCall("kernel32.dll", "int", "lstrlenW", "struct*", $TSTRING)
  7410.     If @error Then Return SetError(@error, @extended, 0)
  7411.     Return $ARESULT[0]
  7412. EndFunc   ;==>_WinAPI_StringLenW
  7413. Func _WinAPI_StructToArray(ByRef $TSTRUCT, $IITEMS = 0)
  7414.     Local $ISIZE = 2 * Floor(DllStructGetSize($TSTRUCT) / 2)
  7415.     Local $PSTRUCT = DllStructGetPtr($TSTRUCT)
  7416.     If Not $ISIZE Or Not $PSTRUCT Then Return SetError(1, 0, 0)
  7417.     Local $TDATA, $ILENGTH, $IOFFSET = 0
  7418.     Local $ARESULT[101] = [0]
  7419.     While 1
  7420.         $ILENGTH = _WinAPI_StrLen($PSTRUCT + $IOFFSET)
  7421.         If Not $ILENGTH Then
  7422.             ExitLoop
  7423.         EndIf
  7424.         If 2 * (1 + $ILENGTH) + $IOFFSET > $ISIZE Then Return SetError(3, 0, 0)
  7425.         $TDATA = DllStructCreate("wchar[" & (1 + $ILENGTH) & "]", $PSTRUCT + $IOFFSET)
  7426.         If @error Then Return SetError(@error + 10, 0, 0)
  7427.         __INC($ARESULT)
  7428.         $ARESULT[$ARESULT[0]] = DllStructGetData($TDATA, 1)
  7429.         If $ARESULT[0] = $IITEMS Then
  7430.             ExitLoop
  7431.         EndIf
  7432.         $IOFFSET += 2 * (1 + $ILENGTH)
  7433.         If $IOFFSET >= $ISIZE Then Return SetError(3, 0, 0)
  7434.     WEnd
  7435.     If Not $ARESULT[0] Then Return SetError(2, 0, 0)
  7436.     __INC($ARESULT, -1)
  7437.     Return $ARESULT
  7438. EndFunc   ;==>_WINAPI_STRUCTTOARRAY
  7439. Func _WinAPI_UnionStruct($TSTRUCT1, $TSTRUCT2, $SSTRUCT = "")
  7440.     Local $ASIZE[2] = [DllStructGetSize($TSTRUCT1), DllStructGetSize($TSTRUCT2)]
  7441.     If Not $ASIZE[0] Or Not $ASIZE[1] Then Return SetError(1, 0, 0)
  7442.     Local $TRESULT
  7443.     If Not StringStripWS($SSTRUCT, $STR_STRIPLEADING + $STR_STRIPTRAILING + $STR_STRIPSPACES) Then
  7444.         $TRESULT = DllStructCreate("byte[" & ($ASIZE[0] + $ASIZE[1]) & "]")
  7445.     Else
  7446.         $TRESULT = DllStructCreate($SSTRUCT)
  7447.     EndIf
  7448.     If DllStructGetSize($TRESULT) < ($ASIZE[0] + $ASIZE[1]) Then Return SetError(2, 0, 0)
  7449.     _WinAPI_MoveMemory($TRESULT, $TSTRUCT1, $ASIZE[0])
  7450.     _WinAPI_MoveMemory(DllStructGetPtr($TRESULT) + $ASIZE[0], $TSTRUCT2, $ASIZE[1])
  7451.     Return $TRESULT
  7452. EndFunc   ;==>_WINAPI_UNIONSTRUCT
  7453. #EndRegion Public Functions
  7454. #Region Global Variables and Constants
  7455. Global Const $TAGBITMAP = "struct;long bmType;long bmWidth;long bmHeight;long bmWidthBytes;ushort bmPlanes;ushort bmBitsPixel;ptr bmBits;endstruct"
  7456. Global Const $TAGBITMAPV5HEADER = "struct;dword bV5Size;long bV5Width;long bV5Height;ushort bV5Planes;ushort bV5BitCount;dword bV5Compression;dword bV5SizeImage;long bV5XPelsPerMeter;long bV5YPelsPerMeter;dword bV5ClrUsed;dword bV5ClrImportant;dword bV5RedMask;dword bV5GreenMask;dword bV5BlueMask;dword bV5AlphaMask;dword bV5CSType;int bV5Endpoints[9];dword bV5GammaRed;dword bV5GammaGreen;dword bV5GammaBlue;dword bV5Intent;dword bV5ProfileData;dword bV5ProfileSize;dword bV5Reserved;endstruct"
  7457. Global Const $TAGDIBSECTION = $TAGBITMAP & ";" & $TAGBITMAPINFOHEADER & ";dword dsBitfields[3];ptr dshSection;dword dsOffset"
  7458. Global Const $TMPF_FIXED_PITCH = 1
  7459. Global Const $TMPF_VECTOR = 2
  7460. Global Const $TMPF_TRUETYPE = 4
  7461. Global Const $TMPF_DEVICE = 8
  7462. Global Const $__WINAPICONSTANT_FW_NORMAL = 400
  7463. Global Const $__WINAPICONSTANT_DEFAULT_CHARSET = 1
  7464. Global Const $__WINAPICONSTANT_OUT_DEFAULT_PRECIS = 0
  7465. Global Const $__WINAPICONSTANT_CLIP_DEFAULT_PRECIS = 0
  7466. Global Const $__WINAPICONSTANT_DEFAULT_QUALITY = 0
  7467. #EndRegion Global Variables and Constants
  7468. #Region Functions list
  7469. #EndRegion Functions list
  7470. #Region Public Functions
  7471. Func _WinAPI_BitBlt($HDESTDC, $IXDEST, $IYDEST, $IWIDTH, $IHEIGHT, $HSRCDC, $IXSRC, $IYSRC, $IROP)
  7472.     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)
  7473.     If @error Then Return SetError(@error, @extended, False)
  7474.     Return $ARESULT[0]
  7475. EndFunc   ;==>_WinAPI_BitBlt
  7476. Func _WinAPI_CombineRgn($HRGNDEST, $HRGNSRC1, $HRGNSRC2, $ICOMBINEMODE)
  7477.     Local $ARESULT = DllCall("gdi32.dll", "int", "CombineRgn", "handle", $HRGNDEST, "handle", $HRGNSRC1, "handle", $HRGNSRC2, "int", $ICOMBINEMODE)
  7478.     If @error Then Return SetError(@error, @extended, 0)
  7479.     Return $ARESULT[0]
  7480. EndFunc   ;==>_WinAPI_CombineRgn
  7481. Func _WinAPI_CopyBitmap($HBITMAP)
  7482.     $HBITMAP = _WinAPI_CopyImage($HBITMAP, 0, 0, 0, 8192)
  7483.     Return SetError(@error, @extended, $HBITMAP)
  7484. EndFunc   ;==>_WINAPI_COPYBITMAP
  7485. Func _WinAPI_CopyImage($HIMAGE, $ITYPE = 0, $IXDESIREDPIXELS = 0, $IYDESIREDPIXELS = 0, $IFLAGS = 0)
  7486.     Local $ARET = DllCall("user32.dll", "handle", "CopyImage", "handle", $HIMAGE, "uint", $ITYPE, "int", $IXDESIREDPIXELS, "int", $IYDESIREDPIXELS, "uint", $IFLAGS)
  7487.     If @error Then Return SetError(@error, @extended, 0)
  7488.     Return $ARET[0]
  7489. EndFunc   ;==>_WINAPI_COPYIMAGE
  7490. Func _WinAPI_CreateANDBitmap($HBITMAP)
  7491.     Local $IERROR = 0, $HDIB = 0
  7492.     $HBITMAP = _WinAPI_CopyBitmap($HBITMAP)
  7493.     If Not $HBITMAP Then Return SetError(@error + 20, @extended, 0)
  7494.     Do
  7495.         Local $ATDIB[2]
  7496.         $ATDIB[0] = DllStructCreate($TAGDIBSECTION)
  7497.         If (Not _WinAPI_GetObject($HBITMAP, DllStructGetSize($ATDIB[0]), $ATDIB[0])) Or (DllStructGetData($ATDIB[0], "bmBitsPixel") <> 32) Or (DllStructGetData($ATDIB[0], "biCompression")) Then
  7498.             $IERROR = 10
  7499.             ExitLoop
  7500.         EndIf
  7501.         $ATDIB[1] = DllStructCreate($TAGBITMAP)
  7502.         $HDIB = _WinAPI_CreateDIB(DllStructGetData($ATDIB[0], "bmWidth"), DllStructGetData($ATDIB[0], "bmHeight"), 1)
  7503.         If Not _WinAPI_GetObject($HDIB, DllStructGetSize($ATDIB[1]), $ATDIB[1]) Then
  7504.             $IERROR = 11
  7505.             ExitLoop
  7506.         EndIf
  7507.         Local $ARET = DllCall("user32.dll", "lresult", "CallWindowProc", "ptr", __ANDPROC(), "ptr", 0, "uint", 0, "wparam", DllStructGetPtr($ATDIB[0]), "lparam", DllStructGetPtr($ATDIB[1]))
  7508.         If @error Then
  7509.             $IERROR = @error
  7510.             ExitLoop
  7511.         EndIf
  7512.         If Not $ARET[0] Then
  7513.             $IERROR = 12
  7514.             ExitLoop
  7515.         EndIf
  7516.         $IERROR = 0
  7517.     Until 1
  7518.     _WinAPI_DeleteObject($HBITMAP)
  7519.     If $IERROR Then
  7520.         If $HDIB Then
  7521.             _WinAPI_DeleteObject($HDIB)
  7522.         EndIf
  7523.         $HDIB = 0
  7524.     EndIf
  7525.     Return SetError($IERROR, 0, $HDIB)
  7526. EndFunc   ;==>_WINAPI_CREATEANDBITMAP
  7527. Func _WinAPI_CreateBitmap($IWIDTH, $IHEIGHT, $IPLANES = 1, $IBITSPERPEL = 1, $PBITS = 0)
  7528.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateBitmap", "int", $IWIDTH, "int", $IHEIGHT, "uint", $IPLANES, "uint", $IBITSPERPEL, "struct*", $PBITS)
  7529.     If @error Then Return SetError(@error, @extended, 0)
  7530.     Return $ARESULT[0]
  7531. EndFunc   ;==>_WinAPI_CreateBitmap
  7532. Func _WinAPI_CreateCompatibleBitmap($HDC, $IWIDTH, $IHEIGHT)
  7533.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateCompatibleBitmap", "handle", $HDC, "int", $IWIDTH, "int", $IHEIGHT)
  7534.     If @error Then Return SetError(@error, @extended, 0)
  7535.     Return $ARESULT[0]
  7536. EndFunc   ;==>_WinAPI_CreateCompatibleBitmap
  7537. Func _WinAPI_CreateDIB($IWIDTH, $IHEIGHT, $IBITSPERPEL = 32, $TCOLORTABLE = 0, $ICOLORCOUNT = 0)
  7538.     Local $ARGBQ[2], $ICOLORS, $TAGRGBQ
  7539.     Switch $IBITSPERPEL
  7540.         Case 1
  7541.             $ICOLORS = 2
  7542.         Case 4
  7543.             $ICOLORS = 16
  7544.         Case 8
  7545.             $ICOLORS = 256
  7546.         Case Else
  7547.             $ICOLORS = 0
  7548.     EndSwitch
  7549.     If $ICOLORS Then
  7550.         If Not IsDllStruct($TCOLORTABLE) Then
  7551.             Switch $IBITSPERPEL
  7552.                 Case 1
  7553.                     $ARGBQ[0] = 0
  7554.                     $ARGBQ[1] = 16777215
  7555.                     $TCOLORTABLE = _WinAPI_CreateDIBColorTable($ARGBQ)
  7556.                 Case Else
  7557.             EndSwitch
  7558.         Else
  7559.             If $ICOLORS > $ICOLORCOUNT Then
  7560.                 $ICOLORS = $ICOLORCOUNT
  7561.             EndIf
  7562.             If (Not $ICOLORS) Or ((4 * $ICOLORS) > DllStructGetSize($TCOLORTABLE)) Then
  7563.                 Return SetError(20, 0, 0)
  7564.             EndIf
  7565.         EndIf
  7566.         $TAGRGBQ = ";dword aRGBQuad[" & $ICOLORS & "]"
  7567.     Else
  7568.         $TAGRGBQ = ""
  7569.     EndIf
  7570.     Local $TBITMAPINFO = DllStructCreate($TAGBITMAPINFOHEADER & $TAGRGBQ)
  7571.     DllStructSetData($TBITMAPINFO, "biSize", 40)
  7572.     DllStructSetData($TBITMAPINFO, "biWidth", $IWIDTH)
  7573.     DllStructSetData($TBITMAPINFO, "biHeight", $IHEIGHT)
  7574.     DllStructSetData($TBITMAPINFO, "biPlanes", 1)
  7575.     DllStructSetData($TBITMAPINFO, "biBitCount", $IBITSPERPEL)
  7576.     DllStructSetData($TBITMAPINFO, "biCompression", 0)
  7577.     DllStructSetData($TBITMAPINFO, "biSizeImage", 0)
  7578.     DllStructSetData($TBITMAPINFO, "biXPelsPerMeter", 0)
  7579.     DllStructSetData($TBITMAPINFO, "biYPelsPerMeter", 0)
  7580.     DllStructSetData($TBITMAPINFO, "biClrUsed", $ICOLORS)
  7581.     DllStructSetData($TBITMAPINFO, "biClrImportant", 0)
  7582.     If $ICOLORS Then
  7583.         If IsDllStruct($TCOLORTABLE) Then
  7584.             _WinAPI_MoveMemory(DllStructGetPtr($TBITMAPINFO, "aRGBQuad"), $TCOLORTABLE, 4 * $ICOLORS)
  7585.         Else
  7586.             _WinAPI_ZeroMemory(DllStructGetPtr($TBITMAPINFO, "aRGBQuad"), 4 * $ICOLORS)
  7587.         EndIf
  7588.     EndIf
  7589.     Local $HBITMAP = _WinAPI_CreateDIBSection(0, $TBITMAPINFO, 0, $__G_VEXT)
  7590.     If Not $HBITMAP Then Return SetError(@error, @extended, 0)
  7591.     Return $HBITMAP
  7592. EndFunc   ;==>_WINAPI_CREATEDIB
  7593. Func _WinAPI_CreateDIBSection($HDC, $TBITMAPINFO, $IUSAGE, ByRef $PBITS, $HSECTION = 0, $IOFFSET = 0)
  7594.     $PBITS = 0
  7595.     Local $ARET = DllCall("gdi32.dll", "handle", "CreateDIBSection", "handle", $HDC, "struct*", $TBITMAPINFO, "uint", $IUSAGE, "ptr*", 0, "handle", $HSECTION, "dword", $IOFFSET)
  7596.     If @error Or Not $ARET[0] Then Return SetError(@error, @extended, 0)
  7597.     $PBITS = $ARET[4]
  7598.     Return $ARET[0]
  7599. EndFunc   ;==>_WINAPI_CREATEDIBSECTION
  7600. Func _WinAPI_CreateDIBColorTable(Const ByRef $ACOLORTABLE, $ISTART = 0, $IEND = -1)
  7601.     If __CHECKERRORARRAYBOUNDS($ACOLORTABLE, $ISTART, $IEND) Then Return SetError(@error + 10, @extended, 0)
  7602.     Local $TCOLORTABLE = DllStructCreate("dword[" & ($IEND - $ISTART + 1) & "]")
  7603.     Local $ICOUNT = 1
  7604.     For $I = $ISTART To $IEND
  7605.         DllStructSetData($TCOLORTABLE, 1, _WinAPI_SwitchColor(__RGB($ACOLORTABLE[$I])), $ICOUNT)
  7606.         $ICOUNT += 1
  7607.     Next
  7608.     Return $TCOLORTABLE
  7609. EndFunc   ;==>_WINAPI_CREATEDIBCOLORTABLE
  7610. Func _WinAPI_CreateFont($IHEIGHT, $IWIDTH, $IESCAPE = 0, $IORIENTN = 0, $IWEIGHT = $__WINAPICONSTANT_FW_NORMAL, $BITALIC = False, $BUNDERLINE = False, $BSTRIKEOUT = False, $ICHARSET = $__WINAPICONSTANT_DEFAULT_CHARSET, $IOUTPUTPREC = $__WINAPICONSTANT_OUT_DEFAULT_PRECIS, $ICLIPPREC = $__WINAPICONSTANT_CLIP_DEFAULT_PRECIS, $IQUALITY = $__WINAPICONSTANT_DEFAULT_QUALITY, $IPITCH = 0, $SFACE = "Arial")
  7611.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateFontW", "int", $IHEIGHT, "int", $IWIDTH, "int", $IESCAPE, "int", $IORIENTN, "int", $IWEIGHT, "dword", $BITALIC, "dword", $BUNDERLINE, "dword", $BSTRIKEOUT, "dword", $ICHARSET, "dword", $IOUTPUTPREC, "dword", $ICLIPPREC, "dword", $IQUALITY, "dword", $IPITCH, "wstr", $SFACE)
  7612.     If @error Then Return SetError(@error, @extended, 0)
  7613.     Return $ARESULT[0]
  7614. EndFunc   ;==>_WinAPI_CreateFont
  7615. Func _WinAPI_CreateFontIndirect($TLOGFONT)
  7616.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateFontIndirectW", "struct*", $TLOGFONT)
  7617.     If @error Then Return SetError(@error, @extended, 0)
  7618.     Return $ARESULT[0]
  7619. EndFunc   ;==>_WinAPI_CreateFontIndirect
  7620. Func _WinAPI_CreateRectRgn($ILEFTRECT, $ITOPRECT, $IRIGHTRECT, $IBOTTOMRECT)
  7621.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateRectRgn", "int", $ILEFTRECT, "int", $ITOPRECT, "int", $IRIGHTRECT, "int", $IBOTTOMRECT)
  7622.     If @error Then Return SetError(@error, @extended, 0)
  7623.     Return $ARESULT[0]
  7624. EndFunc   ;==>_WinAPI_CreateRectRgn
  7625. Func _WinAPI_CreateRoundRectRgn($ILEFTRECT, $ITOPRECT, $IRIGHTRECT, $IBOTTOMRECT, $IWIDTHELLIPSE, $IHEIGHTELLIPSE)
  7626.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateRoundRectRgn", "int", $ILEFTRECT, "int", $ITOPRECT, "int", $IRIGHTRECT, "int", $IBOTTOMRECT, "int", $IWIDTHELLIPSE, "int", $IHEIGHTELLIPSE)
  7627.     If @error Then Return SetError(@error, @extended, 0)
  7628.     Return $ARESULT[0]
  7629. EndFunc   ;==>_WinAPI_CreateRoundRectRgn
  7630. Func _WinAPI_CreateSolidBrush($ICOLOR)
  7631.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateSolidBrush", "INT", $ICOLOR)
  7632.     If @error Then Return SetError(@error, @extended, 0)
  7633.     Return $ARESULT[0]
  7634. EndFunc   ;==>_WinAPI_CreateSolidBrush
  7635. Func _WinAPI_GetBitmapDimension($HBITMAP)
  7636.     Local $TOBJ = DllStructCreate($TAGBITMAP)
  7637.     Local $ARET = DllCall("gdi32.dll", "int", "GetObject", "handle", $HBITMAP, "int", DllStructGetSize($TOBJ), "struct*", $TOBJ)
  7638.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  7639.     Return _WinAPI_CreateSize(DllStructGetData($TOBJ, "bmWidth"), DllStructGetData($TOBJ, "bmHeight"))
  7640. EndFunc   ;==>_WINAPI_GETBITMAPDIMENSION
  7641. Func _WinAPI_GetSysColorBrush($IINDEX)
  7642.     Local $ARESULT = DllCall("user32.dll", "handle", "GetSysColorBrush", "int", $IINDEX)
  7643.     If @error Then Return SetError(@error, @extended, 0)
  7644.     Return $ARESULT[0]
  7645. EndFunc   ;==>_WinAPI_GetSysColorBrush
  7646. Func _WinAPI_GetTextExtentPoint32($HDC, $STEXT)
  7647.     Local $TSIZE = DllStructCreate($TAGSIZE)
  7648.     Local $ISIZE = StringLen($STEXT)
  7649.     Local $ARET = DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $HDC, "wstr", $STEXT, "int", $ISIZE, "struct*", $TSIZE)
  7650.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  7651.     Return $TSIZE
  7652. EndFunc   ;==>_WinAPI_GetTextExtentPoint32
  7653. Func _WinAPI_GetTextMetrics($HDC)
  7654.     Local $TTEXTMETRIC = DllStructCreate($TAGTEXTMETRIC)
  7655.     Local $ARET = DllCall("gdi32.dll", "bool", "GetTextMetricsW", "handle", $HDC, "struct*", $TTEXTMETRIC)
  7656.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  7657.     Return $TTEXTMETRIC
  7658. EndFunc   ;==>_WinAPI_GetTextMetrics
  7659. Func _WinAPI_GetWindowRgn($HWND, $HRGN)
  7660.     Local $ARESULT = DllCall("user32.dll", "int", "GetWindowRgn", "hwnd", $HWND, "handle", $HRGN)
  7661.     If @error Then Return SetError(@error, @extended, 0)
  7662.     Return $ARESULT[0]
  7663. EndFunc   ;==>_WinAPI_GetWindowRgn
  7664. Func _WinAPI_IsAlphaBitmap($HBITMAP)
  7665.     $HBITMAP = _WinAPI_CopyBitmap($HBITMAP)
  7666.     If Not $HBITMAP Then Return SetError(@error + 20, @extended, 0)
  7667.     Local $ARET, $IERROR = 0
  7668.     Do
  7669.         Local $TDIB = DllStructCreate($TAGDIBSECTION)
  7670.         If (Not _WinAPI_GetObject($HBITMAP, DllStructGetSize($TDIB), $TDIB)) Or (DllStructGetData($TDIB, "bmBitsPixel") <> 32) Or (DllStructGetData($TDIB, "biCompression")) Then
  7671.             $IERROR = 1
  7672.             ExitLoop
  7673.         EndIf
  7674.         $ARET = DllCall("user32.dll", "int", "CallWindowProc", "ptr", __ALPHAPROC(), "ptr", 0, "uint", 0, "struct*", $TDIB, "ptr", 0)
  7675.         If @error Or ($ARET[0] = -1) Then
  7676.             $IERROR = @error + 10
  7677.             ExitLoop
  7678.         EndIf
  7679.     Until 1
  7680.     _WinAPI_DeleteObject($HBITMAP)
  7681.     If $IERROR Then Return SetError($IERROR, 0, 0)
  7682.     Return $ARET[0]
  7683. EndFunc   ;==>_WINAPI_ISALPHABITMAP
  7684. Func _WinAPI_PtInRect(ByRef $TRECT, ByRef $TPOINT)
  7685.     Local $ARESULT = DllCall("user32.dll", "bool", "PtInRect", "struct*", $TRECT, "struct", $TPOINT)
  7686.     If @error Then Return SetError(@error, @extended, False)
  7687.     Return $ARESULT[0]
  7688. EndFunc   ;==>_WinAPI_PtInRect
  7689. Func _WinAPI_RedrawWindow($HWND, $TRECT = 0, $HREGION = 0, $IFLAGS = 5)
  7690.     Local $ARESULT = DllCall("user32.dll", "bool", "RedrawWindow", "hwnd", $HWND, "struct*", $TRECT, "handle", $HREGION, "uint", $IFLAGS)
  7691.     If @error Then Return SetError(@error, @extended, False)
  7692.     Return $ARESULT[0]
  7693. EndFunc   ;==>_WinAPI_RedrawWindow
  7694. Func _WinAPI_SetWindowRgn($HWND, $HRGN, $BREDRAW = True)
  7695.     Local $ARESULT = DllCall("user32.dll", "int", "SetWindowRgn", "hwnd", $HWND, "handle", $HRGN, "bool", $BREDRAW)
  7696.     If @error Then Return SetError(@error, @extended, False)
  7697.     Return $ARESULT[0]
  7698. EndFunc   ;==>_WinAPI_SetWindowRgn
  7699. #EndRegion Public Functions
  7700. #Region Embedded DLL Functions
  7701. Func __ALPHAPROC()
  7702.     Static $PPROC = 0
  7703.     If Not $PPROC Then
  7704.         If @AutoItX64 Then
  7705.             $PPROC = __INIT(Binary("0x48894C240848895424104C894424184C894C24205541574831C050504883EC28" & "48837C24600074054831C0EB0748C7C0010000004821C0751F488B6C24604883" & "7D180074054831C0EB0748C7C0010000004821C07502EB0948C7C001000000EB" & "034831C04821C0740C48C7C0FFFFFFFF4863C0EB6F48C744242800000000488B" & "6C24604C637D04488B6C2460486345084C0FAFF849C1E7024983C7FC4C3B7C24" & "287C36488B6C24604C8B7D184C037C24284983C7034C897C2430488B6C243080" & "7D0000740C48C7C0010000004863C0EB1348834424280471A54831C04863C0EB" & "034831C04883C438415F5DC3"))
  7706.         Else
  7707.             $PPROC = __INIT(Binary("0x555331C05050837C241C00740431C0EB05B80100000021C075198B6C241C837D" & "1400740431C0EB05B80100000021C07502EB07B801000000EB0231C021C07407" & "B8FFFFFFFFEB4FC70424000000008B6C241C8B5D048B6C241C0FAF5D08C1E302" & "83C3FC3B1C247C288B6C241C8B5D14031C2483C303895C24048B6C2404807D00" & "007407B801000000EB0C8304240471BE31C0EB0231C083C4085B5DC21000"))
  7708.         EndIf
  7709.     EndIf
  7710.     Return $PPROC
  7711. EndFunc   ;==>__ALPHAPROC
  7712. Func __ANDPROC()
  7713.     Static $PPROC = 0
  7714.     If Not $PPROC Then
  7715.         If @AutoItX64 Then
  7716.             $PPROC = __INIT(Binary("0x48894C240848895424104C894424184C894C2420554157415648C7C009000000" & "4883EC0848C704240000000048FFC875EF4883EC284883BC24A0000000007405" & "4831C0EB0748C7C0010000004821C00F85840000004883BC24A8000000007405" & "4831C0EB0748C7C0010000004821C07555488BAC24A000000048837D18007405" & "4831C0EB0748C7C0010000004821C07522488BAC24A800000048837D18007405" & "4831C0EB0748C7C0010000004821C07502EB0948C7C001000000EB034831C048" & "21C07502EB0948C7C001000000EB034831C04821C07502EB0948C7C001000000" & "EB034831C04821C0740B4831C04863C0E9D701000048C74424280000000048C7" & "44243000000000488BAC24A00000004C637D0849FFCF4C3B7C24300F8C9C0100" & "0048C74424380000000048C74424400000000048C744244800000000488BAC24" & "A00000004C637D0449FFCF4C3B7C24480F8CDB000000488BAC24A00000004C8B" & "7D184C037C24284983C7034C897C2450488B6C2450807D000074264C8B7C2440" & "4C8B74243849F7DE4983C61F4C89F148C7C00100000048D3E04909C74C897C24" & "4048FF4424384C8B7C24384983FF1F7E6F4C8B7C244049F7D74C897C244048C7" & "442458180000004831C0483B4424587F3D488BAC24A80000004C8B7D184C037C" & "24604C897C24504C8B7C2440488B4C245849D3FF4C89F850488B6C2458588845" & "0048FF4424604883442458F871B948C74424380000000048C744244000000000" & "48834424280448FF4424480F810BFFFFFF48837C24380074794C8B7C244049F7" & "D74C8B74243849F7DE4983C6204C89F148C7C0FFFFFFFF48D3E04921C74C897C" & "244048C7442458180000004831C0483B4424587F3D488BAC24A80000004C8B7D" & "184C037C24604C897C24504C8B7C2440488B4C245849D3FF4C89F850488B6C24" & "585888450048FF4424604883442458F871B948FF4424300F814AFEFFFF48C7C0" & "010000004863C0EB034831C04883C470415E415F5DC3"))
  7717.         Else
  7718.             $PPROC = __INIT(Binary("0x555357BA0800000083EC04C70424000000004A75F3837C243800740431C0EB05" & "B80100000021C07562837C243C00740431C0EB05B80100000021C0753F8B6C24" & "38837D1400740431C0EB05B80100000021C075198B6C243C837D1400740431C0" & "EB05B80100000021C07502EB07B801000000EB0231C021C07502EB07B8010000" & "00EB0231C021C07502EB07B801000000EB0231C021C0740731C0E969010000C7" & "042400000000C7442404000000008B6C24388B5D084B3B5C24040F8C3F010000" & "C744240800000000C744240C00000000C7442410000000008B6C24388B5D044B" & "3B5C24100F8CA90000008B6C24388B5D14031C2483C303895C24148B6C241480" & "7D0000741C8B5C240C8B7C2408F7DF83C71F89F9B801000000D3E009C3895C24" & "0CFF4424088B5C240883FB1F7E578B5C240CF7D3895C240CC744241818000000" & "31C03B4424187F2D8B6C243C8B5D14035C241C895C24148B5C240C8B4C2418D3" & "FB538B6C241858884500FF44241C83442418F871CBC744240800000000C74424" & "0C0000000083042404FF4424100F8145FFFFFF837C240800745B8B5C240CF7D3" & "8B7C2408F7DF83C72089F9B8FFFFFFFFD3E021C3895C240CC744241818000000" & "31C03B4424187F2D8B6C243C8B5D14035C241C895C24148B5C240C8B4C2418D3" & "FB538B6C241858884500FF44241C83442418F871CBFF4424040F81AFFEFFFFB8" & "01000000EB0231C083C4205F5B5DC21000"))
  7719.         EndIf
  7720.     EndIf
  7721.     Return $PPROC
  7722. EndFunc   ;==>__ANDPROC
  7723. Func __XORPROC()
  7724.     Static $PPROC = 0
  7725.     If Not $PPROC Then
  7726.         If @AutoItX64 Then
  7727.             $PPROC = __INIT(Binary("0x48894C240848895424104C894424184C894C24205541574831C050504883EC28" & "48837C24600074054831C0EB0748C7C0010000004821C0751B48837C24680074" & "054831C0EB0748C7C0010000004821C07502EB0948C7C001000000EB034831C0" & "4821C074084831C04863C0EB7748C7442428000000004C637C24584983C7FC4C" & "3B7C24287C4F4C8B7C24604C037C24284C897C2430488B6C2430807D00007405" & "4831C0EB0748C7C0010000004821C0741C4C8B7C24684C037C24284983C7034C" & "897C2430488B6C2430C64500FF48834424280471A148C7C0010000004863C0EB" & "034831C04883C438415F5DC3"))
  7728.         Else
  7729.             $PPROC = __INIT(Binary("0x555331C05050837C241C00740431C0EB05B80100000021C07516837C24200074" & "0431C0EB05B80100000021C07502EB07B801000000EB0231C021C0740431C0EB" & "5AC70424000000008B5C241883C3FC3B1C247C3E8B5C241C031C24895C24048B" & "6C2404807D0000740431C0EB05B80100000021C074168B5C2420031C2483C303" & "895C24048B6C2404C64500FF8304240471B6B801000000EB0231C083C4085B5D" & "C21000"))
  7730.         EndIf
  7731.     EndIf
  7732.     Return $PPROC
  7733. EndFunc   ;==>__XORPROC
  7734. #EndRegion Embedded DLL Functions
  7735. #Region Internal Functions
  7736. Func __INIT($DDATA)
  7737.     Local $ILENGTH = BinaryLen($DDATA)
  7738.     Local $ARET = DllCall("kernel32.dll", "ptr", "VirtualAlloc", "ptr", 0, "ulong_ptr", $ILENGTH, "dword", 4096, "dword", 64)
  7739.     If @error Or Not $ARET[0] Then __FATALEXIT(1, "Error allocating memory.")
  7740.     Local $TDATA = DllStructCreate("byte[" & $ILENGTH & "]", $ARET[0])
  7741.     DllStructSetData($TDATA, 1, $DDATA)
  7742.     Return $ARET[0]
  7743. EndFunc   ;==>__INIT
  7744. #EndRegion Internal Functions
  7745. #Region Global Variables and Constants
  7746. Global Const $DI_MASK = 1
  7747. Global Const $DI_IMAGE = 2
  7748. Global Const $DI_NORMAL = 3
  7749. Global Const $DI_COMPAT = 4
  7750. Global Const $DI_DEFAULTSIZE = 8
  7751. Global Const $DI_NOMIRROR = 16
  7752. Global Const $DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = 1
  7753. Global Const $DISPLAY_DEVICE_MULTI_DRIVER = 2
  7754. Global Const $DISPLAY_DEVICE_PRIMARY_DEVICE = 4
  7755. Global Const $DISPLAY_DEVICE_MIRRORING_DRIVER = 8
  7756. Global Const $DISPLAY_DEVICE_VGA_COMPATIBLE = 16
  7757. Global Const $DISPLAY_DEVICE_REMOVABLE = 32
  7758. Global Const $DISPLAY_DEVICE_DISCONNECT = 33554432
  7759. Global Const $DISPLAY_DEVICE_REMOTE = 67108864
  7760. Global Const $DISPLAY_DEVICE_MODESPRUNED = 134217728
  7761. #EndRegion Global Variables and Constants
  7762. #Region Functions list
  7763. #EndRegion Functions list
  7764. #Region Public Functions
  7765. Func _WinAPI_CreateCompatibleDC($HDC)
  7766.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateCompatibleDC", "handle", $HDC)
  7767.     If @error Then Return SetError(@error, @extended, 0)
  7768.     Return $ARESULT[0]
  7769. EndFunc   ;==>_WinAPI_CreateCompatibleDC
  7770. Func _WinAPI_DeleteDC($HDC)
  7771.     Local $ARESULT = DllCall("gdi32.dll", "bool", "DeleteDC", "handle", $HDC)
  7772.     If @error Then Return SetError(@error, @extended, False)
  7773.     Return $ARESULT[0]
  7774. EndFunc   ;==>_WinAPI_DeleteDC
  7775. Func _WinAPI_DrawEdge($HDC, $TRECT, $IEDGETYPE, $IFLAGS)
  7776.     Local $ARESULT = DllCall("user32.dll", "bool", "DrawEdge", "handle", $HDC, "struct*", $TRECT, "uint", $IEDGETYPE, "uint", $IFLAGS)
  7777.     If @error Then Return SetError(@error, @extended, False)
  7778.     Return $ARESULT[0]
  7779. EndFunc   ;==>_WinAPI_DrawEdge
  7780. Func _WinAPI_DrawFrameControl($HDC, $TRECT, $ITYPE, $ISTATE)
  7781.     Local $ARESULT = DllCall("user32.dll", "bool", "DrawFrameControl", "handle", $HDC, "struct*", $TRECT, "uint", $ITYPE, "uint", $ISTATE)
  7782.     If @error Then Return SetError(@error, @extended, False)
  7783.     Return $ARESULT[0]
  7784. EndFunc   ;==>_WinAPI_DrawFrameControl
  7785. Func _WinAPI_DrawIcon($HDC, $IX, $IY, $HICON)
  7786.     Local $ARESULT = DllCall("user32.dll", "bool", "DrawIcon", "handle", $HDC, "int", $IX, "int", $IY, "handle", $HICON)
  7787.     If @error Then Return SetError(@error, @extended, False)
  7788.     Return $ARESULT[0]
  7789. EndFunc   ;==>_WinAPI_DrawIcon
  7790. Func _WinAPI_DrawIconEx($HDC, $IX, $IY, $HICON, $IWIDTH = 0, $IHEIGHT = 0, $ISTEP = 0, $HBRUSH = 0, $IFLAGS = 3)
  7791.     Local $IOPTIONS
  7792.     Switch $IFLAGS
  7793.         Case 1
  7794.             $IOPTIONS = $DI_MASK
  7795.         Case 2
  7796.             $IOPTIONS = $DI_IMAGE
  7797.         Case 3
  7798.             $IOPTIONS = $DI_NORMAL
  7799.         Case 4
  7800.             $IOPTIONS = $DI_COMPAT
  7801.         Case 5
  7802.             $IOPTIONS = $DI_DEFAULTSIZE
  7803.         Case Else
  7804.             $IOPTIONS = $DI_NOMIRROR
  7805.     EndSwitch
  7806.     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)
  7807.     If @error Then Return SetError(@error, @extended, False)
  7808.     Return $ARESULT[0]
  7809. EndFunc   ;==>_WinAPI_DrawIconEx
  7810. Func _WinAPI_DrawText($HDC, $STEXT, ByRef $TRECT, $IFLAGS)
  7811.     Local $ARESULT = DllCall("user32.dll", "int", "DrawTextW", "handle", $HDC, "wstr", $STEXT, "int", -1, "struct*", $TRECT, "uint", $IFLAGS)
  7812.     If @error Then Return SetError(@error, @extended, 0)
  7813.     Return $ARESULT[0]
  7814. EndFunc   ;==>_WinAPI_DrawText
  7815. Func _WinAPI_EnumDisplayDevices($SDEVICE, $IDEVNUM)
  7816.     Local $TNAME = 0, $IFLAGS = 0, $ADEVICE[5]
  7817.     If $SDEVICE <> "" Then
  7818.         $TNAME = DllStructCreate("wchar Text[" & StringLen($SDEVICE) + 1 & "]")
  7819.         DllStructSetData($TNAME, "Text", $SDEVICE)
  7820.     EndIf
  7821.     Local Const $TAGDISPLAY_DEVICE = "dword Size;wchar Name[32];wchar String[128];dword Flags;wchar ID[128];wchar Key[128]"
  7822.     Local $TDEVICE = DllStructCreate($TAGDISPLAY_DEVICE)
  7823.     Local $IDEVICE = DllStructGetSize($TDEVICE)
  7824.     DllStructSetData($TDEVICE, "Size", $IDEVICE)
  7825.     Local $ARET = DllCall("user32.dll", "bool", "EnumDisplayDevicesW", "struct*", $TNAME, "dword", $IDEVNUM, "struct*", $TDEVICE, "dword", 1)
  7826.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  7827.     Local $IN = DllStructGetData($TDEVICE, "Flags")
  7828.     If BitAND($IN, $DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) <> 0 Then $IFLAGS = BitOR($IFLAGS, 1)
  7829.     If BitAND($IN, $DISPLAY_DEVICE_PRIMARY_DEVICE) <> 0 Then $IFLAGS = BitOR($IFLAGS, 2)
  7830.     If BitAND($IN, $DISPLAY_DEVICE_MIRRORING_DRIVER) <> 0 Then $IFLAGS = BitOR($IFLAGS, 4)
  7831.     If BitAND($IN, $DISPLAY_DEVICE_VGA_COMPATIBLE) <> 0 Then $IFLAGS = BitOR($IFLAGS, 8)
  7832.     If BitAND($IN, $DISPLAY_DEVICE_REMOVABLE) <> 0 Then $IFLAGS = BitOR($IFLAGS, 16)
  7833.     If BitAND($IN, $DISPLAY_DEVICE_MODESPRUNED) <> 0 Then $IFLAGS = BitOR($IFLAGS, 32)
  7834.     $ADEVICE[0] = True
  7835.     $ADEVICE[1] = DllStructGetData($TDEVICE, "Name")
  7836.     $ADEVICE[2] = DllStructGetData($TDEVICE, "String")
  7837.     $ADEVICE[3] = $IFLAGS
  7838.     $ADEVICE[4] = DllStructGetData($TDEVICE, "ID")
  7839.     Return $ADEVICE
  7840. EndFunc   ;==>_WinAPI_EnumDisplayDevices
  7841. Func _WinAPI_FillRect($HDC, $TRECT, $HBRUSH)
  7842.     Local $ARESULT
  7843.     If IsPtr($HBRUSH) Then
  7844.         $ARESULT = DllCall("user32.dll", "int", "FillRect", "handle", $HDC, "struct*", $TRECT, "handle", $HBRUSH)
  7845.     Else
  7846.         $ARESULT = DllCall("user32.dll", "int", "FillRect", "handle", $HDC, "struct*", $TRECT, "dword_ptr", $HBRUSH)
  7847.     EndIf
  7848.     If @error Then Return SetError(@error, @extended, False)
  7849.     Return $ARESULT[0]
  7850. EndFunc   ;==>_WinAPI_FillRect
  7851. Func _WinAPI_FrameRect($HDC, $TRECT, $HBRUSH)
  7852.     Local $ARESULT = DllCall("user32.dll", "int", "FrameRect", "handle", $HDC, "struct*", $TRECT, "handle", $HBRUSH)
  7853.     If @error Then Return SetError(@error, @extended, False)
  7854.     Return $ARESULT[0]
  7855. EndFunc   ;==>_WinAPI_FrameRect
  7856. Func _WinAPI_GetBkMode($HDC)
  7857.     Local $ARESULT = DllCall("gdi32.dll", "int", "GetBkMode", "handle", $HDC)
  7858.     If @error Then Return SetError(@error, @extended, 0)
  7859.     Return $ARESULT[0]
  7860. EndFunc   ;==>_WinAPI_GetBkMode
  7861. Func _WinAPI_GetDC($HWND)
  7862.     Local $ARESULT = DllCall("user32.dll", "handle", "GetDC", "hwnd", $HWND)
  7863.     If @error Then Return SetError(@error, @extended, 0)
  7864.     Return $ARESULT[0]
  7865. EndFunc   ;==>_WinAPI_GetDC
  7866. Func _WinAPI_GetDCEx($HWND, $HRGN, $IFLAGS)
  7867.     Local $ARET = DllCall("user32.dll", "handle", "GetDCEx", "hwnd", $HWND, "handle", $HRGN, "dword", $IFLAGS)
  7868.     If @error Then Return SetError(@error, @extended, 0)
  7869.     Return $ARET[0]
  7870. EndFunc   ;==>_WINAPI_GETDCEX
  7871. Func _WinAPI_GetDeviceCaps($HDC, $IINDEX)
  7872.     Local $ARESULT = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $HDC, "int", $IINDEX)
  7873.     If @error Then Return SetError(@error, @extended, 0)
  7874.     Return $ARESULT[0]
  7875. EndFunc   ;==>_WinAPI_GetDeviceCaps
  7876. Func _WinAPI_GetTextColor($HDC)
  7877.     Local $ARET = DllCall("gdi32.dll", "dword", "GetTextColor", "handle", $HDC)
  7878.     If @error Or ($ARET[0] = 4294967295) Then Return SetError(@error, @extended, -1)
  7879.     Return __RGB($ARET[0])
  7880. EndFunc   ;==>_WINAPI_GETTEXTCOLOR
  7881. Func _WinAPI_GetWindowDC($HWND)
  7882.     Local $ARESULT = DllCall("user32.dll", "handle", "GetWindowDC", "hwnd", $HWND)
  7883.     If @error Then Return SetError(@error, @extended, 0)
  7884.     Return $ARESULT[0]
  7885. EndFunc   ;==>_WinAPI_GetWindowDC
  7886. Func _WinAPI_PrintWindow($HWND, $HDC, $BCLIENT = False)
  7887.     Local $ARET = DllCall("user32.dll", "bool", "PrintWindow", "hwnd", $HWND, "handle", $HDC, "uint", $BCLIENT)
  7888.     If @error Then Return SetError(@error, @extended, False)
  7889.     Return $ARET[0]
  7890. EndFunc   ;==>_WINAPI_PRINTWINDOW
  7891. Func _WinAPI_ReleaseDC($HWND, $HDC)
  7892.     Local $ARESULT = DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $HWND, "handle", $HDC)
  7893.     If @error Then Return SetError(@error, @extended, False)
  7894.     Return $ARESULT[0]
  7895. EndFunc   ;==>_WinAPI_ReleaseDC
  7896. Func _WinAPI_RestoreDC($HDC, $IID)
  7897.     Local $ARET = DllCall("gdi32.dll", "bool", "RestoreDC", "handle", $HDC, "int", $IID)
  7898.     If @error Then Return SetError(@error, @extended, False)
  7899.     Return $ARET[0]
  7900. EndFunc   ;==>_WINAPI_RESTOREDC
  7901. Func _WinAPI_SaveDC($HDC)
  7902.     Local $ARET = DllCall("gdi32.dll", "int", "SaveDC", "handle", $HDC)
  7903.     If @error Then Return SetError(@error, @extended, 0)
  7904.     Return $ARET[0]
  7905. EndFunc   ;==>_WINAPI_SAVEDC
  7906. Func _WinAPI_SetBkColor($HDC, $ICOLOR)
  7907.     Local $ARESULT = DllCall("gdi32.dll", "INT", "SetBkColor", "handle", $HDC, "INT", $ICOLOR)
  7908.     If @error Then Return SetError(@error, @extended, -1)
  7909.     Return $ARESULT[0]
  7910. EndFunc   ;==>_WinAPI_SetBkColor
  7911. Func _WinAPI_SetBkMode($HDC, $IBKMODE)
  7912.     Local $ARESULT = DllCall("gdi32.dll", "int", "SetBkMode", "handle", $HDC, "int", $IBKMODE)
  7913.     If @error Then Return SetError(@error, @extended, 0)
  7914.     Return $ARESULT[0]
  7915. EndFunc   ;==>_WinAPI_SetBkMode
  7916. Func _WinAPI_SetTextColor($HDC, $ICOLOR)
  7917.     Local $ARESULT = DllCall("gdi32.dll", "INT", "SetTextColor", "handle", $HDC, "INT", $ICOLOR)
  7918.     If @error Then Return SetError(@error, @extended, -1)
  7919.     Return $ARESULT[0]
  7920. EndFunc   ;==>_WinAPI_SetTextColor
  7921. Func _WinAPI_TwipsPerPixelX()
  7922.     Local $HDC, $ITWIPSPERPIXELX
  7923.     $HDC = _WinAPI_GetDC(0)
  7924.     Local Const $__WINAPICONSTANT_LOGPIXELSX = 88
  7925.     $ITWIPSPERPIXELX = 1440 / _WinAPI_GetDeviceCaps($HDC, $__WINAPICONSTANT_LOGPIXELSX)
  7926.     _WinAPI_ReleaseDC(0, $HDC)
  7927.     Return $ITWIPSPERPIXELX
  7928. EndFunc   ;==>_WinAPI_TwipsPerPixelX
  7929. Func _WinAPI_TwipsPerPixelY()
  7930.     Local $HDC, $ITWIPSPERPIXELY
  7931.     $HDC = _WinAPI_GetDC(0)
  7932.     Local Const $__WINAPICONSTANT_LOGPIXELSY = 90
  7933.     $ITWIPSPERPIXELY = 1440 / _WinAPI_GetDeviceCaps($HDC, $__WINAPICONSTANT_LOGPIXELSY)
  7934.     _WinAPI_ReleaseDC(0, $HDC)
  7935.     Return $ITWIPSPERPIXELY
  7936. EndFunc   ;==>_WinAPI_TwipsPerPixelY
  7937. #EndRegion Public Functions
  7938. #Region Internal Functions
  7939. #EndRegion Internal Functions
  7940. #Region Global Variables and Constants
  7941. #EndRegion Global Variables and Constants
  7942. #Region Functions list
  7943. #EndRegion Functions list
  7944. #Region Public Functions
  7945. Global Const $TAGICONINFO = "bool Icon;dword XHotSpot;dword YHotSpot;handle hMask;handle hColor"
  7946. Func _WinAPI_AddIconTransparency($HICON, $IPERCENT = 50, $BDELETE = False)
  7947.     Local $TBITMAP, $HDIB = 0, $HRESULT = 0
  7948.     Local $AHBITMAP[2]
  7949.     Local $TICONINFO = DllStructCreate($TAGICONINFO)
  7950.     Local $ARET = DllCall("user32.dll", "bool", "GetIconInfo", "handle", $HICON, "struct*", $TICONINFO)
  7951.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  7952.     For $I = 0 To 1
  7953.         $AHBITMAP[$I] = DllStructGetData($TICONINFO, $I + 4)
  7954.     Next
  7955.     Local $IERROR = 0
  7956.     Do
  7957.         $HDIB = _WinAPI_CopyBitmap($AHBITMAP[1])
  7958.         If Not $HDIB Then
  7959.             $IERROR = 20
  7960.             ExitLoop
  7961.         EndIf
  7962.         $TBITMAP = DllStructCreate($TAGBITMAP)
  7963.         If (Not _WinAPI_GetObject($HDIB, DllStructGetSize($TBITMAP), $TBITMAP)) Or (DllStructGetData($TBITMAP, "bmBitsPixel") <> 32) Then
  7964.             $IERROR = 21
  7965.             ExitLoop
  7966.         EndIf
  7967.         $ARET = DllCall("user32.dll", "lresult", "CallWindowProc", "PTR", __TRANSPARENCYPROC(), "hwnd", 0, "uint", $IPERCENT, "wparam", DllStructGetPtr($TBITMAP), "lparam", 0)
  7968.         If @error Or Not $ARET[0] Then
  7969.             $IERROR = @error + 30
  7970.             ExitLoop
  7971.         EndIf
  7972.         If $ARET[0] = -1 Then
  7973.             $HRESULT = _WinAPI_CreateEmptyIcon(DllStructGetData($TBITMAP, "bmWidth"), DllStructGetData($TBITMAP, "bmHeight"))
  7974.         Else
  7975.             $HRESULT = _WinAPI_CreateIconIndirect($HDIB, $AHBITMAP[0])
  7976.         EndIf
  7977.         If Not $HRESULT Then $IERROR = 22
  7978.     Until 1
  7979.     If $HDIB Then
  7980.         _WinAPI_DeleteObject($HDIB)
  7981.     EndIf
  7982.     For $I = 0 To 1
  7983.         If $AHBITMAP[$I] Then
  7984.             _WinAPI_DeleteObject($AHBITMAP[$I])
  7985.         EndIf
  7986.     Next
  7987.     If $IERROR Then Return SetError($IERROR, 0, 0)
  7988.     If $BDELETE Then
  7989.         _WinAPI_DestroyIcon($HICON)
  7990.     EndIf
  7991.     Return $HRESULT
  7992. EndFunc   ;==>_WINAPI_ADDICONTRANSPARENCY
  7993. Func _WinAPI_CopyIcon($HICON)
  7994.     Local $ARESULT = DllCall("user32.dll", "handle", "CopyIcon", "handle", $HICON)
  7995.     If @error Then Return SetError(@error, @extended, 0)
  7996.     Return $ARESULT[0]
  7997. EndFunc   ;==>_WinAPI_CopyIcon
  7998. Func _WinAPI_Create32BitHICON($HICON, $BDELETE = False)
  7999.     Local $AHBITMAP[2], $HRESULT = 0
  8000.     Local $ADIB[2][2] = [[0, 0], [0, 0]]
  8001.     Local $TICONINFO = DllStructCreate($TAGICONINFO)
  8002.     Local $ARET = DllCall("user32.dll", "bool", "GetIconInfo", "handle", $HICON, "struct*", $TICONINFO)
  8003.     If @error Then Return SetError(@error, @extended, 0)
  8004.     If Not $ARET[0] Then Return SetError(10, 0, 0)
  8005.     For $I = 0 To 1
  8006.         $AHBITMAP[$I] = DllStructGetData($TICONINFO, $I + 4)
  8007.     Next
  8008.     If _WinAPI_IsAlphaBitmap($AHBITMAP[1]) Then
  8009.         $ADIB[0][0] = _WinAPI_CreateANDBitmap($AHBITMAP[1])
  8010.         If Not @error Then
  8011.             $HRESULT = _WinAPI_CreateIconIndirect($AHBITMAP[1], $ADIB[0][0])
  8012.         EndIf
  8013.     Else
  8014.         Local $TSIZE = _WinAPI_GetBitmapDimension($AHBITMAP[1])
  8015.         Local $ASIZE[2]
  8016.         For $I = 0 To 1
  8017.             $ASIZE[$I] = DllStructGetData($TSIZE, $I + 1)
  8018.         Next
  8019.         Local $HSRCDC = _WinAPI_CreateCompatibleDC(0)
  8020.         Local $HDSTDC = _WinAPI_CreateCompatibleDC(0)
  8021.         Local $HSRCSV, $HDSTSV
  8022.         For $I = 0 To 1
  8023.             $ADIB[$I][0] = _WinAPI_CreateDIB($ASIZE[0], $ASIZE[1])
  8024.             $ADIB[$I][1] = $__G_VEXT
  8025.             $HSRCSV = _WinAPI_SelectObject($HSRCDC, $AHBITMAP[$I])
  8026.             $HDSTSV = _WinAPI_SelectObject($HDSTDC, $ADIB[$I][0])
  8027.             _WinAPI_BitBlt($HDSTDC, 0, 0, $ASIZE[0], $ASIZE[1], $HSRCDC, 0, 0, 12583114)
  8028.             _WinAPI_SelectObject($HSRCDC, $HSRCSV)
  8029.             _WinAPI_SelectObject($HDSTDC, $HDSTSV)
  8030.         Next
  8031.         _WinAPI_DeleteDC($HSRCDC)
  8032.         _WinAPI_DeleteDC($HDSTDC)
  8033.         $ARET = DllCall("user32.dll", "lresult", "CallWindowProc", "ptr", __XORPROC(), "ptr", 0, "uint", $ASIZE[0] * $ASIZE[1] * 4, "wparam", $ADIB[0][1], "lparam", $ADIB[1][1])
  8034.         If Not @error And $ARET[0] Then
  8035.             $HRESULT = _WinAPI_CreateIconIndirect($ADIB[1][0], $AHBITMAP[0])
  8036.         EndIf
  8037.     EndIf
  8038.     For $I = 0 To 1
  8039.         _WinAPI_DeleteObject($AHBITMAP[$I])
  8040.         If $ADIB[$I][0] Then
  8041.             _WinAPI_DeleteObject($ADIB[$I][0])
  8042.         EndIf
  8043.     Next
  8044.     If Not $HRESULT Then Return SetError(11, 0, 0)
  8045.     If $BDELETE Then
  8046.         _WinAPI_DestroyIcon($HICON)
  8047.     EndIf
  8048.     Return $HRESULT
  8049. EndFunc   ;==>_WINAPI_CREATE32BITHICON
  8050. Func _WinAPI_CreateEmptyIcon($IWIDTH, $IHEIGHT, $IBITSPERPEL = 32)
  8051.     Local $HXOR = _WinAPI_CreateDIB($IWIDTH, $IHEIGHT, $IBITSPERPEL)
  8052.     Local $HAND = _WinAPI_CreateDIB($IWIDTH, $IHEIGHT, 1)
  8053.     Local $HDC = _WinAPI_CreateCompatibleDC(0)
  8054.     Local $HSV = _WinAPI_SelectObject($HDC, $HAND)
  8055.     Local $HBRUSH = _WinAPI_CreateSolidBrush(16777215)
  8056.     Local $TRECT = _WinAPI_CreateRect(0, 0, $IWIDTH, $IHEIGHT)
  8057.     _WinAPI_FillRect($HDC, $TRECT, $HBRUSH)
  8058.     _WinAPI_DeleteObject($HBRUSH)
  8059.     _WinAPI_SelectObject($HDC, $HSV)
  8060.     _WinAPI_DeleteDC($HDC)
  8061.     Local $HICON = _WinAPI_CreateIconIndirect($HXOR, $HAND)
  8062.     Local $IERROR = @error
  8063.     If $HXOR Then
  8064.         _WinAPI_DeleteObject($HXOR)
  8065.     EndIf
  8066.     If $HAND Then
  8067.         _WinAPI_DeleteObject($HAND)
  8068.     EndIf
  8069.     If Not $HICON Then Return SetError($IERROR + 10, 0, 0)
  8070.     Return $HICON
  8071. EndFunc   ;==>_WINAPI_CREATEEMPTYICON
  8072. Func _WinAPI_CreateIcon($HINSTANCE, $IWIDTH, $IHEIGHT, $IPLANES, $IBITSPIXEL, $PANDBITS, $PXORBITS)
  8073.     Local $ARET = DllCall("user32.dll", "handle", "CreateIcon", "handle", $HINSTANCE, "int", $IWIDTH, "int", $IHEIGHT, "byte", $IPLANES, "byte", $IBITSPIXEL, "struct*", $PANDBITS, "struct*", $PXORBITS)
  8074.     If @error Then Return SetError(@error, @extended, 0)
  8075.     Return $ARET[0]
  8076. EndFunc   ;==>_WINAPI_CREATEICON
  8077. Func _WinAPI_CreateIconFromResourceEx($PDATA, $ISIZE, $BICON = True, $IXDESIREDPIXELS = 0, $IYDESIREDPIXELS = 0, $IFLAGS = 0)
  8078.     Local $ARET = DllCall("user32.dll", "handle", "CreateIconFromResourceEx", "ptr", $PDATA, "dword", $ISIZE, "bool", $BICON, "dword", 196608, "int", $IXDESIREDPIXELS, "int", $IYDESIREDPIXELS, "uint", $IFLAGS)
  8079.     If @error Then Return SetError(@error, @extended, 0)
  8080.     Return $ARET[0]
  8081. EndFunc   ;==>_WINAPI_CREATEICONFROMRESOURCEEX
  8082. Func _WinAPI_CreateIconIndirect($HBITMAP, $HMASK, $IXHOTSPOT = 0, $IYHOTSPOT = 0, $BICON = True)
  8083.     Local $TICONINFO = DllStructCreate($TAGICONINFO)
  8084.     DllStructSetData($TICONINFO, 1, $BICON)
  8085.     DllStructSetData($TICONINFO, 2, $IXHOTSPOT)
  8086.     DllStructSetData($TICONINFO, 3, $IYHOTSPOT)
  8087.     DllStructSetData($TICONINFO, 4, $HMASK)
  8088.     DllStructSetData($TICONINFO, 5, $HBITMAP)
  8089.     Local $ARET = DllCall("user32.dll", "handle", "CreateIconIndirect", "struct*", $TICONINFO)
  8090.     If @error Then Return SetError(@error, @extended, 0)
  8091.     Return $ARET[0]
  8092. EndFunc   ;==>_WINAPI_CREATEICONINDIRECT
  8093. Func _WinAPI_DestroyIcon($HICON)
  8094.     Local $ARESULT = DllCall("user32.dll", "bool", "DestroyIcon", "handle", $HICON)
  8095.     If @error Then Return SetError(@error, @extended, False)
  8096.     Return $ARESULT[0]
  8097. EndFunc   ;==>_WinAPI_DestroyIcon
  8098. Func _WinAPI_ExtractIcon($SICON, $IINDEX, $BSMALL = False)
  8099.     Local $PLARGE, $PSMALL, $TPTR = DllStructCreate("ptr")
  8100.     If $BSMALL Then
  8101.         $PLARGE = 0
  8102.         $PSMALL = DllStructGetPtr($TPTR)
  8103.     Else
  8104.         $PLARGE = DllStructGetPtr($TPTR)
  8105.         $PSMALL = 0
  8106.     EndIf
  8107.     DllCall("shell32.dll", "uint", "ExtractIconExW", "wstr", $SICON, "int", $IINDEX, "ptr", $PLARGE, "ptr", $PSMALL, "uint", 1)
  8108.     If @error Then Return SetError(@error, @extended, 0)
  8109.     Return DllStructGetData($TPTR, 1)
  8110. EndFunc   ;==>_WINAPI_EXTRACTICON
  8111. Func _WinAPI_ExtractIconEx($SFILEPATH, $IINDEX, $PALARGE, $PASMALL, $IICONS)
  8112.     Local $ARESULT = DllCall("shell32.dll", "uint", "ExtractIconExW", "wstr", $SFILEPATH, "int", $IINDEX, "struct*", $PALARGE, "struct*", $PASMALL, "uint", $IICONS)
  8113.     If @error Then Return SetError(@error, @extended, 0)
  8114.     Return $ARESULT[0]
  8115. EndFunc   ;==>_WinAPI_ExtractIconEx
  8116. Func _WinAPI_FileIconInit($BRESTORE = True)
  8117.     Local $ARET = DllCall("shell32.dll", "int", 660, "int", $BRESTORE)
  8118.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  8119.     Return 1
  8120. EndFunc   ;==>_WINAPI_FILEICONINIT
  8121. Func _WinAPI_GetIconDimension($HICON)
  8122.     Local $TICONINFO = DllStructCreate($TAGICONINFO)
  8123.     Local $ARET = DllCall("user32.dll", "bool", "GetIconInfo", "handle", $HICON, "struct*", $TICONINFO)
  8124.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  8125.     Local $TSIZE = _WinAPI_GetBitmapDimension(DllStructGetData($TICONINFO, 5))
  8126.     For $I = 4 To 5
  8127.         _WinAPI_DeleteObject(DllStructGetData($TICONINFO, $I))
  8128.     Next
  8129.     If Not IsDllStruct($TSIZE) Then Return SetError(20, 0, 0)
  8130.     Return $TSIZE
  8131. EndFunc   ;==>_WINAPI_GETICONDIMENSION
  8132. Func _WinAPI_GetIconInfo($HICON)
  8133.     Local $TINFO = DllStructCreate($TAGICONINFO)
  8134.     Local $ARET = DllCall("user32.dll", "bool", "GetIconInfo", "handle", $HICON, "struct*", $TINFO)
  8135.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  8136.     Local $AICON[6]
  8137.     $AICON[0] = True
  8138.     $AICON[1] = DllStructGetData($TINFO, "Icon") <> 0
  8139.     $AICON[2] = DllStructGetData($TINFO, "XHotSpot")
  8140.     $AICON[3] = DllStructGetData($TINFO, "YHotSpot")
  8141.     $AICON[4] = DllStructGetData($TINFO, "hMask")
  8142.     $AICON[5] = DllStructGetData($TINFO, "hColor")
  8143.     Return $AICON
  8144. EndFunc   ;==>_WinAPI_GetIconInfo
  8145. Func _WinAPI_GetIconInfoEx($HICON)
  8146.     Local $TIIEX = DllStructCreate("dword;int;dword;dword;ptr;ptr;ushort;wchar[260];wchar[260]")
  8147.     DllStructSetData($TIIEX, 1, DllStructGetSize($TIIEX))
  8148.     Local $ARET = DllCall("user32.dll", "bool", "GetIconInfoExW", "handle", $HICON, "struct*", $TIIEX)
  8149.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  8150.     Local $ARESULT[8]
  8151.     For $I = 0 To 7
  8152.         $ARESULT[$I] = DllStructGetData($TIIEX, $I + 2)
  8153.     Next
  8154.     Return $ARESULT
  8155. EndFunc   ;==>_WINAPI_GETICONINFOEX
  8156. Func _WinAPI_LoadIcon($HINSTANCE, $SNAME)
  8157.     Local $STYPEOFNAME = "int"
  8158.     If IsString($SNAME) Then
  8159.         $STYPEOFNAME = "wstr"
  8160.     EndIf
  8161.     Local $ARET = DllCall("user32.dll", "handle", "LoadIconW", "handle", $HINSTANCE, $STYPEOFNAME, $SNAME)
  8162.     If @error Then Return SetError(@error, @extended, 0)
  8163.     Return $ARET[0]
  8164. EndFunc   ;==>_WINAPI_LOADICON
  8165. Func _WinAPI_LoadIconMetric($HINSTANCE, $SNAME, $IMETRIC)
  8166.     Local $STYPEOFNAME = "int"
  8167.     If IsString($SNAME) Then
  8168.         $STYPEOFNAME = "wstr"
  8169.     EndIf
  8170.     Local $ARET = DllCall("comctl32.dll", "long", "LoadIconMetric", "handle", $HINSTANCE, $STYPEOFNAME, $SNAME, "int", $IMETRIC, "handle*", 0)
  8171.     If @error Then Return SetError(@error, @extended, 0)
  8172.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8173.     Return $ARET[4]
  8174. EndFunc   ;==>_WINAPI_LOADICONMETRIC
  8175. Func _WinAPI_LoadIconWithScaleDown($HINSTANCE, $SNAME, $IWIDTH, $IHEIGHT)
  8176.     Local $STYPEOFNAME = "int"
  8177.     If IsString($SNAME) Then
  8178.         $STYPEOFNAME = "wstr"
  8179.     EndIf
  8180.     Local $ARET = DllCall("comctl32.dll", "long", "LoadIconWithScaleDown", "handle", $HINSTANCE, $STYPEOFNAME, $SNAME, "int", $IWIDTH, "int", $IHEIGHT, "handle*", 0)
  8181.     If @error Then Return SetError(@error, @extended, 0)
  8182.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8183.     Return $ARET[5]
  8184. EndFunc   ;==>_WINAPI_LOADICONWITHSCALEDOWN
  8185. Func _WinAPI_LoadShell32Icon($IICONID)
  8186.     Local $TICONS = DllStructCreate("ptr Data")
  8187.     Local $IICONS = _WinAPI_ExtractIconEx("shell32.dll", $IICONID, 0, $TICONS, 1)
  8188.     If @error Then Return SetError(@error, @extended, 0)
  8189.     If $IICONS <= 0 Then Return SetError(10, 0, 0)
  8190.     Return DllStructGetData($TICONS, "Data")
  8191. EndFunc   ;==>_WinAPI_LoadShell32Icon
  8192. Func _WinAPI_LookupIconIdFromDirectoryEx($PDATA, $BICON = True, $IXDESIREDPIXELS = 0, $IYDESIREDPIXELS = 0, $IFLAGS = 0)
  8193.     Local $ARET = DllCall("user32.dll", "int", "LookupIconIdFromDirectoryEx", "ptr", $PDATA, "bool", $BICON, "int", $IXDESIREDPIXELS, "int", $IYDESIREDPIXELS, "uint", $IFLAGS)
  8194.     If @error Then Return SetError(@error, @extended, 0)
  8195.     Return $ARET[0]
  8196. EndFunc   ;==>_WINAPI_LOOKUPICONIDFROMDIRECTORYEX
  8197. Func _WinAPI_MirrorIcon($HICON, $BDELETE = False)
  8198.     If Not $BDELETE Then
  8199.         $HICON = _WinAPI_CopyIcon($HICON)
  8200.     EndIf
  8201.     Local $ARET = DllCall("comctl32.dll", "int", 414, "ptr", 0, "ptr*", $HICON)
  8202.     If @error Or Not $ARET[0] Then
  8203.         Local $IERROR = @error + 10
  8204.         If $HICON And Not $BDELETE Then
  8205.             _WinAPI_DestroyIcon($HICON)
  8206.         EndIf
  8207.         Return SetError($IERROR, 0, 0)
  8208.     EndIf
  8209.     Return $ARET[2]
  8210. EndFunc   ;==>_WINAPI_MIRRORICON
  8211. #EndRegion Public Functions
  8212. #Region Embedded DLL Functions
  8213. Func __TRANSPARENCYPROC()
  8214.     Static $PPROC = 0
  8215.     If Not $PPROC Then
  8216.         If @AutoItX64 Then
  8217.             $PPROC = __INIT(Binary("0x48894C240848895424104C894424184C894C24205541574831C0505050505050" & "4883EC284883BC24800000000074054831C0EB0748C7C0010000004821C07522" & "488BAC248000000048837D180074054831C0EB0748C7C0010000004821C07502" & "EB0948C7C001000000EB034831C04821C0740B4831C04863C0E93C0100004C63" & "7C24784983FF647E0F48C7C0010000004863C0E9220100004C637C24784D21FF" & "7D08C74424780000000048C74424280100000048C74424300000000048C74424" & "3800000000488BAC24800000004C637D04488BAC2480000000486345084C0FAF" & "F849C1E7024983C7FC4C3B7C24380F8C88000000488BAC24800000004C8B7D18" & "4C037C24384983C7034C897C2440488B6C2440480FB64500505888442448807C" & "244800744B4C0FB67C244848634424784C0FAFF84C89F848C7C1640000004899" & "48F7F94989C74C89F850488B6C244858884500488B6C2440807D0000740948C7" & "4424280000000048C7442430010000004883442438040F8149FFFFFF48837C24" & "3000741148837C242800740948C7C001000000EB034831C04821C0740E48C7C0" & "FFFFFFFF4863C0EB11EB0C48C7C0010000004863C0EB034831C04883C458415F" & "5DC3"))
  8218.         Else
  8219.             $PPROC = __INIT(Binary("0x555331C05050505050837C242800740431C0EB05B80100000021C075198B6C24" & "28837D1400740431C0EB05B80100000021C07502EB07B801000000EB0231C021" & "C0740731C0E9E50000008B5C242483FB647E0AB801000000E9D20000008B5C24" & "2421DB7D08C744242400000000C7042401000000C744240400000000C7442408" & "000000008B6C24288B5D048B6C24280FAF5D08C1E30283C3FC3B5C24087C648B" & "6C24288B5D14035C240883C303895C240C8B6C240C0FB6450088442410807C24" & "100074380FB65C24100FAF5C242489D8B96400000099F7F989C3538B6C241058" & "8845008B6C240C807D00007407C7042400000000C74424040100000083442408" & "047181837C240400740D833C24007407B801000000EB0231C021C07409B8FFFF" & "FFFFEB0BEB07B801000000EB0231C083C4145B5DC21000"))
  8220.         EndIf
  8221.     EndIf
  8222.     Return $PPROC
  8223. EndFunc   ;==>__TRANSPARENCYPROC
  8224. #EndRegion Embedded DLL Functions
  8225. #Region Global Variables and Constants
  8226. Global Const $TAGBITMAPV4HEADER = "struct;dword bV4Size;long bV4Width;long bV4Height;ushort bV4Planes;ushort bV4BitCount;dword bV4Compression;dword bV4SizeImage;long bV4XPelsPerMeter;long bV4YPelsPerMeter;dword bV4ClrUsed;dword bV4ClrImportant;dword bV4RedMask;dword bV4GreenMask;dword bV4BlueMask;dword bV4AlphaMask;dword bV4CSType;int bV4Endpoints[9];dword bV4GammaRed;dword bV4GammaGreen;dword bV4GammaBlue;endstruct"
  8227. Global Const $TAGCOLORADJUSTMENT = "ushort Size;ushort Flags;ushort IlluminantIndex;ushort RedGamma;ushort GreenGamma;ushort BlueGamma;ushort ReferenceBlack;ushort ReferenceWhite;short Contrast;short Brightness;short Colorfulness;short RedGreenTint"
  8228. Global Const $TAGDEVMODE = "wchar DeviceName[32];ushort SpecVersion;ushort DriverVersion;ushort Size;ushort DriverExtra;dword Fields;short Orientation;short PaperSize;short PaperLength;short PaperWidth;short Scale;short Copies;short DefaultSource;short PrintQuality;short Color;short Duplex;short YResolution;short TTOption;short Collate;wchar FormName[32];ushort Unused1;dword Unused2[3];dword Nup;dword Unused3;dword ICMMethod;dword ICMIntent;dword MediaType;dword DitherType;dword Reserved1;dword Reserved2;dword PanningWidth;dword PanningHeight"
  8229. Global Const $TAGDEVMODE_DISPLAY = "wchar DeviceName[32];ushort SpecVersion;ushort DriverVersion;ushort Size;ushort DriverExtra;dword Fields;" & $TAGPOINT & ";dword DisplayOrientation;dword DisplayFixedOutput;short Unused1[5];wchar Unused2[32];ushort LogPixels;dword BitsPerPel;dword PelsWidth;dword PelsHeight;dword DisplayFlags;dword DisplayFrequency"
  8230. Global Const $TAGDWM_COLORIZATION_PARAMETERS = "dword Color;dword AfterGlow;uint ColorBalance;uint AfterGlowBalance;uint BlurBalance;uint GlassReflectionIntensity; uint OpaqueBlend"
  8231. Global Const $TAGENHMETAHEADER = "struct;dword Type;dword Size;long rcBounds[4];long rcFrame[4];dword Signature;dword Version;dword Bytes;dword Records;ushort Handles;ushort Reserved;dword Description;dword OffDescription;dword PalEntries;long Device[2];long Millimeters[2];dword PixelFormat;dword OffPixelFormat;dword OpenGL;long Micrometers[2];endstruct"
  8232. Global Const $TAGEXTLOGPEN = "dword PenStyle;dword Width;uint BrushStyle;dword Color;ulong_ptr Hatch;dword NumEntries"
  8233. Global Const $TAGFONTSIGNATURE = "dword fsUsb[4];dword fsCsb[2]"
  8234. Global Const $TAGGLYPHMETRICS = "uint BlackBoxX;uint BlackBoxY;" & $TAGPOINT & ";short CellIncX;short CellIncY"
  8235. Global Const $TAGLOGBRUSH = "uint Style;dword Color;ulong_ptr Hatch"
  8236. Global Const $TAGLOGPEN = "uint Style;dword Width;dword Color"
  8237. Global Const $TAGMAT2 = "short eM11[2];short eM12[2];short eM21[2];short eM22[2]"
  8238. Global Const $TAGNEWTEXTMETRIC = $TAGTEXTMETRIC & ";dword ntmFlags;uint ntmSizeEM;uint ntmCellHeight;uint ntmAvgWidth"
  8239. Global Const $TAGNEWTEXTMETRICEX = $TAGNEWTEXTMETRIC & ";" & $TAGFONTSIGNATURE
  8240. Global Const $TAGPANOSE = "struct;byte bFamilyType;byte bSerifStyle;byte bWeight;byte bProportion;byte bContrast;byte bStrokeVariation;byte bArmStyle;byte bLetterform;byte bMidline;byte bXHeight;endstruct"
  8241. Global Const $TAGOUTLINETEXTMETRIC = "struct;uint otmSize;" & $TAGTEXTMETRIC & ";byte otmFiller;" & $TAGPANOSE & ";byte bugFiller[3];uint otmSelection;uint otmType;int otmCharSlopeRise;int otmCharSlopeRun;int otmItalicAngle;uint otmEMSquare;int otmAscent;int otmDescent;uint otmLineGap;uint otmCapEmHeight;uint otmXHeight;long otmFontBox[4];int otmMacAscent;int otmMacDescent;uint otmMacLineGap;uint otmMinimumPPEM;long otmSubscriptSize[2];long otmSubscriptOffset[2];long otmSuperscriptSize[2];long otmSuperscriptOffse[2];uint otmStrikeoutSize;int otmStrikeoutPosition;int otmUnderscoreSize;int otmUnderscorePosition;uint_ptr otmFamilyName;uint_ptr otmFaceName;uint_ptr otmStyleName;uint_ptr otmFullName;endstruct"
  8242. Global Const $TAGPAINTSTRUCT = "hwnd hDC;int fErase;dword rPaint[4];int fRestore;int fIncUpdate;byte rgbReserved[32]"
  8243. Global Const $TAGRGNDATAHEADER = "struct;dword Size;dword Type;dword Count;dword RgnSize;" & $TAGRECT & ";endstruct"
  8244. Global Const $TAGXFORM = "float eM11;float eM12;float eM21;float eM22;float eDx;float eDy"
  8245. #EndRegion Global Variables and Constants
  8246. #Region Functions list
  8247. #EndRegion Functions list
  8248. #Region Public Functions
  8249. Func _WinAPI_AbortPath($HDC)
  8250.     Local $ARET = DllCall("gdi32.dll", "bool", "AbortPath", "handle", $HDC)
  8251.     If @error Then Return SetError(@error, @extended, False)
  8252.     Return $ARET[0]
  8253. EndFunc   ;==>_WINAPI_ABORTPATH
  8254. Func _WinAPI_AddFontMemResourceEx($PDATA, $ISIZE)
  8255.     Local $ARET = DllCall("gdi32.dll", "handle", "AddFontMemResourceEx", "ptr", $PDATA, "dword", $ISIZE, "ptr", 0, "dword*", 0)
  8256.     If @error Then Return SetError(@error, @extended, 0)
  8257.     Return SetExtended($ARET[4], $ARET[0])
  8258. EndFunc   ;==>_WINAPI_ADDFONTMEMRESOURCEEX
  8259. Func _WinAPI_AddFontResourceEx($SFONT, $IFLAG = 0, $BNOTIFY = False)
  8260.     Local $ARET = DllCall("gdi32.dll", "int", "AddFontResourceExW", "wstr", $SFONT, "dword", $IFLAG, "ptr", 0)
  8261.     If @error Or Not $ARET[0] Then Return SetError(@error, @extended, 0)
  8262.     If $BNOTIFY Then
  8263.         Local Const $WM_FONTCHANGE = 29
  8264.         Local Const $HWND_BROADCAST = 65535
  8265.         DllCall("user32.dll", "lresult", "SendMessage", "hwnd", $HWND_BROADCAST, "uint", $WM_FONTCHANGE, "wparam", 0, "lparam", 0)
  8266.     EndIf
  8267.     Return $ARET[0]
  8268. EndFunc   ;==>_WINAPI_ADDFONTRESOURCEEX
  8269. Func _WinAPI_AddIconOverlay($HICON, $HOVERLAY)
  8270.     Local $ARET, $HRESULT = 0, $IERROR = 0
  8271.     Local $AHDEV[2] = [0, 0]
  8272.     Local $TSIZE = _WinAPI_GetIconDimension($HICON)
  8273.     Local $HIL = DllCall("comctl32.dll", "handle", "ImageList_Create", "int", DllStructGetData($TSIZE, 1), "int", DllStructGetData($TSIZE, 2), "uint", 33, "int", 2, "int", 2)
  8274.     If @error Or Not $HIL[0] Then Return SetError(@error + 10, @extended, 0)
  8275.     Do
  8276.         $AHDEV[0] = _WinAPI_Create32BitHICON($HICON)
  8277.         If @error Then
  8278.             $IERROR = @error + 100
  8279.             ExitLoop
  8280.         EndIf
  8281.         $ARET = DllCall("comctl32.dll", "int", "ImageList_ReplaceIcon", "handle", $HIL[0], "int", -1, "handle", $AHDEV[0])
  8282.         If @error Or ($ARET[0] = -1) Then
  8283.             $IERROR = @error + 200
  8284.             ExitLoop
  8285.         EndIf
  8286.         $AHDEV[1] = _WinAPI_Create32BitHICON($HOVERLAY)
  8287.         If @error Then
  8288.             $IERROR = @error + 300
  8289.             ExitLoop
  8290.         EndIf
  8291.         $ARET = DllCall("comctl32.dll", "int", "ImageList_ReplaceIcon", "handle", $HIL[0], "int", -1, "handle", $AHDEV[1])
  8292.         If @error Or ($ARET[0] = -1) Then
  8293.             $IERROR = @error + 400
  8294.             ExitLoop
  8295.         EndIf
  8296.         $ARET = DllCall("comctl32.dll", "bool", "ImageList_SetOverlayImage", "handle", $HIL[0], "int", 1, "int", 1)
  8297.         If @error Or Not $ARET[0] Then
  8298.             $IERROR = @error + 500
  8299.             ExitLoop
  8300.         EndIf
  8301.         $ARET = DllCall("comctl32.dll", "handle", "ImageList_GetIcon", "handle", $HIL[0], "int", 0, "uint", 256)
  8302.         If @error Or Not $ARET[0] Then
  8303.             $IERROR = @error + 600
  8304.             ExitLoop
  8305.         EndIf
  8306.         $HRESULT = $ARET[0]
  8307.     Until 1
  8308.     DllCall("comctl32.dll", "bool", "ImageList_Destroy", "handle", $HIL[0])
  8309.     For $I = 0 To 1
  8310.         If $AHDEV[$I] Then
  8311.             _WinAPI_DestroyIcon($AHDEV[$I])
  8312.         EndIf
  8313.     Next
  8314.     If Not $HRESULT Then Return SetError($IERROR, 0, 0)
  8315.     Return $HRESULT
  8316. EndFunc   ;==>_WINAPI_ADDICONOVERLAY
  8317. Func _WinAPI_AdjustBitmap($HBITMAP, $IWIDTH, $IHEIGHT, $IMODE = 3, $TADJUSTMENT = 0)
  8318.     Local $TOBJ = DllStructCreate($TAGBITMAP)
  8319.     Local $ARET = DllCall("gdi32.dll", "int", "GetObject", "handle", $HBITMAP, "int", DllStructGetSize($TOBJ), "struct*", $TOBJ)
  8320.     If @error Or Not $ARET[0] Then Return SetError(@error, @extended, 0)
  8321.     If $IWIDTH = -1 Then
  8322.         $IWIDTH = DllStructGetData($TOBJ, "bmWidth")
  8323.     EndIf
  8324.     If $IHEIGHT = -1 Then
  8325.         $IHEIGHT = DllStructGetData($TOBJ, "bmHeight")
  8326.     EndIf
  8327.     $ARET = DllCall("user32.dll", "handle", "GetDC", "hwnd", 0)
  8328.     Local $HDC = $ARET[0]
  8329.     $ARET = DllCall("gdi32.dll", "handle", "CreateCompatibleDC", "handle", $HDC)
  8330.     Local $HDESTDC = $ARET[0]
  8331.     $ARET = DllCall("gdi32.dll", "handle", "CreateCompatibleBitmap", "handle", $HDC, "int", $IWIDTH, "int", $IHEIGHT)
  8332.     Local $HBMP = $ARET[0]
  8333.     $ARET = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $HDESTDC, "handle", $HBMP)
  8334.     Local $HDESTSV = $ARET[0]
  8335.     $ARET = DllCall("gdi32.dll", "handle", "CreateCompatibleDC", "handle", $HDC)
  8336.     Local $HSRCDC = $ARET[0]
  8337.     $ARET = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $HSRCDC, "handle", $HBITMAP)
  8338.     Local $HSRCSV = $ARET[0]
  8339.     If _WinAPI_SetStretchBltMode($HDESTDC, $IMODE) Then
  8340.         Switch $IMODE
  8341.             Case 4
  8342.                 If IsDllStruct($TADJUSTMENT) Then
  8343.                     If Not _WinAPI_SetColorAdjustment($HDESTDC, $TADJUSTMENT) Then
  8344.                     EndIf
  8345.                 EndIf
  8346.             Case Else
  8347.         EndSwitch
  8348.     EndIf
  8349.     $ARET = _WinAPI_StretchBlt($HDESTDC, 0, 0, $IWIDTH, $IHEIGHT, $HSRCDC, 0, 0, DllStructGetData($TOBJ, "bmWidth"), DllStructGetData($TOBJ, "bmHeight"), 13369376)
  8350.     DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $HDC)
  8351.     DllCall("gdi32.dll", "handle", "SelectObject", "handle", $HDESTDC, "handle", $HDESTSV)
  8352.     DllCall("gdi32.dll", "handle", "SelectObject", "handle", $HSRCDC, "handle", $HSRCSV)
  8353.     DllCall("gdi32.dll", "bool", "DeleteDC", "handle", $HDESTDC)
  8354.     DllCall("gdi32.dll", "bool", "DeleteDC", "handle", $HSRCDC)
  8355.     If Not $ARET Then Return SetError(10, 0, 0)
  8356.     Return $HBMP
  8357. EndFunc   ;==>_WINAPI_ADJUSTBITMAP
  8358. Func _WinAPI_AlphaBlend($HDESTDC, $IXDEST, $IYDEST, $IWIDTHDEST, $IHEIGHTDEST, $HSRCDC, $IXSRC, $IYSRC, $IWIDTHSRC, $IHEIGHTSRC, $IALPHA, $BALPHA = False)
  8359.     Local $IBLEND = BitOR(BitShift(Not ($BALPHA = False), -24), BitShift(BitAND($IALPHA, 255), -16))
  8360.     Local $ARET = DllCall("gdi32.dll", "bool", "GdiAlphaBlend", "handle", $HDESTDC, "int", $IXDEST, "int", $IYDEST, "int", $IWIDTHDEST, "int", $IHEIGHTDEST, "handle", $HSRCDC, "int", $IXSRC, "int", $IYSRC, "int", $IWIDTHSRC, "int", $IHEIGHTSRC, "dword", $IBLEND)
  8361.     If @error Then Return SetError(@error, @extended, False)
  8362.     Return $ARET[0]
  8363. EndFunc   ;==>_WINAPI_ALPHABLEND
  8364. Func _WinAPI_AngleArc($HDC, $IX, $IY, $IRADIUS, $NSTARTANGLE, $NSWEEPANGLE)
  8365.     Local $ARET = DllCall("gdi32.dll", "bool", "AngleArc", "handle", $HDC, "int", $IX, "int", $IY, "dword", $IRADIUS, "float", $NSTARTANGLE, "float", $NSWEEPANGLE)
  8366.     If @error Then Return SetError(@error, @extended, False)
  8367.     Return $ARET[0]
  8368. EndFunc   ;==>_WINAPI_ANGLEARC
  8369. Func _WinAPI_Arc($HDC, $TRECT, $IXSTARTARC, $IYSTARTARC, $IXENDARC, $IYENDARC)
  8370.     Local $ARET = DllCall("gdi32.dll", "bool", "Arc", "handle", $HDC, "int", DllStructGetData($TRECT, 1), "int", DllStructGetData($TRECT, 2), "int", DllStructGetData($TRECT, 3), "int", DllStructGetData($TRECT, 4), "int", $IXSTARTARC, "int", $IYSTARTARC, "int", $IXENDARC, "int", $IYENDARC)
  8371.     If @error Then Return SetError(@error, @extended, False)
  8372.     Return $ARET[0]
  8373. EndFunc   ;==>_WINAPI_ARC
  8374. Func _WinAPI_ArcTo($HDC, $TRECT, $IXRADIAL1, $IYRADIAL1, $IXRADIAL2, $IYRADIAL2)
  8375.     Local $ARET = DllCall("gdi32.dll", "bool", "ArcTo", "handle", $HDC, "int", DllStructGetData($TRECT, 1), "int", DllStructGetData($TRECT, 2), "int", DllStructGetData($TRECT, 3), "int", DllStructGetData($TRECT, 4), "int", $IXRADIAL1, "int", $IYRADIAL1, "int", $IXRADIAL2, "int", $IYRADIAL2)
  8376.     If @error Then Return SetError(@error, @extended, False)
  8377.     Return $ARET[0]
  8378. EndFunc   ;==>_WINAPI_ARCTO
  8379. Func _WinAPI_BeginPaint($HWND, ByRef $TPAINTSTRUCT)
  8380.     $TPAINTSTRUCT = DllStructCreate($TAGPAINTSTRUCT)
  8381.     Local $ARET = DllCall("user32.dll", "handle", "BeginPaint", "hwnd", $HWND, "struct*", $TPAINTSTRUCT)
  8382.     If @error Then Return SetError(@error, @extended, 0)
  8383.     Return $ARET[0]
  8384. EndFunc   ;==>_WINAPI_BEGINPAINT
  8385. Func _WinAPI_BeginPath($HDC)
  8386.     Local $ARET = DllCall("gdi32.dll", "bool", "BeginPath", "handle", $HDC)
  8387.     If @error Then Return SetError(@error, @extended, False)
  8388.     Return $ARET[0]
  8389. EndFunc   ;==>_WINAPI_BEGINPATH
  8390. Func _WinAPI_CloseEnhMetaFile($HDC)
  8391.     Local $ARET = DllCall("gdi32.dll", "handle", "CloseEnhMetaFile", "handle", $HDC)
  8392.     If @error Then Return SetError(@error, @extended, 0)
  8393.     Return $ARET[0]
  8394. EndFunc   ;==>_WINAPI_CLOSEENHMETAFILE
  8395. Func _WinAPI_CloseFigure($HDC)
  8396.     Local $ARET = DllCall("gdi32.dll", "bool", "CloseFigure", "handle", $HDC)
  8397.     If @error Then Return SetError(@error, @extended, False)
  8398.     Return $ARET[0]
  8399. EndFunc   ;==>_WINAPI_CLOSEFIGURE
  8400. Func _WinAPI_ColorAdjustLuma($IRGB, $IPERCENT, $BSCALE = True)
  8401.     If $IRGB = -1 Then Return SetError(10, 0, -1)
  8402.     If $BSCALE Then
  8403.         $IPERCENT = Floor($IPERCENT * 10)
  8404.     EndIf
  8405.     Local $ARET = DllCall("shlwapi.dll", "dword", "ColorAdjustLuma", "dword", __RGB($IRGB), "int", $IPERCENT, "bool", $BSCALE)
  8406.     If @error Then Return SetError(@error, @extended, -1)
  8407.     Return __RGB($ARET[0])
  8408. EndFunc   ;==>_WINAPI_COLORADJUSTLUMA
  8409. Func _WinAPI_ColorHLSToRGB($IHUE, $ILUMINANCE, $ISATURATION)
  8410.     If Not $ISATURATION Then $IHUE = 160
  8411.     Local $ARET = DllCall("shlwapi.dll", "dword", "ColorHLSToRGB", "word", $IHUE, "word", $ILUMINANCE, "word", $ISATURATION)
  8412.     If @error Then Return SetError(@error, @extended, -1)
  8413.     Return __RGB($ARET[0])
  8414. EndFunc   ;==>_WINAPI_COLORHLSTORGB
  8415. Func _WinAPI_ColorRGBToHLS($IRGB, ByRef $IHUE, ByRef $ILUMINANCE, ByRef $ISATURATION)
  8416.     Local $ARET = DllCall("shlwapi.dll", "none", "ColorRGBToHLS", "dword", __RGB($IRGB), "word*", 0, "word*", 0, "word*", 0)
  8417.     If @error Then Return SetError(@error, @extended, 0)
  8418.     $IHUE = $ARET[2]
  8419.     $ILUMINANCE = $ARET[3]
  8420.     $ISATURATION = $ARET[4]
  8421.     Return 1
  8422. EndFunc   ;==>_WINAPI_COLORRGBTOHLS
  8423. Func _WinAPI_CombineTransform($TXFORM1, $TXFORM2)
  8424.     Local $TXFORM = DllStructCreate($TAGXFORM)
  8425.     Local $ARET = DllCall("gdi32.dll", "bool", "CombineTransform", "struct*", $TXFORM, "struct*", $TXFORM1, "struct*", $TXFORM2)
  8426.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  8427.     Return $TXFORM
  8428. EndFunc   ;==>_WINAPI_COMBINETRANSFORM
  8429. Func _WinAPI_CompressBitmapBits($HBITMAP, ByRef $PBUFFER, $ICOMPRESSION = 0, $IQUALITY = 100)
  8430.     If Not __DLL("gdiplus.dll") Then Return SetError(103, 0, 0)
  8431.     Local $ASIZE[2], $ICOUNT, $IFORMAT, $ILENGTH, $SMIME, $ARET, $HDC, $HSV, $HMEM, $TBITS, $TDATA, $PDATA, $IERROR = 1
  8432.     Local $HSOURCE = 0, $HIMAGE = 0, $HTOKEN = 0, $PSTREAM = 0, $TPARAM = 0
  8433.     Local $TDIB = DllStructCreate($TAGDIBSECTION)
  8434.     Do
  8435.         Switch $ICOMPRESSION
  8436.             Case 0
  8437.                 $SMIME = "image/png"
  8438.             Case 1
  8439.                 $SMIME = "image/jpeg"
  8440.             Case Else
  8441.                 $IERROR = 10
  8442.                 ExitLoop
  8443.         EndSwitch
  8444.         While $HBITMAP
  8445.             If Not _WinAPI_GetObject($HBITMAP, DllStructGetSize($TDIB), $TDIB) Then
  8446.                 $IERROR = 11
  8447.                 ExitLoop 2
  8448.             EndIf
  8449.             If (DllStructGetData($TDIB, "bmBitsPixel") = 32) And (Not DllStructGetData($TDIB, "biCompression")) Then
  8450.                 $IERROR = 12
  8451.                 ExitLoop
  8452.             EndIf
  8453.             If $HSOURCE Then
  8454.                 $IERROR = 13
  8455.                 ExitLoop 2
  8456.             EndIf
  8457.             $HSOURCE = _WinAPI_CreateDIB(DllStructGetData($TDIB, "bmWidth"), DllStructGetData($TDIB, "bmHeight"))
  8458.             If Not $HSOURCE Then
  8459.                 $IERROR = @error + 100
  8460.                 ExitLoop 2
  8461.             EndIf
  8462.             $HDC = _WinAPI_CreateCompatibleDC(0)
  8463.             $HSV = _WinAPI_SelectObject($HDC, $HSOURCE)
  8464.             If _WinAPI_DrawBitmap($HDC, 0, 0, $HBITMAP) Then
  8465.                 $HBITMAP = $HSOURCE
  8466.             Else
  8467.                 $IERROR = @error + 200
  8468.                 $HBITMAP = 0
  8469.             EndIf
  8470.             _WinAPI_SelectObject($HDC, $HSV)
  8471.             _WinAPI_DeleteDC($HDC)
  8472.         WEnd
  8473.         If Not $HBITMAP Then
  8474.             ExitLoop
  8475.         EndIf
  8476.         For $I = 0 To 1
  8477.             $ASIZE[$I] = DllStructGetData($TDIB, $I + 2)
  8478.         Next
  8479.         $TBITS = DllStructCreate("byte[" & ($ASIZE[0] * $ASIZE[1] * 4) & "]")
  8480.         If Not _WinAPI_GetBitmapBits($HBITMAP, DllStructGetSize($TBITS), $TBITS) Then
  8481.             $IERROR = @error + 300
  8482.             ExitLoop
  8483.         EndIf
  8484.         $TDATA = DllStructCreate($TAGGDIPSTARTUPINPUT)
  8485.         DllStructSetData($TDATA, "Version", 1)
  8486.         $ARET = DllCall("gdiplus.dll", "int", "GdiplusStartup", "ulong_ptr*", 0, "struct*", $TDATA, "ptr", 0)
  8487.         If @error Or $ARET[0] Then
  8488.             $IERROR = @error + 400
  8489.             ExitLoop
  8490.         EndIf
  8491.         If _WinAPI_IsAlphaBitmap($HBITMAP) Then
  8492.             $IFORMAT = 2498570
  8493.         Else
  8494.             $IFORMAT = 139273
  8495.         EndIf
  8496.         $HTOKEN = $ARET[1]
  8497.         $ARET = DllCall("gdiplus.dll", "int", "GdipCreateBitmapFromScan0", "int", $ASIZE[0], "int", $ASIZE[1], "uint", $ASIZE[0] * 4, "int", $IFORMAT, "struct*", $TBITS, "ptr*", 0)
  8498.         If @error Or $ARET[0] Then
  8499.             $IERROR = @error + 500
  8500.             ExitLoop
  8501.         EndIf
  8502.         $HIMAGE = $ARET[6]
  8503.         $ARET = DllCall("gdiplus.dll", "int", "GdipGetImageEncodersSize", "uint*", 0, "uint*", 0)
  8504.         If @error Or $ARET[0] Then
  8505.             $IERROR = @error + 600
  8506.             ExitLoop
  8507.         EndIf
  8508.         $ICOUNT = $ARET[1]
  8509.         $TDATA = DllStructCreate("byte[" & $ARET[2] & "]")
  8510.         If @error Then
  8511.             $IERROR = @error + 700
  8512.             ExitLoop
  8513.         EndIf
  8514.         $PDATA = DllStructGetPtr($TDATA)
  8515.         $ARET = DllCall("gdiplus.dll", "int", "GdipGetImageEncoders", "uint", $ICOUNT, "uint", $ARET[2], "struct*", $TDATA)
  8516.         If @error Or $ARET[0] Then
  8517.             $IERROR = @error + 800
  8518.             ExitLoop
  8519.         EndIf
  8520.         Local $TCODEC, $PENCODER = 0
  8521.         For $I = 1 To $ICOUNT
  8522.             $TCODEC = DllStructCreate($TAGGDIPIMAGECODECINFO, $PDATA)
  8523.             If Not StringInStr(_WinAPI_WideCharToMultiByte(DllStructGetData($TCODEC, "MimeType")), $SMIME) Then
  8524.                 $PDATA += DllStructGetSize($TAGGDIPIMAGECODECINFO)
  8525.             Else
  8526.                 $PENCODER = $PDATA
  8527.                 $IERROR = 0
  8528.                 ExitLoop
  8529.             EndIf
  8530.         Next
  8531.         If Not $PENCODER Then
  8532.             $IERROR = 15
  8533.             ExitLoop
  8534.         EndIf
  8535.         Switch $ICOMPRESSION
  8536.             Case 0
  8537.             Case 1
  8538.                 Local Const $TAGENCODERPARAMETER = "byte[16] GUID;ulong NumberOfValues;dword Type;ptr pValue"
  8539.                 $TPARAM = DllStructCreate("dword Count;" & $TAGENCODERPARAMETER & ";ulong Quality")
  8540.                 DllStructSetData($TPARAM, "Count", 1)
  8541.                 DllStructSetData($TPARAM, "NumberOfValues", 1)
  8542.                 DllStructSetData($TPARAM, "Type", 4)
  8543.                 DllStructSetData($TPARAM, "pValue", DllStructGetPtr($TPARAM, "Quality"))
  8544.                 DllStructSetData($TPARAM, "Quality", $IQUALITY)
  8545.                 $ARET = DllCall("ole32.dll", "long", "CLSIDFromString", "wstr", "{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}", "ptr", DllStructGetPtr($TPARAM, 2))
  8546.                 If @error Or $ARET[0] Then
  8547.                     $TPARAM = 0
  8548.                 EndIf
  8549.         EndSwitch
  8550.         $PSTREAM = _WinAPI_CreateStreamOnHGlobal()
  8551.         $ARET = DllCall("gdiplus.dll", "int", "GdipSaveImageToStream", "handle", $HIMAGE, "ptr", $PSTREAM, "ptr", $PENCODER, "struct*", $TPARAM)
  8552.         If @error Or $ARET[0] Then
  8553.             $IERROR = @error + 900
  8554.             ExitLoop
  8555.         EndIf
  8556.         $HMEM = _WinAPI_GetHGlobalFromStream($PSTREAM)
  8557.         $ARET = DllCall("kernel32.dll", "ulong_ptr", "GlobalSize", "handle", $HMEM)
  8558.         If @error Or Not $ARET[0] Then
  8559.             $IERROR = @error + 1000
  8560.             ExitLoop
  8561.         EndIf
  8562.         $ILENGTH = $ARET[0]
  8563.         $ARET = DllCall("kernel32.dll", "ptr", "GlobalLock", "handle", $HMEM)
  8564.         If @error Or Not $ARET[0] Then
  8565.             $IERROR = @error + 1100
  8566.             ExitLoop
  8567.         EndIf
  8568.         $PBUFFER = __HEAPREALLOC($PBUFFER, $ILENGTH, 1)
  8569.         If Not @error Then
  8570.             _WinAPI_MoveMemory($PBUFFER, $ARET[0], $ILENGTH)
  8571.         Else
  8572.             $IERROR = @error + 1300
  8573.         EndIf
  8574.     Until 1
  8575.     If $PSTREAM Then
  8576.         _WinAPI_ReleaseStream($PSTREAM)
  8577.     EndIf
  8578.     If $HIMAGE Then
  8579.         DllCall("gdiplus.dll", "int", "GdipDisposeImage", "handle", $HIMAGE)
  8580.     EndIf
  8581.     If $HTOKEN Then
  8582.         DllCall("gdiplus.dll", "none", "GdiplusShutdown", "ulong_ptr", $HTOKEN)
  8583.     EndIf
  8584.     If $HSOURCE Then
  8585.         _WinAPI_DeleteObject($HSOURCE)
  8586.     EndIf
  8587.     If $IERROR Then Return SetError($IERROR, 0, 0)
  8588.     Return $ILENGTH
  8589. EndFunc   ;==>_WINAPI_COMPRESSBITMAPBITS
  8590. Func _WinAPI_CopyEnhMetaFile($HEMF, $SFILEPATH = "")
  8591.     Local $STYPEOFFILE = "wstr"
  8592.     If Not StringStripWS($SFILEPATH, $STR_STRIPLEADING + $STR_STRIPTRAILING) Then
  8593.         $STYPEOFFILE = "ptr"
  8594.         $SFILEPATH = 0
  8595.     EndIf
  8596.     Local $ARET = DllCall("gdi32.dll", "handle", "CopyEnhMetaFileW", "handle", $HEMF, $STYPEOFFILE, $SFILEPATH)
  8597.     If @error Then Return SetError(@error, @extended, 0)
  8598.     Return $ARET[0]
  8599. EndFunc   ;==>_WINAPI_COPYENHMETAFILE
  8600. Func _WinAPI_CopyRect($TRECT)
  8601.     Local $TDATA = DllStructCreate($TAGRECT)
  8602.     Local $ARET = DllCall("user32.dll", "bool", "CopyRect", "struct*", $TDATA, "struct*", $TRECT)
  8603.     If @error Or Not $ARET[0] Then SetError(@error + 10, @extended, 0)
  8604.     Return $TDATA
  8605. EndFunc   ;==>_WINAPI_COPYRECT
  8606. Func _WinAPI_Create32BitHBITMAP($HICON, $BDIB = False, $BDELETE = False)
  8607.     Local $HBITMAP = 0
  8608.     Local $ADIB[2] = [0, 0]
  8609.     Local $HTEMP = _WinAPI_Create32BitHICON($HICON)
  8610.     If @error Then Return SetError(@error, @extended, 0)
  8611.     Local $IERROR = 0
  8612.     Do
  8613.         Local $TICONINFO = DllStructCreate($TAGICONINFO)
  8614.         Local $ARET = DllCall("user32.dll", "bool", "GetIconInfo", "handle", $HTEMP, "struct*", $TICONINFO)
  8615.         If @error Or Not $ARET[0] Then
  8616.             $IERROR = @error + 10
  8617.             ExitLoop
  8618.         EndIf
  8619.         For $I = 0 To 1
  8620.             $ADIB[$I] = DllStructGetData($TICONINFO, $I + 4)
  8621.         Next
  8622.         Local $TBITMAP = DllStructCreate($TAGBITMAP)
  8623.         If Not _WinAPI_GetObject($ADIB[0], DllStructGetSize($TBITMAP), $TBITMAP) Then
  8624.             $IERROR = @error + 20
  8625.             ExitLoop
  8626.         EndIf
  8627.         If $BDIB Then
  8628.             $HBITMAP = _WinAPI_CreateDIB(DllStructGetData($TBITMAP, "bmWidth"), DllStructGetData($TBITMAP, "bmHeight"))
  8629.             Local $HDC = _WinAPI_CreateCompatibleDC(0)
  8630.             Local $HSV = _WinAPI_SelectObject($HDC, $HBITMAP)
  8631.             _WinAPI_DrawIconEx($HDC, 0, 0, $HTEMP)
  8632.             _WinAPI_SelectObject($HDC, $HSV)
  8633.             _WinAPI_DeleteDC($HDC)
  8634.         Else
  8635.             $HBITMAP = $ADIB[1]
  8636.             $ADIB[1] = 0
  8637.         EndIf
  8638.     Until 1
  8639.     For $I = 0 To 1
  8640.         If $ADIB[$I] Then
  8641.             _WinAPI_DeleteObject($ADIB[$I])
  8642.         EndIf
  8643.     Next
  8644.     _WinAPI_DestroyIcon($HTEMP)
  8645.     If $IERROR Then Return SetError($IERROR, 0, 0)
  8646.     If Not $HBITMAP Then Return SetError(12, 0, 0)
  8647.     If $BDELETE Then
  8648.         _WinAPI_DestroyIcon($HICON)
  8649.     EndIf
  8650.     Return $HBITMAP
  8651. EndFunc   ;==>_WINAPI_CREATE32BITHBITMAP
  8652. Func _WinAPI_CreateBitmapIndirect(ByRef $TBITMAP)
  8653.     Local $ARET = DllCall("gdi32.dll", "handle", "CreateBitmapIndirect", "struct*", $TBITMAP)
  8654.     If @error Then Return SetError(@error, @extended, 0)
  8655.     Return $ARET[0]
  8656. EndFunc   ;==>_WINAPI_CREATEBITMAPINDIRECT
  8657. Func _WinAPI_CreateBrushIndirect($ISTYLE, $IRGB, $IHATCH = 0)
  8658.     Local $TLOGBRUSH = DllStructCreate($TAGLOGBRUSH)
  8659.     DllStructSetData($TLOGBRUSH, 1, $ISTYLE)
  8660.     DllStructSetData($TLOGBRUSH, 2, __RGB($IRGB))
  8661.     DllStructSetData($TLOGBRUSH, 3, $IHATCH)
  8662.     Local $ARET = DllCall("gdi32.dll", "handle", "CreateBrushIndirect", "struct*", $TLOGBRUSH)
  8663.     If @error Then Return SetError(@error, @extended, 0)
  8664.     Return $ARET[0]
  8665. EndFunc   ;==>_WINAPI_CREATEBRUSHINDIRECT
  8666. Func _WinAPI_CreateColorAdjustment($IFLAGS = 0, $IILLUMINANT = 0, $IGAMMAR = 10000, $IGAMMAG = 10000, $IGAMMAB = 10000, $IBLACK = 0, $IWHITE = 10000, $ICONTRAST = 0, $IBRIGHTNESS = 0, $ICOLORFULNESS = 0, $ITINT = 0)
  8667.     Local $TCA = DllStructCreate($TAGCOLORADJUSTMENT)
  8668.     DllStructSetData($TCA, 1, DllStructGetSize($TCA))
  8669.     DllStructSetData($TCA, 2, $IFLAGS)
  8670.     DllStructSetData($TCA, 3, $IILLUMINANT)
  8671.     DllStructSetData($TCA, 4, $IGAMMAR)
  8672.     DllStructSetData($TCA, 5, $IGAMMAG)
  8673.     DllStructSetData($TCA, 6, $IGAMMAB)
  8674.     DllStructSetData($TCA, 7, $IBLACK)
  8675.     DllStructSetData($TCA, 8, $IWHITE)
  8676.     DllStructSetData($TCA, 9, $ICONTRAST)
  8677.     DllStructSetData($TCA, 10, $IBRIGHTNESS)
  8678.     DllStructSetData($TCA, 11, $ICOLORFULNESS)
  8679.     DllStructSetData($TCA, 12, $ITINT)
  8680.     Return $TCA
  8681. EndFunc   ;==>_WINAPI_CREATECOLORADJUSTMENT
  8682. Func _WinAPI_CreateCompatibleBitmapEx($HDC, $IWIDTH, $IHEIGHT, $IRGB)
  8683.     Local $HBRUSH = _WinAPI_CreateBrushIndirect(0, $IRGB)
  8684.     Local $ARET = DllCall("gdi32.dll", "handle", "CreateCompatibleDC", "handle", $HDC)
  8685.     Local $HDESTDC = $ARET[0]
  8686.     $ARET = DllCall("gdi32.dll", "handle", "CreateCompatibleBitmap", "handle", $HDC, "int", $IWIDTH, "int", $IHEIGHT)
  8687.     Local $HBMP = $ARET[0]
  8688.     $ARET = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $HDESTDC, "handle", $HBMP)
  8689.     Local $HDESTSV = $ARET[0]
  8690.     Local $TRECT = _WinAPI_CreateRectEx(0, 0, $IWIDTH, $IHEIGHT)
  8691.     Local $IERROR = 0
  8692.     $ARET = DllCall("user32.dll", "int", "FillRect", "handle", $HDESTDC, "struct*", $TRECT, "handle", $HBRUSH)
  8693.     If @error Or Not $ARET[0] Then
  8694.         $IERROR = @error + 10
  8695.         _WinAPI_DeleteObject($HBMP)
  8696.     EndIf
  8697.     _WinAPI_DeleteObject($HBRUSH)
  8698.     DllCall("gdi32.dll", "handle", "SelectObject", "handle", $HDESTDC, "handle", $HDESTSV)
  8699.     DllCall("gdi32.dll", "bool", "DeleteDC", "handle", $HDESTDC)
  8700.     If $IERROR Then Return SetError($IERROR, 0, 0)
  8701.     Return $HBMP
  8702. EndFunc   ;==>_WINAPI_CREATECOMPATIBLEBITMAPEX
  8703. Func _WinAPI_CreateDIBitmap($HDC, ByRef $TBITMAPINFO, $IUSAGE, $PBITS = 0)
  8704.     Local $IINIT = 0
  8705.     If $PBITS Then
  8706.         $IINIT = 4
  8707.     EndIf
  8708.     Local $ARET = DllCall("gdi32.dll", "handle", "CreateDIBitmap", "handle", $HDC, "struct*", $TBITMAPINFO, "dword", $IINIT, "struct*", $PBITS, "struct*", $TBITMAPINFO, "uint", $IUSAGE)
  8709.     If @error Then Return SetError(@error, @extended, 0)
  8710.     Return $ARET[0]
  8711. EndFunc   ;==>_WINAPI_CREATEDIBITMAP
  8712. Func _WinAPI_CreateEllipticRgn($TRECT)
  8713.     Local $ARET = DllCall("gdi32.dll", "handle", "CreateEllipticRgnIndirect", "struct*", $TRECT)
  8714.     If @error Then Return SetError(@error, @extended, False)
  8715.     Return $ARET[0]
  8716. EndFunc   ;==>_WINAPI_CREATEELLIPTICRGN
  8717. Func _WinAPI_CreateEnhMetaFile($HDC = 0, $TRECT = 0, $BPIXELS = False, $SFILEPATH = "", $SDESCRIPTION = "")
  8718.     Local $STYPEOFFILE = "wstr"
  8719.     If Not StringStripWS($SFILEPATH, $STR_STRIPLEADING + $STR_STRIPTRAILING) Then
  8720.         $STYPEOFFILE = "ptr"
  8721.         $SFILEPATH = 0
  8722.     EndIf
  8723.     Local $TDATA = 0, $ADATA = StringSplit($SDESCRIPTION, "|", $STR_NOCOUNT)
  8724.     If UBound($ADATA) < 2 Then
  8725.         ReDim $ADATA[2]
  8726.         $ADATA[1] = ""
  8727.     EndIf
  8728.     For $I = 0 To 1
  8729.         $ADATA[$I] = StringStripWS($ADATA[$I], $STR_STRIPLEADING + $STR_STRIPTRAILING)
  8730.     Next
  8731.     If ($ADATA[0]) Or ($ADATA[1]) Then
  8732.         $TDATA = _WinAPI_ArrayToStruct($ADATA)
  8733.     EndIf
  8734.     Local $IXP, $IYP, $IXM, $IYM, $HREF = 0
  8735.     If $BPIXELS And (IsDllStruct($TRECT)) Then
  8736.         If Not $HDC Then
  8737.             $HREF = _WinAPI_GetDC(0)
  8738.         EndIf
  8739.         $IXP = _WinAPI_GetDeviceCaps($HREF, 8)
  8740.         $IYP = _WinAPI_GetDeviceCaps($HREF, 10)
  8741.         $IXM = _WinAPI_GetDeviceCaps($HREF, 4)
  8742.         $IYM = _WinAPI_GetDeviceCaps($HREF, 6)
  8743.         If $HREF Then
  8744.             _WinAPI_ReleaseDC(0, $HREF)
  8745.         EndIf
  8746.         For $I = 1 To 3 Step 2
  8747.             DllStructSetData($TRECT, $I, Round(DllStructGetData($TRECT, $I) * $IXM / $IXP * 100))
  8748.         Next
  8749.         For $I = 2 To 4 Step 2
  8750.             DllStructSetData($TRECT, $I, Round(DllStructGetData($TRECT, $I) * $IYM / $IYP * 100))
  8751.         Next
  8752.     EndIf
  8753.     Local $ARET = DllCall("gdi32.dll", "handle", "CreateEnhMetaFileW", "handle", $HDC, $STYPEOFFILE, $SFILEPATH, "struct*", $TRECT, "struct*", $TDATA)
  8754.     If @error Then Return SetError(@error, @extended, 0)
  8755.     Return $ARET[0]
  8756. EndFunc   ;==>_WINAPI_CREATEENHMETAFILE
  8757. Func _WinAPI_CreateFontEx($IHEIGHT, $IWIDTH = 0, $IESCAPEMENT = 0, $IORIENTATION = 0, $IWEIGHT = 400, $BITALIC = False, $BUNDERLINE = False, $BSTRIKEOUT = False, $ICHARSET = 1, $IOUTPRECISION = 0, $ICLIPPRECISION = 0, $IQUALITY = 0, $IPITCHANDFAMILY = 0, $SFACENAME = "", $ISTYLE = 0)
  8758.     Local $ARET = DllCall("gdi32.dll", "handle", "CreateFontW", "int", $IHEIGHT, "int", $IWIDTH, "int", $IESCAPEMENT, "int", $IORIENTATION, "int", $IWEIGHT, "dword", $BITALIC, "dword", $BUNDERLINE, "dword", $BSTRIKEOUT, "dword", $ICHARSET, "dword", $IOUTPRECISION, "dword", $ICLIPPRECISION, "dword", $IQUALITY, "dword", $IPITCHANDFAMILY, "wstr", _WinAPI_GetFontName($SFACENAME, $ISTYLE, $ICHARSET))
  8759.     If @error Then Return SetError(@error, @extended, 0)
  8760.     Return $ARET[0]
  8761. EndFunc   ;==>_WINAPI_CREATEFONTEX
  8762. Func _WinAPI_CreateNullRgn()
  8763.     Local $ARET = DllCall("gdi32.dll", "handle", "CreateRectRgn", "int", 0, "int", 0, "int", 0, "int", 0)
  8764.     If @error Then Return SetError(@error, @extended, 0)
  8765.     Return $ARET[0]
  8766. EndFunc   ;==>_WINAPI_CREATENULLRGN
  8767. Func _WinAPI_CreatePen($IPENSTYLE, $IWIDTH, $ICOLOR)
  8768.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreatePen", "int", $IPENSTYLE, "int", $IWIDTH, "INT", $ICOLOR)
  8769.     If @error Then Return SetError(@error, @extended, 0)
  8770.     Return $ARESULT[0]
  8771. EndFunc   ;==>_WinAPI_CreatePen
  8772. Func _WinAPI_CreatePolygonRgn(Const ByRef $APOINT, $ISTART = 0, $IEND = -1, $IMODE = 1)
  8773.     If __CHECKERRORARRAYBOUNDS($APOINT, $ISTART, $IEND, 2, 2) Then Return SetError(@error + 10, @extended, 0)
  8774.     Local $TAGSTRUCT = ""
  8775.     For $I = $ISTART To $IEND
  8776.         $TAGSTRUCT &= "int[2];"
  8777.     Next
  8778.     Local $TDATA = DllStructCreate($TAGSTRUCT)
  8779.     Local $ICOUNT = 1
  8780.     For $I = $ISTART To $IEND
  8781.         For $J = 0 To 1
  8782.             DllStructSetData($TDATA, $ICOUNT, $APOINT[$I][$J], $J + 1)
  8783.         Next
  8784.         $ICOUNT += 1
  8785.     Next
  8786.     Local $ARET = DllCall("gdi32.dll", "handle", "CreatePolygonRgn", "struct*", $TDATA, "int", $ICOUNT - 1, "int", $IMODE)
  8787.     If @error Then Return SetError(@error, @extended, 0)
  8788.     Return $ARET[0]
  8789. EndFunc   ;==>_WINAPI_CREATEPOLYGONRGN
  8790. Func _WinAPI_CreateRectRgnIndirect($TRECT)
  8791.     Local $ARET = DllCall("gdi32.dll", "handle", "CreateRectRgnIndirect", "struct*", $TRECT)
  8792.     If @error Then Return SetError(@error, @extended, 0)
  8793.     Return $ARET[0]
  8794. EndFunc   ;==>_WINAPI_CREATERECTRGNINDIRECT
  8795. Func _WinAPI_CreateSolidBitmap($HWND, $ICOLOR, $IWIDTH, $IHEIGHT, $BRGB = 1)
  8796.     Local $HDC = _WinAPI_GetDC($HWND)
  8797.     Local $HDESTDC = _WinAPI_CreateCompatibleDC($HDC)
  8798.     Local $HBITMAP = _WinAPI_CreateCompatibleBitmap($HDC, $IWIDTH, $IHEIGHT)
  8799.     Local $HOLD = _WinAPI_SelectObject($HDESTDC, $HBITMAP)
  8800.     Local $TRECT = DllStructCreate($TAGRECT)
  8801.     DllStructSetData($TRECT, 1, 0)
  8802.     DllStructSetData($TRECT, 2, 0)
  8803.     DllStructSetData($TRECT, 3, $IWIDTH)
  8804.     DllStructSetData($TRECT, 4, $IHEIGHT)
  8805.     If $BRGB Then
  8806.         $ICOLOR = BitOR(BitAND($ICOLOR, 65280), BitShift(BitAND($ICOLOR, 255), -16), BitShift(BitAND($ICOLOR, 16711680), 16))
  8807.     EndIf
  8808.     Local $HBRUSH = _WinAPI_CreateSolidBrush($ICOLOR)
  8809.     If Not _WinAPI_FillRect($HDESTDC, $TRECT, $HBRUSH) Then
  8810.         _WinAPI_DeleteObject($HBITMAP)
  8811.         $HBITMAP = 0
  8812.     EndIf
  8813.     _WinAPI_DeleteObject($HBRUSH)
  8814.     _WinAPI_ReleaseDC($HWND, $HDC)
  8815.     _WinAPI_SelectObject($HDESTDC, $HOLD)
  8816.     _WinAPI_DeleteDC($HDESTDC)
  8817.     If Not $HBITMAP Then Return SetError(1, 0, 0)
  8818.     Return $HBITMAP
  8819. EndFunc   ;==>_WinAPI_CreateSolidBitmap
  8820. Func _WinAPI_CreateTransform($NM11 = 1, $NM12 = 0, $NM21 = 0, $NM22 = 1, $NDX = 0, $NDY = 0)
  8821.     Local $TXFORM = DllStructCreate($TAGXFORM)
  8822.     DllStructSetData($TXFORM, 1, $NM11)
  8823.     DllStructSetData($TXFORM, 2, $NM12)
  8824.     DllStructSetData($TXFORM, 3, $NM21)
  8825.     DllStructSetData($TXFORM, 4, $NM22)
  8826.     DllStructSetData($TXFORM, 5, $NDX)
  8827.     DllStructSetData($TXFORM, 6, $NDY)
  8828.     Return $TXFORM
  8829. EndFunc   ;==>_WINAPI_CREATETRANSFORM
  8830. Func _WinAPI_DeleteEnhMetaFile($HEMF)
  8831.     Local $ARET = DllCall("gdi32.dll", "bool", "DeleteEnhMetaFile", "handle", $HEMF)
  8832.     If @error Then Return SetError(@error, @extended, False)
  8833.     Return $ARET[0]
  8834. EndFunc   ;==>_WINAPI_DELETEENHMETAFILE
  8835. Func _WinAPI_DPtoLP($HDC, ByRef $TPOINT, $ICOUNT = 1)
  8836.     Local $ARET = DllCall("gdi32.dll", "bool", "DPtoLP", "handle", $HDC, "struct*", $TPOINT, "int", $ICOUNT)
  8837.     If @error Then Return SetError(@error, @extended, False)
  8838.     Return $ARET[0]
  8839. EndFunc   ;==>_WINAPI_DPTOLP
  8840. Func _WinAPI_DrawAnimatedRects($HWND, $TRECTFROM, $TRECTTO)
  8841.     Local $ARET = DllCall("user32.dll", "bool", "DrawAnimatedRects", "hwnd", $HWND, "int", 3, "struct*", $TRECTFROM, "struct*", $TRECTTO)
  8842.     If @error Then Return SetError(@error, @extended, 0)
  8843.     Return $ARET[0]
  8844. EndFunc   ;==>_WINAPI_DRAWANIMATEDRECTS
  8845. Func _WinAPI_DrawBitmap($HDC, $IX, $IY, $HBITMAP, $IROP = 13369376)
  8846.     Local $TOBJ = DllStructCreate($TAGBITMAP)
  8847.     Local $ARET = DllCall("gdi32.dll", "int", "GetObject", "handle", $HBITMAP, "int", DllStructGetSize($TOBJ), "struct*", $TOBJ)
  8848.     If @error Or Not $ARET[0] Then Return SetError(@error + 20, @extended, 0)
  8849.     $ARET = DllCall("user32.dll", "handle", "GetDC", "hwnd", 0)
  8850.     Local $_HDC = $ARET[0]
  8851.     $ARET = DllCall("gdi32.dll", "handle", "CreateCompatibleDC", "handle", $_HDC)
  8852.     Local $HSRCDC = $ARET[0]
  8853.     $ARET = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $HSRCDC, "handle", $HBITMAP)
  8854.     Local $HSRCSV = $ARET[0]
  8855.     Local $IERROR = 0
  8856.     $ARET = DllCall("gdi32.dll", "int", "BitBlt", "hwnd", $HDC, "int", $IX, "int", $IY, "int", DllStructGetData($TOBJ, "bmWidth"), "int", DllStructGetData($TOBJ, "bmHeight"), "hwnd", $HSRCDC, "int", 0, "int", 0, "int", $IROP)
  8857.     If @error Or Not $ARET[0] Then
  8858.         $IERROR = @error + 1
  8859.     EndIf
  8860.     DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $_HDC)
  8861.     DllCall("gdi32.dll", "handle", "SelectObject", "handle", $HSRCDC, "handle", $HSRCSV)
  8862.     DllCall("gdi32.dll", "bool", "DeleteDC", "handle", $HSRCDC)
  8863.     If $IERROR Then Return SetError(10, 0, 0)
  8864.     Return 1
  8865. EndFunc   ;==>_WINAPI_DRAWBITMAP
  8866. Func _WinAPI_DrawFocusRect($HDC, $TRECT)
  8867.     Local $ARET = DllCall("user32.dll", "bool", "DrawFocusRect", "handle", $HDC, "struct*", $TRECT)
  8868.     If @error Then Return SetError(@error, @extended, 0)
  8869.     Return $ARET[0]
  8870. EndFunc   ;==>_WINAPI_DRAWFOCUSRECT
  8871. Func _WinAPI_DrawLine($HDC, $IX1, $IY1, $IX2, $IY2)
  8872.     _WinAPI_MoveTo($HDC, $IX1, $IY1)
  8873.     If @error Then Return SetError(@error, @extended, False)
  8874.     _WinAPI_LineTo($HDC, $IX2, $IY2)
  8875.     If @error Then Return SetError(@error + 10, @extended, False)
  8876.     Return True
  8877. EndFunc   ;==>_WinAPI_DrawLine
  8878. Func _WinAPI_DrawShadowText($HDC, $STEXT, $IRGBTEXT, $IRGBSHADOW, $IXOFFSET = 0, $IYOFFSET = 0, $TRECT = 0, $IFLAGS = 0)
  8879.     Local $ARET
  8880.     If Not IsDllStruct($TRECT) Then
  8881.         $TRECT = DllStructCreate($TAGRECT)
  8882.         $ARET = DllCall("user32.dll", "bool", "GetClientRect", "hwnd", _WinAPI_WindowFromDC($HDC), "struct*", $TRECT)
  8883.         If @error Then Return SetError(@error + 10, @extended, 0)
  8884.         If Not $ARET[0] Then Return SetError(10, 0, 0)
  8885.     EndIf
  8886.     $ARET = DllCall("comctl32.dll", "int", "DrawShadowText", "handle", $HDC, "wstr", $STEXT, "uint", -1, "struct*", $TRECT, "dword", $IFLAGS, "int", __RGB($IRGBTEXT), "int", __RGB($IRGBSHADOW), "int", $IXOFFSET, "int", $IYOFFSET)
  8887.     If @error Then Return SetError(@error, @extended, 0)
  8888.     Return $ARET[0]
  8889. EndFunc   ;==>_WINAPI_DRAWSHADOWTEXT
  8890. Func _WinAPI_DwmDefWindowProc($HWND, $IMSG, $WPARAM, $LPARAM)
  8891.     Local $ARET = DllCall("dwmapi.dll", "bool", "DwmDefWindowProc", "hwnd", $HWND, "uint", $IMSG, "wparam", $WPARAM, "lparam", $LPARAM, "lresult*", 0)
  8892.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  8893.     Return $ARET[5]
  8894. EndFunc   ;==>_WINAPI_DWMDEFWINDOWPROC
  8895. Func _WinAPI_DwmEnableBlurBehindWindow($HWND, $BENABLE = True, $BTRANSITION = False, $HRGN = 0)
  8896.     Local $TBLURBEHIND = DllStructCreate("dword;bool;handle;bool")
  8897.     Local $IFLAGS = 0
  8898.     If $HRGN Then
  8899.         $IFLAGS += 2
  8900.         DllStructSetData($TBLURBEHIND, 3, $HRGN)
  8901.     EndIf
  8902.     DllStructSetData($TBLURBEHIND, 1, BitOR($IFLAGS, 5))
  8903.     DllStructSetData($TBLURBEHIND, 2, $BENABLE)
  8904.     DllStructSetData($TBLURBEHIND, 4, $BTRANSITION)
  8905.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmEnableBlurBehindWindow", "hwnd", $HWND, "struct*", $TBLURBEHIND)
  8906.     If @error Then Return SetError(@error, @extended, 0)
  8907.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8908.     Return 1
  8909. EndFunc   ;==>_WINAPI_DWMENABLEBLURBEHINDWINDOW
  8910. Func _WinAPI_DwmEnableComposition($BENABLE)
  8911.     If $BENABLE Then $BENABLE = 1
  8912.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmEnableComposition", "uint", $BENABLE)
  8913.     If @error Then Return SetError(@error, @extended, 0)
  8914.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8915.     Return 1
  8916. EndFunc   ;==>_WINAPI_DWMENABLECOMPOSITION
  8917. Func _WinAPI_DwmExtendFrameIntoClientArea($HWND, $TMARGINS = 0)
  8918.     If Not IsDllStruct($TMARGINS) Then
  8919.         $TMARGINS = _WinAPI_CreateMargins(-1, -1, -1, -1)
  8920.     EndIf
  8921.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmExtendFrameIntoClientArea", "hwnd", $HWND, "struct*", $TMARGINS)
  8922.     If @error Then Return SetError(@error, @extended, 0)
  8923.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8924.     Return 1
  8925. EndFunc   ;==>_WINAPI_DWMEXTENDFRAMEINTOCLIENTAREA
  8926. Func _WinAPI_DwmGetColorizationColor()
  8927.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmGetColorizationColor", "dword*", 0, "bool*", 0)
  8928.     If @error Then Return SetError(@error, @extended, 0)
  8929.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8930.     Return SetExtended($ARET[2], $ARET[1])
  8931. EndFunc   ;==>_WINAPI_DWMGETCOLORIZATIONCOLOR
  8932. Func _WinAPI_DwmGetColorizationParameters()
  8933.     Local $TDWMCP = DllStructCreate($TAGDWM_COLORIZATION_PARAMETERS)
  8934.     Local $ARET = DllCall("dwmapi.dll", "uint", 127, "struct*", $TDWMCP)
  8935.     If @error Then Return SetError(@error, @extended, 0)
  8936.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8937.     Return $TDWMCP
  8938. EndFunc   ;==>_WINAPI_DWMGETCOLORIZATIONPARAMETERS
  8939. Func _WinAPI_DwmGetWindowAttribute($HWND, $IATTRIBUTE)
  8940.     Local $TAGSTRUCT
  8941.     Switch $IATTRIBUTE
  8942.         Case 5, 9
  8943.             $TAGSTRUCT = $TAGRECT
  8944.         Case 1
  8945.             $TAGSTRUCT = "uint"
  8946.         Case Else
  8947.             Return SetError(11, 0, 0)
  8948.     EndSwitch
  8949.     Local $TDATA = DllStructCreate($TAGSTRUCT)
  8950.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmGetWindowAttribute", "hwnd", $HWND, "dword", $IATTRIBUTE, "struct*", $TDATA, "dword", DllStructGetSize($TDATA))
  8951.     If @error Then Return SetError(@error, @extended, 0)
  8952.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8953.     Switch $IATTRIBUTE
  8954.         Case 1
  8955.             Return DllStructGetData($TDATA, 1)
  8956.         Case Else
  8957.             Return $TDATA
  8958.     EndSwitch
  8959. EndFunc   ;==>_WINAPI_DWMGETWINDOWATTRIBUTE
  8960. Func _WinAPI_DwmInvalidateIconicBitmaps($HWND)
  8961.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmInvalidateIconicBitmaps", "hwnd", $HWND)
  8962.     If @error Then Return SetError(@error, @extended, 0)
  8963.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8964.     Return 1
  8965. EndFunc   ;==>_WINAPI_DWMINVALIDATEICONICBITMAPS
  8966. Func _WinAPI_DwmIsCompositionEnabled()
  8967.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmIsCompositionEnabled", "bool*", 0)
  8968.     If @error Then Return SetError(@error, @extended, 0)
  8969.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8970.     Return $ARET[1]
  8971. EndFunc   ;==>_WINAPI_DWMISCOMPOSITIONENABLED
  8972. Func _WinAPI_DwmQueryThumbnailSourceSize($HTHUMBNAIL)
  8973.     Local $TSIZE = DllStructCreate($TAGSIZE)
  8974.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmQueryThumbnailSourceSize", "handle", $HTHUMBNAIL, "struct*", $TSIZE)
  8975.     If @error Then Return SetError(@error, @extended, 0)
  8976.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8977.     Return $TSIZE
  8978. EndFunc   ;==>_WINAPI_DWMQUERYTHUMBNAILSOURCESIZE
  8979. Func _WinAPI_DwmRegisterThumbnail($HDESTINATION, $HSOURCE)
  8980.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmRegisterThumbnail", "hwnd", $HDESTINATION, "hwnd", $HSOURCE, "handle*", 0)
  8981.     If @error Then Return SetError(@error, @extended, 0)
  8982.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8983.     Return $ARET[3]
  8984. EndFunc   ;==>_WINAPI_DWMREGISTERTHUMBNAIL
  8985. Func _WinAPI_DwmSetColorizationParameters($TDWMCP)
  8986.     Local $ARET = DllCall("dwmapi.dll", "uint", 131, "struct*", $TDWMCP, "uint", 0)
  8987.     If @error Then Return SetError(@error, @extended, 0)
  8988.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  8989.     Return 1
  8990. EndFunc   ;==>_WINAPI_DWMSETCOLORIZATIONPARAMETERS
  8991. Func _WinAPI_DwmSetIconicLivePreviewBitmap($HWND, $HBITMAP, $BFRAME = False, $TCLIENT = 0)
  8992.     Local $IFLAGS
  8993.     If $BFRAME Then
  8994.         $IFLAGS = 1
  8995.     Else
  8996.         $IFLAGS = 0
  8997.     EndIf
  8998.     Local $ARET = DllCall("dwmapi.dll", "uint", "DwmSetIconicLivePreviewBitmap", "hwnd", $HWND, "handle", $HBITMAP, "struct*", $TCLIENT, "dword", $IFLAGS)
  8999.     If @error Then Return SetError(@error, @extended, 0)
  9000.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  9001.     Return 1
  9002. EndFunc   ;==>_WINAPI_DWMSETICONICLIVEPREVIEWBITMAP
  9003. Func _WinAPI_DwmSetIconicThumbnail($HWND, $HBITMAP, $BFRAME = False)
  9004.     Local $IFLAGS
  9005.     If $BFRAME Then
  9006.         $IFLAGS = 1
  9007.     Else
  9008.         $IFLAGS = 0
  9009.     EndIf
  9010.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmSetIconicThumbnail", "hwnd", $HWND, "handle", $HBITMAP, "dword", $IFLAGS)
  9011.     If @error Then Return SetError(@error, @extended, 0)
  9012.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  9013.     Return 1
  9014. EndFunc   ;==>_WINAPI_DWMSETICONICTHUMBNAIL
  9015. Func _WinAPI_DwmSetWindowAttribute($HWND, $IATTRIBUTE, $IDATA)
  9016.     Switch $IATTRIBUTE
  9017.         Case 2, 3, 4, 6, 7, 8, 10, 11, 12
  9018.         Case Else
  9019.             Return SetError(1, 0, 0)
  9020.     EndSwitch
  9021.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmSetWindowAttribute", "hwnd", $HWND, "dword", $IATTRIBUTE, "dword*", $IDATA, "dword", 4)
  9022.     If @error Then Return SetError(@error, @extended, 0)
  9023.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  9024.     Return 1
  9025. EndFunc   ;==>_WINAPI_DWMSETWINDOWATTRIBUTE
  9026. Func _WinAPI_DwmUnregisterThumbnail($HTHUMBNAIL)
  9027.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmUnregisterThumbnail", "handle", $HTHUMBNAIL)
  9028.     If @error Then Return SetError(@error, @extended, 0)
  9029.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  9030.     Return 1
  9031. EndFunc   ;==>_WINAPI_DWMUNREGISTERTHUMBNAIL
  9032. Func _WinAPI_DwmUpdateThumbnailProperties($HTHUMBNAIL, $BVISIBLE = True, $BCLIENTAREAONLY = False, $IOPACITY = 255, $TRECTDEST = 0, $TRECTSRC = 0)
  9033.     Local Const $TAGDWM_THUMBNAIL_PROPERTIES = "struct;dword dwFlags;int rcDestination[4];int rcSource[4];byte opacity;bool opacity;bool fSourceClientAreaOnly;endstruct"
  9034.     Local $TTHUMBNAILPROPERTIES = DllStructCreate($TAGDWM_THUMBNAIL_PROPERTIES)
  9035.     Local $TSIZE, $IFLAGS = 0
  9036.     If Not IsDllStruct($TRECTDEST) Then
  9037.         $TSIZE = _WinAPI_DwmQueryThumbnailSourceSize($HTHUMBNAIL)
  9038.         If @error Then
  9039.             Return SetError(@error + 10, @extended, 0)
  9040.         EndIf
  9041.         $TRECTDEST = _WinAPI_CreateRectEx(0, 0, DllStructGetData($TSIZE, 1), DllStructGetData($TSIZE, 2))
  9042.     EndIf
  9043.     For $I = 1 To 4
  9044.         DllStructSetData($TTHUMBNAILPROPERTIES, 2, DllStructGetData($TRECTDEST, $I), $I)
  9045.     Next
  9046.     If IsDllStruct($TRECTSRC) Then
  9047.         $IFLAGS += 2
  9048.         For $I = 1 To 4
  9049.             DllStructSetData($TTHUMBNAILPROPERTIES, 3, DllStructGetData($TRECTSRC, $I), $I)
  9050.         Next
  9051.     EndIf
  9052.     DllStructSetData($TTHUMBNAILPROPERTIES, 1, BitOR($IFLAGS, 29))
  9053.     DllStructSetData($TTHUMBNAILPROPERTIES, 4, $IOPACITY)
  9054.     DllStructSetData($TTHUMBNAILPROPERTIES, 5, $BVISIBLE)
  9055.     DllStructSetData($TTHUMBNAILPROPERTIES, 6, $BCLIENTAREAONLY)
  9056.     Local $ARET = DllCall("dwmapi.dll", "long", "DwmUpdateThumbnailProperties", "handle", $HTHUMBNAIL, "struct*", $TTHUMBNAILPROPERTIES)
  9057.     If @error Then Return SetError(@error, @extended, 0)
  9058.     If $ARET[0] Then Return SetError(10, $ARET[0], 0)
  9059.     Return 1
  9060. EndFunc   ;==>_WINAPI_DWMUPDATETHUMBNAILPROPERTIES
  9061. Func _WinAPI_Ellipse($HDC, $TRECT)
  9062.     Local $ARET = DllCall("gdi32.dll", "bool", "Ellipse", "handle", $HDC, "int", DllStructGetData($TRECT, 1), "int", DllStructGetData($TRECT, 2), "int", DllStructGetData($TRECT, 3), "int", DllStructGetData($TRECT, 4))
  9063.     If @error Then Return SetError(@error, @extended, False)
  9064.     Return $ARET[0]
  9065. EndFunc   ;==>_WINAPI_ELLIPSE
  9066. Func _WinAPI_EndPaint($HWND, ByRef $TPAINTSTRUCT)
  9067.     Local $ARET = DllCall("user32.dll", "bool", "EndPaint", "hwnd", $HWND, "struct*", $TPAINTSTRUCT)
  9068.     If @error Then Return SetError(@error, @extended, False)
  9069.     Return $ARET[0]
  9070. EndFunc   ;==>_WINAPI_ENDPAINT
  9071. Func _WinAPI_EndPath($HDC)
  9072.     Local $ARET = DllCall("gdi32.dll", "bool", "EndPath", "handle", $HDC)
  9073.     If @error Then Return SetError(@error, @extended, 0)
  9074.     Return $ARET[0]
  9075. EndFunc   ;==>_WINAPI_ENDPATH
  9076. Func _WinAPI_EnumDisplayMonitors($HDC = 0, $TRECT = 0)
  9077.     Local $HENUMPROC = DllCallbackRegister("__EnumDisplayMonitorsProc", "bool", "handle;handle;ptr;lparam")
  9078.     Dim $__G_VENUM[101][2] = [[0]]
  9079.     Local $ARET = DllCall("user32.dll", "bool", "EnumDisplayMonitors", "handle", $HDC, "struct*", $TRECT, "ptr", DllCallbackGetPtr($HENUMPROC), "lparam", 0)
  9080.     If @error Or Not $ARET[0] Or Not $__G_VENUM[0][0] Then
  9081.         $__G_VENUM = @error + 10
  9082.     EndIf
  9083.     DllCallbackFree($HENUMPROC)
  9084.     If $__G_VENUM Then Return SetError($__G_VENUM, 0, 0)
  9085.     __INC($__G_VENUM, -1)
  9086.     Return $__G_VENUM
  9087. EndFunc   ;==>_WINAPI_ENUMDISPLAYMONITORS
  9088. Func _WinAPI_EnumDisplaySettings($SDEVICE, $IMODE)
  9089.     Local $STYPEOFDEVICE = "wstr"
  9090.     If Not StringStripWS($SDEVICE, $STR_STRIPLEADING + $STR_STRIPTRAILING) Then
  9091.         $STYPEOFDEVICE = "ptr"
  9092.         $SDEVICE = 0
  9093.     EndIf
  9094.     Local $TDEVMODE = DllStructCreate($TAGDEVMODE_DISPLAY)
  9095.     DllStructSetData($TDEVMODE, "Size", DllStructGetSize($TDEVMODE))
  9096.     DllStructSetData($TDEVMODE, "DriverExtra", 0)
  9097.     Local $ARET = DllCall("user32.dll", "bool", "EnumDisplaySettingsW", $STYPEOFDEVICE, $SDEVICE, "dword", $IMODE, "struct*", $TDEVMODE)
  9098.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9099.     Local $ARESULT[5]
  9100.     $ARESULT[0] = DllStructGetData($TDEVMODE, "PelsWidth")
  9101.     $ARESULT[1] = DllStructGetData($TDEVMODE, "PelsHeight")
  9102.     $ARESULT[2] = DllStructGetData($TDEVMODE, "BitsPerPel")
  9103.     $ARESULT[3] = DllStructGetData($TDEVMODE, "DisplayFrequency")
  9104.     $ARESULT[4] = DllStructGetData($TDEVMODE, "DisplayFlags")
  9105.     Return $ARESULT
  9106. EndFunc   ;==>_WINAPI_ENUMDISPLAYSETTINGS
  9107. Func _WinAPI_EnumFontFamilies($HDC = 0, $SFACENAME = "", $ICHARSET = 1, $IFONTTYPE = 7, $SPATTERN = "", $BEXCLUDE = False)
  9108.     Local $TLOGFONT = DllStructCreate($TAGLOGFONT)
  9109.     Local $TPATTERN = DllStructCreate("uint;uint;ptr;wchar[" & (StringLen($SPATTERN) + 1) & "]")
  9110.     DllStructSetData($TPATTERN, 1, $IFONTTYPE)
  9111.     If Not $SPATTERN Then
  9112.         DllStructSetData($TPATTERN, 2, 0)
  9113.         DllStructSetData($TPATTERN, 3, 0)
  9114.     Else
  9115.         DllStructSetData($TPATTERN, 2, $BEXCLUDE)
  9116.         DllStructSetData($TPATTERN, 3, DllStructGetPtr($TPATTERN, 4))
  9117.         DllStructSetData($TPATTERN, 4, $SPATTERN)
  9118.     EndIf
  9119.     DllStructSetData($TLOGFONT, 9, $ICHARSET)
  9120.     DllStructSetData($TLOGFONT, 13, 0)
  9121.     DllStructSetData($TLOGFONT, 14, StringLeft($SFACENAME, 31))
  9122.     Local $HCDC
  9123.     If Not $HDC Then
  9124.         $HCDC = _WinAPI_CreateCompatibleDC(0)
  9125.     Else
  9126.         $HCDC = $HDC
  9127.     EndIf
  9128.     Dim $__G_VENUM[101][8] = [[0]]
  9129.     Local $HENUMPROC = DllCallbackRegister("__EnumFontFamiliesProc", "int", "ptr;ptr;dword;PTR")
  9130.     Local $ARET = DllCall("gdi32.dll", "int", "EnumFontFamiliesExW", "handle", $HCDC, "struct*", $TLOGFONT, "ptr", DllCallbackGetPtr($HENUMPROC), "struct*", $TPATTERN, "dword", 0)
  9131.     If @error Or Not $ARET[0] Or Not $__G_VENUM[0][0] Then
  9132.         $__G_VENUM = @error + 10
  9133.     EndIf
  9134.     DllCallbackFree($HENUMPROC)
  9135.     If Not $HDC Then
  9136.         _WinAPI_DeleteDC($HCDC)
  9137.     EndIf
  9138.     If $__G_VENUM Then Return SetError($__G_VENUM, 0, 0)
  9139.     __INC($__G_VENUM, -1)
  9140.     Return $__G_VENUM
  9141. EndFunc   ;==>_WINAPI_ENUMFONTFAMILIES
  9142. Func _WinAPI_EqualRect($TRECT1, $TRECT2)
  9143.     Local $ARET = DllCall("user32.dll", "bool", "EqualRect", "struct*", $TRECT1, "struct*", $TRECT2)
  9144.     If @error Then Return SetError(@error, @extended, False)
  9145.     Return $ARET[0]
  9146. EndFunc   ;==>_WINAPI_EQUALRECT
  9147. Func _WinAPI_EqualRgn($HRGN1, $HRGN2)
  9148.     Local $ARET = DllCall("gdi32.dll", "bool", "EqualRgn", "handle", $HRGN1, "handle", $HRGN2)
  9149.     If @error Then Return SetError(@error, @extended, False)
  9150.     Return $ARET[0]
  9151. EndFunc   ;==>_WINAPI_EQUALRGN
  9152. Func _WinAPI_ExcludeClipRect($HDC, $TRECT)
  9153.     Local $ARET = DllCall("gdi32.dll", "int", "ExcludeClipRect", "handle", $HDC, "int", DllStructGetData($TRECT, 1), "int", DllStructGetData($TRECT, 2), "int", DllStructGetData($TRECT, 3), "int", DllStructGetData($TRECT, 4))
  9154.     If @error Then Return SetError(@error, @extended, 0)
  9155.     Return $ARET[0]
  9156. EndFunc   ;==>_WINAPI_EXCLUDECLIPRECT
  9157. Func _WinAPI_ExtCreatePen($IPENSTYLE, $IWIDTH, $IBRUSHSTYLE, $IRGB, $IHATCH = 0, $AUSERSTYLE = 0, $ISTART = 0, $IEND = -1)
  9158.     Local $ICOUNT = 0, $TSTYLE = 0
  9159.     If BitAND($IPENSTYLE, 255) = 7 Then
  9160.         If __CHECKERRORARRAYBOUNDS($AUSERSTYLE, $ISTART, $IEND) Then Return SetError(@error + 10, @extended, 0)
  9161.         $TSTYLE = DllStructCreate("dword[" & ($IEND - $ISTART + 1) & "]")
  9162.         For $I = $ISTART To $IEND
  9163.             DllStructSetData($TSTYLE, 1, $AUSERSTYLE[$I], $ICOUNT + 1)
  9164.             $ICOUNT += 1
  9165.         Next
  9166.     EndIf
  9167.     Local $TLOGBRUSH = DllStructCreate($TAGLOGBRUSH)
  9168.     DllStructSetData($TLOGBRUSH, 1, $IBRUSHSTYLE)
  9169.     DllStructSetData($TLOGBRUSH, 2, __RGB($IRGB))
  9170.     DllStructSetData($TLOGBRUSH, 3, $IHATCH)
  9171.     Local $ARET = DllCall("gdi32.dll", "handle", "ExtCreatePen", "dword", $IPENSTYLE, "dword", $IWIDTH, "struct*", $TLOGBRUSH, "dword", $ICOUNT, "struct*", $TSTYLE)
  9172.     If @error Then Return SetError(@error, @extended, 0)
  9173.     Return $ARET[0]
  9174. EndFunc   ;==>_WINAPI_EXTCREATEPEN
  9175. Func _WinAPI_ExtCreateRegion($TRGNDATA, $TXFORM = 0)
  9176.     Local $ARET = DllCall("gdi32.dll", "handle", "ExtCreateRegion", "struct*", $TXFORM, "dword", DllStructGetSize($TRGNDATA), "struct*", $TRGNDATA)
  9177.     If @error Then Return SetError(@error, @extended, 0)
  9178.     Return $ARET[0]
  9179. EndFunc   ;==>_WINAPI_EXTCREATEREGION
  9180. Func _WinAPI_ExtFloodFill($HDC, $IX, $IY, $IRGB, $ITYPE = 0)
  9181.     Local $ARET = DllCall("gdi32.dll", "bool", "ExtFloodFill", "handle", $HDC, "int", $IX, "int", $IY, "dword", __RGB($IRGB), "uint", $ITYPE)
  9182.     If @error Then Return SetError(@error, @extended, False)
  9183.     Return $ARET[0]
  9184. EndFunc   ;==>_WINAPI_EXTFLOODFILL
  9185. Func _WinAPI_ExtSelectClipRgn($HDC, $HRGN, $IMODE = 5)
  9186.     Local $ARET = DllCall("gdi32.dll", "int", "ExtSelectClipRgn", "handle", $HDC, "handle", $HRGN, "int", $IMODE)
  9187.     If @error Then Return SetError(@error, @extended, 0)
  9188.     Return $ARET[0]
  9189. EndFunc   ;==>_WINAPI_EXTSELECTCLIPRGN
  9190. Func _WinAPI_FillPath($HDC)
  9191.     Local $ARET = DllCall("gdi32.dll", "bool", "FillPath", "handle", $HDC)
  9192.     If @error Then Return SetError(@error, @extended, False)
  9193.     Return $ARET[0]
  9194. EndFunc   ;==>_WINAPI_FILLPATH
  9195. Func _WinAPI_FillRgn($HDC, $HRGN, $HBRUSH)
  9196.     Local $ARET = DllCall("gdi32.dll", "bool", "FillRgn", "handle", $HDC, "handle", $HRGN, "handle", $HBRUSH)
  9197.     If @error Then Return SetError(@error, @extended, False)
  9198.     Return $ARET[0]
  9199. EndFunc   ;==>_WINAPI_FILLRGN
  9200. Func _WinAPI_FlattenPath($HDC)
  9201.     Local $ARET = DllCall("gdi32.dll", "bool", "FlattenPath", "handle", $HDC)
  9202.     If @error Then Return SetError(@error, @extended, False)
  9203.     Return $ARET[0]
  9204. EndFunc   ;==>_WINAPI_FLATTENPATH
  9205. Func _WinAPI_FrameRgn($HDC, $HRGN, $HBRUSH, $IWIDTH, $IHEIGHT)
  9206.     Local $ARET = DllCall("gdi32.dll", "bool", "FrameRgn", "handle", $HDC, "handle", $HRGN, "handle", $HBRUSH, "int", $IWIDTH, "int", $IHEIGHT)
  9207.     If @error Then Return SetError(@error, @extended, False)
  9208.     Return $ARET[0]
  9209. EndFunc   ;==>_WINAPI_FRAMERGN
  9210. Func _WinAPI_GdiComment($HDC, $PBUFFER, $ISIZE)
  9211.     Local $ARET = DllCall("gdi32.dll", "bool", "GdiComment", "handle", $HDC, "uint", $ISIZE, "struct*", $PBUFFER)
  9212.     If @error Then Return SetError(@error, @extended, False)
  9213.     Return $ARET[0]
  9214. EndFunc   ;==>_WINAPI_GDICOMMENT
  9215. Func _WinAPI_GetArcDirection($HDC)
  9216.     Local $ARET = DllCall("gdi32.dll", "int", "GetArcDirection", "handle", $HDC)
  9217.     If @error Then Return SetError(@error, @extended, 0)
  9218.     If ($ARET[0] < 1) Or ($ARET[0] > 2) Then Return SetError(10, $ARET[0], 0)
  9219.     Return $ARET[0]
  9220. EndFunc   ;==>_WINAPI_GETARCDIRECTION
  9221. Func _WinAPI_GetBitmapBits($HBITMAP, $ISIZE, $PBITS)
  9222.     Local $ARET = DllCall("gdi32.dll", "long", "GetBitmapBits", "handle", $HBITMAP, "long", $ISIZE, "struct*", $PBITS)
  9223.     If @error Then Return SetError(@error, @extended, 0)
  9224.     Return $ARET[0]
  9225. EndFunc   ;==>_WINAPI_GETBITMAPBITS
  9226. Func _WinAPI_GetBitmapDimensionEx($HBITMAP)
  9227.     Local $TSIZE = DllStructCreate($TAGSIZE)
  9228.     Local $ARET = DllCall("gdi32.dll", "bool", "GetBitmapDimensionEx", "handle", $HBITMAP, "struct*", $TSIZE)
  9229.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9230.     Return $TSIZE
  9231. EndFunc   ;==>_WINAPI_GETBITMAPDIMENSIONEX
  9232. Func _WinAPI_GetBkColor($HDC)
  9233.     Local $ARET = DllCall("gdi32.dll", "dword", "GetBkColor", "handle", $HDC)
  9234.     If @error Or ($ARET[0] = -1) Then Return SetError(@error, @extended, -1)
  9235.     Return __RGB($ARET[0])
  9236. EndFunc   ;==>_WINAPI_GETBKCOLOR
  9237. Func _WinAPI_GetBoundsRect($HDC, $IFLAGS = 0)
  9238.     Local $TRECT = DllStructCreate($TAGRECT)
  9239.     Local $ARET = DllCall("gdi32.dll", "uint", "GetBoundsRect", "handle", $HDC, "struct*", $TRECT, "uint", $IFLAGS)
  9240.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9241.     Return SetExtended($ARET[0], $TRECT)
  9242. EndFunc   ;==>_WINAPI_GETBOUNDSRECT
  9243. Func _WinAPI_GetBrushOrg($HDC)
  9244.     Local $TPOINT = DllStructCreate($TAGPOINT)
  9245.     Local $ARET = DllCall("gdi32.dll", "bool", "GetBrushOrgEx", "handle", $HDC, "struct*", $TPOINT)
  9246.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9247.     Return $TPOINT
  9248. EndFunc   ;==>_WINAPI_GETBRUSHORG
  9249. Func _WinAPI_GetBValue($IRGB)
  9250.     Return BitShift(BitAND(__RGB($IRGB), 16711680), 16)
  9251. EndFunc   ;==>_WINAPI_GETBVALUE
  9252. Func _WinAPI_GetClipBox($HDC, ByRef $TRECT)
  9253.     $TRECT = DllStructCreate($TAGRECT)
  9254.     Local $ARET = DllCall("gdi32.dll", "int", "GetClipBox", "handle", $HDC, "struct*", $TRECT)
  9255.     If @error Or Not $ARET[0] Then
  9256.         $TRECT = 0
  9257.         Return SetError(@error, @extended, 0)
  9258.     EndIf
  9259.     Return $ARET[0]
  9260. EndFunc   ;==>_WINAPI_GETCLIPBOX
  9261. Func _WinAPI_GetClipRgn($HDC)
  9262.     Local $HRGN = _WinAPI_CreateRectRgn(0, 0, 0, 0)
  9263.     Local $IERROR = 0
  9264.     Local $ARET = DllCall("gdi32.dll", "int", "GetClipRgn", "handle", $HDC, "handle", $HRGN)
  9265.     If @error Or ($ARET[0] = -1) Then $IERROR = @error + 10
  9266.     If $IERROR Or Not $ARET[0] Then
  9267.         _WinAPI_DeleteObject($HRGN)
  9268.         $HRGN = 0
  9269.     EndIf
  9270.     Return SetError($IERROR, 0, $HRGN)
  9271. EndFunc   ;==>_WINAPI_GETCLIPRGN
  9272. Func _WinAPI_GetColorAdjustment($HDC)
  9273.     Local $TADJUSTMENT = DllStructCreate($TAGCOLORADJUSTMENT)
  9274.     Local $ARET = DllCall("gdi32.dll", "bool", "GetColorAdjustment", "handle", $HDC, "struct*", $TADJUSTMENT)
  9275.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9276.     Return $TADJUSTMENT
  9277. EndFunc   ;==>_WINAPI_GETCOLORADJUSTMENT
  9278. Func _WinAPI_GetCurrentPosition($HDC)
  9279.     Local $TPOINT = DllStructCreate($TAGPOINT)
  9280.     Local $ARET = DllCall("gdi32.dll", "int", "GetCurrentPositionEx", "handle", $HDC, "struct*", $TPOINT)
  9281.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9282.     Return $TPOINT
  9283. EndFunc   ;==>_WINAPI_GETCURRENTPOSITION
  9284. Func _WinAPI_GetDeviceGammaRamp($HDC, ByRef $ARAMP)
  9285.     $ARAMP = 0
  9286.     Local $TDATA = DllStructCreate("word[256];word[256];word[256]")
  9287.     Local $ARET = DllCall("gdi32.dll", "bool", "GetDeviceGammaRamp", "handle", $HDC, "struct*", $TDATA)
  9288.     If @error Or Not $ARET[0] Then Return SetError(@error, @extended, 0)
  9289.     Dim $ARAMP[256][3]
  9290.     For $I = 0 To 2
  9291.         For $J = 0 To 255
  9292.             $ARAMP[$J][$I] = DllStructGetData($TDATA, $I + 1, $J + 1)
  9293.         Next
  9294.     Next
  9295.     Return 1
  9296. EndFunc   ;==>_WINAPI_GETDEVICEGAMMARAMP
  9297. Func _WinAPI_GetDIBColorTable($HBITMAP)
  9298.     Local $HDC = _WinAPI_CreateCompatibleDC(0)
  9299.     Local $HSV = _WinAPI_SelectObject($HDC, $HBITMAP)
  9300.     Local $TPEAK = DllStructCreate("dword[256]")
  9301.     Local $IERROR = 0
  9302.     Local $ARET = DllCall("gdi32.dll", "uint", "GetDIBColorTable", "handle", $HDC, "uint", 0, "uint", 256, "struct*", $TPEAK)
  9303.     If @error Or Not $ARET[0] Then $IERROR = @error + 10
  9304.     _WinAPI_SelectObject($HDC, $HSV)
  9305.     _WinAPI_DeleteDC($HDC)
  9306.     If $IERROR Then Return SetError($IERROR, 0, 0)
  9307.     Local $TDATA = DllStructCreate("dword[" & $ARET[0] & "]")
  9308.     If @error Then Return SetError(@error + 20, @extended, 0)
  9309.     _WinAPI_MoveMemory($TDATA, $ARET[4], 4 * $ARET[0])
  9310.     Return SetExtended($ARET[0], $TDATA)
  9311. EndFunc   ;==>_WINAPI_GETDIBCOLORTABLE
  9312. Func _WinAPI_GetDIBits($HDC, $HBITMAP, $ISTARTSCAN, $ISCANLINES, $PBITS, $TBI, $IUSAGE)
  9313.     Local $ARESULT = DllCall("gdi32.dll", "int", "GetDIBits", "handle", $HDC, "handle", $HBITMAP, "uint", $ISTARTSCAN, "uint", $ISCANLINES, "struct*", $PBITS, "struct*", $TBI, "uint", $IUSAGE)
  9314.     If @error Then Return SetError(@error, @extended, False)
  9315.     Return $ARESULT[0]
  9316. EndFunc   ;==>_WinAPI_GetDIBits
  9317. Func _WinAPI_GetEnhMetaFile($SFILEPATH)
  9318.     Local $ARET = DllCall("gdi32.dll", "handle", "GetEnhMetaFileW", "wstr", $SFILEPATH)
  9319.     If @error Then Return SetError(@error, @extended, 0)
  9320.     Return $ARET[0]
  9321. EndFunc   ;==>_WINAPI_GETENHMETAFILE
  9322. Func _WinAPI_GetEnhMetaFileBits($HEMF, ByRef $PBUFFER)
  9323.     Local $ARET = DllCall("gdi32.dll", "uint", "GetEnhMetaFileBits", "handle", $HEMF, "uint", 0, "ptr", 0)
  9324.     If @error Or Not $ARET[0] Then Return SetError(@error + 50, @extended, 0)
  9325.     $PBUFFER = __HEAPREALLOC($PBUFFER, $ARET[0], 1)
  9326.     If @error Then Return SetError(@error, @extended, 0)
  9327.     $ARET = DllCall("gdi32.dll", "uint", "GetEnhMetaFileBits", "handle", $HEMF, "uint", $ARET[0], "ptr", $PBUFFER)
  9328.     If Not $ARET[0] Then Return SetError(60, 0, 0)
  9329.     Return $ARET[2]
  9330. EndFunc   ;==>_WINAPI_GETENHMETAFILEBITS
  9331. Func _WinAPI_GetEnhMetaFileDescription($HEMF)
  9332.     Local $TDATA = DllStructCreate("wchar[4096]")
  9333.     Local $ARET = DllCall("gdi32.dll", "uint", "GetEnhMetaFileDescriptionW", "handle", $HEMF, "uint", 4096, "struct*", $TDATA)
  9334.     If @error Or ($ARET[0] = 4294967295) Then Return SetError(@error + 20, $ARET[0], 0)
  9335.     If Not $ARET[0] Then Return 0
  9336.     Local $ADATA = _WinAPI_StructToArray($TDATA)
  9337.     If @error Then Return SetError(@error, @extended, 0)
  9338.     Local $ARESULT[2]
  9339.     For $I = 0 To 1
  9340.         If $ADATA[0] > $I Then
  9341.             $ARESULT[$I] = $ADATA[$I + 1]
  9342.         Else
  9343.             $ARESULT[$I] = ""
  9344.         EndIf
  9345.     Next
  9346.     Return $ARESULT
  9347. EndFunc   ;==>_WINAPI_GETENHMETAFILEDESCRIPTION
  9348. Func _WinAPI_GetEnhMetaFileDimension($HEMF)
  9349.     Local $TENHMETAHEADER = _WinAPI_GetEnhMetaFileHeader($HEMF)
  9350.     If @error Then Return SetError(@error, @extended, 0)
  9351.     Local $TSIZE = DllStructCreate($TAGSIZE)
  9352.     DllStructSetData($TSIZE, 1, Round((DllStructGetData($TENHMETAHEADER, "rcFrame", 3) - DllStructGetData($TENHMETAHEADER, "rcFrame", 1)) * DllStructGetData($TENHMETAHEADER, "Device", 1) / DllStructGetData($TENHMETAHEADER, "Millimeters", 1) / 100))
  9353.     DllStructSetData($TSIZE, 2, Round((DllStructGetData($TENHMETAHEADER, "rcFrame", 4) - DllStructGetData($TENHMETAHEADER, "rcFrame", 2)) * DllStructGetData($TENHMETAHEADER, "Device", 2) / DllStructGetData($TENHMETAHEADER, "Millimeters", 2) / 100))
  9354.     Return $TSIZE
  9355. EndFunc   ;==>_WINAPI_GETENHMETAFILEDIMENSION
  9356. Func _WinAPI_GetEnhMetaFileHeader($HEMF)
  9357.     Local $TENHMETAHEADER = DllStructCreate($TAGENHMETAHEADER)
  9358.     Local $ARET = DllCall("gdi32.dll", "uint", "GetEnhMetaFileHeader", "handle", $HEMF, "uint", DllStructGetSize($TENHMETAHEADER), "struct*", $TENHMETAHEADER)
  9359.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9360.     Return SetExtended($ARET[0], $TENHMETAHEADER)
  9361. EndFunc   ;==>_WINAPI_GETENHMETAFILEHEADER
  9362. Func _WinAPI_GetFontName($SFACENAME, $ISTYLE = 0, $ICHARSET = 1)
  9363.     If Not $SFACENAME Then Return SetError(1, 0, "")
  9364.     Local $IFLAGS = 0
  9365.     If BitAND($ISTYLE, 1) Then
  9366.         $IFLAGS += 32
  9367.     EndIf
  9368.     If BitAND($ISTYLE, 2) Then
  9369.         $IFLAGS += 1
  9370.     EndIf
  9371.     If Not $IFLAGS Then
  9372.         $IFLAGS = 64
  9373.     EndIf
  9374.     Local $TLOGFONT = DllStructCreate($TAGLOGFONT)
  9375.     DllStructSetData($TLOGFONT, 9, $ICHARSET)
  9376.     DllStructSetData($TLOGFONT, 13, 0)
  9377.     DllStructSetData($TLOGFONT, 14, StringLeft($SFACENAME, 31))
  9378.     Local $TFN = DllStructCreate("dword;wchar[64]")
  9379.     DllStructSetData($TFN, 1, $IFLAGS)
  9380.     DllStructSetData($TFN, 2, "")
  9381.     Local $HDC = _WinAPI_CreateCompatibleDC(0)
  9382.     Local $HENUMPROC = DllCallbackRegister("__EnumFontStylesProc", "int", "ptr;ptr;dword;lparam")
  9383.     Local $SRET = ""
  9384.     Local $ARET = DllCall("gdi32.dll", "int", "EnumFontFamiliesExW", "handle", $HDC, "struct*", $TLOGFONT, "ptr", DllCallbackGetPtr($HENUMPROC), "struct*", $TFN, "dword", 0)
  9385.     If Not @error And Not $ARET[0] Then $SRET = DllStructGetData($TFN, 2)
  9386.     DllCallbackFree($HENUMPROC)
  9387.     _WinAPI_DeleteDC($HDC)
  9388.     If Not $SRET Then Return SetError(2, 0, "")
  9389.     Return $SRET
  9390. EndFunc   ;==>_WINAPI_GETFONTNAME
  9391. Func _WinAPI_GetFontResourceInfo($SFONT, $BFORCE = False, $IFLAG = Default)
  9392.     If $IFLAG = Default Then
  9393.         If $BFORCE Then
  9394.             If Not _WinAPI_AddFontResourceEx($SFONT, $FR_NOT_ENUM) Then Return SetError(@error + 20, @extended, "")
  9395.         EndIf
  9396.         Local $IERROR = 0
  9397.         Local $ARET = DllCall("gdi32.dll", "bool", "GetFontResourceInfoW", "wstr", $SFONT, "dword*", 4096, "wstr", "", "dword", 1)
  9398.         If @error Or Not $ARET[0] Then $IERROR = @error + 10
  9399.         If $BFORCE Then
  9400.             _WinAPI_RemoveFontResourceEx($SFONT, $FR_NOT_ENUM)
  9401.         EndIf
  9402.         If $IERROR Then Return SetError($IERROR, 0, "")
  9403.         Return $ARET[3]
  9404.     Else
  9405.         If Not FileExists($SFONT) Then
  9406.             $SFONT = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "Fonts") & "\" & $SFONT
  9407.             If Not FileExists($SFONT) Then Return SetError(31, 0, "")
  9408.         EndIf
  9409.         Local Const $HFILE = _WinAPI_CreateFile($SFONT, 2, 2, 2)
  9410.         If Not $HFILE Then Return SetError(32, _WinAPI_GetLastError(), "")
  9411.         Local Const $IFILE = FileGetSize($SFONT)
  9412.         Local Const $TBUFFER = DllStructCreate("byte[" & $IFILE + 1 & "]")
  9413.         Local Const $PFILE = DllStructGetPtr($TBUFFER)
  9414.         Local $IREAD
  9415.         _WinAPI_ReadFile($HFILE, $PFILE, $IFILE, $IREAD)
  9416.         _WinAPI_CloseHandle($HFILE)
  9417.         Local $STTFNAME = _WinAPI_GetFontMemoryResourceInfo($PFILE, $IFLAG)
  9418.         If @error Then
  9419.             If @error = 1 And $IFLAG = 4 Then
  9420.                 $STTFNAME = _WinAPI_GetFontResourceInfo($SFONT, True)
  9421.                 Return SetError(@error, @extended, $STTFNAME)
  9422.             EndIf
  9423.             Return SetError(33, @error, "")
  9424.         EndIf
  9425.         Return $STTFNAME
  9426.     EndIf
  9427. EndFunc   ;==>_WINAPI_GETFONTRESOURCEINFO
  9428. Func _WinAPI_GetFontMemoryResourceInfo($PMEMORY, $IFLAG = 1)
  9429.     Local Const $TAGTT_OFFSET_TABLE = "USHORT uMajorVersion;USHORT uMinorVersion;USHORT uNumOfTables;USHORT uSearchRange;USHORT uEntrySelector;USHORT uRangeShift"
  9430.     Local Const $TAGTT_TABLE_DIRECTORY = "char szTag[4];ULONG uCheckSum;ULONG uOffset;ULONG uLength"
  9431.     Local Const $TAGTT_NAME_TABLE_HEADER = "USHORT uFSelector;USHORT uNRCount;USHORT uStorageOffset"
  9432.     Local Const $TAGTT_NAME_RECORD = "USHORT uPlatformID;USHORT uEncodingID;USHORT uLanguageID;USHORT uNameID;USHORT uStringLength;USHORT uStringOffset"
  9433.     Local $TTTOFFSETTABLE = DllStructCreate($TAGTT_OFFSET_TABLE, $PMEMORY)
  9434.     Local $INUMOFTABLES = _WinAPI_SwapWord(DllStructGetData($TTTOFFSETTABLE, "uNumOfTables"))
  9435.     If Not (_WinAPI_SwapWord(DllStructGetData($TTTOFFSETTABLE, "uMajorVersion")) = 1 And _WinAPI_SwapWord(DllStructGetData($TTTOFFSETTABLE, "uMinorVersion")) = 0) Then Return SetError(1, 0, "")
  9436.     Local $ITBLDIRSIZE = DllStructGetSize(DllStructCreate($TAGTT_TABLE_DIRECTORY))
  9437.     Local $BFOUND = False, $IOFFSET, $TTBLDIR
  9438.     For $I = 0 To $INUMOFTABLES - 1
  9439.         $TTBLDIR = DllStructCreate($TAGTT_TABLE_DIRECTORY, $PMEMORY + DllStructGetSize($TTTOFFSETTABLE) + $I * $ITBLDIRSIZE)
  9440.         If StringLeft(DllStructGetData($TTBLDIR, "szTag"), 4) = "name" Then
  9441.             $BFOUND = True
  9442.             $IOFFSET = _WinAPI_SwapDWord(DllStructGetData($TTBLDIR, "uOffset"))
  9443.             ExitLoop
  9444.         EndIf
  9445.     Next
  9446.     If Not $BFOUND Then Return SetError(2, 0, "")
  9447.     Local $TNTHEADER = DllStructCreate($TAGTT_NAME_TABLE_HEADER, $PMEMORY + $IOFFSET)
  9448.     Local $INTHEADERSIZE = DllStructGetSize($TNTHEADER)
  9449.     Local $INRCOUNT = _WinAPI_SwapWord(DllStructGetData($TNTHEADER, "uNRCount"))
  9450.     Local $ISTORAGEOFFSET = _WinAPI_SwapWord(DllStructGetData($TNTHEADER, "uStorageOffset"))
  9451.     Local $ITTRECORDSIZE = DllStructGetSize(DllStructCreate($TAGTT_NAME_RECORD))
  9452.     Local $TRESULT, $SRESULT, $ISTRINGLENGTH, $ISTRINGOFFSET, $IENCODINGID, $TTTRECORD
  9453.     For $I = 0 To $INRCOUNT - 1
  9454.         $TTTRECORD = DllStructCreate($TAGTT_NAME_RECORD, $PMEMORY + $IOFFSET + $INTHEADERSIZE + $I * $ITTRECORDSIZE)
  9455.         If _WinAPI_SwapWord($TTTRECORD.uNameID) = $IFLAG Then
  9456.             $ISTRINGLENGTH = _WinAPI_SwapWord(DllStructGetData($TTTRECORD, "uStringLength"))
  9457.             $ISTRINGOFFSET = _WinAPI_SwapWord(DllStructGetData($TTTRECORD, "uStringOffset"))
  9458.             $IENCODINGID = _WinAPI_SwapWord(DllStructGetData($TTTRECORD, "uEncodingID"))
  9459.             Local $SWCHAR = "char"
  9460.             If $IENCODINGID = 1 Then
  9461.                 $SWCHAR = "word"
  9462.                 $ISTRINGLENGTH = $ISTRINGLENGTH / 2
  9463.             EndIf
  9464.             $TRESULT = DllStructCreate($SWCHAR & " szTTFName[" & $ISTRINGLENGTH & "]", $PMEMORY + $IOFFSET + $ISTRINGOFFSET + $ISTORAGEOFFSET)
  9465.             If $IENCODINGID = 1 Then
  9466.                 $SRESULT = ""
  9467.                 For $J = 1 To $ISTRINGLENGTH
  9468.                     $SRESULT &= ChrW(_WinAPI_SwapWord(DllStructGetData($TRESULT, 1, $J)))
  9469.                 Next
  9470.             Else
  9471.                 $SRESULT = $TRESULT.szTTFName
  9472.             EndIf
  9473.             If StringLen($SRESULT) > 0 Then ExitLoop
  9474.         EndIf
  9475.     Next
  9476.     Return $SRESULT
  9477. EndFunc   ;==>_WINAPI_GETFONTMEMORYRESOURCEINFO
  9478. Func _WinAPI_GetGlyphOutline($HDC, $SCHAR, $IFORMAT, ByRef $PBUFFER, $TMAT2 = 0)
  9479.     Local $TGM = DllStructCreate($TAGGLYPHMETRICS)
  9480.     Local $ARET, $ILENGTH = 0
  9481.     If Not IsDllStruct($TMAT2) Then
  9482.         $TMAT2 = DllStructCreate("short[8]")
  9483.         DllStructSetData($TMAT2, 1, 1, 2)
  9484.         DllStructSetData($TMAT2, 1, 1, 8)
  9485.     EndIf
  9486.     If $IFORMAT Then
  9487.         $ARET = DllCall("gdi32.dll", "dword", "GetGlyphOutlineW", "handle", $HDC, "uint", AscW($SCHAR), "uint", $IFORMAT, "struct*", $TGM, "dword", 0, "ptr", 0, "struct*", $TMAT2)
  9488.         If @error Or ($ARET[0] = 4294967295) Then Return SetError(@error + 10, @extended, 0)
  9489.         $ILENGTH = $ARET[0]
  9490.         $PBUFFER = __HEAPREALLOC($PBUFFER, $ILENGTH, 1)
  9491.         If @error Then Return SetError(@error + 20, @extended, 0)
  9492.     EndIf
  9493.     $ARET = DllCall("gdi32.dll", "dword", "GetGlyphOutlineW", "handle", $HDC, "uint", AscW($SCHAR), "uint", $IFORMAT, "struct*", $TGM, "dword", $ILENGTH, "ptr", $PBUFFER, "struct*", $TMAT2)
  9494.     If @error Then Return SetError(@error, @extended, 0)
  9495.     If $ARET[0] = 4294967295 Then Return SetError(10, -1, 0)
  9496.     Return SetExtended($ILENGTH, $TGM)
  9497. EndFunc   ;==>_WINAPI_GETGLYPHOUTLINE
  9498. Func _WinAPI_GetGraphicsMode($HDC)
  9499.     Local $ARET = DllCall("gdi32.dll", "int", "GetGraphicsMode", "handle", $HDC)
  9500.     If @error Or Not $ARET[0] Then Return SetError(@error, @extended, 0)
  9501.     Return $ARET[0]
  9502. EndFunc   ;==>_WINAPI_GETGRAPHICSMODE
  9503. Func _WinAPI_GetGValue($IRGB)
  9504.     Return BitShift(BitAND(__RGB($IRGB), 65280), 8)
  9505. EndFunc   ;==>_WINAPI_GETGVALUE
  9506. Func _WinAPI_GetMapMode($HDC)
  9507.     Local $ARET = DllCall("gdi32.dll", "int", "GetMapMode", "handle", $HDC)
  9508.     If @error Then Return SetError(@error, @extended, 0)
  9509.     Return $ARET[0]
  9510. EndFunc   ;==>_WINAPI_GETMAPMODE
  9511. Func _WinAPI_GetMonitorInfo($HMONITOR)
  9512.     Local $TMIEX = DllStructCreate("dword;long[4];long[4];dword;wchar[32]")
  9513.     DllStructSetData($TMIEX, 1, DllStructGetSize($TMIEX))
  9514.     Local $ARET = DllCall("user32.dll", "bool", "GetMonitorInfoW", "handle", $HMONITOR, "struct*", $TMIEX)
  9515.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9516.     Local $ARESULT[4]
  9517.     For $I = 0 To 1
  9518.         $ARESULT[$I] = DllStructCreate($TAGRECT)
  9519.         _WinAPI_MoveMemory($ARESULT[$I], DllStructGetPtr($TMIEX, $I + 2), 16)
  9520.     Next
  9521.     $ARESULT[3] = DllStructGetData($TMIEX, 5)
  9522.     Switch DllStructGetData($TMIEX, 4)
  9523.         Case 1
  9524.             $ARESULT[2] = 1
  9525.         Case Else
  9526.             $ARESULT[2] = 0
  9527.     EndSwitch
  9528.     Return $ARESULT
  9529. EndFunc   ;==>_WINAPI_GETMONITORINFO
  9530. Func _WinAPI_GetOutlineTextMetrics($HDC)
  9531.     Local $ARET = DllCall("gdi32.dll", "uint", "GetOutlineTextMetricsW", "handle", $HDC, "uint", 0, "ptr", 0)
  9532.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9533.     Local $TDATA = DllStructCreate("byte[" & $ARET[0] & "]")
  9534.     Local $TOLTM = DllStructCreate($TAGOUTLINETEXTMETRIC, DllStructGetPtr($TDATA))
  9535.     $ARET = DllCall("gdi32.dll", "uint", "GetOutlineTextMetricsW", "handle", $HDC, "uint", $ARET[0], "struct*", $TDATA)
  9536.     If Not $ARET[0] Then Return SetError(20, 0, 0)
  9537.     Return $TOLTM
  9538. EndFunc   ;==>_WINAPI_GETOUTLINETEXTMETRICS
  9539. Func _WinAPI_GetPixel($HDC, $IX, $IY)
  9540.     Local $ARET = DllCall("gdi32.dll", "dword", "GetPixel", "handle", $HDC, "int", $IX, "int", $IY)
  9541.     If @error Or ($ARET[0] = 4294967295) Then Return SetError(@error, @extended, -1)
  9542.     Return __RGB($ARET[0])
  9543. EndFunc   ;==>_WINAPI_GETPIXEL
  9544. Func _WinAPI_GetPolyFillMode($HDC)
  9545.     Local $ARET = DllCall("gdi32.dll", "int", "GetPolyFillMode", "handle", $HDC)
  9546.     If @error Then Return SetError(@error, @extended, 0)
  9547.     Return $ARET[0]
  9548. EndFunc   ;==>_WINAPI_GETPOLYFILLMODE
  9549. Func _WinAPI_GetPosFromRect($TRECT)
  9550.     Local $ARESULT[4]
  9551.     For $I = 0 To 3
  9552.         $ARESULT[$I] = DllStructGetData($TRECT, $I + 1)
  9553.         If @error Then Return SetError(@error, @extended, 0)
  9554.     Next
  9555.     For $I = 2 To 3
  9556.         $ARESULT[$I] -= $ARESULT[$I - 2]
  9557.     Next
  9558.     Return $ARESULT
  9559. EndFunc   ;==>_WINAPI_GETPOSFROMRECT
  9560. Func _WinAPI_GetRegionData($HRGN, ByRef $TRGNDATA)
  9561.     Local $ARET = DllCall("gdi32.dll", "dword", "GetRegionData", "handle", $HRGN, "dword", 0, "ptr", 0)
  9562.     If @error Or Not $ARET[0] Then
  9563.         $TRGNDATA = 0
  9564.         Return SetError(@error, @extended, False)
  9565.     EndIf
  9566.     $TRGNDATA = DllStructCreate($TAGRGNDATAHEADER)
  9567.     Local $IRECTSIZE = $ARET[0] - DllStructGetSize($TRGNDATA)
  9568.     If $IRECTSIZE > 0 Then $TRGNDATA = DllStructCreate($TAGRGNDATAHEADER & ";byte[" & $IRECTSIZE & "]")
  9569.     $ARET = DllCall("gdi32.dll", "dword", "GetRegionData", "handle", $HRGN, "dword", $ARET[0], "struct*", $TRGNDATA)
  9570.     If Not $ARET[0] Then $TRGNDATA = 0
  9571.     Return $ARET[0]
  9572. EndFunc   ;==>_WINAPI_GETREGIONDATA
  9573. Func _WinAPI_GetRgnBox($HRGN, ByRef $TRECT)
  9574.     $TRECT = DllStructCreate($TAGRECT)
  9575.     Local $ARET = DllCall("gdi32.dll", "int", "GetRgnBox", "handle", $HRGN, "struct*", $TRECT)
  9576.     If @error Or Not $ARET[0] Then
  9577.         $TRECT = 0
  9578.         Return SetError(@error, @extended, 0)
  9579.     EndIf
  9580.     Return $ARET[0]
  9581. EndFunc   ;==>_WINAPI_GETRGNBOX
  9582. Func _WinAPI_GetROP2($HDC)
  9583.     Local $ARET = DllCall("gdi32.dll", "int", "GetROP2", "handle", $HDC)
  9584.     If @error Then Return SetError(@error, @extended, 0)
  9585.     Return $ARET[0]
  9586. EndFunc   ;==>_WINAPI_GETROP2
  9587. Func _WinAPI_GetRValue($IRGB)
  9588.     Return BitAND(__RGB($IRGB), 255)
  9589. EndFunc   ;==>_WINAPI_GETRVALUE
  9590. Func _WinAPI_GetStretchBltMode($HDC)
  9591.     Local $ARET = DllCall("gdi32.dll", "int", "GetStretchBltMode", "handle", $HDC)
  9592.     If @error Then Return SetError(@error, @extended, 0)
  9593.     Return $ARET[0]
  9594. EndFunc   ;==>_WINAPI_GETSTRETCHBLTMODE
  9595. Func _WinAPI_GetTabbedTextExtent($HDC, $STEXT, $ATAB = 0, $ISTART = 0, $IEND = -1)
  9596.     Local $ITAB, $ICOUNT
  9597.     If Not IsArray($ATAB) Then
  9598.         If $ATAB Then
  9599.             $ITAB = $ATAB
  9600.             Dim $ATAB[1] = [$ITAB]
  9601.             $ISTART = 0
  9602.             $IEND = 0
  9603.             $ICOUNT = 1
  9604.         Else
  9605.             $ICOUNT = 0
  9606.         EndIf
  9607.     Else
  9608.         $ICOUNT = 1
  9609.     EndIf
  9610.     Local $TTAB = 0
  9611.     If $ICOUNT Then
  9612.         If __CHECKERRORARRAYBOUNDS($ATAB, $ISTART, $IEND) Then Return SetError(@error + 10, @extended, 0)
  9613.         $ICOUNT = $IEND - $ISTART + 1
  9614.         $TTAB = DllStructCreate("uint[" & $ICOUNT & "]")
  9615.         $ITAB = 1
  9616.         For $I = $ISTART To $IEND
  9617.             DllStructSetData($TTAB, 1, $ATAB[$I], $ITAB)
  9618.             $ITAB += 1
  9619.         Next
  9620.     EndIf
  9621.     Local $ARET = DllCall("user32.dll", "dword", "GetTabbedTextExtentW", "handle", $HDC, "wstr", $STEXT, "int", StringLen($STEXT), "int", $ICOUNT, "struct*", $TTAB)
  9622.     If @error Or Not $ARET[0] Then Return SetError(@error + 20, @extended, 0)
  9623.     Return _WinAPI_CreateSize(_WinAPI_LoWord($ARET[0]), _WinAPI_HiWord($ARET[0]))
  9624. EndFunc   ;==>_WINAPI_GETTABBEDTEXTEXTENT
  9625. Func _WinAPI_GetTextAlign($HDC)
  9626.     Local $ARET = DllCall("gdi32.dll", "uint", "GetTextAlign", "handle", $HDC)
  9627.     If @error Or ($ARET[0] = 4294967295) Then Return SetError(@error, @extended, -1)
  9628.     Return $ARET[0]
  9629. EndFunc   ;==>_WINAPI_GETTEXTALIGN
  9630. Func _WinAPI_GetTextCharacterExtra($HDC)
  9631.     Local $ARET = DllCall("gdi32.dll", "int", "GetTextCharacterExtra", "handle", $HDC)
  9632.     If @error Or ($ARET[0] = 134217728) Then Return SetError(@error, @extended, -1)
  9633.     Return $ARET[0]
  9634. EndFunc   ;==>_WINAPI_GETTEXTCHARACTEREXTRA
  9635. Func _WinAPI_GetTextFace($HDC)
  9636.     Local $ARET = DllCall("gdi32.dll", "int", "GetTextFaceW", "handle", $HDC, "int", 2048, "wstr", "")
  9637.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, "")
  9638.     Return $ARET[3]
  9639. EndFunc   ;==>_WINAPI_GETTEXTFACE
  9640. Func _WinAPI_GetUDFColorMode()
  9641.     Return Number($__G_IRGBMODE)
  9642. EndFunc   ;==>_WINAPI_GETUDFCOLORMODE
  9643. Func _WinAPI_GetUpdateRect($HWND, $BERASE = True)
  9644.     Local $TRECT = DllStructCreate($TAGRECT)
  9645.     Local $ARET = DllCall("user32.dll", "bool", "GetUpdateRect", "hwnd", $HWND, "struct*", $TRECT, "bool", $BERASE)
  9646.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9647.     Return $TRECT
  9648. EndFunc   ;==>_WINAPI_GETUPDATERECT
  9649. Func _WinAPI_GetUpdateRgn($HWND, $HRGN, $BERASE = True)
  9650.     Local $ARET = DllCall("user32.dll", "int", "GetUpdateRgn", "hwnd", $HWND, "handle", $HRGN, "bool", $BERASE)
  9651.     If @error Then Return SetError(@error, @extended, 0)
  9652.     Return $ARET[0]
  9653. EndFunc   ;==>_WINAPI_GETUPDATERGN
  9654. Func _WinAPI_GetWindowExt($HDC)
  9655.     Local $TSIZE = DllStructCreate($TAGSIZE)
  9656.     Local $ARET = DllCall("gdi32.dll", "bool", "GetWindowExtEx", "handle", $HDC, "struct*", $TSIZE)
  9657.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9658.     Return $TSIZE
  9659. EndFunc   ;==>_WINAPI_GETWINDOWEXT
  9660. Func _WinAPI_GetWindowOrg($HDC)
  9661.     Local $TPOINT = DllStructCreate($TAGPOINT)
  9662.     Local $ARET = DllCall("gdi32.dll", "bool", "GetWindowOrgEx", "handle", $HDC, "struct*", $TPOINT)
  9663.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9664.     Return $TPOINT
  9665. EndFunc   ;==>_WINAPI_GETWINDOWORG
  9666. Func _WinAPI_GetWindowRgnBox($HWND, ByRef $TRECT)
  9667.     $TRECT = DllStructCreate($TAGRECT)
  9668.     Local $ARET = DllCall("gdi32.dll", "int", "GetWindowRgnBox", "hwnd", $HWND, "struct*", $TRECT)
  9669.     If @error Then Return SetError(@error, @extended, 0)
  9670.     Return $ARET[0]
  9671. EndFunc   ;==>_WINAPI_GETWINDOWRGNBOX
  9672. Func _WinAPI_GetWorldTransform($HDC)
  9673.     Local $TXFORM = DllStructCreate($TAGXFORM)
  9674.     Local $ARET = DllCall("gdi32.dll", "bool", "GetWorldTransform", "handle", $HDC, "struct*", $TXFORM)
  9675.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9676.     Return $TXFORM
  9677. EndFunc   ;==>_WINAPI_GETWORLDTRANSFORM
  9678. Func _WinAPI_GradientFill($HDC, Const ByRef $AVERTEX, $ISTART = 0, $IEND = -1, $BROTATE = False)
  9679.     If __CHECKERRORARRAYBOUNDS($AVERTEX, $ISTART, $IEND, 2) Then Return SetError(@error + 10, @extended, 0)
  9680.     If UBound($AVERTEX, $UBOUND_COLUMNS) < 3 Then Return SetError(13, 0, 0)
  9681.     Local $IPOINT = $IEND - $ISTART + 1
  9682.     If $IPOINT > 3 Then
  9683.         $IEND = $ISTART + 2
  9684.         $IPOINT = 3
  9685.     EndIf
  9686.     Local $IMODE
  9687.     Switch $IPOINT
  9688.         Case 2
  9689.             $IMODE = Number(Not $BROTATE)
  9690.         Case 3
  9691.             $IMODE = 2
  9692.         Case Else
  9693.             Return SetError(15, 0, 0)
  9694.     EndSwitch
  9695.     Local $TAGSTRUCT = ""
  9696.     For $I = $ISTART To $IEND
  9697.         $TAGSTRUCT &= "ushort[8];"
  9698.     Next
  9699.     Local $TVERTEX = DllStructCreate($TAGSTRUCT)
  9700.     Local $ICOUNT = 1
  9701.     Local $TGRADIENT = DllStructCreate("ulong[" & $IPOINT & "]")
  9702.     For $I = $ISTART To $IEND
  9703.         DllStructSetData($TGRADIENT, 1, $ICOUNT - 1, $ICOUNT)
  9704.         DllStructSetData($TVERTEX, $ICOUNT, _WinAPI_LoWord($AVERTEX[$I][0]), 1)
  9705.         DllStructSetData($TVERTEX, $ICOUNT, _WinAPI_HiWord($AVERTEX[$I][0]), 2)
  9706.         DllStructSetData($TVERTEX, $ICOUNT, _WinAPI_LoWord($AVERTEX[$I][1]), 3)
  9707.         DllStructSetData($TVERTEX, $ICOUNT, _WinAPI_HiWord($AVERTEX[$I][1]), 4)
  9708.         DllStructSetData($TVERTEX, $ICOUNT, BitShift(_WinAPI_GetRValue($AVERTEX[$I][2]), -8), 5)
  9709.         DllStructSetData($TVERTEX, $ICOUNT, BitShift(_WinAPI_GetGValue($AVERTEX[$I][2]), -8), 6)
  9710.         DllStructSetData($TVERTEX, $ICOUNT, BitShift(_WinAPI_GetBValue($AVERTEX[$I][2]), -8), 7)
  9711.         DllStructSetData($TVERTEX, $ICOUNT, 0, 8)
  9712.         $ICOUNT += 1
  9713.     Next
  9714.     Local $ARET = DllCall("gdi32.dll", "bool", "GdiGradientFill", "handle", $HDC, "struct*", $TVERTEX, "ulong", $IPOINT, "struct*", $TGRADIENT, "ulong", 1, "ulong", $IMODE)
  9715.     If @error Then Return SetError(@error, @extended, 0)
  9716.     Return $ARET[0]
  9717. EndFunc   ;==>_WINAPI_GRADIENTFILL
  9718. Func _WinAPI_InflateRect(ByRef $TRECT, $IDX, $IDY)
  9719.     Local $ARET = DllCall("user32.dll", "bool", "InflateRect", "struct*", $TRECT, "int", $IDX, "int", $IDY)
  9720.     If @error Then Return SetError(@error, @extended, False)
  9721.     Return $ARET[0]
  9722. EndFunc   ;==>_WINAPI_INFLATERECT
  9723. Func _WinAPI_IntersectClipRect($HDC, $TRECT)
  9724.     Local $ARET = DllCall("gdi32.dll", "int", "IntersectClipRect", "handle", $HDC, "int", DllStructGetData($TRECT, 1), "int", DllStructGetData($TRECT, 2), "int", DllStructGetData($TRECT, 3), "int", DllStructGetData($TRECT, 4))
  9725.     If @error Then Return SetError(@error, @extended, 0)
  9726.     Return $ARET[0]
  9727. EndFunc   ;==>_WINAPI_INTERSECTCLIPRECT
  9728. Func _WinAPI_IntersectRect($TRECT1, $TRECT2)
  9729.     Local $TRECT = DllStructCreate($TAGRECT)
  9730.     Local $ARET = DllCall("user32.dll", "bool", "IntersectRect", "struct*", $TRECT, "struct*", $TRECT1, "struct*", $TRECT2)
  9731.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9732.     Return $TRECT
  9733. EndFunc   ;==>_WINAPI_INTERSECTRECT
  9734. Func _WinAPI_InvalidateRgn($HWND, $HRGN = 0, $BERASE = True)
  9735.     Local $ARET = DllCall("user32.dll", "bool", "InvalidateRgn", "hwnd", $HWND, "handle", $HRGN, "bool", $BERASE)
  9736.     If @error Then Return SetError(@error, @extended, False)
  9737.     Return $ARET[0]
  9738. EndFunc   ;==>_WINAPI_INVALIDATERGN
  9739. Func _WinAPI_InvertANDBitmap($HBITMAP, $BDELETE = False)
  9740.     Local $TBITMAP = DllStructCreate($TAGBITMAP)
  9741.     If Not _WinAPI_GetObject($HBITMAP, DllStructGetSize($TBITMAP), $TBITMAP) Or (DllStructGetData($TBITMAP, "bmBitsPixel") <> 1) Then
  9742.         Return SetError(@error + 10, @extended, 0)
  9743.     EndIf
  9744.     Local $HRESULT = _WinAPI_CreateDIB(DllStructGetData($TBITMAP, "bmWidth"), DllStructGetData($TBITMAP, "bmHeight"), 1)
  9745.     If Not $HRESULT Then Return SetError(@error, @extended, 0)
  9746.     Local $HSRCDC = _WinAPI_CreateCompatibleDC(0)
  9747.     Local $HSRCSV = _WinAPI_SelectObject($HSRCDC, $HBITMAP)
  9748.     Local $HDSTDC = _WinAPI_CreateCompatibleDC(0)
  9749.     Local $HDSTSV = _WinAPI_SelectObject($HDSTDC, $HRESULT)
  9750.     _WinAPI_BitBlt($HDSTDC, 0, 0, DllStructGetData($TBITMAP, "bmWidth"), DllStructGetData($TBITMAP, "bmHeight"), $HSRCDC, 0, 0, 3342344)
  9751.     _WinAPI_SelectObject($HSRCDC, $HSRCSV)
  9752.     _WinAPI_DeleteDC($HSRCDC)
  9753.     _WinAPI_SelectObject($HDSTDC, $HDSTSV)
  9754.     _WinAPI_DeleteDC($HDSTDC)
  9755.     If $BDELETE Then
  9756.         _WinAPI_DeleteObject($HBITMAP)
  9757.     EndIf
  9758.     Return $HRESULT
  9759. EndFunc   ;==>_WINAPI_INVERTANDBITMAP
  9760. Func _WinAPI_InvertColor($ICOLOR)
  9761.     If $ICOLOR = -1 Then Return 0
  9762.     Return 16777215 - BitAND($ICOLOR, 16777215)
  9763. EndFunc   ;==>_WINAPI_INVERTCOLOR
  9764. Func _WinAPI_InvertRect($HDC, ByRef $TRECT)
  9765.     Local $ARET = DllCall("user32.dll", "bool", "InvertRect", "handle", $HDC, "struct*", $TRECT)
  9766.     If @error Then Return SetError(@error, @extended, False)
  9767.     Return $ARET[0]
  9768. EndFunc   ;==>_WINAPI_INVERTRECT
  9769. Func _WinAPI_InvertRgn($HDC, $HRGN)
  9770.     Local $ARET = DllCall("gdi32.dll", "bool", "InvertRgn", "handle", $HDC, "handle", $HRGN)
  9771.     If @error Then Return SetError(@error, @extended, False)
  9772.     Return $ARET[0]
  9773. EndFunc   ;==>_WINAPI_INVERTRGN
  9774. Func _WinAPI_IsRectEmpty(ByRef $TRECT)
  9775.     Local $ARET = DllCall("user32.dll", "bool", "IsRectEmpty", "struct*", $TRECT)
  9776.     If @error Then Return SetError(@error, @extended, False)
  9777.     Return $ARET[0]
  9778. EndFunc   ;==>_WINAPI_ISRECTEMPTY
  9779. Func _WinAPI_LineDDA($IX1, $IY1, $IX2, $IY2, $PLINEPROC, $PDATA = 0)
  9780.     Local $ARET = DllCall("gdi32.dll", "bool", "LineDDA", "int", $IX1, "int", $IY1, "int", $IX2, "int", $IY2, "ptr", $PLINEPROC, "lparam", $PDATA)
  9781.     If @error Then Return SetError(@error, @extended, False)
  9782.     Return $ARET[0]
  9783. EndFunc   ;==>_WINAPI_LINEDDA
  9784. Func _WinAPI_LineTo($HDC, $IX, $IY)
  9785.     Local $ARESULT = DllCall("gdi32.dll", "bool", "LineTo", "handle", $HDC, "int", $IX, "int", $IY)
  9786.     If @error Then Return SetError(@error, @extended, False)
  9787.     Return $ARESULT[0]
  9788. EndFunc   ;==>_WinAPI_LineTo
  9789. Func _WinAPI_LockWindowUpdate($HWND)
  9790.     Local $ARET = DllCall("user32.dll", "bool", "LockWindowUpdate", "hwnd", $HWND)
  9791.     If @error Then Return SetError(@error, @extended, False)
  9792.     Return $ARET[0]
  9793. EndFunc   ;==>_WINAPI_LOCKWINDOWUPDATE
  9794. Func _WinAPI_LPtoDP($HDC, ByRef $TPOINT, $ICOUNT = 1)
  9795.     Local $ARET = DllCall("gdi32.dll", "bool", "LPtoDP", "handle", $HDC, "struct*", $TPOINT, "int", $ICOUNT)
  9796.     If @error Then Return SetError(@error, @extended, False)
  9797.     Return $ARET[0]
  9798. EndFunc   ;==>_WINAPI_LPTODP
  9799. Func _WinAPI_MaskBlt($HDESTDC, $IXDEST, $IYDEST, $IWIDTH, $IHEIGHT, $HSRCDC, $IXSRC, $IYSRC, $HMASK, $IXMASK, $IYMASK, $IROP)
  9800.     Local $ARET = DllCall("gdi32.dll", "bool", "MaskBlt", "handle", $HDESTDC, "int", $IXDEST, "int", $IYDEST, "int", $IWIDTH, "int", $IHEIGHT, "hwnd", $HSRCDC, "int", $IXSRC, "int", $IYSRC, "handle", $HMASK, "int", $IXMASK, "int", $IYMASK, "dword", $IROP)
  9801.     If @error Then Return SetError(@error, @extended, False)
  9802.     Return $ARET[0]
  9803. EndFunc   ;==>_WINAPI_MASKBLT
  9804. Func _WinAPI_ModifyWorldTransform($HDC, ByRef $TXFORM, $IMODE)
  9805.     Local $ARET = DllCall("gdi32.dll", "bool", "ModifyWorldTransform", "handle", $HDC, "struct*", $TXFORM, "dword", $IMODE)
  9806.     If @error Then Return SetError(@error, @extended, False)
  9807.     Return $ARET[0]
  9808. EndFunc   ;==>_WINAPI_MODIFYWORLDTRANSFORM
  9809. Func _WinAPI_MonitorFromPoint(ByRef $TPOINT, $IFLAG = 1)
  9810.     If DllStructGetSize($TPOINT) <> 8 Then Return SetError(@error + 10, @extended, 0)
  9811.     Local $ARET = DllCall("user32.dll", "handle", "MonitorFromPoint", "struct", $TPOINT, "dword", $IFLAG)
  9812.     If @error Then Return SetError(@error, @extended, 0)
  9813.     Return $ARET[0]
  9814. EndFunc   ;==>_WINAPI_MONITORFROMPOINT
  9815. Func _WinAPI_MonitorFromRect(ByRef $TRECT, $IFLAG = 1)
  9816.     Local $ARET = DllCall("user32.dll", "ptr", "MonitorFromRect", "struct*", $TRECT, "dword", $IFLAG)
  9817.     If @error Then Return SetError(@error, @extended, 0)
  9818.     Return $ARET[0]
  9819. EndFunc   ;==>_WINAPI_MONITORFROMRECT
  9820. Func _WinAPI_MonitorFromWindow($HWND, $IFLAG = 1)
  9821.     Local $ARET = DllCall("user32.dll", "handle", "MonitorFromWindow", "hwnd", $HWND, "dword", $IFLAG)
  9822.     If @error Then Return SetError(@error, @extended, 0)
  9823.     Return $ARET[0]
  9824. EndFunc   ;==>_WINAPI_MONITORFROMWINDOW
  9825. Func _WinAPI_MoveTo($HDC, $IX, $IY)
  9826.     Local $ARESULT = DllCall("gdi32.dll", "bool", "MoveToEx", "handle", $HDC, "int", $IX, "int", $IY, "ptr", 0)
  9827.     If @error Then Return SetError(@error, @extended, False)
  9828.     Return $ARESULT[0]
  9829. EndFunc   ;==>_WinAPI_MoveTo
  9830. Func _WinAPI_MoveToEx($HDC, $IX, $IY)
  9831.     Local $TPOINT = DllStructCreate($TAGPOINT)
  9832.     Local $ARET = DllCall("gdi32.dll", "bool", "MoveToEx", "handle", $HDC, "int", $IX, "int", $IY, "struct*", $TPOINT)
  9833.     If @error Or Not $ARET[0] Then Return SetError(@error + 10, @extended, 0)
  9834.     Return $TPOINT
  9835. EndFunc   ;==>_WINAPI_MOVETOEX
  9836. Func _WinAPI_OffsetClipRgn($HDC, $IXOFFSET, $IYOFFSET)
  9837.     Local $ARET = DllCall("gdi32.dll", "int", "OffsetClipRgn", "handle", $HDC, "int", $IXOFFSET, "int", $IYOFFSET)
  9838.     If @error Then Return SetError(@error, @extended, 0)
  9839.     Return $ARET[0]
  9840. EndFunc   ;==>_WINAPI_OFFSETCLIPRGN
  9841. Func _WinAPI_OffsetPoints(ByRef $APOINT, $IXOFFSET, $IYOFFSET, $ISTART = 0, $IEND = -1)
  9842.     If __CHECKERRORARRAYBOUNDS($APOINT, $ISTART, $IEND, 2) Then Return SetError(@error + 10, @extended, 0)
  9843.     If UBound($APOINT, $UBOUND_COLUMNS) < 2 Then Return SetError(13, 0, 0)
  9844.     For $I = $ISTART To $IEND
  9845.         $APOINT[$I][0] += $IXOFFSET
  9846.         $APOINT[$I][1] += $IYOFFSET
  9847.     Next
  9848.     Return 1
  9849. EndFunc   ;==>_WINAPI_OFFSETPOINTS
  9850. Func _WinAPI_OffsetRect(ByRef $TRECT, $IDX, $IDY)
  9851.     Local $ARET = DllCall("user32.dll", "bool", "OffsetRect", "struct*", $TRECT, "int", $IDX, "int", $IDY)
  9852.     If @error Then Return SetError(@error, @extended, 0)
  9853.     Return $ARET[0]
  9854. EndFunc   ;==>_WINAPI_OFFSETRECT
  9855. Func _WinAPI_OffsetRgn($HRGN, $IXOFFSET, $IYOFFSET)
  9856.     Local $ARET = DllCall("gdi32.dll", "int", "OffsetRgn", "handle", $HRGN, "int", $IXOFFSET, "int", $IYOFFSET)
  9857.     If @error Then Return SetError(@error, @extended, 0)
  9858.     Return $ARET[0]
  9859. EndFunc   ;==>_WINAPI_OFFSETRGN
  9860. Func _WinAPI_OffsetWindowOrg($HDC, $IXOFFSET, $IYOFFSET)
  9861.     $__G_VEXT = DllStructCreate($TAGPOINT)
  9862.     Local $ARET = DllCall("gdi32.dll", "bool", "OffsetWindowOrgEx", "handle", $HDC, "int", $IXOFFSET, "int", $IYOFFSET, "struct*", $__G_VEXT)
  9863.     If @error Then Return SetError(@error, @extended, False)
  9864.     Return $ARET[0]
  9865. EndFunc   ;==>_WINAPI_OFFSETWINDOWORG
  9866. Func _WinAPI_PaintDesktop($HDC)
  9867.     Local $ARET = DllCall("user32.dll", "bool", "PaintDesktop", "handle", $HDC)
  9868.     If @error Then Return SetError(@error, @extended, False)
  9869.     Return $ARET[0]
  9870. EndFunc   ;==>_WINAPI_PAINTDESKTOP
  9871. Func _WinAPI_PaintRgn($HDC, $HRGN)
  9872.     Local $ARET = DllCall("gdi32.dll", "bool", "PaintRgn", "handle", $HDC, "handle", $HRGN)
  9873.     If @error Then Return SetError(@error, @extended, False)
  9874.     Return $ARET[0]
  9875. EndFunc   ;==>_WINAPI_PAINTRGN
  9876. Func _WinAPI_PatBlt($HDC, $IX, $IY, $IWIDTH, $IHEIGHT, $IROP)
  9877.     Local $ARET = DllCall("gdi32.dll", "bool", "PatBlt", "handle", $HDC, "int", $IX, "int", $IY, "int", $IWIDTH, "int", $IHEIGHT, "dword", $IROP)
  9878.     If @error Then Return SetError(@error, @extended, False)
  9879.     Return $ARET[0]
  9880. EndFunc   ;==>_WINAPI_PATBLT
  9881. Func _WinAPI_PathToRegion($HDC)
  9882.     Local $ARET = DllCall("gdi32.dll", "handle", "PathToRegion", "handle", $HDC)
  9883.     If @error Then Return SetError(@error, @extended, 0)
  9884.     Return $ARET[0]
  9885. EndFunc   ;==>_WINAPI_PATHTOREGION
  9886. Func _WinAPI_PlayEnhMetaFile($HDC, $HEMF, ByRef $TRECT)
  9887.     Local $ARET = DllCall("gdi32.dll", "bool", "PlayEnhMetaFile", "handle", $HDC, "handle", $HEMF, "struct*", $TRECT)
  9888.     If @error Then Return SetError(@error, @extended, False)
  9889.     Return $ARET[0]
  9890. EndFunc   ;==>_WINAPI_PLAYENHMETAFILE
  9891. Func _WinAPI_PlgBlt($HDESTDC, Const ByRef $APOINT, $HSRCDC, $IXSRC, $IYSRC, $IWIDTH, $IHEIGHT, $HMASK = 0, $IXMASK = 0, $IYMASK = 0)
  9892.     If (UBound($APOINT) < 3) Or (UBound($APOINT, $UBOUND_COLUMNS) < 2) Then Return SetError(12, 0, False)
  9893.     Local $TPOINTS = DllStructCreate("long[2];long[2];long[2]")
  9894.     For $I = 0 To 2
  9895.         For $J = 0 To 1
  9896.             DllStructSetData($TPOINTS, $I + 1, $APOINT[$I][$J], $J + 1)
  9897.         Next
  9898.     Next
  9899.     Local $ARET = DllCall("gdi32.dll", "bool", "PlgBlt", "handle", $HDESTDC, "struct*", $TPOINTS, "handle", $HSRCDC, "int", $IXSRC, "int", $IYSRC, "int", $IWIDTH, "int", $IHEIGHT, "handle", $HMASK, "int", $IXMASK, "int", $IYMASK)
  9900.     If @error Then Return SetError(@error, @extended, False)
  9901.     Return $ARET[0]
  9902. EndFunc   ;==>_WINAPI_PLGBLT
  9903. Func _WinAPI_PolyBezier($HDC, Const ByRef $APOINT, $ISTART = 0, $IEND = -1)
  9904.     If __CHECKERRORARRAYBOUNDS($APOINT, $ISTART, $IEND, 2, 2) Then Return SetError(@error + 10, @extended, False)
  9905.     Local $IPOINT = 1 + 3 * Floor(($IEND - $ISTART) / 3)
  9906.     If $IPOINT < 1 Then Return SetError(15, 0, False)
  9907.     $IEND = $ISTART + $IPOINT - 1
  9908.     Local $TAGSTRUCT = ""
  9909.     For $I = $ISTART To $IEND
  9910.         $TAGSTRUCT &= "long[2];"
  9911.     Next
  9912.     Local $TPOINT = DllStructCreate($TAGSTRUCT)
  9913.     Local $ICOUNT = 0
  9914.     For $I = $ISTART To $IEND
  9915.         $ICOUNT += 1
  9916.         For $J = 0 To 1
  9917.             DllStructSetData($TPOINT, $ICOUNT, $APOINT[$I][$J], $J + 1)
  9918.         Next
  9919.     Next
  9920.     Local $ARET = DllCall("gdi32.dll", "bool", "PolyBezier", "handle", $HDC, "struct*", $TPOINT, "dword", $IPOINT)
  9921.     If @error Then Return SetError(@error, @extended, False)
  9922.     Return $ARET[0]
  9923. EndFunc   ;==>_WINAPI_POLYBEZIER
  9924. Func _WinAPI_PolyBezierTo($HDC, Const ByRef $APOINT, $ISTART = 0, $IEND = -1)
  9925.     If __CHECKERRORARRAYBOUNDS($APOINT, $ISTART, $IEND, 2, 2) Then Return SetError(@error + 10, @extended, False)
  9926.     Local $IPOINT = 3 * Floor(($IEND - $ISTART + 1) / 3)
  9927.     If $IPOINT < 3 Then Return SetError(15, 0, False)
  9928.     $IEND = $ISTART + $IPOINT - 1
  9929.     Local $TAGSTRUCT = ""
  9930.     For $I = $ISTART To $IEND
  9931.         $TAGSTRUCT &= "long[2];"
  9932.     Next
  9933.     Local $TPOINT = DllStructCreate($TAGSTRUCT)
  9934.     Local $ICOUNT = 0
  9935.     For $I = $ISTART To $IEND
  9936.         $ICOUNT += 1
  9937.         For $J = 0 To 1
  9938.             DllStructSetData($TPOINT, $ICOUNT, $APOINT[$I][$J], $J + 1)
  9939.         Next
  9940.     Next
  9941.     Local $ARET = DllCall("gdi32.dll", "bool", "PolyBezierTo", "handle", $HDC, "struct*", $TPOINT, "dword", $IPOINT)
  9942.     If @error Then Return SetError(@error, @extended, False)
  9943.     Return $ARET[0]
  9944. EndFunc   ;==>_WINAPI_POLYBEZIERTO
  9945. Func _WinAPI_PolyDraw($HDC, Const ByRef $APOINT, $ISTART = 0, $IEND = -1)
  9946.     If __CHECKERRORARRAYBOUNDS($APOINT, $ISTART, $IEND, 2) Then Return SetError(@error + 10, @extended, 0)
  9947.     If UBound($APOINT, $UBOUND_COLUMNS) < 3 Then Return SetError(13, 0, False)
  9948.     Local $IPOINT = $IEND - $ISTART + 1
  9949.     Local $TAGSTRUCT = ""
  9950.     For $I = $ISTART To $IEND
  9951.         $TAGSTRUCT &= "long[2];"
  9952.     Next
  9953.     Local $TPOINT = DllStructCreate($TAGSTRUCT)
  9954.     Local $TTYPES = DllStructCreate("byte[" & $IPOINT & "]")
  9955.     Local $ICOUNT = 0
  9956.     For $I = $ISTART To $IEND
  9957.         $ICOUNT += 1
  9958.         For $J = 0 To 1
  9959.             DllStructSetData($TPOINT, $ICOUNT, $APOINT[$I][$J], $J + 1)
  9960.         Next
  9961.         DllStructSetData($TTYPES, 1, $APOINT[$I][2], $ICOUNT)
  9962.     Next
  9963.     Local $ARET = DllCall("gdi32.dll", "bool", "PolyDraw", "handle", $HDC, "struct*", $TPOINT, "struct*", $TTYPES, "dword", $IPOINT)
  9964.     If @error Then Return SetError(@error, @extended, False)
  9965.     Return $ARET[0]
  9966. EndFunc   ;==>_WINAPI_POLYDRAW
  9967. Func _WinAPI_Polygon($HDC, Const ByRef $APOINT, $ISTART = 0, $IEND = -1)
  9968.     If __CHECKERRORARRAYBOUNDS($APOINT, $ISTART, $IEND, 2, 2) Then Return SetError(@error + 10, @extended, False)
  9969.     Local $TAGSTRUCT = ""
  9970.     For $I = $ISTART To $IEND
  9971.         $TAGSTRUCT &= "int[2];"
  9972.     Next
  9973.     Local $TDATA = DllStructCreate($TAGSTRUCT)
  9974.     Local $ICOUNT = 1
  9975.     For $I = $ISTART To $IEND
  9976.         For $J = 0 To 1
  9977.             DllStructSetData($TDATA, $ICOUNT, $APOINT[$I][$J], $J + 1)
  9978.         Next
  9979.         $ICOUNT += 1
  9980.     Next
  9981.     Local $ARET = DllCall("gdi32.dll", "bool", "Polygon", "handle", $HDC, "struct*", $TDATA, "int", $ICOUNT - 1)
  9982.     If @error Then Return SetError(@error, @extended, False)
  9983.     Return $ARET[0]
  9984. EndFunc   ;==>_WINAPI_POLYGON
  9985. Func _WinAPI_PtInRectEx($IX, $IY, $ILEFT, $ITOP, $IRIGHT, $IBOTTOM)
  9986.     Local $TRECT = _WinAPI_CreateRect($ILEFT, $ITOP, $IRIGHT, $IBOTTOM)
  9987.     Local $TPOINT = _WinAPI_CreatePoint($IX, $IY)
  9988.     Local $ARET = DllCall("user32.dll", "bool", "PtInRect", "struct*", $TRECT, "struct", $TPOINT)
  9989.     If @error Then Return SetError(@error, @extended, False)
  9990.     Return $ARET[0]
  9991. EndFunc   ;==>_WINAPI_PTINRECTEX
  9992. Func _WinAPI_PtInRegion($HRGN, $IX, $IY)
  9993.     Local $ARET = DllCall("gdi32.dll", "bool", "PtInRegion", "handle", $HRGN, "int", $IX, "int", $IY)
  9994.     If @error Then Return SetError(@error, @extended, False)
  9995.     Return $ARET[0]
  9996. EndFunc   ;==>_WINAPI_PTINREGION
  9997. Func _WinAPI_PtVisible($HDC, $IX, $IY)
  9998.     Local $ARET = DllCall("gdi32.dll", "bool", "PtVisible", "handle", $HDC, "int", $IX, "int", $IY)
  9999.     If @error Then Return SetError(@error + 10, @extended, 0)
  10000.     If $ARET[0] = -1 Then Return SetError(10, $ARET[0], 0)
  10001.     Return $ARET[0]
  10002. EndFunc   ;==>_WINAPI_PTVISIBLE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement