ソースを参照

autoit crawler

auto grab data from stock forums
noya2012 6 年 前
コミット
7f91b004fd
93 ファイル変更61641 行追加0 行削除
  1. 20 0
      601138/MERGE.bat
  2. 1642 0
      601138/bak/urllist.txt
  3. 110 0
      601138/data.txt
  4. 401 0
      601138/dbc.data
  5. 1644 0
      601138/urllist.txt
  6. 384 0
      601138/任务列表.txt
  7. 397 0
      601138/页面识别.au3
  8. 0 0
      bak/任务列表.txt
  9. 0 0
      dbc.data
  10. 42 0
      gentobj.wsc
  11. 199 0
      include/APILocaleConstants.au3
  12. 39 0
      include/APIMiscConstants.au3
  13. 102 0
      include/APIProcConstants.au3
  14. 100 0
      include/APIRegConstants.au3
  15. 175 0
      include/APIResConstants.au3
  16. 82 0
      include/APIShPathConstants.au3
  17. 717 0
      include/APIShellExConstants.au3
  18. 391 0
      include/APISysConstants.au3
  19. 330 0
      include/APIThemeConstants.au3
  20. 33 0
      include/AVIConstants.au3
  21. 2124 0
      include/Array.au3
  22. 784 0
      include/ArrayDisplayInternals_En.au3
  23. 346 0
      include/AutoItConstants.au3
  24. 41 0
      include/BorderConstants.au3
  25. 120 0
      include/ButtonConstants.au3
  26. 387 0
      include/Clipboard_En.au3
  27. 237 0
      include/Color.au3
  28. 66 0
      include/ColorConstants.au3
  29. 147 0
      include/ComboConstants.au3
  30. 176 0
      include/Constants.au3
  31. 727 0
      include/Crypt.au3
  32. 1752 0
      include/Date.au3
  33. 147 0
      include/DateTimeConstants.au3
  34. 598 0
      include/Debug_En.au3
  35. 20 0
      include/DirConstants.au3
  36. 120 0
      include/EditConstants.au3
  37. 607 0
      include/EventLog.au3
  38. 1232 0
      include/Excel.au3
  39. 308 0
      include/ExcelConstants.au3
  40. 917 0
      include/FTPEx_En.au3
  41. 1085 0
      include/File.au3
  42. 159 0
      include/FileConstants.au3
  43. 105 0
      include/FontConstants.au3
  44. 52 0
      include/FrameConstants.au3
  45. 5576 0
      include/GDIPlus.au3
  46. 416 0
      include/GDIPlusConstants.au3
  47. 27 0
      include/GUIConstants.au3
  48. 111 0
      include/GUIConstantsEx.au3
  49. 209 0
      include/GuiAVI.au3
  50. 562 0
      include/GuiButton.au3
  51. 801 0
      include/GuiComboBox.au3
  52. 909 0
      include/GuiComboBoxEx.au3
  53. 315 0
      include/GuiDateTimePicker.au3
  54. 1059 0
      include/GuiEdit_En.au3
  55. 867 0
      include/GuiHeader.au3
  56. 252 0
      include/GuiIPAddress.au3
  57. 549 0
      include/GuiImageList.au3
  58. 928 0
      include/GuiListBox.au3
  59. 4728 0
      include/GuiListView.au3
  60. 1100 0
      include/GuiMenu.au3
  61. 906 0
      include/GuiMonthCal.au3
  62. 1312 0
      include/GuiReBar.au3
  63. 3778 0
      include/GuiRichEdit_En.au3
  64. 450 0
      include/GuiScrollBars.au3
  65. 535 0
      include/GuiSlider.au3
  66. 650 0
      include/GuiStatusBar.au3
  67. 864 0
      include/GuiTab.au3
  68. 892 0
      include/GuiToolTip.au3
  69. 1689 0
      include/GuiToolbar.au3
  70. 2508 0
      include/GuiTreeView.au3
  71. 120 0
      include/HeaderConstants.au3
  72. 3440 0
      include/IE_En.au3
  73. 23 0
      include/IPAddressConstants.au3
  74. 41 0
      include/ImageListConstants.au3
  75. 341 0
      include/Inet.au3
  76. 28 0
      include/InetConstants.au3
  77. 91 0
      include/ListBoxConstants.au3
  78. 423 0
      include/ListViewConstants.au3
  79. 81 0
      include/Math.au3
  80. 81 0
      include/conver.au3
  81. 351 0
      include/db.idx
  82. 2181 0
      include/downloader.au3
  83. 20 0
      include/merge.bak
  84. 46 0
      include/utf8tab.au3
  85. 1126 0
      include/爬虫源码.au3
  86. 17 0
      m.au3
  87. 20 0
      merge.bak
  88. 880 0
      tmp.tmp
  89. 155 0
      爬取网址.au3
  90. 176 0
      爬取网址8btc.au3
  91. 149 0
      爬取网址ansi.au3
  92. 397 0
      页面识别.au3
  93. 396 0
      页面识别.乱码au3

+ 20 - 0
601138/MERGE.bat

@@ -0,0 +1,20 @@
+@echo off
+del dbc.data
+(for %%a in (*.txt) do (
+    for /f "usebackq tokens=*" %%b in ("%%a") do (
+        echo,%%b
+    )
+))>dbc.data
+md bak
+copy *.txt .\bak\*
+del *.txt
+
+
+
+@echo off
+for %%j in (dbc.data) do (
+    (for /f "tokens=*" %%i in (%%j) do findstr /C:"%%i" $>nul||echo %%i)>$
+    move $ %%j
+)
+
+@echo off 

ファイルの差分が大きいため隠しています
+ 1642 - 0
601138/bak/urllist.txt


ファイルの差分が大きいため隠しています
+ 110 - 0
601138/data.txt


+ 401 - 0
601138/dbc.data

@@ -0,0 +1,401 @@
+http://guba.eastmoney.com/list,601138_1.html
+http://guba.eastmoney.com/news,601138,772313409.html
+http://guba.eastmoney.com/news,601138,771615651.html
+http://guba.eastmoney.com/news,601138,772313823.html
+http://guba.eastmoney.com/news,601138,772135427.html
+http://guba.eastmoney.com/news,601138,767967073.html
+http://guba.eastmoney.com/news,601138,772288397.html
+http://guba.eastmoney.com/news,601138,772313523.html
+http://guba.eastmoney.com/news,601138,772312730.html
+http://guba.eastmoney.com/news,601138,772313462.html
+http://guba.eastmoney.com/news,601138,772308151.html
+http://guba.eastmoney.com/news,601138,772179061.html
+http://guba.eastmoney.com/news,601138,772207019.html
+http://guba.eastmoney.com/news,601138,771493471.html
+http://guba.eastmoney.com/news,601138,772277387.html
+http://guba.eastmoney.com/news,601138,766595046.html
+http://guba.eastmoney.com/news,601138,772312325.html
+http://guba.eastmoney.com/news,601138,772259650.html
+http://guba.eastmoney.com/news,601138,772281144.html
+http://guba.eastmoney.com/news,601138,772311971.html
+http://guba.eastmoney.com/news,601138,772309266.html
+http://guba.eastmoney.com/news,601138,772311124.html
+http://guba.eastmoney.com/news,601138,772308042.html
+http://guba.eastmoney.com/news,601138,772310873.html
+http://guba.eastmoney.com/news,601138,772310958.html
+http://guba.eastmoney.com/news,601138,772310149.html
+http://guba.eastmoney.com/news,601138,772306891.html
+http://guba.eastmoney.com/news,601138,772307579.html
+http://guba.eastmoney.com/news,601138,772290814.html
+http://guba.eastmoney.com/news,601138,770136214.html
+http://guba.eastmoney.com/news,601138,772306560.html
+http://guba.eastmoney.com/news,601138,769622300.html
+http://guba.eastmoney.com/news,601138,762565314.html
+http://guba.eastmoney.com/news,601138,772305000.html
+http://guba.eastmoney.com/news,601138,772303301.html
+http://guba.eastmoney.com/news,601138,772302284.html
+http://guba.eastmoney.com/news,601138,772301310.html
+http://guba.eastmoney.com/news,601138,769590110.html
+http://guba.eastmoney.com/news,601138,772299688.html
+http://guba.eastmoney.com/news,601138,772277628.html
+http://guba.eastmoney.com/news,601138,772300589.html
+http://guba.eastmoney.com/news,601138,772250788.html
+http://guba.eastmoney.com/news,601138,768596919.html
+http://guba.eastmoney.com/news,601138,772303198.html
+http://guba.eastmoney.com/news,601138,771552905.html
+http://guba.eastmoney.com/news,601138,772288255.html
+http://guba.eastmoney.com/news,601138,772298123.html
+http://guba.eastmoney.com/news,601138,767581933.html
+http://guba.eastmoney.com/news,601138,766721774.html
+http://guba.eastmoney.com/news,601138,772303147.html
+http://guba.eastmoney.com/news,601138,771955490.html
+http://guba.eastmoney.com/news,601138,767074124.html
+http://guba.eastmoney.com/news,601138,772302389.html
+http://guba.eastmoney.com/news,601138,772302235.html
+http://guba.eastmoney.com/news,601138,772271408.html
+http://guba.eastmoney.com/news,601138,770690361.html
+http://guba.eastmoney.com/news,601138,772301658.html
+http://guba.eastmoney.com/news,601138,772263103.html
+http://guba.eastmoney.com/news,601138,772301743.html
+http://guba.eastmoney.com/news,601138,772138541.html
+http://guba.eastmoney.com/news,601138,772297912.html
+http://guba.eastmoney.com/news,601138,766772362.html
+http://guba.eastmoney.com/news,601138,772203157.html
+http://guba.eastmoney.com/news,601138,772260274.html
+http://guba.eastmoney.com/news,601138,772197225.html
+http://guba.eastmoney.com/news,601138,772297855.html
+http://guba.eastmoney.com/news,601138,772225917.html
+http://guba.eastmoney.com/news,601138,772199176.html
+http://guba.eastmoney.com/news,601138,762661846.html
+http://guba.eastmoney.com/news,601138,772292254.html
+http://guba.eastmoney.com/news,601138,772291557.html
+http://guba.eastmoney.com/news,601138,767949923.html
+http://guba.eastmoney.com/news,601138,767852117.html
+http://guba.eastmoney.com/news,601138,772207507.html
+http://guba.eastmoney.com/news,601138,767598072.html
+http://guba.eastmoney.com/news,601138,769782184.html
+http://guba.eastmoney.com/news,601138,772298268.html
+http://guba.eastmoney.com/news,601138,772298352.html
+http://guba.eastmoney.com/news,601138,765667883.html
+http://guba.eastmoney.com/news,601138,772297504.html
+http://guba.eastmoney.com/news,601138,769734609.html
+http://guba.eastmoney.com/list,601138_2.html
+http://guba.eastmoney.com/news,601138,765423959.html
+http://guba.eastmoney.com/news,601138,769734685.html
+http://guba.eastmoney.com/news,601138,765945964.html
+http://guba.eastmoney.com/news,601138,772283400.html
+http://guba.eastmoney.com/news,601138,772295203.html
+http://guba.eastmoney.com/news,601138,772293959.html
+http://guba.eastmoney.com/news,601138,772293697.html
+http://guba.eastmoney.com/news,601138,772292887.html
+http://guba.eastmoney.com/news,601138,772261043.html
+http://guba.eastmoney.com/news,601138,772292207.html
+http://guba.eastmoney.com/news,601138,772291241.html
+http://guba.eastmoney.com/news,601138,767535554.html
+http://guba.eastmoney.com/news,601138,772032912.html
+http://guba.eastmoney.com/news,601138,772289876.html
+http://guba.eastmoney.com/news,601138,772289334.html
+http://guba.eastmoney.com/news,601138,772287698.html
+http://guba.eastmoney.com/news,601138,770821000.html
+http://guba.eastmoney.com/news,601138,766214287.html
+http://guba.eastmoney.com/news,601138,772285969.html
+http://guba.eastmoney.com/news,601138,772141787.html
+http://guba.eastmoney.com/news,601138,772228954.html
+http://guba.eastmoney.com/news,601138,772285847.html
+http://guba.eastmoney.com/news,601138,772281829.html
+http://guba.eastmoney.com/news,601138,766536194.html
+http://guba.eastmoney.com/news,601138,772193845.html
+http://guba.eastmoney.com/news,601138,772284329.html
+http://guba.eastmoney.com/news,601138,772284226.html
+http://guba.eastmoney.com/news,601138,772281331.html
+http://guba.eastmoney.com/news,601138,772282069.html
+http://guba.eastmoney.com/news,601138,772280360.html
+http://guba.eastmoney.com/news,601138,772281125.html
+http://guba.eastmoney.com/news,601138,772279715.html
+http://guba.eastmoney.com/news,601138,772279577.html
+http://guba.eastmoney.com/news,601138,772277875.html
+http://guba.eastmoney.com/news,601138,772273343.html
+http://guba.eastmoney.com/news,601138,772276403.html
+http://guba.eastmoney.com/news,601138,772275127.html
+http://guba.eastmoney.com/news,601138,772251952.html
+http://guba.eastmoney.com/news,601138,772270962.html
+http://guba.eastmoney.com/news,601138,772271277.html
+http://guba.eastmoney.com/news,601138,772268352.html
+http://guba.eastmoney.com/news,601138,772269827.html
+http://guba.eastmoney.com/news,601138,772270091.html
+http://guba.eastmoney.com/news,601138,772268554.html
+http://guba.eastmoney.com/news,601138,772267772.html
+http://guba.eastmoney.com/news,601138,772267307.html
+http://guba.eastmoney.com/news,601138,772265543.html
+http://guba.eastmoney.com/news,601138,772265538.html
+http://guba.eastmoney.com/news,601138,772123307.html
+http://guba.eastmoney.com/news,601138,772266515.html
+http://guba.eastmoney.com/news,601138,772234123.html
+http://guba.eastmoney.com/news,601138,772231903.html
+http://guba.eastmoney.com/news,601138,772263948.html
+http://guba.eastmoney.com/news,601138,772262256.html
+http://guba.eastmoney.com/news,601138,772263238.html
+http://guba.eastmoney.com/news,601138,772262654.html
+http://guba.eastmoney.com/news,601138,772242943.html
+http://guba.eastmoney.com/news,601138,772259568.html
+http://guba.eastmoney.com/news,601138,772154823.html
+http://guba.eastmoney.com/news,601138,772262959.html
+http://guba.eastmoney.com/news,601138,772164578.html
+http://guba.eastmoney.com/news,601138,772260596.html
+http://guba.eastmoney.com/news,601138,772260193.html
+http://guba.eastmoney.com/news,601138,772205710.html
+http://guba.eastmoney.com/news,601138,772250777.html
+http://guba.eastmoney.com/news,601138,772259680.html
+http://guba.eastmoney.com/news,601138,772260141.html
+http://guba.eastmoney.com/news,601138,771356484.html
+http://guba.eastmoney.com/news,601138,772259473.html
+http://guba.eastmoney.com/news,601138,772258735.html
+http://guba.eastmoney.com/news,601138,772253740.html
+http://guba.eastmoney.com/news,601138,772258421.html
+http://guba.eastmoney.com/news,601138,772255372.html
+http://guba.eastmoney.com/news,601138,772255187.html
+http://guba.eastmoney.com/news,601138,772258136.html
+http://guba.eastmoney.com/news,601138,772256643.html
+http://guba.eastmoney.com/list,601138_3.html
+http://guba.eastmoney.com/news,601138,772241614.html
+http://guba.eastmoney.com/news,601138,772256071.html
+http://guba.eastmoney.com/news,601138,772257046.html
+http://guba.eastmoney.com/news,601138,772090700.html
+http://guba.eastmoney.com/news,601138,772253731.html
+http://guba.eastmoney.com/news,601138,772252462.html
+http://guba.eastmoney.com/news,601138,772218728.html
+http://guba.eastmoney.com/news,601138,770055659.html
+http://guba.eastmoney.com/news,601138,772250512.html
+http://guba.eastmoney.com/news,601138,772251210.html
+http://guba.eastmoney.com/news,601138,772250750.html
+http://guba.eastmoney.com/news,601138,772225496.html
+http://guba.eastmoney.com/news,601138,772247931.html
+http://guba.eastmoney.com/news,601138,772247802.html
+http://guba.eastmoney.com/news,601138,772248356.html
+http://guba.eastmoney.com/news,601138,772248301.html
+http://guba.eastmoney.com/news,601138,772248831.html
+http://guba.eastmoney.com/news,601138,772247925.html
+http://guba.eastmoney.com/news,601138,772248502.html
+http://guba.eastmoney.com/news,601138,771968562.html
+http://guba.eastmoney.com/news,601138,772213151.html
+http://guba.eastmoney.com/news,601138,772229505.html
+http://guba.eastmoney.com/news,601138,772207259.html
+http://guba.eastmoney.com/news,601138,767705209.html
+http://guba.eastmoney.com/news,601138,772244131.html
+http://guba.eastmoney.com/news,601138,772073746.html
+http://guba.eastmoney.com/news,601138,772248163.html
+http://guba.eastmoney.com/news,601138,772244363.html
+http://guba.eastmoney.com/news,601138,772247941.html
+http://guba.eastmoney.com/news,601138,772245735.html
+http://guba.eastmoney.com/news,601138,772241685.html
+http://guba.eastmoney.com/news,601138,772241557.html
+http://guba.eastmoney.com/news,601138,772241545.html
+http://guba.eastmoney.com/news,601138,766992369.html
+http://guba.eastmoney.com/news,601138,772230215.html
+http://guba.eastmoney.com/news,601138,772242678.html
+http://guba.eastmoney.com/news,601138,771189294.html
+http://guba.eastmoney.com/news,601138,772242555.html
+http://guba.eastmoney.com/news,601138,772241855.html
+http://guba.eastmoney.com/news,601138,767450488.html
+http://guba.eastmoney.com/news,601138,772241469.html
+http://guba.eastmoney.com/news,601138,772240122.html
+http://guba.eastmoney.com/news,601138,772241211.html
+http://guba.eastmoney.com/news,601138,772238426.html
+http://guba.eastmoney.com/news,601138,772224045.html
+http://guba.eastmoney.com/news,601138,772238951.html
+http://guba.eastmoney.com/news,601138,772238102.html
+http://guba.eastmoney.com/news,601138,772238005.html
+http://guba.eastmoney.com/news,601138,772236061.html
+http://guba.eastmoney.com/news,601138,772165128.html
+http://guba.eastmoney.com/news,601138,772235503.html
+http://guba.eastmoney.com/news,601138,772236420.html
+http://guba.eastmoney.com/news,601138,766506210.html
+http://guba.eastmoney.com/news,601138,772235522.html
+http://guba.eastmoney.com/news,601138,772233006.html
+http://guba.eastmoney.com/news,601138,772199465.html
+http://guba.eastmoney.com/news,601138,772233044.html
+http://guba.eastmoney.com/news,601138,772233130.html
+http://guba.eastmoney.com/news,601138,772231413.html
+http://guba.eastmoney.com/news,601138,772231711.html
+http://guba.eastmoney.com/news,601138,766458359.html
+http://guba.eastmoney.com/news,601138,770084126.html
+http://guba.eastmoney.com/news,601138,772214125.html
+http://guba.eastmoney.com/news,601138,770273309.html
+http://guba.eastmoney.com/news,601138,772200484.html
+http://guba.eastmoney.com/news,601138,772226123.html
+http://guba.eastmoney.com/news,601138,772198288.html
+http://guba.eastmoney.com/news,601138,772222662.html
+http://guba.eastmoney.com/news,601138,772196148.html
+http://guba.eastmoney.com/news,601138,772213270.html
+http://guba.eastmoney.com/news,601138,772211800.html
+http://guba.eastmoney.com/news,601138,772180280.html
+http://guba.eastmoney.com/news,601138,772214038.html
+http://guba.eastmoney.com/news,601138,772225492.html
+http://guba.eastmoney.com/news,601138,772223919.html
+http://guba.eastmoney.com/news,601138,772223347.html
+http://guba.eastmoney.com/news,601138,772224680.html
+http://guba.eastmoney.com/news,601138,772222633.html
+http://guba.eastmoney.com/news,601138,769999182.html
+http://guba.eastmoney.com/news,601138,772217599.html
+http://guba.eastmoney.com/list,601138_4.html
+http://guba.eastmoney.com/news,601138,772203932.html
+http://guba.eastmoney.com/news,601138,772215413.html
+http://guba.eastmoney.com/news,601138,772202767.html
+http://guba.eastmoney.com/news,601138,772222631.html
+http://guba.eastmoney.com/news,601138,772222105.html
+http://guba.eastmoney.com/news,601138,772223087.html
+http://guba.eastmoney.com/news,601138,772217512.html
+http://guba.eastmoney.com/news,601138,772216797.html
+http://guba.eastmoney.com/news,601138,772221956.html
+http://guba.eastmoney.com/news,601138,772220380.html
+http://guba.eastmoney.com/news,601138,772219124.html
+http://guba.eastmoney.com/news,601138,772220104.html
+http://guba.eastmoney.com/news,601138,772219179.html
+http://guba.eastmoney.com/news,601138,772218977.html
+http://guba.eastmoney.com/news,601138,772215057.html
+http://guba.eastmoney.com/news,601138,772218409.html
+http://guba.eastmoney.com/news,601138,772209956.html
+http://guba.eastmoney.com/news,601138,772217309.html
+http://guba.eastmoney.com/news,601138,772217178.html
+http://guba.eastmoney.com/news,601138,772205740.html
+http://guba.eastmoney.com/news,601138,772205703.html
+http://guba.eastmoney.com/news,601138,772215099.html
+http://guba.eastmoney.com/news,601138,772210828.html
+http://guba.eastmoney.com/news,601138,772210964.html
+http://guba.eastmoney.com/news,601138,772214354.html
+http://guba.eastmoney.com/news,601138,772216555.html
+http://guba.eastmoney.com/news,601138,772214100.html
+http://guba.eastmoney.com/news,601138,772214232.html
+http://guba.eastmoney.com/news,601138,772214671.html
+http://guba.eastmoney.com/news,601138,772215635.html
+http://guba.eastmoney.com/news,601138,772212558.html
+http://guba.eastmoney.com/news,601138,772206306.html
+http://guba.eastmoney.com/news,601138,772209936.html
+http://guba.eastmoney.com/news,601138,772210271.html
+http://guba.eastmoney.com/news,601138,772209488.html
+http://guba.eastmoney.com/news,601138,772195368.html
+http://guba.eastmoney.com/news,601138,772210516.html
+http://guba.eastmoney.com/news,601138,772208595.html
+http://guba.eastmoney.com/news,601138,772206535.html
+http://guba.eastmoney.com/news,601138,772209036.html
+http://guba.eastmoney.com/news,601138,772207144.html
+http://guba.eastmoney.com/news,601138,772207875.html
+http://guba.eastmoney.com/news,601138,772208030.html
+http://guba.eastmoney.com/news,601138,772205479.html
+http://guba.eastmoney.com/news,601138,772184081.html
+http://guba.eastmoney.com/news,601138,772198854.html
+http://guba.eastmoney.com/news,601138,772204658.html
+http://guba.eastmoney.com/news,601138,772206623.html
+http://guba.eastmoney.com/news,601138,772205961.html
+http://guba.eastmoney.com/news,601138,772152207.html
+http://guba.eastmoney.com/news,601138,772200366.html
+http://guba.eastmoney.com/news,601138,772203196.html
+http://guba.eastmoney.com/news,601138,772203264.html
+http://guba.eastmoney.com/news,601138,772203818.html
+http://guba.eastmoney.com/news,601138,772203099.html
+http://guba.eastmoney.com/news,601138,772201400.html
+http://guba.eastmoney.com/news,601138,765262389.html
+http://guba.eastmoney.com/news,601138,772203411.html
+http://guba.eastmoney.com/news,601138,772198750.html
+http://guba.eastmoney.com/news,601138,772202500.html
+http://guba.eastmoney.com/news,601138,772201566.html
+http://guba.eastmoney.com/news,601138,770062226.html
+http://guba.eastmoney.com/news,601138,772201341.html
+http://guba.eastmoney.com/news,601138,772200923.html
+http://guba.eastmoney.com/news,601138,766132545.html
+http://guba.eastmoney.com/news,601138,772199922.html
+http://guba.eastmoney.com/news,601138,769621984.html
+http://guba.eastmoney.com/news,601138,772198863.html
+http://guba.eastmoney.com/news,601138,772199890.html
+http://guba.eastmoney.com/news,601138,772199671.html
+http://guba.eastmoney.com/news,601138,772200864.html
+http://guba.eastmoney.com/news,601138,772198582.html
+http://guba.eastmoney.com/news,601138,772199287.html
+http://guba.eastmoney.com/news,601138,772197485.html
+http://guba.eastmoney.com/news,601138,772197507.html
+http://guba.eastmoney.com/news,601138,772199407.html
+http://guba.eastmoney.com/news,601138,772196537.html
+http://guba.eastmoney.com/news,601138,772184616.html
+http://guba.eastmoney.com/news,601138,772195772.html
+http://guba.eastmoney.com/news,601138,772197302.html
+http://guba.eastmoney.com/list,601138_5.html
+http://guba.eastmoney.com/news,601138,767976850.html
+http://guba.eastmoney.com/news,601138,772191140.html
+http://guba.eastmoney.com/news,601138,772189458.html
+http://guba.eastmoney.com/news,601138,772196269.html
+http://guba.eastmoney.com/news,601138,772195532.html
+http://guba.eastmoney.com/news,601138,767768215.html
+http://guba.eastmoney.com/news,601138,772193298.html
+http://guba.eastmoney.com/news,601138,772192812.html
+http://guba.eastmoney.com/news,601138,772189335.html
+http://guba.eastmoney.com/news,601138,772188371.html
+http://guba.eastmoney.com/news,601138,772193422.html
+http://guba.eastmoney.com/news,601138,766957254.html
+http://guba.eastmoney.com/news,601138,772187075.html
+http://guba.eastmoney.com/news,601138,772192274.html
+http://guba.eastmoney.com/news,601138,769627519.html
+http://guba.eastmoney.com/news,601138,772154132.html
+http://guba.eastmoney.com/news,601138,769621935.html
+http://guba.eastmoney.com/news,601138,769621975.html
+http://guba.eastmoney.com/news,601138,772191836.html
+http://guba.eastmoney.com/news,601138,772190130.html
+http://guba.eastmoney.com/news,601138,772191603.html
+http://guba.eastmoney.com/news,601138,772189090.html
+http://guba.eastmoney.com/news,601138,772191229.html
+http://guba.eastmoney.com/news,601138,772189232.html
+http://guba.eastmoney.com/news,601138,772148222.html
+http://guba.eastmoney.com/news,601138,772188232.html
+http://guba.eastmoney.com/news,601138,772185201.html
+http://guba.eastmoney.com/news,601138,772183994.html
+http://guba.eastmoney.com/news,601138,772183705.html
+http://guba.eastmoney.com/news,601138,772184358.html
+http://guba.eastmoney.com/news,601138,768588053.html
+http://guba.eastmoney.com/news,601138,772184010.html
+http://guba.eastmoney.com/news,601138,772167730.html
+http://guba.eastmoney.com/news,601138,772097218.html
+http://guba.eastmoney.com/news,601138,772182329.html
+http://guba.eastmoney.com/news,601138,772183342.html
+http://guba.eastmoney.com/news,601138,772182757.html
+http://guba.eastmoney.com/news,601138,772137544.html
+http://guba.eastmoney.com/news,601138,766828066.html
+http://guba.eastmoney.com/news,601138,772181388.html
+http://guba.eastmoney.com/news,601138,772181562.html
+http://guba.eastmoney.com/news,601138,772181545.html
+http://guba.eastmoney.com/news,601138,772180151.html
+http://guba.eastmoney.com/news,601138,772182054.html
+http://guba.eastmoney.com/news,601138,772179531.html
+http://guba.eastmoney.com/news,601138,769652261.html
+http://guba.eastmoney.com/news,601138,765581531.html
+http://guba.eastmoney.com/news,601138,772180138.html
+http://guba.eastmoney.com/news,601138,772177802.html
+http://guba.eastmoney.com/news,601138,772177530.html
+http://guba.eastmoney.com/news,601138,772178688.html
+http://guba.eastmoney.com/news,601138,772178015.html
+http://guba.eastmoney.com/news,601138,772174548.html
+http://guba.eastmoney.com/news,601138,772176345.html
+http://guba.eastmoney.com/news,601138,772175505.html
+http://guba.eastmoney.com/news,601138,772174970.html
+http://guba.eastmoney.com/news,601138,772175160.html
+http://guba.eastmoney.com/news,601138,772167150.html
+http://guba.eastmoney.com/news,601138,772155667.html
+http://guba.eastmoney.com/news,601138,772174368.html
+http://guba.eastmoney.com/news,601138,768410593.html
+http://guba.eastmoney.com/news,601138,771516529.html
+http://guba.eastmoney.com/news,601138,772172364.html
+http://guba.eastmoney.com/news,601138,772172604.html
+http://guba.eastmoney.com/news,601138,772170349.html
+http://guba.eastmoney.com/news,601138,772165850.html
+http://guba.eastmoney.com/news,601138,772166750.html
+http://guba.eastmoney.com/news,601138,772083147.html
+http://guba.eastmoney.com/news,601138,772147853.html
+http://guba.eastmoney.com/news,601138,772170406.html
+http://guba.eastmoney.com/news,601138,772152004.html
+http://guba.eastmoney.com/news,601138,772168155.html
+http://guba.eastmoney.com/news,601138,770634093.html
+http://guba.eastmoney.com/news,601138,772166752.html
+http://guba.eastmoney.com/news,601138,772157600.html
+http://guba.eastmoney.com/news,601138,771710645.html
+http://guba.eastmoney.com/news,601138,772167055.html
+http://guba.eastmoney.com/news,601138,772166464.html
+http://guba.eastmoney.com/news,601138,772166293.html
+http://guba.eastmoney.com/news,601138,766633500.html

ファイルの差分が大きいため隠しています
+ 1644 - 0
601138/urllist.txt


+ 384 - 0
601138/任务列表.txt

@@ -0,0 +1,384 @@
+http://guba.eastmoney.com/list,601138_1.html
+http://guba.eastmoney.com/news,601138,772313409.html
+http://guba.eastmoney.com/news,601138,771615651.html
+http://guba.eastmoney.com/news,601138,772313823.html
+http://guba.eastmoney.com/news,601138,772135427.html
+http://guba.eastmoney.com/news,601138,767967073.html
+http://guba.eastmoney.com/news,601138,772288397.html
+http://guba.eastmoney.com/news,601138,772313523.html
+http://guba.eastmoney.com/news,601138,772312730.html
+http://guba.eastmoney.com/news,601138,772313462.html
+http://guba.eastmoney.com/news,601138,772308151.html
+http://guba.eastmoney.com/news,601138,772179061.html
+http://guba.eastmoney.com/news,601138,772207019.html
+http://guba.eastmoney.com/news,601138,771493471.html
+http://guba.eastmoney.com/news,601138,772277387.html
+http://guba.eastmoney.com/news,601138,766595046.html
+http://guba.eastmoney.com/news,601138,772312325.html
+http://guba.eastmoney.com/news,601138,772259650.html
+http://guba.eastmoney.com/news,601138,772281144.html
+http://guba.eastmoney.com/news,601138,772311971.html
+http://guba.eastmoney.com/news,601138,772309266.html
+http://guba.eastmoney.com/news,601138,772311124.html
+http://guba.eastmoney.com/news,601138,772308042.html
+http://guba.eastmoney.com/news,601138,772310873.html
+http://guba.eastmoney.com/news,601138,772310958.html
+http://guba.eastmoney.com/news,601138,772310149.html
+http://guba.eastmoney.com/news,601138,772306891.html
+http://guba.eastmoney.com/news,601138,772307579.html
+http://guba.eastmoney.com/news,601138,772290814.html
+http://guba.eastmoney.com/news,601138,770136214.html
+http://guba.eastmoney.com/news,601138,772306560.html
+http://guba.eastmoney.com/news,601138,769622300.html
+http://guba.eastmoney.com/news,601138,762565314.html
+http://guba.eastmoney.com/news,601138,772305000.html
+http://guba.eastmoney.com/news,601138,772303301.html
+http://guba.eastmoney.com/news,601138,772302284.html
+http://guba.eastmoney.com/news,601138,772301310.html
+http://guba.eastmoney.com/news,601138,769590110.html
+http://guba.eastmoney.com/news,601138,772299688.html
+http://guba.eastmoney.com/news,601138,772277628.html
+http://guba.eastmoney.com/news,601138,772300589.html
+http://guba.eastmoney.com/news,601138,772250788.html
+http://guba.eastmoney.com/news,601138,768596919.html
+http://guba.eastmoney.com/news,601138,772303198.html
+http://guba.eastmoney.com/news,601138,771552905.html
+http://guba.eastmoney.com/news,601138,772288255.html
+http://guba.eastmoney.com/news,601138,772298123.html
+http://guba.eastmoney.com/news,601138,767581933.html
+http://guba.eastmoney.com/news,601138,766721774.html
+http://guba.eastmoney.com/news,601138,772303147.html
+http://guba.eastmoney.com/news,601138,771955490.html
+http://guba.eastmoney.com/news,601138,767074124.html
+http://guba.eastmoney.com/news,601138,772302389.html
+http://guba.eastmoney.com/news,601138,772302235.html
+http://guba.eastmoney.com/news,601138,772271408.html
+http://guba.eastmoney.com/news,601138,770690361.html
+http://guba.eastmoney.com/news,601138,772301658.html
+http://guba.eastmoney.com/news,601138,772263103.html
+http://guba.eastmoney.com/news,601138,772301743.html
+http://guba.eastmoney.com/news,601138,772138541.html
+http://guba.eastmoney.com/news,601138,772297912.html
+http://guba.eastmoney.com/news,601138,766772362.html
+http://guba.eastmoney.com/news,601138,772203157.html
+http://guba.eastmoney.com/news,601138,772260274.html
+http://guba.eastmoney.com/news,601138,772197225.html
+http://guba.eastmoney.com/news,601138,772297855.html
+http://guba.eastmoney.com/news,601138,772225917.html
+http://guba.eastmoney.com/news,601138,772199176.html
+http://guba.eastmoney.com/news,601138,762661846.html
+http://guba.eastmoney.com/news,601138,772292254.html
+http://guba.eastmoney.com/news,601138,772291557.html
+http://guba.eastmoney.com/news,601138,767949923.html
+http://guba.eastmoney.com/news,601138,767852117.html
+http://guba.eastmoney.com/news,601138,772207507.html
+http://guba.eastmoney.com/news,601138,767598072.html
+http://guba.eastmoney.com/news,601138,769782184.html
+http://guba.eastmoney.com/news,601138,772298268.html
+http://guba.eastmoney.com/news,601138,772298352.html
+http://guba.eastmoney.com/news,601138,765667883.html
+http://guba.eastmoney.com/news,601138,772297504.html
+http://guba.eastmoney.com/news,601138,769734609.html
+http://guba.eastmoney.com/list,601138_2.html
+http://guba.eastmoney.com/news,601138,765423959.html
+http://guba.eastmoney.com/news,601138,769734685.html
+http://guba.eastmoney.com/news,601138,765945964.html
+http://guba.eastmoney.com/news,601138,772283400.html
+http://guba.eastmoney.com/news,601138,772295203.html
+http://guba.eastmoney.com/news,601138,772293959.html
+http://guba.eastmoney.com/news,601138,772293697.html
+http://guba.eastmoney.com/news,601138,772292887.html
+http://guba.eastmoney.com/news,601138,772261043.html
+http://guba.eastmoney.com/news,601138,772292207.html
+http://guba.eastmoney.com/news,601138,772291241.html
+http://guba.eastmoney.com/news,601138,767535554.html
+http://guba.eastmoney.com/news,601138,772032912.html
+http://guba.eastmoney.com/news,601138,772289876.html
+http://guba.eastmoney.com/news,601138,772289334.html
+http://guba.eastmoney.com/news,601138,772287698.html
+http://guba.eastmoney.com/news,601138,770821000.html
+http://guba.eastmoney.com/news,601138,766214287.html
+http://guba.eastmoney.com/news,601138,772285969.html
+http://guba.eastmoney.com/news,601138,772141787.html
+http://guba.eastmoney.com/news,601138,772228954.html
+http://guba.eastmoney.com/news,601138,772285847.html
+http://guba.eastmoney.com/news,601138,772281829.html
+http://guba.eastmoney.com/news,601138,766536194.html
+http://guba.eastmoney.com/news,601138,772193845.html
+http://guba.eastmoney.com/news,601138,772284329.html
+http://guba.eastmoney.com/news,601138,772284226.html
+http://guba.eastmoney.com/news,601138,772281331.html
+http://guba.eastmoney.com/news,601138,772282069.html
+http://guba.eastmoney.com/news,601138,772280360.html
+http://guba.eastmoney.com/news,601138,772281125.html
+http://guba.eastmoney.com/news,601138,772279715.html
+http://guba.eastmoney.com/news,601138,772279577.html
+http://guba.eastmoney.com/news,601138,772277875.html
+http://guba.eastmoney.com/news,601138,772273343.html
+http://guba.eastmoney.com/news,601138,772276403.html
+http://guba.eastmoney.com/news,601138,772275127.html
+http://guba.eastmoney.com/news,601138,772251952.html
+http://guba.eastmoney.com/news,601138,772270962.html
+http://guba.eastmoney.com/news,601138,772271277.html
+http://guba.eastmoney.com/news,601138,772268352.html
+http://guba.eastmoney.com/news,601138,772269827.html
+http://guba.eastmoney.com/news,601138,772270091.html
+http://guba.eastmoney.com/news,601138,772268554.html
+http://guba.eastmoney.com/news,601138,772267772.html
+http://guba.eastmoney.com/news,601138,772267307.html
+http://guba.eastmoney.com/news,601138,772265543.html
+http://guba.eastmoney.com/news,601138,772265538.html
+http://guba.eastmoney.com/news,601138,772123307.html
+http://guba.eastmoney.com/news,601138,772266515.html
+http://guba.eastmoney.com/news,601138,772234123.html
+http://guba.eastmoney.com/news,601138,772231903.html
+http://guba.eastmoney.com/news,601138,772263948.html
+http://guba.eastmoney.com/news,601138,772262256.html
+http://guba.eastmoney.com/news,601138,772263238.html
+http://guba.eastmoney.com/news,601138,772262654.html
+http://guba.eastmoney.com/news,601138,772242943.html
+http://guba.eastmoney.com/news,601138,772259568.html
+http://guba.eastmoney.com/news,601138,772154823.html
+http://guba.eastmoney.com/news,601138,772262959.html
+http://guba.eastmoney.com/news,601138,772164578.html
+http://guba.eastmoney.com/news,601138,772260596.html
+http://guba.eastmoney.com/news,601138,772260193.html
+http://guba.eastmoney.com/news,601138,772205710.html
+http://guba.eastmoney.com/news,601138,772250777.html
+http://guba.eastmoney.com/news,601138,772259680.html
+http://guba.eastmoney.com/news,601138,772260141.html
+http://guba.eastmoney.com/news,601138,771356484.html
+http://guba.eastmoney.com/news,601138,772259473.html
+http://guba.eastmoney.com/news,601138,772258735.html
+http://guba.eastmoney.com/news,601138,772253740.html
+http://guba.eastmoney.com/news,601138,772258421.html
+http://guba.eastmoney.com/news,601138,772255372.html
+http://guba.eastmoney.com/news,601138,772255187.html
+http://guba.eastmoney.com/news,601138,772258136.html
+http://guba.eastmoney.com/news,601138,772256643.html
+http://guba.eastmoney.com/list,601138_3.html
+http://guba.eastmoney.com/news,601138,772241614.html
+http://guba.eastmoney.com/news,601138,772256071.html
+http://guba.eastmoney.com/news,601138,772257046.html
+http://guba.eastmoney.com/news,601138,772090700.html
+http://guba.eastmoney.com/news,601138,772253731.html
+http://guba.eastmoney.com/news,601138,772252462.html
+http://guba.eastmoney.com/news,601138,772218728.html
+http://guba.eastmoney.com/news,601138,770055659.html
+http://guba.eastmoney.com/news,601138,772250512.html
+http://guba.eastmoney.com/news,601138,772251210.html
+http://guba.eastmoney.com/news,601138,772250750.html
+http://guba.eastmoney.com/news,601138,772225496.html
+http://guba.eastmoney.com/news,601138,772247931.html
+http://guba.eastmoney.com/news,601138,772247802.html
+http://guba.eastmoney.com/news,601138,772248356.html
+http://guba.eastmoney.com/news,601138,772248301.html
+http://guba.eastmoney.com/news,601138,772248831.html
+http://guba.eastmoney.com/news,601138,772247925.html
+http://guba.eastmoney.com/news,601138,772248502.html
+http://guba.eastmoney.com/news,601138,771968562.html
+http://guba.eastmoney.com/news,601138,772213151.html
+http://guba.eastmoney.com/news,601138,772229505.html
+http://guba.eastmoney.com/news,601138,772207259.html
+http://guba.eastmoney.com/news,601138,767705209.html
+http://guba.eastmoney.com/news,601138,772244131.html
+http://guba.eastmoney.com/news,601138,772073746.html
+http://guba.eastmoney.com/news,601138,772248163.html
+http://guba.eastmoney.com/news,601138,772244363.html
+http://guba.eastmoney.com/news,601138,772247941.html
+http://guba.eastmoney.com/news,601138,772245735.html
+http://guba.eastmoney.com/news,601138,772241685.html
+http://guba.eastmoney.com/news,601138,772241557.html
+http://guba.eastmoney.com/news,601138,772241545.html
+http://guba.eastmoney.com/news,601138,766992369.html
+http://guba.eastmoney.com/news,601138,772230215.html
+http://guba.eastmoney.com/news,601138,772242678.html
+http://guba.eastmoney.com/news,601138,771189294.html
+http://guba.eastmoney.com/news,601138,772242555.html
+http://guba.eastmoney.com/news,601138,772241855.html
+http://guba.eastmoney.com/news,601138,767450488.html
+http://guba.eastmoney.com/news,601138,772241469.html
+http://guba.eastmoney.com/news,601138,772240122.html
+http://guba.eastmoney.com/news,601138,772241211.html
+http://guba.eastmoney.com/news,601138,772238426.html
+http://guba.eastmoney.com/news,601138,772224045.html
+http://guba.eastmoney.com/news,601138,772238951.html
+http://guba.eastmoney.com/news,601138,772238102.html
+http://guba.eastmoney.com/news,601138,772238005.html
+http://guba.eastmoney.com/news,601138,772236061.html
+http://guba.eastmoney.com/news,601138,772165128.html
+http://guba.eastmoney.com/news,601138,772235503.html
+http://guba.eastmoney.com/news,601138,772236420.html
+http://guba.eastmoney.com/news,601138,766506210.html
+http://guba.eastmoney.com/news,601138,772235522.html
+http://guba.eastmoney.com/news,601138,772233006.html
+http://guba.eastmoney.com/news,601138,772199465.html
+http://guba.eastmoney.com/news,601138,772233044.html
+http://guba.eastmoney.com/news,601138,772233130.html
+http://guba.eastmoney.com/news,601138,772231413.html
+http://guba.eastmoney.com/news,601138,772231711.html
+http://guba.eastmoney.com/news,601138,766458359.html
+http://guba.eastmoney.com/news,601138,770084126.html
+http://guba.eastmoney.com/news,601138,772214125.html
+http://guba.eastmoney.com/news,601138,770273309.html
+http://guba.eastmoney.com/news,601138,772200484.html
+http://guba.eastmoney.com/news,601138,772226123.html
+http://guba.eastmoney.com/news,601138,772198288.html
+http://guba.eastmoney.com/news,601138,772222662.html
+http://guba.eastmoney.com/news,601138,772196148.html
+http://guba.eastmoney.com/news,601138,772213270.html
+http://guba.eastmoney.com/news,601138,772211800.html
+http://guba.eastmoney.com/news,601138,772180280.html
+http://guba.eastmoney.com/news,601138,772214038.html
+http://guba.eastmoney.com/news,601138,772225492.html
+http://guba.eastmoney.com/news,601138,772223919.html
+http://guba.eastmoney.com/news,601138,772223347.html
+http://guba.eastmoney.com/news,601138,772224680.html
+http://guba.eastmoney.com/news,601138,772222633.html
+http://guba.eastmoney.com/news,601138,769999182.html
+http://guba.eastmoney.com/news,601138,772217599.html
+http://guba.eastmoney.com/list,601138_4.html
+http://guba.eastmoney.com/news,601138,772203932.html
+http://guba.eastmoney.com/news,601138,772215413.html
+http://guba.eastmoney.com/news,601138,772202767.html
+http://guba.eastmoney.com/news,601138,772222631.html
+http://guba.eastmoney.com/news,601138,772222105.html
+http://guba.eastmoney.com/news,601138,772223087.html
+http://guba.eastmoney.com/news,601138,772217512.html
+http://guba.eastmoney.com/news,601138,772216797.html
+http://guba.eastmoney.com/news,601138,772221956.html
+http://guba.eastmoney.com/news,601138,772220380.html
+http://guba.eastmoney.com/news,601138,772219124.html
+http://guba.eastmoney.com/news,601138,772220104.html
+http://guba.eastmoney.com/news,601138,772219179.html
+http://guba.eastmoney.com/news,601138,772218977.html
+http://guba.eastmoney.com/news,601138,772215057.html
+http://guba.eastmoney.com/news,601138,772218409.html
+http://guba.eastmoney.com/news,601138,772209956.html
+http://guba.eastmoney.com/news,601138,772217309.html
+http://guba.eastmoney.com/news,601138,772217178.html
+http://guba.eastmoney.com/news,601138,772205740.html
+http://guba.eastmoney.com/news,601138,772205703.html
+http://guba.eastmoney.com/news,601138,772215099.html
+http://guba.eastmoney.com/news,601138,772210828.html
+http://guba.eastmoney.com/news,601138,772210964.html
+http://guba.eastmoney.com/news,601138,772214354.html
+http://guba.eastmoney.com/news,601138,772216555.html
+http://guba.eastmoney.com/news,601138,772214100.html
+http://guba.eastmoney.com/news,601138,772214232.html
+http://guba.eastmoney.com/news,601138,772214671.html
+http://guba.eastmoney.com/news,601138,772215635.html
+http://guba.eastmoney.com/news,601138,772212558.html
+http://guba.eastmoney.com/news,601138,772206306.html
+http://guba.eastmoney.com/news,601138,772209936.html
+http://guba.eastmoney.com/news,601138,772210271.html
+http://guba.eastmoney.com/news,601138,772209488.html
+http://guba.eastmoney.com/news,601138,772195368.html
+http://guba.eastmoney.com/news,601138,772210516.html
+http://guba.eastmoney.com/news,601138,772208595.html
+http://guba.eastmoney.com/news,601138,772206535.html
+http://guba.eastmoney.com/news,601138,772209036.html
+http://guba.eastmoney.com/news,601138,772207144.html
+http://guba.eastmoney.com/news,601138,772207875.html
+http://guba.eastmoney.com/news,601138,772208030.html
+http://guba.eastmoney.com/news,601138,772205479.html
+http://guba.eastmoney.com/news,601138,772184081.html
+http://guba.eastmoney.com/news,601138,772198854.html
+http://guba.eastmoney.com/news,601138,772204658.html
+http://guba.eastmoney.com/news,601138,772206623.html
+http://guba.eastmoney.com/news,601138,772205961.html
+http://guba.eastmoney.com/news,601138,772152207.html
+http://guba.eastmoney.com/news,601138,772200366.html
+http://guba.eastmoney.com/news,601138,772203196.html
+http://guba.eastmoney.com/news,601138,772203264.html
+http://guba.eastmoney.com/news,601138,772203818.html
+http://guba.eastmoney.com/news,601138,772203099.html
+http://guba.eastmoney.com/news,601138,772201400.html
+http://guba.eastmoney.com/news,601138,765262389.html
+http://guba.eastmoney.com/news,601138,772203411.html
+http://guba.eastmoney.com/news,601138,772198750.html
+http://guba.eastmoney.com/news,601138,772202500.html
+http://guba.eastmoney.com/news,601138,772201566.html
+http://guba.eastmoney.com/news,601138,770062226.html
+http://guba.eastmoney.com/news,601138,772201341.html
+http://guba.eastmoney.com/news,601138,772200923.html
+http://guba.eastmoney.com/news,601138,766132545.html
+http://guba.eastmoney.com/news,601138,772199922.html
+http://guba.eastmoney.com/news,601138,769621984.html
+http://guba.eastmoney.com/news,601138,772198863.html
+http://guba.eastmoney.com/news,601138,772199890.html
+http://guba.eastmoney.com/news,601138,772199671.html
+http://guba.eastmoney.com/news,601138,772200864.html
+http://guba.eastmoney.com/news,601138,772198582.html
+http://guba.eastmoney.com/news,601138,772199287.html
+http://guba.eastmoney.com/news,601138,772197485.html
+http://guba.eastmoney.com/news,601138,772197507.html
+http://guba.eastmoney.com/news,601138,772199407.html
+http://guba.eastmoney.com/news,601138,772196537.html
+http://guba.eastmoney.com/news,601138,772184616.html
+http://guba.eastmoney.com/news,601138,772195772.html
+http://guba.eastmoney.com/news,601138,772197302.html
+http://guba.eastmoney.com/list,601138_5.html
+http://guba.eastmoney.com/news,601138,767976850.html
+http://guba.eastmoney.com/news,601138,772191140.html
+http://guba.eastmoney.com/news,601138,772189458.html
+http://guba.eastmoney.com/news,601138,772196269.html
+http://guba.eastmoney.com/news,601138,772195532.html
+http://guba.eastmoney.com/news,601138,767768215.html
+http://guba.eastmoney.com/news,601138,772193298.html
+http://guba.eastmoney.com/news,601138,772192812.html
+http://guba.eastmoney.com/news,601138,772189335.html
+http://guba.eastmoney.com/news,601138,772188371.html
+http://guba.eastmoney.com/news,601138,772193422.html
+http://guba.eastmoney.com/news,601138,766957254.html
+http://guba.eastmoney.com/news,601138,772187075.html
+http://guba.eastmoney.com/news,601138,772192274.html
+http://guba.eastmoney.com/news,601138,769627519.html
+http://guba.eastmoney.com/news,601138,772154132.html
+http://guba.eastmoney.com/news,601138,769621935.html
+http://guba.eastmoney.com/news,601138,769621975.html
+http://guba.eastmoney.com/news,601138,772191836.html
+http://guba.eastmoney.com/news,601138,772190130.html
+http://guba.eastmoney.com/news,601138,772191603.html
+http://guba.eastmoney.com/news,601138,772189090.html
+http://guba.eastmoney.com/news,601138,772191229.html
+http://guba.eastmoney.com/news,601138,772189232.html
+http://guba.eastmoney.com/news,601138,772148222.html
+http://guba.eastmoney.com/news,601138,772188232.html
+http://guba.eastmoney.com/news,601138,772185201.html
+http://guba.eastmoney.com/news,601138,772183994.html
+http://guba.eastmoney.com/news,601138,772183705.html
+http://guba.eastmoney.com/news,601138,772184358.html
+http://guba.eastmoney.com/news,601138,768588053.html
+http://guba.eastmoney.com/news,601138,772184010.html
+http://guba.eastmoney.com/news,601138,772167730.html
+http://guba.eastmoney.com/news,601138,772097218.html
+http://guba.eastmoney.com/news,601138,772182329.html
+http://guba.eastmoney.com/news,601138,772183342.html
+http://guba.eastmoney.com/news,601138,772182757.html
+http://guba.eastmoney.com/news,601138,772137544.html
+http://guba.eastmoney.com/news,601138,766828066.html
+http://guba.eastmoney.com/news,601138,772181388.html
+http://guba.eastmoney.com/news,601138,772181562.html
+http://guba.eastmoney.com/news,601138,772181545.html
+http://guba.eastmoney.com/news,601138,772180151.html
+http://guba.eastmoney.com/news,601138,772182054.html
+http://guba.eastmoney.com/news,601138,772179531.html
+http://guba.eastmoney.com/news,601138,769652261.html
+http://guba.eastmoney.com/news,601138,765581531.html
+http://guba.eastmoney.com/news,601138,772180138.html
+http://guba.eastmoney.com/news,601138,772177802.html
+http://guba.eastmoney.com/news,601138,772177530.html
+http://guba.eastmoney.com/news,601138,772178688.html
+http://guba.eastmoney.com/news,601138,772178015.html
+http://guba.eastmoney.com/news,601138,772174548.html
+http://guba.eastmoney.com/news,601138,772176345.html
+http://guba.eastmoney.com/news,601138,772175505.html
+http://guba.eastmoney.com/news,601138,772174970.html
+http://guba.eastmoney.com/news,601138,772175160.html
+http://guba.eastmoney.com/news,601138,772167150.html
+http://guba.eastmoney.com/news,601138,772155667.html
+http://guba.eastmoney.com/news,601138,772174368.html
+http://guba.eastmoney.com/news,601138,768410593.html
+http://guba.eastmoney.com/news,601138,771516529.html
+http://guba.eastmoney.com/news,601138,772172364.html

+ 397 - 0
601138/页面识别.au3

@@ -0,0 +1,397 @@
+#RequireAdmin
+#Region ;**** 由 AccAu3Wrapper_GUI 创建指令 ****
+#AccAu3Wrapper_Outfile=页面识别x86.exe
+#AccAu3Wrapper_Outfile_x64=页面识别x64.exe
+#AccAu3Wrapper_Compile_Both=y
+#AccAu3Wrapper_Res_Language=2052
+#AccAu3Wrapper_Res_requestedExecutionLevel=None
+#EndRegion ;**** 由 AccAu3Wrapper_GUI 创建指令 ****
+#Region ;**** 编译指令由 by AutoIt3Wrapper_GUI 创建 ****
+#EndRegion ;**** 编译指令由 by AutoIt3Wrapper_GUI 创建 ****
+#Region ;**** 参数创建于 ACNWrapper_GUI ****
+#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
+#include <array.au3>
+#include <GUIConstants.au3>
+#include <IE.au3>
+;#include<setdefault.au3>
+#include <file.au3>
+#include <MsgBoxConstants.au3>
+#include <excel.au3>
+#include <_html.au3>
+#include <sfilter.au3>
+#include <inet.au3>
+;Opt("CaretCoordMode", 1)
+;Opt("ExpandEnvStrings", 0)
+Opt("ExpandVarStrings", 0)
+;Opt("GUICloseOnESC", 0)
+;Opt("GUICoordMode", 1)
+;Opt("GUIDataSeparatorChar","|")
+;Opt("GUIOnEventMode", 0)
+;Opt("GUIResizeMode",0)
+;Opt("GUIEventOptions",1)
+Opt("MouseClickDelay", 10)
+Opt("MouseClickDownDelay", 10)
+Opt("MouseClickDragDelay", 250)
+Opt("MouseCoordMode", 1)
+Opt("MustDeclareVars", 0)
+Opt("PixelCoordMode", 1)
+Opt("SendAttachMode", 0)
+Opt("SendCapslockMode", 1)
+Opt("SendKeyDelay", 5)
+Opt("SendKeyDownDelay", 1)
+Opt("TCPTimeout", 100)
+Opt("TrayAutoPause", 1)
+Opt("TrayIconDebug", 0)
+Opt("TrayIconHide", 0)
+Opt("TrayMenuMode", 0)
+Opt("TrayOnEventMode", 0)
+Opt("WinDetectHiddenText", 0)
+Opt("WinSearchChildren", 1)
+Opt("WinTextMatchMode", 1)
+Opt("WinTitleMatchMode", 1)
+Opt("WinWaitDelay", 250)
+Global $input1
+Global $g_idGUIProg
+Global $oIE = 0
+Global $filepath = @ScriptDir
+Global $size = 0 ;difine listfile size
+Global $list_file_url = @ScriptDir & "\任务列表.txt" ;页面提取的文件
+Global $line_url = "http://guba.eastmoney.com/"
+Global $state = ""
+Global $stock_id = ""
+Global $resault_dir = @ScriptDir & "\data"
+Global $ie_all_span = @extended
+Global $ie_all_div = @extended
+Global $oEventObject
+Global $SIZES = 0
+Global $CURPID = 0
+Global $TXTDATA = ""
+Global $oExcel, $oWorkbook
+Global $cur_process = 0
+;========================================
+Global $tmpfile = @ScriptDir & "\tmp.tmp"
+$source = "dbc.data"
+$target = "任务列表.txt"
+$resault_dir = @ScriptDir
+Global $oIE = 0
+Global $ierw_url = ""
+;$oIE = ObjCreate("InternetExplorer.Application.1")
+_IELoadWaitTimeout(100)
+Global $oIE = _IECreate("http://guba.eastmoney.com")
+
+;========================================
+While 1
+
+
+
+	If FileExists("任务列表.txt") And _FileCountLines("任务列表.txt") > 0 Then
+		$uulist = @ScriptDir & "\任务列表.txt"
+		$list_file_url = @ScriptDir & "\任务列表.txt"
+	Else
+
+		$succ = FileCopy($source, $target)
+		If $succ = 1 Then
+			
+			Global $uulist = $target
+			Global $starturl = "http://guba.eastmoney.com/list,"
+			MsgBox($MB_SYSTEMMODAL, "", "创建第一次运行列表.", 1)
+		EndIf
+	EndIf
+
+	
+	MsgBox($MB_SYSTEMMODAL, "网址", "ok列表存在,从上次任务继续.", 1)
+	start_job($oIE) ;执行打开窗口
+WEnd
+;=============================================
+Func ierw($ierw_url)
+	
+	Local $netdata = InetGet($ierw_url, $tmpfile)
+	$htms = FileRead($tmpfile)
+	_IEBodyWriteHTML($oIE, $htms)
+	FileClose($tmpfile)
+
+EndFunc   ;==>ierw
+
+removeIE()
+Func start_job($oIE)
+
+	Local $iMsg
+	Local $hGUIMain
+	$hGUIMain = GUICreate("IE BROWSER", 600,400)
+	$input1 = GUICtrlCreateInput("show" & @CRLF, 10, 20, 580, 300)
+	$g_idGUIProg = GUICtrlCreateProgress(10, 5, 580, 10)
+	Local $idGUIExit = GUICtrlCreateButton("退出采集", 250, 450, 80, 30)
+	GUISetState() ;Show GUI
+	Sleep(1000) ; Give it some time to load the web page
+	GUISwitch($hGUIMain) ; Switch back to our GUI in case IE stole the focus
+	; We prepare the Internet Explorer as our test subject
+	ieobjint()
+	While 1
+		$iMsg = GUIGetMsg()
+		If $iMsg = $idGUIExit Then Exit
+		DOWN_BY_LIST($list_file_url)
+		;按列表下载
+	WEnd
+EndFunc   ;==>start_job
+Func DOWN_BY_LIST($list_file_url)
+	MsgBox($MB_SYSTEMMODAL, "网址", "开始下载列表里网址", 1)
+	;MsgBox($MB_SYSTEMMODAL, "", "开始下载列表里网址.")
+	$FILE_HWN = FileOpen($list_file_url, 1)
+	$size = _FileCountLines($list_file_url)
+	If $list_file_url = "" Then
+		
+		MsgBox($MB_SYSTEMMODAL, "", "没有选择入口列表.现在退回")
+		Return
+	Else
+		
+	EndIf
+	For $SIZES = $size To 1 Step -1
+		;
+		$state = ""
+		
+		$line_url = FileReadLine($list_file_url, $SIZES)
+		FileClose($line_url)
+		;ConsoleWrite("列表名称" & $line_url)
+		If StringLen($line_url) > 10 Then
+			;to be continue
+
+			$stock_id = StringTrimRight(StringTrimLeft("$line_url", 38), 5)
+			
+			;+++++++++++++++++++++++++++++++
+			$oIE.navigate($line_url)
+			;_ieloadwait($oIE)
+			;++++++++++++++++++++++++++
+			;ierw($line_url)
+			;sleep(500)
+
+			Global $CURPID = 1
+			pagereconize()
+			set_stock_show()
+			;ending
+			SetError(0)
+		EndIf
+		;=========================================================
+		_FileWriteToLine($list_file_url, $SIZES, "", True)
+		FileClose($line_url)
+		;
+	Next
+	MsgBox($MB_SYSTEMMODAL, "", "已经提取完内容,右下任务栏选退出.")
+	;FileClose($FILE_HWN)
+	Exit
+EndFunc   ;==>DOWN_BY_LIST
+;=================================================
+
+;=====================================================================================
+Func ieobjint()
+
+	;$oIE.Navigate("http://baidu.com")
+
+	$sURL = "http://guba.eastmoney.com/list,600382.html"
+	Local $oEventObject = ObjEvent($oIE, "IEEvent_", "DWebBrowserEvents")
+	If @error Then
+		MsgBox($MB_OK, "有错误发生", _
+				"ObjEvent: Can't use event interface 'DWebBrowserEvents'. Error code: " & Hex(@error, 8))
+	EndIf
+
+	With $oIE
+		.Visible = 1
+		.Top = (@DesktopHeight - 400) / 2
+		.Height = 600 ; Make it a bit smaller than our GUI.
+		.Width =400
+		.Silent = 1 ; Don't show IE's dialog boxes
+		Global $hIEWnd = HWnd(.hWnd) ; Remember the Window, in case user decides to close it
+	EndWith
+EndFunc   ;==>ieobjint
+;======================================================================================
+Func removeIE()
+	$oEventObject.Stop ; Tell IE we don't want to receive events.
+	$oEventObject = 0 ; Kill the Event Object
+	If WinExists($hIEWnd) Then $oIE.Quit ; Close IE Window
+	$oIE = 0 ; Remove IE from memory (not really necessary).
+	;GUIDelete($hGUIMain) ; Remove GUI
+EndFunc   ;==>removeIE
+Func set_stock_show()
+	;GUICtrlSetData($input1,$stock_id)
+EndFunc   ;==>set_stock_show
+Func pagereconize()
+	Local $Ele = @extended
+	Sleep(1000)
+
+	;=====================hot============================
+	;SLEEP(300)
+	Local $tags = @extended
+
+	;$tags = $oIE.document.GetElementsByTagName("div")
+	instr($oIE)
+	Local $text_s = _tc1($ie_all_span)
+	Local $tmp = ""
+
+	;For $tag in $ie_all_span
+	; $class_value = $tag.GetAttribute("class")
+	;	$class_value = $tag.classname
+	;  If $class_value = "tc1" Then
+	;    $tmp=$tag.innertext
+	;  $text_s=$tmp&@CRLF&$text_s&@CRLF
+	
+	;EndIf
+	;Next
+	$TXTDATA = StringStripWS(HTML_Filters($text_s, 0), 8)
+	FileWriteLine(@ScriptDir & "\data.txt",$line_url & "    url/////")
+	FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "hot /////")
+
+	Local $TXTDATA = ""
+	;=======================tim==================
+	;SLEEP(300)
+	Local $tags = @extended
+
+	;$tags = $oIE.document.GetElementsByTagName("DIV")
+	Local $text_s = ""
+	Local $tmp = ""
+	;For $tag in $tags
+	For $tag In $ie_all_div
+		; $class_value = $tag.GetAttribute("class")
+		$class_value = $tag.className
+		If $class_value = "zwfbtime" Then
+			$tmp = $tag.innertext
+			$text_s = $tmp & @CRLF & $text_s & @CRLF
+			
+		EndIf
+	Next
+	$TXTDATA = StringStripWS(HTML_Filters($text_s, 0), 8)
+
+	FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "time/////")
+
+	Local $TXTDATA = ""
+
+	;====================bdy=============================
+	;SLEEP(300)
+	Local $tags = @extended
+
+	;$tags = $oIE.document.GetElementsByTagName("DIV")
+	Local $text_s = ""
+	Local $tmp = ""
+	;For $tag in $tags
+	For $tag In $ie_all_div
+		; $class_value = $tag.GetAttribute("class")
+		$class_value = $tag.className
+		If $class_value = "zwcontentmain" Then
+			$tmp = $tag.innertext
+			$text_s = $tmp & @CRLF & $text_s & @CRLF
+			
+		EndIf
+	Next
+	$TXTDATA = StringStripWS(HTML_Filters($text_s, 0), 8)
+
+
+
+	FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "btbdy/////")
+
+;==================================================================================================================================
+;	$text_s = _tl1($ie_all_div)
+	;	FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "/////" & @CRLF & "--end1---" & @CRLF)
+	;============================================================================================================
+	
+	Local $TXTDATA = ""
+
+$reply_size = _sp1($ie_all_span)
+if $reply_size="" then 
+	$reply_size=0
+	$TXTDATA=_tl1($ie_all_div)
+			FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "end/////" & @CRLF & "-----" & @CRLF)
+		GUICtrlSetData($input1 ,$TXTDATA)
+Else
+	$reply_size=Number($reply_size)
+	
+	_getrpy($reply_size)
+	
+;	MsgBox($MB_SYSTEMMODAL, "页数", $reply_size)
+
+EndIf
+
+	;MsgBox($MB_SYSTEMMODAL, "页数", $reply_size)
+	
+
+
+EndFunc   ;==>pagereconize
+
+func _getrpy($reply_size)
+	$curfront = StringTrimRight($line_url, 5)
+	For $rpt = 0 To $reply_size
+		;==========================================
+		$nReply = $curfront & "_" & $rpt & ".html#storeply"
+		ConsoleWrite($nReply & @CRLF)
+		ierw($nReply)
+		;sleep(500)
+		$CURPID = 2 ;set process to 2
+		;==============reconize=================
+		;=======================rpys==========================start
+		;SLEEP(300)
+		;Local $tags = @extended
+
+	;	$tags = $oIE.document.GetElementsByTagName("DIV")
+		Local $text_s = _tl1($ie_all_div)
+		
+		;Local $tmp = ""
+		;For $tag In $ie_all_div
+			; $class_value = $tag.GetAttribute("class")
+		;	$class_value = $tag.className
+		;	If  StringInStr($class_value,"zwlitext stockcodec") Then
+							ConsoleWrite($text_s& @CRLF) 	
+			;EndIf
+		;Next
+		;$TXTDATA = StringStripWS(HTML_Filters($text_s, 0), 8)
+$TXTDATA =HTML_Filters($text_s, 0)
+
+		;WRITE CHECK URL
+
+		FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "end/////----" & @CRLF & "-----" & @CRLF)
+
+		Local $TXTDATA = ""
+
+	Next
+GUICtrlSetData($input1 ,$TXTDATA)
+	;endCollectt rply
+	$data = "" ;restore data
+	;===============================================
+	$CURPID = 0
+EndFunc
+
+Func _tc1($ie_all_span)
+	Local $tmp = ""
+	For $span In $ie_all_span
+		If StringInStr($span.classname, "tc1") Then
+			$tmp = $tmp & $span.innertext & "_"
+		EndIf
+Next
+	Return $tmp
+EndFunc   ;==>_tc1
+
+Func instr($oIE)
+	Global $ie_all_div = $oIE.document.GetElementsByTagName("DIV")
+	Global $ie_all_span = $oIE.document.GetElementsByTagName("SPAN")
+EndFunc   ;==>instr
+
+
+
+
+func _tl1($ie_all_div)   ;数组中搜索标签
+	local $tmp=""
+	For    $div IN $ie_all_div
+if StringInStr($div.className,"zwlitext stockcodec") then 
+$tmp=$tmp&$div.innertext&"_"
+endif
+Next
+return $tmp
+endfunc
+
+
+	Func _sp1($ie_all_span)
+	Local $tmp = ""
+	For $span In $ie_all_span
+		If StringInStr($span.classname, "sumpage") Then
+			$tmp =$span.innertext 
+		EndIf
+Next
+	Return $tmp
+;MsgBox($MB_SYSTEMMODAL, "标题", "元素在span.classname"&$tmp, 1)
+EndFunc   ;==>

+ 0 - 0
bak/任务列表.txt


+ 0 - 0
dbc.data


+ 42 - 0
gentobj.wsc

@@ -0,0 +1,42 @@
+' Generating a type library for the specified WSC file.
+ ' The script assumes to be invoked through a context menu 
+ ' and to receive the WSC name on the command line.
+ ' ---------------------------------------------------------------
+ 
+ ' Get the WSC file name to work with
+ If WScript.Arguments.Count = 0 Then
+     wscFile = InputBox ("Enter the WSC file name:", "WSC")
+ Else
+     wscFile = WScript.Arguments.Item(0)
+ End If
+ if wscFile = "" Then WScript.Quit
+ 
+ 
+ ' Instantiate the object to create the typelib
+ Set oTL = CreateObject("Scriptlet.TypeLib")
+ 
+ 
+ ' Set source and target file names 
+ oTL.AddURL wscFile             
+ tlbFile = Replace(wscFile, ".wsc", ".tlb", 1, -1, 1)   
+ oTL.Path = tlbFile               
+ 
+ 
+ ' Set the name to appear in the Object Browser
+ posSlash = InStrRev(wscFile, "\")
+ posDot = InStrRev(wscFile, ".")
+ wscFileOnly = Mid(wscFile, posSlash+1, posDot-posSlash-1)
+ oTL.Name = wscFileOnly & "TLB"
+ 
+ ' Get the description
+ defDesc = wscFileOnly & " Type Library"
+ desc = InputBox ("Enter the TypeLib description", "WSC Description", defDesc)
+ If desc <> "" Then
+     oTL.Doc = desc 
+ Else
+     oTL.Doc = defDesc 
+ End If
+ 
+ ' Write the TypeLib
+ oTL.Write
+ oTL.Reset

+ 199 - 0
include/APILocaleConstants.au3

@@ -0,0 +1,199 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: WinAPILocale Constants UDF Library for AutoIt3
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants that can be used with UDF library
+; Author(s) .....: Yashied, Jpm
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+
+; _WinAPI_CompareString()
+Global Const $LINGUISTIC_IGNORECASE = 0x00000010
+Global Const $LINGUISTIC_IGNOREDIACRITIC = 0x00000020
+
+Global Const $NORM_IGNORECASE = 0x00000001
+Global Const $NORM_IGNOREKANATYPE = 0x00010000
+Global Const $NORM_IGNORENONSPACE = 0x00000002
+Global Const $NORM_IGNORESYMBOLS = 0x00000004
+Global Const $NORM_IGNOREWIDTH = 0x00020000
+Global Const $NORM_LINGUISTIC_CASING = 0x08000000
+
+Global Const $SORT_DIGITSASNUMBERS = 0x00000008
+Global Const $SORT_STRINGSORT = 0x00001000
+
+Global Const $CSTR_LESS_THAN = 1
+Global Const $CSTR_EQUAL = 2
+Global Const $CSTR_GREATER_THAN = 3
+
+; _WinAPI_EnumUILanguages()
+Global Const $MUI_LANGUAGE_ID = 0x0004
+Global Const $MUI_LANGUAGE_NAME = 0x0008
+
+; _WinAPI_GetDateFormat()
+Global Const $DATE_AUTOLAYOUT = 0x40
+Global Const $DATE_LONGDATE = 0x02
+Global Const $DATE_LTRREADING = 0x10
+Global Const $DATE_SHORTDATE = 0x01
+Global Const $DATE_RTLREADING = 0x20
+Global Const $DATE_USE_ALT_CALENDAR = 0x04
+Global Const $DATE_YEARMONTH = 0x08
+
+; _WinAPI_GetGeoInfo()
+Global Const $GEO_NATION = 1
+Global Const $GEO_LATITUDE = 2
+Global Const $GEO_LONGITUDE = 3
+Global Const $GEO_ISO2 = 4
+Global Const $GEO_ISO3 = 5
+Global Const $GEO_RFC1766 = 6
+Global Const $GEO_LCID = 7
+Global Const $GEO_FRIENDLYNAME = 8
+Global Const $GEO_OFFICIALNAME = 9
+Global Const $GEO_TIMEZONES = 10
+Global Const $GEO_OFFICIALLANGUAGES = 11
+Global Const $GEO_ISO_UN_NUMBER = 12
+Global Const $GEO_PARENT = 13
+
+; _WinAPI_GetLocaleInfo(), _WinAPI_SetLocaleInfo()
+Global Const $LOCALE_ILANGUAGE = 0x0001
+Global Const $LOCALE_SLANGUAGE = 0x0002
+Global Const $LOCALE_SENGLANGUAGE = 0x1001
+Global Const $LOCALE_SABBREVLANGNAME = 0x0003
+Global Const $LOCALE_SNATIVELANGNAME = 0x0004
+
+Global Const $LOCALE_ICOUNTRY = 0x0005
+Global Const $LOCALE_SCOUNTRY = 0x0006
+Global Const $LOCALE_SENGCOUNTRY = 0x1002
+Global Const $LOCALE_SABBREVCTRYNAME = 0x0007
+Global Const $LOCALE_SNATIVECTRYNAME = 0x0008
+
+Global Const $LOCALE_IDEFAULTLANGUAGE = 0x0009
+Global Const $LOCALE_IDEFAULTCOUNTRY = 0x000A
+Global Const $LOCALE_IDEFAULTCODEPAGE = 0x000B
+Global Const $LOCALE_IDEFAULTANSICODEPAGE = 0x1004
+Global Const $LOCALE_IDEFAULTMACCODEPAGE = 0x1011
+
+Global Const $LOCALE_SLIST = 0x000C
+Global Const $LOCALE_IMEASURE = 0x000D
+
+Global Const $LOCALE_SDECIMAL = 0x000E
+Global Const $LOCALE_STHOUSAND = 0x000F
+Global Const $LOCALE_SGROUPING = 0x0010
+Global Const $LOCALE_IDIGITS = 0x0011
+Global Const $LOCALE_ILZERO = 0x0012
+Global Const $LOCALE_INEGNUMBER = 0x1010
+Global Const $LOCALE_SNATIVEDIGITS = 0x0013
+
+Global Const $LOCALE_SCURRENCY = 0x0014
+Global Const $LOCALE_SINTLSYMBOL = 0x0015
+Global Const $LOCALE_SMONDECIMALSEP = 0x0016
+Global Const $LOCALE_SMONTHOUSANDSEP = 0x0017
+Global Const $LOCALE_SMONGROUPING = 0x0018
+Global Const $LOCALE_ICURRDIGITS = 0x0019
+Global Const $LOCALE_IINTLCURRDIGITS = 0x001A
+Global Const $LOCALE_ICURRENCY = 0x001B
+Global Const $LOCALE_INEGCURR = 0x001C
+
+Global Const $LOCALE_SDATE = 0x001D
+Global Const $LOCALE_STIME = 0x001E
+Global Const $LOCALE_SSHORTDATE = 0x001F
+Global Const $LOCALE_SLONGDATE = 0x0020
+Global Const $LOCALE_STIMEFORMAT = 0x1003
+Global Const $LOCALE_IDATE = 0x0021
+Global Const $LOCALE_ILDATE = 0x0022
+Global Const $LOCALE_ITIME = 0x0023
+Global Const $LOCALE_ITIMEMARKPOSN = 0x1005
+Global Const $LOCALE_ICENTURY = 0x0024
+Global Const $LOCALE_ITLZERO = 0x0025
+Global Const $LOCALE_IDAYLZERO = 0x0026
+Global Const $LOCALE_IMONLZERO = 0x0027
+Global Const $LOCALE_S1159 = 0x0028
+Global Const $LOCALE_S2359 = 0x0029
+
+Global Const $LOCALE_ICALENDARTYPE = 0x1009
+Global Const $LOCALE_IOPTIONALCALENDAR = 0x100B
+Global Const $LOCALE_IFIRSTDAYOFWEEK = 0x100C
+Global Const $LOCALE_IFIRSTWEEKOFYEAR = 0x100D
+
+Global Const $LOCALE_SDAYNAME1 = 0x002A
+Global Const $LOCALE_SDAYNAME2 = 0x002B
+Global Const $LOCALE_SDAYNAME3 = 0x002C
+Global Const $LOCALE_SDAYNAME4 = 0x002D
+Global Const $LOCALE_SDAYNAME5 = 0x002E
+Global Const $LOCALE_SDAYNAME6 = 0x002F
+Global Const $LOCALE_SDAYNAME7 = 0x0030
+Global Const $LOCALE_SABBREVDAYNAME1 = 0x0031
+Global Const $LOCALE_SABBREVDAYNAME2 = 0x0032
+Global Const $LOCALE_SABBREVDAYNAME3 = 0x0033
+Global Const $LOCALE_SABBREVDAYNAME4 = 0x0034
+Global Const $LOCALE_SABBREVDAYNAME5 = 0x0035
+Global Const $LOCALE_SABBREVDAYNAME6 = 0x0036
+Global Const $LOCALE_SABBREVDAYNAME7 = 0x0037
+Global Const $LOCALE_SMONTHNAME1 = 0x0038
+Global Const $LOCALE_SMONTHNAME2 = 0x0039
+Global Const $LOCALE_SMONTHNAME3 = 0x003A
+Global Const $LOCALE_SMONTHNAME4 = 0x003B
+Global Const $LOCALE_SMONTHNAME5 = 0x003C
+Global Const $LOCALE_SMONTHNAME6 = 0x003D
+Global Const $LOCALE_SMONTHNAME7 = 0x003E
+Global Const $LOCALE_SMONTHNAME8 = 0x003F
+Global Const $LOCALE_SMONTHNAME9 = 0x0040
+Global Const $LOCALE_SMONTHNAME10 = 0x0041
+Global Const $LOCALE_SMONTHNAME11 = 0x0042
+Global Const $LOCALE_SMONTHNAME12 = 0x0043
+Global Const $LOCALE_SMONTHNAME13 = 0x100E
+Global Const $LOCALE_SABBREVMONTHNAME1 = 0x0044
+Global Const $LOCALE_SABBREVMONTHNAME2 = 0x0045
+Global Const $LOCALE_SABBREVMONTHNAME3 = 0x0046
+Global Const $LOCALE_SABBREVMONTHNAME4 = 0x0047
+Global Const $LOCALE_SABBREVMONTHNAME5 = 0x0048
+Global Const $LOCALE_SABBREVMONTHNAME6 = 0x0049
+Global Const $LOCALE_SABBREVMONTHNAME7 = 0x004A
+Global Const $LOCALE_SABBREVMONTHNAME8 = 0x004B
+Global Const $LOCALE_SABBREVMONTHNAME9 = 0x004C
+Global Const $LOCALE_SABBREVMONTHNAME10 = 0x004D
+Global Const $LOCALE_SABBREVMONTHNAME11 = 0x004E
+Global Const $LOCALE_SABBREVMONTHNAME12 = 0x004F
+Global Const $LOCALE_SABBREVMONTHNAME13 = 0x100F
+
+Global Const $LOCALE_SPOSITIVESIGN = 0x0050
+Global Const $LOCALE_SNEGATIVESIGN = 0x0051
+Global Const $LOCALE_IPOSSIGNPOSN = 0x0052
+Global Const $LOCALE_INEGSIGNPOSN = 0x0053
+Global Const $LOCALE_IPOSSYMPRECEDES = 0x0054
+Global Const $LOCALE_IPOSSEPBYSPACE = 0x0055
+Global Const $LOCALE_INEGSYMPRECEDES = 0x0056
+Global Const $LOCALE_INEGSEPBYSPACE = 0x0057
+
+Global Const $LOCALE_FONTSIGNATURE = 0x0058
+Global Const $LOCALE_SISO639LANGNAME = 0x0059
+Global Const $LOCALE_SISO3166CTRYNAME = 0x005A
+
+Global Const $LOCALE_IDEFAULTEBCDICCODEPAGE = 0x1012
+Global Const $LOCALE_IPAPERSIZE = 0x100A
+Global Const $LOCALE_SENGCURRNAME = 0x1007
+Global Const $LOCALE_SNATIVECURRNAME = 0x1008
+Global Const $LOCALE_SYEARMONTH = 0x1006
+Global Const $LOCALE_SSORTNAME = 0x1013
+Global Const $LOCALE_IDIGITSUBSTITUTION = 0x1014
+
+Global Const $LOCALE_CUSTOM_DEFAULT = 0x0C00
+Global Const $LOCALE_CUSTOM_UI_DEFAULT = 0x1400
+Global Const $LOCALE_CUSTOM_UNSPECIFIED = 0x1000
+
+Global Const $LOCALE_INVARIANT = 0x007F
+Global Const $LOCALE_SYSTEM_DEFAULT = 0x0800
+Global Const $LOCALE_USER_DEFAULT = 0x0400
+
+; _WinAPI_GetTimeFormat()
+Global Const $TIME_FORCE24HOURFORMAT = 0x08
+Global Const $TIME_NOMINUTESORSECONDS = 0x01
+Global Const $TIME_NOSECONDS = 0x02
+Global Const $TIME_NOTIMEMARKER = 0x04
+
+; _WinAPI_IsValidLocale()
+Global Const $LCID_INSTALLED = 1
+Global Const $LCID_SUPPORTED = 2
+; ===============================================================================================================================

+ 39 - 0
include/APIMiscConstants.au3

@@ -0,0 +1,39 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: WinAPIMisc Constants UDF Library for AutoIt3
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants that can be used with UDF library
+; Author(s) .....: Yashied, Jpm
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+
+; _WinAPI_PlaySound()
+Global Const $SND_APPLICATION = 0x00000080
+Global Const $SND_ALIAS = 0x00010000
+Global Const $SND_ALIAS_ID = 0x00110000
+Global Const $SND_ASYNC = 0x00000001
+Global Const $SND_FILENAME = 0x00020000
+Global Const $SND_LOOP = 0x00000008
+Global Const $SND_MEMORY = 0x00000004
+Global Const $SND_NODEFAULT = 0x00000002
+Global Const $SND_NOSTOP = 0x00000010
+Global Const $SND_NOWAIT = 0x00002000
+Global Const $SND_PURGE = 0x00000040
+Global Const $SND_RESOURCE = 0x00040004
+Global Const $SND_SENTRY = 0x00080000
+Global Const $SND_SYNC = 0x00000000
+Global Const $SND_SYSTEM = 0x00200000
+Global Const $SND_SYSTEM_NOSTOP = 0x00200010
+
+Global Const $SND_ALIAS_SYSTEMASTERISK = 'SystemAsterisk'
+Global Const $SND_ALIAS_SYSTEMDEFAULT = 'SystemDefault'
+Global Const $SND_ALIAS_SYSTEMEXCLAMATION = 'SystemExclamation'
+Global Const $SND_ALIAS_SYSTEMEXIT = 'SystemExit'
+Global Const $SND_ALIAS_SYSTEMHAND = 'SystemHand'
+Global Const $SND_ALIAS_SYSTEMQUESTION = 'SystemQuestion'
+Global Const $SND_ALIAS_SYSTEMSTART = 'SystemStart'
+Global Const $SND_ALIAS_SYSTEMWELCOME = 'SystemWelcome'
+; ===============================================================================================================================

+ 102 - 0
include/APIProcConstants.au3

@@ -0,0 +1,102 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: WinAPIProc Constants UDF Library for AutoIt3
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants that can be used with UDF library
+; Author(s) .....: Yashied, Jpm
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+
+; _WinAPI_CreateProcess(), _WinAPI_CreateProcessWithToken()
+Global Const $CREATE_BREAKAWAY_FROM_JOB = 0x01000000
+Global Const $CREATE_DEFAULT_ERROR_MODE = 0x04000000
+Global Const $CREATE_NEW_CONSOLE = 0x00000010
+Global Const $CREATE_NEW_PROCESS_GROUP = 0x00000200
+Global Const $CREATE_NO_WINDOW = 0x08000000
+Global Const $CREATE_PROTECTED_PROCESS = 0x00040000
+Global Const $CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000
+Global Const $CREATE_SEPARATE_WOW_VDM = 0x00000800
+Global Const $CREATE_SHARED_WOW_VDM = 0x00001000
+Global Const $CREATE_SUSPENDED = 0x00000004
+Global Const $CREATE_UNICODE_ENVIRONMENT = 0x00000400
+
+; move in SecurityConstants.au3
+; Global Const $LOGON_WITH_PROFILE = 0x01
+; Global Const $LOGON_NETCREDENTIALS_ONLY = 0x02
+
+; _WinAPI_EnumProcessModules()
+Global Const $LIST_MODULES_32BIT = 1
+Global Const $LIST_MODULES_64BIT = 2
+Global Const $LIST_MODULES_ALL = 3
+Global Const $LIST_MODULES_DEFAULT = 0
+
+; _WinAPI_GetPriorityClass(), _WinAPI_SetPriorityClass()
+Global Const $ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000
+Global Const $BELOW_NORMAL_PRIORITY_CLASS = 0x00004000
+Global Const $HIGH_PRIORITY_CLASS = 0x00000080
+Global Const $IDLE_PRIORITY_CLASS = 0x00000040
+Global Const $NORMAL_PRIORITY_CLASS = 0x00000020
+Global Const $REALTIME_PRIORITY_CLASS = 0x00000100
+
+Global Const $PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000
+Global Const $PROCESS_MODE_BACKGROUND_END = 0x00200000
+
+; _WinAPI_OpenMutex()
+Global Const $MUTEX_MODIFY_STATE = 0x0001
+Global Const $MUTEX_ALL_ACCESS = 0x001F0001 ; BitOR($STANDARD_RIGHTS_ALL, $MUTEX_MODIFY_STATE)
+
+; _WinAPI_OpenJobObject(), _WinAPI_QueryInformationJobObject(), _WinAPI_SetInformationJobObject()
+Global Const $JOB_OBJECT_ASSIGN_PROCESS = 0x0001
+Global Const $JOB_OBJECT_QUERY = 0x0004
+Global Const $JOB_OBJECT_SET_ATTRIBUTES = 0x0002
+Global Const $JOB_OBJECT_SET_SECURITY_ATTRIBUTES = 0x0010
+Global Const $JOB_OBJECT_TERMINATE = 0x0008
+Global Const $JOB_OBJECT_ALL_ACCESS = 0x001F001F ; BitOR($STANDARD_RIGHTS_ALL, $JOB_OBJECT_ASSIGN_PROCESS, $JOB_OBJECT_QUERY, $JOB_OBJECT_SET_ATTRIBUTES, $JOB_OBJECT_SET_SECURITY_ATTRIBUTES, $JOB_OBJECT_TERMINATE)
+
+Global Const $JOB_OBJECT_LIMIT_ACTIVE_PROCESS = 0x00000008
+Global Const $JOB_OBJECT_LIMIT_AFFINITY = 0x00000010
+Global Const $JOB_OBJECT_LIMIT_BREAKAWAY_OK = 0x00000800
+Global Const $JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400
+Global Const $JOB_OBJECT_LIMIT_JOB_MEMORY = 0x00000200
+Global Const $JOB_OBJECT_LIMIT_JOB_TIME = 0x00000004
+Global Const $JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = 0x00002000
+Global Const $JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = 0x00000040
+Global Const $JOB_OBJECT_LIMIT_PRIORITY_CLASS = 0x00000020
+Global Const $JOB_OBJECT_LIMIT_PROCESS_MEMORY = 0x00000100
+Global Const $JOB_OBJECT_LIMIT_PROCESS_TIME = 0x00000002
+Global Const $JOB_OBJECT_LIMIT_SCHEDULING_CLASS = 0x00000080
+Global Const $JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK = 0x00001000
+Global Const $JOB_OBJECT_LIMIT_WORKINGSET = 0x00000001
+
+Global Const $JOB_OBJECT_UILIMIT_DESKTOP = 0x00000040
+Global Const $JOB_OBJECT_UILIMIT_DISPLAYSETTINGS = 0x00000010
+Global Const $JOB_OBJECT_UILIMIT_EXITWINDOWS = 0x00000080
+Global Const $JOB_OBJECT_UILIMIT_GLOBALATOMS = 0x00000020
+Global Const $JOB_OBJECT_UILIMIT_HANDLES = 0x00000001
+Global Const $JOB_OBJECT_UILIMIT_READCLIPBOARD = 0x00000002
+Global Const $JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x00000008
+Global Const $JOB_OBJECT_UILIMIT_WRITECLIPBOARD = 0x00000004
+
+Global Const $JOB_OBJECT_SECURITY_FILTER_TOKENS = 0x00000008
+Global Const $JOB_OBJECT_SECURITY_NO_ADMIN = 0x00000001
+Global Const $JOB_OBJECT_SECURITY_ONLY_TOKEN = 0x00000004
+Global Const $JOB_OBJECT_SECURITY_RESTRICTED_TOKEN = 0x00000002
+
+Global Const $JOB_OBJECT_TERMINATE_AT_END_OF_JOB = 0
+Global Const $JOB_OBJECT_POST_AT_END_OF_JOB = 1
+
+; _WinAPI_OpenSemaphore()
+Global Const $SEMAPHORE_MODIFY_STATE = 0x0002
+Global Const $SEMAPHORE_QUERY_STATE = 0x0001
+Global Const $SEMAPHORE_ALL_ACCESS = 0x001F0003 ; BitOR($STANDARD_RIGHTS_ALL, $SEMAPHORE_MODIFY_STATE, $SEMAPHORE_QUERY_STATE)
+
+; _WinAPI_SetThreadExecutionState()
+Global Const $ES_AWAYMODE_REQUIRED = 0x00000040
+Global Const $ES_CONTINUOUS = 0x80000000
+Global Const $ES_DISPLAY_REQUIRED = 0x00000002
+Global Const $ES_SYSTEM_REQUIRED = 0x00000001
+Global Const $ES_USER_PRESENT = 0x00000004
+; ===============================================================================================================================

+ 100 - 0
include/APIRegConstants.au3

@@ -0,0 +1,100 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: WinAPIReg Constants UDF Library for AutoIt3
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants that can be used with UDF library
+; Author(s) .....: Yashied, Jpm
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+
+; _WinAPI_AssocGetPerceivedType()
+Global Const $PERCEIVED_TYPE_CUSTOM = -3
+Global Const $PERCEIVED_TYPE_UNSPECIFIED = -2
+Global Const $PERCEIVED_TYPE_FOLDER = -1
+Global Const $PERCEIVED_TYPE_UNKNOWN = 0
+Global Const $PERCEIVED_TYPE_TEXT = 1
+Global Const $PERCEIVED_TYPE_IMAGE = 2
+Global Const $PERCEIVED_TYPE_AUDIO = 3
+Global Const $PERCEIVED_TYPE_VIDEO = 4
+Global Const $PERCEIVED_TYPE_COMPRESSED = 5
+Global Const $PERCEIVED_TYPE_DOCUMENT = 6
+Global Const $PERCEIVED_TYPE_SYSTEM = 7
+Global Const $PERCEIVED_TYPE_APPLICATION = 8
+Global Const $PERCEIVED_TYPE_GAMEMEDIA = 9
+Global Const $PERCEIVED_TYPE_CONTACTS = 10
+
+Global Const $PERCEIVEDFLAG_UNDEFINED = 0x0000
+Global Const $PERCEIVEDFLAG_SOFTCODED = 0x0001
+Global Const $PERCEIVEDFLAG_HARDCODED = 0x0002
+Global Const $PERCEIVEDFLAG_NATIVESUPPORT = 0x0004
+Global Const $PERCEIVEDFLAG_GDIPLUS = 0x0010
+Global Const $PERCEIVEDFLAG_WMSDK = 0x0020
+Global Const $PERCEIVEDFLAG_ZIPFOLDER = 0x0040
+
+; _WinAPI_AssocQueryString()
+Global Const $ASSOCSTR_COMMAND = 1
+Global Const $ASSOCSTR_EXECUTABLE = 2
+Global Const $ASSOCSTR_FRIENDLYDOCNAME = 3
+Global Const $ASSOCSTR_FRIENDLYAPPNAME = 4
+Global Const $ASSOCSTR_NOOPEN = 5
+Global Const $ASSOCSTR_SHELLNEWVALUE = 6
+Global Const $ASSOCSTR_DDECOMMAND = 7
+Global Const $ASSOCSTR_DDEIFEXEC = 8
+Global Const $ASSOCSTR_DDEAPPLICATION = 9
+Global Const $ASSOCSTR_DDETOPIC = 10
+Global Const $ASSOCSTR_INFOTIP = 11
+Global Const $ASSOCSTR_QUICKTIP = 12
+Global Const $ASSOCSTR_TILEINFO = 13
+Global Const $ASSOCSTR_CONTENTTYPE = 14
+Global Const $ASSOCSTR_DEFAULTICON = 15
+Global Const $ASSOCSTR_SHELLEXTENSION = 16
+
+Global Const $ASSOCF_INIT_NOREMAPCLSID = 0x00000001
+Global Const $ASSOCF_INIT_BYEXENAME = 0x00000002
+Global Const $ASSOCF_OPEN_BYEXENAME = 0x00000002
+Global Const $ASSOCF_INIT_DEFAULTTOSTAR = 0x00000004
+Global Const $ASSOCF_INIT_DEFAULTTOFOLDER = 0x00000008
+Global Const $ASSOCF_NOUSERSETTINGS = 0x00000010
+Global Const $ASSOCF_NOTRUNCATE = 0x00000020
+Global Const $ASSOCF_VERIFY = 0x00000040
+Global Const $ASSOCF_REMAPRUNDLL = 0x00000080
+Global Const $ASSOCF_NOFIXUPS = 0x00000100
+Global Const $ASSOCF_IGNOREBASECLASS = 0x00000200
+Global Const $ASSOCF_INIT_IGNOREUNKNOWN = 0x00000400
+
+; _WinAPI_Reg...
+Global Const $HKEY_CLASSES_ROOT = 0x80000000
+Global Const $HKEY_CURRENT_CONFIG = 0x80000005
+Global Const $HKEY_CURRENT_USER = 0x80000001
+Global Const $HKEY_LOCAL_MACHINE = 0x80000002
+Global Const $HKEY_PERFORMANCE_DATA = 0x80000004
+Global Const $HKEY_PERFORMANCE_NLSTEXT = 0x80000060
+Global Const $HKEY_PERFORMANCE_TEXT = 0x80000050
+Global Const $HKEY_USERS = 0x80000003
+
+Global Const $KEY_CREATE_LINK = 0x0020
+Global Const $KEY_CREATE_SUB_KEY = 0x0004
+Global Const $KEY_ENUMERATE_SUB_KEYS = 0x0008
+Global Const $KEY_NOTIFY = 0x0010
+Global Const $KEY_QUERY_VALUE = 0x0001
+Global Const $KEY_SET_VALUE = 0x0002
+Global Const $KEY_WOW64_32KEY = 0x0200
+Global Const $KEY_WOW64_64KEY = 0x0100
+Global Const $KEY_READ = 0x00020019 ; BitOR($STANDARD_RIGHTS_READ, $KEY_QUERY_VALUE, $KEY_ENUMERATE_SUB_KEYS, $KEY_NOTIFY)
+Global Const $KEY_WRITE = 0x00020006 ; BitOR($STANDARD_RIGHTS_WRITE, $KEY_SET_VALUE, $KEY_CREATE_SUB_KEY)
+Global Const $KEY_EXECUTE = $KEY_READ
+Global Const $KEY_ALL_ACCESS = 0x000f003f ; BitOR($STANDARD_RIGHTS_REQUIRED, $KEY_QUERY_VALUE, $KEY_SET_VALUE, $KEY_CREATE_SUB_KEY, $KEY_ENUMERATE_SUB_KEYS, $KEY_NOTIFY, $KEY_CREATE_LINK)
+
+Global Const $REG_NOTIFY_CHANGE_NAME = 0x01
+Global Const $REG_NOTIFY_CHANGE_ATTRIBUTES = 0x02
+Global Const $REG_NOTIFY_CHANGE_LAST_SET = 0x04
+Global Const $REG_NOTIFY_CHANGE_SECURITY = 0x08
+
+Global Const $REG_OPTION_BACKUP_RESTORE = 0x04
+Global Const $REG_OPTION_CREATE_LINK = 0x02
+Global Const $REG_OPTION_NON_VOLATILE = 0x00
+Global Const $REG_OPTION_VOLATILE = 0x01
+; ===============================================================================================================================

+ 175 - 0
include/APIResConstants.au3

@@ -0,0 +1,175 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: WinAPIRes Constants UDF Library for AutoIt3
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants that can be used with UDF library
+; Author(s) .....: Yashied, Jpm
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+
+; _WinAPI_FindResource(), _WinAPI_FindResourceEx(), _WinAPI_UpdateResource()
+Global Const $RT_ACCELERATOR = 9
+Global Const $RT_ANICURSOR = 21
+Global Const $RT_ANIICON = 22
+Global Const $RT_BITMAP = 2
+Global Const $RT_CURSOR = 1
+Global Const $RT_DIALOG = 5
+Global Const $RT_DLGINCLUDE = 17
+Global Const $RT_FONT = 8
+Global Const $RT_FONTDIR = 7
+Global Const $RT_GROUP_CURSOR = 12
+Global Const $RT_GROUP_ICON = 14
+Global Const $RT_HTML = 23
+Global Const $RT_ICON = 3
+Global Const $RT_MANIFEST = 24
+Global Const $RT_MENU = 4
+Global Const $RT_MESSAGETABLE = 11
+Global Const $RT_PLUGPLAY = 19
+Global Const $RT_RCDATA = 10
+Global Const $RT_STRING = 6
+Global Const $RT_VERSION = 16
+Global Const $RT_VXD = 20
+
+; _WinAPI_GetFileVersionInfo()
+Global Const $FILE_VER_GET_LOCALISED = 0x01
+Global Const $FILE_VER_GET_NEUTRAL = 0x02
+Global Const $FILE_VER_GET_PREFETCHED = 0x04
+
+; Image Type Constants
+; in WinAPIInternals
+
+; _WinAPI_LoadImage(), _WinAPI_CopyImage()
+; in WinAPIInternals
+
+; _WinAPI_LoadImage()
+Global Const $OBM_TRTYPE = 32732
+Global Const $OBM_LFARROWI = 32734
+Global Const $OBM_RGARROWI = 32735
+Global Const $OBM_DNARROWI = 32736
+Global Const $OBM_UPARROWI = 32737
+Global Const $OBM_COMBO = 32738
+Global Const $OBM_MNARROW = 32739
+Global Const $OBM_LFARROWD = 32740
+Global Const $OBM_RGARROWD = 32741
+Global Const $OBM_DNARROWD = 32742
+Global Const $OBM_UPARROWD = 32743
+Global Const $OBM_RESTORED = 32744
+Global Const $OBM_ZOOMD = 32745
+Global Const $OBM_REDUCED = 32746
+Global Const $OBM_RESTORE = 32747
+Global Const $OBM_ZOOM = 32748
+Global Const $OBM_REDUCE = 32749
+Global Const $OBM_LFARROW = 32750
+Global Const $OBM_RGARROW = 32751
+Global Const $OBM_DNARROW = 32752
+Global Const $OBM_UPARROW = 32753
+Global Const $OBM_CLOSE = 32754
+Global Const $OBM_OLD_RESTORE = 32755
+Global Const $OBM_OLD_ZOOM = 32756
+Global Const $OBM_OLD_REDUCE = 32757
+Global Const $OBM_BTNCORNERS = 32758
+Global Const $OBM_CHECKBOXES = 32759
+Global Const $OBM_CHECK = 32760
+Global Const $OBM_BTSIZE = 32761
+Global Const $OBM_OLD_LFARROW = 32762
+Global Const $OBM_OLD_RGARROW = 32763
+Global Const $OBM_OLD_DNARROW = 32764
+Global Const $OBM_OLD_UPARROW = 32765
+Global Const $OBM_SIZE = 32766
+Global Const $OBM_OLD_CLOSE = 32767
+
+Global Const $OIC_SAMPLE = 32512
+Global Const $OIC_HAND = 32513
+Global Const $OIC_QUES = 32514
+Global Const $OIC_BANG = 32515
+Global Const $OIC_NOTE = 32516
+Global Const $OIC_WINLOGO = 32517
+Global Const $OIC_WARNING = $OIC_BANG
+Global Const $OIC_ERROR = $OIC_HAND
+Global Const $OIC_INFORMATION = $OIC_NOTE
+
+; _WinAPI_LoadLibraryEx()
+Global Const $DONT_RESOLVE_DLL_REFERENCES = 0x01
+Global Const $LOAD_LIBRARY_AS_DATAFILE = 0x02
+Global Const $LOAD_WITH_ALTERED_SEARCH_PATH = 0x08
+Global Const $LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010
+Global Const $LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x00000040
+Global Const $LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x00000020
+Global Const $LOAD_LIBRARY_SEARCH_APPLICATION_DIR = 0x00000200
+Global Const $LOAD_LIBRARY_SEARCH_DEFAULT_DIRS = 0x00001000
+Global Const $LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR = 0x00000100
+Global Const $LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800
+Global Const $LOAD_LIBRARY_SEARCH_USER_DIRS = 0x00000400
+
+; _WinAPI_SetSystemCursor()
+Global Const $OCR_NORMAL = 32512
+Global Const $OCR_IBEAM = 32513
+Global Const $OCR_WAIT = 32514
+Global Const $OCR_CROSS = 32515
+Global Const $OCR_UP = 32516
+Global Const $OCR_SIZE = 32640
+Global Const $OCR_ICON = 32641
+Global Const $OCR_SIZENWSE = 32642
+Global Const $OCR_SIZENESW = 32643
+Global Const $OCR_SIZEWE = 32644
+Global Const $OCR_SIZENS = 32645
+Global Const $OCR_SIZEALL = 32646
+Global Const $OCR_ICOCUR = 32647
+Global Const $OCR_NO = 32648
+Global Const $OCR_HAND = 32649
+Global Const $OCR_APPSTARTING = 32650
+Global Const $OCR_HELP = 32651
+
+; _WinAPI_VerQueryRoot()
+Global Const $VS_FF_DEBUG = 0x00000001
+Global Const $VS_FF_INFOINFERRED = 0x00000010
+Global Const $VS_FF_PATCHED = 0x00000004
+Global Const $VS_FF_PRERELEASE = 0x00000002
+Global Const $VS_FF_PRIVATEBUILD = 0x00000008
+Global Const $VS_FF_SPECIALBUILD = 0x00000020
+
+Global Const $VOS_DOS = 0x00010000
+Global Const $VOS_NT = 0x00040000
+Global Const $VOS__WINDOWS16 = 0x00000001
+Global Const $VOS__WINDOWS32 = 0x00000004
+Global Const $VOS_OS216 = 0x00020000
+Global Const $VOS_OS232 = 0x00030000
+Global Const $VOS__PM16 = 0x00000002
+Global Const $VOS__PM32 = 0x00000003
+Global Const $VOS_UNKNOWN = 0x00000000
+
+Global Const $VOS_DOS_WINDOWS16 = 0x00010001
+Global Const $VOS_DOS_WINDOWS32 = 0x00010004
+Global Const $VOS_NT_WINDOWS32 = 0x00040004
+Global Const $VOS_OS216_PM16 = 0x00020002
+Global Const $VOS_OS232_PM32 = 0x00030003
+
+Global Const $VFT_APP = 0x00000001
+Global Const $VFT_DLL = 0x00000002
+Global Const $VFT_DRV = 0x00000003
+Global Const $VFT_FONT = 0x00000004
+Global Const $VFT_STATIC_LIB = 0x00000007
+Global Const $VFT_UNKNOWN = 0x00000000
+Global Const $VFT_VXD = 0x00000005
+
+Global Const $VFT2_DRV_COMM = 0x0000000A
+Global Const $VFT2_DRV_DISPLAY = 0x00000004
+Global Const $VFT2_DRV_INSTALLABLE = 0x00000008
+Global Const $VFT2_DRV_KEYBOARD = 0x00000002
+Global Const $VFT2_DRV_LANGUAGE = 0x00000003
+Global Const $VFT2_DRV_MOUSE = 0x00000005
+Global Const $VFT2_DRV_NETWORK = 0x00000006
+Global Const $VFT2_DRV_PRINTER = 0x00000001
+Global Const $VFT2_DRV_SOUND = 0x00000009
+Global Const $VFT2_DRV_SYSTEM = 0x00000007
+Global Const $VFT2_DRV_VERSIONED_PRINTER = 0x0000000C
+Global Const $VFT2_UNKNOWN = 0x00000000
+
+Global Const $VFT2_FONT_RASTER = 0x00000001
+Global Const $VFT2_FONT_TRUETYPE = 0x00000003
+Global Const $VFT2_FONT_VECTOR = 0x00000002
+; Global Const $VFT2_UNKNOWN = 0x00000000
+; ===============================================================================================================================

+ 82 - 0
include/APIShPathConstants.au3

@@ -0,0 +1,82 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: WinAPISPath Constants UDF Library for AutoIt3
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants that can be used with UDF library
+; Author(s) .....: Yashied, Jpm
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+
+; _WinAPI_ParseURL()
+Global Const $URL_SCHEME_INVALID = -1
+Global Const $URL_SCHEME_UNKNOWN = 0
+Global Const $URL_SCHEME_FTP = 1
+Global Const $URL_SCHEME_HTTP = 2
+Global Const $URL_SCHEME_GOPHER = 3
+Global Const $URL_SCHEME_MAILTO = 4
+Global Const $URL_SCHEME_NEWS = 5
+Global Const $URL_SCHEME_NNTP = 6
+Global Const $URL_SCHEME_TELNET = 7
+Global Const $URL_SCHEME_WAIS = 8
+Global Const $URL_SCHEME_FILE = 9
+Global Const $URL_SCHEME_MK = 10
+Global Const $URL_SCHEME_HTTPS = 11
+Global Const $URL_SCHEME_SHELL = 12
+Global Const $URL_SCHEME_SNEWS = 13
+Global Const $URL_SCHEME_LOCAL = 14
+Global Const $URL_SCHEME_JAVASCRIPT = 15
+Global Const $URL_SCHEME_VBSCRIPT = 16
+Global Const $URL_SCHEME_ABOUT = 17
+Global Const $URL_SCHEME_RES = 18
+Global Const $URL_SCHEME_MSSHELLROOTED = 19
+Global Const $URL_SCHEME_MSSHELLIDLIST = 20
+Global Const $URL_SCHEME_MSHELP = 21
+Global Const $URL_SCHEME_MSSHELLDEVICE = 22
+Global Const $URL_SCHEME_WILDCARD = 23
+Global Const $URL_SCHEME_SEARCH_MS = 24
+Global Const $URL_SCHEME_SEARCH = 25
+Global Const $URL_SCHEME_KNOWNFOLDER = 26
+
+; _WinAPI_PathGetCharType()
+Global Const $GCT_INVALID = 0x00
+Global Const $GCT_LFNCHAR = 0x01
+Global Const $GCT_SEPARATOR = 0x08
+Global Const $GCT_SHORTCHAR = 0x02
+Global Const $GCT_WILD = 0x04
+
+; _WinAPI_UrlApplyScheme()
+Global Const $URL_APPLY_DEFAULT = 0x01
+Global Const $URL_APPLY_GUESSSCHEME = 0x02
+Global Const $URL_APPLY_GUESSFILE = 0x04
+Global Const $URL_APPLY_FORCEAPPLY = 0x08
+
+; _WinAPI_UrlCanonicalize(), _WinAPI_UrlCombine()
+Global Const $URL_DONT_SIMPLIFY = 0x08000000
+Global Const $URL_ESCAPE_AS_UTF8 = 0x00040000
+Global Const $URL_ESCAPE_PERCENT = 0x00001000
+Global Const $URL_ESCAPE_SPACES_ONLY = 0x04000000
+Global Const $URL_ESCAPE_UNSAFE = 0x20000000
+Global Const $URL_NO_META = 0x08000000
+Global Const $URL_PLUGGABLE_PROTOCOL = 0x40000000
+Global Const $URL_UNESCAPE = 0x10000000
+
+; _WinAPI_UrlGetPart()
+Global Const $URL_PART_HOSTNAME = 2
+Global Const $URL_PART_PASSWORD = 4
+Global Const $URL_PART_PORT = 5
+Global Const $URL_PART_QUERY = 6
+Global Const $URL_PART_SCHEME = 1
+Global Const $URL_PART_USERNAME = 3
+
+; _WinAPI_UrlIs()
+Global Const $URLIS_APPLIABLE = 4
+Global Const $URLIS_DIRECTORY = 5
+Global Const $URLIS_FILEURL = 3
+Global Const $URLIS_HASQUERY = 6
+Global Const $URLIS_NOHISTORY = 2
+Global Const $URLIS_OPAQUE = 1
+Global Const $URLIS_URL = 0
+; ===============================================================================================================================

+ 717 - 0
include/APIShellExConstants.au3

@@ -0,0 +1,717 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: WinAPIShellEx Constants UDF Library for AutoIt3
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants that can be used with UDF library
+; Author(s) .....: Yashied, Jpm
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+
+; _WinAPI_DllGetVersion()
+Global Const $DLLVER_PLATFORM_WINDOWS = 0x01
+Global Const $DLLVER_PLATFORM_NT = 0x02
+
+; _WinAPI_ShellChangeNotify()
+Global Const $SHCNE_ALLEVENTS = 0x7FFFFFFF
+Global Const $SHCNE_ASSOCCHANGED = 0x8000000
+Global Const $SHCNE_ATTRIBUTES = 0x00000800
+Global Const $SHCNE_CREATE = 0x00000002
+Global Const $SHCNE_DELETE = 0x00000004
+Global Const $SHCNE_DRIVEADD = 0x00000100
+Global Const $SHCNE_DRIVEADDGUI = 0x00010000
+Global Const $SHCNE_DRIVEREMOVED = 0x00000080
+Global Const $SHCNE_EXTENDED_EVENT = 0x04000000
+Global Const $SHCNE_FREESPACE = 0x00040000
+Global Const $SHCNE_MEDIAINSERTED = 0x00000020
+Global Const $SHCNE_MEDIAREMOVED = 0x00000040
+Global Const $SHCNE_MKDIR = 0x00000008
+Global Const $SHCNE_NETSHARE = 0x00000200
+Global Const $SHCNE_NETUNSHARE = 0x00000400
+Global Const $SHCNE_RENAMEFOLDER = 0x00020000
+Global Const $SHCNE_RENAMEITEM = 0x00000001
+Global Const $SHCNE_RMDIR = 0x00000010
+Global Const $SHCNE_SERVERDISCONNECT = 0x00004000
+Global Const $SHCNE_UPDATEDIR = 0x00001000
+Global Const $SHCNE_UPDATEIMAGE = 0x00008000
+Global Const $SHCNE_UPDATEITEM = 0x00002000
+Global Const $SHCNE_DISKEVENTS = 0x0002381F
+Global Const $SHCNE_GLOBALEVENTS = 0x0C0581E0
+Global Const $SHCNE_INTERRUPT = 0x80000000
+
+Global Const $SHCNF_DWORD = 0x00000003
+Global Const $SHCNF_IDLIST = 0x00000000
+Global Const $SHCNF_PATH = 0x00000001
+Global Const $SHCNF_PRINTER = 0x00000002
+Global Const $SHCNF_FLUSH = 0x00001000
+Global Const $SHCNF_FLUSHNOWAIT = 0x00002000
+Global Const $SHCNF_NOTIFYRECURSIVE = 0x00010000
+
+; _WinAPI_ShellChangeNotifyRegister()
+Global Const $SHCNRF_INTERRUPTLEVEL = 0x0001
+Global Const $SHCNRF_SHELLLEVEL = 0x0002
+Global Const $SHCNRF_RECURSIVEINTERRUPT = 0x1000
+Global Const $SHCNRF_NEWDELIVERY = 0x8000
+
+; _WinAPI_ShellEmptyRecycleBin()
+Global Const $SHERB_NOCONFIRMATION = 0x01
+Global Const $SHERB_NOPROGRESSUI = 0x02
+Global Const $SHERB_NOSOUND = 0x04
+Global Const $SHERB_NO_UI = BitOR($SHERB_NOCONFIRMATION, $SHERB_NOPROGRESSUI, $SHERB_NOSOUND)
+
+; _WinAPI_ShellExecute(), _WinAPI_ShellExecuteEx()
+Global Const $SEE_MASK_DEFAULT = 0x00000000
+Global Const $SEE_MASK_CLASSNAME = 0x00000001
+Global Const $SEE_MASK_CLASSKEY = 0x00000003
+Global Const $SEE_MASK_IDLIST = 0x00000004
+Global Const $SEE_MASK_INVOKEIDLIST = 0x0000000C
+Global Const $SEE_MASK_ICON = 0x00000010
+Global Const $SEE_MASK_HOTKEY = 0x00000020
+Global Const $SEE_MASK_NOCLOSEPROCESS = 0x00000040
+Global Const $SEE_MASK_CONNECTNETDRV = 0x00000080
+Global Const $SEE_MASK_NOASYNC = 0x00000100
+Global Const $SEE_MASK_FLAG_DDEWAIT = $SEE_MASK_NOASYNC
+Global Const $SEE_MASK_DOENVSUBST = 0x00000200
+Global Const $SEE_MASK_FLAG_NO_UI = 0x00000400
+Global Const $SEE_MASK_UNICODE = 0x00004000
+Global Const $SEE_MASK_NO_CONSOLE = 0x00008000
+Global Const $SEE_MASK_ASYNCOK = 0x00100000
+Global Const $SEE_MASK_NOQUERYCLASSSTORE = 0x01000000
+Global Const $SEE_MASK_HMONITOR = 0x00200000
+Global Const $SEE_MASK_NOZONECHECKS = 0x00800000
+Global Const $SEE_MASK_WAITFORINPUTIDLE = 0x02000000
+Global Const $SEE_MASK_FLAG_LOG_USAGE = 0x04000000
+
+Global Const $SE_ERR_ACCESSDENIED = 5
+Global Const $SE_ERR_ASSOCINCOMPLETE = 27
+Global Const $SE_ERR_DDEBUSY = 30
+Global Const $SE_ERR_DDEFAIL = 29
+Global Const $SE_ERR_DDETIMEOUT = 28
+Global Const $SE_ERR_DLLNOTFOUND = 32
+Global Const $SE_ERR_FNF = 2
+Global Const $SE_ERR_NOASSOC = 31
+Global Const $SE_ERR_OOM = 8
+Global Const $SE_ERR_PNF = 3
+Global Const $SE_ERR_SHARE = 26
+
+; _WinAPI_ShellFileOperation()
+Global Const $FO_COPY = 2
+Global Const $FO_DELETE = 3
+Global Const $FO_MOVE = 1
+Global Const $FO_RENAME = 4
+
+Global Const $FOF_ALLOWUNDO = 0x0040
+Global Const $FOF_CONFIRMMOUSE = 0x0002
+Global Const $FOF_FILESONLY = 0x0080
+Global Const $FOF_MULTIDESTFILES = 0x0001
+Global Const $FOF_NOCONFIRMATION = 0x0010
+Global Const $FOF_NOCONFIRMMKDIR = 0x0200
+Global Const $FOF_NO_CONNECTED_ELEMENTS = 0x2000
+Global Const $FOF_NOCOPYSECURITYATTRIBS = 0x0800
+Global Const $FOF_NOERRORUI = 0x0400
+Global Const $FOF_NORECURSEREPARSE = 0x8000
+Global Const $FOF_NORECURSION = 0x1000
+Global Const $FOF_RENAMEONCOLLISION = 0x0008
+Global Const $FOF_SILENT = 0x0004
+Global Const $FOF_SIMPLEPROGRESS = 0x0100
+Global Const $FOF_WANTMAPPINGHANDLE = 0x0020
+Global Const $FOF_WANTNUKEWARNING = 0x4000
+Global Const $FOF_NO_UI = BitOR($FOF_NOCONFIRMATION, $FOF_NOCONFIRMMKDIR, $FOF_NOERRORUI, $FOF_SILENT)
+
+; _WinAPI_ShellGetFileInfo()
+Global Const $SHGFI_ADDOVERLAYS = 0x00000020
+Global Const $SHGFI_ATTR_SPECIFIED = 0x00020000
+Global Const $SHGFI_ATTRIBUTES = 0x00000800
+Global Const $SHGFI_DISPLAYNAME = 0x00000200
+Global Const $SHGFI_EXETYPE = 0x00002000
+Global Const $SHGFI_ICON = 0x00000100
+Global Const $SHGFI_ICONLOCATION = 0x00001000
+Global Const $SHGFI_LARGEICON = 0x00000000
+Global Const $SHGFI_LINKOVERLAY = 0x00008000
+Global Const $SHGFI_OPENICON = 0x00000002
+Global Const $SHGFI_OVERLAYINDEX = 0x00000040
+Global Const $SHGFI_PIDL = 0x00000008
+Global Const $SHGFI_SELECTED = 0x00010000
+Global Const $SHGFI_SHELLICONSIZE = 0x00000004
+Global Const $SHGFI_SMALLICON = 0x00000001
+Global Const $SHGFI_SYSICONINDEX = 0x00004000
+Global Const $SHGFI_TYPENAME = 0x00000400
+Global Const $SHGFI_USEFILEATTRIBUTES = 0x00000010
+
+Global Const $SFGAO_CANCOPY = 0x00000001
+Global Const $SFGAO_CANMOVE = 0x00000002
+Global Const $SFGAO_CANLINK = 0x00000004
+Global Const $SFGAO_STORAGE = 0x00000008
+Global Const $SFGAO_CANRENAME = 0x00000010
+Global Const $SFGAO_CANDELETE = 0x00000020
+Global Const $SFGAO_HASPROPSHEET = 0x00000040
+Global Const $SFGAO_DROPTARGET = 0x00000100
+Global Const $SFGAO_CAPABILITYMASK = BitOR($SFGAO_CANCOPY, $SFGAO_CANMOVE, $SFGAO_CANLINK, $SFGAO_CANRENAME, $SFGAO_CANDELETE, $SFGAO_HASPROPSHEET, $SFGAO_DROPTARGET)
+Global Const $SFGAO_SYSTEM = 0x00001000
+Global Const $SFGAO_ENCRYPTED = 0x00002000
+Global Const $SFGAO_ISSLOW = 0x00004000
+Global Const $SFGAO_GHOSTED = 0x00008000
+Global Const $SFGAO_LINK = 0x00010000
+Global Const $SFGAO_SHARE = 0x00020000
+Global Const $SFGAO_READONLY = 0x00040000
+Global Const $SFGAO_HIDDEN = 0x00080000
+Global Const $SFGAO_DISPLAYATTRMASK = BitOR($SFGAO_ISSLOW, $SFGAO_GHOSTED, $SFGAO_LINK, $SFGAO_SHARE, $SFGAO_READONLY, $SFGAO_HIDDEN)
+Global Const $SFGAO_NONENUMERATED = 0x00100000
+Global Const $SFGAO_NEWCONTENT = 0x00200000
+Global Const $SFGAO_STREAM = 0x00400000
+Global Const $SFGAO_STORAGEANCESTOR = 0x00800000
+Global Const $SFGAO_VALIDATE = 0x01000000
+Global Const $SFGAO_REMOVABLE = 0x02000000
+Global Const $SFGAO_COMPRESSED = 0x04000000
+Global Const $SFGAO_BROWSABLE = 0x08000000
+Global Const $SFGAO_FILESYSANCESTOR = 0x10000000
+Global Const $SFGAO_FOLDER = 0x20000000
+Global Const $SFGAO_FILESYSTEM = 0x40000000
+Global Const $SFGAO_STORAGECAPMASK = BitOR($SFGAO_STORAGE, $SFGAO_LINK, $SFGAO_READONLY, $SFGAO_STREAM, $SFGAO_STORAGEANCESTOR, $SFGAO_FILESYSANCESTOR, $SFGAO_FOLDER, $SFGAO_FILESYSTEM)
+Global Const $SFGAO_HASSUBFOLDER = 0x80000000
+Global Const $SFGAO_CONTENTSMASK = $SFGAO_HASSUBFOLDER
+Global Const $SFGAO_PKEYSFGAOMASK = BitOR($SFGAO_ISSLOW, $SFGAO_READONLY, $SFGAO_HASSUBFOLDER, $SFGAO_VALIDATE)
+
+; _WinAPI_ShellGetIconOverlayIndex()
+Global Const $IDO_SHGIOI_DEFAULT = 0x0FFFFFFC
+Global Const $IDO_SHGIOI_LINK = 0x0FFFFFFE
+Global Const $IDO_SHGIOI_SHARE = 0x0FFFFFFF
+Global Const $IDO_SHGIOI_SLOWFILE = 0x0FFFFFFD
+
+; _WinAPI_ShellGetSetFolderCustomSettings()
+Global Const $FCSM_VIEWID = 0x0001
+Global Const $FCSM_WEBVIEWTEMPLATE = 0x0002
+Global Const $FCSM_INFOTIP = 0x0004
+Global Const $FCSM_CLSID = 0x0008
+Global Const $FCSM_ICONFILE = 0x0010
+Global Const $FCSM_LOGO = 0x0020
+Global Const $FCSM_FLAGS = 0x0040
+
+Global Const $FCS_READ = 0x0001
+Global Const $FCS_FORCEWRITE = 0x0002
+Global Const $FCS_WRITE = BitOR($FCS_READ, $FCS_FORCEWRITE)
+
+; _WinAPI_ShellGetSettings(), _WinAPI_ShellSetSettings()
+Global Const $SSF_AUTOCHECKSELECT = 0x00800000
+Global Const $SSF_DESKTOPHTML = 0x00000200
+Global Const $SSF_DONTPRETTYPATH = 0x00000800
+Global Const $SSF_DOUBLECLICKINWEBVIEW = 0x00000080
+Global Const $SSF_HIDEICONS = 0x00004000
+Global Const $SSF_ICONSONLY = 0x01000000
+Global Const $SSF_MAPNETDRVBUTTON = 0x00001000
+Global Const $SSF_NOCONFIRMRECYCLE = 0x00008000
+Global Const $SSF_NONETCRAWLING = 0x00100000
+Global Const $SSF_SEPPROCESS = 0x00080000
+Global Const $SSF_SHOWALLOBJECTS = 0x00000001
+Global Const $SSF_SHOWCOMPCOLOR = 0x00000008
+Global Const $SSF_SHOWEXTENSIONS = 0x00000002
+Global Const $SSF_SHOWINFOTIP = 0x00002000
+Global Const $SSF_SHOWSUPERHIDDEN = 0x00040000
+Global Const $SSF_SHOWSYSFILES = 0x00000020
+Global Const $SSF_SHOWTYPEOVERLAY = 0x02000000
+Global Const $SSF_STARTPANELON = 0x00200000
+Global Const $SSF_WIN95CLASSIC = 0x00000400
+Global Const $SSF_WEBVIEW = 0x00020000
+
+; _WinAPI_ShellGetSpecialFolderPath()
+Global Const $CSIDL_ADMINTOOLS = 0x0030
+Global Const $CSIDL_ALTSTARTUP = 0x001D
+Global Const $CSIDL_APPDATA = 0x001A
+Global Const $CSIDL_BITBUCKET = 0x000A
+Global Const $CSIDL_CDBURN_AREA = 0x003B
+Global Const $CSIDL_COMMON_ADMINTOOLS = 0x002F
+Global Const $CSIDL_COMMON_ALTSTARTUP = 0x001E
+Global Const $CSIDL_COMMON_APPDATA = 0x0023
+Global Const $CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019
+Global Const $CSIDL_COMMON_DOCUMENTS = 0x002E
+Global Const $CSIDL_COMMON_FAVORITES = 0x001F
+Global Const $CSIDL_COMMON_MUSIC = 0x0035
+Global Const $CSIDL_COMMON_PICTURES = 0x0036
+Global Const $CSIDL_COMMON_PROGRAMS = 0x0017
+Global Const $CSIDL_COMMON_STARTMENU = 0x0016
+Global Const $CSIDL_COMMON_STARTUP = 0x0018
+Global Const $CSIDL_COMMON_TEMPLATES = 0x002D
+Global Const $CSIDL_COMMON_VIDEO = 0x0037
+Global Const $CSIDL_COMPUTERSNEARME = 0x003D
+Global Const $CSIDL_CONNECTIONS = 0x0031
+Global Const $CSIDL_CONTROLS = 0x0003
+Global Const $CSIDL_COOKIES = 0x0021
+Global Const $CSIDL_DESKTOP = 0x0000
+Global Const $CSIDL_DESKTOPDIRECTORY = 0x0010
+Global Const $CSIDL_DRIVES = 0x0011
+Global Const $CSIDL_FAVORITES = 0x0006
+Global Const $CSIDL_FONTS = 0x0014
+Global Const $CSIDL_INTERNET_CACHE = 0x0020
+Global Const $CSIDL_HISTORY = 0x0022
+Global Const $CSIDL_LOCAL_APPDATA = 0x001C
+Global Const $CSIDL_MYMUSIC = 0x000D
+Global Const $CSIDL_MYPICTURES = 0x0027
+Global Const $CSIDL_MYVIDEO = 0x000E
+Global Const $CSIDL_NETHOOD = 0x0013
+Global Const $CSIDL_PERSONAL = 0x0005
+Global Const $CSIDL_PRINTERS = 0x0004
+Global Const $CSIDL_PRINTHOOD = 0x001B
+Global Const $CSIDL_PROFILE = 0x0028
+Global Const $CSIDL_PROGRAM_FILES = 0x0026
+Global Const $CSIDL_PROGRAM_FILES_COMMON = 0x002B
+Global Const $CSIDL_PROGRAM_FILES_COMMONX86 = 0x002C
+Global Const $CSIDL_PROGRAM_FILESX86 = 0x002A
+Global Const $CSIDL_PROGRAMS = 0x0002
+Global Const $CSIDL_RECENT = 0x0008
+Global Const $CSIDL_SENDTO = 0x0009
+Global Const $CSIDL_STARTMENU = 0x000B
+Global Const $CSIDL_STARTUP = 0x0007
+Global Const $CSIDL_SYSTEM = 0x0025
+Global Const $CSIDL_SYSTEMX86 = 0x0029
+Global Const $CSIDL_TEMPLATES = 0x0015
+Global Const $CSIDL_WINDOWS = 0x0024
+
+; _WinAPI_ShellGetStockIconInfo()
+Global Const $SIID_DOCNOASSOC = 0
+Global Const $SIID_DOCASSOC = 1
+Global Const $SIID_APPLICATION = 2
+Global Const $SIID_FOLDER = 3
+Global Const $SIID_FOLDEROPEN = 4
+Global Const $SIID_DRIVE525 = 5
+Global Const $SIID_DRIVE35 = 6
+Global Const $SIID_DRIVEREMOVE = 7
+Global Const $SIID_DRIVEFIXED = 8
+Global Const $SIID_DRIVENET = 9
+Global Const $SIID_DRIVENETDISABLED = 10
+Global Const $SIID_DRIVECD = 11
+Global Const $SIID_DRIVERAM = 12
+Global Const $SIID_WORLD = 13
+Global Const $SIID_SERVER = 15
+Global Const $SIID_PRINTER = 16
+Global Const $SIID_MYNETWORK = 17
+Global Const $SIID_FIND = 22
+Global Const $SIID_HELP = 23
+Global Const $SIID_SHARE = 28
+Global Const $SIID_LINK = 29
+Global Const $SIID_SLOWFILE = 30
+Global Const $SIID_RECYCLER = 31
+Global Const $SIID_RECYCLERFULL = 32
+Global Const $SIID_MEDIACDAUDIO = 40
+Global Const $SIID_LOCK = 47
+Global Const $SIID_AUTOLIST = 49
+Global Const $SIID_PRINTERNET = 50
+Global Const $SIID_SERVERSHARE = 51
+Global Const $SIID_PRINTERFAX = 52
+Global Const $SIID_PRINTERFAXNET = 53
+Global Const $SIID_PRINTERFILE = 54
+Global Const $SIID_STACK = 55
+Global Const $SIID_MEDIASVCD = 56
+Global Const $SIID_STUFFEDFOLDER = 57
+Global Const $SIID_DRIVEUNKNOWN = 58
+Global Const $SIID_DRIVEDVD = 59
+Global Const $SIID_MEDIADVD = 60
+Global Const $SIID_MEDIADVDRAM = 61
+Global Const $SIID_MEDIADVDRW = 62
+Global Const $SIID_MEDIADVDR = 63
+Global Const $SIID_MEDIADVDROM = 64
+Global Const $SIID_MEDIACDAUDIOPLUS = 65
+Global Const $SIID_MEDIACDRW = 66
+Global Const $SIID_MEDIACDR = 67
+Global Const $SIID_MEDIACDBURN = 68
+Global Const $SIID_MEDIABLANKCD = 69
+Global Const $SIID_MEDIACDROM = 70
+Global Const $SIID_AUDIOFILES = 71
+Global Const $SIID_IMAGEFILES = 72
+Global Const $SIID_VIDEOFILES = 73
+Global Const $SIID_MIXEDFILES = 74
+Global Const $SIID_FOLDERBACK = 75
+Global Const $SIID_FOLDERFRONT = 76
+Global Const $SIID_SHIELD = 77
+Global Const $SIID_WARNING = 78
+Global Const $SIID_INFO = 79
+Global Const $SIID_ERROR = 80
+Global Const $SIID_KEY = 81
+Global Const $SIID_SOFTWARE = 82
+Global Const $SIID_RENAME = 83
+Global Const $SIID_DELETE = 84
+Global Const $SIID_MEDIAAUDIODVD = 85
+Global Const $SIID_MEDIAMOVIEDVD = 86
+Global Const $SIID_MEDIAENHANCEDCD = 87
+Global Const $SIID_MEDIAENHANCEDDVD = 88
+Global Const $SIID_MEDIAHDDVD = 89
+Global Const $SIID_MEDIABLURAY = 90
+Global Const $SIID_MEDIAVCD = 91
+Global Const $SIID_MEDIADVDPLUSR = 92
+Global Const $SIID_MEDIADVDPLUSRW = 93
+Global Const $SIID_DESKTOPPC = 94
+Global Const $SIID_MOBILEPC = 95
+Global Const $SIID_USERS = 96
+Global Const $SIID_MEDIASMARTMEDIA = 97
+Global Const $SIID_MEDIACOMPACTFLASH = 98
+Global Const $SIID_DEVICECELLPHONE = 99
+Global Const $SIID_DEVICECAMERA = 100
+Global Const $SIID_DEVICEVIDEOCAMERA = 101
+Global Const $SIID_DEVICEAUDIOPLAYER = 102
+Global Const $SIID_NETWORKCONNECT = 103
+Global Const $SIID_INTERNET = 104
+Global Const $SIID_ZIPFILE = 105
+Global Const $SIID_SETTINGS = 106
+Global Const $SIID_DRIVEHDDVD = 132
+Global Const $SIID_DRIVEBD = 133
+Global Const $SIID_MEDIAHDDVDROM = 134
+Global Const $SIID_MEDIAHDDVDR = 135
+Global Const $SIID_MEDIAHDDVDRAM = 136
+Global Const $SIID_MEDIABDROM = 137
+Global Const $SIID_MEDIABDR = 138
+Global Const $SIID_MEDIABDRE = 139
+Global Const $SIID_CLUSTEREDDRIVE = 140
+Global Const $SIID_MAX_ICONS = 174
+
+Global Const $SHGSI_ICONLOCATION = 0
+Global Const $SHGSI_ICON = $SHGFI_ICON
+Global Const $SHGSI_SYSICONINDEX = $SHGFI_SYSICONINDEX
+Global Const $SHGSI_LINKOVERLAY = $SHGFI_LINKOVERLAY
+Global Const $SHGSI_SELECTED = $SHGFI_SELECTED
+Global Const $SHGSI_LARGEICON = $SHGFI_LARGEICON
+Global Const $SHGSI_SMALLICON = $SHGFI_SMALLICON
+Global Const $SHGSI_SHELLICONSIZE = $SHGFI_SHELLICONSIZE
+
+; _WinAPI_ShellNotifyIcon()
+Global Const $NIM_ADD = 0x00
+Global Const $NIM_MODIFY = 0x01
+Global Const $NIM_DELETE = 0x02
+Global Const $NIM_SETFOCUS = 0x03
+Global Const $NIM_SETVERSION = 0x04
+
+Global Const $NIF_MESSAGE = 0x01
+Global Const $NIF_ICON = 0x02
+Global Const $NIF_TIP = 0x04
+Global Const $NIF_STATE = 0x08
+Global Const $NIF_INFO = 0x10
+Global Const $NIF_GUID = 0x20
+Global Const $NIF_REALTIME = 0x40
+Global Const $NIF_SHOWTIP = 0x80
+
+Global Const $NIS_HIDDEN = 0x01
+Global Const $NIS_SHAREDICON = 0x02
+
+Global Const $NIIF_NONE = 0x00
+Global Const $NIIF_INFO = 0x01
+Global Const $NIIF_WARNING = 0x02
+Global Const $NIIF_ERROR = 0x03
+Global Const $NIIF_USER = 0x04
+Global Const $NIIF_NOSOUND = 0x10
+Global Const $NIIF_LARGE_ICON = 0x10
+Global Const $NIIF_RESPECT_QUIET_TIME = 0x80
+Global Const $NIIF_ICON_MASK = 0x0F
+
+; _WinAPI_ShellObjectProperties()
+Global Const $SHOP_PRINTERNAME = 1
+Global Const $SHOP_FILEPATH = 2
+Global Const $SHOP_VOLUMEGUID = 4
+
+; _WinAPI_ShellOpenFolderAndSelectItems()
+Global Const $OFASI_EDIT = 0x01
+Global Const $OFASI_OPENDESKTOP = 0x02
+
+; _WinAPI_ShellQueryUserNotificationState()
+Global Const $QUNS_NOT_PRESENT = 1
+Global Const $QUNS_BUSY = 2
+Global Const $QUNS_RUNNING_D3D_FULL_SCREEN = 3
+Global Const $QUNS_PRESENTATION_MODE = 4
+Global Const $QUNS_ACCEPTS_NOTIFICATIONS = 5
+Global Const $QUNS_QUIET_TIME = 6
+
+; _WinAPI_ShellRestricted()
+Global Const $REST_NORUN = 1
+Global Const $REST_NOCLOSE = 2
+Global Const $REST_NOSAVESET = 3
+Global Const $REST_NOFILEMENU = 4
+Global Const $REST_NOSETFOLDERS = 5
+Global Const $REST_NOSETTASKBAR = 6
+Global Const $REST_NODESKTOP = 7
+Global Const $REST_NOFIND = 8
+Global Const $REST_NODRIVES = 9
+Global Const $REST_NODRIVEAUTORUN = 10
+Global Const $REST_NODRIVETYPEAUTORUN = 11
+Global Const $REST_NONETHOOD = 12
+Global Const $REST_STARTBANNER = 13
+Global Const $REST_RESTRICTRUN = 14
+Global Const $REST_NOPRINTERTABS = 15
+Global Const $REST_NOPRINTERDELETE = 16
+Global Const $REST_NOPRINTERADD = 17
+Global Const $REST_NOSTARTMENUSUBFOLDERS = 18
+Global Const $REST_MYDOCSONNET = 19
+Global Const $REST_NOEXITTODOS = 20
+Global Const $REST_ENFORCESHELLEXTSECURITY = 21
+Global Const $REST_LINKRESOLVEIGNORELINKINFO = 22
+Global Const $REST_NOCOMMONGROUPS = 23
+Global Const $REST_SEPARATEDESKTOPPROCESS = 24
+Global Const $REST_NOWEB = 25
+Global Const $REST_NOTRAYCONTEXTMENU = 26
+Global Const $REST_NOVIEWCONTEXTMENU = 27
+Global Const $REST_NONETCONNECTDISCONNECT = 28
+Global Const $REST_STARTMENULOGOFF = 29
+Global Const $REST_NOSETTINGSASSIST = 30
+Global Const $REST_NOINTERNETICON = 31
+Global Const $REST_NORECENTDOCSHISTORY = 32
+Global Const $REST_NORECENTDOCSMENU = 33
+Global Const $REST_NOACTIVEDESKTOP = 34
+Global Const $REST_NOACTIVEDESKTOPCHANGES = 35
+Global Const $REST_NOFAVORITESMENU = 36
+Global Const $REST_CLEARRECENTDOCSONEXIT = 37
+Global Const $REST_CLASSICSHELL = 38
+Global Const $REST_NOCUSTOMIZEWEBVIEW = 39
+Global Const $REST_NOHTMLWALLPAPER = 40
+Global Const $REST_NOCHANGINGWALLPAPER = 41
+Global Const $REST_NODESKCOMP = 42
+Global Const $REST_NOADDDESKCOMP = 43
+Global Const $REST_NODELDESKCOMP = 44
+Global Const $REST_NOCLOSEDESKCOMP = 45
+Global Const $REST_NOCLOSE_DRAGDROPBAND = 46
+Global Const $REST_NOMOVINGBAND = 47
+Global Const $REST_NOEDITDESKCOMP = 48
+Global Const $REST_NORESOLVESEARCH = 49
+Global Const $REST_NORESOLVETRACK = 50
+Global Const $REST_FORCECOPYACLWITHFILE = 51
+Global Const $REST_NOLOGO3CHANNELNOTIFY = 52
+Global Const $REST_NOFORGETSOFTWAREUPDATE = 53
+Global Const $REST_NOSETACTIVEDESKTOP = 54
+Global Const $REST_NOUPDATEWINDOWS = 55
+Global Const $REST_NOCHANGESTARMENU = 56
+Global Const $REST_NOFOLDEROPTIONS = 57
+Global Const $REST_HASFINDCOMPUTERS = 58
+Global Const $REST_INTELLIMENUS = 59
+Global Const $REST_RUNDLGMEMCHECKBOX = 60
+Global Const $REST_ARP_ShowPostSetup = 61
+Global Const $REST_NOCSC = 62
+Global Const $REST_NOCONTROLPANEL = 63
+Global Const $REST_ENUMWORKGROUP = 64
+Global Const $REST_ARP_NOARP = 65
+Global Const $REST_ARP_NOREMOVEPAGE = 66
+Global Const $REST_ARP_NOADDPAGE = 67
+Global Const $REST_ARP_NOWINSETUPPAGE = 68
+Global Const $REST_GREYMSIADS = 69
+Global Const $REST_NOCHANGEMAPPEDDRIVELABEL = 70
+Global Const $REST_NOCHANGEMAPPEDDRIVECOMMENT = 71
+Global Const $REST_MAXRECENTDOCS = 72
+Global Const $REST_NONETWORKCONNECTIONS = 73
+Global Const $REST_FORCESTARTMENULOGOFF = 74
+Global Const $REST_NOWEBVIEW = 75
+Global Const $REST_NOCUSTOMIZETHISFOLDER = 76
+Global Const $REST_NOENCRYPTION = 77
+Global Const $REST_DONTSHOWSUPERHIDDEN = 78
+Global Const $REST_NOSHELLSEARCHBUTTON = 79
+Global Const $REST_NOHARDWARETAB = 80
+Global Const $REST_NORUNASINSTALLPROMPT = 81
+Global Const $REST_PROMPTRUNASINSTALLNETPATH = 82
+Global Const $REST_NOMANAGEMYCOMPUTERVERB = 83
+Global Const $REST_NORECENTDOCSNETHOOD = 84
+Global Const $REST_DISALLOWRUN = 85
+Global Const $REST_NOWELCOMESCREEN = 86
+Global Const $REST_RESTRICTCPL = 87
+Global Const $REST_DISALLOWCPL = 88
+Global Const $REST_NOSMBALLOONTIP = 89
+Global Const $REST_NOSMHELP = 90
+Global Const $REST_NOWINKEYS = 91
+Global Const $REST_NOENCRYPTONMOVE = 92
+Global Const $REST_NOLOCALMACHINERUN = 93
+Global Const $REST_NOCURRENTUSERRUN = 94
+Global Const $REST_NOLOCALMACHINERUNONCE = 95
+Global Const $REST_NOCURRENTUSERRUNONCE = 96
+Global Const $REST_FORCEACTIVEDESKTOPON = 97
+Global Const $REST_NOCOMPUTERSNEARME = 98
+Global Const $REST_NOVIEWONDRIVE = 99
+Global Const $REST_NONETCRAWL = 100
+Global Const $REST_NOSHAREDDOCUMENTS = 101
+Global Const $REST_NOSMMYDOCS = 102
+Global Const $REST_NOSMMYPICS = 103
+Global Const $REST_ALLOWBITBUCKDRIVES = 104
+Global Const $REST_NONLEGACYSHELLMODE = 105
+Global Const $REST_NOCONTROLPANELBARRICADE = 106
+Global Const $REST_NOSTARTPAGE = 107
+Global Const $REST_NOAUTOTRAYNOTIFY = 108
+Global Const $REST_NOTASKGROUPING = 109
+Global Const $REST_NOCDBURNING = 110
+Global Const $REST_MYCOMPNOPROP = 111
+Global Const $REST_MYDOCSNOPROP = 112
+Global Const $REST_NOSTARTPANEL = 113
+Global Const $REST_NODISPLAYAPPEARANCEPAGE = 114
+Global Const $REST_NOTHEMESTAB = 115
+Global Const $REST_NOVISUALSTYLECHOICE = 116
+Global Const $REST_NOSIZECHOICE = 117
+Global Const $REST_NOCOLORCHOICE = 118
+Global Const $REST_SETVISUALSTYLE = 119
+Global Const $REST_STARTRUNNOHOMEPATH = 120
+Global Const $REST_NOUSERNAMEINSTARTPANEL = 121
+Global Const $REST_NOMYCOMPUTERICON = 122
+Global Const $REST_NOSMNETWORKPLACES = 123
+Global Const $REST_NOSMPINNEDLIST = 124
+Global Const $REST_NOSMMYMUSIC = 125
+Global Const $REST_NOSMEJECTPC = 126
+Global Const $REST_NOSMMOREPROGRAMS = 127
+Global Const $REST_NOSMMFUPROGRAMS = 128
+Global Const $REST_NOTRAYITEMSDISPLAY = 129
+Global Const $REST_NOTOOLBARSONTASKBAR = 130
+Global Const $REST_NOSMCONFIGUREPROGRAMS = 131
+Global Const $REST_HIDECLOCK = 132
+Global Const $REST_NOLOWDISKSPACECHECKS = 133
+Global Const $REST_NOENTIRENETWORK = 134
+Global Const $REST_NODESKTOPCLEANUP = 135
+Global Const $REST_BITBUCKNUKEONDELETE = 136
+Global Const $REST_BITBUCKCONFIRMDELETE = 137
+Global Const $REST_BITBUCKNOPROP = 138
+Global Const $REST_NODISPBACKGROUND = 139
+Global Const $REST_NODISPSCREENSAVEPG = 140
+Global Const $REST_NODISPSETTINGSPG = 141
+Global Const $REST_NODISPSCREENSAVEPREVIEW = 142
+Global Const $REST_NODISPLAYCPL = 143
+Global Const $REST_HIDERUNASVERB = 144
+Global Const $REST_NOTHUMBNAILCACHE = 145
+Global Const $REST_NOSTRCMPLOGICAL = 146
+Global Const $REST_NOPUBLISHWIZARD = 147
+Global Const $REST_NOONLINEPRINTSWIZARD = 148
+Global Const $REST_NOWEBSERVICES = 149
+Global Const $REST_ALLOWUNHASHEDWEBVIEW = 150
+Global Const $REST_ALLOWLEGACYWEBVIEW = 151
+Global Const $REST_REVERTWEBVIEWSECURITY = 152
+Global Const $REST_INHERITCONSOLEHANDLES = 153
+Global Const $REST_SORTMAXITEMCOUNT = 154
+Global Const $REST_NOREMOTERECURSIVEEVENTS = 155
+Global Const $REST_NOREMOTECHANGENOTIFY = 156
+Global Const $REST_NOSIMPLENETIDLIST = 157
+Global Const $REST_NOENUMENTIRENETWORK = 158
+Global Const $REST_NODETAILSTHUMBNAILONNETWORK = 159
+Global Const $REST_NOINTERNETOPENWITH = 160
+Global Const $REST_ALLOWLEGACYLMZBEHAVIOR = 161
+Global Const $REST_DONTRETRYBADNETNAME = 162
+Global Const $REST_ALLOWFILECLSIDJUNCTIONS = 163
+Global Const $REST_NOUPNPINSTALL = 164
+Global Const $REST_ARP_DONTGROUPPATCHES = 165
+Global Const $REST_ARP_NOCHOOSEPROGRAMSPAGE = 166
+Global Const $REST_NODISCONNECT = 167
+Global Const $REST_NOSECURITY = 168
+Global Const $REST_NOFILEASSOCIATE = 169
+Global Const $REST_ALLOWCOMMENTTOGGLE = 170
+Global Const $REST_USEDESKTOPINICACHE = 171
+
+; _WinAPI_ShellUpdateImage()
+Global Const $GIL_DONTCACHE = 0x0010
+Global Const $GIL_NOTFILENAME = 0x0008
+Global Const $GIL_PERCLASS = 0x0004
+Global Const $GIL_PERINSTANCE = 0x0002
+Global Const $GIL_SIMULATEDOC = 0x0001
+Global Const $GIL_SHIELD = 0x0200
+Global Const $GIL_FORCENOSHIELD = 0x0400
+
+; _WinAPI_Shell*KnownFolder*()
+Global Const $FOLDERID_AddNewPrograms = '{DE61D971-5EBC-4F02-A3A9-6C82895E5C04}'
+Global Const $FOLDERID_AdminTools = '{724EF170-A42D-4FEF-9F26-B60E846FBA4F}'
+Global Const $FOLDERID_AppUpdates = '{A305CE99-F527-492B-8B1A-7E76FA98D6E4}'
+Global Const $FOLDERID_CDBurning = '{9E52AB10-F80D-49DF-ACB8-4330F5687855}'
+Global Const $FOLDERID_ChangeRemovePrograms = '{DF7266AC-9274-4867-8D55-3BD661DE872D}'
+Global Const $FOLDERID_CommonAdminTools = '{D0384E7D-BAC3-4797-8F14-CBA229B392B5}'
+Global Const $FOLDERID_CommonOEMLinks = '{C1BAE2D0-10DF-4334-BEDD-7AA20B227A9D}'
+Global Const $FOLDERID_CommonPrograms = '{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}'
+Global Const $FOLDERID_CommonStartMenu = '{A4115719-D62E-491D-AA7C-E74B8BE3B067}'
+Global Const $FOLDERID_CommonStartup = '{82A5EA35-D9CD-47C5-9629-E15D2F714E6E}'
+Global Const $FOLDERID_CommonTemplates = '{B94237E7-57AC-4347-9151-B08C6C32D1F7}'
+Global Const $FOLDERID_ComputerFolder = '{0AC0837C-BBF8-452A-850D-79D08E667CA7}'
+Global Const $FOLDERID_ConflictFolder = '{4BFEFB45-347D-4006-A5BE-AC0CB0567192}'
+Global Const $FOLDERID_ConnectionsFolder = '{6F0CD92B-2E97-45D1-88FF-B0D186B8DEDD}'
+Global Const $FOLDERID_Contacts = '{56784854-C6CB-462B-8169-88E350ACB882}'
+Global Const $FOLDERID_ControlPanelFolder = '{82A74AEB-AEB4-465C-A014-D097EE346D63}'
+Global Const $FOLDERID_Cookies = '{2B0F765D-C0E9-4171-908E-08A611B84FF6}'
+Global Const $FOLDERID_Desktop = '{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}'
+Global Const $FOLDERID_DeviceMetadataStore = '{5CE4A5E9-E4EB-479D-B89F-130C02886155}'
+Global Const $FOLDERID_DocumentsLibrary = '{7B0DB17D-9CD2-4A93-9733-46CC89022E7C}'
+Global Const $FOLDERID_Downloads = '{374DE290-123F-4565-9164-39C4925E467B}'
+Global Const $FOLDERID_Favorites = '{1777F761-68AD-4D8A-87BD-30B759FA33DD}'
+Global Const $FOLDERID_Fonts = '{FD228CB7-AE11-4AE3-864C-16F3910AB8FE}'
+Global Const $FOLDERID_Games = '{CAC52C1A-B53D-4EDC-92D7-6B2E8AC19434}'
+Global Const $FOLDERID_GameTasks = '{054FAE61-4DD8-4787-80B6-090220C4B700}'
+Global Const $FOLDERID_History = '{D9DC8A3B-B784-432E-A781-5A1130A75963}'
+Global Const $FOLDERID_HomeGroup = '{52528A6B-B9E3-4ADD-B60D-588C2DBA842D}'
+Global Const $FOLDERID_ImplicitAppShortcuts = '{BCB5256F-79F6-4CEE-B725-DC34E402FD46}'
+Global Const $FOLDERID_InternetCache = '{352481E8-33BE-4251-BA85-6007CAEDCF9D}'
+Global Const $FOLDERID_InternetFolder = '{4D9F7874-4E0C-4904-967B-40B0D20C3E4B}'
+Global Const $FOLDERID_Libraries = '{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}'
+Global Const $FOLDERID_Links = '{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}'
+Global Const $FOLDERID_LocalAppData = '{F1B32785-6FBA-4FCF-9D55-7B8E7F157091}'
+Global Const $FOLDERID_LocalAppDataLow = '{A520A1A4-1780-4FF6-BD18-167343C5AF16}'
+Global Const $FOLDERID_LocalizedResourcesDir = '{2A00375E-224C-49DE-B8D1-440DF7EF3DDC}'
+Global Const $FOLDERID_Music = '{4BD8D571-6D19-48D3-BE97-422220080E43}'
+Global Const $FOLDERID_MusicLibrary = '{2112AB0A-C86A-4FFE-A368-0DE96E47012E}'
+Global Const $FOLDERID_NetHood = '{C5ABBF53-E17F-4121-8900-86626FC2C973}'
+Global Const $FOLDERID_NetworkFolder = '{D20BEEC4-5CA8-4905-AE3B-BF251EA09B53}'
+Global Const $FOLDERID_OriginalImages = '{2C36C0AA-5812-4B87-BFD0-4CD0DFB19B39}'
+Global Const $FOLDERID_PhotoAlbums = '{69D2CF90-FC33-4FB7-9A0C-EBB0F0FCB43C}'
+Global Const $FOLDERID_PicturesLibrary = '{A990AE9F-A03B-4E80-94BC-9912D7504104}'
+Global Const $FOLDERID_Pictures = '{33E28130-4E1E-4676-835A-98395C3BC3BB}'
+Global Const $FOLDERID_Playlists = '{DE92C1C7-837F-4F69-A3BB-86E631204A23}'
+Global Const $FOLDERID_PrintersFolder = '{76FC4E2D-D6AD-4519-A663-37BD56068185}'
+Global Const $FOLDERID_PrintHood = '{9274BD8D-CFD1-41C3-B35E-B13F55A758F4}'
+Global Const $FOLDERID_Profile = '{5E6C858F-0E22-4760-9AFE-EA3317B67173}'
+Global Const $FOLDERID_ProgramData = '{62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}'
+Global Const $FOLDERID_ProgramFiles = '{905E63B6-C1BF-494E-B29C-65B732D3D21A}'
+Global Const $FOLDERID_ProgramFilesX64 = '{6D809377-6AF0-444B-8957-A3773F02200E}'
+Global Const $FOLDERID_ProgramFilesX86 = '{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}'
+Global Const $FOLDERID_ProgramFilesCommon = '{F7F1ED05-9F6D-47A2-AAAE-29D317C6F066}'
+Global Const $FOLDERID_ProgramFilesCommonX64 = '{6365D5A7-0F0D-45E5-87F6-0DA56B6A4F7D}'
+Global Const $FOLDERID_ProgramFilesCommonX86 = '{DE974D24-D9C6-4D3E-BF91-F4455120B917}'
+Global Const $FOLDERID_Programs = '{A77F5D77-2E2B-44C3-A6A2-ABA601054A51}'
+Global Const $FOLDERID_Public = '{DFDF76A2-C82A-4D63-906A-5644AC457385}'
+Global Const $FOLDERID_PublicDesktop = '{C4AA340D-F20F-4863-AFEF-F87EF2E6BA25}'
+Global Const $FOLDERID_PublicDocuments = '{ED4824AF-DCE4-45A8-81E2-FC7965083634}'
+Global Const $FOLDERID_PublicDownloads = '{3D644C9B-1FB8-4F30-9B45-F670235F79C0}'
+Global Const $FOLDERID_PublicGameTasks = '{DEBF2536-E1A8-4C59-B6A2-414586476AEA}'
+Global Const $FOLDERID_PublicLibraries = '{48DAF80B-E6CF-4F4E-B800-0E69D84EE384}'
+Global Const $FOLDERID_PublicMusic = '{3214FAB5-9757-4298-BB61-92A9DEAA44FF}'
+Global Const $FOLDERID_PublicPictures = '{B6EBFB86-6907-413C-9AF7-4FC2ABF07CC5}'
+Global Const $FOLDERID_PublicRingtones = '{E555AB60-153B-4D17-9F04-A5FE99FC15EC}'
+Global Const $FOLDERID_PublicVideos = '{2400183A-6185-49FB-A2D8-4A392A602BA3}'
+Global Const $FOLDERID_QuickLaunch = '{52A4F021-7B75-48A9-9F6B-4B87A210BC8F}'
+Global Const $FOLDERID_Recent = '{AE50C081-EBD2-438A-8655-8A092E34987A}'
+Global Const $FOLDERID_RecordedTVLibrary = '{1A6FDBA2-F42D-4358-A798-B74D745926C5}'
+Global Const $FOLDERID_RecycleBinFolder = '{B7534046-3ECB-4C18-BE4E-64CD4CB7D6AC}'
+Global Const $FOLDERID_ResourceDir = '{8AD10C31-2ADB-4296-A8F7-E4701232C972}'
+Global Const $FOLDERID_Ringtones = '{C870044B-F49E-4126-A9C3-B52A1FF411E8}'
+Global Const $FOLDERID_RoamingAppData = '{3EB685DB-65F9-4CF6-A03A-E3EF65729F3D}'
+Global Const $FOLDERID_SampleMusic = '{B250C668-F57D-4EE1-A63C-290EE7D1AA1F}'
+Global Const $FOLDERID_SamplePictures = '{C4900540-2379-4C75-844B-64E6FAF8716B}'
+Global Const $FOLDERID_SamplePlaylists = '{15CA69B3-30EE-49C1-ACE1-6B5EC372AFB5}'
+Global Const $FOLDERID_SampleVideos = '{859EAD94-2E85-48AD-A71A-0969CB56A6CD}'
+Global Const $FOLDERID_SavedGames = '{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}'
+Global Const $FOLDERID_SavedSearches = '{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}'
+Global Const $FOLDERID_SEARCH_CSC = '{EE32E446-31CA-4ABA-814F-A5EBD2FD6D5E}'
+Global Const $FOLDERID_SEARCH_MAPI = '{98EC0E18-2098-4D44-8644-66979315A281}'
+Global Const $FOLDERID_SearchHome = '{190337D1-B8CA-4121-A639-6D472D16972A}'
+Global Const $FOLDERID_SendTo = '{8983036C-27C0-404B-8F08-102D10DCFD74}'
+Global Const $FOLDERID_SidebarDefaultParts = '{7B396E54-9EC5-4300-BE0A-2482EBAE1A26}'
+Global Const $FOLDERID_SidebarParts = '{A75D362E-50FC-4FB7-AC2C-A8BEAA314493}'
+Global Const $FOLDERID_StartMenu = '{625B53C3-AB48-4EC1-BA1F-A1EF4146FC19}'
+Global Const $FOLDERID_Startup = '{B97D20BB-F46A-4C97-BA10-5E3608430854}'
+Global Const $FOLDERID_SyncManagerFolder = '{43668BF8-C14E-49B2-97C9-747784D784B7}'
+Global Const $FOLDERID_SyncResultsFolder = '{289A9A43-BE44-4057-A41B-587A76D7E7F9}'
+Global Const $FOLDERID_SyncSetupFolder = '{0F214138-B1D3-4A90-BBA9-27CBC0C5389A}'
+Global Const $FOLDERID_System = '{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}'
+Global Const $FOLDERID_SystemX86 = '{D65231B0-B2F1-4857-A4CE-A8E7C6EA7D27}'
+Global Const $FOLDERID_Templates = '{A63293E8-664E-48DB-A079-DF759E0509F7}'
+Global Const $FOLDERID_UserPinned = '{9E3995AB-1F9C-4F13-B827-48B24B6C7174}'
+Global Const $FOLDERID_UserProfiles = '{0762D272-C50A-4BB0-A382-697DCD729B80}'
+Global Const $FOLDERID_UserProgramFiles = '{5CD7AEE2-2219-4A67-B85D-6C9CE15660CB}'
+Global Const $FOLDERID_UserProgramFilesCommon = '{BCBD3057-CA5C-4622-B42D-BC56DB0AE516}'
+Global Const $FOLDERID_UsersFiles = '{F3CE0F7C-4901-4ACC-8648-D5D44B04EF8F}'
+Global Const $FOLDERID_UsersLibraries = '{A302545D-DEFF-464B-ABE8-61C8648D939B}'
+Global Const $FOLDERID_Videos = '{18989B1D-99B5-455B-841C-AB7C74E4DDFC}'
+Global Const $FOLDERID_VideosLibrary = '{491E922F-5643-4AF4-A7EB-4E7A138D8174}'
+Global Const $FOLDERID_Windows = '{F38BF404-1D43-42F2-9305-67DE0B28FC23}'
+
+Global Const $KF_FLAG_ALIAS_ONLY = 0x80000000
+Global Const $KF_FLAG_CREATE = 0x00008000
+Global Const $KF_FLAG_DONT_VERIFY = 0x00004000
+Global Const $KF_FLAG_DONT_UNEXPAND = 0x00002000
+Global Const $KF_FLAG_NO_ALIAS = 0x00001000
+Global Const $KF_FLAG_INIT = 0x00000800
+Global Const $KF_FLAG_DEFAULT_PATH = 0x00000400
+Global Const $KF_FLAG_NO_APPCONTAINER_REDIRECTION = 0x00010000
+Global Const $KF_FLAG_NOT_PARENT_RELATIVE = 0x00000200
+Global Const $KF_FLAG_SIMPLE_IDLIST = 0x00000100
+; ===============================================================================================================================

+ 391 - 0
include/APISysConstants.au3

@@ -0,0 +1,391 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: WinAPISys Constants UDF Library for AutoIt3
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants that can be used with UDF library
+; Author(s) .....: Yashied, Jpm
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+
+; _WinAPI_ActivateKeyboardLayout(), _WinAPI_LoadKeyboardLayout()
+Global Const $KLF_ACTIVATE = 0x00000001
+Global Const $KLF_NOTELLSHELL = 0x00000080
+Global Const $KLF_REORDER = 0x00000008
+Global Const $KLF_REPLACELANG = 0x00000010
+Global Const $KLF_RESET = 0x40000000
+Global Const $KLF_SETFORPROCESS = 0x00000100
+Global Const $KLF_SHIFTLOCK = 0x00010000
+Global Const $KLF_SUBSTITUTE_OK = 0x00000002
+
+Global Const $HKL_NEXT = 1
+Global Const $HKL_PREV = 0
+
+; _WinAPI_AnimateWindow()
+Global Const $AW_ACTIVATE = 0x00020000
+Global Const $AW_BLEND = 0x00080000
+Global Const $AW_CENTER = 0x00000010
+Global Const $AW_HIDE = 0x00010000
+Global Const $AW_HOR_NEGATIVE = 0x00000002
+Global Const $AW_HOR_POSITIVE = 0x00000001
+Global Const $AW_SLIDE = 0x00040000
+Global Const $AW_VER_NEGATIVE = 0x00000008
+Global Const $AW_VER_POSITIVE = 0x00000004
+
+; _WinAPI_BroadcastSystemMessage()
+Global Const $BSF_ALLOWSFW = 0x0080
+Global Const $BSF_FLUSHDISK = 0x0004
+Global Const $BSF_FORCEIFHUNG = 0x0020
+Global Const $BSF_IGNORECURRENTTASK = 0x0002
+Global Const $BSF_NOHANG = 0x0008
+Global Const $BSF_NOTIMEOUTIFNOTHUNG = 0x0040
+Global Const $BSF_POSTMESSAGE = 0x0010
+Global Const $BSF_QUERY = 0x0001
+Global Const $BSF_SENDNOTIFYMESSAGE = 0x0100
+
+Global Const $BSM_ALLCOMPONENTS = 0x00
+Global Const $BSM_ALLDESKTOPS = 0x08
+Global Const $BSM_APPLICATIONS = 0x10
+Global Const $BSM_INSTALLABLEDRIVERS = 0x04
+Global Const $BSM_NETDRIVER = 0x02
+Global Const $BSM_VXDS = 0x01
+
+; _WinAPI_CascadeWindows(), _WinAPI_TileWindows()
+Global Const $MDITILE_HORIZONTAL = 0x01
+Global Const $MDITILE_SKIPDISABLED = 0x02
+Global Const $MDITILE_VERTICAL = 0x00
+Global Const $MDITILE_ZORDER = 0x04
+
+; _WinAPI_ChangeWindowMessageFilterEx()
+Global Const $MSGFLT_ALLOW = 1
+Global Const $MSGFLT_DISALLOW = 2
+Global Const $MSGFLT_RESET = 0
+
+Global Const $MSGFLTINFO_ALLOWED_HIGHER = 3
+Global Const $MSGFLTINFO_ALREADYALLOWED_FORWND = 1
+Global Const $MSGFLTINFO_ALREADYDISALLOWED_FORWND = 2
+Global Const $MSGFLTINFO_NONE = 0
+
+; _WinAPI_ChildWindowFromPointEx()
+Global Const $CWP_ALL = 0x00
+Global Const $CWP_SKIPINVISIBLE = 0x01
+Global Const $CWP_SKIPDISABLED = 0x02
+Global Const $CWP_SKIPTRANSPARENT = 0x04
+
+; _WinAPI_CompressBuffer(), _WinAPI_DecompressBuffer(), _WinAPI_GetCompression(), _WinAPI_SetCompression()
+Global Const $COMPRESSION_FORMAT_NONE = 0x0000
+Global Const $COMPRESSION_FORMAT_DEFAULT = 0x0001
+Global Const $COMPRESSION_FORMAT_LZNT1 = 0x0002
+Global Const $COMPRESSION_FORMAT_XPRESS = 0x0003
+Global Const $COMPRESSION_FORMAT_XPRESS_HUFF = 0x0004
+
+Global Const $COMPRESSION_ENGINE_STANDARD = 0x0000
+Global Const $COMPRESSION_ENGINE_MAXIMUM = 0x0100
+Global Const $COMPRESSION_ENGINE_HIBER = 0x0200
+
+; _WinAPI_CreateWindowStation(), _WinAPI_OpenWindowStation()
+Global Const $WINSTA_ACCESSCLIPBOARD = 0x0004
+Global Const $WINSTA_ACCESSGLOBALATOMS = 0x0020
+Global Const $WINSTA_CREATEDESKTOP = 0x0008
+Global Const $WINSTA_ENUMDESKTOPS = 0x0001
+Global Const $WINSTA_ENUMERATE = 0x0100
+Global Const $WINSTA_EXITWINDOWS = 0x0040
+Global Const $WINSTA_READATTRIBUTES = 0x0002
+Global Const $WINSTA_READSCREEN = 0x0200
+Global Const $WINSTA_WRITEATTRIBUTES = 0x0010
+Global Const $WINSTA_ALL_ACCESS = BitOR($WINSTA_ACCESSCLIPBOARD, $WINSTA_ACCESSGLOBALATOMS, $WINSTA_CREATEDESKTOP, $WINSTA_ENUMDESKTOPS, $WINSTA_ENUMERATE, $WINSTA_EXITWINDOWS, $WINSTA_READATTRIBUTES, $WINSTA_READSCREEN, $WINSTA_WRITEATTRIBUTES)
+
+Global Const $CWF_CREATE_ONLY = 0x01
+
+; _WinAPI_GetClassLongEx(), _WinAPI_SetClassLongEx()
+Global Const $GCL_CBCLSEXTRA = -20
+Global Const $GCL_CBWNDEXTRA = -18
+Global Const $GCL_HBRBACKGROUND = -10
+Global Const $GCL_HCURSOR = -12
+Global Const $GCL_HICON = -14
+Global Const $GCL_HICONSM = -34
+Global Const $GCL_HMODULE = -16
+Global Const $GCL_MENUNAME = -8
+Global Const $GCL_STYLE = -26
+Global Const $GCL_WNDPROC = -24
+
+; _WinAPI_GetCurrentHwProfile()
+Global Const $DOCKINFO_DOCKED = 0x02
+Global Const $DOCKINFO_UNDOCKED = 0x01
+Global Const $DOCKINFO_USER_SUPPLIED = 0x04
+Global Const $DOCKINFO_USER_DOCKED = 0x05
+Global Const $DOCKINFO_USER_UNDOCKED = 0x06
+
+; _WinAPI_GetGUIThreadInfo()
+Global Const $GUI_CARETBLINKING = 0x0001
+Global Const $GUI_INMENUMODE = 0x0004
+Global Const $GUI_INMOVESIZE = 0x0002
+Global Const $GUI_POPUPMENUMODE = 0x0010
+Global Const $GUI_SYSTEMMENUMODE = 0x0008
+
+; _WinAPI_GetHandleInformation(), _WinAPI_SetHandleInformation()
+Global Const $HANDLE_FLAG_INHERIT = 0x00000001
+Global Const $HANDLE_FLAG_PROTECT_FROM_CLOSE = 0x00000002
+
+; _WinAPI_GetModuleHandleEx()
+Global Const $GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = 0x0004
+Global Const $GET_MODULE_HANDLE_EX_FLAG_PIN = 0x0001
+Global Const $GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 0x0002
+Global Const $GET_MODULE_HANDLE_EX_FLAG_DEFAULT = 0x0000
+
+; _WinAPI_GetSystemInfo()
+Global Const $PROCESSOR_ARCHITECTURE_AMD64 = 9
+Global Const $PROCESSOR_ARCHITECTURE_IA64 = 6
+Global Const $PROCESSOR_ARCHITECTURE_INTEL = 0
+Global Const $PROCESSOR_ARCHITECTURE_UNKNOWN = 0xFFFF
+
+Global Const $PROCESSOR_INTEL_386 = 386
+Global Const $PROCESSOR_INTEL_486 = 486
+Global Const $PROCESSOR_INTEL_PENTIUM = 586
+Global Const $PROCESSOR_INTEL_IA64 = 2200
+Global Const $PROCESSOR_AMD_X8664 = 8664
+
+; _WinAPI_GetUserObjectInformation(), _WinAPI_SetUserObjectInformation()
+Global Const $UOI_FLAGS = 1
+Global Const $UOI_HEAPSIZE = 5
+Global Const $UOI_IO = 6
+Global Const $UOI_NAME = 2
+Global Const $UOI_TYPE = 3
+Global Const $UOI_USER_SID = 4
+
+Global Const $DF_ALLOWOTHERACCOUNTHOOK = 0x01
+Global Const $WSF_VISIBLE = 0x01
+
+; _WinAPI_GetVersionEx()
+Global Const $VER_SUITE_BACKOFFICE = 0x00000004
+Global Const $VER_SUITE_BLADE = 0x00000400
+Global Const $VER_SUITE_COMPUTE_SERVER = 0x00004000
+Global Const $VER_SUITE_DATACENTER = 0x00000080
+Global Const $VER_SUITE_ENTERPRISE = 0x00000002
+Global Const $VER_SUITE_EMBEDDEDNT = 0x00000040
+Global Const $VER_SUITE_PERSONAL = 0x00000200
+Global Const $VER_SUITE_SINGLEUSERTS = 0x00000100
+Global Const $VER_SUITE_SMALLBUSINESS = 0x00000001
+Global Const $VER_SUITE_SMALLBUSINESS_RESTRICTED = 0x00000020
+Global Const $VER_SUITE_STORAGE_SERVER = 0x00002000
+Global Const $VER_SUITE_TERMINAL = 0x00000010
+Global Const $VER_SUITE_WH_SERVER = 0x00008000
+
+Global Const $VER_NT_DOMAIN_CONTROLLER = 0x0000002
+Global Const $VER_NT_SERVER = 0x0000003
+Global Const $VER_NT_WORKSTATION = 0x0000001
+
+; _WinAPI_GetWindowDisplayAffinity(), _WinAPI_SetWindowDisplayAffinity()
+Global Const $WDA_MONITOR = 0x01
+Global Const $WDA_NONE = 0x00
+
+; _WinAPI_IsProcessorFeaturePresent()
+Global Const $PF_3DNOW_INSTRUCTIONS_AVAILABLE = 7
+Global Const $PF_CHANNELS_ENABLED = 16
+Global Const $PF_COMPARE_EXCHANGE_DOUBLE = 2
+Global Const $PF_COMPARE_EXCHANGE128 = 14
+Global Const $PF_COMPARE64_EXCHANGE128 = 15
+Global Const $PF_FLOATING_POINT_EMULATED = 1
+Global Const $PF_FLOATING_POINT_PRECISION_ERRATA = 0
+Global Const $PF_MMX_INSTRUCTIONS_AVAILABLE = 3
+Global Const $PF_NX_ENABLED = 12
+Global Const $PF_PAE_ENABLED = 9
+Global Const $PF_RDTSC_INSTRUCTION_AVAILABLE = 8
+Global Const $PF_SSE3_INSTRUCTIONS_AVAILABLE = 13
+Global Const $PF_XMMI_INSTRUCTIONS_AVAILABLE = 6
+Global Const $PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10
+Global Const $PF_XSAVE_ENABLED = 17
+
+; _WinAPI_Keybd_Event()
+Global Const $KEYEVENTF_EXTENDEDKEY = 0x01
+Global Const $KEYEVENTF_KEYUP = 0x02
+
+; _WinAPI_LoadIconMetric()
+Global Const $LIM_SMALL = 0
+Global Const $LIM_LARGE = 1
+
+; _WinAPI_MapVirtualKey()
+Global Const $MAPVK_VK_TO_CHAR = 2
+Global Const $MAPVK_VK_TO_VSC = 0
+Global Const $MAPVK_VK_TO_VSC_EX = 4
+Global Const $MAPVK_VSC_TO_VK = 1
+Global Const $MAPVK_VSC_TO_VK_EX = 3
+
+; _WinAPI_RegisterHotKey()
+Global Const $MOD_ALT = 0x0001
+Global Const $MOD_CONTROL = 0x0002
+Global Const $MOD_NOREPEAT = 0x4000
+Global Const $MOD_SHIFT = 0x0004
+Global Const $MOD_WIN = 0x0008
+
+; _WinAPI_RegisterPowerSettingNotification()
+Global Const $GUID_ACDC_POWER_SOURCE = '{5D3E9A59-E9D5-4B00-A6BD-FF34FF516548}'
+Global Const $GUID_BATTERY_PERCENTAGE_REMAINING = '{A7AD8041-B45A-4CAE-87A3-EECBB468A9E1}'
+Global Const $GUID_IDLE_BACKGROUND_TASK = '{515C31D8-F734-163D-A0FD-11A08C91E8F1}'
+Global Const $GUID_MONITOR_POWER_ON = '{02731015-4510-4526-99E6-E5A17EBD1AEA}'
+Global Const $GUID_POWERSCHEME_PERSONALITY = '{245D8541-3943-4422-B025-13A784F679B7}'
+Global Const $GUID_SYSTEM_AWAYMODE = '{98A7F580-01F7-48AA-9C0F-44352C29E5C0}'
+
+Global Const $GUID_MIN_POWER_SAVINGS = '{8C5E7FDA-E8BF-4A96-9A85-A6E23A8C635C}'
+Global Const $GUID_MAX_POWER_SAVINGS = '{A1841308-3541-4FAB-BC81-F71556F20B4A}'
+Global Const $GUID_TYPICAL_POWER_SAVINGS = '{381B4222-F694-41F0-9685-FF5BB260DF2E}'
+
+; _WinAPI_RegisterShellHookWindow()
+Global Const $HSHELL_WINDOWCREATED = 1
+Global Const $HSHELL_WINDOWDESTROYED = 2
+Global Const $HSHELL_ACTIVATESHELLWINDOW = 3
+Global Const $HSHELL_WINDOWACTIVATED = 4
+Global Const $HSHELL_GETMINRECT = 5
+Global Const $HSHELL_REDRAW = 6
+Global Const $HSHELL_TASKMAN = 7
+Global Const $HSHELL_LANGUAGE = 8
+Global Const $HSHELL_SYSMENU = 9
+Global Const $HSHELL_ENDTASK = 10
+Global Const $HSHELL_ACCESSIBILITYSTATE = 11
+Global Const $HSHELL_APPCOMMAND = 12
+Global Const $HSHELL_WINDOWREPLACED = 13
+Global Const $HSHELL_WINDOWREPLACING = 14
+Global Const $HSHELL_RUDEAPPACTIVATED = 32772
+Global Const $HSHELL_FLASH = 32774
+
+; _WinAPI_SendMessageTimeout()
+Global Const $HWND_BROADCAST = 0xFFFF
+
+Global Const $SMTO_BLOCK = 0x0001
+Global Const $SMTO_NORMAL = 0x0000
+Global Const $SMTO_ABORTIFHUNG = 0x0002
+Global Const $SMTO_NOTIMEOUTIFNOTHUNG = 0x0008
+Global Const $SMTO_ERRORONEXIT = 0x0020
+
+; _WinAPI_SetKeyboardLayout()
+Global Const $INPUTLANGCHANGE_BACKWARD = 0x0004
+Global Const $INPUTLANGCHANGE_FORWARD = 0x0002
+Global Const $INPUTLANGCHANGE_SYSCHARSET = 0x0001
+
+; _WinAPI_SetWinEventHook()
+Global Const $EVENT_MIN = 0x00000001
+Global Const $EVENT_SYSTEM_SOUND = 0x00000001
+Global Const $EVENT_SYSTEM_ALERT = 0x00000002
+Global Const $EVENT_SYSTEM_FOREGROUND = 0x00000003
+Global Const $EVENT_SYSTEM_MENUSTART = 0x00000004
+Global Const $EVENT_SYSTEM_MENUEND = 0x00000005
+Global Const $EVENT_SYSTEM_MENUPOPUPSTART = 0x00000006
+Global Const $EVENT_SYSTEM_MENUPOPUPEND = 0x00000007
+Global Const $EVENT_SYSTEM_CAPTURESTART = 0x00000008
+Global Const $EVENT_SYSTEM_CAPTUREEND = 0x00000009
+Global Const $EVENT_SYSTEM_MOVESIZESTART = 0x0000000A
+Global Const $EVENT_SYSTEM_MOVESIZEEND = 0x0000000B
+Global Const $EVENT_SYSTEM_CONTEXTHELPSTART = 0x0000000C
+Global Const $EVENT_SYSTEM_CONTEXTHELPEND = 0x0000000D
+Global Const $EVENT_SYSTEM_DRAGDROPSTART = 0x0000000E
+Global Const $EVENT_SYSTEM_DRAGDROPEND = 0x0000000F
+Global Const $EVENT_SYSTEM_DIALOGSTART = 0x00000010
+Global Const $EVENT_SYSTEM_DIALOGEND = 0x00000011
+Global Const $EVENT_SYSTEM_SCROLLINGSTART = 0x00000012
+Global Const $EVENT_SYSTEM_SCROLLINGEND = 0x00000013
+Global Const $EVENT_SYSTEM_SWITCHSTART = 0x00000014
+Global Const $EVENT_SYSTEM_SWITCHEND = 0x00000015
+Global Const $EVENT_SYSTEM_MINIMIZESTART = 0x00000016
+Global Const $EVENT_SYSTEM_MINIMIZEEND = 0x00000017
+Global Const $EVENT_SYSTEM_DESKTOPSWITCH = 0x00000020
+Global Const $EVENT_OBJECT_CREATE = 0x00008000
+Global Const $EVENT_OBJECT_DESTROY = 0x00008001
+Global Const $EVENT_OBJECT_SHOW = 0x00008002
+Global Const $EVENT_OBJECT_HIDE = 0x00008003
+Global Const $EVENT_OBJECT_REORDER = 0x00008004
+Global Const $EVENT_OBJECT_FOCUS = 0x00008005
+Global Const $EVENT_OBJECT_SELECTION = 0x00008006
+Global Const $EVENT_OBJECT_SELECTIONADD = 0x00008007
+Global Const $EVENT_OBJECT_SELECTIONREMOVE = 0x00008008
+Global Const $EVENT_OBJECT_SELECTIONWITHIN = 0x00008009
+Global Const $EVENT_OBJECT_STATECHANGE = 0x0000800A
+Global Const $EVENT_OBJECT_LOCATIONCHANGE = 0x0000800B
+Global Const $EVENT_OBJECT_NAMECHANGE = 0x0000800C
+Global Const $EVENT_OBJECT_DESCRIPTIONCHANGE = 0x0000800D
+Global Const $EVENT_OBJECT_VALUECHANGE = 0x0000800E
+Global Const $EVENT_OBJECT_PARENTCHANGE = 0x0000800F
+Global Const $EVENT_OBJECT_HELPCHANGE = 0x00008010
+Global Const $EVENT_OBJECT_DEFACTIONCHANGE = 0x00008011
+Global Const $EVENT_OBJECT_ACCELERATORCHANGE = 0x00008012
+Global Const $EVENT_OBJECT_INVOKED = 0x00008013
+Global Const $EVENT_OBJECT_TEXTSELECTIONCHANGED = 0x00008014
+Global Const $EVENT_OBJECT_CONTENTSCROLLED = 0x00008015
+Global Const $EVENT_MAX = 0x7FFFFFFF
+
+Global Const $WINEVENT_INCONTEXT = 0x04
+Global Const $WINEVENT_OUTOFCONTEXT = 0x00
+Global Const $WINEVENT_SKIPOWNPROCESS = 0x02
+Global Const $WINEVENT_SKIPOWNTHREAD = 0x01
+
+; _WinAPI_TrackMouseEvent()
+Global Const $TME_CANCEL = 0x80000000
+Global Const $TME_HOVER = 0x00000001
+Global Const $TME_LEAVE = 0x00000002
+Global Const $TME_NONCLIENT = 0x00000010
+Global Const $TME_QUERY = 0x40000000
+
+; _WinAPI_*Desktop*()
+Global Const $DESKTOP_CREATEMENU = 0x0004
+Global Const $DESKTOP_CREATEWINDOW = 0x0002
+Global Const $DESKTOP_ENUMERATE = 0x0040
+Global Const $DESKTOP_HOOKCONTROL = 0x0008
+Global Const $DESKTOP_JOURNALPLAYBACK = 0x0020
+Global Const $DESKTOP_JOURNALRECORD = 0x0010
+Global Const $DESKTOP_READOBJECTS = 0x0001
+Global Const $DESKTOP_SWITCHDESKTOP = 0x0100
+Global Const $DESKTOP_WRITEOBJECTS = 0x0080
+Global Const $DESKTOP_ALL_ACCESS = BitOR($DESKTOP_CREATEMENU, $DESKTOP_CREATEWINDOW, $DESKTOP_ENUMERATE, $DESKTOP_HOOKCONTROL, $DESKTOP_JOURNALPLAYBACK, $DESKTOP_JOURNALRECORD, $DESKTOP_READOBJECTS, $DESKTOP_SWITCHDESKTOP, $DESKTOP_WRITEOBJECTS)
+
+; _WinAPI_*RowInput*()
+Global Const $RIDEV_APPKEYS = 0x00000400
+Global Const $RIDEV_CAPTUREMOUSE = 0x00000200
+Global Const $RIDEV_DEVNOTIFY = 0x00002000
+Global Const $RIDEV_EXCLUDE = 0x00000010
+Global Const $RIDEV_EXINPUTSINK = 0x00001000
+Global Const $RIDEV_INPUTSINK = 0x00000100
+Global Const $RIDEV_NOHOTKEYS = 0x00000200
+Global Const $RIDEV_NOLEGACY = 0x00000030
+Global Const $RIDEV_PAGEONLY = 0x00000020
+Global Const $RIDEV_REMOVE = 0x00000001
+
+Global Const $RID_HEADER = 0x10000005
+Global Const $RID_INPUT = 0x10000003
+
+Global Const $RIM_TYPEHID = 2
+Global Const $RIM_TYPEKEYBOARD = 1
+Global Const $RIM_TYPEMOUSE = 0
+
+Global Const $RIDI_DEVICENAME = 0x20000007
+Global Const $RIDI_DEVICEINFO = 0x2000000B
+Global Const $RIDI_PREPARSEDDATA = 0x20000005
+
+Global Const $MOUSE_ATTRIBUTES_CHANGED = 0x04
+Global Const $MOUSE_MOVE_ABSOLUTE = 0x01
+Global Const $MOUSE_MOVE_RELATIVE = 0x00
+Global Const $MOUSE_VIRTUAL_DESKTOP = 0x02
+
+Global Const $RI_MOUSE_LEFT_BUTTON_DOWN = 0x0001
+Global Const $RI_MOUSE_LEFT_BUTTON_UP = 0x0002
+Global Const $RI_MOUSE_MIDDLE_BUTTON_DOWN = 0x0010
+Global Const $RI_MOUSE_MIDDLE_BUTTON_UP = 0x0020
+Global Const $RI_MOUSE_RIGHT_BUTTON_DOWN = 0x0004
+Global Const $RI_MOUSE_RIGHT_BUTTON_UP = 0x0008
+Global Const $RI_MOUSE_BUTTON_1_DOWN = $RI_MOUSE_LEFT_BUTTON_DOWN
+Global Const $RI_MOUSE_BUTTON_1_UP = $RI_MOUSE_LEFT_BUTTON_UP
+Global Const $RI_MOUSE_BUTTON_2_DOWN = $RI_MOUSE_RIGHT_BUTTON_DOWN
+Global Const $RI_MOUSE_BUTTON_2_UP = $RI_MOUSE_RIGHT_BUTTON_UP
+Global Const $RI_MOUSE_BUTTON_3_DOWN = $RI_MOUSE_MIDDLE_BUTTON_DOWN
+Global Const $RI_MOUSE_BUTTON_3_UP = $RI_MOUSE_MIDDLE_BUTTON_UP
+Global Const $RI_MOUSE_BUTTON_4_DOWN = 0x0040
+Global Const $RI_MOUSE_BUTTON_4_UP = 0x0080
+Global Const $RI_MOUSE_BUTTON_5_DOWN = 0x0100
+Global Const $RI_MOUSE_BUTTON_5_UP = 0x0200
+Global Const $RI_MOUSE_WHEEL = 0x0400
+
+Global Const $RI_KEY_BREAK = 1
+Global Const $RI_KEY_E0 = 2
+Global Const $RI_KEY_E1 = 4
+Global Const $RI_KEY_MAKE = 0
+; ===============================================================================================================================

+ 330 - 0
include/APIThemeConstants.au3

@@ -0,0 +1,330 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: WinAPITheme Constants UDF Library for AutoIt3
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants that can be used with UDF library
+; Author(s) .....: Yashied, Jpm
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+
+; _WinAPI_BeginBufferedPaint()
+Global Const $BPBF_COMPATIBLEBITMAP = 0
+Global Const $BPBF_DIB = 1
+Global Const $BPBF_TOPDOWNDIB = 2
+Global Const $BPBF_TOPDOWNMONODIB = 3
+
+Global Const $BPPF_ERASE = 0x01
+Global Const $BPPF_NOCLIP = 0x02
+Global Const $BPPF_NONCLIENT = 0x04
+
+; _WinAPI_DrawThemeTextEx()
+Global Const $DTT_TEXTCOLOR = 0x00000001
+Global Const $DTT_BORDERCOLOR = 0x00000002
+Global Const $DTT_SHADOWCOLOR = 0x00000004
+Global Const $DTT_SHADOWTYPE = 0x00000008
+Global Const $DTT_SHADOWOFFSET = 0x00000010
+Global Const $DTT_BORDERSIZE = 0x00000020
+Global Const $DTT_FONTPROP = 0x00000040
+Global Const $DTT_COLORPROP = 0x00000080
+Global Const $DTT_STATEID = 0x00000100
+Global Const $DTT_CALCRECT = 0x00000200
+Global Const $DTT_APPLYOVERLAY = 0x00000400
+Global Const $DTT_GLOWSIZE = 0x00000800
+Global Const $DTT_CALLBACK = 0x00001000
+Global Const $DTT_COMPOSITED = 0x00002000
+Global Const $DTT_VALIDBITS = BitOR($DTT_TEXTCOLOR, $DTT_BORDERCOLOR, $DTT_SHADOWCOLOR, $DTT_SHADOWTYPE, $DTT_SHADOWOFFSET, $DTT_BORDERSIZE, $DTT_FONTPROP, $DTT_COLORPROP, $DTT_STATEID, $DTT_CALCRECT, $DTT_APPLYOVERLAY, $DTT_GLOWSIZE, $DTT_COMPOSITED)
+
+Global Const $TST_NONE = 0
+Global Const $TST_SINGLE = 1
+Global Const $TST_CONTINUOUS = 2
+
+; _WinAPI_GetThemeAppProperties(), _WinAPI_SetThemeAppProperties()
+Global Const $STAP_ALLOW_NONCLIENT = 0x01
+Global Const $STAP_ALLOW_CONTROLS = 0x02
+Global Const $STAP_ALLOW_WEBCONTENT = 0x04
+
+; _WinAPI_GetThemeBitmap()
+Global Const $GBF_DIRECT = 0x01
+Global Const $GBF_COPY = 0x02
+Global Const $GBF_VALIDBITS = BitOR($GBF_DIRECT, $GBF_COPY)
+
+; _WinAPI_GetThemeDocumentationProperty()
+Global Const $SZ_THDOCPROP_AUTHOR = 'Author'
+Global Const $SZ_THDOCPROP_CANONICALNAME = 'ThemeName'
+Global Const $SZ_THDOCPROP_DISPLAYNAME = 'DisplayName'
+Global Const $SZ_THDOCPROP_TOOLTIP = 'ToolTip'
+
+; _WinAPI_GetThemePartSize()
+Global Const $TS_MIN = 0
+Global Const $TS_TRUE = 1
+Global Const $TS_DRAW = 2
+
+; _WinAPI_GetThemePropertyOrigin()
+Global Const $PO_CLASS = 2
+Global Const $PO_GLOBAL = 3
+Global Const $PO_NOTFOUND = 4
+Global Const $PO_PART = 1
+Global Const $PO_STATE = 0
+
+; _WinAPI_*Theme*()
+Global Const $TMT_BOOL = 203
+Global Const $TMT_COLOR = 204
+Global Const $TMT_DIBDATA = 2
+Global Const $TMT_DISKSTREAM = 213
+Global Const $TMT_ENUM = 200
+Global Const $TMT_FILENAME = 206
+Global Const $TMT_FONT = 210
+Global Const $TMT_GLYPHDIBDATA = 8
+Global Const $TMT_HBITMAP = 212
+Global Const $TMT_INT = 202
+Global Const $TMT_INTLIST = 211
+Global Const $TMT_MARGINS = 205
+Global Const $TMT_POSITION = 208
+Global Const $TMT_RECT = 209
+Global Const $TMT_SIZE = 207
+Global Const $TMT_STRING = 201
+
+; *Bool
+Global Const $TMT_ALWAYSSHOWSIZINGBAR = 2208
+Global Const $TMT_AUTOSIZE = 2202
+Global Const $TMT_BGFILL = 2205
+Global Const $TMT_BORDERONLY = 2203
+Global Const $TMT_COMPOSITED = 2204
+Global Const $TMT_COMPOSITEDOPAQUE = 2219
+Global Const $TMT_DRAWBORDERS = 2214
+Global Const $TMT_FLATMENUS = 1001
+Global Const $TMT_GLYPHONLY = 2207
+Global Const $TMT_GLYPHTRANSPARENT = 2206
+Global Const $TMT_INTEGRALSIZING = 2211
+Global Const $TMT_LOCALIZEDMIRRORIMAGE = 2220
+Global Const $TMT_MIRRORIMAGE = 2209
+Global Const $TMT_NOETCHEDEFFECT = 2215
+Global Const $TMT_SOURCEGROW = 2212
+Global Const $TMT_SOURCESHRINK = 2213
+Global Const $TMT_TEXTAPPLYOVERLAY = 2216
+Global Const $TMT_TEXTGLOW = 2217
+Global Const $TMT_TEXTITALIC = 2218
+Global Const $TMT_TRANSPARENT = 2201
+Global Const $TMT_UNIFORMSIZING = 2210
+Global Const $TMT_USERPICTURE = 5001
+
+; *Color
+Global Const $TMT_ACCENTCOLORHINT = 3823
+Global Const $TMT_ACTIVEBORDER = 1611
+Global Const $TMT_ACTIVECAPTION = 1603
+Global Const $TMT_APPWORKSPACE = 1613
+Global Const $TMT_BACKGROUND = 1602
+Global Const $TMT_BLENDCOLOR = 5003
+Global Const $TMT_BODYTEXTCOLOR = 3827
+Global Const $TMT_BORDERCOLOR = 3801
+Global Const $TMT_BORDERCOLORHINT = 3822
+Global Const $TMT_BTNFACE = 1616
+Global Const $TMT_BTNHIGHLIGHT = 1621
+Global Const $TMT_BTNSHADOW = 1617
+Global Const $TMT_BTNTEXT = 1619
+Global Const $TMT_BUTTONALTERNATEFACE = 1626
+Global Const $TMT_CAPTIONTEXT = 1610
+Global Const $TMT_DKSHADOW3D = 1622
+Global Const $TMT_EDGEDKSHADOWCOLOR = 3807
+Global Const $TMT_EDGEFILLCOLOR = 3808
+Global Const $TMT_EDGEHIGHLIGHTCOLOR = 3805
+Global Const $TMT_EDGELIGHTCOLOR = 3804
+Global Const $TMT_EDGESHADOWCOLOR = 3806
+Global Const $TMT_FILLCOLOR = 3802
+Global Const $TMT_FILLCOLORHINT = 3821
+Global Const $TMT_FROMCOLOR1 = 2001
+Global Const $TMT_FROMCOLOR2 = 2002
+Global Const $TMT_FROMCOLOR3 = 2003
+Global Const $TMT_FROMCOLOR4 = 2004
+Global Const $TMT_FROMCOLOR5 = 2005
+Global Const $TMT_GLOWCOLOR = 3816
+Global Const $TMT_GLYPHTEXTCOLOR = 3819
+Global Const $TMT_GLYPHTRANSPARENTCOLOR = 3820
+Global Const $TMT_GRADIENTACTIVECAPTION = 1628
+Global Const $TMT_GRADIENTCOLOR1 = 3810
+Global Const $TMT_GRADIENTCOLOR2 = 3811
+Global Const $TMT_GRADIENTCOLOR3 = 3812
+Global Const $TMT_GRADIENTCOLOR4 = 3813
+Global Const $TMT_GRADIENTCOLOR5 = 3814
+Global Const $TMT_GRADIENTINACTIVECAPTION = 1629
+Global Const $TMT_GRAYTEXT = 1618
+Global Const $TMT_HEADING1TEXTCOLOR = 3825
+Global Const $TMT_HEADING2TEXTCOLOR = 3826
+Global Const $TMT_HIGHLIGHT = 1614
+Global Const $TMT_HIGHLIGHTTEXT = 1615
+Global Const $TMT_HOTTRACKING = 1627
+Global Const $TMT_INACTIVEBORDER = 1612
+Global Const $TMT_INACTIVECAPTION = 1604
+Global Const $TMT_INACTIVECAPTIONTEXT = 1620
+Global Const $TMT_INFOBK = 1625
+Global Const $TMT_INFOTEXT = 1624
+Global Const $TMT_LIGHT3D = 1623
+Global Const $TMT_MENU = 1605
+Global Const $TMT_MENUBAR = 1631
+Global Const $TMT_MENUHILIGHT = 1630
+Global Const $TMT_MENUTEXT = 1608
+Global Const $TMT_SCROLLBAR = 1601
+Global Const $TMT_SHADOWCOLOR = 3815
+Global Const $TMT_TEXTBORDERCOLOR = 3817
+Global Const $TMT_TEXTCOLOR = 3803
+Global Const $TMT_TEXTCOLORHINT = 3824
+Global Const $TMT_TEXTSHADOWCOLOR = 3818
+Global Const $TMT_TRANSPARENTCOLOR = 3809
+Global Const $TMT_WINDOW = 1606
+Global Const $TMT_WINDOWFRAME = 1607
+Global Const $TMT_WINDOWTEXT = 1609
+
+; *Stream
+Global Const $TMT_ATLASIMAGE = 8000
+
+; *Enum
+Global Const $TMT_BGTYPE = 4001
+Global Const $TMT_BORDERTYPE = 4002
+Global Const $TMT_CONTENTALIGNMENT = 4006
+Global Const $TMT_FILLTYPE = 4003
+Global Const $TMT_GLYPHTYPE = 4012
+Global Const $TMT_GLYPHFONTSIZINGTYPE = 4014
+Global Const $TMT_HALIGN = 4005
+Global Const $TMT_ICONEFFECT = 4009
+Global Const $TMT_IMAGELAYOUT = 4011
+Global Const $TMT_IMAGESELECTTYPE = 4013
+Global Const $TMT_OFFSETTYPE = 4008
+Global Const $TMT_SIZINGTYPE = 4004
+Global Const $TMT_TEXTSHADOWTYPE = 4010
+Global Const $TMT_TRUESIZESCALINGTYPE = 4015
+Global Const $TMT_VALIGN = 4007
+
+; *Filename
+Global Const $TMT_GLYPHIMAGEFILE = 3008
+Global Const $TMT_IMAGEFILE = 3001
+Global Const $TMT_IMAGEFILE1 = 3002
+Global Const $TMT_IMAGEFILE2 = 3003
+Global Const $TMT_IMAGEFILE3 = 3004
+Global Const $TMT_IMAGEFILE4 = 3005
+Global Const $TMT_IMAGEFILE5 = 3006
+Global Const $TMT_SCALEDBACKGROUND = 7001
+
+; *Font
+Global Const $TMT_BODYFONT = 809
+Global Const $TMT_CAPTIONFONT = 801
+Global Const $TMT_GLYPHFONT = 2601
+Global Const $TMT_HEADING1FONT = 807
+Global Const $TMT_HEADING2FONT = 808
+Global Const $TMT_ICONTITLEFONT = 806
+Global Const $TMT_MENUFONT = 803
+Global Const $TMT_MSGBOXFONT = 805
+Global Const $TMT_SMALLCAPTIONFONT = 802
+Global Const $TMT_STATUSFONT = 804
+
+; *Int
+Global Const $TMT_ALPHALEVEL = 2402
+Global Const $TMT_ALPHATHRESHOLD = 2415
+Global Const $TMT_ANIMATIONDELAY = 2428
+Global Const $TMT_ANIMATIONDURATION = 5006
+Global Const $TMT_BORDERSIZE = 2403
+Global Const $TMT_CHARSET = 403
+Global Const $TMT_COLORIZATIONCOLOR = 2431
+Global Const $TMT_COLORIZATIONOPACITY = 2432
+Global Const $TMT_FRAMESPERSECOND = 2426
+Global Const $TMT_FROMHUE1 = 1801
+Global Const $TMT_FROMHUE2 = 1802
+Global Const $TMT_FROMHUE3 = 1803
+Global Const $TMT_FROMHUE4 = 1804
+Global Const $TMT_FROMHUE5 = 1805
+Global Const $TMT_GLOWINTENSITY = 2429
+Global Const $TMT_GLYPHINDEX = 2418
+Global Const $TMT_GRADIENTRATIO1 = 2406
+Global Const $TMT_GRADIENTRATIO2 = 2407
+Global Const $TMT_GRADIENTRATIO3 = 2408
+Global Const $TMT_GRADIENTRATIO4 = 2409
+Global Const $TMT_GRADIENTRATIO5 = 2410
+Global Const $TMT_HEIGHT = 2417
+Global Const $TMT_IMAGECOUNT = 2401
+Global Const $TMT_MINCOLORDEPTH = 1301
+Global Const $TMT_MINDPI1 = 2420
+Global Const $TMT_MINDPI2 = 2421
+Global Const $TMT_MINDPI3 = 2422
+Global Const $TMT_MINDPI4 = 2423
+Global Const $TMT_MINDPI5 = 2424
+Global Const $TMT_OPACITY = 2430
+Global Const $TMT_PIXELSPERFRAME = 2427
+Global Const $TMT_PROGRESSCHUNKSIZE = 2411
+Global Const $TMT_PROGRESSSPACESIZE = 2412
+Global Const $TMT_ROUNDCORNERHEIGHT = 2405
+Global Const $TMT_ROUNDCORNERWIDTH = 2404
+Global Const $TMT_SATURATION = 2413
+Global Const $TMT_TEXTBORDERSIZE = 2414
+Global Const $TMT_TEXTGLOWSIZE = 2425
+Global Const $TMT_TOCOLOR1 = 2006
+Global Const $TMT_TOCOLOR2 = 2007
+Global Const $TMT_TOCOLOR3 = 2008
+Global Const $TMT_TOCOLOR4 = 2009
+Global Const $TMT_TOCOLOR5 = 2010
+Global Const $TMT_TOHUE1 = 1806
+Global Const $TMT_TOHUE2 = 1807
+Global Const $TMT_TOHUE3 = 1808
+Global Const $TMT_TOHUE4 = 1809
+Global Const $TMT_TOHUE5 = 1810
+Global Const $TMT_TRUESIZESTRETCHMARK = 2419
+Global Const $TMT_WIDTH = 2416
+
+; *IntList
+Global Const $TMT_TRANSITIONDURATIONS = 6000
+
+; *Margins
+Global Const $TMT_CAPTIONMARGINS = 3603
+Global Const $TMT_CONTENTMARGINS = 3602
+Global Const $TMT_SIZINGMARGINS = 3601
+
+; *Position
+Global Const $TMT_MINSIZE = 3403
+Global Const $TMT_MINSIZE1 = 3404
+Global Const $TMT_MINSIZE2 = 3405
+Global Const $TMT_MINSIZE3 = 3406
+Global Const $TMT_MINSIZE4 = 3407
+Global Const $TMT_MINSIZE5 = 3408
+Global Const $TMT_NORMALSIZE = 3409
+Global Const $TMT_OFFSET = 3401
+Global Const $TMT_TEXTSHADOWOFFSET = 3402
+
+; *Rect
+Global Const $TMT_ANIMATIONBUTTONRECT = 5005
+Global Const $TMT_ATLASRECT = 8002
+Global Const $TMT_CUSTOMSPLITRECT = 5004
+Global Const $TMT_DEFAULTPANESIZE = 5002
+
+; *Size
+Global Const $TMT_CAPTIONBARHEIGHT = 1205
+Global Const $TMT_CAPTIONBARWIDTH = 1204
+Global Const $TMT_MENUBARHEIGHT = 1209
+Global Const $TMT_MENUBARWIDTH = 1208
+Global Const $TMT_PADDEDBORDERWIDTH = 1210
+Global Const $TMT_SCROLLBARHEIGHT = 1203
+Global Const $TMT_SCROLLBARWIDTH = 1202
+Global Const $TMT_SIZINGBORDERWIDTH = 1201
+Global Const $TMT_SMCAPTIONBARHEIGHT = 1207
+Global Const $TMT_SMCAPTIONBARWIDTH = 1206
+
+; *String
+Global Const $TMT_ALIAS = 1404
+Global Const $TMT_ATLASINPUTIMAGE = 8001
+Global Const $TMT_AUTHOR = 604
+Global Const $TMT_CLASSICVALUE = 3202
+Global Const $TMT_COLORSCHEMES = 401
+Global Const $TMT_COMPANY = 603
+Global Const $TMT_COPYRIGHT = 605
+Global Const $TMT_CSSNAME = 1401
+Global Const $TMT_DESCRIPTION = 608
+Global Const $TMT_DISPLAYNAME = 601
+Global Const $TMT_LASTUPDATED = 1403
+Global Const $TMT_SIZES = 402
+Global Const $TMT_TEXT = 3201
+Global Const $TMT_TOOLTIP = 602
+Global Const $TMT_URL = 606
+Global Const $TMT_VERSION = 607
+Global Const $TMT_XMLNAME = 1402
+Global Const $TMT_NAME = 600
+; ===============================================================================================================================

+ 33 - 0
include/AVIConstants.au3

@@ -0,0 +1,33 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: AVI_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants for <a href="../appendix/GUIStyles.htm#Avi">GUI control AVI styles</a>.
+; Author(s) .....: Valik
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; Styles
+Global Const $ACS_CENTER = 1
+Global Const $ACS_TRANSPARENT = 2
+Global Const $ACS_AUTOPLAY = 4
+Global Const $ACS_TIMER = 8
+Global Const $ACS_NONTRANSPARENT = 16
+
+; Control default styles
+Global Const $GUI_SS_DEFAULT_AVI = $ACS_TRANSPARENT
+
+; Messages
+Global Const $__AVICONSTANT_WM_USER = 0x400
+Global Const $ACM_OPENA = $__AVICONSTANT_WM_USER + 100
+Global Const $ACM_PLAY = $__AVICONSTANT_WM_USER + 101
+Global Const $ACM_STOP = $__AVICONSTANT_WM_USER + 102
+Global Const $ACM_ISPLAYING = $__AVICONSTANT_WM_USER + 104
+Global Const $ACM_OPENW = $__AVICONSTANT_WM_USER + 103
+
+; Notifications
+Global Const $ACN_START = 0x00000001 ; Notifies the control's parent that the AVI has started playing
+Global Const $ACN_STOP = 0x00000002 ; Notifies the control's parent that the AVI has stopped playing
+; ===============================================================================================================================

ファイルの差分が大きいため隠しています
+ 2124 - 0
include/Array.au3


+ 784 - 0
include/ArrayDisplayInternals_En.au3

@@ -0,0 +1,784 @@
+#include-once
+
+#include "AutoItConstants.au3"
+#include "MsgBoxConstants.au3"
+#include "StringConstants.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Internal UDF Library for AutoIt3 _ArrayDisplay() and _DebugArray()
+; AutoIt Version : 3.3.14.5
+; Description ...: Internal functions for the Array.au3 and Debug.au3
+; Author(s) .....: Melba23, jpm
+; ===============================================================================================================================
+
+#Region Global Variables and Constants
+
+; #VARIABLES# ===================================================================================================================
+; for use with the sort call back functions
+Global Const $_ARRAYCONSTANT_SORTINFOSIZE = 11
+Global $__g_aArrayDisplay_SortInfo[$_ARRAYCONSTANT_SORTINFOSIZE]
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $ARRAYDISPLAY_COLALIGNLEFT = 0 ; (default) Column text alignment - left
+Global Const $ARRAYDISPLAY_TRANSPOSE = 1 ; Transposes the array (2D only)
+Global Const $ARRAYDISPLAY_COLALIGNRIGHT = 2 ; Column text alignment - right
+Global Const $ARRAYDISPLAY_COLALIGNCENTER = 4 ; Column text alignment - center
+Global Const $ARRAYDISPLAY_VERBOSE = 8 ; Verbose - display MsgBox on error and splash screens during processing of large arrays
+Global Const $ARRAYDISPLAY_NOROW = 64 ; No 'Row' column displayed
+
+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"
+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"
+; ===============================================================================================================================
+
+#EndRegion Global Variables and Constants
+
+#Region Functions list
+
+; #CURRENT# =====================================================================================================================
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; __ArrayDisplay_Share
+; __ArrayDisplay_RegisterSortCallBack
+; __ArrayDisplay_SortCallBack
+; __ArrayDisplay_SortItems
+; __ArrayDisplay_AddItem
+; __ArrayDisplay_AddSubItem
+; __ArrayDisplay_GetColumnCount
+; __ArrayDisplay_GetHeader
+; __ArrayDisplay_GetItem
+; __ArrayDisplay_GetItemCount
+; __ArrayDisplay_GetItemFormat
+; __ArrayDisplay_GetItemText
+; __ArrayDisplay_GetItemTextString
+; __ArrayDisplay_SetItemFormat
+; ===============================================================================================================================
+
+#EndRegion Functions list
+
+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)
+	Local $vTmp, $sMsgBoxTitle = (($bDebug) ? ("DebugArray") : ("ArrayDisplay"))
+
+	; Default values
+	If $sTitle = Default Then $sTitle = $sMsgBoxTitle
+	If $sArrayRange = Default Then $sArrayRange = ""
+	If $iFlags = Default Then $iFlags = 0
+	If $vUser_Separator = Default Then $vUser_Separator = ""
+	If $sHeader = Default Then $sHeader = ""
+	If $iMax_ColWidth = Default Then $iMax_ColWidth = 350
+	If $hUser_Function = Default Then $hUser_Function = 0
+
+	; Check for transpose, column align, verbosity and "Row" column visibility
+	Local $iTranspose = BitAND($iFlags, $ARRAYDISPLAY_TRANSPOSE)
+	Local $iColAlign = BitAND($iFlags, 6) ; 0 = Left (default); 2 = Right; 4 = Center
+	Local $iVerbose = BitAND($iFlags, $ARRAYDISPLAY_VERBOSE)
+	Local $iNoRow = BitAND($iFlags, $ARRAYDISPLAY_NOROW)
+
+	; Set lower button border
+	Local $iButtonBorder = (($bDebug) ? (40) : (20))
+
+	; Check valid array
+	Local $sMsg = "", $iRet = 1
+	If IsArray($aArray) Then
+		; Dimension checking
+		Local $iDimension = UBound($aArray, $UBOUND_DIMENSIONS), $iRowCount = UBound($aArray, $UBOUND_ROWS), $iColCount = UBound($aArray, $UBOUND_COLUMNS)
+		If $iDimension > 2 Then
+			$sMsg = "Larger than 2D array passed to function"
+			$iRet = 2
+		EndIf
+		If $iDimension = 1 Then
+			$iTranspose = 0
+		EndIf
+	Else
+		$sMsg = "No array variable passed to function"
+	EndIf
+	If $sMsg Then
+		If $iVerbose And MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR + $MB_YESNO, _
+				$sMsgBoxTitle & " Error: " & $sTitle, $sMsg & @CRLF & @CRLF & "Exit the script?") = $IDYES Then
+			Exit
+		Else
+			Return SetError($iRet, 0, 0)
+		EndIf
+	EndIf
+
+	; Determine copy separator
+	Local $iCW_ColWidth = Number($vUser_Separator)
+
+	; Get current separator character
+	Local $sCurr_Separator = Opt("GUIDataSeparatorChar")
+
+	; Set default user separator if required
+	If $vUser_Separator = "" Then $vUser_Separator = $sCurr_Separator
+
+	; Declare variables
+	Local $iItem_Start = 0, $iItem_End = $iRowCount - 1, $iSubItem_Start = 0, $iSubItem_End = (($iDimension = 2) ? ($iColCount - 1) : (0))
+	; Flag to determine if range set
+	Local $bRange_Flag = False, $avRangeSplit
+	; Check for range settings
+	If $sArrayRange Then
+		; Split into separate dimension sections
+		Local $aArray_Range = StringRegExp($sArrayRange & "||", "(?U)(.*)\|", 3)
+		; Dimension 1
+		If $aArray_Range[0] Then
+			$avRangeSplit = StringSplit($aArray_Range[0], ":")
+			If @error Then
+				$iItem_End = Number($avRangeSplit[1])
+			Else
+				$iItem_Start = Number($avRangeSplit[1])
+				If $avRangeSplit[2] <> "" Then
+					$iItem_End = Number($avRangeSplit[2])
+				EndIf
+			EndIf
+		EndIf
+		; Check row bounds
+		If $iItem_Start < 0 Then $iItem_Start = 0
+		If $iItem_End > $iRowCount - 1 Then $iItem_End = $iRowCount - 1
+		If $iItem_Start > $iItem_End Then
+			$vTmp = $iItem_Start
+			$iItem_Start = $iItem_End
+			$iItem_End = $vTmp
+		EndIf
+		; Check if range set
+		If $iItem_Start <> 0 Or $iItem_End <> $iRowCount - 1 Then $bRange_Flag = True
+		; Dimension 2
+		If $iDimension = 2 And $aArray_Range[1] Then
+			$avRangeSplit = StringSplit($aArray_Range[1], ":")
+			If @error Then
+				$iSubItem_End = Number($avRangeSplit[1])
+			Else
+				$iSubItem_Start = Number($avRangeSplit[1])
+				If $avRangeSplit[2] <> "" Then
+					$iSubItem_End = Number($avRangeSplit[2])
+				EndIf
+			EndIf
+			; Check column bounds
+			If $iSubItem_Start > $iSubItem_End Then
+				$vTmp = $iSubItem_Start
+				$iSubItem_Start = $iSubItem_End
+				$iSubItem_End = $vTmp
+			EndIf
+			If $iSubItem_Start < 0 Then $iSubItem_Start = 0
+			If $iSubItem_End > $iColCount - 1 Then $iSubItem_End = $iColCount - 1
+			; Check if range set
+			If $iSubItem_Start <> 0 Or $iSubItem_End <> $iColCount - 1 Then $bRange_Flag = True
+		EndIf
+	EndIf
+
+	; Create data display
+	Local $sDisplayData = "[" & $iRowCount & "]"
+	If $iDimension = 2 Then
+		$sDisplayData &= " [" & $iColCount & "]"
+	EndIf
+	; Create tooltip data
+	Local $sTipData = ""
+	If $bRange_Flag Then
+		If $sTipData Then $sTipData &= " - "
+		$sTipData &= "Range set"
+	EndIf
+	If $iTranspose Then
+		If $sTipData Then $sTipData &= " - "
+		$sTipData &= "Transposed"
+	EndIf
+
+	; Split custom header on separator
+	Local $asHeader = StringSplit($sHeader, $sCurr_Separator, $STR_NOCOUNT) ; No count element
+	If UBound($asHeader) = 0 Then Local $asHeader[1] = [""]
+	$sHeader = "Row"
+	Local $iIndex = $iSubItem_Start
+	If $iTranspose Then
+		; All default headers
+		$sHeader = "Col"
+		For $j = $iItem_Start To $iItem_End
+			$sHeader &= $sCurr_Separator & "Row " & $j
+		Next
+	Else
+		; Create custom header with available items
+		If $asHeader[0] Then
+			; Set as many as available
+			For $iIndex = $iSubItem_Start To $iSubItem_End
+				; Check custom header available
+				If $iIndex >= UBound($asHeader) Then ExitLoop
+				$sHeader &= $sCurr_Separator & $asHeader[$iIndex]
+			Next
+		EndIf
+		; Add default headers to fill to end
+		For $j = $iIndex To $iSubItem_End
+			$sHeader &= $sCurr_Separator & "Col " & $j
+		Next
+	EndIf
+	; Remove "Row" header if not needed
+	If $iNoRow Then $sHeader = StringTrimLeft($sHeader, 4)
+
+	; Display splash dialog if required
+	If $iVerbose And ($iItem_End - $iItem_Start + 1) * ($iSubItem_End - $iSubItem_Start + 1) > 10000 Then
+		SplashTextOn($sMsgBoxTitle, "Preparing display" & @CRLF & @CRLF & "Please be patient", 300, 100)
+	EndIf
+
+	; GUI Constants
+	Local Const $_ARRAYCONSTANT_GUI_DOCKBOTTOM = 64
+	Local Const $_ARRAYCONSTANT_GUI_DOCKBORDERS = 102
+	Local Const $_ARRAYCONSTANT_GUI_DOCKHEIGHT = 512
+	Local Const $_ARRAYCONSTANT_GUI_DOCKLEFT = 2
+	Local Const $_ARRAYCONSTANT_GUI_DOCKRIGHT = 4
+	Local Const $_ARRAYCONSTANT_GUI_DOCKHCENTER = 8
+	Local Const $_ARRAYCONSTANT_GUI_EVENT_CLOSE = -3
+	Local Const $_ARRAYCONSTANT_GUI_FOCUS = 256
+	Local Const $_ARRAYCONSTANT_SS_CENTER = 0x1
+	Local Const $_ARRAYCONSTANT_SS_CENTERIMAGE = 0x0200
+	Local Const $_ARRAYCONSTANT_LVM_GETITEMCOUNT = (0x1000 + 4)
+	Local Const $_ARRAYCONSTANT_LVM_GETITEMRECT = (0x1000 + 14)
+	Local Const $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH = (0x1000 + 29)
+	Local Const $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH = (0x1000 + 30)
+	Local Const $_ARRAYCONSTANT_LVM_GETITEMSTATE = (0x1000 + 44)
+	Local Const $_ARRAYCONSTANT_LVM_GETSELECTEDCOUNT = (0x1000 + 50)
+	Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (0x1000 + 54)
+	Local Const $_ARRAYCONSTANT_LVS_EX_GRIDLINES = 0x1
+	Local Const $_ARRAYCONSTANT_LVIS_SELECTED = 0x0002
+	Local Const $_ARRAYCONSTANT_LVS_SHOWSELALWAYS = 0x8
+	Local Const $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT = 0x20
+	Local Const $_ARRAYCONSTANT_WS_EX_CLIENTEDGE = 0x0200
+	Local Const $_ARRAYCONSTANT_WS_MAXIMIZEBOX = 0x00010000
+	Local Const $_ARRAYCONSTANT_WS_MINIMIZEBOX = 0x00020000
+	Local Const $_ARRAYCONSTANT_WS_SIZEBOX = 0x00040000
+	Local Const $_ARRAYCONSTANT_WM_SETREDRAW = 11
+	Local Const $_ARRAYCONSTANT_LVSCW_AUTOSIZE = -1
+	Local Const $_ARRAYCONSTANT_LVSCW_AUTOSIZE_USEHEADER = -2
+
+	; Set coord mode 1
+	Local $iCoordMode = Opt("GUICoordMode", 1)
+
+	; Create GUI
+	Local $iOrgWidth = 210, $iHeight = 200, $iMinSize = 250
+	Local $hGUI = GUICreate($sTitle, $iOrgWidth, $iHeight, Default, Default, BitOR($_ARRAYCONSTANT_WS_SIZEBOX, $_ARRAYCONSTANT_WS_MINIMIZEBOX, $_ARRAYCONSTANT_WS_MAXIMIZEBOX))
+	Local $aiGUISize = WinGetClientSize($hGUI)
+	Local $iButtonWidth_1 = $aiGUISize[0] / 2
+	Local $iButtonWidth_2 = $aiGUISize[0] / 3
+	; Create ListView
+	Local $idListView = GUICtrlCreateListView($sHeader, 0, 0, $aiGUISize[0], $aiGUISize[1] - $iButtonBorder, $_ARRAYCONSTANT_LVS_SHOWSELALWAYS)
+	GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_GRIDLINES, $_ARRAYCONSTANT_LVS_EX_GRIDLINES)
+	GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT)
+	GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE)
+	Local $idCopy_ID = 9999, $idCopy_Data = 99999, $idData_Label = 99999, $idUser_Func = 99999, $idExit_Script = 99999
+	If $bDebug Then
+		; Create buttons
+		$idCopy_ID = GUICtrlCreateButton("Copy Data && Hdr/Row", 0, $aiGUISize[1] - $iButtonBorder, $iButtonWidth_1, 20)
+		$idCopy_Data = GUICtrlCreateButton("Copy Data Only", $iButtonWidth_1, $aiGUISize[1] - $iButtonBorder, $iButtonWidth_1, 20)
+		Local $iButtonWidth_Var = $iButtonWidth_1
+		Local $iOffset = $iButtonWidth_1
+		If IsFunc($hUser_Function) Then
+			; Create UserFunc button if function passed
+			$idUser_Func = GUICtrlCreateButton("Run User Func", $iButtonWidth_2, $aiGUISize[1] - 20, $iButtonWidth_2, 20)
+			$iButtonWidth_Var = $iButtonWidth_2
+			$iOffset = $iButtonWidth_2 * 2
+		EndIf
+		; Create Exit button and data label
+		$idExit_Script = GUICtrlCreateButton("Exit Script", $iOffset, $aiGUISize[1] - 20, $iButtonWidth_Var, 20)
+		$idData_Label = GUICtrlCreateLabel($sDisplayData, 0, $aiGUISize[1] - 20, $iButtonWidth_Var, 18, BitOR($_ARRAYCONSTANT_SS_CENTER, $_ARRAYCONSTANT_SS_CENTERIMAGE))
+	Else
+		$idData_Label = GUICtrlCreateLabel($sDisplayData, 0, $aiGUISize[1] - 20, $aiGUISize[0], 18, BitOR($_ARRAYCONSTANT_SS_CENTER, $_ARRAYCONSTANT_SS_CENTERIMAGE))
+	EndIf
+	; Change label colour and create tooltip if required
+	Select
+		Case $iTranspose Or $bRange_Flag
+			GUICtrlSetColor($idData_Label, 0xFF0000)
+			GUICtrlSetTip($idData_Label, $sTipData)
+	EndSelect
+	; Set resizing
+	GUICtrlSetResizing($idListView, $_ARRAYCONSTANT_GUI_DOCKBORDERS)
+	GUICtrlSetResizing($idCopy_ID, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
+	GUICtrlSetResizing($idCopy_Data, $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
+	GUICtrlSetResizing($idData_Label, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
+	GUICtrlSetResizing($idUser_Func, $_ARRAYCONSTANT_GUI_DOCKHCENTER + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
+	GUICtrlSetResizing($idExit_Script, $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
+
+	; Start ListView update
+	GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_WM_SETREDRAW, 0, 0)
+
+	; Fill listview
+	Local $iRowIndex, $iColFill
+
+	If $iTranspose Then
+		For $i = $iSubItem_Start To $iSubItem_End
+			; Create ListView item
+			$iRowIndex = __ArrayDisplay_AddItem($idListView, "NULL")
+			; Add row number if required and determine start column for data
+			If $iNoRow Then
+				$iColFill = 0
+			Else
+				__ArrayDisplay_AddSubItem($idListView, $iRowIndex, "Col " & $i, 0)
+				$iColFill = 1
+			EndIf
+			; Fill row with data
+			For $j = $iItem_Start To $iItem_End
+				If $iDimension = 2 Then
+					$vTmp = $aArray[$j][$i]
+				Else
+					$vTmp = $aArray[$j]
+				EndIf
+				Switch VarGetType($vTmp)
+					Case "Array"
+						__ArrayDisplay_AddSubItem($idListView, $iRowIndex, "{Array}", $iColFill)
+					Case Else
+						__ArrayDisplay_AddSubItem($idListView, $iRowIndex, $vTmp, $iColFill)
+				EndSwitch
+				$iColFill += 1
+			Next
+		Next
+	Else
+		For $i = $iItem_Start To $iItem_End
+			; Create ListView item
+			$iRowIndex = __ArrayDisplay_AddItem($idListView, "NULL")
+			; Add row number if required and determine start column for data
+			If $iNoRow Then
+				$iColFill = 0
+			Else
+				__ArrayDisplay_AddSubItem($idListView, $iRowIndex, "Row " & $i, 0)
+				$iColFill = 1
+			EndIf
+			; Fill row with data
+			For $j = $iSubItem_Start To $iSubItem_End
+				If $iDimension = 2 Then
+					$vTmp = $aArray[$i][$j]
+				Else
+					$vTmp = $aArray[$i]
+				EndIf
+				Switch VarGetType($vTmp)
+					Case "Array"
+						__ArrayDisplay_AddSubItem($idListView, $iRowIndex, "{Array}", $iColFill)
+					Case Else
+						__ArrayDisplay_AddSubItem($idListView, $iRowIndex, $vTmp, $iColFill)
+				EndSwitch
+				$iColFill += 1
+			Next
+		Next
+	EndIf
+
+	; Align columns if required - $iColAlign = 2 for Right and 4 for Center
+	If $iColAlign Then
+		; Loop through columns
+		For $i = 0 To $iColFill - 1
+			 __ArrayDisplay_JustifyColumn($idListView, $i, $iColAlign / 2)
+		Next
+	EndIf
+
+	; End ListView update
+	GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_WM_SETREDRAW, 1, 0)
+
+	; Allow for borders with and without vertical scrollbar
+	Local $iBorder = (($iRowIndex > 19) ? (65) : (45))
+	; Adjust dialog width
+	Local $iWidth = $iBorder, $iColWidth = 0, $aiColWidth[$iColFill], $iMin_ColWidth = 55
+	; Get required column widths to fit items
+	For $i = 0 To UBound($aiColWidth) - 1
+		GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH, $i, $_ARRAYCONSTANT_LVSCW_AUTOSIZE)
+		$iColWidth = GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $i, 0)
+		; Check width of header if set
+		If $sHeader <> "" Then
+			GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH, $i, $_ARRAYCONSTANT_LVSCW_AUTOSIZE_USEHEADER)
+			Local $iColWidthHeader = GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $i, 0)
+			; Set minimum if required
+			If $iColWidth < $iMin_ColWidth And $iColWidthHeader < $iMin_ColWidth Then
+				GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH, $i, $iMin_ColWidth)
+				$iColWidth = $iMin_ColWidth
+			ElseIf $iColWidthHeader < $iColWidth Then
+				GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH, $i, $iColWidth)
+			Else
+				$iColWidth = $iColWidthHeader
+			EndIf
+		Else
+			; Set minimum if required
+			If $iColWidth < $iMin_ColWidth Then
+				GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH, $i, $iMin_ColWidth)
+				$iColWidth = $iMin_ColWidth
+			EndIf
+		EndIf
+		; Add to total width
+		$iWidth += $iColWidth
+		; Store  value
+		$aiColWidth[$i] = $iColWidth
+	Next
+	; Now check max size
+	If $iWidth > @DesktopWidth - 100 Then
+		; Apply max col width limit to reduce width
+		$iWidth = $iBorder
+		For $i = 0 To UBound($aiColWidth) - 1
+			If $aiColWidth[$i] > $iMax_ColWidth Then
+				; Reset width
+				GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_SETCOLUMNWIDTH, $i, $iMax_ColWidth)
+				$iWidth += $iMax_ColWidth
+			Else
+				; Retain width
+				$iWidth += $aiColWidth[$i]
+			EndIf
+		Next
+	EndIf
+	; Check max/min width
+	If $iWidth > @DesktopWidth - 100 Then
+		$iWidth = @DesktopWidth - 100
+	ElseIf $iWidth < $iMinSize Then
+		$iWidth = $iMinSize
+	EndIf
+
+	; Get row height
+	Local $tRECT = DllStructCreate("struct; long Left;long Top;long Right;long Bottom; endstruct") ; $tagRECT
+	DllCall("user32.dll", "struct*", "SendMessageW", "hwnd", GUICtrlGetHandle($idListView), "uint", $_ARRAYCONSTANT_LVM_GETITEMRECT, "wparam", 0, "struct*", $tRECT)
+	; Set required GUI height
+	Local $aiWin_Pos = WinGetPos($hGUI)
+	Local $aiLV_Pos = ControlGetPos($hGUI, "", $idListView)
+	$iHeight = (($iRowIndex + 4) * (DllStructGetData($tRECT, "Bottom") - DllStructGetData($tRECT, "Top"))) + $aiWin_Pos[3] - $aiLV_Pos[3]
+	; Check min/max height
+	If $iHeight > @DesktopHeight - 100 Then
+		$iHeight = @DesktopHeight - 100
+	ElseIf $iHeight < $iMinSize Then
+		$iHeight = $iMinSize
+	EndIf
+
+	If $iVerbose Then SplashOff()
+
+	; Display and resize dialog
+	GUISetState(@SW_HIDE, $hGUI)
+	WinMove($hGUI, "", (@DesktopWidth - $iWidth) / 2, (@DesktopHeight - $iHeight) / 2, $iWidth, $iHeight)
+	GUISetState(@SW_SHOW, $hGUI)
+
+	; Switch to GetMessage mode
+	Local $iOnEventMode = Opt("GUIOnEventMode", 0), $iMsg
+
+	__ArrayDisplay_RegisterSortCallBack($idListView, 2, True, "__ArrayDisplay_SortCallBack")
+
+	While 1
+
+		$iMsg = GUIGetMsg() ; Variable needed to check which "Copy" button was pressed
+		Switch $iMsg
+			Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
+				ExitLoop
+
+			Case $idCopy_ID, $idCopy_Data
+				; Count selected rows
+				Local $iSel_Count = GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_GETSELECTEDCOUNT, 0, 0)
+				; Display splash dialog if required
+				If $iVerbose And (Not $iSel_Count) And ($iItem_End - $iItem_Start) * ($iSubItem_End - $iSubItem_Start) > 10000 Then
+					SplashTextOn($sMsgBoxTitle, "Copying data" & @CRLF & @CRLF & "Please be patient", 300, 100)
+				EndIf
+				; Generate clipboard text
+				Local $sClip = "", $sItem, $aSplit
+				; Add items
+				For $i = 0 To GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0) - 1
+					; Skip if copying selected rows and item not selected
+					If $iSel_Count And Not (GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $i, $_ARRAYCONSTANT_LVIS_SELECTED) <> 0) Then
+						ContinueLoop
+					EndIf
+					$sItem = __ArrayDisplay_GetItemTextString($idListView, $i)
+					If $iMsg = $idCopy_ID And $iNoRow Then
+						; Add row data
+						$sItem = "Row " & ($i + (($iTranspose) ? ($iSubItem_Start) : ($iItem_Start))) & $sCurr_Separator & $sItem
+					EndIf
+					If $iMsg = $idCopy_Data And Not $iNoRow Then
+						; Remove Row data
+						$sItem = StringRegExpReplace($sItem, "^Row\s\d+\|(.*)$", "$1")
+					EndIf
+					If $iCW_ColWidth Then
+						; Expand columns
+						$aSplit = StringSplit($sItem, $sCurr_Separator)
+						$sItem = ""
+						For $j = 1 To $aSplit[0]
+							$sItem &= StringFormat("%-" & $iCW_ColWidth + 1 & "s", StringLeft($aSplit[$j], $iCW_ColWidth))
+						Next
+					Else
+						; Use defined separator
+						$sItem = StringReplace($sItem, $sCurr_Separator, $vUser_Separator)
+					EndIf
+					$sClip &= $sItem & @CRLF
+				Next
+				$sItem = $sHeader
+				; Add header line if required
+				If $iMsg = $idCopy_ID Then
+					$sItem = $sHeader
+					If $iNoRow Then
+						; Add "Row" to header
+						$sItem = "Row|" & $sItem
+					EndIf
+					If $iCW_ColWidth Then
+						$aSplit = StringSplit($sItem, $sCurr_Separator)
+						$sItem = ""
+						For $j = 1 To $aSplit[0]
+							$sItem &= StringFormat("%-" & $iCW_ColWidth + 1 & "s", StringLeft($aSplit[$j], $iCW_ColWidth))
+						Next
+					Else
+						$sItem = StringReplace($sItem, $sCurr_Separator, $vUser_Separator)
+					EndIf
+					$sClip = $sItem & @CRLF & $sClip
+				EndIf
+				;Send to clipboard
+				ClipPut($sClip)
+				; Remove splash if used
+				SplashOff()
+				; Refocus ListView
+				GUICtrlSetState($idListView, $_ARRAYCONSTANT_GUI_FOCUS)
+
+			Case $idListView
+				; Kick off the sort callback
+				__ArrayDisplay_SortItems($idListView, GUICtrlGetState($idListView))
+
+			Case $idUser_Func
+				; Get selected indices
+				Local $aiSelItems[1] = [0]
+				For $i = 0 To GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0) - 1
+					If (GUICtrlSendMsg($idListView, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $i, $_ARRAYCONSTANT_LVIS_SELECTED) <> 0) Then
+						$aiSelItems[0] += 1
+						ReDim $aiSelItems[$aiSelItems[0] + 1]
+						$aiSelItems[$aiSelItems[0]] = $i + $iItem_Start
+					EndIf
+				Next
+
+				; Pass array and selection to user function
+				$hUser_Function($aArray, $aiSelItems)
+				GUICtrlSetState($idListView, $_ARRAYCONSTANT_GUI_FOCUS)
+
+			Case $idExit_Script
+				; Clear up
+				GUIDelete($hGUI)
+				Exit
+		EndSwitch
+	WEnd
+
+	; Clear up
+	GUIDelete($hGUI)
+	Opt("GUICoordMode", $iCoordMode) ; Reset original Coord mode
+	Opt("GUIOnEventMode", $iOnEventMode) ; Reset original GUI mode
+;~ 	Opt("GUIDataSeparatorChar", $sCurr_Separator) ; Reset original separator
+
+	Return 1
+EndFunc   ;==>__ArrayDisplay_Share
+
+; #DUPLICATED Functions to avoid big #include <GuiListView.au3># ================================================================
+; Functions have been simplified (unicode inprocess) according to __ArrayDisplay_Share() needs
+
+Func __ArrayDisplay_RegisterSortCallBack($hWnd, $vCompareType = 2, $bArrows = True, $sSort_Callback = "__ArrayDisplay_SortCallBack")
+	  #Au3Stripper_Ignore_Funcs=$sSort_Callback
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+;~ 	Local Const $LVM_GETHEADER = (0x1000 + 31) ; 0x101F
+	Local $hHeader =  HWnd(GUICtrlSendMsg($hWnd, 0x101F, 0, 0))
+
+	$__g_aArrayDisplay_SortInfo[1] = $hWnd ; Handle of listview
+
+	$__g_aArrayDisplay_SortInfo[2] = DllCallbackRegister($sSort_Callback, "int", "int;int;hwnd") ; Handle of callback
+
+	$__g_aArrayDisplay_SortInfo[3] = -1 ; $nColumn
+	$__g_aArrayDisplay_SortInfo[4] = -1 ; nCurCol
+	$__g_aArrayDisplay_SortInfo[5] = 1 ; $nSortDir
+	$__g_aArrayDisplay_SortInfo[6] = -1 ; $nCol
+	$__g_aArrayDisplay_SortInfo[7] = 0 ; $bSet
+	$__g_aArrayDisplay_SortInfo[8] = $vCompareType ; Treat as Strings, Numbers or use Windows API to compare
+	$__g_aArrayDisplay_SortInfo[9] = $bArrows ; Use arrows in the header of the columns?
+	$__g_aArrayDisplay_SortInfo[10] = $hHeader ; Handle to the Header
+
+	Return $__g_aArrayDisplay_SortInfo[2] <> 0
+EndFunc   ;==>__ArrayDisplay_RegisterSortCallBack
+
+#Au3Stripper_Ignore_Funcs=__ArrayDisplay_SortCallBack
+Func __ArrayDisplay_SortCallBack($nItem1, $nItem2, $hWnd)
+	; Switch the sorting direction
+	If $__g_aArrayDisplay_SortInfo[3] = $__g_aArrayDisplay_SortInfo[4] Then ; $nColumn = nCurCol ?
+		If Not $__g_aArrayDisplay_SortInfo[7] Then ; $bSet
+			$__g_aArrayDisplay_SortInfo[5] *= -1 ; $nSortDir
+			$__g_aArrayDisplay_SortInfo[7] = 1 ; $bSet
+		EndIf
+	Else
+		$__g_aArrayDisplay_SortInfo[7] = 1 ; $bSet
+	EndIf
+	$__g_aArrayDisplay_SortInfo[6] = $__g_aArrayDisplay_SortInfo[3] ; $nCol = $nColumn
+	Local $sVal1 = __ArrayDisplay_GetItemText($hWnd, $nItem1, $__g_aArrayDisplay_SortInfo[3])
+	Local $sVal2 = __ArrayDisplay_GetItemText($hWnd, $nItem2, $__g_aArrayDisplay_SortInfo[3])
+
+	If $__g_aArrayDisplay_SortInfo[8] = 1 Then
+		; force Treat as Number if possible
+		If (StringIsFloat($sVal1) Or StringIsInt($sVal1)) Then $sVal1 = Number($sVal1)
+		If (StringIsFloat($sVal2) Or StringIsInt($sVal2)) Then $sVal2 = Number($sVal2)
+	EndIf
+
+	Local $nResult
+	If $__g_aArrayDisplay_SortInfo[8] < 2 Then
+		; Treat as String or Number
+		$nResult = 0 ; No change of item1 and item2 positions
+		If $sVal1 < $sVal2 Then
+			$nResult = -1 ; Put item2 before item1
+		ElseIf $sVal1 > $sVal2 Then
+			$nResult = 1 ; Put item2 behind item1
+		EndIf
+	Else
+		; Use API handling
+		$nResult = DllCall('shlwapi.dll', 'int', 'StrCmpLogicalW', 'wstr', $sVal1, 'wstr', $sVal2)[0]
+	EndIf
+
+	$nResult = $nResult * $__g_aArrayDisplay_SortInfo[5] ; $nSortDir
+
+	Return $nResult
+EndFunc   ;==>__ArrayDisplay_SortCallBack
+
+Func __ArrayDisplay_SortItems($hWnd, $iCol)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $pFunction = DllCallbackGetPtr($__g_aArrayDisplay_SortInfo[2]) ; get pointer to call back
+	$__g_aArrayDisplay_SortInfo[3] = $iCol ; $nColumn = column clicked
+	$__g_aArrayDisplay_SortInfo[7] = 0 ; $bSet
+	$__g_aArrayDisplay_SortInfo[4] = $__g_aArrayDisplay_SortInfo[6] ; nCurCol = $nCol
+;~ 	Local Const $LVM_SORTITEMSEX = ($LVM_FIRST + 81) ; 0x1000 + 81
+	Local $aResult = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $hWnd, "uint", 0x1051, "hwnd", $hWnd, "ptr", $pFunction)
+	If $aResult[0] <> 0 Then
+		If $__g_aArrayDisplay_SortInfo[9] Then ; Use arrow in header
+			Local $hHeader = $__g_aArrayDisplay_SortInfo[10], $iFormat
+			For $x = 0 To __ArrayDisplay_GetItemCount($hHeader) - 1
+				$iFormat = __ArrayDisplay_GetItemFormat($hHeader, $x)
+				If BitAND($iFormat, 0x00000200) Then ; $HDF_SORTDOWN
+					__ArrayDisplay_SetItemFormat($hHeader, $x, BitXOR($iFormat, 0x00000200))
+				ElseIf BitAND($iFormat, 0x00000400) Then ; $HDF_SORTUP
+					__ArrayDisplay_SetItemFormat($hHeader, $x, BitXOR($iFormat, 0x00000400))
+				EndIf
+			Next
+			$iFormat = __ArrayDisplay_GetItemFormat($hHeader, $iCol)
+			If $__g_aArrayDisplay_SortInfo[5] = 1 Then ; ascending
+				__ArrayDisplay_SetItemFormat($hHeader, $iCol, BitOR($iFormat, 0x00000400))
+			Else ; descending
+				__ArrayDisplay_SetItemFormat($hHeader, $iCol, BitOR($iFormat, 0x00000200))
+			EndIf
+		EndIf
+
+		Return True
+	EndIf
+
+	Return False
+EndFunc   ;==>__ArrayDisplay_SortItems
+
+Func __ArrayDisplay_AddItem($hWnd, $sText)
+	Local $tItem = DllStructCreate($_ARRAYCONSTANT_tagLVITEM)
+	DllStructSetData($tItem, "Param", 0)
+	Local $iBuffer = StringLen($sText) + 1
+	Local $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+	$iBuffer *= 2
+	DllStructSetData($tBuffer, "Text", $sText)
+	DllStructSetData($tItem, "Text", DllStructGetPtr($tBuffer))
+	DllStructSetData($tItem, "TextMax", $iBuffer)
+
+;~ Local Const $LVIF_PARAM = 0x00000004
+;~ Local Const $LVIF_TEXT = 0x00000001
+	Local $iMask = 0x00000005 ; LVIF_TEXT + $LVIF_PARAM
+	DllStructSetData($tItem, "Mask", $iMask)
+	DllStructSetData($tItem, "Item", 999999999) ; add item
+	DllStructSetData($tItem, "Image", -1) ; no image
+	Local $pItem = DllStructGetPtr($tItem)
+;~ Local Const $_ARRAYCONSTANTS_LVM_INSERTITEMW = (0x1000 + 77) ; 0x104D
+	Local $iRet = GUICtrlSendMsg($hWnd, 0x104D, 0, $pItem)
+
+	Return $iRet
+EndFunc   ;==>__ArrayDisplay_AddItem
+
+Func __ArrayDisplay_AddSubItem($hWnd, $iIndex, $sText, $iSubItem)
+	Local $iBuffer = StringLen($sText) + 1
+	Local $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+	$iBuffer *= 2
+	Local $pBuffer = DllStructGetPtr($tBuffer)
+	Local $tItem = DllStructCreate($_ARRAYCONSTANT_tagLVITEM)
+;~ Local Const $LVIF_TEXT = 0x00000001
+	Local $iMask = 0x00000001 ; $LVIF_TEXT
+	DllStructSetData($tBuffer, "Text", $sText)
+	DllStructSetData($tItem, "Mask", $iMask) ; just text
+	DllStructSetData($tItem, "Item", $iIndex)
+	DllStructSetData($tItem, "SubItem", $iSubItem)
+	DllStructSetData($tItem, "Image", -1) ; no image
+	Local $pItem = DllStructGetPtr($tItem)
+	DllStructSetData($tItem, "Text", $pBuffer)
+;~ Local Const $_ARRAYCONSTANTS_LVM_SETITEMW = (0x1000 + 76) ; 0x104C
+	Local $iRet = GUICtrlSendMsg($hWnd, 0x104C, 0, $pItem)
+
+	Return $iRet <> 0
+EndFunc   ;==>__ArrayDisplay_AddSubItem
+
+Func __ArrayDisplay_GetColumnCount($hWnd)
+;~ 	Local Const $LVM_GETHEADER = (0x1000 + 31) ; 0x101F
+	Local $hHeader = HWnd(GUICtrlSendMsg($hWnd, 0x101F, 0, 0))
+
+	Return __ArrayDisplay_GetItemCount($hHeader)
+EndFunc   ;==>__ArrayDisplay_GetColumnCount
+
+Func __ArrayDisplay_GetHeader($hWnd)
+
+;~ 	Local Const $LVM_GETHEADER = (0x1000 + 31) ; 0x101F
+	Return HWnd(GUICtrlSendMsg($hWnd, 0x101F, 0, 0))
+EndFunc   ;==>__ArrayDisplay_GetHeader
+
+Func __ArrayDisplay_GetItem($hWnd, $iIndex, ByRef $tItem)
+	;Global Const $HDM_GETITEMW = $HDM_FIRST + 11 ; 0x1200 + 11
+	Local $aResult = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $hWnd, "uint", 0x120B, "wparam", $iIndex, "struct*", $tItem)
+
+	Return $aResult[0] <> 0
+EndFunc   ;==>__ArrayDisplay_GetItem
+
+Func __ArrayDisplay_GetItemCount($hWnd)
+	;Local Const $HDM_GETITEMCOUNT = 0x1200
+	Local $aResult = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $hWnd, "uint", 0x1200, "wparam", 0, "lparam", 0)
+
+	Return $aResult[0]
+EndFunc   ;==>__ArrayDisplayr_GetItemCount
+
+Func __ArrayDisplay_GetItemFormat($hWnd, $iIndex)
+	Local $tItem = DllStructCreate($_ARRAYCONSTANT_tagHDITEM)
+	DllStructSetData($tItem, "Mask", 0x00000004) ; $HDI_FORMAT
+	__ArrayDisplay_GetItem($hWnd, $iIndex, $tItem)
+
+	Return DllStructGetData($tItem, "Fmt")
+EndFunc   ;==>__ArrayDisplay_GetItemFormat
+
+Func __ArrayDisplay_GetItemText($hWnd, $iIndex, $iSubItem = 0)
+	Local $tBuffer = DllStructCreate("wchar Text[4096]")
+	Local $pBuffer = DllStructGetPtr($tBuffer)
+	Local $tItem = DllStructCreate($_ARRAYCONSTANT_tagLVITEM)
+	DllStructSetData($tItem, "SubItem", $iSubItem)
+	DllStructSetData($tItem, "TextMax", 4096)
+	DllStructSetData($tItem, "Text", $pBuffer)
+	;Global Const $LVM_GETITEMTEXTW = (0x1000 + 115) ; 0X1073
+	If IsHWnd($hWnd) Then
+		DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $hWnd, "uint", 0x1073, "wparam", $iIndex, "struct*", $tItem)
+	Else
+		Local $pItem = DllStructGetPtr($tItem)
+		GUICtrlSendMsg($hWnd, 0x1073, $iIndex, $pItem)
+	EndIf
+
+	Return DllStructGetData($tBuffer, "Text")
+EndFunc   ;==>__ArrayDisplay_GetItemText
+
+Func __ArrayDisplay_GetItemTextString($hWnd, $iItem)
+	Local $sRow = "", $sSeparatorChar = Opt('GUIDataSeparatorChar')
+	Local $iSelected = $iItem ; get row
+	For $x = 0 To __ArrayDisplay_GetColumnCount($hWnd) - 1
+		$sRow &= __ArrayDisplay_GetItemText($hWnd, $iSelected, $x) & $sSeparatorChar
+	Next
+
+	Return StringTrimRight($sRow, 1)
+EndFunc   ;==>__ArrayDisplay_GetItemTextString
+
+Func __ArrayDisplay_JustifyColumn($idListView, $iIndex, $iAlign = -1)
+	;Local $aAlign[3] = [$LVCFMT_LEFT, $LVCFMT_RIGHT, $LVCFMT_CENTER]
+
+	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") ; $tagLVCOLUMN
+	If $iAlign < 0 Or $iAlign > 2 Then $iAlign = 0
+	DllStructSetData($tColumn, "Mask", 0x01) ; $LVCF_FMT
+	DllStructSetData($tColumn, "Fmt", $iAlign)
+	Local $pColumn = DllStructGetPtr($tColumn)
+	Local $iRet = GUICtrlSendMsg($idListView, 0x1060 , $iIndex, $pColumn) ; $_ARRAYCONSTANT_LVM_SETCOLUMNW
+	Return $iRet <> 0
+EndFunc   ;==>__ArrayDisplay_JustifyColumn
+
+Func __ArrayDisplay_SetItemFormat($hWnd, $iIndex, $iFormat)
+	Local $tItem = DllStructCreate($_ARRAYCONSTANT_tagHDITEM)
+	DllStructSetData($tItem, "Mask", 0x00000004) ; $HDI_FORMAT
+	DllStructSetData($tItem, "Fmt", $iFormat)
+	;Global Const $HDM_SETITEMW = $HDM_FIRST + 12 ; 0x1200 + 12
+	Local $aResult = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $hWnd, "uint", 0x120C, "wparam", $iIndex, "struct*", $tItem)
+
+	Return $aResult[0] <> 0
+EndFunc   ;==>__ArrayDisplay_SetItemFormat
+
+; ===============================================================================================================================

+ 346 - 0
include/AutoItConstants.au3

@@ -0,0 +1,346 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants to be included in an AutoIt v3 script.
+; Author(s) .....: JLandes, Nutster, CyberSlug, Holger, ...
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; Sets the way coords are used in the mouse and pixel functions
+Global Const $OPT_COORDSRELATIVE = 0 ; Relative coords to the active window
+Global Const $OPT_COORDSABSOLUTE = 1 ; Absolute screen coordinates (default)
+Global Const $OPT_COORDSCLIENT = 2 ; Relative coords to client area
+
+; Sets how errors are handled if a Run/RunWait function fails
+Global Const $OPT_ERRORSILENT = 0 ; Silent error (@error set to 1)
+Global Const $OPT_ERRORFATAL = 1 ; Fatal error (default)
+
+; Alters the use of Caps Lock
+Global Const $OPT_CAPSNOSTORE = 0 ; Don't store/restore Caps Lock state
+Global Const $OPT_CAPSSTORE = 1 ; Store/restore Caps Lock state (default)
+
+; Alters the method that is used to match window titles
+Global Const $OPT_MATCHSTART = 1 ; Match the title from the start (default)
+Global Const $OPT_MATCHANY = 2 ; Match any substring in the title
+Global Const $OPT_MATCHEXACT = 3 ; Match the title exactly
+Global Const $OPT_MATCHADVANCED = 4 ; Use advanced window matching (deprecated)
+
+; Common Control Styles
+Global Const $CCS_TOP = 0x01
+Global Const $CCS_NOMOVEY = 0x02
+Global Const $CCS_BOTTOM = 0x03
+Global Const $CCS_NORESIZE = 0x04
+Global Const $CCS_NOPARENTALIGN = 0x08
+Global Const $CCS_NOHILITE = 0x10
+Global Const $CCS_ADJUSTABLE = 0x20
+Global Const $CCS_NODIVIDER = 0x40
+Global Const $CCS_VERT = 0x0080
+Global Const $CCS_LEFT = 0x0081
+Global Const $CCS_NOMOVEX = 0x0082
+Global Const $CCS_RIGHT = 0x0083
+
+; DriveGetType() Constants
+Global Const $DT_DRIVETYPE = 1 ; Drive type e.g. CD-ROM, Fixed.
+Global Const $DT_SSDSTATUS = 2 ; Status of whether the drive is SSD.
+Global Const $DT_BUSTYPE = 3 ; Bus type e.g. SATA, SD.
+
+; FtpSetProxy and HttpSetProxy Constants
+Global Const $PROXY_IE = 0
+Global Const $PROXY_NONE = 1
+Global Const $PROXY_SPECIFIED = 2
+
+; Reserved IDs for System Objects
+; in MenuConstants.au3
+; in ScrollBarsConstants.au3
+Global Const $OBJID_WINDOW = 0x00000000
+Global Const $OBJID_TITLEBAR = 0xFFFFFFFE
+Global Const $OBJID_SIZEGRIP = 0xFFFFFFF9
+Global Const $OBJID_CARET = 0xFFFFFFF8
+Global Const $OBJID_CURSOR = 0xFFFFFFF7
+Global Const $OBJID_ALERT = 0xFFFFFFF6
+Global Const $OBJID_SOUND = 0xFFFFFFF5
+
+; Progress and Splash Constants
+; Indicates properties of the displayed progress or splash dialog
+Global Const $DLG_CENTERONTOP = 0 ; Center justified/always on top/with title
+Global Const $DLG_NOTITLE = 1 ; Titleless window
+Global Const $DLG_NOTONTOP = 2 ; Without "always on top" attribute
+Global Const $DLG_TEXTLEFT = 4 ; Left justified text
+Global Const $DLG_TEXTRIGHT = 8 ; Right justified text
+Global Const $DLG_MOVEABLE = 16 ; Window can be moved
+Global Const $DLG_TEXTVCENTER = 32 ; Splash text centered vertically
+
+; Mouse Constants
+; Indicates current mouse cursor
+Global Const $IDC_UNKNOWN = 0 ; Unknown cursor
+Global Const $IDC_APPSTARTING = 1 ; Standard arrow and small hourglass
+Global Const $IDC_ARROW = 2 ; Standard arrow
+Global Const $IDC_CROSS = 3 ; Crosshair
+Global Const $IDC_HAND = 32649 ; Hand cursor
+Global Const $IDC_HELP = 4 ; Arrow and question mark
+Global Const $IDC_IBEAM = 5 ; I-beam
+Global Const $IDC_ICON = 6 ; Obsolete
+Global Const $IDC_NO = 7 ; Slashed circle
+Global Const $IDC_SIZE = 8 ; Obsolete
+Global Const $IDC_SIZEALL = 9 ; Four-pointed arrow pointing N, S, E, and W
+Global Const $IDC_SIZENESW = 10 ; Double-pointed arrow pointing NE and SW
+Global Const $IDC_SIZENS = 11 ; Double-pointed arrow pointing N and S
+Global Const $IDC_SIZENWSE = 12 ; Double-pointed arrow pointing NW and SE
+Global Const $IDC_SIZEWE = 13 ; Double-pointed arrow pointing W and E
+Global Const $IDC_UPARROW = 14 ; Vertical arrow
+Global Const $IDC_WAIT = 15 ; Hourglass
+
+Global Const $IDI_APPLICATION = 32512 ; Application icon
+Global Const $IDI_ASTERISK = 32516 ; Asterisk icon
+Global Const $IDI_EXCLAMATION = 32515 ; Exclamation point icon
+Global Const $IDI_HAND = 32513 ; Stop sign icon
+Global Const $IDI_QUESTION = 32514 ; Question-mark icon
+Global Const $IDI_WINLOGO = 32517 ; Windows logo icon. Windows XP: Application icon
+Global Const $IDI_SHIELD = 32518
+Global Const $IDI_ERROR = $IDI_HAND
+Global Const $IDI_INFORMATION = $IDI_ASTERISK
+Global Const $IDI_WARNING = $IDI_EXCLAMATION
+
+; Process Constants
+; Indicates the type of shutdown
+Global Const $SD_LOGOFF = 0 ; Logoff
+Global Const $SD_SHUTDOWN = 1 ; Shutdown
+Global Const $SD_REBOOT = 2 ; Reboot
+Global Const $SD_FORCE = 4 ; Force
+Global Const $SD_POWERDOWN = 8 ; Power down
+Global Const $SD_FORCEHUNG = 16 ; Force shutdown if hung
+Global Const $SD_STANDBY = 32 ; Standby
+Global Const $SD_HIBERNATE = 64 ; Hibernate
+
+; Run Constants
+Global Const $STDIN_CHILD = 1
+Global Const $STDOUT_CHILD = 2
+Global Const $STDERR_CHILD = 4
+Global Const $STDERR_MERGED = 8
+Global Const $STDIO_INHERIT_PARENT = 0x10
+Global Const $RUN_CREATE_NEW_CONSOLE = 0x00010000
+
+; UBound Constants
+Global Const $UBOUND_DIMENSIONS = 0
+Global Const $UBOUND_ROWS = 1
+Global Const $UBOUND_COLUMNS = 2
+
+; Mouse Event Constants
+Global Const $MOUSEEVENTF_ABSOLUTE = 0x8000 ; Specifies that the dx and dy parameters contain normalized absolute coordinates
+Global Const $MOUSEEVENTF_MOVE = 0x0001 ; Specifies that movement occurred
+Global Const $MOUSEEVENTF_LEFTDOWN = 0x0002 ; Specifies that the left button changed to down
+Global Const $MOUSEEVENTF_LEFTUP = 0x0004 ; Specifies that the left button changed to up
+Global Const $MOUSEEVENTF_RIGHTDOWN = 0x0008 ; Specifies that the right button changed to down
+Global Const $MOUSEEVENTF_RIGHTUP = 0x0010 ; Specifies that the right button changed to up
+Global Const $MOUSEEVENTF_MIDDLEDOWN = 0x0020 ; Specifies that the middle button changed to down
+Global Const $MOUSEEVENTF_MIDDLEUP = 0x0040 ; Specifies that the middle button changed to up
+Global Const $MOUSEEVENTF_WHEEL = 0x0800 ; Specifies that the wheel has been moved, if the mouse has a wheel
+Global Const $MOUSEEVENTF_XDOWN = 0x0080 ; Specifies that an X button was pressed
+Global Const $MOUSEEVENTF_XUP = 0x0100 ; Specifies that an X button was released
+
+; Reg Value type Constants
+Global Const $REG_NONE = 0
+Global Const $REG_SZ = 1
+Global Const $REG_EXPAND_SZ = 2
+Global Const $REG_BINARY = 3
+Global Const $REG_DWORD = 4
+Global Const $REG_DWORD_LITTLE_ENDIAN = 4
+Global Const $REG_DWORD_BIG_ENDIAN = 5
+Global Const $REG_LINK = 6
+Global Const $REG_MULTI_SZ = 7
+Global Const $REG_RESOURCE_LIST = 8
+Global Const $REG_FULL_RESOURCE_DESCRIPTOR = 9
+Global Const $REG_RESOURCE_REQUIREMENTS_LIST = 10
+Global Const $REG_QWORD = 11
+Global Const $REG_QWORD_LITTLE_ENDIAN = 11
+
+; Z order
+Global Const $HWND_BOTTOM = 1 ; Places the window at the bottom of the Z order
+Global Const $HWND_NOTOPMOST = -2 ; Places the window above all non-topmost windows
+Global Const $HWND_TOP = 0 ; Places the window at the top of the Z order
+Global Const $HWND_TOPMOST = -1 ; Places the window above all non-topmost windows
+
+; SetWindowPos Constants
+Global Const $SWP_NOSIZE = 0x0001
+Global Const $SWP_NOMOVE = 0x0002
+Global Const $SWP_NOZORDER = 0x0004
+Global Const $SWP_NOREDRAW = 0x0008
+Global Const $SWP_NOACTIVATE = 0x0010
+Global Const $SWP_FRAMECHANGED = 0x0020
+Global Const $SWP_DRAWFRAME = 0x0020
+Global Const $SWP_SHOWWINDOW = 0x0040
+Global Const $SWP_HIDEWINDOW = 0x0080
+Global Const $SWP_NOCOPYBITS = 0x0100
+Global Const $SWP_NOOWNERZORDER = 0x0200
+Global Const $SWP_NOREPOSITION = 0x0200
+Global Const $SWP_NOSENDCHANGING = 0x0400
+Global Const $SWP_DEFERERASE = 0x2000
+Global Const $SWP_ASYNCWINDOWPOS = 0x4000
+
+; Keywords (returned from the IsKeyword() function)
+Global Const $KEYWORD_DEFAULT = 1
+Global Const $KEYWORD_NULL = 2
+
+; IsDeclared Constants
+Global Const $DECLARED_LOCAL = -1
+Global Const $DECLARED_UNKNOWN = 0
+Global Const $DECLARED_GLOBAL = 1
+
+; Assign Constants
+Global Const $ASSIGN_CREATE = 0
+Global Const $ASSIGN_FORCELOCAL = 1
+Global Const $ASSIGN_FORCEGLOBAL = 2
+Global Const $ASSIGN_EXISTFAIL = 4
+
+; BlockInput Constants
+Global Const $BI_ENABLE = 0
+Global Const $BI_DISABLE = 1
+
+; Break Constants
+Global Const $BREAK_ENABLE = 1
+Global Const $BREAK_DISABLE = 0
+
+; CDTray Constants
+Global Const $CDTRAY_OPEN = "open"
+Global Const $CDTRAY_CLOSED = "closed"
+
+; ControlSend and Send Constants
+Global Const $SEND_DEFAULT = 0
+Global Const $SEND_RAW = 1
+
+; DirGetSize Constants
+Global Const $DIR_DEFAULT = 0
+Global Const $DIR_EXTENDED= 1
+Global Const $DIR_NORECURSE = 2
+
+; DirRemove Constants
+;~ Global Const $DIR_DEFAULT = 0
+Global Const $DIR_REMOVE= 1
+
+; DriveGetDrive Constants
+Global Const $DT_ALL = "ALL"
+Global Const $DT_CDROM = "CDROM"
+Global Const $DT_REMOVABLE = "REMOVABLE"
+Global Const $DT_FIXED = "FIXED"
+Global Const $DT_NETWORK = "NETWORK"
+Global Const $DT_RAMDISK = "RAMDISK"
+Global Const $DT_UNKNOWN = "UNKNOWN"
+
+; DriveGetFileSystem Constants
+Global Const $DT_UNDEFINED = 1
+Global Const $DT_FAT = "FAT"
+Global Const $DT_FAT32 = "FAT32"
+Global Const $DT_EXFAT = "exFAT"
+Global Const $DT_NTFS = "NTFS"
+Global Const $DT_NWFS = "NWFS"
+Global Const $DT_CDFS = "CDFS"
+Global Const $DT_UDF = "UDF"
+
+; DriveMapAdd Constants
+Global Const $DMA_DEFAULT = 0
+Global Const $DMA_PERSISTENT = 1
+Global Const $DMA_AUTHENTICATION = 8
+
+; DriveStatus Constants
+Global Const $DS_UNKNOWN = "UNKNOWN"
+Global Const $DS_READY = "READY"
+Global Const $DS_NOTREADY = "NOTREADY"
+Global Const $DS_INVALID = "INVALID"
+
+; Mouse related Constants
+Global Const $MOUSE_CLICK_LEFT = "left"
+Global Const $MOUSE_CLICK_RIGHT = "right"
+Global Const $MOUSE_CLICK_MIDDLE = "middle"
+Global Const $MOUSE_CLICK_MAIN = "main"
+Global Const $MOUSE_CLICK_MENU = "menu"
+Global Const $MOUSE_CLICK_PRIMARY = "primary"
+Global Const $MOUSE_CLICK_SECONDARY = "secondary"
+Global Const $MOUSE_WHEEL_UP = "up"
+Global Const $MOUSE_WHEEL_DOWN = "down"
+
+; Dec, Int, Number Constants
+Global Const $NUMBER_AUTO = 0
+Global Const $NUMBER_32BIT = 1
+Global Const $NUMBER_64BIT = 2
+Global Const $NUMBER_DOUBLE = 3
+
+; ObjName Constants
+Global Const $OBJ_NAME = 1
+Global Const $OBJ_STRING = 2
+Global Const $OBJ_PROGID = 3
+Global Const $OBJ_FILE = 4
+Global Const $OBJ_MODULE = 5
+Global Const $OBJ_CLSID = 6
+Global Const $OBJ_IID = 7
+
+; OnAutoItExitRegister Constants
+Global Const $EXITCLOSE_NORMAL = 0 ; Natural closing.
+Global Const $EXITCLOSE_BYEXIT = 1 ; close by Exit function.
+Global Const $EXITCLOSE_BYCLICK = 2 ; close by clicking on exit of the systray.
+Global Const $EXITCLOSE_BYLOGOFF = 3 ; close by user logoff.
+Global Const $EXITCLOSE_BYSHUTDOWN = 4 ; close by Windows shutdown.
+
+; ProcessGetStats Constants
+Global Const $PROCESS_STATS_MEMORY = 0
+Global Const $PROCESS_STATS_IO = 1
+
+; ProcessSetPriority Constants
+Global Const $PROCESS_LOW = 0
+Global Const $PROCESS_BELOWNORMAL = 1
+Global Const $PROCESS_NORMAL = 2
+Global Const $PROCESS_ABOVENORMAL = 3
+Global Const $PROCESS_HIGH = 4
+Global Const $PROCESS_REALTIME = 5
+
+; RunAs and RunAsWait Constants
+Global Const $RUN_LOGON_NOPROFILE = 0
+Global Const $RUN_LOGON_PROFILE = 1
+Global Const $RUN_LOGON_NETWORK = 2
+Global Const $RUN_LOGON_INHERIT = 4
+
+; SoundPlay Constants
+Global Const $SOUND_NOWAIT = 0 ; continue script while sound is playing (default)
+Global Const $SOUND_WAIT = 1 ; wait until sound has finished
+
+; ShellExecute and ShellExecuteWait Constants
+Global Const $SHEX_OPEN = "open"
+Global Const $SHEX_EDIT = "edit"
+Global Const $SHEX_PRINT = "print"
+Global Const $SHEX_PROPERTIES = "properties"
+
+; TCPRecv Constants
+Global Const $TCP_DATA_DEFAULT = 0
+Global Const $TCP_DATA_BINARY = 1
+
+; UDPOpen, UDPRecv Constants
+Global Const $UDP_OPEN_DEFAULT = 0
+Global Const $UDP_OPEN_BROADCAST = 1
+Global Const $UDP_DATA_DEFAULT = 0
+Global Const $UDP_DATA_BINARY = 1
+Global Const $UDP_DATA_ARRAY = 2
+
+; ToolTip, GUICtrlSetTip Constants
+Global Const $TIP_NOICON = 0 ; No icon
+Global Const $TIP_INFOICON = 1 ; Info icon
+Global Const $TIP_WARNINGICON = 2 ; Warning icon
+Global Const $TIP_ERRORICON = 3 ; Error Icon
+
+Global Const $TIP_BALLOON = 1
+Global Const $TIP_CENTER = 2
+Global Const $TIP_FORCEVISIBLE = 4
+
+; WindowsSetOnTop Constants
+Global Const $WINDOWS_NOONTOP = 0
+Global Const $WINDOWS_ONTOP = 1
+
+; WinGetState Constants
+Global Const $WIN_STATE_EXISTS = 1
+Global Const $WIN_STATE_VISIBLE  = 2
+Global Const $WIN_STATE_ENABLED = 4
+Global Const $WIN_STATE_ACTIVE = 8
+Global Const $WIN_STATE_MINIMIZED = 16
+Global Const $WIN_STATE_MAXIMIZED = 32
+; ===============================================================================================================================

+ 41 - 0
include/BorderConstants.au3

@@ -0,0 +1,41 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: Border_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants for _WinAPI_DrawEdge().
+; Author(s) .....: Gary Frost
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $BDR_RAISEDINNER = 0x4
+Global Const $BDR_RAISEDOUTER = 0x1
+Global Const $BDR_SUNKENINNER = 0x8
+Global Const $BDR_SUNKENOUTER = 0x2
+Global Const $EDGE_BUMP = BitOR($BDR_RAISEDOUTER, $BDR_SUNKENINNER)
+Global Const $EDGE_ETCHED = BitOR($BDR_SUNKENOUTER, $BDR_RAISEDINNER)
+Global Const $EDGE_RAISED = BitOR($BDR_RAISEDOUTER, $BDR_RAISEDINNER)
+Global Const $EDGE_SUNKEN = BitOR($BDR_SUNKENOUTER, $BDR_SUNKENINNER)
+
+; Type of Border
+Global Const $BF_ADJUST = 0x2000
+Global Const $BF_BOTTOM = 0x8
+Global Const $BF_DIAGONAL = 0x10
+Global Const $BF_FLAT = 0x4000
+Global Const $BF_LEFT = 0x1
+Global Const $BF_MIDDLE = 0x800
+Global Const $BF_MONO = 0x8000
+Global Const $BF_RIGHT = 0x4
+Global Const $BF_SOFT = 0x1000
+Global Const $BF_TOP = 0x2
+Global Const $BF_BOTTOMLEFT = BitOR($BF_BOTTOM, $BF_LEFT)
+Global Const $BF_BOTTOMRIGHT = BitOR($BF_BOTTOM, $BF_RIGHT)
+Global Const $BF_TOPLEFT = BitOR($BF_TOP, $BF_LEFT)
+Global Const $BF_TOPRIGHT = BitOR($BF_TOP, $BF_RIGHT)
+Global Const $BF_RECT = BitOR($BF_LEFT, $BF_TOP, $BF_RIGHT, $BF_BOTTOM)
+Global Const $BF_DIAGONAL_ENDBOTTOMLEFT = BitOR($BF_DIAGONAL, $BF_BOTTOM, $BF_LEFT)
+Global Const $BF_DIAGONAL_ENDBOTTOMRIGHT = BitOR($BF_DIAGONAL, $BF_BOTTOM, $BF_RIGHT)
+Global Const $BF_DIAGONAL_ENDTOPLEFT = BitOR($BF_DIAGONAL, $BF_TOP, $BF_LEFT)
+Global Const $BF_DIAGONAL_ENDTOPRIGHT = BitOR($BF_DIAGONAL, $BF_TOP, $BF_RIGHT)
+; ===============================================================================================================================

+ 120 - 0
include/ButtonConstants.au3

@@ -0,0 +1,120 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: Button_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants for <a href="../appendix/GUIStyles.htm#Button">GUI control Button styles</a> and Group, Radio, Checkbox.
+; Author(s) .....: Valik
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; Group
+Global Const $BS_GROUPBOX = 0x0007
+
+; Button
+Global Const $BS_BOTTOM = 0x0800
+Global Const $BS_CENTER = 0x0300
+Global Const $BS_DEFPUSHBUTTON = 0x0001
+Global Const $BS_LEFT = 0x0100
+Global Const $BS_MULTILINE = 0x2000
+Global Const $BS_PUSHBOX = 0x000A
+Global Const $BS_PUSHLIKE = 0x1000
+Global Const $BS_RIGHT = 0x0200
+Global Const $BS_RIGHTBUTTON = 0x0020
+Global Const $BS_TOP = 0x0400
+Global Const $BS_VCENTER = 0x0C00
+Global Const $BS_FLAT = 0x8000
+Global Const $BS_ICON = 0x0040
+Global Const $BS_BITMAP = 0x0080
+Global Const $BS_NOTIFY = 0x4000
+; Vista
+Global Const $BS_SPLITBUTTON = 0x0000000C
+Global Const $BS_DEFSPLITBUTTON = 0x0000000D
+Global Const $BS_COMMANDLINK = 0x0000000E
+Global Const $BS_DEFCOMMANDLINK = 0x0000000F
+
+; Vista SPLIT BUTTON INFO mask flags
+Global Const $BCSIF_GLYPH = 0x0001
+Global Const $BCSIF_IMAGE = 0x0002
+Global Const $BCSIF_STYLE = 0x0004
+Global Const $BCSIF_SIZE = 0x0008
+
+; Vista SPLIT BUTTON STYLE flags
+Global Const $BCSS_NOSPLIT = 0x0001
+Global Const $BCSS_STRETCH = 0x0002
+Global Const $BCSS_ALIGNLEFT = 0x0004
+Global Const $BCSS_IMAGE = 0x0008
+
+Global Const $BUTTON_IMAGELIST_ALIGN_LEFT = 0
+Global Const $BUTTON_IMAGELIST_ALIGN_RIGHT = 1
+Global Const $BUTTON_IMAGELIST_ALIGN_TOP = 2
+Global Const $BUTTON_IMAGELIST_ALIGN_BOTTOM = 3
+Global Const $BUTTON_IMAGELIST_ALIGN_CENTER = 4 ; Doesn't draw text
+
+; Checkbox
+Global Const $BS_3STATE = 0x0005
+Global Const $BS_AUTO3STATE = 0x0006
+Global Const $BS_AUTOCHECKBOX = 0x0003
+Global Const $BS_CHECKBOX = 0x0002
+
+; Radio
+Global Const $BS_RADIOBUTTON = 0x4
+Global Const $BS_AUTORADIOBUTTON = 0x0009
+
+Global Const $BS_OWNERDRAW = 0xB
+
+; Control default styles
+Global Const $GUI_SS_DEFAULT_BUTTON = 0
+Global Const $GUI_SS_DEFAULT_CHECKBOX = 0
+Global Const $GUI_SS_DEFAULT_GROUP = 0
+Global Const $GUI_SS_DEFAULT_RADIO = 0
+
+; Messages
+Global Const $BCM_FIRST = 0x1600
+Global Const $BCM_GETIDEALSIZE = ($BCM_FIRST + 0x0001)
+Global Const $BCM_GETIMAGELIST = ($BCM_FIRST + 0x0003)
+Global Const $BCM_GETNOTE = ($BCM_FIRST + 0x000A)
+Global Const $BCM_GETNOTELENGTH = ($BCM_FIRST + 0x000B)
+Global Const $BCM_GETSPLITINFO = ($BCM_FIRST + 0x0008)
+Global Const $BCM_GETTEXTMARGIN = ($BCM_FIRST + 0x0005)
+Global Const $BCM_SETDROPDOWNSTATE = ($BCM_FIRST + 0x0006)
+Global Const $BCM_SETIMAGELIST = ($BCM_FIRST + 0x0002)
+Global Const $BCM_SETNOTE = ($BCM_FIRST + 0x0009)
+Global Const $BCM_SETSHIELD = ($BCM_FIRST + 0x000C)
+Global Const $BCM_SETSPLITINFO = ($BCM_FIRST + 0x0007)
+Global Const $BCM_SETTEXTMARGIN = ($BCM_FIRST + 0x0004)
+Global Const $BM_CLICK = 0xF5
+Global Const $BM_GETCHECK = 0xF0
+Global Const $BM_GETIMAGE = 0xF6
+Global Const $BM_GETSTATE = 0xF2
+Global Const $BM_SETCHECK = 0xF1
+Global Const $BM_SETDONTCLICK = 0xF8
+Global Const $BM_SETIMAGE = 0xF7
+Global Const $BM_SETSTATE = 0xF3
+Global Const $BM_SETSTYLE = 0xF4
+
+; Notifications
+Global Const $BCN_FIRST = -1250
+Global Const $BCN_DROPDOWN = ($BCN_FIRST + 0x0002)
+Global Const $BCN_HOTITEMCHANGE = ($BCN_FIRST + 0x0001)
+Global Const $BN_CLICKED = 0
+Global Const $BN_PAINT = 1
+Global Const $BN_HILITE = 2
+Global Const $BN_UNHILITE = 3
+Global Const $BN_DISABLE = 4
+Global Const $BN_DOUBLECLICKED = 5
+Global Const $BN_SETFOCUS = 6
+Global Const $BN_KILLFOCUS = 7
+Global Const $BN_PUSHED = $BN_HILITE
+Global Const $BN_UNPUSHED = $BN_UNHILITE
+Global Const $BN_DBLCLK = $BN_DOUBLECLICKED
+
+; check states
+Global Const $BST_CHECKED = 0x1
+Global Const $BST_INDETERMINATE = 0x2
+Global Const $BST_UNCHECKED = 0x0
+Global Const $BST_FOCUS = 0x8
+Global Const $BST_PUSHED = 0x4
+Global Const $BST_DONTCLICK = 0x000080
+; ===============================================================================================================================

+ 387 - 0
include/Clipboard_En.au3

@@ -0,0 +1,387 @@
+#include-once
+
+#include "Memory.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Clipboard
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with Clipboard management.
+;                  The clipboard is a set of functions and messages that enable applications to transfer data.
+;                  Because  all applications have access to the clipboard, data can be easily transferred
+;                  between applications  or  within  an application.
+; Author(s) .....: Paul Campbell (PaulIA)
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $CF_TEXT = 1 ; Text format
+Global Const $CF_BITMAP = 2 ; Handle to a bitmap (HBITMAP)
+Global Const $CF_METAFILEPICT = 3 ; Handle to a metafile picture (METAFILEPICT)
+Global Const $CF_SYLK = 4 ; Microsoft Symbolic Link (SYLK) format
+Global Const $CF_DIF = 5 ; Software Arts' Data Interchange Format
+Global Const $CF_TIFF = 6 ; Tagged image file format
+Global Const $CF_OEMTEXT = 7 ; Text format containing characters in the OEM character set
+Global Const $CF_DIB = 8 ; BITMAPINFO structure followed by the bitmap bits
+Global Const $CF_PALETTE = 9 ; Handle to a color palette
+Global Const $CF_PENDATA = 10 ; Data for the pen extensions to Pen Computing
+Global Const $CF_RIFF = 11 ; Represents audio data in RIFF format
+Global Const $CF_WAVE = 12 ; Represents audio data in WAVE format
+Global Const $CF_UNICODETEXT = 13 ; Unicode text format
+Global Const $CF_ENHMETAFILE = 14 ; Handle to an enhanced metafile (HENHMETAFILE)
+Global Const $CF_HDROP = 15 ; Handle to type HDROP that identifies a list of files
+Global Const $CF_LOCALE = 16 ; Handle to the locale identifier associated with text in the clipboard
+Global Const $CF_DIBV5 = 17 ; BITMAPV5HEADER structure followed by bitmap color and the bitmap bits
+Global Const $CF_OWNERDISPLAY = 0x0080 ; Owner display format
+Global Const $CF_DSPTEXT = 0x0081 ; Text display format associated with a private format
+Global Const $CF_DSPBITMAP = 0x0082 ; Bitmap display format associated with a private format
+Global Const $CF_DSPMETAFILEPICT = 0x0083 ; Metafile picture display format associated with a private format
+Global Const $CF_DSPENHMETAFILE = 0x008E ; Enhanced metafile display format associated with a private format
+Global Const $CF_PRIVATEFIRST = 0x0200 ; Range of integer values for private clipboard formats
+Global Const $CF_PRIVATELAST = 0x02FF ; Range of integer values for private clipboard formats
+Global Const $CF_GDIOBJFIRST = 0x0300 ; Range for (GDI) object clipboard formats
+Global Const $CF_GDIOBJLAST = 0x03FF ; Range for (GDI) object clipboard formats
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _ClipBoard_ChangeChain
+; _ClipBoard_Close
+; _ClipBoard_CountFormats
+; _ClipBoard_Empty
+; _ClipBoard_EnumFormats
+; _ClipBoard_FormatStr
+; _ClipBoard_GetData
+; _ClipBoard_GetDataEx
+; _ClipBoard_GetFormatName
+; _ClipBoard_GetOpenWindow
+; _ClipBoard_GetOwner
+; _ClipBoard_GetPriorityFormat
+; _ClipBoard_GetSequenceNumber
+; _ClipBoard_GetViewer
+; _ClipBoard_IsFormatAvailable
+; _ClipBoard_Open
+; _ClipBoard_RegisterFormat
+; _ClipBoard_SetData
+; _ClipBoard_SetDataEx
+; _ClipBoard_SetViewer
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_ChangeChain($hRemove, $hNewNext)
+	DllCall("user32.dll", "bool", "ChangeClipboardChain", "hwnd", $hRemove, "hwnd", $hNewNext)
+	If @error Then Return SetError(@error, @extended)
+EndFunc   ;==>_ClipBoard_ChangeChain
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_Close()
+	Local $aResult = DllCall("user32.dll", "bool", "CloseClipboard")
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_Close
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_CountFormats()
+	Local $aResult = DllCall("user32.dll", "int", "CountClipboardFormats")
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_CountFormats
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_Empty()
+	Local $aResult = DllCall("user32.dll", "bool", "EmptyClipboard")
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_Empty
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_EnumFormats($iFormat)
+	Local $aResult = DllCall("user32.dll", "uint", "EnumClipboardFormats", "uint", $iFormat)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_EnumFormats
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost
+; ===============================================================================================================================
+Func _ClipBoard_FormatStr($iFormat)
+	Local $aFormat[18] = [17, "Text", "Bitmap", "Metafile Picture", "SYLK", "DIF", "TIFF", "OEM Text", "DIB", "Palette", _
+			"Pen Data", "RIFF", "WAVE", "Unicode Text", "Enhanced Metafile", "HDROP", "Locale", "DIB V5"]
+
+	If $iFormat >= 1 And $iFormat <= 17 Then Return $aFormat[$iFormat]
+
+	Switch $iFormat
+		Case $CF_OWNERDISPLAY
+			Return "Owner Display"
+		Case $CF_DSPTEXT
+			Return "Private Text"
+		Case $CF_DSPBITMAP
+			Return "Private Bitmap"
+		Case $CF_DSPMETAFILEPICT
+			Return "Private Metafile Picture"
+		Case $CF_DSPENHMETAFILE
+			Return "Private Enhanced Metafile"
+		Case Else
+			Return _ClipBoard_GetFormatName($iFormat)
+	EndSwitch
+EndFunc   ;==>_ClipBoard_FormatStr
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost,
+; ===============================================================================================================================
+Func _ClipBoard_GetData($iFormat = 1)
+	If Not _ClipBoard_IsFormatAvailable($iFormat) Then Return SetError(-1, 0, 0)
+	If Not _ClipBoard_Open(0) Then Return SetError(-2, 0, 0)
+	Local $hMemory = _ClipBoard_GetDataEx($iFormat)
+
+	;_ClipBoard_Close()		; moved to end: traditionally done *after* copying over the memory
+
+	If $hMemory = 0 Then
+		_ClipBoard_Close()
+		Return SetError(-3, 0, 0)
+	EndIf
+
+	Local $pMemoryBlock = _MemGlobalLock($hMemory)
+
+	If $pMemoryBlock = 0 Then
+		_ClipBoard_Close()
+		Return SetError(-4, 0, 0)
+	EndIf
+
+	; Get the actual memory size of the ClipBoard memory object (in bytes)
+	Local $iDataSize = _MemGlobalSize($hMemory)
+
+	If $iDataSize = 0 Then
+		_MemGlobalUnlock($hMemory)
+		_ClipBoard_Close()
+		Return SetError(-5, 0, "")
+	EndIf
+
+	Local $tData
+	Switch $iFormat
+		Case $CF_TEXT, $CF_OEMTEXT
+			$tData = DllStructCreate("char[" & $iDataSize & "]", $pMemoryBlock)
+		Case $CF_UNICODETEXT
+			; Round() shouldn't be necessary, as CF_UNICODETEXT should be 2-bytes wide & thus evenly-divisible
+			$iDataSize = Round($iDataSize / 2)
+			$tData = DllStructCreate("wchar[" & $iDataSize & "]", $pMemoryBlock)
+		Case Else
+			; Binary data return for all other formats
+			$tData = DllStructCreate("byte[" & $iDataSize & "]", $pMemoryBlock)
+	EndSwitch
+	; Grab the data from the Structure so the Memory can be unlocked
+	Local $vReturn = DllStructGetData($tData, 1)
+
+	; Unlock the memory & Close the clipboard now that we have grabbed what we needed
+	_MemGlobalUnlock($hMemory)
+	_ClipBoard_Close()
+
+	; Return the size of the string or binary object in @extended
+	Return SetExtended($iDataSize, $vReturn)
+EndFunc   ;==>_ClipBoard_GetData
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_GetDataEx($iFormat = 1)
+	Local $aResult = DllCall("user32.dll", "handle", "GetClipboardData", "uint", $iFormat)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_GetDataEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Ascend4nt
+; ===============================================================================================================================
+Func _ClipBoard_GetFormatName($iFormat)
+	Local $aResult = DllCall("user32.dll", "int", "GetClipboardFormatNameW", "uint", $iFormat, "wstr", "", "int", 4096)
+	If @error Then Return SetError(@error, @extended, "")
+	Return $aResult[2]
+EndFunc   ;==>_ClipBoard_GetFormatName
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_GetOpenWindow()
+	Local $aResult = DllCall("user32.dll", "hwnd", "GetOpenClipboardWindow")
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_GetOpenWindow
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_GetOwner()
+	Local $aResult = DllCall("user32.dll", "hwnd", "GetClipboardOwner")
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_GetOwner
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_GetPriorityFormat($aFormats)
+	If Not IsArray($aFormats) Then Return SetError(-1, 0, 0)
+	If $aFormats[0] <= 0 Then Return SetError(-2, 0, 0)
+
+	Local $tData = DllStructCreate("uint[" & $aFormats[0] & "]")
+	For $iI = 1 To $aFormats[0]
+		DllStructSetData($tData, 1, $aFormats[$iI], $iI)
+	Next
+
+	Local $aResult = DllCall("user32.dll", "int", "GetPriorityClipboardFormat", "struct*", $tData, "int", $aFormats[0])
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_GetPriorityFormat
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_GetSequenceNumber()
+	Local $aResult = DllCall("user32.dll", "dword", "GetClipboardSequenceNumber")
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_GetSequenceNumber
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_GetViewer()
+	Local $aResult = DllCall("user32.dll", "hwnd", "GetClipboardViewer")
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_GetViewer
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_IsFormatAvailable($iFormat)
+	Local $aResult = DllCall("user32.dll", "bool", "IsClipboardFormatAvailable", "uint", $iFormat)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_IsFormatAvailable
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_Open($hOwner)
+	Local $aResult = DllCall("user32.dll", "bool", "OpenClipboard", "hwnd", $hOwner)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_Open
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_RegisterFormat($sFormat)
+	Local $aResult = DllCall("user32.dll", "uint", "RegisterClipboardFormatW", "wstr", $sFormat)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_RegisterFormat
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Ascend4nt
+; ===============================================================================================================================
+Func _ClipBoard_SetData($vData, $iFormat = 1)
+	Local $tData, $hLock, $hMemory, $iSize
+
+	; Special NULL case? (the option to provide clipboard formats upon request)
+	If IsNumber($vData) And $vData = 0 Then
+		; No need to allocate/set memory
+		$hMemory = $vData
+	Else
+		; Test if the format is Binary or String format (only supported formats)
+		If IsBinary($vData) Then
+			$iSize = BinaryLen($vData)
+		ElseIf IsString($vData) Then
+			$iSize = StringLen($vData)
+		Else
+			; Unsupported data type
+			Return SetError(2, 0, 0)
+		EndIf
+		$iSize += 1
+
+		; Memory allocation is in bytes, yet Unicode text is 2-bytes wide
+		If $iFormat = $CF_UNICODETEXT Then
+			; Multiply $iSize (Character length for Unicode text) by 2 for Unicode
+			$hMemory = _MemGlobalAlloc($iSize * 2, $GHND)
+		Else
+			$hMemory = _MemGlobalAlloc($iSize, $GHND)
+		EndIf
+
+		If $hMemory = 0 Then Return SetError(-1, 0, 0)
+		$hLock = _MemGlobalLock($hMemory)
+		If $hLock = 0 Then Return SetError(-2, 0, 0)
+
+		Switch $iFormat
+			Case $CF_TEXT, $CF_OEMTEXT
+				$tData = DllStructCreate("char[" & $iSize & "]", $hLock)
+			Case $CF_UNICODETEXT
+				$tData = DllStructCreate("wchar[" & $iSize & "]", $hLock)
+			Case Else
+				; Every other type is treated as Binary, or ASCII Strings
+				$tData = DllStructCreate("byte[" & $iSize & "]", $hLock)
+		EndSwitch
+
+		DllStructSetData($tData, 1, $vData)
+		_MemGlobalUnlock($hMemory)
+	EndIf
+
+	If Not _ClipBoard_Open(0) Then Return SetError(-5, 0, 0)
+	If Not _ClipBoard_Empty() Then
+		_ClipBoard_Close()
+		Return SetError(-6, 0, 0)
+	EndIf
+	If Not _ClipBoard_SetDataEx($hMemory, $iFormat) Then
+		_ClipBoard_Close()
+		Return SetError(-7, 0, 0)
+	EndIf
+
+	_ClipBoard_Close()
+	Return $hMemory
+EndFunc   ;==>_ClipBoard_SetData
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_SetDataEx(ByRef $hMemory, $iFormat = 1)
+	Local $aResult = DllCall("user32.dll", "handle", "SetClipboardData", "uint", $iFormat, "handle", $hMemory)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_SetDataEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _ClipBoard_SetViewer($hViewer)
+	Local $aResult = DllCall("user32.dll", "hwnd", "SetClipboardViewer", "hwnd", $hViewer)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_ClipBoard_SetViewer

+ 237 - 0
include/Color.au3

@@ -0,0 +1,237 @@
+#include-Once
+
+#include "AutoItConstants.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Color
+; AutoIt Version : 3.3.14.5
+; Language ..... : English
+; Description ...: Functions that assist with color management.
+; Author(s) .....: Ultima, Jon, Jpm
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__COLORCONSTANTS_HSLMAX = 240
+Global Const $__COLORCONSTANTS_RGBMAX = 255
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _ColorConvertHSLtoRGB
+; _ColorConvertRGBtoHSL
+; _ColorGetBlue
+; _ColorGetGreen
+; _ColorGetRed
+; _ColorGetCOLORREF
+; _ColorGetRGB
+; _ColorSetCOLORREF
+; _ColorSetRGB
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY#==============================================================================
+; __ColorConvertHueToRGB
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Ultima
+; Modified.......:
+; ===============================================================================================================================
+Func _ColorConvertHSLtoRGB($aArray)
+	If UBound($aArray) <> 3 Or UBound($aArray, $UBOUND_DIMENSIONS) <> 1 Then Return SetError(1, 0, 0)
+
+	Local $nR, $nG, $nB
+	Local $nH = Number($aArray[0]) / $__COLORCONSTANTS_HSLMAX
+	Local $nS = Number($aArray[1]) / $__COLORCONSTANTS_HSLMAX
+	Local $nL = Number($aArray[2]) / $__COLORCONSTANTS_HSLMAX
+
+	If $nS = 0 Then
+		; Grayscale
+		$nR = $nL
+		$nG = $nL
+		$nB = $nL
+	Else
+		; Chromatic
+		Local $nValA, $nValB
+
+		If $nL <= 0.5 Then
+			$nValB = $nL * ($nS + 1)
+		Else
+			$nValB = ($nL + $nS) - ($nL * $nS)
+		EndIf
+
+		$nValA = 2 * $nL - $nValB
+		$nR = __ColorConvertHueToRGB($nValA, $nValB, $nH + 1 / 3)
+		$nG = __ColorConvertHueToRGB($nValA, $nValB, $nH)
+		$nB = __ColorConvertHueToRGB($nValA, $nValB, $nH - 1 / 3)
+	EndIf
+
+	$aArray[0] = $nR * $__COLORCONSTANTS_RGBMAX
+	$aArray[1] = $nG * $__COLORCONSTANTS_RGBMAX
+	$aArray[2] = $nB * $__COLORCONSTANTS_RGBMAX
+
+	Return $aArray
+EndFunc   ;==>_ColorConvertHSLtoRGB
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __ColorConvertHueToRGB
+; Description ...: Helper function for converting HSL to RGB
+; Syntax.........: __ColorConvertHueToRGB ( $nA, $nB, $nH )
+; Parameters ....: $nA - Value A
+;                  $nB - Value B
+;                  $nH - Hue
+; Return values .: A value based on value A and value B, dependent on the inputted hue
+; Author ........: Ultima
+; Modified.......:
+; Remarks .......: For Internal Use Only
+; Related .......: See: <a href="http://www.easyrgb.com/math.php?MATH=M19#text19">EasyRGB - Color mathematics and conversion formulas.</a>
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __ColorConvertHueToRGB($nA, $nB, $nH)
+	If $nH < 0 Then $nH += 1
+	If $nH > 1 Then $nH -= 1
+
+	If (6 * $nH) < 1 Then Return $nA + ($nB - $nA) * 6 * $nH
+	If (2 * $nH) < 1 Then Return $nB
+	If (3 * $nH) < 2 Then Return $nA + ($nB - $nA) * 6 * (2 / 3 - $nH)
+	Return $nA
+EndFunc   ;==>__ColorConvertHueToRGB
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Ultima
+; Modified.......:
+; ===============================================================================================================================
+Func _ColorConvertRGBtoHSL($aArray)
+	If UBound($aArray) <> 3 Or UBound($aArray, $UBOUND_DIMENSIONS) <> 1 Then Return SetError(1, 0, 0)
+
+	Local $nH, $nS, $nL
+	Local $nR = Number($aArray[0]) / $__COLORCONSTANTS_RGBMAX
+	Local $nG = Number($aArray[1]) / $__COLORCONSTANTS_RGBMAX
+	Local $nB = Number($aArray[2]) / $__COLORCONSTANTS_RGBMAX
+
+	Local $nMax = $nR
+	If $nMax < $nG Then $nMax = $nG
+	If $nMax < $nB Then $nMax = $nB
+
+	Local $nMin = $nR
+	If $nMin > $nG Then $nMin = $nG
+	If $nMin > $nB Then $nMin = $nB
+
+	Local $nMinMaxSum = ($nMax + $nMin)
+	Local $nMinMaxDiff = ($nMax - $nMin)
+
+	; Lightness
+	$nL = $nMinMaxSum / 2
+
+	If $nMinMaxDiff = 0 Then
+		; Grayscale
+		$nH = 0
+		$nS = 0
+	Else
+		; Saturation
+		If $nL < 0.5 Then
+			$nS = $nMinMaxDiff / $nMinMaxSum
+		Else
+			$nS = $nMinMaxDiff / (2 - $nMinMaxSum)
+		EndIf
+
+		; Hue
+		Switch $nMax
+			Case $nR
+				$nH = ($nG - $nB) / (6 * $nMinMaxDiff)
+			Case $nG
+				$nH = ($nB - $nR) / (6 * $nMinMaxDiff) + 1 / 3
+			Case $nB
+				$nH = ($nR - $nG) / (6 * $nMinMaxDiff) + 2 / 3
+		EndSwitch
+		If $nH < 0 Then $nH += 1
+		If $nH > 1 Then $nH -= 1
+	EndIf
+
+	$aArray[0] = $nH * $__COLORCONSTANTS_HSLMAX
+	$aArray[1] = $nS * $__COLORCONSTANTS_HSLMAX
+	$aArray[2] = $nL * $__COLORCONSTANTS_HSLMAX
+
+	Return $aArray
+EndFunc   ;==>_ColorConvertRGBtoHSL
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Jonathan Bennett <jon at autoitscript dot com>
+; Modified.......:
+; ===============================================================================================================================
+Func _ColorGetBlue($iColor)
+	Return BitAND($iColor, 0xFF)
+EndFunc   ;==>_ColorGetBlue
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Jonathan Bennett <jon at autoitscript dot com>
+; Modified.......:
+; ===============================================================================================================================
+Func _ColorGetGreen($iColor)
+	Return BitAND(BitShift($iColor, 8), 0xFF)
+EndFunc   ;==>_ColorGetGreen
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Jonathan Bennett <jon at autoitscript dot com>
+; Modified.......:
+; ===============================================================================================================================
+Func _ColorGetRed($iColor)
+	Return BitAND(BitShift($iColor, 16), 0xFF)
+EndFunc   ;==>_ColorGetRed
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: jpm
+; Modified.......:
+; ===============================================================================================================================
+Func _ColorGetCOLORREF($iColor, Const $_iCurrentExtended = @extended)
+	If BitAND($iColor, 0xFF000000) Then Return SetError(1, 0, 0) ; invalid color value
+	Local $aColor[3]
+	$aColor[2] = BitAND(BitShift($iColor, 16), 0xFF)
+	$aColor[1] = BitAND(BitShift($iColor, 8), 0xFF)
+	$aColor[0] = BitAND($iColor, 0xFF)
+	Return SetExtended($_iCurrentExtended, $aColor)
+EndFunc   ;==>_ColorGetCOLORREF
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: jpm
+; Modified.......:
+; ===============================================================================================================================
+Func _ColorGetRGB($iColor, Const $_iCurrentExtended = @extended)
+	If BitAND($iColor, 0xFF000000) Then Return SetError(1, 0, 0) ; invalid color value
+	Local $aColor[3]
+	$aColor[0] = BitAND(BitShift($iColor, 16), 0xFF)
+	$aColor[1] = BitAND(BitShift($iColor, 8), 0xFF)
+	$aColor[2] = BitAND($iColor, 0xFF)
+	Return SetExtended($_iCurrentExtended, $aColor)
+EndFunc   ;==>_ColorGetRGB
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: jpm
+; Modified.......:
+; ===============================================================================================================================
+Func _ColorSetCOLORREF($aColor, Const $_iCurrentExtended = @extended)
+	If UBound($aColor) <> 3 Then Return SetError(1, 0, -1) ; invalid array
+	Local $iColor = 0, $iColorI
+	For $i = 2 To 0 Step -1
+		$iColor = BitShift($iColor, -8)
+		$iColorI = $aColor[$i]
+		If $iColorI < 0 Or $iColorI > 255 Then Return SetError(2, $i, -1) ; invalid color value
+		$iColor += $iColorI
+	Next
+	Return SetExtended($_iCurrentExtended, $iColor)
+EndFunc   ;==>_ColorSetCOLORREF
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: jpm
+; Modified.......:
+; ===============================================================================================================================
+Func _ColorSetRGB($aColor, Const $_iCurrentExtended = @extended)
+	If UBound($aColor) <> 3 Then Return SetError(1, 0, -1) ; invalid array
+	Local $iColor = 0, $iColorI
+	For $i = 0 To 2
+		$iColor = BitShift($iColor, -8)
+		$iColorI = $aColor[$i]
+		If $iColorI < 0 Or $iColorI > 255 Then Return SetError(2, 0, -1) ; invalid color value
+		$iColor += $iColorI
+	Next
+	Return SetExtended($_iCurrentExtended, $iColor)
+EndFunc   ;==>_ColorSetRGB

+ 66 - 0
include/ColorConstants.au3

@@ -0,0 +1,66 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants to be included in an AutoIt v3 script.
+; Author(s) .....: JLandes, Nutster, CyberSlug, Holger, ...
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+
+; Colour Constants RGB Hex
+Global Const $COLOR_AQUA = 0x00FFFF
+Global Const $COLOR_BLACK = 0x000000
+Global Const $COLOR_BLUE = 0x0000FF
+Global Const $COLOR_CREAM = 0xFFFBF0
+Global Const $COLOR_FUCHSIA = 0xFF00FF
+Global Const $COLOR_GRAY = 0x808080
+Global Const $COLOR_GREEN = 0x008000
+Global Const $COLOR_LIME = 0x00FF00
+Global Const $COLOR_MAROON = 0x8B1C62
+Global Const $COLOR_MEDBLUE = 0x0002C4
+Global Const $COLOR_MEDGRAY = 0xA0A0A4
+Global Const $COLOR_MONEYGREEN = 0xC0DCC0
+Global Const $COLOR_NAVY = 0x000080
+Global Const $COLOR_OLIVE = 0x808000
+Global Const $COLOR_PURPLE = 0x800080
+Global Const $COLOR_RED = 0xFF0000
+Global Const $COLOR_SILVER = 0xC0C0C0
+Global Const $COLOR_SKYBLUE = 0xA6CAF0
+Global Const $COLOR_TEAL = 0x008080
+Global Const $COLOR_WHITE = 0xFFFFFF
+Global Const $COLOR_YELLOW = 0xFFFF00
+
+Global Const $CLR_NONE = 0xFFFFFFFF
+Global Const $CLR_DEFAULT = 0xFF000000
+
+; Color Constants BGR Hex
+Global Const $CLR_AQUA = 0xFFFF00
+Global Const $CLR_BLACK = 0x000000
+Global Const $CLR_BLUE = 0xFF0000
+Global Const $CLR_CREAM = 0xF0FBFF
+Global Const $CLR_FUCHSIA = 0xFF00FF
+Global Const $CLR_GRAY = 0x808080
+Global Const $CLR_GREEN = 0x008000
+Global Const $CLR_LIME = 0x00FF00
+Global Const $CLR_MAROON = 0x621C8B
+Global Const $CLR_MEDBLUE = 0xC40200
+Global Const $CLR_MEDGRAY = 0xA4A0A0
+Global Const $CLR_MONEYGREEN = 0xC0DCC0
+Global Const $CLR_NAVY = 0x800000
+Global Const $CLR_OLIVE = 0x008080
+Global Const $CLR_PURPLE = 0x800080
+Global Const $CLR_RED = 0x0000FF
+Global Const $CLR_SILVER = 0xC0C0C0
+Global Const $CLR_SKYBLUE = 0xF0CAA6
+Global Const $CLR_TEAL = 0x808000
+Global Const $CLR_WHITE = 0xFFFFFF
+Global Const $CLR_YELLOW = 0x00FFFF
+
+; Color Dialog constants
+Global Const $CC_ANYCOLOR = 0x0100
+Global Const $CC_FULLOPEN = 0x0002
+Global Const $CC_RGBINIT = 0x0001
+; ===============================================================================================================================

+ 147 - 0
include/ComboConstants.au3

@@ -0,0 +1,147 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: ComboBox_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants for <a href="../appendix/GUIStyles.htm#Combo">GUI control Combo styles</a> and more.
+; Author(s) .....: Valik, Gary Frost
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; Error checking
+Global Const $CB_ERR = -1
+Global Const $CB_ERRATTRIBUTE = -3
+Global Const $CB_ERRREQUIRED = -4
+Global Const $CB_ERRSPACE = -2
+Global Const $CB_OKAY = 0
+
+; States
+Global Const $STATE_SYSTEM_INVISIBLE = 0x8000
+Global Const $STATE_SYSTEM_PRESSED = 0x8
+
+; ComboBox Styles
+Global Const $CBS_AUTOHSCROLL = 0x40 ; Automatically scrolls the text in an edit control to the right when the user types a character at the end of the line.
+Global Const $CBS_DISABLENOSCROLL = 0x800 ; Shows a disabled vertical scroll bar
+Global Const $CBS_DROPDOWN = 0x2 ; Similar to $CBS_SIMPLE, except that the list box is not displayed unless the user selects an icon next to the edit control
+Global Const $CBS_DROPDOWNLIST = 0x3 ; Similar to $CBS_DROPDOWN, except that the edit control is replaced by a static text item that displays the current selection in the list box
+Global Const $CBS_HASSTRINGS = 0x200 ; Specifies that an owner-drawn combo box contains items consisting of strings
+Global Const $CBS_LOWERCASE = 0x4000 ; Converts to lowercase all text in both the selection field and the list
+Global Const $CBS_NOINTEGRALHEIGHT = 0x400 ; Specifies that the size of the combo box is exactly the size specified by the application when it created the combo box
+Global Const $CBS_OEMCONVERT = 0x80 ; Converts text entered in the combo box edit control from the Windows character set to the OEM character set and then back to the Windows character set
+Global Const $CBS_OWNERDRAWFIXED = 0x10 ; Specifies that the owner of the list box is responsible for drawing its contents and that the items in the list box are all the same height
+Global Const $CBS_OWNERDRAWVARIABLE = 0x20 ; Specifies that the owner of the list box is responsible for drawing its contents and that the items in the list box are variable in height
+Global Const $CBS_SIMPLE = 0x1 ; Displays the list box at all times
+Global Const $CBS_SORT = 0x100 ; Automatically sorts strings added to the list box
+Global Const $CBS_UPPERCASE = 0x2000 ; Converts to uppercase all text in both the selection field and the list
+
+; ComboBox Messages
+Global Const $CBM_FIRST = 0x1700
+Global Const $CB_ADDSTRING = 0x143
+Global Const $CB_DELETESTRING = 0x144
+Global Const $CB_DIR = 0x145
+Global Const $CB_FINDSTRING = 0x14C
+Global Const $CB_FINDSTRINGEXACT = 0x158
+Global Const $CB_GETCOMBOBOXINFO = 0x164
+Global Const $CB_GETCOUNT = 0x146
+Global Const $CB_GETCUEBANNER = ($CBM_FIRST + 4)
+Global Const $CB_GETCURSEL = 0x147
+Global Const $CB_GETDROPPEDCONTROLRECT = 0x152
+Global Const $CB_GETDROPPEDSTATE = 0x157
+Global Const $CB_GETDROPPEDWIDTH = 0X15f
+Global Const $CB_GETEDITSEL = 0x140
+Global Const $CB_GETEXTENDEDUI = 0x156
+Global Const $CB_GETHORIZONTALEXTENT = 0x15d
+Global Const $CB_GETITEMDATA = 0x150
+Global Const $CB_GETITEMHEIGHT = 0x154
+Global Const $CB_GETLBTEXT = 0x148
+Global Const $CB_GETLBTEXTLEN = 0x149
+Global Const $CB_GETLOCALE = 0x15A
+Global Const $CB_GETMINVISIBLE = 0x1702
+Global Const $CB_GETTOPINDEX = 0x15b
+Global Const $CB_INITSTORAGE = 0x161
+Global Const $CB_LIMITTEXT = 0x141
+Global Const $CB_RESETCONTENT = 0x14B
+Global Const $CB_INSERTSTRING = 0x14A
+Global Const $CB_SELECTSTRING = 0x14D
+Global Const $CB_SETCUEBANNER = ($CBM_FIRST + 3)
+Global Const $CB_SETCURSEL = 0x14E
+Global Const $CB_SETDROPPEDWIDTH = 0x160
+Global Const $CB_SETEDITSEL = 0x142
+Global Const $CB_SETEXTENDEDUI = 0x155
+Global Const $CB_SETHORIZONTALEXTENT = 0x15e
+Global Const $CB_SETITEMDATA = 0x151
+Global Const $CB_SETITEMHEIGHT = 0x153
+Global Const $CB_SETLOCALE = 0x159
+Global Const $CB_SETMINVISIBLE = 0x1701
+Global Const $CB_SETTOPINDEX = 0x15c
+Global Const $CB_SHOWDROPDOWN = 0x14F
+
+; ComboBox Notifications
+Global Const $CBN_CLOSEUP = 8
+Global Const $CBN_DBLCLK = 2
+Global Const $CBN_DROPDOWN = 7
+Global Const $CBN_EDITCHANGE = 5
+Global Const $CBN_EDITUPDATE = 6
+Global Const $CBN_ERRSPACE = (-1)
+Global Const $CBN_KILLFOCUS = 4
+Global Const $CBN_SELCHANGE = 1
+Global Const $CBN_SELENDCANCEL = 10
+Global Const $CBN_SELENDOK = 9
+Global Const $CBN_SETFOCUS = 3
+
+; ComboBoxEx Styles
+; ComboBox styles supported: $CBS_DROPDOWN, $CBS_DROPDOWNLIST, $CBS_SIMPLE
+Global Const $CBES_EX_CASESENSITIVE = 0x10 ; Searches in the list will be case sensitive
+Global Const $CBES_EX_NOEDITIMAGE = 0x1 ; The edit box and the dropdown list will not display item images
+Global Const $CBES_EX_NOEDITIMAGEINDENT = 0x2 ; The edit box and the dropdown list will not display item images
+Global Const $CBES_EX_NOSIZELIMIT = 0x8 ; Allows the ComboBoxEx control to be vertically sized smaller than its contained combo box control
+
+; ComboBoxEx Messages
+Global Const $__COMBOBOXCONSTANT_WM_USER = 0X400
+Global Const $CBEM_DELETEITEM = $CB_DELETESTRING
+Global Const $CBEM_GETCOMBOCONTROL = ($__COMBOBOXCONSTANT_WM_USER + 6)
+Global Const $CBEM_GETEDITCONTROL = ($__COMBOBOXCONSTANT_WM_USER + 7)
+Global Const $CBEM_GETEXSTYLE = ($__COMBOBOXCONSTANT_WM_USER + 9)
+Global Const $CBEM_GETEXTENDEDSTYLE = ($__COMBOBOXCONSTANT_WM_USER + 9)
+Global Const $CBEM_GETIMAGELIST = ($__COMBOBOXCONSTANT_WM_USER + 3)
+Global Const $CBEM_GETITEMA = ($__COMBOBOXCONSTANT_WM_USER + 4)
+Global Const $CBEM_GETITEMW = ($__COMBOBOXCONSTANT_WM_USER + 13)
+Global Const $CBEM_GETUNICODEFORMAT = 0x2000 + 6
+Global Const $CBEM_HASEDITCHANGED = ($__COMBOBOXCONSTANT_WM_USER + 10)
+Global Const $CBEM_INSERTITEMA = ($__COMBOBOXCONSTANT_WM_USER + 1)
+Global Const $CBEM_INSERTITEMW = ($__COMBOBOXCONSTANT_WM_USER + 11)
+Global Const $CBEM_SETEXSTYLE = ($__COMBOBOXCONSTANT_WM_USER + 8)
+Global Const $CBEM_SETEXTENDEDSTYLE = ($__COMBOBOXCONSTANT_WM_USER + 14)
+Global Const $CBEM_SETIMAGELIST = ($__COMBOBOXCONSTANT_WM_USER + 2)
+Global Const $CBEM_SETITEMA = ($__COMBOBOXCONSTANT_WM_USER + 5)
+Global Const $CBEM_SETITEMW = ($__COMBOBOXCONSTANT_WM_USER + 12)
+Global Const $CBEM_SETUNICODEFORMAT = 0x2000 + 5
+Global Const $CBEM_SETWINDOWTHEME = 0x2000 + 11
+
+; ComboBoxEx Notifications
+Global Const $CBEN_FIRST = (-800)
+Global Const $CBEN_LAST = (-830)
+Global Const $CBEN_BEGINEDIT = ($CBEN_FIRST - 4)
+Global Const $CBEN_DELETEITEM = ($CBEN_FIRST - 2)
+Global Const $CBEN_DRAGBEGINA = ($CBEN_FIRST - 8)
+Global Const $CBEN_DRAGBEGINW = ($CBEN_FIRST - 9)
+Global Const $CBEN_ENDEDITA = ($CBEN_FIRST - 5)
+Global Const $CBEN_ENDEDITW = ($CBEN_FIRST - 6)
+Global Const $CBEN_GETDISPINFO = ($CBEN_FIRST - 0)
+Global Const $CBEN_GETDISPINFOA = ($CBEN_FIRST - 0)
+Global Const $CBEN_GETDISPINFOW = ($CBEN_FIRST - 7)
+Global Const $CBEN_INSERTITEM = ($CBEN_FIRST - 1)
+
+; attributes for Extended ComboBox
+Global Const $CBEIF_DI_SETITEM = 0x10000000
+Global Const $CBEIF_IMAGE = 0x2
+Global Const $CBEIF_INDENT = 0x10
+Global Const $CBEIF_LPARAM = 0x20
+Global Const $CBEIF_OVERLAY = 0x8
+Global Const $CBEIF_SELECTEDIMAGE = 0x4
+Global Const $CBEIF_TEXT = 0x1
+
+; Control default styles
+Global Const $GUI_SS_DEFAULT_COMBO = 0x00200042 ; BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL)
+; ===============================================================================================================================

+ 176 - 0
include/Constants.au3

@@ -0,0 +1,176 @@
+#include-once
+
+#include "AutoItConstants.au3"
+#include "ColorConstants.au3"
+#include "DirConstants.au3"
+#include "FileConstants.au3"
+#include "MsgBoxConstants.au3"
+#include "ProcessConstants.au3"
+#include "StringConstants.au3"
+#include "TrayConstants.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants to be included in an AutoIt v3 script.
+; Author(s) .....: JLandes, Nutster, CyberSlug, Holger, ...
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; Sets the way coords are used in the mouse and pixel functions
+; in AutoItConstants.au3
+
+; Sets how errors are handled if a Run/RunWait function fails
+; in AutoItConstants.au3
+
+; Alters the use of Caps Lock
+; in AutoItConstants.au3
+
+; Alters the method that is used to match window titles
+; in AutoItConstants.au3
+
+; Common Control Styles
+; in AutoItConstants.au3
+
+; DrawIconEx Constants
+; in WinAPIConstants.au3
+
+; EnumDisplayDevice Constants
+; in WinAPIConstants.au3
+
+; Dir Constants
+; in DirConstants.au3
+
+; DriveGetType() Constants
+; in AutoItConstants.au3
+
+; File Constants
+; in FileConstants.au3
+
+; FlashWindowEx Constants
+; in WinAPIConstants.au3
+
+; FormatMessage Constants
+; in WinAPIConstants.au3
+
+; GetWindows Constants
+; in WinAPIConstants.au3
+
+; GetWindowLong Constants
+; in WinAPIConstants.au3
+
+; Standard Icon Index Constants
+; in WinAPIConstants.au3
+
+; Image Load Constants
+; in WinAPIConstants.au3
+
+; Image Type Constants
+; in WinAPIConstants.au3
+
+; Keyboard Constants
+; Changes how keys are processed
+; in WinAPIConstants.au3
+
+; Sets the state of the Caps Lock key
+; in WinAPIConstants.au3
+
+; LoadLibraryEx Constants
+; in WinAPIConstants.au3
+
+; Reserved IDs for System Objects
+; in MenuConstants.au3
+; in ScrollBarsConstants.au3
+; in AutoItConstants.au3
+
+; Virtual Keys Constants
+; in WinAPIvkeysConstants.au3
+
+; Message Box Constants
+; Indicates the buttons displayed in the message box
+; in MsgBoxConstants.au3
+
+; Displays an icon in the message box
+; in MsgBoxConstants.au3
+
+; Indicates the default button
+; in MsgBoxConstants.au3
+
+; Indicates the modality of the dialog box
+; in MsgBoxConstants.au3
+
+; Indicates miscellaneous message box attributes
+; in MsgBoxConstants.au3
+
+; Indicates the button selected in the message box
+; in MsgBoxConstants.au3
+
+; Progress and Splash Constants
+; Indicates properties of the displayed progress or splash dialog
+; in AutoItConstants.au3
+
+; Tray Tip Constants
+; in TrayConstants.au3
+
+; Mouse Constants
+; Indicates current mouse cursor
+; in AutoItConstants.au3
+
+; Process Constants
+; Indicates the type of shutdown
+; in AutoItConstants.au3
+
+; OpenProcess Constants
+; in ProcessConstants.au3
+
+; String Constants
+; in StringConstants.au3
+; Indicates if string operations should be case sensitive
+
+; StringStripWS Constants
+; Indicates the type of stripping that should be performed
+; in StringConstants.au3
+
+; StringSplit Constants
+; in StringConstants.au3
+
+; Token Constants
+; in SecurityConstants.au3
+
+; Tray Constants
+; in TrayConstants.au3
+
+; Run Constants
+; in AutoItConstants.au3
+
+; Colour Constants
+; in ColorConstants.au3
+
+; UBound Constants
+; in AutoItConstants.au3
+
+; Mouse Event Constants
+; in AutoItConstants.au3
+
+; Reg Value type Constants
+; in AutoItConstants.au3
+
+; Z order
+; in AutoItConstants.au3
+
+; SetWindowPos Constants
+; in AutoItConstants.au3
+
+; Keywords (returned from the IsKeyword() function
+; in AutoItConstants.au3
+
+; language identifiers
+; in WinAPIlangConstants.au3
+
+; sublanguage identifiers
+; in WinAPIlangConstants.au3
+
+; Sorting IDs. (from WINNT.H)
+; in WinAPIlangConstants.au3
+; ===============================================================================================================================

+ 727 - 0
include/Crypt.au3

@@ -0,0 +1,727 @@
+#include-once
+
+#include "FileConstants.au3"
+#include "WinAPIError.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Crypt
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions for encrypting and hashing data.
+; Author(s) .....: Andreas Karlsson (monoceres), jchd
+; Dll(s) ........: Advapi32.dll
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _Crypt_DecryptData
+; _Crypt_DecryptFile
+; _Crypt_DeriveKey
+; _Crypt_DestroyKey
+; _Crypt_EncryptData
+; _Crypt_EncryptFile
+; _Crypt_GenRandom
+; _Crypt_HashData
+; _Crypt_HashFile
+; _Crypt_Shutdown
+; _Crypt_Startup
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; __Crypt_Context
+; __Crypt_ContextSet
+; __Crypt_DllHandle
+; __Crypt_DllHandleSet
+; __Crypt_GetCalgFromCryptKey
+; __Crypt_RefCount
+; __Crypt_RefCountDec
+; __Crypt_RefCountInc
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $PROV_RSA_FULL = 0x1
+Global Const $PROV_RSA_AES = 24
+Global Const $CRYPT_VERIFYCONTEXT = 0xF0000000
+Global Const $HP_HASHSIZE = 0x0004
+Global Const $HP_HASHVAL = 0x0002
+Global Const $CRYPT_EXPORTABLE = 0x00000001
+Global Const $CRYPT_USERDATA = 1
+Global Const $KP_ALGID = 0x00000007
+
+Global Const $CALG_MD2 = 0x00008001
+Global Const $CALG_MD4 = 0x00008002
+Global Const $CALG_MD5 = 0x00008003
+Global Const $CALG_SHA1 = 0x00008004
+Global Const $CALG_SHA_256 = 0x0000800c
+Global Const $CALG_SHA_384 = 0x0000800d
+Global Const $CALG_SHA_512 = 0x0000800e
+Global Const $CALG_3DES = 0x00006603
+Global Const $CALG_AES_128 = 0x0000660e
+Global Const $CALG_AES_192 = 0x0000660f
+Global Const $CALG_AES_256 = 0x00006610
+Global Const $CALG_DES = 0x00006601
+Global Const $CALG_RC2 = 0x00006602
+Global Const $CALG_RC4 = 0x00006801
+
+Global Const $CALG_USERKEY = 0
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_aCryptInternalData[3]
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Andreas Karlsson (monoceres)
+; Modified ......: jpm
+; ===============================================================================================================================
+Func _Crypt_Startup()
+	If __Crypt_RefCount() = 0 Then
+		Local $hAdvapi32 = DllOpen("Advapi32.dll")
+		If $hAdvapi32 = -1 Then Return SetError(1001, 0, False)
+		__Crypt_DllHandleSet($hAdvapi32)
+		Local $iProviderID = $PROV_RSA_AES
+		Local $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptAcquireContext", "handle*", 0, "ptr", 0, "ptr", 0, "dword", $iProviderID, "dword", $CRYPT_VERIFYCONTEXT)
+		If @error Or Not $aRet[0] Then
+			Local $iError = @error + 1002, $iExtended = @extended
+			If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+			DllClose(__Crypt_DllHandle())
+			Return SetError($iError, $iExtended, False)
+		Else
+			__Crypt_ContextSet($aRet[1])
+			; Fall through to success.
+		EndIf
+	EndIf
+	__Crypt_RefCountInc()
+	Return True
+EndFunc   ;==>_Crypt_Startup
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Andreas Karlsson (monoceres)
+; Modified ......:
+; ===============================================================================================================================
+Func _Crypt_Shutdown()
+	__Crypt_RefCountDec()
+	If __Crypt_RefCount() = 0 Then
+		DllCall(__Crypt_DllHandle(), "bool", "CryptReleaseContext", "handle", __Crypt_Context(), "dword", 0)
+		DllClose(__Crypt_DllHandle())
+	EndIf
+EndFunc   ;==>_Crypt_Shutdown
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Andreas Karlsson (monoceres)
+; Modified ......: jpm
+; ===============================================================================================================================
+Func _Crypt_DeriveKey($vPassword, $iAlgID, $iHashPasswordID = $CALG_MD5)
+	Local $aRet = 0, _
+			$tBuff = 0, $hCryptHash = 0, _
+			$iError = 0, $iExtended = 0, _
+			$vReturn = 0
+
+	_Crypt_Startup()
+	If @error Then Return SetError(@error, @extended, -1)
+
+	Do
+		; Create Hash object
+		$aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptCreateHash", "handle", __Crypt_Context(), "uint", $iHashPasswordID, "ptr", 0, "dword", 0, "handle*", 0)
+		If @error Or Not $aRet[0] Then
+			$iError = @error + 10
+			$iExtended = @extended
+			If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+			$vReturn = -1
+			ExitLoop
+		EndIf
+
+		$hCryptHash = $aRet[5]
+		$tBuff = DllStructCreate("byte[" & BinaryLen($vPassword) & "]")
+		DllStructSetData($tBuff, 1, $vPassword)
+		$aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptHashData", "handle", $hCryptHash, "struct*", $tBuff, "dword", DllStructGetSize($tBuff), "dword", $CRYPT_USERDATA)
+		If @error Or Not $aRet[0] Then
+			$iError = @error + 20
+			$iExtended = @extended
+			If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+			$vReturn = -1
+			ExitLoop
+		EndIf
+
+		; Create key
+		$aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptDeriveKey", "handle", __Crypt_Context(), "uint", $iAlgID, "handle", $hCryptHash, "dword", $CRYPT_EXPORTABLE, "handle*", 0)
+		If @error Or Not $aRet[0] Then
+			$iError = @error + 30
+			$iExtended = @extended
+			If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+			$vReturn = -1
+			ExitLoop
+		EndIf
+		$vReturn = $aRet[5]
+	Until True
+	If $hCryptHash <> 0 Then DllCall(__Crypt_DllHandle(), "bool", "CryptDestroyHash", "handle", $hCryptHash)
+
+	Return SetError($iError, $iExtended, $vReturn)
+EndFunc   ;==>_Crypt_DeriveKey
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Andreas Karlsson (monoceres)
+; Modified ......: jpm
+; ===============================================================================================================================
+Func _Crypt_DestroyKey($hCryptKey)
+	Local $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptDestroyKey", "handle", $hCryptKey)
+	Local $iError = @error, $iExtended = @extended
+	If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+	_Crypt_Shutdown()
+	If $iError Or Not $aRet[0] Then
+		Return SetError($iError + 10, $iExtended, False)
+	Else
+		Return True
+	EndIf
+EndFunc   ;==>_Crypt_DestroyKey
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Andreas Karlsson (monoceres)
+; Modified ......: jchd, jpm
+; ===============================================================================================================================
+Func _Crypt_EncryptData($vData, $vCryptKey, $iAlgID, $bFinal = True)
+
+	Switch $iAlgID
+		Case $CALG_USERKEY
+			Local $iCalgUsed = __Crypt_GetCalgFromCryptKey($vCryptKey)
+			If @error Then Return SetError(@error, @extended, -1)
+			If $iCalgUsed = $CALG_RC4 Then ContinueCase
+		Case $CALG_RC4
+			If BinaryLen($vData) = 0 Then Return SetError(0, 0, Binary(''))
+	EndSwitch
+
+	Local $iReqBuffSize = 0, _
+			$aRet = 0, _
+			$tBuff = 0, _
+			$iError = 0, $iExtended = 0, _
+			$vReturn = 0
+
+	_Crypt_Startup()
+	If @error Then Return SetError(@error, @extended, -1)
+
+	Do
+		If $iAlgID <> $CALG_USERKEY Then
+			$vCryptKey = _Crypt_DeriveKey($vCryptKey, $iAlgID)
+			If @error Then
+				$iError = @error
+				$iExtended = @extended
+				$vReturn = -1
+				ExitLoop
+			EndIf
+		EndIf
+
+		$aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptEncrypt", "handle", $vCryptKey, "handle", 0, "bool", $bFinal, "dword", 0, "ptr", 0, _
+				"dword*", BinaryLen($vData), "dword", 0)
+		If @error Or Not $aRet[0] Then
+			$iError = @error + 50
+			$iExtended = @extended
+			If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+			$vReturn = -1
+			ExitLoop
+		EndIf
+
+		$iReqBuffSize = $aRet[6]
+		$tBuff = DllStructCreate("byte[" & $iReqBuffSize + 1 & "]")
+		DllStructSetData($tBuff, 1, $vData)
+		$aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptEncrypt", "handle", $vCryptKey, "handle", 0, "bool", $bFinal, "dword", 0, "struct*", $tBuff, _
+				"dword*", BinaryLen($vData), "dword", $iReqBuffSize)
+		If @error Or Not $aRet[0] Then
+			$iError = @error + 60
+			$iExtended = @extended
+			If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+			$vReturn = -1
+			ExitLoop
+		EndIf
+		$vReturn = BinaryMid(DllStructGetData($tBuff, 1), 1, $iReqBuffSize)
+	Until True
+
+	If $iAlgID <> $CALG_USERKEY Then _Crypt_DestroyKey($vCryptKey)
+	_Crypt_Shutdown()
+
+	Return SetError($iError, $iExtended, $vReturn)
+EndFunc   ;==>_Crypt_EncryptData
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Andreas Karlsson (monoceres)
+; Modified ......: jchd, jpm
+; ===============================================================================================================================
+Func _Crypt_DecryptData($vData, $vCryptKey, $iAlgID, $bFinal = True)
+
+	Switch $iAlgID
+		Case $CALG_USERKEY
+			Local $iCalgUsed = __Crypt_GetCalgFromCryptKey($vCryptKey)
+			If @error Then Return SetError(@error, @extended, -1)
+			If $iCalgUsed = $CALG_RC4 Then ContinueCase
+		Case $CALG_RC4
+			If BinaryLen($vData) = 0 Then Return SetError(0, 0, Binary(''))
+	EndSwitch
+
+	Local $aRet = 0, _
+			$tBuff = 0, $tTempStruct = 0, _
+			$iError = 0, $iExtended = 0, $iPlainTextSize = 0, _
+			$vReturn = 0
+
+	_Crypt_Startup()
+	If @error Then Return SetError(@error, @extended, -1)
+
+	Do
+		If $iAlgID <> $CALG_USERKEY Then
+			$vCryptKey = _Crypt_DeriveKey($vCryptKey, $iAlgID)
+			If @error Then
+				$iError = @error
+				$iExtended = @extended
+				$vReturn = -1
+				ExitLoop
+			EndIf
+		EndIf
+
+		$tBuff = DllStructCreate("byte[" & BinaryLen($vData) + 1000 & "]")
+		If BinaryLen($vData) > 0 Then DllStructSetData($tBuff, 1, $vData)
+		$aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptDecrypt", "handle", $vCryptKey, "handle", 0, "bool", $bFinal, "dword", 0, "struct*", $tBuff, "dword*", BinaryLen($vData))
+		If @error Or Not $aRet[0] Then
+			$iError = @error + 70
+			$iExtended = @extended
+			If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+			$vReturn = -1
+			ExitLoop
+		EndIf
+
+		$iPlainTextSize = $aRet[6]
+		$tTempStruct = DllStructCreate("byte[" & $iPlainTextSize + 1 & "]", DllStructGetPtr($tBuff))
+		$vReturn = BinaryMid(DllStructGetData($tTempStruct, 1), 1, $iPlainTextSize)
+	Until True
+
+	If $iAlgID <> $CALG_USERKEY Then _Crypt_DestroyKey($vCryptKey)
+	_Crypt_Shutdown()
+
+	Return SetError($iError, $iExtended, $vReturn)
+EndFunc   ;==>_Crypt_DecryptData
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Andreas Karlsson (monoceres)
+; Modified ......: jpm
+; ===============================================================================================================================
+Func _Crypt_HashData($vData, $iAlgID, $bFinal = True, $hCryptHash = 0)
+	Local $aRet = 0, _
+			$tBuff = 0, _
+			$iError = 0, $iExtended = 0, $iHashSize = 0, _
+			$vReturn = 0
+
+	_Crypt_Startup()
+	If @error Then Return SetError(@error, @extended, -1)
+
+	Do
+		If $hCryptHash = 0 Then
+			; Create Hash object
+			$aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptCreateHash", "handle", __Crypt_Context(), "uint", $iAlgID, "ptr", 0, "dword", 0, "handle*", 0)
+			If @error Or Not $aRet[0] Then
+				$iError = @error + 10
+				$iExtended = @extended
+				If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+				$vReturn = -1
+				ExitLoop
+			EndIf
+			$hCryptHash = $aRet[5]
+		EndIf
+
+		$tBuff = DllStructCreate("byte[" & BinaryLen($vData) & "]")
+		DllStructSetData($tBuff, 1, $vData)
+
+		$aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptHashData", "handle", $hCryptHash, "struct*", $tBuff, "dword", DllStructGetSize($tBuff), "dword", $CRYPT_USERDATA)
+		If @error Or Not $aRet[0] Then
+			$iError = @error + 20
+			$iExtended = @extended
+			If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+			$vReturn = -1
+			ExitLoop
+		EndIf
+
+		If $bFinal Then
+			$aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptGetHashParam", "handle", $hCryptHash, "dword", $HP_HASHSIZE, "dword*", 0, "dword*", 4, "dword", 0)
+			If @error Or Not $aRet[0] Then
+				$iError = @error + 30
+				$iExtended = @extended
+				If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+				$vReturn = -1
+				ExitLoop
+			EndIf
+			$iHashSize = $aRet[3]
+
+			; Get Hash
+			$tBuff = DllStructCreate("byte[" & $iHashSize & "]")
+			$aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptGetHashParam", "handle", $hCryptHash, "dword", $HP_HASHVAL, "struct*", $tBuff, "dword*", $iHashSize, "dword", 0)
+			If @error Or Not $aRet[0] Then
+				$iError = @error + 40
+				$iExtended = @extended
+				If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+				$vReturn = -1
+				ExitLoop
+			EndIf
+			$vReturn = DllStructGetData($tBuff, 1)
+		Else
+			$vReturn = $hCryptHash
+		EndIf
+	Until True
+
+	; Cleanup and return hash
+	If $hCryptHash <> 0 And $bFinal Then DllCall(__Crypt_DllHandle(), "bool", "CryptDestroyHash", "handle", $hCryptHash)
+
+	_Crypt_Shutdown()
+
+	Return SetError($iError, $iExtended, $vReturn)
+EndFunc   ;==>_Crypt_HashData
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Andreas Karlsson (monoceres)
+; Modified ......: jpm
+; ===============================================================================================================================
+Func _Crypt_HashFile($sFilePath, $iAlgID)
+	Local $dTempData = 0, _
+			$hFile = 0, $hHashObject = 0, _
+			$iError = 0, $iExtended = 0, _
+			$vReturn = 0
+
+	_Crypt_Startup()
+	If @error Then Return SetError(@error, @extended, -1)
+
+	Do
+		$hFile = FileOpen($sFilePath, $FO_BINARY)
+		If $hFile = -1 Then
+			$iError = 1
+			$iExtended = _WinAPI_GetLastError()
+			$vReturn = -1
+			ExitLoop
+		EndIf
+
+		Do
+			$dTempData = FileRead($hFile, 512 * 1024)
+			If @error Then
+				$vReturn = _Crypt_HashData($dTempData, $iAlgID, True, $hHashObject)
+				If @error Then
+					$iError = @error
+					$iExtended = @extended
+					$vReturn = -1
+					ExitLoop 2
+				EndIf
+				ExitLoop 2
+			Else
+				$hHashObject = _Crypt_HashData($dTempData, $iAlgID, False, $hHashObject)
+				If @error Then
+					$iError = @error + 100
+					$iExtended = @extended
+					$vReturn = -1
+					ExitLoop 2
+				EndIf
+			EndIf
+		Until False
+	Until True
+
+	_Crypt_Shutdown()
+	If $hFile <> -1 Then FileClose($hFile)
+
+	Return SetError($iError, $iExtended, $vReturn)
+EndFunc   ;==>_Crypt_HashFile
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Andreas Karlsson (monoceres)
+; Modified ......: jpm
+; ===============================================================================================================================
+Func _Crypt_EncryptFile($sSourceFile, $sDestinationFile, $vCryptKey, $iAlgID)
+	Local $dTempData = 0, _
+			$hInFile = 0, $hOutFile = 0, _
+			$iError = 0, $iExtended = 0, $iFileSize = FileGetSize($sSourceFile), $iRead = 0, _
+			$bReturn = True
+
+	_Crypt_Startup()
+	If @error Then Return SetError(@error, @extended, -1)
+
+	Do
+		If $iAlgID <> $CALG_USERKEY Then
+			$vCryptKey = _Crypt_DeriveKey($vCryptKey, $iAlgID)
+			If @error Then
+				$iError = @error
+				$iExtended = @extended
+				$bReturn = False
+				ExitLoop
+			EndIf
+		EndIf
+
+		$hInFile = FileOpen($sSourceFile, $FO_BINARY)
+		If $hInFile = -1 Then
+			$iError = 2
+			$iExtended = _WinAPI_GetLastError()
+			$bReturn = False
+			ExitLoop
+		EndIf
+		$hOutFile = FileOpen($sDestinationFile, $FO_OVERWRITE + $FO_CREATEPATH + $FO_BINARY)
+		If $hOutFile = -1 Then
+			$iError = 3
+			$iExtended = _WinAPI_GetLastError()
+			$bReturn = False
+			ExitLoop
+		EndIf
+
+		Do
+			$dTempData = FileRead($hInFile, 1024 * 1024)
+			$iRead += BinaryLen($dTempData)
+			If $iRead = $iFileSize Then
+				$dTempData = _Crypt_EncryptData($dTempData, $vCryptKey, $CALG_USERKEY, True)
+				If @error Then
+					$iError = @error + 400
+					$iExtended = @extended
+					$bReturn = False
+				EndIf
+				FileWrite($hOutFile, $dTempData)
+				ExitLoop 2
+			Else
+				$dTempData = _Crypt_EncryptData($dTempData, $vCryptKey, $CALG_USERKEY, False)
+				If @error Then
+					$iError = @error + 500
+					$iExtended = @extended
+					$bReturn = False
+					ExitLoop 2
+				EndIf
+				FileWrite($hOutFile, $dTempData)
+			EndIf
+		Until False
+	Until True
+
+	If $iAlgID <> $CALG_USERKEY Then _Crypt_DestroyKey($vCryptKey)
+	_Crypt_Shutdown()
+	If $hInFile <> -1 Then FileClose($hInFile)
+	If $hOutFile <> -1 Then FileClose($hOutFile)
+
+	Return SetError($iError, $iExtended, $bReturn)
+EndFunc   ;==>_Crypt_EncryptFile
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Andreas Karlsson (monoceres)
+; Modified ......: jpm
+; ===============================================================================================================================
+Func _Crypt_DecryptFile($sSourceFile, $sDestinationFile, $vCryptKey, $iAlgID)
+	Local $dTempData = 0, _
+			$hInFile = 0, $hOutFile = 0, _
+			$iError = 0, $iExtended = 0, $iFileSize = FileGetSize($sSourceFile), $iRead = 0, _
+			$bReturn = True
+
+	_Crypt_Startup()
+	If @error Then Return SetError(@error, @extended, -1)
+
+	Do
+		If $iAlgID <> $CALG_USERKEY Then
+			$vCryptKey = _Crypt_DeriveKey($vCryptKey, $iAlgID)
+			If @error Then
+				$iError = @error
+				$iExtended = @extended
+				$bReturn = False
+				ExitLoop
+			EndIf
+		EndIf
+
+		$hInFile = FileOpen($sSourceFile, $FO_BINARY)
+		If $hInFile = -1 Then
+			$iError = 2
+			$iExtended = _WinAPI_GetLastError()
+			$bReturn = False
+			ExitLoop
+		EndIf
+		$hOutFile = FileOpen($sDestinationFile, $FO_OVERWRITE + $FO_CREATEPATH + $FO_BINARY)
+		If $hOutFile = -1 Then
+			$iError = 3
+			$iExtended = _WinAPI_GetLastError()
+			$bReturn = False
+			ExitLoop
+		EndIf
+
+		Do
+			$dTempData = FileRead($hInFile, 1024 * 1024)
+			$iRead += BinaryLen($dTempData)
+			If $iRead = $iFileSize Then
+				$dTempData = _Crypt_DecryptData($dTempData, $vCryptKey, $CALG_USERKEY, True)
+				If @error Then
+					$iError = @error + 400
+					$iExtended = @extended
+					$bReturn = False
+				EndIf
+				FileWrite($hOutFile, $dTempData)
+				ExitLoop 2
+			Else
+				$dTempData = _Crypt_DecryptData($dTempData, $vCryptKey, $CALG_USERKEY, False)
+				If @error Then
+					$iError = @error + 500
+					$iExtended = @extended
+					$bReturn = False
+					ExitLoop 2
+				EndIf
+				FileWrite($hOutFile, $dTempData)
+			EndIf
+		Until False
+	Until True
+
+	If $iAlgID <> $CALG_USERKEY Then _Crypt_DestroyKey($vCryptKey)
+	_Crypt_Shutdown()
+	If $hInFile <> -1 Then FileClose($hInFile)
+	If $hOutFile <> -1 Then FileClose($hOutFile)
+
+	Return SetError($iError, $iExtended, $bReturn)
+EndFunc   ;==>_Crypt_DecryptFile
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Erik Pilsits (wraithdu)
+; Modified ......: jpm
+; ===============================================================================================================================
+Func _Crypt_GenRandom($pBuffer, $iSize)
+	_Crypt_Startup()
+	If @error Then Return SetError(@error, @extended, False)
+
+	Local $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptGenRandom", "handle", __Crypt_Context(), "dword", $iSize, "struct*", $pBuffer)
+	Local $iError = @error, $iExtended = @extended
+	If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+	_Crypt_Shutdown()
+	If $iError Or (Not $aRet[0]) Then
+		Return SetError($iError + 10, $iExtended, False)
+	Else
+		Return True
+	EndIf
+EndFunc   ;==>_Crypt_GenRandom
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Crypt_RefCount
+; Description ...: Retrieves the internal reference count.
+; Syntax.........: __Crypt_RefCount ( )
+; Parameters ....:
+; Return values .: The current internal reference count.
+; Author ........: Valik
+; Modified.......:
+; Remarks .......: For Internal Use Only
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Crypt_RefCount()
+	Return $__g_aCryptInternalData[0]
+EndFunc   ;==>__Crypt_RefCount
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Crypt_RefCountInc
+; Description ...: Increments the internal reference count.
+; Syntax.........: __Crypt_RefCountInc ( )
+; Parameters ....:
+; Return values .:
+; Author ........: Valik
+; Modified.......:
+; Remarks .......: For Internal Use Only
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Crypt_RefCountInc()
+	$__g_aCryptInternalData[0] += 1
+EndFunc   ;==>__Crypt_RefCountInc
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Crypt_RefCountDec
+; Description ...: Decrements the internal reference count.
+; Syntax.........: __Crypt_RefCountDec ( )
+; Parameters ....:
+; Return values .:
+; Author ........: Valik
+; Modified.......:
+; Remarks .......: For Internal Use Only
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Crypt_RefCountDec()
+	If $__g_aCryptInternalData[0] > 0 Then $__g_aCryptInternalData[0] -= 1
+EndFunc   ;==>__Crypt_RefCountDec
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Crypt_DllHandle
+; Description ...: Retrieves the internal DLL handle.
+; Syntax.........: __Crypt_DllHandle ( )
+; Parameters ....:
+; Return values .: The current internal DLL handle.
+; Author ........: Valik
+; Modified.......:
+; Remarks .......: For Internal Use Only
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Crypt_DllHandle()
+	Return $__g_aCryptInternalData[1]
+EndFunc   ;==>__Crypt_DllHandle
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Crypt_DllHandleSet
+; Description ...: Stores the internal DLL handle.
+; Syntax.........: __Crypt_DllHandleSet ( $hAdvapi32 )
+; Parameters ....: $hAdvapi32 - The new handle to store.
+; Return values .:
+; Author ........: Valik
+; Modified.......:
+; Remarks .......: For Internal Use Only
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Crypt_DllHandleSet($hAdvapi32)
+	$__g_aCryptInternalData[1] = $hAdvapi32
+EndFunc   ;==>__Crypt_DllHandleSet
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Crypt_Context
+; Description ...: Retrieves the internal crypt context.
+; Syntax.........: __Crypt_Context ( )
+; Parameters ....:
+; Return values .: The current internal crypt context.
+; Author ........: Valik
+; Modified.......:
+; Remarks .......: For Internal Use Only
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Crypt_Context()
+	Return $__g_aCryptInternalData[2]
+EndFunc   ;==>__Crypt_Context
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Crypt_ContextSet
+; Description ...: Stores the internal crypt context.
+; Syntax.........: __Crypt_ContextSet ( $hCryptContext )
+; Parameters ....: $hCryptContext - The new crypt context to store.
+; Return values .:
+; Author ........: Valik
+; Modified.......:
+; Remarks .......: For Internal Use Only
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Crypt_ContextSet($hCryptContext)
+	$__g_aCryptInternalData[2] = $hCryptContext
+EndFunc   ;==>__Crypt_ContextSet
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Crypt_GetCalgFromCryptKey
+; Description ...: Retrieves the crypto-algorithm use by a USERKEY.
+; Syntax.........: __Crypt_GetCalgFromCryptKey($vCryptKey)
+; Parameters ....: $vCryptKey - The USERKEY handle.
+; Return values .:
+; Author ........: jchd
+; Modified.......: jpm
+; Remarks .......: For Internal Use Only
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Crypt_GetCalgFromCryptKey($vCryptKey)
+	Local $tAlgId = DllStructCreate("uint")
+	Local $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptGetKeyParam", "handle", $vCryptKey, "dword", $KP_ALGID, "struct*", $tAlgId, "dword*", DllStructGetSize($tAlgId), "dword", 0)
+	Local $iError = @error, $iExtended = @extended
+	If Not $aRet[0] Then $iExtended = _WinAPI_GetLastError()
+	If $iError Or Not $aRet[0] Then
+		Return SetError($iError + 80, $iExtended, $CRYPT_USERDATA)
+	Else
+		Return DllStructGetData($tAlgId, 1)
+	EndIf
+EndFunc   ;==>__Crypt_GetCalgFromCryptKey

ファイルの差分が大きいため隠しています
+ 1752 - 0
include/Date.au3


+ 147 - 0
include/DateTimeConstants.au3

@@ -0,0 +1,147 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: DateTime_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants for <a href="../appendix/GUIStyles.htm#Date">GUI control Date styles</a> and much more.
+; Author(s) .....: Valik, Gary Frost
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; Date
+Global Const $DTS_SHORTDATEFORMAT = 0
+Global Const $DTS_UPDOWN = 1
+Global Const $DTS_SHOWNONE = 2
+Global Const $DTS_LONGDATEFORMAT = 4
+Global Const $DTS_TIMEFORMAT = 9
+Global Const $DTS_RIGHTALIGN = 32
+Global Const $DTS_SHORTDATECENTURYFORMAT = 0x0000000C ; The year is a four-digit field
+Global Const $DTS_APPCANPARSE = 0x00000010 ; Allows the owner to parse user input and take necessary action
+
+; _DateDayOfWeek
+Global Const $DMW_LONGNAME = 0
+Global Const $DMW_SHORTNAME = 1
+Global Const $DMW_LOCALE_LONGNAME = 2
+Global Const $DMW_LOCALE_SHORTNAME = 3
+
+; Success/Failure
+Global Const $GDT_ERROR = -1
+Global Const $GDT_VALID = 0
+Global Const $GDT_NONE = 1
+Global Const $GDTR_MIN = 0x0001
+Global Const $GDTR_MAX = 0x0002
+
+; MonthCal
+Global Const $MCHT_NOWHERE = 0x00000000
+Global Const $MCHT_TITLE = 0x00010000
+Global Const $MCHT_CALENDAR = 0x00020000
+Global Const $MCHT_TODAYLINK = 0x00030000
+Global Const $MCHT_NEXT = 0x01000000
+Global Const $MCHT_PREV = 0x02000000
+
+Global Const $MCHT_TITLEBK = 0x00010000
+Global Const $MCHT_TITLEMONTH = 0x00010001
+Global Const $MCHT_TITLEYEAR = 0x00010002
+Global Const $MCHT_TITLEBTNNEXT = 0x01010003
+Global Const $MCHT_TITLEBTNPREV = 0x02010003
+
+Global Const $MCHT_CALENDARBK = 0x00020000
+Global Const $MCHT_CALENDARDATE = 0x00020001
+Global Const $MCHT_CALENDARDAY = 0x00020002
+Global Const $MCHT_CALENDARWEEKNUM = 0x00020003
+Global Const $MCHT_CALENDARDATENEXT = 0x01020000
+Global Const $MCHT_CALENDARDATEPREV = 0x02020000
+
+; Month Calendar Styles
+Global Const $MCS_DAYSTATE = 0x0001 ; The control sends $MCN_GETDAYSTATE notifications to request information
+Global Const $MCS_MULTISELECT = 0x0002
+Global Const $MCS_WEEKNUMBERS = 0x0004
+Global Const $MCS_NOTODAYCIRCLE = 0x0008
+Global Const $MCS_NOTODAY = 0x0010
+Global Const $MCS_NOTRAILINGDATES = 0x0040
+Global Const $MCS_SHORTDAYSOFWEEK = 0x0080
+Global Const $MCS_NOSELCHANGEONNAV = 0x0100
+
+; Month Calendar Messages
+Global Const $MCM_FIRST = 0x1000
+Global Const $MCM_GETCALENDARBORDER = ($MCM_FIRST + 31)
+Global Const $MCM_GETCALENDARCOUNT = ($MCM_FIRST + 23)
+Global Const $MCM_GETCALENDARGRIDINFO = ($MCM_FIRST + 24)
+Global Const $MCM_GETCALID = ($MCM_FIRST + 27)
+Global Const $MCM_GETCOLOR = ($MCM_FIRST + 11)
+Global Const $MCM_GETCURRENTVIEW = ($MCM_FIRST + 22)
+Global Const $MCM_GETCURSEL = ($MCM_FIRST + 1)
+Global Const $MCM_GETFIRSTDAYOFWEEK = ($MCM_FIRST + 16)
+Global Const $MCM_GETMAXSELCOUNT = ($MCM_FIRST + 3)
+Global Const $MCM_GETMAXTODAYWIDTH = ($MCM_FIRST + 21)
+Global Const $MCM_GETMINREQRECT = ($MCM_FIRST + 9)
+Global Const $MCM_GETMONTHDELTA = ($MCM_FIRST + 19)
+Global Const $MCM_GETMONTHRANGE = ($MCM_FIRST + 7)
+Global Const $MCM_GETRANGE = ($MCM_FIRST + 17)
+Global Const $MCM_GETSELRANGE = ($MCM_FIRST + 5)
+Global Const $MCM_GETTODAY = ($MCM_FIRST + 13)
+Global Const $MCM_GETUNICODEFORMAT = 0x2000 + 6
+Global Const $MCM_HITTEST = ($MCM_FIRST + 14)
+Global Const $MCM_SETCALENDARBORDER = ($MCM_FIRST + 30)
+Global Const $MCM_SETCALID = ($MCM_FIRST + 28)
+Global Const $MCM_SETCOLOR = ($MCM_FIRST + 10)
+Global Const $MCM_SETCURRENTVIEW = ($MCM_FIRST + 32)
+Global Const $MCM_SETCURSEL = ($MCM_FIRST + 2)
+Global Const $MCM_SETDAYSTATE = ($MCM_FIRST + 8)
+Global Const $MCM_SETFIRSTDAYOFWEEK = ($MCM_FIRST + 15)
+Global Const $MCM_SETMAXSELCOUNT = ($MCM_FIRST + 4)
+Global Const $MCM_SETMONTHDELTA = ($MCM_FIRST + 20)
+Global Const $MCM_SETRANGE = ($MCM_FIRST + 18)
+Global Const $MCM_SETSELRANGE = ($MCM_FIRST + 6)
+Global Const $MCM_SETTODAY = ($MCM_FIRST + 12)
+Global Const $MCM_SETUNICODEFORMAT = 0x2000 + 5
+Global Const $MCM_SIZERECTTOMIN = ($MCM_FIRST + 29)
+
+; Month Calendar Notifications
+Global Const $MCN_FIRST = -746
+Global Const $MCN_SELCHANGE = ($MCN_FIRST - 3) ; The currently selected date or range of dates changed
+Global Const $MCN_GETDAYSTATE = ($MCN_FIRST - 1) ; Request information about how individual days should be displayed
+Global Const $MCN_SELECT = ($MCN_FIRST) ; The user makes an explicit date selection
+Global Const $MCN_VIEWCHANGE = ($MCN_FIRST - 4)
+
+Global Const $MCSC_BACKGROUND = 0
+Global Const $MCSC_MONTHBK = 4
+Global Const $MCSC_TEXT = 1
+Global Const $MCSC_TITLEBK = 2
+Global Const $MCSC_TITLETEXT = 3
+Global Const $MCSC_TRAILINGTEXT = 5
+
+; Date Time Picker Messages
+Global Const $DTM_FIRST = 0x1000
+Global Const $DTM_GETSYSTEMTIME = $DTM_FIRST + 1
+Global Const $DTM_SETSYSTEMTIME = $DTM_FIRST + 2
+Global Const $DTM_GETRANGE = $DTM_FIRST + 3
+Global Const $DTM_SETRANGE = $DTM_FIRST + 4
+Global Const $DTM_SETFORMAT = $DTM_FIRST + 5
+Global Const $DTM_SETMCCOLOR = $DTM_FIRST + 6
+Global Const $DTM_GETMCCOLOR = $DTM_FIRST + 7
+Global Const $DTM_GETMONTHCAL = $DTM_FIRST + 8
+Global Const $DTM_SETMCFONT = $DTM_FIRST + 9
+Global Const $DTM_GETMCFONT = $DTM_FIRST + 10
+Global Const $DTM_SETFORMATW = $DTM_FIRST + 50 ; [Unicode]
+
+; Date Time Picker Notifications
+Global Const $DTN_FIRST = -740
+Global Const $DTN_FIRST2 = -753
+Global Const $DTN_DATETIMECHANGE = $DTN_FIRST2 - 6 ; Sent whenever a change occurs
+Global Const $DTN_USERSTRING = $DTN_FIRST2 - 5 ; Sent when a user finishes editing a string in the control
+Global Const $DTN_WMKEYDOWN = $DTN_FIRST2 - 4 ; Sent when the user types in a callback field
+Global Const $DTN_FORMAT = $DTN_FIRST2 - 3 ; Sent to request text to be displayed in a callback field
+Global Const $DTN_FORMATQUERY = $DTN_FIRST2 - 2 ; Sent to retrieve the size of the callback field string
+Global Const $DTN_DROPDOWN = $DTN_FIRST2 - 1 ; Sent when the user activates the drop-down month calendar
+Global Const $DTN_CLOSEUP = $DTN_FIRST2 - 0 ; Sent when the user closes the drop-down month calendar
+Global Const $DTN_USERSTRINGW = $DTN_FIRST - 5 ; [Unicode] Sent when a user finishes editing a string in the control
+Global Const $DTN_WMKEYDOWNW = $DTN_FIRST - 4 ; [Unicode] Sent when the user types in a callback field
+Global Const $DTN_FORMATW = $DTN_FIRST - 3 ; [Unicode] Sent to request text to be displayed in a callback field
+Global Const $DTN_FORMATQUERYW = $DTN_FIRST - 2 ; [Unicode] Sent to retrieve the size of the callback field string
+
+; Control default styles
+Global Const $GUI_SS_DEFAULT_DATE = $DTS_LONGDATEFORMAT
+Global Const $GUI_SS_DEFAULT_MONTHCAL = 0
+; ===============================================================================================================================

+ 598 - 0
include/Debug_En.au3

@@ -0,0 +1,598 @@
+#include-once
+
+#include "ArrayDisplayInternals.au3"
+#include "AutoItConstants.au3"
+#include "MsgBoxConstants.au3"
+#include "SendMessage.au3"
+#include "StringConstants.au3"
+#include "WinAPIError.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Debug
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions to help script debugging.
+; Author(s) .....: Nutster, Jpm, Valik, guinness, water
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__g_sReportWindowText_Debug = "Debug Window hidden text"
+; ===============================================================================================================================
+
+; #VARIABLE# ====================================================================================================================
+Global $__g_sReportTitle_Debug = "AutoIt Debug Report"
+Global $__g_iReportType_Debug = 0
+Global $__g_bReportWindowWaitClose_Debug = True, $__g_bReportWindowClosed_Debug = True
+Global $__g_hReportEdit_Debug = 0
+Global $__g_hReportNotepadEdit_Debug = 0
+Global $__g_sReportCallBack_Debug
+Global $__g_bReportTimeStamp_Debug = False
+Global $__g_bComErrorExit_Debug = False, $__g_oComError_Debug = Null
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _Assert
+; _DebugArrayDisplay
+; _DebugBugReportEnv
+; _DebugCOMError
+; _DebugOut
+; _DebugReport
+; _DebugReportEx
+; _DebugReportVar
+; _DebugSetup
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; __Debug_COMErrorHandler
+; __Debug_DataFormat
+; __Debug_DataType
+; __Debug_ReportClose
+; __Debug_ReportWrite
+; __Debug_ReportWindowCreate
+; __Debug_ReportWindowWrite
+; __Debug_ReportWindowWaitClose
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Valik
+; Modified.......: jpm
+; ===============================================================================================================================
+Func _Assert($sCondition, $bExit = True, $iCode = 0x7FFFFFFF, $sLine = @ScriptLineNumber, Const $_iCurrentError = @error, Const $_iCurrentExtended = @extended)
+	Local $bCondition = Execute($sCondition)
+	If Not $bCondition Then
+		MsgBox($MB_SYSTEMMODAL, "AutoIt Assert", "Assertion Failed (Line " & $sLine & "): " & @CRLF & @CRLF & $sCondition)
+		If $bExit Then Exit $iCode
+	EndIf
+	Return SetError($_iCurrentError, $_iCurrentExtended, $bCondition)
+EndFunc   ;==>_Assert
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Melba23
+; Modified.......: jpm
+; ===============================================================================================================================
+Func _DebugArrayDisplay(Const ByRef $aArray, $sTitle = Default, $sArrayRange = Default, $iFlags = Default, $vUser_Separator = Default, $sHeader = Default, $iMax_ColWidth = Default, $hUser_Function = Default)
+	Local $iRet = __ArrayDisplay_Share($aArray, $sTitle, $sArrayRange, $iFlags, $vUser_Separator, $sHeader, $iMax_ColWidth, $hUser_Function, True)
+	Return SetError(@error, @extended, $iRet)
+EndFunc   ;==>_DebugArrayDisplay
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: jpm
+; Modified.......:
+; ===============================================================================================================================
+Func _DebugBugReportEnv(Const $_iCurrentError = @error, Const $_iCurrentExtended = @extended)
+	Local $sAutoItX64, $sAdminMode, $sCompiled, $sOsServicePack, $sMUIlang, $sKBLayout, $sCPUArch
+	If @AutoItX64 Then $sAutoItX64 = "/X64"
+	If IsAdmin() Then $sAdminMode = ", AdminMode"
+	If @Compiled Then $sCompiled = ", Compiled"
+	If @OSServicePack Then $sOsServicePack = "/" & StringReplace(@OSServicePack, "Service Pack ", "SP")
+	If @OSLang <> @MUILang Then $sMUIlang = ", MUILang: " & @MUILang
+	If @OSLang <> StringRight(@KBLayout, 4) Then $sKBLayout = ", Keyboard: " & @KBLayout
+	If @OSArch <> @CPUArch Then $sCPUArch = ", CPUArch: " & @CPUArch
+	Return SetError($_iCurrentError, $_iCurrentExtended, "AutoIt: " & @AutoItVersion & $sAutoItX64 & $sAdminMode & $sCompiled & _
+			", OS: " & @OSVersion & $sOsServicePack & "/" & @OSArch & _
+			", OSLang: " & @OSLang & $sMUIlang & $sKBLayout & $sCPUArch & _
+			", Script: " & @ScriptFullPath)
+EndFunc   ;==>_DebugBugReportEnv
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: water
+; Modified ......: jpm
+; ===============================================================================================================================
+Func _DebugCOMError($iComDebug = Default, $bExit = False)
+	If $__g_iReportType_Debug <= 0 Or $__g_iReportType_Debug > 6 Then Return SetError(3, 0, 0)
+	If $iComDebug = Default Then $iComDebug = 1
+	If Not IsInt($iComDebug) Or $iComDebug < -1 Or $iComDebug > 1 Then Return SetError(1, 0, 0)
+	Switch $iComDebug
+		Case -1
+			Return SetError(IsObj($__g_oComError_Debug), $__g_bComErrorExit_Debug, 1)
+		Case 0
+			If $__g_oComError_Debug = Null Then SetError(0, 3, 1) ; COM error handler already disabled
+			$__g_oComError_Debug = Null
+			$__g_bComErrorExit_Debug = False
+			Return 1
+		Case Else
+			; A COM error handler will be initialized only if one does not exist
+			$__g_bComErrorExit_Debug = $bExit
+			Local $vComErrorChecking = ObjEvent("AutoIt.Error")
+			If $vComErrorChecking = "" Then
+				$__g_oComError_Debug = ObjEvent("AutoIt.Error", __Debug_COMErrorHandler) ; Creates a custom error handler
+				If @error Then Return SetError(4, @error, 0)
+				Return SetError(0, 1, 1)
+			ElseIf FuncName($vComErrorChecking) = FuncName(__Debug_COMErrorHandler) Then
+				Return SetError(0, 2, 1) ; COM error handler already set by a previous call to this function
+			Else
+				Return SetError(2, 0, 0) ; COM error handler already set to another function - not by this UDF
+			EndIf
+	EndSwitch
+EndFunc   ;==>_DebugCOMError
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Nutster
+; Modified.......: jpm
+; ===============================================================================================================================
+Func _DebugOut(Const $sOutput, Const $_iCurrentError = @error, Const $_iCurrentExtended = @extended)
+	If IsNumber($sOutput) = 0 And IsString($sOutput) = 0 And IsBool($sOutput) = 0 Then Return SetError(1, 0, 0) ; $sOutput can not be printed
+
+	If _DebugReport($sOutput) = 0 Then Return SetError(3, 0, 0) ; _DebugSetup() as not been called.
+
+	Return SetError($_iCurrentError, $_iCurrentExtended, 1) ; Return @error and @extended as before calling _DebugOut()
+EndFunc   ;==>_DebugOut
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: jpm
+; Modified.......: guinness
+; ===============================================================================================================================
+Func _DebugSetup(Const $sTitle = Default, $bBugReportInfos = Default, $vReportType = Default, $sLogFile = Default, $bTimeStamp = False)
+	If $__g_iReportType_Debug Then Return SetError(1, 0, $__g_iReportType_Debug) ; already registered
+	If $bBugReportInfos = Default Then $bBugReportInfos = False
+	If $vReportType = Default Then $vReportType = 1
+	If $sLogFile = Default Then $sLogFile = ""
+	Switch $vReportType
+		Case 1
+			; Report Log window
+			$__g_sReportCallBack_Debug = "__Debug_ReportWindowWrite("
+		Case 2
+			; ConsoleWrite
+			$__g_sReportCallBack_Debug = "ConsoleWrite("
+		Case 3
+			; Message box
+			$__g_sReportCallBack_Debug = "MsgBox(4096, '" & $__g_sReportTitle_Debug & "',"
+		Case 4
+			; Log file
+			$__g_sReportCallBack_Debug = "FileWrite('" & $sLogFile & "',"
+		Case 5
+			; Report notepad window
+			$__g_sReportCallBack_Debug = "__Debug_ReportNotepadWrite("
+		Case Else
+			If Not IsString($vReportType) Then Return SetError(2, 0, 0) ; invalid Report type
+			; private callback
+			If $vReportType = "" Then Return SetError(3, 0, 0) ; invalid callback function
+			$__g_sReportCallBack_Debug = $vReportType & "("
+			$vReportType = 6
+	EndSwitch
+
+	If Not ($sTitle = Default) Then $__g_sReportTitle_Debug = $sTitle
+	$__g_iReportType_Debug = $vReportType
+	$__g_bReportTimeStamp_Debug = $bTimeStamp
+
+	OnAutoItExitRegister("__Debug_ReportClose")
+
+	If $bBugReportInfos Then _DebugReport(_DebugBugReportEnv() & @CRLF)
+
+	Return $__g_iReportType_Debug
+EndFunc   ;==>_DebugSetup
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: jpm
+; Modified.......:
+; ===============================================================================================================================
+Func _DebugReport($sData, $bLastError = False, $bExit = False, Const $_iCurrentError = @error, $_iCurrentExtended = @extended)
+	If $__g_iReportType_Debug <= 0 Or $__g_iReportType_Debug > 6 Then Return SetError($_iCurrentError, $_iCurrentExtended, 0)
+
+	$_iCurrentExtended = __Debug_ReportWrite($sData, $bLastError)
+
+	If $bExit Then Exit
+
+	Return SetError($_iCurrentError, $_iCurrentExtended, 1)
+EndFunc   ;==>_DebugReport
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: jpm
+; Modified.......:
+; ===============================================================================================================================
+Func _DebugReportEx($sData, $bLastError = False, $bExit = False, Const $_iCurrentError = @error, $_iCurrentExtended = @extended)
+	If $__g_iReportType_Debug <= 0 Or $__g_iReportType_Debug > 6 Then Return SetError($_iCurrentError, $_iCurrentExtended, 0)
+
+	If IsInt($_iCurrentError) Then
+		Local $sTemp = StringSplit($sData, "|", $STR_ENTIRESPLIT + $STR_NOCOUNT)
+		If UBound($sTemp) > 1 Then
+			If $bExit Then
+				$sData = "<<< "
+			Else
+				$sData = ">>> "
+			EndIf
+
+			Switch $_iCurrentError
+				Case 0
+					$sData &= "Bad return from " & $sTemp[1] & " in " & $sTemp[0] & ".dll"
+				Case 1
+					$sData &= "Unable to open " & $sTemp[0] & ".dll"
+				Case 3
+					$sData &= "Unable to find " & $sTemp[1] & " in " & $sTemp[0] & ".dll"
+			EndSwitch
+		EndIf
+	EndIf
+
+	$_iCurrentExtended = __Debug_ReportWrite($sData, $bLastError)
+
+	If $bExit Then Exit
+
+	Return SetError($_iCurrentError, $_iCurrentExtended, 1)
+EndFunc   ;==>_DebugReportEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: jpm
+; Modified.......:
+; ===============================================================================================================================
+Func _DebugReportVar($sVarName, $vVar, $bErrExt = False, Const $iDebugLineNumber = @ScriptLineNumber, Const $_iCurrentError = @error, Const $_iCurrentExtended = @extended)
+	If $__g_iReportType_Debug <= 0 Or $__g_iReportType_Debug > 6 Then Return SetError($_iCurrentError, $_iCurrentExtended, 0)
+
+	If IsBool($vVar) And IsInt($bErrExt) Then
+		; to kept some compatibility with 3.3.1.3 if really needed for non breaking
+		If StringLeft($sVarName, 1) = "$" Then $sVarName = StringTrimLeft($sVarName, 1)
+		$vVar = Eval($sVarName)
+		$sVarName = "???"
+	EndIf
+
+	Local $sData = "@@ Debug(" & $iDebugLineNumber & ") : " & __Debug_DataType($vVar) & " -> " & $sVarName
+
+	If IsArray($vVar) Then
+		Local $nDims = UBound($vVar, $UBOUND_DIMENSIONS)
+		Local $nRows = UBound($vVar, $UBOUND_ROWS)
+		Local $nCols = UBound($vVar, $UBOUND_COLUMNS)
+		For $d = 1 To $nDims
+			$sData &= "[" & UBound($vVar, $d) & "]"
+		Next
+
+		If $nDims <= 2 Then
+			For $r = 0 To $nRows - 1
+				$sData &= @CRLF & "[" & $r & "] "
+				If $nDims = 1 Then
+					$sData &= __Debug_DataFormat($vVar[$r]) & @TAB
+				Else
+					For $c = 0 To $nCols - 1
+						$sData &= __Debug_DataFormat($vVar[$r][$c]) & @TAB
+					Next
+				EndIf
+			Next
+		EndIf
+	ElseIf IsDllStruct($vVar) Or IsObj($vVar) Then
+	Else
+		$sData &= ' = ' & __Debug_DataFormat($vVar)
+	EndIf
+
+	If $bErrExt Then $sData &= @CRLF & @TAB & "@error=" & $_iCurrentError & " @extended=0x" & Hex($_iCurrentExtended)
+
+	__Debug_ReportWrite($sData)
+
+	Return SetError($_iCurrentError, $_iCurrentExtended)
+EndFunc   ;==>_DebugReportVar
+
+; #INTERNAL_USE_ONLY#============================================================================================================
+; Name ..........: __Debug_COMErrorHandler
+; Description ...: Called when a COM error occurs and writes the error message with _DebugOut().
+; Syntax.........: __Debug_COMErrorHandler ( $oCOMError )
+; Parameters ....: $oCOMError - Error object
+; Return values .: None
+; Author ........: water
+; Modified ......: jpm
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Debug_COMErrorHandler($oCOMError)
+	_DebugReport(__COMErrorFormating($oCOMError), False, $__g_bComErrorExit_Debug)
+EndFunc   ;==>__Debug_COMErrorHandler
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Debug_DataFormat
+; Description ...: Returns a formatted data
+; Syntax.........: __Debug_DataFormat ( $vData )
+; Parameters ....: $vData - a data to be formatted
+; Return values .: the data truncated if needed or the Datatype for not editable as Dllstruct, Obj or Array
+; Author ........: jpm
+; Modified.......:
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Debug_DataFormat($vData)
+	Local $nLenMax = 25 ; to truncate String, Binary
+	Local $sTruncated = ""
+	If IsString($vData) Then
+		If StringLen($vData) > $nLenMax Then
+			$vData = StringLeft($vData, $nLenMax)
+			$sTruncated = " ..."
+		EndIf
+		Return '"' & $vData & '"' & $sTruncated
+	ElseIf IsBinary($vData) Then
+		If BinaryLen($vData) > $nLenMax Then
+			$vData = BinaryMid($vData, 1, $nLenMax)
+			$sTruncated = " ..."
+		EndIf
+		Return $vData & $sTruncated
+	ElseIf IsDllStruct($vData) Or IsArray($vData) Or IsObj($vData) Then
+		Return __Debug_DataType($vData)
+	Else
+		Return $vData
+	EndIf
+EndFunc   ;==>__Debug_DataFormat
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Debug_DataType
+; Description ...: Truncate a data
+; Syntax.........: __Debug_DataType ( $vData )
+; Parameters ....: $vData - a data
+; Return values .: the data truncated if needed
+; Author ........: jpm
+; Modified.......:
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Debug_DataType($vData)
+	Local $sType = VarGetType($vData)
+	Switch $sType
+		Case "DllStruct"
+			$sType &= ":" & DllStructGetSize($vData)
+		Case "Array"
+			$sType &= " " & UBound($vData, $UBOUND_DIMENSIONS) & "D"
+		Case "String"
+			$sType &= ":" & StringLen($vData)
+		Case "Binary"
+			$sType &= ":" & BinaryLen($vData)
+		Case "Ptr"
+			If IsHWnd($vData) Then $sType = "Hwnd"
+	EndSwitch
+	Return "{" & $sType & "}"
+EndFunc   ;==>__Debug_DataType
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Debug_ReportClose
+; Description ...: Close the debug session
+; Syntax.........: __Debug_ReportClose ( )
+; Parameters ....:
+; Return values .:
+; Author ........: jpm
+; Modified.......: guinness
+; Remarks .......: If a specific reporting function has been registered then it is called without parameter.
+; Related .......: _DebugSetup
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Debug_ReportClose()
+	If $__g_iReportType_Debug = 1 Then
+		WinSetOnTop($__g_sReportTitle_Debug, "", 1)
+		_DebugReport('>>>>>> Please close the "Report Log Window" to exit <<<<<<<' & @CRLF)
+		__Debug_ReportWindowWaitClose()
+	ElseIf $__g_iReportType_Debug = 6 Then
+		Execute($__g_sReportCallBack_Debug & ")")
+	EndIf
+
+	$__g_iReportType_Debug = 0
+EndFunc   ;==>__Debug_ReportClose
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Debug_ReportWindowCreate
+; Description ...: Create an report log window
+; Syntax.........: __Debug_ReportWindowCreate ( )
+; Parameters ....:
+; Return values .: 0 if already created
+; Author ........: jpm
+; Modified.......:
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Debug_ReportWindowCreate()
+	Local $nOld = Opt("WinDetectHiddenText", $OPT_MATCHSTART)
+	Local $bExists = WinExists($__g_sReportTitle_Debug, $__g_sReportWindowText_Debug)
+
+	If $bExists Then
+		If $__g_hReportEdit_Debug = 0 Then
+			; first time we try to access an open window in the running script,
+			; get the control handle needed for writing in
+			$__g_hReportEdit_Debug = ControlGetHandle($__g_sReportTitle_Debug, $__g_sReportWindowText_Debug, "Edit1")
+			; force no closing no waiting on report closing
+			$__g_bReportWindowWaitClose_Debug = False
+		EndIf
+	EndIf
+
+	Opt("WinDetectHiddenText", $nOld)
+
+	; change the state of the report Window as it is already opened or will be
+	$__g_bReportWindowClosed_Debug = False
+	If Not $__g_bReportWindowWaitClose_Debug Then Return 0 ; use of the already opened window
+
+	Local Const $WS_OVERLAPPEDWINDOW = 0x00CF0000
+	Local Const $WS_HSCROLL = 0x00100000
+	Local Const $WS_VSCROLL = 0x00200000
+	Local Const $ES_READONLY = 2048
+	Local Const $EM_LIMITTEXT = 0xC5
+	Local Const $GUI_HIDE = 32
+
+	; Variables used to control different aspects of the GUI.
+	Local $w = 580, $h = 280
+
+	GUICreate($__g_sReportTitle_Debug, $w, $h, -1, -1, $WS_OVERLAPPEDWINDOW)
+	; We use a hidden label with unique test so we can reliably identify the window.
+	Local $idLabelHidden = GUICtrlCreateLabel($__g_sReportWindowText_Debug, 0, 0, 1, 1)
+	GUICtrlSetState($idLabelHidden, $GUI_HIDE)
+	Local $idEdit = GUICtrlCreateEdit("", 4, 4, $w - 8, $h - 8, BitOR($WS_HSCROLL, $WS_VSCROLL, $ES_READONLY))
+	$__g_hReportEdit_Debug = GUICtrlGetHandle($idEdit)
+	GUICtrlSetBkColor($idEdit, 0xFFFFFF)
+	GUICtrlSendMsg($idEdit, $EM_LIMITTEXT, 0, 0) ; Max the size of the edit control.
+
+	GUISetState()
+
+	; by default report closing will wait closing by user
+	$__g_bReportWindowWaitClose_Debug = True
+	Return 1
+EndFunc   ;==>__Debug_ReportWindowCreate
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Debug_ReportWindowWrite
+; Description ...: Append text to the report log window
+; Syntax.........: __Debug_ReportWindowWrite ( $sData )
+; Parameters ....: $sData text to be append to the window
+; Return values .:
+; Author ........: jpm
+; Modified.......:
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Debug_ReportWindowWrite($sData)
+	If $__g_bReportWindowClosed_Debug Then __Debug_ReportWindowCreate()
+
+	Local Const $WM_GETTEXTLENGTH = 0x000E
+	Local Const $EM_SETSEL = 0xB1
+	Local Const $EM_REPLACESEL = 0xC2
+
+	Local $nLen = _SendMessage($__g_hReportEdit_Debug, $WM_GETTEXTLENGTH, 0, 0, 0, "int", "int")
+	_SendMessage($__g_hReportEdit_Debug, $EM_SETSEL, $nLen, $nLen, 0, "int", "int")
+	_SendMessage($__g_hReportEdit_Debug, $EM_REPLACESEL, True, $sData, 0, "int", "wstr")
+EndFunc   ;==>__Debug_ReportWindowWrite
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Debug_ReportWindowWaitClose
+; Description ...: Wait the closing of the report log window
+; Syntax.........: __Debug_ReportWindowWaitClose ( )
+; Parameters ....:
+; Return values .:
+; Author ........: jpm
+; Modified.......:
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Debug_ReportWindowWaitClose()
+	If Not $__g_bReportWindowWaitClose_Debug Then Return 0 ; use of the already opened window so no need to wait
+	Local $nOld = Opt("WinDetectHiddenText", $OPT_MATCHSTART)
+	Local $hWndReportWindow = WinGetHandle($__g_sReportTitle_Debug, $__g_sReportWindowText_Debug)
+	Opt("WinDetectHiddenText", $nOld)
+
+	$nOld = Opt('GUIOnEventMode', 0) ; save event mode in case user script was using event mode
+	Local Const $GUI_EVENT_CLOSE = -3
+	Local $aMsg
+	While WinExists(HWnd($hWndReportWindow))
+		$aMsg = GUIGetMsg(1)
+		If $aMsg[1] = $hWndReportWindow And $aMsg[0] = $GUI_EVENT_CLOSE Then GUIDelete($hWndReportWindow)
+	WEnd
+	Opt('GUIOnEventMode', $nOld) ; restore event mode
+
+	$__g_hReportEdit_Debug = 0
+	$__g_bReportWindowWaitClose_Debug = True
+	$__g_bReportWindowClosed_Debug = True
+EndFunc   ;==>__Debug_ReportWindowWaitClose
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Debug_ReportNotepadCreate
+; Description ...: Create an report log window
+; Syntax.........: __Debug_ReportNotepadCreate ( )
+; Parameters ....:
+; Return values .: 0 if already created
+; Author ........: jpm
+; Modified.......:
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Debug_ReportNotepadCreate()
+	Local $bExists = WinExists($__g_sReportTitle_Debug)
+
+	If $bExists Then
+		If $__g_hReportEdit_Debug = 0 Then
+			; first time we try to access an open window in the running script,
+			; get the control handle needed for writing in
+			$__g_hReportEdit_Debug = WinGetHandle($__g_sReportTitle_Debug)
+			Return 0 ; use of the already opened window
+		EndIf
+	EndIf
+
+	Local $pNotepad = Run("Notepad.exe") ; process ID of the Notepad started by this function
+	$__g_hReportEdit_Debug = WinWait("[CLASS:Notepad]")
+	If $pNotepad <> WinGetProcess($__g_hReportEdit_Debug) Then
+		Return SetError(3, 0, 0)
+	EndIf
+
+	WinActivate($__g_hReportEdit_Debug)
+	WinSetTitle($__g_hReportEdit_Debug, "", String($__g_sReportTitle_Debug))
+
+	Return 1
+EndFunc   ;==>__Debug_ReportNotepadCreate
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Debug_ReportNotepadWrite
+; Description ...: Append text to the report notepad window
+; Syntax.........: __Debug_ReportNotepadWrite ( $sData )
+; Parameters ....: $sData text to be append to the window
+; Return values .:
+; Author ........: jpm
+; Modified.......:
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Debug_ReportNotepadWrite($sData)
+	If $__g_hReportEdit_Debug = 0 Then __Debug_ReportNotepadCreate()
+
+	ControlCommand($__g_hReportEdit_Debug, "", "Edit1", "EditPaste", String($sData))
+EndFunc   ;==>__Debug_ReportNotepadWrite
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __Debug_ReportWrite
+; Description ...: Write on Report
+; Syntax.........: __Debug_ReportWrite ( $sData [, $bLastError [, $iCurEXT = @extended]} )
+; Parameters ....:
+; Return values .: $iCurEXT
+; Author ........: jpm
+; Modified.......:
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __Debug_ReportWrite($sData, $bLastError = False, $iCurEXT = @extended)
+	Local $sError = @CRLF
+	If $__g_bReportTimeStamp_Debug And ($sData <> "") Then $sData = @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC & " " & $sData
+	If $bLastError Then
+		$iCurEXT = _WinAPI_GetLastError()
+
+		Local Const $FORMAT_MESSAGE_FROM_SYSTEM = 0x1000
+		Local $aResult = DllCall("kernel32.dll", "dword", "FormatMessageW", "dword", $FORMAT_MESSAGE_FROM_SYSTEM, "ptr", 0, _
+				"dword", $iCurEXT, "dword", 0, "wstr", "", "dword", 4096, "ptr", 0)
+		; Don't test @error since this is a debugging function.
+		$sError = " : " & $aResult[5]
+	EndIf
+
+	$sData &= $sError
+
+	Local $bBlock = BlockInput(1)
+	BlockInput(0) ; force enable state so user can move mouse if needed
+
+	$sData = StringReplace($sData, "'", "''") ; in case the data contains '
+	Execute($__g_sReportCallBack_Debug & "'" & $sData & "')")
+
+	If Not $bBlock Then BlockInput(1) ; restore disable state
+
+	Return $iCurEXT
+EndFunc   ;==>__Debug_ReportWrite

+ 20 - 0
include/DirConstants.au3

@@ -0,0 +1,20 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: Dir_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants to be included in an AutoIt v3 script when using Dir functions.
+; Author(s) .....: Valik, Gary Frost, ...
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $DDL_ARCHIVE = 0x00000020
+Global Const $DDL_DIRECTORY = 0x00000010
+Global Const $DDL_DRIVES = 0x00004000
+Global Const $DDL_EXCLUSIVE = 0x00008000
+Global Const $DDL_HIDDEN = 0x00000002
+Global Const $DDL_READONLY = 0x00000001
+Global Const $DDL_READWRITE = 0x00000000
+Global Const $DDL_SYSTEM = 0x00000004
+; ===============================================================================================================================

+ 120 - 0
include/EditConstants.au3

@@ -0,0 +1,120 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: Edit_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: <a href="../appendix/GUIStyles.htm#Edit">GUI control Edit/Input styles</a> and much more constants.
+; Author(s) .....: Valik, Gary Frost, ...
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; Styles
+Global Const $ES_LEFT = 0
+Global Const $ES_CENTER = 1
+Global Const $ES_RIGHT = 2
+Global Const $ES_MULTILINE = 4
+Global Const $ES_UPPERCASE = 8
+Global Const $ES_LOWERCASE = 16
+Global Const $ES_PASSWORD = 32
+Global Const $ES_AUTOVSCROLL = 64
+Global Const $ES_AUTOHSCROLL = 128
+Global Const $ES_NOHIDESEL = 256
+Global Const $ES_OEMCONVERT = 1024
+Global Const $ES_READONLY = 2048
+Global Const $ES_WANTRETURN = 4096
+Global Const $ES_NUMBER = 8192
+; Global Const $ES_DISABLENOSCROLL = 8192
+; Global Const $ES_SUNKEN = 16384
+; Global Const $ES_VERTICAL = 4194304
+; Global Const $ES_SELECTIONBAR = 16777216
+
+; Error checking
+Global Const $EC_ERR = -1
+
+; Messages to send to edit control
+Global Const $ECM_FIRST = 0X1500
+Global Const $EM_CANUNDO = 0xC6
+Global Const $EM_CHARFROMPOS = 0xD7
+Global Const $EM_EMPTYUNDOBUFFER = 0xCD
+Global Const $EM_FMTLINES = 0xC8
+Global Const $EM_GETCUEBANNER = ($ECM_FIRST + 2)
+Global Const $EM_GETFIRSTVISIBLELINE = 0xCE
+Global Const $EM_GETHANDLE = 0xBD
+Global Const $EM_GETIMESTATUS = 0xD9
+Global Const $EM_GETLIMITTEXT = 0xD5
+Global Const $EM_GETLINE = 0xC4
+Global Const $EM_GETLINECOUNT = 0xBA
+Global Const $EM_GETMARGINS = 0xD4
+Global Const $EM_GETMODIFY = 0xB8
+Global Const $EM_GETPASSWORDCHAR = 0xD2
+Global Const $EM_GETRECT = 0xB2
+Global Const $EM_GETSEL = 0xB0
+Global Const $EM_GETTHUMB = 0xBE
+Global Const $EM_GETWORDBREAKPROC = 0xD1
+Global Const $EM_HIDEBALLOONTIP = ($ECM_FIRST + 4)
+Global Const $EM_LIMITTEXT = 0xC5
+Global Const $EM_LINEFROMCHAR = 0xC9
+Global Const $EM_LINEINDEX = 0xBB
+Global Const $EM_LINELENGTH = 0xC1
+Global Const $EM_LINESCROLL = 0xB6
+Global Const $EM_POSFROMCHAR = 0xD6
+Global Const $EM_REPLACESEL = 0xC2
+Global Const $EM_SCROLL = 0xB5
+Global Const $EM_SCROLLCARET = 0x00B7
+Global Const $EM_SETCUEBANNER = ($ECM_FIRST + 1)
+Global Const $EM_SETHANDLE = 0xBC
+Global Const $EM_SETIMESTATUS = 0xD8
+Global Const $EM_SETLIMITTEXT = $EM_LIMITTEXT
+Global Const $EM_SETMARGINS = 0xD3
+Global Const $EM_SETMODIFY = 0xB9
+Global Const $EM_SETPASSWORDCHAR = 0xCC
+Global Const $EM_SETREADONLY = 0xCF
+Global Const $EM_SETRECT = 0xB3
+Global Const $EM_SETRECTNP = 0xB4
+Global Const $EM_SETSEL = 0xB1
+Global Const $EM_SETTABSTOPS = 0xCB
+Global Const $EM_SETWORDBREAKPROC = 0xD0
+Global Const $EM_SHOWBALLOONTIP = ($ECM_FIRST + 3)
+Global Const $EM_UNDO = 0xC7
+
+; Params
+Global Const $EC_LEFTMARGIN = 0x1
+Global Const $EC_RIGHTMARGIN = 0x2
+Global Const $EC_USEFONTINFO = 0xFFFF
+
+Global Const $EMSIS_COMPOSITIONSTRING = 0x1
+
+; Status
+Global Const $EIMES_GETCOMPSTRATONCE = 0x1 ; If this flag is set, the edit control hooks the WM_IME_COMPOSITION message with fFlags set to GCS_RESULTSTR and returns the result string immediately
+Global Const $EIMES_CANCELCOMPSTRINFOCUS = 0x2 ; If this flag is set, the edit control cancels the composition string when it receives the WM_SETFOCUS message.
+Global Const $EIMES_COMPLETECOMPSTRKILLFOCUS = 0x4 ; If this flag is set, the edit control completes the composition string upon receiving the WM_KILLFOCUS message.
+
+; Notifications
+Global Const $EN_ALIGN_LTR_EC = 0x700
+Global Const $EN_ALIGN_RTL_EC = 0x701
+Global Const $EN_CHANGE = 0x300
+Global Const $EN_ERRSPACE = 0x500
+Global Const $EN_HSCROLL = 0X601
+Global Const $EN_KILLFOCUS = 0x200
+Global Const $EN_MAXTEXT = 0x501
+Global Const $EN_SETFOCUS = 0x100
+Global Const $EN_UPDATE = 0x400
+Global Const $EN_VSCROLL = 0x602
+
+; Edit Balloon Tool Tip Icons
+; move in ToolTipConstants.au3
+
+; Global Const $TTI_NONE = 0
+; Global Const $TTI_INFO = 1
+; Global Const $TTI_WARNING = 2
+; Global Const $TTI_ERROR = 3
+; Vista Edit Balloon Tool Tip Icons
+; Global Const $TTI_INFO_LARGE = 4
+; Global Const $TTI_WARNING_LARGE = 5
+; Global Const $TTI_ERROR_LARGE = 6
+
+; Control default styles
+Global Const $GUI_SS_DEFAULT_EDIT = 0x003010c0 ; BitOR($ES_WANTRETURN, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL)
+Global Const $GUI_SS_DEFAULT_INPUT = 0x00000080 ; BitOR($ES_LEFT, $ES_AUTOHSCROLL)
+; ===============================================================================================================================

+ 607 - 0
include/EventLog.au3

@@ -0,0 +1,607 @@
+#include-once
+
+#include "Date.au3"
+#include "Security.au3"
+#include "StructureConstants.au3"
+#include "WinAPIError.au3"
+#include "WinAPIRes.au3"
+#include "WinAPISys.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Event_Log
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist Windows System logs.
+; Description ...: When an error occurs, the system administrator or support technicians must determine what  caused  the  error,
+;                  attempt to recover any lost data, and prevent the error from recurring.  It is helpful  if  applications,  the
+;                  operating system, and other system services record important events such as low-memory conditions or excessive
+;                  attempts to access a disk.  Then the system administrator can  use  the  event  log  to  help  determine  what
+;                  conditions caused the error and the context in which it occurred.  By periodically viewing the event log,  the
+;                  system administrator may be able to identify problems (such as a failing hard drive) before they cause damage.
+; Author(s) .....: Paul Campbell (PaulIA), Gary Frost
+; Dll ...........: advapi32.dll
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_sSourceName_Event
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $EVENTLOG_SUCCESS = 0x00000000
+Global Const $EVENTLOG_ERROR_TYPE = 0x00000001
+Global Const $EVENTLOG_WARNING_TYPE = 0x00000002
+Global Const $EVENTLOG_INFORMATION_TYPE = 0x00000004
+Global Const $EVENTLOG_AUDIT_SUCCESS = 0x00000008
+Global Const $EVENTLOG_AUDIT_FAILURE = 0x00000010
+Global Const $EVENTLOG_SEQUENTIAL_READ = 0x00000001
+Global Const $EVENTLOG_SEEK_READ = 0x00000002
+Global Const $EVENTLOG_FORWARDS_READ = 0x00000004
+Global Const $EVENTLOG_BACKWARDS_READ = 0x00000008
+
+Global Const $__EVENTLOG_LOAD_LIBRARY_AS_DATAFILE = 0x00000002
+Global Const $__EVENTLOG_FORMAT_MESSAGE_FROM_HMODULE = 0x00000800
+Global Const $__EVENTLOG_FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _EventLog__Backup
+; _EventLog__Clear
+; _EventLog__Close
+; _EventLog__Count
+; _EventLog__DeregisterSource
+; _EventLog__Full
+; _EventLog__Notify
+; _EventLog__Oldest
+; _EventLog__Open
+; _EventLog__OpenBackup
+; _EventLog__Read
+; _EventLog__RegisterSource
+; _EventLog__Report
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; __EventLog_DecodeCategory
+; __EventLog_DecodeComputer
+; __EventLog_DecodeData
+; __EventLog_DecodeDate
+; __EventLog_DecodeDesc
+; __EventLog_DecodeEventID
+; __EventLog_DecodeSource
+; __EventLog_DecodeStrings
+; __EventLog_DecodeTime
+; __EventLog_DecodeTypeStr
+; __EventLog_DecodeUserName
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _EventLog__Backup($hEventLog, $sFileName)
+	Local $aResult = DllCall("advapi32.dll", "bool", "BackupEventLogW", "handle", $hEventLog, "wstr", $sFileName)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_EventLog__Backup
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _EventLog__Clear($hEventLog, $sFileName)
+	Local $bTemp = False
+	If StringLen($sFileName) = 0 Then
+		$sFileName = @TempDir & "\_EventLog_tempbackup.bak"
+		$bTemp = True
+	EndIf
+	Local $aResult = DllCall("advapi32.dll", "bool", "ClearEventLogW", "handle", $hEventLog, "wstr", $sFileName)
+	If @error Then Return SetError(@error, @extended, False)
+	If $bTemp Then FileDelete($sFileName)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_EventLog__Clear
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _EventLog__Close($hEventLog)
+	Local $aResult = DllCall("advapi32.dll", "bool", "CloseEventLog", "handle", $hEventLog)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_EventLog__Close
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _EventLog__Count($hEventLog)
+	Local $aResult = DllCall("advapi32.dll", "bool", "GetNumberOfEventLogRecords", "handle", $hEventLog, "dword*", 0)
+	If @error Then Return SetError(@error, @extended, -1)
+	If $aResult[0] = 0 Then Return -1
+	Return $aResult[2]
+EndFunc   ;==>_EventLog__Count
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __EventLog_DecodeCategory
+; Description ...: Decodes an event category for an event record
+; Syntax.........: __EventLog_DecodeCategory ( $tEventLog )
+; Parameters ....: $tEventLog   - tagEVENTLOGRECORD structure
+; Return values .: Success      - Event category
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; Remarks .......: This function is used internally
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __EventLog_DecodeCategory($tEventLog)
+	Return DllStructGetData($tEventLog, "EventCategory")
+EndFunc   ;==>__EventLog_DecodeCategory
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __EventLog_DecodeComputer
+; Description ...: Decodes the computer name from an event log record
+; Syntax.........: __EventLog_DecodeComputer ( $tEventLog )
+; Parameters ....: $tEventLog   - tagEVENTLOGRECORD structure
+; Return values .: Success      - Computer name
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; Remarks .......: This function is used internally
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __EventLog_DecodeComputer($tEventLog)
+	Local $pEventLog = DllStructGetPtr($tEventLog)
+	; The buffer length doesn't need to extend past UserSidOffset since
+	; the string appears before that.
+	Local $iLength = DllStructGetData($tEventLog, "UserSidOffset") - 1
+	; This points to the start of the variable length data.
+	Local $iOffset = DllStructGetSize($tEventLog)
+	; Offset the buffer with the Source string length which appears right
+	; before the Computer name.
+	$iOffset += 2 * (StringLen(__EventLog_DecodeSource($tEventLog)) + 1)
+	; Adjust the length to be a difference instead of absolute address.
+	$iLength -= $iOffset
+	; Adjust the buffer to point to the start of the Computer string.
+	Local $tBuffer = DllStructCreate("wchar Text[" & $iLength & "]", $pEventLog + $iOffset)
+	Return DllStructGetData($tBuffer, "Text")
+EndFunc   ;==>__EventLog_DecodeComputer
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __EventLog_DecodeData
+; Description ...: Decodes the event specific binary data from an event log record
+; Syntax.........: __EventLog_DecodeData ( $tEventLog )
+; Parameters ....: $tEventLog   - tagEVENTLOGRECORD structure
+; Return values .: Success      - Array with the following format:
+;                  |[0] - Number of bytes in array
+;                  |[1] - Byte 1
+;                  |[2] - Byte 2
+;                  |[n] - Byte n
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; Remarks .......: This function is used internally
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __EventLog_DecodeData($tEventLog)
+	Local $pEventLog = DllStructGetPtr($tEventLog)
+	Local $iOffset = DllStructGetData($tEventLog, "DataOffset")
+	Local $iLength = DllStructGetData($tEventLog, "DataLength")
+	Local $tBuffer = DllStructCreate("byte[" & $iLength & "]", $pEventLog + $iOffset)
+	Local $aData[$iLength + 1]
+	$aData[0] = $iLength
+	For $iI = 1 To $iLength
+		$aData[$iI] = DllStructGetData($tBuffer, 1, $iI)
+	Next
+	Return $aData
+EndFunc   ;==>__EventLog_DecodeData
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __EventLog_DecodeDate
+; Description ...: Converts an event log time to a date string
+; Syntax.........: __EventLog_DecodeDate ( $iEventTime )
+; Parameters ....: $iEventTime  - Event log time to be converted
+; Return values .: Success      - Date string in the format of mm/dd/yyyy
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; Remarks .......: This function is used internally
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __EventLog_DecodeDate($iEventTime)
+	Local $tInt64 = DllStructCreate("int64")
+	Local $pInt64 = DllStructGetPtr($tInt64)
+	Local $tFileTime = DllStructCreate($tagFILETIME, $pInt64)
+	DllStructSetData($tInt64, 1, ($iEventTime * 10000000) + 116444736000000000)
+	Local $tLocalTime = _Date_Time_FileTimeToLocalFileTime($tFileTime)
+	Local $tSystTime = _Date_Time_FileTimeToSystemTime($tLocalTime)
+	Local $iMonth = DllStructGetData($tSystTime, "Month")
+	Local $iDay = DllStructGetData($tSystTime, "Day")
+	Local $iYear = DllStructGetData($tSystTime, "Year")
+	Return StringFormat("%02d/%02d/%04d", $iMonth, $iDay, $iYear)
+EndFunc   ;==>__EventLog_DecodeDate
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __EventLog_DecodeDesc
+; Description ...: Decodes the description strings for an event record
+; Syntax.........: __EventLog_DecodeDesc ( $tEventLog )
+; Parameters ....: $tEventLog   - tagEVENTLOGRECORD structure
+; Return values .: Success      - Description
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; Remarks .......: This function is used internally
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __EventLog_DecodeDesc($tEventLog)
+    Local $aStrings = __EventLog_DecodeStrings($tEventLog)
+    Local $sSource = __EventLog_DecodeSource($tEventLog)
+    Local $iEventID = DllStructGetData($tEventLog, "EventID")
+    Local $sKey = "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\" & $__g_sSourceName_Event & "\" & $sSource
+    Local $aMsgDLL = StringSplit(_WinAPI_ExpandEnvironmentStrings(RegRead($sKey, "EventMessageFile")), ";")
+
+    Local $iFlags = BitOR($__EVENTLOG_FORMAT_MESSAGE_FROM_HMODULE, $__EVENTLOG_FORMAT_MESSAGE_IGNORE_INSERTS)
+    Local $sDesc = ""
+    Local $tBuffer = 0
+	For $iI = 1 To $aMsgDLL[0]
+        Local $hDLL = _WinAPI_LoadLibraryEx($aMsgDLL[$iI], $__EVENTLOG_LOAD_LIBRARY_AS_DATAFILE)
+        If $hDLL = 0 Then ContinueLoop
+        $tBuffer = DllStructCreate("wchar Text[4096]")
+        _WinAPI_FormatMessage($iFlags, $hDLL, $iEventID, 0, $tBuffer, 4096, 0)
+        _WinAPI_FreeLibrary($hDLL)
+        $sDesc &= DllStructGetData($tBuffer, "Text")
+    Next
+    $sKey = "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\" & $__g_sSourceName_Event & "\" & $__g_sSourceName_Event
+    $aMsgDLL = StringSplit(_WinAPI_ExpandEnvironmentStrings(RegRead($sKey, "ParameterMessageFile")), ";")
+
+    For $iI = 1 To $aMsgDLL[0]
+        $hDLL = _WinAPI_LoadLibraryEx($aMsgDLL[$iI], $__EVENTLOG_LOAD_LIBRARY_AS_DATAFILE)
+        If $hDLL <> 0 Then
+            For $iJ = 1 To $aStrings[0] ;Added to parse secondary replacements
+                $tBuffer = DllStructCreate("wchar Text[4096]")
+                If StringLeft($aStrings[$iJ], 2) == "%%" Then
+                    _WinAPI_FormatMessage($iFlags, $hDLL, Int(StringTrimLeft($aStrings[$iJ], 2)), 0, $tBuffer, 4096, 0)
+                    If Not @error Then
+                        $aStrings[$iJ] = DllStructGetData($tBuffer, "Text")
+                    EndIf
+                EndIf
+            Next
+            _WinAPI_FreeLibrary($hDLL)
+        EndIf
+    Next
+    If $sDesc = "" Then
+        For $iI = 1 To $aStrings[0]
+            $sDesc &= $aStrings[$iI]
+        Next
+    Else
+        For $iI = 1 To $aStrings[0]
+            $sDesc = StringRegExpReplace($sDesc, ("(%" & $iI & ")(\R|\Z)"), StringReplace($aStrings[$iI], "\", "\\") & "$2")
+        Next
+    EndIf
+    Return StringStripWS($sDesc, $STR_STRIPLEADING + $STR_STRIPTRAILING)
+EndFunc   ;==>__EventLog_DecodeDesc
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __EventLog_DecodeEventID
+; Description ...: Decodes an event ID for an event record
+; Syntax.........: __EventLog_DecodeEventID ( $tEventLog )
+; Parameters ....: $tEventLog   - tagEVENTLOGRECORD structure
+; Return values .: Success      - Event ID
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; Remarks .......: This function is used internally
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __EventLog_DecodeEventID($tEventLog)
+	Return BitAND(DllStructGetData($tEventLog, "EventID"), 0x7FFF)
+EndFunc   ;==>__EventLog_DecodeEventID
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __EventLog_DecodeSource
+; Description ...: Decodes the event source from an event log record
+; Syntax.........: __EventLog_DecodeSource ( $tEventLog )
+; Parameters ....: $tEventLog   - tagEVENTLOGRECORD structure
+; Return values .: Success      - Source name
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; Remarks .......: This function is used internally
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __EventLog_DecodeSource($tEventLog)
+	Local $pEventLog = DllStructGetPtr($tEventLog)
+	; The buffer length doesn't need to extend past UserSidOffset since
+	; the string appears before that.
+	Local $iLength = DllStructGetData($tEventLog, "UserSidOffset") - 1
+	; This points to the start of the variable length data.
+	Local $iOffset = DllStructGetSize($tEventLog)
+	; Adjust the length to be a difference instead of absolute address.
+	$iLength -= $iOffset
+	; Initialize the buffer to the start of the variable length data
+	Local $tBuffer = DllStructCreate("wchar Text[" & $iLength & "]", $pEventLog + $iOffset)
+	Return DllStructGetData($tBuffer, "Text")
+EndFunc   ;==>__EventLog_DecodeSource
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __EventLog_DecodeStrings
+; Description ...: Decodes the insertion strings from an event log record
+; Syntax.........: __EventLog_DecodeStrings ( $tEventLog )
+; Parameters ....: $tEventLog   - tagEVENTLOGRECORD structure
+; Return values .: Success      - Array with the following format:
+;                  |[0] - Number of strings in array
+;                  |[1] - String 1
+;                  |[2] - String 2
+;                  |[n] - String n
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; Remarks .......: This function is used internally
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __EventLog_DecodeStrings($tEventLog)
+	Local $pEventLog = DllStructGetPtr($tEventLog)
+	Local $iNumStrs = DllStructGetData($tEventLog, "NumStrings")
+	Local $iOffset = DllStructGetData($tEventLog, "StringOffset")
+	; The data offset is used to calculate buffer sizes.
+	Local $iDataOffset = DllStructGetData($tEventLog, "DataOffset")
+	Local $tBuffer = DllStructCreate("wchar Text[" & $iDataOffset - $iOffset & "]", $pEventLog + $iOffset)
+
+	Local $aStrings[$iNumStrs + 1]
+	$aStrings[0] = $iNumStrs
+	For $iI = 1 To $iNumStrs
+		$aStrings[$iI] = DllStructGetData($tBuffer, "Text")
+		$iOffset += 2 * (StringLen($aStrings[$iI]) + 1)
+		$tBuffer = DllStructCreate("wchar Text[" & $iDataOffset - $iOffset & "]", $pEventLog + $iOffset)
+	Next
+	Return $aStrings
+EndFunc   ;==>__EventLog_DecodeStrings
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __EventLog_DecodeTime
+; Description ...: Converts an event log time to a date time
+; Syntax.........: __EventLog_DecodeTime ( $iEventTime )
+; Parameters ....: $iEventTime  - Event log time to be converted
+; Return values .: Success      - Time string in the format of hh:mm:ss am/pm
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; Remarks .......: This function is used internally
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __EventLog_DecodeTime($iEventTime)
+	Local $tInt64 = DllStructCreate("int64")
+	Local $pInt64 = DllStructGetPtr($tInt64)
+	Local $tFileTime = DllStructCreate($tagFILETIME, $pInt64)
+	DllStructSetData($tInt64, 1, ($iEventTime * 10000000) + 116444736000000000)
+	Local $tLocalTime = _Date_Time_FileTimeToLocalFileTime($tFileTime)
+	Local $tSystTime = _Date_Time_FileTimeToSystemTime($tLocalTime)
+	Local $iHours = DllStructGetData($tSystTime, "Hour")
+	Local $iMinutes = DllStructGetData($tSystTime, "Minute")
+	Local $iSeconds = DllStructGetData($tSystTime, "Second")
+	Local $sAMPM = "AM"
+	If $iHours < 12 Then
+		If $iHours = 0 Then
+			$iHours = 12
+		EndIf
+	Else
+		$sAMPM = "PM"
+		If $iHours > 12 Then
+			$iHours -= 12
+		EndIf
+	EndIf
+	Return StringFormat("%02d:%02d:%02d %s", $iHours, $iMinutes, $iSeconds, $sAMPM)
+EndFunc   ;==>__EventLog_DecodeTime
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __EventLog_DecodeTypeStr
+; Description ...: Decodes an event type to an event string
+; Syntax.........: __EventLog_DecodeTypeStr ( $iEventType )
+; Parameters ....: $iEventType  - Event type
+; Return values .: Success      - String indicating the event type
+;                  Failure      - Unknown event type ID
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; Remarks .......: This function is used internally
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __EventLog_DecodeTypeStr($iEventType)
+	Select
+		Case $iEventType = $EVENTLOG_SUCCESS
+			Return "Success"
+		Case $iEventType = $EVENTLOG_ERROR_TYPE
+			Return "Error"
+		Case $iEventType = $EVENTLOG_WARNING_TYPE
+			Return "Warning"
+		Case $iEventType = $EVENTLOG_INFORMATION_TYPE
+			Return "Information"
+		Case $iEventType = $EVENTLOG_AUDIT_SUCCESS
+			Return "Success audit"
+		Case $iEventType = $EVENTLOG_AUDIT_FAILURE
+			Return "Failure audit"
+		Case Else
+			Return $iEventType
+	EndSelect
+EndFunc   ;==>__EventLog_DecodeTypeStr
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __EventLog_DecodeUserName
+; Description ...: Decodes the user name from an event log record
+; Syntax.........: __EventLog_DecodeUserName ( $tEventLog )
+; Parameters ....: $tEventLog   - tagEVENTLOGRECORD structure
+; Return values .: Success      - User name
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; Remarks .......: This function is used internally
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __EventLog_DecodeUserName($tEventLog)
+	Local $pEventLog = DllStructGetPtr($tEventLog)
+	If DllStructGetData($tEventLog, "UserSidLength") = 0 Then Return ""
+	Local $pAcctSID = $pEventLog + DllStructGetData($tEventLog, "UserSidOffset")
+	Local $aAcctInfo = _Security__LookupAccountSid($pAcctSID)
+	If UBound($aAcctInfo) >= 2 Then Return (Not StringLen($aAcctInfo[1]) ? "" : $aAcctInfo[1] & "\") & $aAcctInfo[0]
+	Return ""
+EndFunc   ;==>__EventLog_DecodeUserName
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _EventLog__DeregisterSource($hEventLog)
+	Local $aResult = DllCall("advapi32.dll", "bool", "DeregisterEventSource", "handle", $hEventLog)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_EventLog__DeregisterSource
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _EventLog__Full($hEventLog)
+	Local $aResult = DllCall("advapi32.dll", "bool", "GetEventLogInformation", "handle", $hEventLog, "dword", 0, "dword*", 0, "dword", 4, "dword*", 0)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[3] <> 0
+EndFunc   ;==>_EventLog__Full
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _EventLog__Notify($hEventLog, $hEvent)
+	Local $aResult = DllCall("advapi32.dll", "bool", "NotifyChangeEventLog", "handle", $hEventLog, "handle", $hEvent)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_EventLog__Notify
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _EventLog__Oldest($hEventLog)
+	Local $aResult = DllCall("advapi32.dll", "bool", "GetOldestEventLogRecord", "handle", $hEventLog, "dword*", 0)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[2]
+EndFunc   ;==>_EventLog__Oldest
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _EventLog__Open($sServerName, $sSourceName)
+	$__g_sSourceName_Event = $sSourceName
+	Local $aResult = DllCall("advapi32.dll", "handle", "OpenEventLogW", "wstr", $sServerName, "wstr", $sSourceName)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_EventLog__Open
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _EventLog__OpenBackup($sServerName, $sFileName)
+	Local $aResult = DllCall("advapi32.dll", "handle", "OpenBackupEventLogW", "wstr", $sServerName, "wstr", $sFileName)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_EventLog__OpenBackup
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _EventLog__Read($hEventLog, $bRead = True, $bForward = True, $iOffset = 0)
+	Local $iReadFlags, $aEvent[15]
+	$aEvent[0] = False; in cas of error
+
+	If $bRead Then
+		$iReadFlags = $EVENTLOG_SEQUENTIAL_READ
+	Else
+		$iReadFlags = $EVENTLOG_SEEK_READ
+	EndIf
+	If $bForward Then
+		$iReadFlags = BitOR($iReadFlags, $EVENTLOG_FORWARDS_READ)
+	Else
+		$iReadFlags = BitOR($iReadFlags, $EVENTLOG_BACKWARDS_READ)
+	EndIf
+
+	; First call gets the size for the buffer.  A fake buffer is passed because
+	; the function demands the buffer be non-NULL even when requesting the size.
+	Local $tBuffer = DllStructCreate("wchar[1]")
+	Local $aResult = DllCall("advapi32.dll", "bool", "ReadEventLogW", "handle", $hEventLog, "dword", $iReadFlags, "dword", $iOffset, _
+			"struct*", $tBuffer, "dword", 0, "dword*", 0, "dword*", 0)
+	If @error Then Return SetError(@error, @extended, $aEvent)
+
+	; Allocate the buffer and repeat the call obtaining the information.
+	Local $iBytesMin = $aResult[7]
+	$tBuffer = DllStructCreate("wchar[" & $iBytesMin + 1 & "]")
+	$aResult = DllCall("advapi32.dll", "bool", "ReadEventLogW", "handle", $hEventLog, "dword", $iReadFlags, "dword", $iOffset, _
+			"struct*", $tBuffer, "dword", $iBytesMin, "dword*", 0, "dword*", 0)
+	If @error Or Not $aResult[0] Then Return SetError(@error, @extended, $aEvent)
+
+	Local $tEventLog = DllStructCreate($tagEVENTLOGRECORD, DllStructGetPtr($tBuffer))
+	$aEvent[0] = True
+	$aEvent[1] = DllStructGetData($tEventLog, "RecordNumber")
+	$aEvent[2] = __EventLog_DecodeDate(DllStructGetData($tEventLog, "TimeGenerated"))
+	$aEvent[3] = __EventLog_DecodeTime(DllStructGetData($tEventLog, "TimeGenerated"))
+	$aEvent[4] = __EventLog_DecodeDate(DllStructGetData($tEventLog, "TimeWritten"))
+	$aEvent[5] = __EventLog_DecodeTime(DllStructGetData($tEventLog, "TimeWritten"))
+	$aEvent[6] = __EventLog_DecodeEventID($tEventLog)
+	$aEvent[7] = DllStructGetData($tEventLog, "EventType")
+	$aEvent[8] = __EventLog_DecodeTypeStr(DllStructGetData($tEventLog, "EventType"))
+	$aEvent[9] = __EventLog_DecodeCategory($tEventLog)
+	$aEvent[10] = __EventLog_DecodeSource($tEventLog)
+	$aEvent[11] = __EventLog_DecodeComputer($tEventLog)
+	$aEvent[12] = __EventLog_DecodeUserName($tEventLog)
+	$aEvent[13] = __EventLog_DecodeDesc($tEventLog)
+	$aEvent[14] = __EventLog_DecodeData($tEventLog)
+	Return $aEvent
+EndFunc   ;==>_EventLog__Read
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _EventLog__RegisterSource($sServerName, $sSourceName)
+	$__g_sSourceName_Event = $sSourceName
+	Local $aResult = DllCall("advapi32.dll", "handle", "RegisterEventSourceW", "wstr", $sServerName, "wstr", $sSourceName)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_EventLog__RegisterSource
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _EventLog__Report($hEventLog, $iType, $iCategory, $iEventID, $sUserName, $sDesc, $aData)
+	Local $tSID = 0
+
+	If $sUserName <> "" Then
+		$tSID = _Security__GetAccountSid($sUserName)
+	EndIf
+
+	Local $iData = $aData[0]
+	Local $tData = DllStructCreate("byte[" & $iData & "]")
+	Local $iDesc = StringLen($sDesc) + 1
+	Local $tDesc = DllStructCreate("wchar[" & $iDesc & "]")
+	Local $tPtr = DllStructCreate("ptr")
+	DllStructSetData($tPtr, 1, DllStructGetPtr($tDesc))
+	DllStructSetData($tDesc, 1, $sDesc)
+	For $iI = 1 To $iData
+		DllStructSetData($tData, 1, $aData[$iI], $iI)
+	Next
+	Local $aResult = DllCall("advapi32.dll", "bool", "ReportEventW", "handle", $hEventLog, "word", $iType, "word", $iCategory, _
+			"dword", $iEventID, "struct*", $tSID, "word", 1, "dword", $iData, "struct*", $tPtr, "struct*", $tData)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_EventLog__Report

ファイルの差分が大きいため隠しています
+ 1232 - 0
include/Excel.au3


+ 308 - 0
include/ExcelConstants.au3

@@ -0,0 +1,308 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: ExcelConstants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants to be included in an AutoIt script when using the Excel UDF.
+; Author(s) .....: water
+; Resources .....: Excel 2010 Enumerations: http://msdn.microsoft.com/en-us/library/ff838815(v=office.14).aspx
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; XlAutoFilterOperator Enumeration. Specifies the operator to use to associate two criteria applied by a filter.
+; See: http://msdn.microsoft.com/en-us/library/ff839625(v=office.14).aspx
+Global Const $xlAnd = 1 ; Logical AND of Criteria1 and Criteria2
+Global Const $xlBottom10Items = 4 ; Lowest-valued items displayed (number of items specified in Criteria1)
+Global Const $xlBottom10Percent = 6 ; Lowest-valued items displayed (percentage specified in Criteria1)
+Global Const $xlFilterCellColor = 8 ; Color of the cell
+Global Const $xlFilterDynamic = 11 ; Dynamic filter
+Global Const $xlFilterFontColor = 9 ; Color of the font
+Global Const $xlFilterIcon = 10 ; Filter icon
+Global Const $xlFilterValues = 7 ; Filter values
+Global Const $xlOr = 2 ; Logical OR of Criteria1 or Criteria2
+Global Const $xlTop10Items = 3 ; Highest-valued items displayed (number of items specified in Criteria1)
+Global Const $xlTop10Percent = 5 ; Highest-valued items displayed (percentage specified in Criteria1)
+
+; Constants Enumeration. This enumeration groups together constants used with various Excel methods.
+; See: http://msdn.microsoft.com/en-us/library/ff197824(v=office.14).aspx
+Global Const $xlCenter = -4108 ; Center
+Global Const $xlLeft = -4131 ; Left
+Global Const $xlRight = -4152 ; Right
+
+; XlCalculation Enumeration. Specifies the calculation mode.
+; See: http://msdn.microsoft.com/en-us/library/ff835845(v=office.14).aspx
+Global Const $xlCalculationAutomatic = -4105 ; Excel controls recalculation
+Global Const $xlCalculationManual = -4135 ; Calculation is done when the user requests it
+Global Const $xlCalculationSemiautomatic = 2 ; Excel controls recalculation but ignores changes in tables
+
+; XlCellType Enumeration. Specifies the type of cells.
+; See: http://msdn.microsoft.com/en-us/library/ff836534(v=office.14).aspx
+Global Const $xlCellTypeAllFormatConditions = -4172 ; Cells of any format
+Global Const $xlCellTypeAllValidation = -4174 ; Cells having validation criteria
+Global Const $xlCellTypeBlanks = 4 ; Empty cells
+Global Const $xlCellTypeComments = -4144 ; Cells containing notes
+Global Const $xlCellTypeConstants = 2 ; Cells containing constants
+Global Const $xlCellTypeFormulas = -4123 ; Cells containing formulas
+Global Const $xlCellTypeLastCell = 11 ; The last cell in the used range
+Global Const $xlCellTypeSameFormatConditions = -4173 ; Cells having the same format
+Global Const $xlCellTypeSameValidation = -4175 ; Cells having the same validation criteria
+Global Const $xlCellTypeVisible = 12 ; All visible cells
+
+; XlColumnDataType Enumeration. Specifies how a column is to be parsed.
+; See: http://msdn.microsoft.com/en-us/library/ff193030(v=office.14).aspx
+Global Const $xlDMYFormat = 4 ; DMY date format
+Global Const $xlDYMFormat = 7 ; DYM date format
+Global Const $xlEMDFormat = 10 ; EMD date format
+Global Const $xlGeneralFormat = 1 ; General
+Global Const $xlMDYFormat = 3 ; MDY date format
+Global Const $xlMYDFormat = 6 ; MYD date format
+Global Const $xlSkipColumn = 9 ; Column is not parsed
+Global Const $xlTextFormat = 2 ; Text
+Global Const $xlYDMFormat = 8 ; YDM date format
+Global Const $xlYMDFormat = 5 ; YMD date format
+
+; XlDeleteShiftDirection Enumeration. Specifies how to shift cells to replace deleted cells.
+; See: http://msdn.microsoft.com/en-us/library/ff841140(v=office.14).aspx
+Global Const $xlShiftToLeft = -4159 ; Cells are shifted to the left
+Global Const $xlShiftUp = -4162 ; Cells are shifted up
+
+; XlDVAlertStyle Enumeration. Specifies the icon used in message boxes displayed during validation.
+; See: http://msdn.microsoft.com/en-us/library/ff841223(v=office.14).aspx
+Global Const $xlValidAlertInformation = 3 ; Information icon
+Global Const $xlValidAlertStop = 1 ; Stop icon
+Global Const $xlValidAlertWarning = 2 ; Warning icon
+
+; XlDVType Enumeration. Specifies the type of validation test to be performed in conjunction with values.
+; See: http://msdn.microsoft.com/en-us/library/ff840715(v=office.14).aspx
+Global Const $xlValidateCustom = 7 ; Data is validated using an arbitrary formula
+Global Const $xlValidateDate = 4 ; Date values
+Global Const $xlValidateDecimal = 2 ; Numeric values
+Global Const $xlValidateInputOnly = 0 ; Validate only when user changes the value
+Global Const $xlValidateList = 3 ; Value must be present in a specified list
+Global Const $xlValidateTextLength = 6 ; Length of text
+Global Const $xlValidateTime = 5 ; Time values
+Global Const $xlValidateWholeNumber = 1 ; Whole numeric values
+
+; XlDynamicFilterCriteria Enumeration. Specifies the filter criterion.
+; See: http://msdn.microsoft.com/en-us/library/ff840134(v=office.14).aspx
+Global Const $xlFilterAboveAverage = 33 ; Filter all above-average values
+Global Const $xlFilterAllDatesInPeriodApril = 24 ; Filter all dates in April
+Global Const $xlFilterAllDatesInPeriodAugust = 28 ; Filter all dates in August
+Global Const $xlFilterAllDatesInPeriodDecember = 32 ; Filter all dates in December
+Global Const $xlFilterAllDatesInPeriodFebruray = 22 ; Filter all dates in February
+Global Const $xlFilterAllDatesInPeriodJanuary = 21 ; Filter all dates in January
+Global Const $xlFilterAllDatesInPeriodJuly = 27 ; Filter all dates in July
+Global Const $xlFilterAllDatesInPeriodJune = 26 ; Filter all dates in June
+Global Const $xlFilterAllDatesInPeriodMarch = 23 ; Filter all dates in March
+Global Const $xlFilterAllDatesInPeriodMay = 25 ; Filter all dates in May
+Global Const $xlFilterAllDatesInPeriodNovember = 31 ; Filter all dates in November
+Global Const $xlFilterAllDatesInPeriodOctober = 30 ; Filter all dates in October
+Global Const $xlFilterAllDatesInPeriodQuarter1 = 17 ; Filter all dates in Quarter1
+Global Const $xlFilterAllDatesInPeriodQuarter2 = 18 ; Filter all dates in Quarter2
+Global Const $xlFilterAllDatesInPeriodQuarter3 = 19 ; Filter all dates in Quarter3
+Global Const $xlFilterAllDatesInPeriodQuarter4 = 20 ; Filter all dates in Quarter4
+Global Const $xlFilterAllDatesInPeriodSeptember = 29 ; Filter all dates in September
+Global Const $xlFilterBelowAverage = 34 ; Filter all below-average values
+Global Const $xlFilterLastMonth = 8 ; Filter all values related to last month
+Global Const $xlFilterLastQuarter = 11 ; Filter all values related to last quarter
+Global Const $xlFilterLastWeek = 5 ; Filter all values related to last week
+Global Const $xlFilterLastYear = 14 ; Filter all values related to last year
+Global Const $xlFilterNextMonth = 9 ; Filter all values related to next month
+Global Const $xlFilterNextQuarter = 12 ; Filter all values related to next quarter
+Global Const $xlFilterNextWeek = 6 ; Filter all values related to next week
+Global Const $xlFilterNextYear = 15 ; Filter all values related to next year
+Global Const $xlFilterThisMonth = 7 ; Filter all values related to the current month
+Global Const $xlFilterThisQuarter = 10 ; Filter all values related to the current quarter
+Global Const $xlFilterThisWeek = 4 ; Filter all values related to the current week
+Global Const $xlFilterThisYear = 13 ; Filter all values related to the current year
+Global Const $xlFilterToday = 1 ; Filter all values related to the current date
+Global Const $xlFilterTomorrow = 3 ; Filter all values related to tomorrow
+Global Const $xlFilterYearToDate = 16 ; Filter all values from today until a year ago
+Global Const $xlFilterYesterday = 2 ; Filter all values related to yesterday
+
+; XlFileFormat Enumeration. Specifies the file format when saving the worksheet.
+; See: http://msdn.microsoft.com/en-us/library/ff198017(v=office.14).aspx
+Global Const $xlAddIn = 18 ; Microsoft Excel 97-2003 Add-In
+Global Const $xlAddIn8 = 18 ; Microsoft Excel 97-2003 Add-In
+Global Const $xlCSV = 6 ; CSV
+Global Const $xlCSVMac = 22 ; Macintosh CSV
+Global Const $xlCSVMSDOS = 24 ; MSDOS CSV
+Global Const $xlCSVWindows = 23 ; Windows CSV
+Global Const $xlCurrentPlatformText = -4158 ; Current Platform Text
+Global Const $xlDBF2 = 7 ; DBF2
+Global Const $xlDBF3 = 8 ; DBF3
+Global Const $xlDBF4 = 11 ; DBF4
+Global Const $xlDIF = 9 ; DIF
+Global Const $xlExcel12 = 50 ; Excel12 (Excel Binary Workbook in 2007 with or without macro’s, .xlsb)
+Global Const $xlExcel2 = 16 ; Excel2
+Global Const $xlExcel2FarEast = 27 ; Excel2 FarEast
+Global Const $xlExcel3 = 29 ; Excel3
+Global Const $xlExcel4 = 33 ; Excel4
+Global Const $xlExcel4Workbook = 35 ; Excel4 Workbook
+Global Const $xlExcel5 = 39 ; Excel5
+Global Const $xlExcel7 = 39 ; Excel7
+Global Const $xlExcel8 = 56 ; Excel8 (97-2003 format in Excel 2007, .xls)
+Global Const $xlExcel9795 = 43 ; Excel9795
+Global Const $xlHtml = 44 ; HTML format
+Global Const $xlIntlAddIn = 26 ; International Add-In
+Global Const $xlIntlMacro = 25 ; International Macro
+Global Const $xlOpenDocumentSpreadsheet = 60 ; OpenDocument Spreadsheet
+Global Const $xlOpenXMLAddIn = 55 ; Open XML Add-In
+Global Const $xlOpenXMLTemplate = 54 ; Open XML Template
+Global Const $xlOpenXMLTemplateMacroEnabled = 53 ; Open XML Template Macro Enabled
+Global Const $xlOpenXMLWorkbook = 51 ; Open XML Workbook (without macro’s in 2007, .xlsx)
+Global Const $xlOpenXMLWorkbookMacroEnabled = 52 ; Open XML Workbook Macro Enabled (with or without macro’s in 2007, .xlsm)
+Global Const $xlSYLK = 2 ; SYLK
+Global Const $xlTemplate = 17 ; Template
+Global Const $xlTemplate8 = 17 ; Template 8
+Global Const $xlTextMac = 19;  Macintosh Text
+Global Const $xlTextMSDOS = 21 ; MSDOS Text
+Global Const $xlTextPrinter = 36 ; Printer Text
+Global Const $xlTextWindows = 20 ; Windows Text
+Global Const $xlUnicodeText = 42 ; Unicode Text
+Global Const $xlWebArchive = 45 ; Web Archive
+Global Const $xlWJ2WD1 = 14 ; WJ2WD1
+Global Const $xlWJ3 = 40 ; WJ3
+Global Const $xlWJ3FJ3 = 41 ; WJ3FJ3
+Global Const $xlWK1 = 5 ; WK1
+Global Const $xlWK1ALL = 31 ; WK1ALL
+Global Const $xlWK1FMT = 30 ; WK1FMT
+Global Const $xlWK3 = 15 ; WK3
+Global Const $xlWK3FM3 = 32 ; WK3FM3
+Global Const $xlWK4 = 38; WK4
+Global Const $xlWKS = 4 ; Worksheet
+Global Const $xlWorkbookDefault = 51 ; Workbook default (.xls for < Excel 2007, .xlsx for > Excel 2007)
+Global Const $xlWorkbookNormal = -4143 ; Workbook normal
+Global Const $xlWorks2FarEast = 28 ; Works2 FarEast
+Global Const $xlWQ1 = 34 ; WQ1
+Global Const $xlXMLSpreadsheet = 46 ; XML Spreadsheet
+
+; XlFindLookIn Enumeration. Specifies the type of data to search.
+; See: http://msdn.microsoft.com/en-us/library/ff822180(v=office.14).aspx
+Global Const $xlComments = -4144 ; Comments
+Global Const $xlFormulas = -4123 ; Formulas
+Global Const $xlValues = -4163 ; Values
+
+; XlFixedFormatQuality Enumeration. Specifies the quality of speadsheets saved in different fixed formats.
+; See: http://msdn.microsoft.com/en-us/library/ff838396(v=office.14).aspx
+Global Const $xlQualityMinimum = 1 ; Minimum quality
+Global Const $xlQualityStandard = 0 ; Standard quality
+
+; XlFixedFormatType Enumeration. Specifies the type of file format.
+; See: http://msdn.microsoft.com/en-us/library/ff195006(v=office.14).aspx
+Global Const $xlTypePDF = 0 ; "PDF" — Portable Document Format file (.pdf)
+Global Const $xlTypeXPS = 1 ; "XPS" — XPS Document (.xps)
+
+; XlFormatConditionOperator Enumeration. Specifies the operator to use to compare a formula against the value in a cell or, for xlBetween and xlNotBetween, to compare two formulas.
+; See: http://msdn.microsoft.com/en-us/library/ff840923(v=office.14).aspx
+Global Const $xlBetween = 1 ; Between. Can be used only if two formulas are provided
+Global Const $xlEqual = 3 ; Equal
+Global Const $xlGreater = 5 ; Greater than
+Global Const $xlGreaterEqual = 7 ; Greater than or equal to
+Global Const $xlLess = 6 ; Less than
+Global Const $xlLessEqual = 8 ; Less than or equal to
+Global Const $xlNotBetween = 2 ; Not between. Can be used only if two formulas are provided
+Global Const $xlNotEqual = 4 ; Not equal
+
+; XlInsertFormatOrigin Enumeration: Specifies from where to copy the format for inserted rows.
+; See: http://msdn.microsoft.com/en-us/library/ff195129(v=office.14).aspx
+Global Const $xlFormatFromLeftOrAbove = 0 ; Copy the format from cells above and/or to the left
+Global Const $xlFormatFromRightOrBelow = 1 ; Copy the format from cells below and/or to the right
+
+; XlInsertShiftDirection Enumeration. Specifies the direction in which to shift cells during an insertion.
+; See: http://msdn.microsoft.com/en-us/library/ff837618(v=office.14).aspx
+Global Const $xlShiftDown = -4121 ; Shift cells down
+Global Const $xlShiftToRight = -4161 ; Shift cells to the right
+
+; XlLookAt Enumeration. Specifies whether a match is made against the whole of the search text or any part of the search text.
+; See: http://msdn.microsoft.com/en-us/library/ff823160(v=office.14).aspx
+Global Const $xlPart = 2 ; Match against any part of the search text
+Global Const $xlWhole = 1 ; Match against the whole of the search text
+
+; XlPasteSpecialOperation Enumeration. Specifies how numeric data will be calculated with the destinations cells in the worksheet
+; See: http://msdn.microsoft.com/en-us/library/ff838010(v=office.14).aspx
+Global Const $xlPasteSpecialOperationAdd = 2 ; Copied data will be added with the value in the destination cell
+Global Const $xlPasteSpecialOperationDivide = 5 ; Copied data will be divided with the value in the destination cell
+Global Const $xlPasteSpecialOperationMultiply = 4 ; Copied data will be multiplied with the value in the destination cell
+Global Const $xlPasteSpecialOperationNone = -4142 ; No calculation will be done in the paste operation
+Global Const $xlPasteSpecialOperationSubtract = 3 ; Copied data will be subtracted with the value in the destination cell
+
+; XlPasteType Enumeration. Specifies the part of the range to be pasted.
+; See: http://msdn.microsoft.com/en-us/library/ff837425(v=office.14).aspx
+Global Const $xlPasteAll = -4104 ; Everything will be pasted
+Global Const $xlPasteAllExceptBorders = 7 ; Everything except borders will be pasted
+Global Const $xlPasteAllMergingConditionalFormats = 14 ; Everything will be pasted and conditional formats will be merged
+Global Const $xlPasteAllUsingSourceTheme = 13 ; Everything will be pasted using the source theme
+Global Const $xlPasteColumnWidths = 8 ; Copied column width is pasted
+Global Const $xlPasteComments = -4144 ; Comments are pasted
+Global Const $xlPasteFormats = -4122 ; Copied source format is pasted
+Global Const $xlPasteFormulas = -4123 ; Formulas are pasted
+Global Const $xlPasteFormulasAndNumberFormats = 11 ; Formulas and Number formats are pasted
+Global Const $xlPasteValidation = 6 ; Validations are pasted
+Global Const $xlPasteValues = -4163 ; Values are pasted
+Global Const $xlPasteValuesAndNumberFormats = 12 ; Values and Number formats are pasted
+
+; XlPlatform Enumeration. Specifies the platform on which a text file originated.
+; See: http://msdn.microsoft.com/en-us/library/ff197617(v=office.14).aspx
+Global Const $xlMacintosh = 1 ; Macintosh
+Global Const $xlMSDOS = 3 ; MS-DOS
+Global Const $xlWindows = 2 ; Microsoft Windows
+
+; XlReferenceStyle Enumeration. Specifies the reference style.
+; See: http://msdn.microsoft.com/en-us/library/ff821207(v=office.14).aspx
+Global Const $xlA1 = 1 ; Default. Use xlA1 to return an A1-style reference
+Global Const $xlR1C1 = -4150 ; Use xlR1C1 to return an R1C1-style reference
+
+; XlReferenceType Enumeration. Specifies cell reference style when a formula is being converted.
+; See: http://msdn.microsoft.com/en-us/library/ff837117(v=office.14).aspx
+Global Const $xlAbsolute = 1 ; Convert to absolute row and column style
+Global Const $xlAbsRowRelColumn = 2 ; Convert to absolute row and relative column style
+Global Const $xlRelative = 4 ; Convert to relative row and column style
+Global Const $xlRelRowAbsColumn = 3 ; Convert to relative row and absolute column style
+
+; xlSheetVisibility Enumeration. Specifies whether the object is visible.
+; See: http://msdn.microsoft.com/en-us/library/ff821673(v=office.14).aspx
+Global Const $xlSheetHidden = 0 ; Hides the worksheet which the user can unhide via menu
+Global Const $xlSheetVeryHidden = 2 ; Hides the object so that the only way for you to make it visible again is by setting this property to True (the user cannot make the object visible)
+Global Const $xlSheetVisible = -1 ; Displays the sheet
+
+; XlSortDataOption Enumeration. Specifies how to sort text.
+; See: http://msdn.microsoft.com/en-us/library/ff821069(v=office.14).aspx
+Global Const $xlSortNormal = 0 ; Sorts numeric and text data separately
+Global Const $xlSortTextAsNumbers = 1 ; Treat text as numeric data for the sort
+
+; XlSortOrder Enumeration. Specifies the sort order for the specified field or range.
+; See: http://msdn.microsoft.com/en-us/library/ff834316(v=office.14).aspx
+Global Const $xlAscending = 1 ; Sorts the specified field in ascending order
+Global Const $xlDescending = 2 ; Sorts the specified field in descending order
+
+; XlSortOn Enumeration. Specifies the parameter on which the data should be sorted.
+; See: http://msdn.microsoft.com/en-us/library/ff839572(v=office.14).aspx
+Global Const $xlSortOnCellColor = 1 ; Cell color
+Global Const $xlSortOnFontColor = 2 ; Font color
+Global Const $xlSortOnIcon = 3 ; Icon
+Global Const $xlSortOnValues = 0 ; Values
+
+; XlSortOrientation Enumeration. Specifies the sort orientation.
+; See: http://msdn.microsoft.com/en-us/library/ff839607(v=office.14).aspx
+Global Const $xlSortColumns = 1 ; Sorts by column
+Global Const $xlSortRows = 2 ; Sorts by row. This is the default value
+
+; XlTextParsingType Enumeration. Specifies the column format for the data in the text file that you are importing into a query table.
+; See: http://msdn.microsoft.com/en-us/library/ff822876(v=office.14).aspx
+Global Const $xlDelimited = 1 ; Default. Indicates that the file is delimited by delimiter characters
+Global Const $xlFixedWidth = 2 ; Indicates that the data in the file is arranged in columns of fixed widths
+
+; XlTextQualifier Enumeration. Specifies the delimiter to use to specify text.
+; See: http://msdn.microsoft.com/en-us/library/ff838376(v=office.14).aspx
+Global Const $xlTextQualifierDoubleQuote = 1 ; Double quotation mark (")
+Global Const $xlTextQualifierNone = -4142 ; No delimiter
+Global Const $xlTextQualifierSingleQuote = 2 ; Single quotation mark (')
+
+; XlYesNoGuess Enumeration. Specifies whether or not the first row contains headers.
+; See: http://msdn.microsoft.com/en-us/library/ff838812(v=office.14).aspx
+Global Const $xlGuess = 0 ; Excel determines whether there is a header, and where it is, if there is one
+Global Const $xlNo = 2 ; Default. The entire range should be sorted
+Global Const $xlYes = 1 ; The entire range should not be sorted
+; ===============================================================================================================================

+ 917 - 0
include/FTPEx_En.au3

@@ -0,0 +1,917 @@
+#include-once
+
+#include "Date.au3"
+#include "FileConstants.au3"
+#include "StructureConstants.au3"
+#include "WinAPIConv.au3"
+#include "WinAPIError.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: FTP
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with FTP.
+; Author(s) .....: Wouter, Prog@ndy, jpm, Beege
+; Notes .........: based on FTP_Ex.au3 16/02/2009 http://www.autoit.de/index.php?page=Thread&postID=48393
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hWinInet_FTP = -1
+Global $__g_hCallback_FTP, $__g_bCallback_FTP = False
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $INTERNET_OPEN_TYPE_DIRECT = 1
+Global Const $INTERNET_OPEN_TYPE_PRECONFIG = 0
+Global Const $INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4
+Global Const $INTERNET_OPEN_TYPE_PROXY = 3
+
+Global Const $FTP_TRANSFER_TYPE_UNKNOWN = 0 ;Defaults to FTP_TRANSFER_TYPE_BINARY.
+Global Const $FTP_TRANSFER_TYPE_ASCII = 1 ;Type A transfer method. Control and formatting information is converted to local equivalents.
+Global Const $FTP_TRANSFER_TYPE_BINARY = 2 ;Type I transfer method. The file is transferred exactly as it exists with no changes.
+
+Global Const $INTERNET_FLAG_DEFAULT = 0
+Global Const $INTERNET_FLAG_PASSIVE = 0x08000000
+Global Const $INTERNET_FLAG_TRANSFER_ASCII = $FTP_TRANSFER_TYPE_ASCII
+Global Const $INTERNET_FLAG_TRANSFER_BINARY = $FTP_TRANSFER_TYPE_BINARY
+
+Global Const $INTERNET_DEFAULT_FTP_PORT = 21
+Global Const $INTERNET_SERVICE_FTP = 1
+Global Const $INTERNET_SERVICE_GOPHER = 2
+Global Const $INTERNET_SERVICE_HTTP = 3
+
+; _FTP_FindFileFirst flags
+Global Const $INTERNET_FLAG_HYPERLINK = 0x00000400
+Global Const $INTERNET_FLAG_NEED_FILE = 0x00000010
+Global Const $INTERNET_FLAG_NO_CACHE_WRITE = 0x04000000
+Global Const $INTERNET_FLAG_RELOAD = 0x80000000
+Global Const $INTERNET_FLAG_RESYNCHRONIZE = 0x00000800
+
+; _FTP_Open flags
+Global Const $INTERNET_FLAG_ASYNC = 0x10000000
+Global Const $INTERNET_FLAG_FROM_CACHE = 0x01000000
+Global Const $INTERNET_FLAG_OFFLINE = $INTERNET_FLAG_FROM_CACHE
+
+; _FTP_...() Status
+Global Const $INTERNET_STATUS_CLOSING_CONNECTION = 50
+Global Const $INTERNET_STATUS_CONNECTION_CLOSED = 51
+Global Const $INTERNET_STATUS_CONNECTING_TO_SERVER = 20
+Global Const $INTERNET_STATUS_CONNECTED_TO_SERVER = 21
+Global Const $INTERNET_STATUS_CTL_RESPONSE_RECEIVED = 42
+Global Const $INTERNET_STATUS_INTERMEDIATE_RESPONSE = 120
+Global Const $INTERNET_STATUS_PREFETCH = 43
+Global Const $INTERNET_STATUS_REDIRECT = 110
+Global Const $INTERNET_STATUS_REQUEST_COMPLETE = 100
+Global Const $INTERNET_STATUS_HANDLE_CREATED = 60
+Global Const $INTERNET_STATUS_HANDLE_CLOSING = 70
+Global Const $INTERNET_STATUS_SENDING_REQUEST = 30
+Global Const $INTERNET_STATUS_REQUEST_SENT = 31
+Global Const $INTERNET_STATUS_RECEIVING_RESPONSE = 40
+Global Const $INTERNET_STATUS_RESPONSE_RECEIVED = 41
+Global Const $INTERNET_STATUS_STATE_CHANGE = 200
+Global Const $INTERNET_STATUS_RESOLVING_NAME = 10
+Global Const $INTERNET_STATUS_NAME_RESOLVED = 11
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _FTP_Close
+; _FTP_Command
+; _FTP_Connect
+; _FTP_DecodeInternetStatus
+; _FTP_DirCreate
+; _FTP_DirDelete
+; _FTP_DirGetCurrent
+; _FTP_DirPutContents
+; _FTP_DirSetCurrent
+; _FTP_FileClose
+; _FTP_FileDelete
+; _FTP_FileGet
+; _FTP_FileGetSize
+; _FTP_FileOpen
+; _FTP_FilePut
+; _FTP_FileRead
+; _FTP_FileRename
+; _FTP_FileTimeLoHiToStr
+; _FTP_FindFileClose
+; _FTP_FindFileFirst
+; _FTP_FindFileNext
+; _FTP_GetLastResponseInfo
+; _FTP_ListToArray
+; _FTP_ListToArray2D
+; _FTP_ListToArrayEx
+; _FTP_Open
+; _FTP_ProgressDownload
+; _FTP_ProgressUpload
+; _FTP_SetStatusCallback
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY#============================================================================================================
+; __FTP_ListToArray
+; __FTP_Init
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Wouter van Kesteren
+; Modified.......: Beege
+; ===============================================================================================================================
+Func _FTP_Close($hSession)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $hSession)
+	If @error Or $aDone[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	If $__g_bCallback_FTP = True Then DllCallbackFree($__g_hCallback_FTP)
+
+	Return $aDone[0]
+EndFunc   ;==>_FTP_Close
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Bill Mezian
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_Command($hFTPSession, $sFTPCommand, $iFlags = $FTP_TRANSFER_TYPE_ASCII, $iExpectResponse = 0, $iContext = 0)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $ai_FTPCommand = DllCall($__g_hWinInet_FTP, 'bool', 'FtpCommandW', 'handle', $hFTPSession, 'bool', $iExpectResponse, 'dword', $iFlags, 'wstr', $sFTPCommand, 'dword_ptr', $iContext, 'ptr*', 0)
+	If @error Or $ai_FTPCommand[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return SetError(0, $ai_FTPCommand[6], $ai_FTPCommand[0])
+EndFunc   ;==>_FTP_Command
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Wouter van Kesteren
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_Connect($hInternetSession, $sServerName, $sUsername, $sPassword, $iPassive = 0, $iServerPort = 0, $iService = $INTERNET_SERVICE_FTP, $iFlags = 0, $fuContext = 0)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	If $iPassive == 1 Then $iFlags = BitOR($iFlags, $INTERNET_FLAG_PASSIVE)
+	Local $ai_InternetConnect = DllCall($__g_hWinInet_FTP, 'hwnd', 'InternetConnectW', 'handle', $hInternetSession, 'wstr', $sServerName, 'ushort', $iServerPort, 'wstr', $sUsername, 'wstr', $sPassword, 'dword', $iService, 'dword', $iFlags, 'dword_ptr', $fuContext)
+	If @error Or $ai_InternetConnect[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return $ai_InternetConnect[0]
+EndFunc   ;==>_FTP_Connect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Beege
+; Modified.......: jpm
+; ===============================================================================================================================
+Func _FTP_DecodeInternetStatus($iInternetStatus)
+	Switch $iInternetStatus
+		Case $INTERNET_STATUS_CLOSING_CONNECTION
+			Return 'Closing connection ...'
+
+		Case $INTERNET_STATUS_CONNECTION_CLOSED
+			Return 'Connection closed'
+
+		Case $INTERNET_STATUS_CONNECTING_TO_SERVER
+			Return 'Connecting to server ...'
+
+		Case $INTERNET_STATUS_CONNECTED_TO_SERVER
+			Return 'Connected to server'
+
+		Case $INTERNET_STATUS_CTL_RESPONSE_RECEIVED
+			Return 'CTL esponse received'
+
+		Case $INTERNET_STATUS_INTERMEDIATE_RESPONSE
+			Return 'Intermediate response'
+
+		Case $INTERNET_STATUS_PREFETCH
+			Return 'Prefetch'
+
+		Case $INTERNET_STATUS_REDIRECT
+			Return 'Redirect'
+
+		Case $INTERNET_STATUS_REQUEST_COMPLETE
+			Return 'Request complete'
+
+		Case $INTERNET_STATUS_HANDLE_CREATED
+			Return 'Handle created'
+
+		Case $INTERNET_STATUS_HANDLE_CLOSING
+			Return 'Handle closing ...'
+
+		Case $INTERNET_STATUS_SENDING_REQUEST
+			Return 'Sending request ...'
+
+		Case $INTERNET_STATUS_REQUEST_SENT
+			Return 'Request sent'
+
+		Case $INTERNET_STATUS_RECEIVING_RESPONSE
+			Return 'Receiving response ...'
+
+		Case $INTERNET_STATUS_RESPONSE_RECEIVED
+			Return 'Response received'
+
+		Case $INTERNET_STATUS_STATE_CHANGE
+			Return 'State change'
+
+		Case $INTERNET_STATUS_RESOLVING_NAME
+			Return 'Resolving name ...'
+
+		Case $INTERNET_STATUS_NAME_RESOLVED
+			Return 'Name resolved'
+		Case Else
+			Return 'UNKNOWN status = ' & $iInternetStatus
+	EndSwitch
+EndFunc   ;==>_FTP_DecodeInternetStatus
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Wouter van Kesteren
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_DirCreate($hFTPSession, $sRemote)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $ai_FTPMakeDir = DllCall($__g_hWinInet_FTP, 'bool', 'FtpCreateDirectoryW', 'handle', $hFTPSession, 'wstr', $sRemote)
+	If @error Or $ai_FTPMakeDir[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return $ai_FTPMakeDir[0]
+EndFunc   ;==>_FTP_DirCreate
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Wouter van Kesteren
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_DirDelete($hFTPSession, $sRemote)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $ai_FTPDelDir = DllCall($__g_hWinInet_FTP, 'bool', 'FtpRemoveDirectoryW', 'handle', $hFTPSession, 'wstr', $sRemote)
+	If @error Or $ai_FTPDelDir[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return $ai_FTPDelDir[0]
+EndFunc   ;==>_FTP_DirDelete
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Beast
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_DirGetCurrent($hFTPSession)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $ai_FTPGetCurrentDir = DllCall($__g_hWinInet_FTP, 'bool', 'FtpGetCurrentDirectoryW', 'handle', $hFTPSession, 'wstr', "", 'dword*', 260)
+	If @error Or $ai_FTPGetCurrentDir[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return $ai_FTPGetCurrentDir[2]
+EndFunc   ;==>_FTP_DirGetCurrent
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Stumpii
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_DirPutContents($hFTPSession, $sLocalFolder, $sRemoteFolder, $bRecursivePut, $iContext = 0)
+	If StringRight($sLocalFolder, 1) == "\" Then $sLocalFolder = StringTrimRight($sLocalFolder, 1)
+	; Shows the filenames of all files in the current directory.
+	Local $hSearch = FileFindFirstFile($sLocalFolder & "\*.*")
+
+	; Check if the search was successful
+	If $hSearch = -1 Then Return SetError(1, 0, 0)
+
+	Local $sFile
+	While 1
+		$sFile = FileFindNextFile($hSearch)
+		If @error Then ExitLoop
+		If StringInStr(FileGetAttrib($sLocalFolder & "\" & $sFile), "D") Then
+			_FTP_DirCreate($hFTPSession, $sRemoteFolder & "/" & $sFile)
+			If $bRecursivePut Then
+				_FTP_DirPutContents($hFTPSession, $sLocalFolder & "\" & $sFile, $sRemoteFolder & "/" & $sFile, $bRecursivePut, $iContext)
+			EndIf
+		Else
+			_FTP_FilePut($hFTPSession, $sLocalFolder & "\" & $sFile, $sRemoteFolder & "/" & $sFile, 0, $iContext)
+		EndIf
+	WEnd
+
+	; Close the search handle
+	FileClose($hSearch)
+	Return 1
+EndFunc   ;==>_FTP_DirPutContents
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Beast
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_DirSetCurrent($hFTPSession, $sRemote)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $ai_FTPSetCurrentDir = DllCall($__g_hWinInet_FTP, 'bool', 'FtpSetCurrentDirectoryW', 'handle', $hFTPSession, 'wstr', $sRemote)
+	If @error Or $ai_FTPSetCurrentDir[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return $ai_FTPSetCurrentDir[0]
+EndFunc   ;==>_FTP_DirSetCurrent
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: joeyb1275
+; Modified.......: Prog@ndy
+; ===============================================================================================================================
+Func _FTP_FileClose($hFTPFile)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $hFTPFile)
+	If @error Or $aDone[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return $aDone[0]
+EndFunc   ;==>_FTP_FileClose
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Wouter van Kesteren
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_FileDelete($hFTPSession, $sRemoteFile)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $ai_FTPPutFile = DllCall($__g_hWinInet_FTP, 'bool', 'FtpDeleteFileW', 'handle', $hFTPSession, 'wstr', $sRemoteFile)
+	If @error Or $ai_FTPPutFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return $ai_FTPPutFile[0]
+EndFunc   ;==>_FTP_FileDelete
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Wouter van Kesteren
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_FileGet($hFTPSession, $sRemoteFile, $sLocalFile, $bFailIfExists = False, $iFlagsAndAttributes = 0, $iFlags = $FTP_TRANSFER_TYPE_UNKNOWN, $iContext = 0)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $ai_FTPGetFile = DllCall($__g_hWinInet_FTP, 'bool', 'FtpGetFileW', 'handle', $hFTPSession, 'wstr', $sRemoteFile, 'wstr', $sLocalFile, 'bool', $bFailIfExists, 'dword', $iFlagsAndAttributes, 'dword', $iFlags, 'dword_ptr', $iContext)
+	If @error Or $ai_FTPGetFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return $ai_FTPGetFile[0]
+EndFunc   ;==>_FTP_FileGet
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Joachim de Koning
+; Modified.......: jpm
+; ===============================================================================================================================
+Func _FTP_FileGetSize($hFTPSession, $sFileName)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $ai_FTPGetSizeHandle = DllCall($__g_hWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $hFTPSession, 'wstr', $sFileName, 'dword', $GENERIC_READ, 'dword', $INTERNET_FLAG_NO_CACHE_WRITE + $INTERNET_FLAG_TRANSFER_BINARY, 'dword_ptr', 0)
+	If @error Or $ai_FTPGetSizeHandle[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Local $ai_FTPGetFileSize = DllCall($__g_hWinInet_FTP, 'dword', 'FtpGetFileSize', 'handle', $ai_FTPGetSizeHandle[0], 'dword*', 0)
+	If @error Or $ai_FTPGetFileSize[0] = 0 Then
+		Local $iLasterror = _WinAPI_GetLastError()
+		DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FTPGetSizeHandle[0])
+		; No need to test @error.
+
+		Return SetError(-1, $iLasterror, 0)
+	EndIf
+
+	DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FTPGetSizeHandle[0])
+	; No need to test @error.
+
+	Return _WinAPI_MakeQWord($ai_FTPGetFileSize[0], $ai_FTPGetFileSize[2])
+EndFunc   ;==>_FTP_FileGetSize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: joeyb1275
+; Modified.......: Prog@ndy
+; ===============================================================================================================================
+Func _FTP_FileOpen($hConnect, $sFileName, $iAccess = $GENERIC_READ, $iFlags = $INTERNET_FLAG_TRANSFER_BINARY, $iContext = 0)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $ai_FtpOpenfile = DllCall($__g_hWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $hConnect, 'wstr', $sFileName, 'dword', $iAccess, 'dword', $iFlags, 'dword_ptr', $iContext)
+	If @error Or $ai_FtpOpenfile[0] == 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return $ai_FtpOpenfile[0]
+EndFunc   ;==>_FTP_FileOpen
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Wouter van Kesteren
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_FilePut($hFTPSession, $sLocalFile, $sRemoteFile, $iFlags = 0, $iContext = 0)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $ai_FTPPutFile = DllCall($__g_hWinInet_FTP, 'bool', 'FtpPutFileW', 'handle', $hFTPSession, 'wstr', $sLocalFile, 'wstr', $sRemoteFile, 'dword', $iFlags, 'dword_ptr', $iContext)
+	If @error Or $ai_FTPPutFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return $ai_FTPPutFile[0]
+EndFunc   ;==>_FTP_FilePut
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: joeyb1275
+; Modified.......: Prog@ndy
+; ===============================================================================================================================
+Func _FTP_FileRead($hFTPFile, $iNumberOfBytesToRead)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $tBuffer = DllStructCreate("byte[" & $iNumberOfBytesToRead & "]")
+
+	Local $ai_FTPReadFile = DllCall($__g_hWinInet_FTP, 'bool', 'InternetReadFile', 'handle', $hFTPFile, 'struct*', $tBuffer, 'dword', $iNumberOfBytesToRead, 'dword*', 0) ;LPDWORD lpdwNumberOfBytesRead
+	If @error Then Return SetError(1, _WinAPI_GetLastError(), 0)
+
+	Local $iNumberOfBytesRead = $ai_FTPReadFile[4]
+	If $iNumberOfBytesRead == 0 And $ai_FTPReadFile[0] == 1 Then
+		Return SetError(-1, 0, 0)
+	ElseIf $ai_FTPReadFile[0] == 0 Then
+		Return SetError(2, _WinAPI_GetLastError(), 0)
+	EndIf
+
+	Local $s_FileRead
+	If $iNumberOfBytesToRead > $iNumberOfBytesRead Then
+		$s_FileRead = BinaryMid(DllStructGetData($tBuffer, 1), 1, $iNumberOfBytesRead) ;index is omitted so the entire array is written into $s_FileRead as a BinaryString
+	Else
+		$s_FileRead = DllStructGetData($tBuffer, 1) ;index is omitted so the entire array is written into $s_FileRead as a BinaryString
+	EndIf
+
+	Return SetError(0, $iNumberOfBytesRead, $s_FileRead)
+EndFunc   ;==>_FTP_FileRead
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Wouter van Kesteren
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_FileRename($hFTPSession, $sExisting, $sNew)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $ai_FTPRenameFile = DllCall($__g_hWinInet_FTP, 'bool', 'FtpRenameFileW', 'handle', $hFTPSession, 'wstr', $sExisting, 'wstr', $sNew)
+	If @error Or $ai_FTPRenameFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return $ai_FTPRenameFile[0]
+EndFunc   ;==>_FTP_FileRename
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Prog@ndy
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_FileTimeLoHiToStr($iLoDWORD, $iHiDWORD, $iFmt = 0)
+	Local $tFileTime = DllStructCreate($tagFILETIME)
+	If Not $iLoDWORD And Not $iHiDWORD Then Return SetError(1, 0, "")
+	DllStructSetData($tFileTime, 1, $iLoDWORD)
+	DllStructSetData($tFileTime, 2, $iHiDWORD)
+	Local $sDate = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
+	Return SetError(@error, @extended, $sDate)
+EndFunc   ;==>_FTP_FileTimeLoHiToStr
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Dick Bronsdijk
+; Modified.......: Prog@ndy, jpm
+; ===============================================================================================================================
+Func _FTP_FindFileClose($hFTPFind)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $ai_FTPPutFile = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $hFTPFind)
+	If @error Or $ai_FTPPutFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), "")
+
+	Return $ai_FTPPutFile[0]
+EndFunc   ;==>_FTP_FindFileClose
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Dick Bronsdijk
+; Modified.......: Prog@ndy, jpm
+; ===============================================================================================================================
+Func _FTP_FindFileFirst($hFTPSession, $sRemotePath, ByRef $hFTPFind, $iFlags = 0, $iContext = 0)
+	;flags = 0 changed to $INTERNET_FLAG_TRANSFER_BINARY to see if stops hanging
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+	Local $t_DllStruct = DllStructCreate($tagWIN32_FIND_DATA)
+	If @error Then Return SetError(-3, 0, "")
+
+	Local $a_FTPFileList[1]
+	$a_FTPFileList[0] = 0
+
+	Local $ai_FTPFirstFile = DllCall($__g_hWinInet_FTP, 'handle', 'FtpFindFirstFileW', 'handle', $hFTPSession, 'wstr', $sRemotePath, 'struct*', $t_DllStruct, 'dword', $iFlags, 'dword_ptr', $iContext)
+	If @error Or $ai_FTPFirstFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), $ai_FTPFirstFile)
+
+	$hFTPFind = $ai_FTPFirstFile[0]
+
+	Local $a_FTPFileList[12]
+	$a_FTPFileList[0] = 11
+	$a_FTPFileList[1] = DllStructGetData($t_DllStruct, "dwFileAttributes")
+	$a_FTPFileList[2] = DllStructGetData($t_DllStruct, "ftCreationTime", 1)
+	$a_FTPFileList[3] = DllStructGetData($t_DllStruct, "ftCreationTime", 2)
+	$a_FTPFileList[4] = DllStructGetData($t_DllStruct, "ftLastAccessTime", 1)
+	$a_FTPFileList[5] = DllStructGetData($t_DllStruct, "ftLastAccessTime", 2)
+	$a_FTPFileList[6] = DllStructGetData($t_DllStruct, "ftLastWriteTime", 1)
+	$a_FTPFileList[7] = DllStructGetData($t_DllStruct, "ftLastWriteTime", 2)
+	$a_FTPFileList[8] = DllStructGetData($t_DllStruct, "nFileSizeHigh")
+	$a_FTPFileList[9] = DllStructGetData($t_DllStruct, "nFileSizeLow")
+	$a_FTPFileList[10] = DllStructGetData($t_DllStruct, "cFileName")
+	$a_FTPFileList[11] = DllStructGetData($t_DllStruct, "cAlternateFileName")
+
+	Return $a_FTPFileList
+EndFunc   ;==>_FTP_FindFileFirst
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Dick Bronsdijk
+; Modified.......: Prog@ndy, jpm
+; ===============================================================================================================================
+Func _FTP_FindFileNext($hFTPFind)
+	Local $t_DllStruct = DllStructCreate($tagWIN32_FIND_DATA)
+
+	Local $a_FTPFileList[1]
+	$a_FTPFileList[0] = 0
+
+	Local $ai_FTPPutFile = DllCall($__g_hWinInet_FTP, 'bool', 'InternetFindNextFileW', 'handle', $hFTPFind, 'struct*', $t_DllStruct)
+	If @error Or $ai_FTPPutFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), $a_FTPFileList)
+
+	Local $a_FTPFileList[12]
+	$a_FTPFileList[0] = 11
+	$a_FTPFileList[1] = DllStructGetData($t_DllStruct, "dwFileAttributes")
+	$a_FTPFileList[2] = DllStructGetData($t_DllStruct, "ftCreationTime", 1)
+	$a_FTPFileList[3] = DllStructGetData($t_DllStruct, "ftCreationTime", 2)
+	$a_FTPFileList[4] = DllStructGetData($t_DllStruct, "ftLastAccessTime", 1)
+	$a_FTPFileList[5] = DllStructGetData($t_DllStruct, "ftLastAccessTime", 2)
+	$a_FTPFileList[6] = DllStructGetData($t_DllStruct, "ftLastWriteTime", 1)
+	$a_FTPFileList[7] = DllStructGetData($t_DllStruct, "ftLastWriteTime", 2)
+	$a_FTPFileList[8] = DllStructGetData($t_DllStruct, "nFileSizeHigh")
+	$a_FTPFileList[9] = DllStructGetData($t_DllStruct, "nFileSizeLow")
+	$a_FTPFileList[10] = DllStructGetData($t_DllStruct, "cFileName")
+	$a_FTPFileList[11] = DllStructGetData($t_DllStruct, "cAlternateFileName")
+
+	Return $a_FTPFileList
+EndFunc   ;==>_FTP_FindFileNext
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: jpm
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_GetLastResponseInfo(ByRef $iError, ByRef $sMessage)
+	Local $ai_LastResponseInfo = DllCall($__g_hWinInet_FTP, 'bool', 'InternetGetLastResponseInfoW', 'dword*', 0, 'wstr', "", 'dword*', 4096)
+	If @error Or $ai_LastResponseInfo[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+	$iError = $ai_LastResponseInfo[1]
+	$sMessage = $ai_LastResponseInfo[2]
+	Return $ai_LastResponseInfo[0]
+EndFunc   ;==>_FTP_GetLastResponseInfo
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Beast, Prog@ndy
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_ListToArray($hFTPSession, $iReturnType = 0, $iFlags = $INTERNET_FLAG_NO_CACHE_WRITE, $iContext = 0)
+	Local $aArray[1]
+	$aArray[0] = 0
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, $aArray)
+	$aArray = __FTP_ListToArray($hFTPSession, $iReturnType, $iFlags, 0, 1, $iContext)
+	Return SetError(@error, @extended, $aArray)
+EndFunc   ;==>_FTP_ListToArray
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Prog@ndy
+; Modified.......: jpm
+; ===============================================================================================================================
+Func _FTP_ListToArray2D($hFTPSession, $iReturnType = 0, $iFlags = $INTERNET_FLAG_NO_CACHE_WRITE, $iContext = 0)
+	Local $aArray[1][1]
+	$aArray[0][0] = 0
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, $aArray)
+	$aArray = __FTP_ListToArray($hFTPSession, $iReturnType, $iFlags, 0, 2, $iContext)
+	Return SetError(@error, @extended, $aArray)
+EndFunc   ;==>_FTP_ListToArray2D
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Beast, Prog@ndy
+; Modified.......: jpm
+; ===============================================================================================================================
+Func _FTP_ListToArrayEx($hFTPSession, $iReturnType = 0, $iFlags = $INTERNET_FLAG_NO_CACHE_WRITE, $iFmt = 1, $iContext = 0)
+	Local $aArray[1][1]
+	$aArray[0][0] = 0
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, $aArray)
+	$aArray = __FTP_ListToArray($hFTPSession, $iReturnType, $iFlags, $iFmt, 6, $iContext)
+	Return SetError(@error, @extended, $aArray)
+EndFunc   ;==>_FTP_ListToArrayEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Wouter van Kesteren
+; Modified.......:
+; ===============================================================================================================================
+Func _FTP_Open($sAgent, $iAccessType = $INTERNET_OPEN_TYPE_DIRECT, $sProxyName = '', $sProxyBypass = '', $iFlags = 0)
+	If $__g_hWinInet_FTP = -1 Then __FTP_Init()
+	Local $ai_InternetOpen = DllCall($__g_hWinInet_FTP, 'handle', 'InternetOpenW', 'wstr', $sAgent, 'dword', $iAccessType, _
+			'wstr', $sProxyName, 'wstr', $sProxyBypass, 'dword', $iFlags)
+	If @error Or $ai_InternetOpen[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Return $ai_InternetOpen[0]
+EndFunc   ;==>_FTP_Open
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: limette, Prog@ndy
+; Modified.......: jchd
+; ===============================================================================================================================
+Func _FTP_ProgressDownload($hFTPSession, $sLocalFile, $sRemoteFile, $hFunctionToCall = 0)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+
+	Local $hFile = FileOpen($sLocalFile, $FO_OVERWRITE + $FO_BINARY)
+	If $hFile < 0 Then Return SetError(-1, 0, 0)
+
+	Local $ai_FtpOpenfile = DllCall($__g_hWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $hFTPSession, 'wstr', $sRemoteFile, 'dword', $GENERIC_READ, 'dword', $FTP_TRANSFER_TYPE_BINARY, 'dword_ptr', 0)
+	If @error Or $ai_FtpOpenfile[0] = 0 Then Return SetError(-3, _WinAPI_GetLastError(), 0)
+
+	Local $ai_FTPGetFileSize = DllCall($__g_hWinInet_FTP, 'dword', 'FtpGetFileSize', 'handle', $ai_FtpOpenfile[0], 'dword*', 0)
+	If @error Then Return SetError(-2, _WinAPI_GetLastError(), 0)
+
+	If Not IsFunc($hFunctionToCall) Then ProgressOn("FTP Download", "Downloading " & $sLocalFile)
+
+	Local $iLen = _WinAPI_MakeQWord($ai_FTPGetFileSize[0], $ai_FTPGetFileSize[2]) ;FileGetSize($sRemoteFile)
+	Local Const $iChunkSize = 256 * 1024
+	Local $iLast = Mod($iLen, $iChunkSize)
+
+	Local $iParts = Ceiling($iLen / $iChunkSize)
+	Local $tBuffer = DllStructCreate("byte[" & $iChunkSize & "]")
+
+	Local $aDone, $ai_FTPread, $iOut, $iRet, $iLasterror
+	Local $x = $iChunkSize
+	Local $iDone = 0
+	For $i = 1 To $iParts
+		If $i = $iParts And $iLast > 0 Then
+			$x = $iLast
+		EndIf
+
+		$ai_FTPread = DllCall($__g_hWinInet_FTP, 'bool', 'InternetReadFile', 'handle', $ai_FtpOpenfile[0], 'struct*', $tBuffer, 'dword', $x, 'dword*', $iOut)
+		If @error Or $ai_FTPread[0] = 0 Then
+			$iLasterror = _WinAPI_GetLastError()
+			$aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
+			; No need to test @error.
+			FileClose($hFile)
+			If Not IsFunc($hFunctionToCall) Then ProgressOff()
+			Return SetError(-4, $iLasterror, 0)
+		EndIf
+		$iRet = FileWrite($hFile, BinaryMid(DllStructGetData($tBuffer, 1), 1, $ai_FTPread[4]))
+		If Not $iRet Then
+			$iLasterror = _WinAPI_GetLastError()
+			$aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
+			; No need to test @error.
+			FileClose($hFile)
+			FileDelete($sLocalFile)
+			If Not IsFunc($hFunctionToCall) Then ProgressOff()
+			Return SetError(-7, $iLasterror, 0)
+		EndIf
+		$iDone += $ai_FTPread[4]
+
+		If Not IsFunc($hFunctionToCall) Then
+			ProgressSet(($iDone / $iLen) * 100)
+		Else
+			$iRet = $hFunctionToCall(($iDone / $iLen) * 100)
+			If $iRet <= 0 Then
+				$iLasterror = @error
+				$aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
+				; No need to test @error.
+				FileClose($hFile)
+				FileDelete($sLocalFile)
+				If Not IsFunc($hFunctionToCall) Then ProgressOff()
+				Return SetError(-6, $iLasterror, $iRet)
+			EndIf
+		EndIf
+		Sleep(10)
+	Next
+
+	FileClose($hFile)
+
+	If Not IsFunc($hFunctionToCall) Then ProgressOff()
+
+	$aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
+	If @error Or $aDone[0] = 0 Then
+		Return SetError(-5, _WinAPI_GetLastError(), 0)
+	EndIf
+
+	Return 1
+EndFunc   ;==>_FTP_ProgressDownload
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: limette, Prog@ndy
+; Modified.......: jchd
+; ===============================================================================================================================
+Func _FTP_ProgressUpload($hFTPSession, $sLocalFile, $sRemoteFile, $hFunctionToCall = 0)
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+
+	Local $hFile = FileOpen($sLocalFile, $FO_BINARY)
+	If @error Then Return SetError(-1, _WinAPI_GetLastError(), 0)
+
+	Local $ai_FtpOpenfile = DllCall($__g_hWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $hFTPSession, 'wstr', $sRemoteFile, 'dword', $GENERIC_WRITE, 'dword', $FTP_TRANSFER_TYPE_BINARY, 'dword_ptr', 0)
+	If @error Or $ai_FtpOpenfile[0] = 0 Then Return SetError(-3, _WinAPI_GetLastError(), 0)
+
+	If Not IsFunc($hFunctionToCall) Then ProgressOn("FTP Upload", "Uploading " & $sLocalFile)
+
+	Local $iLen = FileGetSize($sLocalFile)
+	Local Const $iChunkSize = 256 * 1024
+	Local $iLast = Mod($iLen, $iChunkSize)
+
+	Local $iParts = Ceiling($iLen / $iChunkSize)
+	Local $tBuffer = DllStructCreate("byte[" & $iChunkSize & "]")
+
+	Local $aDone, $ai_FtpWrite, $iOut, $iRet, $iLasterror
+	Local $x = $iChunkSize
+	Local $iDone = 0
+	For $i = 1 To $iParts
+		If $i = $iParts And $iLast > 0 Then
+			$x = $iLast
+		EndIf
+		DllStructSetData($tBuffer, 1, FileRead($hFile, $x))
+
+		$ai_FtpWrite = DllCall($__g_hWinInet_FTP, 'bool', 'InternetWriteFile', 'handle', $ai_FtpOpenfile[0], 'struct*', $tBuffer, 'dword', $x, 'dword*', $iOut)
+		If @error Or $ai_FtpWrite[0] = 0 Then
+			$iLasterror = _WinAPI_GetLastError()
+			$aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
+			; No need to test @error.
+			FileClose($hFile)
+
+			If Not IsFunc($hFunctionToCall) Then ProgressOff()
+			Return SetError(-4, $iLasterror, 0)
+		EndIf
+		$iDone += $x
+
+		If Not IsFunc($hFunctionToCall) Then
+			ProgressSet(($iDone / $iLen) * 100)
+		Else
+			$iRet = $hFunctionToCall(($iDone / $iLen) * 100)
+			If $iRet <= 0 Then
+				$iLasterror = @error
+				$aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
+				; No need to test @error.
+				DllCall($__g_hWinInet_FTP, 'bool', 'FtpDeleteFileW', 'handle', $hFTPSession, 'wstr', $sRemoteFile)
+				; No need to test @error.
+				FileClose($hFile)
+				If Not IsFunc($hFunctionToCall) Then ProgressOff()
+				Return SetError(-6, $iLasterror, $iRet)
+			EndIf
+		EndIf
+		Sleep(10)
+	Next
+
+	FileClose($hFile)
+
+	If Not IsFunc($hFunctionToCall) Then ProgressOff()
+
+	$aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
+	; No need to test @error.
+	If @error Or $aDone[0] = 0 Then Return SetError(-5, _WinAPI_GetLastError(), 0)
+
+	Return 1
+EndFunc   ;==>_FTP_ProgressUpload
+
+; FUNCTION# ====================================================================================================================
+; Name...........: _FTP_SetStatusCallback
+; Description ...: Registers callback function that WinINet functions can call as progress is made during an operation.
+; Syntax.........: _InternetSetStatusCallback ($hInternetSession, $sFunctionName )
+; Parameters ....: $hInternetSession   - as returned by _FTP_Open().
+;                  $sFunctionName       - The name of the User Defined Function to call
+; Return values .: Success      - Pointer to callback function
+;                  Failure      - 0 and Set @error
+; Author ........: Beege
+; Modified.......: jpm
+; Remarks .......:
+; Related .......: _FTP_DecodeInternetStatus
+; Link ..........: @@MsdnLink@@ InternetSetStatusCallback
+; Example .......: Yes
+; ===============================================================================================================================
+Func _FTP_SetStatusCallback($hInternetSession, $sFunctionName)
+	#Au3Stripper_Ignore_Funcs=$sFunctionName
+	If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
+
+	Local $hCallBack_Register = DllCallbackRegister($sFunctionName, "none", "ptr;ptr;dword;ptr;dword")
+	If Not $hCallBack_Register Then Return SetError(-1, 0, 0)
+
+	Local $ah_CallBackFunction = DllCall('wininet.dll', "ptr", "InternetSetStatusCallback", "ptr", $hInternetSession, "ulong_ptr", DllCallbackGetPtr($hCallBack_Register))
+	If @error Then Return SetError(-3, 0, 0)
+	If $ah_CallBackFunction[0] = Ptr(-1) Then Return SetError(-4, 0, 0) ; INTERNET_INVALID_STATUS_CALLBACK
+
+	$__g_bCallback_FTP = True
+	$__g_hCallback_FTP = $hCallBack_Register
+	Return $ah_CallBackFunction[1]
+EndFunc   ;==>_FTP_SetStatusCallback
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __FTP_ListToArray
+; Description ...:
+; Syntax.........: __FTP_ListToArray ( $hFTPSession [, $iReturnType = 0 [, $iFlags = 0 [, $iFmt = 1 [, $iArrayCount = 6 [, $iContext = 0 ]]]]] )
+; Parameters ....:
+; Return values .: an 2D array with the requested info defined by $iArrayCount
+;                  [0] Filename
+;                  [1] Filesize
+;                  [2] FileAttribute
+;                  [3] File Modification time
+;                  [4] File Creation time
+;                  [5] File Access time
+; Author ........: Beast, Prog@ndy
+; Modified.......: jpm (to be use by external UDFs)
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __FTP_ListToArray($hFTPSession, $iReturnType, $iFlags, $iFmt, $iArrayCount, $iContext)
+	If $iArrayCount = 1 Then
+		Local $asFileArray[1], $aDirectoryArray[1]
+		$asFileArray[0] = 0
+	Else
+		Local $asFileArray[1][$iArrayCount], $aDirectoryArray[1][$iArrayCount]
+		$asFileArray[0][0] = 0
+	EndIf
+
+	If $iReturnType < 0 Or $iReturnType > 2 Then Return SetError(3, 0, $asFileArray)
+
+	; 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];"
+	Local $tWIN32_FIND_DATA = DllStructCreate($tagWIN32_FIND_DATA)
+	Local $iLasterror
+	Local $aCallFindFirst = DllCall($__g_hWinInet_FTP, 'handle', 'FtpFindFirstFileW', 'handle', $hFTPSession, 'wstr', "", 'struct*', $tWIN32_FIND_DATA, 'dword', $iFlags, 'dword_ptr', $iContext)
+	If @error Or Not $aCallFindFirst[0] Then
+		$iLasterror = _WinAPI_GetLastError()
+		If $iLasterror = 12003 Then ; ERROR_INTERNET_EXTENDED_ERROR
+			Local $iError, $sMessage
+			_FTP_GetLastResponseInfo($iError, $sMessage)
+			$iLasterror = $iError
+		EndIf
+		Return SetError(1, $iLasterror, $asFileArray)
+	EndIf
+
+	Local $iDirectoryIndex = 0, $sFileIndex = 0
+	Local $tFileTime, $bIsDir, $aCallFindNext
+	Do
+		$bIsDir = BitAND(DllStructGetData($tWIN32_FIND_DATA, "dwFileAttributes"), $FILE_ATTRIBUTE_DIRECTORY) = $FILE_ATTRIBUTE_DIRECTORY
+		If $bIsDir And ($iReturnType <> 2) Then
+			$iDirectoryIndex += 1
+			If $iArrayCount = 1 Then
+				If UBound($aDirectoryArray) < $iDirectoryIndex + 1 Then ReDim $aDirectoryArray[$iDirectoryIndex * 2]
+				$aDirectoryArray[$iDirectoryIndex] = DllStructGetData($tWIN32_FIND_DATA, "cFileName")
+			Else
+				If UBound($aDirectoryArray) < $iDirectoryIndex + 1 Then ReDim $aDirectoryArray[$iDirectoryIndex * 2][$iArrayCount]
+				$aDirectoryArray[$iDirectoryIndex][0] = DllStructGetData($tWIN32_FIND_DATA, "cFileName")
+
+				$aDirectoryArray[$iDirectoryIndex][1] = _WinAPI_MakeQWord(DllStructGetData($tWIN32_FIND_DATA, "nFileSizeLow"), DllStructGetData($tWIN32_FIND_DATA, "nFileSizeHigh"))
+				If $iArrayCount = 6 Then
+					$aDirectoryArray[$iDirectoryIndex][2] = DllStructGetData($tWIN32_FIND_DATA, "dwFileAttributes")
+
+					$tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastWriteTime"))
+					$aDirectoryArray[$iDirectoryIndex][3] = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
+					$tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftCreationTime"))
+					$aDirectoryArray[$iDirectoryIndex][4] = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
+					$tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastAccessTime"))
+					$aDirectoryArray[$iDirectoryIndex][5] = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
+				EndIf
+			EndIf
+		ElseIf Not $bIsDir And $iReturnType <> 1 Then
+			$sFileIndex += 1
+			If $iArrayCount = 1 Then
+				If UBound($asFileArray) < $sFileIndex + 1 Then ReDim $asFileArray[$sFileIndex * 2]
+				$asFileArray[$sFileIndex] = DllStructGetData($tWIN32_FIND_DATA, "cFileName")
+			Else
+				If UBound($asFileArray) < $sFileIndex + 1 Then ReDim $asFileArray[$sFileIndex * 2][$iArrayCount]
+				$asFileArray[$sFileIndex][0] = DllStructGetData($tWIN32_FIND_DATA, "cFileName")
+
+				$asFileArray[$sFileIndex][1] = _WinAPI_MakeQWord(DllStructGetData($tWIN32_FIND_DATA, "nFileSizeLow"), DllStructGetData($tWIN32_FIND_DATA, "nFileSizeHigh"))
+				If $iArrayCount = 6 Then
+					$asFileArray[$sFileIndex][2] = DllStructGetData($tWIN32_FIND_DATA, "dwFileAttributes")
+
+					$tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastWriteTime"))
+					$asFileArray[$sFileIndex][3] = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
+					$tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftCreationTime"))
+					$asFileArray[$sFileIndex][4] = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
+					$tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastAccessTime"))
+					$asFileArray[$sFileIndex][5] = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
+				EndIf
+			EndIf
+		EndIf
+
+		$aCallFindNext = DllCall($__g_hWinInet_FTP, 'bool', 'InternetFindNextFileW', 'handle', $aCallFindFirst[0], 'struct*', $tWIN32_FIND_DATA)
+		If @error Then
+			$iLasterror = _WinAPI_GetLastError()
+			DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $aCallFindFirst[0])
+			Return SetError(2, $iLasterror, $asFileArray)
+		EndIf
+	Until Not $aCallFindNext[0]
+
+	DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $aCallFindFirst[0])
+	; No need to test @error.
+
+	If $iArrayCount = 1 Then
+		$aDirectoryArray[0] = $iDirectoryIndex
+		$asFileArray[0] = $sFileIndex
+	Else
+		$aDirectoryArray[0][0] = $iDirectoryIndex
+		$asFileArray[0][0] = $sFileIndex
+	EndIf
+
+	Switch $iReturnType
+		Case 0
+			If $iArrayCount = 1 Then
+				ReDim $aDirectoryArray[$aDirectoryArray[0] + $asFileArray[0] + 1]
+				For $i = 1 To $sFileIndex
+					$aDirectoryArray[$aDirectoryArray[0] + $i] = $asFileArray[$i]
+				Next
+				$aDirectoryArray[0] += $asFileArray[0]
+			Else
+				ReDim $aDirectoryArray[$aDirectoryArray[0][0] + $asFileArray[0][0] + 1][$iArrayCount]
+				For $i = 1 To $sFileIndex
+					For $j = 0 To $iArrayCount - 1
+						$aDirectoryArray[$aDirectoryArray[0][0] + $i][$j] = $asFileArray[$i][$j]
+					Next
+				Next
+				$aDirectoryArray[0][0] += $asFileArray[0][0]
+			EndIf
+			Return $aDirectoryArray
+		Case 1
+			If $iArrayCount = 1 Then
+				ReDim $aDirectoryArray[$iDirectoryIndex + 1]
+			Else
+				ReDim $aDirectoryArray[$iDirectoryIndex + 1][$iArrayCount]
+			EndIf
+			Return $aDirectoryArray
+		Case 2
+			If $iArrayCount = 1 Then
+				ReDim $asFileArray[$sFileIndex + 1]
+			Else
+				ReDim $asFileArray[$sFileIndex + 1][$iArrayCount]
+			EndIf
+			Return $asFileArray
+	EndSwitch
+EndFunc   ;==>__FTP_ListToArray
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __FTP_Init
+; Description ...: DllOpen wininet.dll
+; Syntax.........: __FTP_Init ( )
+; Parameters ....:
+; Return values .:
+; Author ........:
+; Modified.......:
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __FTP_Init()
+	$__g_hWinInet_FTP = DllOpen('wininet.dll')
+EndFunc   ;==>__FTP_Init

ファイルの差分が大きいため隠しています
+ 1085 - 0
include/File.au3


+ 159 - 0
include/FileConstants.au3

@@ -0,0 +1,159 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: File_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants to be included in an AutoIt v3 script when using File functions.
+; Author(s) .....: Valik, Gary Frost, ...
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; Indicates file copy and install options
+Global Const $FC_NOOVERWRITE = 0 ; Do not overwrite existing files (default)
+Global Const $FC_OVERWRITE = 1 ; Overwrite existing files
+Global Const $FC_CREATEPATH = 8 ; Create destination directory structure if it doesn't exist
+
+; Indicates file date and time options
+Global Const $FT_MODIFIED = 0 ; Date and time file was last modified (default)
+Global Const $FT_CREATED = 1 ; Date and time file was created
+Global Const $FT_ACCESSED = 2 ; Date and time file was last accessed
+
+; FileGetTime Constants
+Global Const $FT_ARRAY = 0
+Global Const $FT_STRING = 1
+
+; FileSelectFolder Constants
+Global Const $FSF_CREATEBUTTON = 1
+Global Const $FSF_NEWDIALOG = 2
+Global Const $FSF_EDITCONTROL = 4
+
+; FileSetTime, FileSetAttrib
+Global Const $FT_NONRECURSIVE = 0
+Global Const $FT_RECURSIVE = 1
+
+; Indicates the mode to open a file
+Global Const $FO_READ = 0 ; Read mode
+Global Const $FO_APPEND = 1 ; Write mode (append)
+Global Const $FO_OVERWRITE = 2 ; Write mode (erase previous contents)
+Global Const $FO_CREATEPATH = 8 ; Create directory structure if it doesn't exist
+Global Const $FO_BINARY = 16 ; Read/Write mode binary
+Global Const $FO_UNICODE = 32 ; Write mode Unicode UTF16-LE
+Global Const $FO_UTF16_LE = 32 ; Write mode Unicode UTF16-LE
+Global Const $FO_UTF16_BE = 64 ; Write mode Unicode UTF16-BE
+Global Const $FO_UTF8 = 128 ; Read/Write mode UTF8 with BOM
+Global Const $FO_UTF8_NOBOM = 256 ; Read/Write mode UTF8 with no BOM
+Global Const $FO_ANSI = 512 ; Read/Write mode ANSI
+Global Const $FO_UTF16_LE_NOBOM = 1024 ; Write mode Unicode UTF16-LE with no BOM
+Global Const $FO_UTF16_BE_NOBOM = 2048 ; Write mode Unicode UTF16-BE with no BOM
+Global Const $FO_UTF8_FULL = 16384 ; Use full file UTF8 detection if no BOM present
+Global Const $FO_FULLFILE_DETECT = 16384 ; Use full file UTF8 detection if no BOM present
+
+; Indicates file read options
+Global Const $EOF = -1 ; End-of-file reached
+
+; Indicates file open and save dialog options
+Global Const $FD_FILEMUSTEXIST = 1 ; File must exist
+Global Const $FD_PATHMUSTEXIST = 2 ; Path must exist
+Global Const $FD_MULTISELECT = 4 ; Allow multi-select
+Global Const $FD_PROMPTCREATENEW = 8 ; Prompt to create new file
+Global Const $FD_PROMPTOVERWRITE = 16 ; Prompt to overWrite file
+
+Global Const $CREATE_NEW = 1
+Global Const $CREATE_ALWAYS = 2
+Global Const $OPEN_EXISTING = 3
+Global Const $OPEN_ALWAYS = 4
+Global Const $TRUNCATE_EXISTING = 5
+
+Global Const $INVALID_SET_FILE_POINTER = -1
+
+; Indicates starting point for the file pointer move operations
+Global Const $FILE_BEGIN = 0
+Global Const $FILE_CURRENT = 1
+Global Const $FILE_END = 2
+
+Global Const $FILE_ATTRIBUTE_READONLY = 0x00000001
+Global Const $FILE_ATTRIBUTE_HIDDEN = 0x00000002
+Global Const $FILE_ATTRIBUTE_SYSTEM = 0x00000004
+Global Const $FILE_ATTRIBUTE_DIRECTORY = 0x00000010
+Global Const $FILE_ATTRIBUTE_ARCHIVE = 0x00000020
+Global Const $FILE_ATTRIBUTE_DEVICE = 0x00000040
+Global Const $FILE_ATTRIBUTE_NORMAL = 0x00000080
+Global Const $FILE_ATTRIBUTE_TEMPORARY = 0x00000100
+Global Const $FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200
+Global Const $FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
+Global Const $FILE_ATTRIBUTE_COMPRESSED = 0x00000800
+Global Const $FILE_ATTRIBUTE_OFFLINE = 0x00001000
+Global Const $FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000
+Global Const $FILE_ATTRIBUTE_ENCRYPTED = 0x00004000
+
+Global Const $FILE_SHARE_READ = 0x00000001
+Global Const $FILE_SHARE_WRITE = 0x00000002
+Global Const $FILE_SHARE_DELETE = 0x00000004
+Global Const $FILE_SHARE_READWRITE = BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE)
+Global Const $FILE_SHARE_ANY = BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE, $FILE_SHARE_DELETE)
+
+Global Const $GENERIC_ALL = 0x10000000
+Global Const $GENERIC_EXECUTE = 0x20000000
+Global Const $GENERIC_WRITE = 0x40000000
+Global Const $GENERIC_READ = 0x80000000
+Global Const $GENERIC_READWRITE = BitOR($GENERIC_READ, $GENERIC_WRITE)
+
+; FileGetEncoding Constants
+Global Const $FILE_ENCODING_UTF16LE = 32
+
+Global Const $FE_ENTIRE_UTF8 = 1
+Global Const $FE_PARTIALFIRST_UTF8 = 2
+
+; FileGetLongName and FileGetShortName
+Global Const $FN_FULLPATH = 0
+Global Const $FN_RELATIVEPATH = 1
+
+; FileGetVersion Constants _WinAPI_VerQueryValue, _WinAPI_VerQueryValueEx
+Global Const $FV_COMMENTS = "Comments"
+Global Const $FV_COMPANYNAME = "CompanyName"
+Global Const $FV_FILEDESCRIPTION = "FileDescription"
+Global Const $FV_FILEVERSION = "FileVersion"
+Global Const $FV_INTERNALNAME = "InternalName"
+Global Const $FV_LEGALCOPYRIGHT = "LegalCopyright"
+Global Const $FV_LEGALTRADEMARKS = "LegalTrademarks"
+Global Const $FV_ORIGINALFILENAME = "OriginalFilename"
+Global Const $FV_PRODUCTNAME = "ProductName"
+Global Const $FV_PRODUCTVERSION = "ProductVersion"
+Global Const $FV_PRIVATEBUILD = "PrivateBuild"
+Global Const $FV_SPECIALBUILD = "SpecialBuild"
+
+; Indicates _FileReadToArray modes
+Global Const $FRTA_NOCOUNT = 0
+Global Const $FRTA_COUNT = 1
+Global Const $FRTA_INTARRAYS = 2
+Global Const $FRTA_ENTIRESPLIT = 4
+
+; Indicates _FileListToArray modes
+Global Const $FLTA_FILESFOLDERS = 0
+Global Const $FLTA_FILES = 1
+Global Const $FLTA_FOLDERS = 2
+
+; Indicates _FileListToArrayRec modes
+Global Const $FLTAR_FILESFOLDERS = 0
+Global Const $FLTAR_FILES = 1
+Global Const $FLTAR_FOLDERS = 2
+Global Const $FLTAR_NOHIDDEN = 4
+Global Const $FLTAR_NOSYSTEM = 8
+Global Const $FLTAR_NOLINK = 16
+Global Const $FLTAR_NORECUR = 0
+Global Const $FLTAR_RECUR = 1
+Global Const $FLTAR_NOSORT = 0
+Global Const $FLTAR_SORT = 1
+Global Const $FLTAR_FASTSORT = 2
+Global Const $FLTAR_NOPATH = 0
+Global Const $FLTAR_RELPATH = 1
+Global Const $FLTAR_FULLPATH = 2
+
+; _PathSplit Constants
+Global Const $PATH_ORIGINAL = 0
+Global Const $PATH_DRIVE = 1
+Global Const $PATH_DIRECTORY = 2
+Global Const $PATH_FILENAME = 3
+Global Const $PATH_EXTENSION = 4
+; ===============================================================================================================================

+ 105 - 0
include/FontConstants.au3

@@ -0,0 +1,105 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: Font_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants for Font functions.
+; Author(s) .....: Gary Frost
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; fonts
+Global Const $FW_DONTCARE = 0
+Global Const $FW_THIN = 100
+Global Const $FW_EXTRALIGHT = 200
+Global Const $FW_ULTRALIGHT = 200
+Global Const $FW_LIGHT = 300
+Global Const $FW_NORMAL = 400
+Global Const $FW_REGULAR = 400
+Global Const $FW_MEDIUM = 500
+Global Const $FW_SEMIBOLD = 600
+Global Const $FW_DEMIBOLD = 600
+Global Const $FW_BOLD = 700
+Global Const $FW_EXTRABOLD = 800
+Global Const $FW_ULTRABOLD = 800
+Global Const $FW_HEAVY = 900
+Global Const $FW_BLACK = 900
+
+; Font Dialog constants
+Global Const $CF_EFFECTS = 0x100
+Global Const $CF_PRINTERFONTS = 0x2
+Global Const $CF_SCREENFONTS = 0x1
+Global Const $CF_NOSCRIPTSEL = 0x800000
+Global Const $CF_INITTOLOGFONTSTRUCT = 0x40
+Global Const $LOGPIXELSX = 88
+Global Const $LOGPIXELSY = 90
+
+; Font Char sets
+Global Const $ANSI_CHARSET = 0
+Global Const $ARABIC_CHARSET = 178
+Global Const $BALTIC_CHARSET = 186
+Global Const $CHINESEBIG5_CHARSET = 136
+Global Const $DEFAULT_CHARSET = 1
+Global Const $EASTEUROPE_CHARSET = 238
+Global Const $GB2312_CHARSET = 134
+Global Const $GREEK_CHARSET = 161
+Global Const $HANGEUL_CHARSET = 129
+Global Const $HEBREW_CHARSET = 177
+Global Const $JOHAB_CHARSET = 130
+Global Const $MAC_CHARSET = 77
+Global Const $OEM_CHARSET = 255
+Global Const $RUSSIAN_CHARSET = 204
+Global Const $SHIFTJIS_CHARSET = 128
+Global Const $SYMBOL_CHARSET = 2
+Global Const $THAI_CHARSET = 222
+Global Const $TURKISH_CHARSET = 162
+Global Const $VIETNAMESE_CHARSET = 163
+
+; Font Output Precision
+Global Const $OUT_CHARACTER_PRECIS = 2
+Global Const $OUT_DEFAULT_PRECIS = 0
+Global Const $OUT_DEVICE_PRECIS = 5
+Global Const $OUT_OUTLINE_PRECIS = 8
+Global Const $OUT_PS_ONLY_PRECIS = 10
+Global Const $OUT_RASTER_PRECIS = 6
+Global Const $OUT_STRING_PRECIS = 1
+Global Const $OUT_STROKE_PRECIS = 3
+Global Const $OUT_TT_ONLY_PRECIS = 7
+Global Const $OUT_TT_PRECIS = 4
+
+; Font clipping precision
+Global Const $CLIP_CHARACTER_PRECIS = 1
+Global Const $CLIP_DEFAULT_PRECIS = 0
+Global Const $CLIP_DFA_DISABLE = 0x0030
+Global Const $CLIP_EMBEDDED = 128
+Global Const $CLIP_LH_ANGLES = 16
+Global Const $CLIP_MASK = 0xF
+Global Const $CLIP_DFA_OVERRIDE = 0x0040
+Global Const $CLIP_STROKE_PRECIS = 2
+Global Const $CLIP_TT_ALWAYS = 32
+
+; Font Quality
+Global Const $ANTIALIASED_QUALITY = 4
+Global Const $DEFAULT_QUALITY = 0
+Global Const $DRAFT_QUALITY = 1
+Global Const $NONANTIALIASED_QUALITY = 3
+Global Const $PROOF_QUALITY = 2
+Global Const $CLEARTYPE_QUALITY = 5
+
+; pitch and family of the font
+Global Const $DEFAULT_PITCH = 0
+Global Const $FIXED_PITCH = 1
+Global Const $VARIABLE_PITCH = 2
+
+Global Const $FF_DECORATIVE = 80
+Global Const $FF_DONTCARE = 0
+Global Const $FF_MODERN = 48
+Global Const $FF_ROMAN = 16
+Global Const $FF_SCRIPT = 64
+Global Const $FF_SWISS = 32
+
+Global Const $FS_REGULAR = 0x00
+Global Const $FS_BOLD = 0x01
+Global Const $FS_ITALIC = 0x02
+; ===============================================================================================================================

+ 52 - 0
include/FrameConstants.au3

@@ -0,0 +1,52 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: Frame_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants for _WinAPI_DrawFrameControl().
+; Author(s) .....: Gary Frost
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; type of frame
+Global Const $DFC_BUTTON = 4
+Global Const $DFC_CAPTION = 1
+Global Const $DFC_MENU = 2
+Global Const $DFC_POPUPMENU = 5
+Global Const $DFC_SCROLL = 3
+
+; initial state of the frame
+Global Const $DFCS_BUTTON3STATE = 0x8
+Global Const $DFCS_BUTTONCHECK = 0x0
+Global Const $DFCS_BUTTONPUSH = 0x10
+Global Const $DFCS_BUTTONRADIO = 0x4
+Global Const $DFCS_BUTTONRADIOIMAGE = 0x1
+Global Const $DFCS_BUTTONRADIOMASK = 0x2
+Global Const $DFCS_CAPTIONCLOSE = 0x0
+Global Const $DFCS_CAPTIONHELP = 0x4
+Global Const $DFCS_CAPTIONMAX = 0x2
+Global Const $DFCS_CAPTIONMIN = 0x1
+Global Const $DFCS_CAPTIONRESTORE = 0x3
+Global Const $DFCS_MENUARROW = 0x0
+Global Const $DFCS_MENUARROWRIGHT = 0x4
+Global Const $DFCS_MENUBULLET = 0x2
+Global Const $DFCS_MENUCHECK = 0x1
+Global Const $DFCS_SCROLLCOMBOBOX = 0x5
+Global Const $DFCS_SCROLLDOWN = 0x1
+Global Const $DFCS_SCROLLLEFT = 0x2
+Global Const $DFCS_SCROLLRIGHT = 0x3
+Global Const $DFCS_SCROLLSIZEGRIP = 0x8
+Global Const $DFCS_SCROLLSIZEGRIPRIGHT = 0x10
+Global Const $DFCS_SCROLLUP = 0x0
+Global Const $DFCS_ADJUSTRECT = 0x2000
+
+; Set state constants
+Global Const $DFCS_CHECKED = 0x400
+Global Const $DFCS_FLAT = 0x4000
+Global Const $DFCS_HOT = 0x1000
+Global Const $DFCS_INACTIVE = 0x100
+Global Const $DFCS_PUSHED = 0x200
+Global Const $DFCS_TRANSPARENT = 0x800
+
+; ===============================================================================================================================

ファイルの差分が大きいため隠しています
+ 5576 - 0
include/GDIPlus.au3


+ 416 - 0
include/GDIPlusConstants.au3

@@ -0,0 +1,416 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: GDIPlus_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants for GDI+
+; Author(s) .....: Valik, Gary Frost, UEZ
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; Pen Dash Cap Types
+Global Const $GDIP_DASHCAPFLAT = 0 ; A square cap that squares off both ends of each dash
+Global Const $GDIP_DASHCAPROUND = 2 ; A circular cap that rounds off both ends of each dash
+Global Const $GDIP_DASHCAPTRIANGLE = 3 ; A triangular cap that points both ends of each dash
+
+; Pen Dash Style Types
+Global Const $GDIP_DASHSTYLESOLID = 0 ; A solid line
+Global Const $GDIP_DASHSTYLEDASH = 1 ; A dashed line
+Global Const $GDIP_DASHSTYLEDOT = 2 ; A dotted line
+Global Const $GDIP_DASHSTYLEDASHDOT = 3 ; An alternating dash-dot line
+Global Const $GDIP_DASHSTYLEDASHDOTDOT = 4 ; An alternating dash-dot-dot line
+Global Const $GDIP_DASHSTYLECUSTOM = 5 ; A a user-defined, custom dashed line
+
+; Encoder Parameter GUIDs
+Global Const $GDIP_EPGCHROMINANCETABLE = '{F2E455DC-09B3-4316-8260-676ADA32481C}'
+Global Const $GDIP_EPGCOLORDEPTH = '{66087055-AD66-4C7C-9A18-38A2310B8337}'
+Global Const $GDIP_EPGCOMPRESSION = '{E09D739D-CCD4-44EE-8EBA-3FBF8BE4FC58}'
+Global Const $GDIP_EPGLUMINANCETABLE = '{EDB33BCE-0266-4A77-B904-27216099E717}'
+Global Const $GDIP_EPGQUALITY = '{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}'
+Global Const $GDIP_EPGRENDERMETHOD = '{6D42C53A-229A-4825-8BB7-5C99E2B9A8B8}'
+Global Const $GDIP_EPGSAVEFLAG = '{292266FC-AC40-47BF-8CFC-A85B89A655DE}'
+Global Const $GDIP_EPGSCANMETHOD = '{3A4E2661-3109-4E56-8536-42C156E7DCFA}'
+Global Const $GDIP_EPGTRANSFORMATION = '{8D0EB2D1-A58E-4EA8-AA14-108074B7B6F9}'
+Global Const $GDIP_EPGVERSION = '{24D18C76-814A-41A4-BF53-1C219CCCF797}'
+
+; Encoder Parameter Types
+Global Const $GDIP_EPTBYTE = 1 ; 8 bit unsigned integer
+Global Const $GDIP_EPTASCII = 2 ; Null terminated character string
+Global Const $GDIP_EPTSHORT = 3 ; 16 bit unsigned integer
+Global Const $GDIP_EPTLONG = 4 ; 32 bit unsigned integer
+Global Const $GDIP_EPTRATIONAL = 5 ; Two longs (numerator, denomintor)
+Global Const $GDIP_EPTLONGRANGE = 6 ; Two longs (low, high)
+Global Const $GDIP_EPTUNDEFINED = 7 ; Array of bytes of any type
+Global Const $GDIP_EPTRATIONALRANGE = 8 ; Two ratationals (low, high)
+
+; GDI Error Codes
+Global Const $GDIP_ERROK = 0 ; Method call was successful
+Global Const $GDIP_ERRGENERICERROR = 1 ; Generic method call error
+Global Const $GDIP_ERRINVALIDPARAMETER = 2 ; One of the arguments passed to the method was not valid
+Global Const $GDIP_ERROUTOFMEMORY = 3 ; The operating system is out of memory
+Global Const $GDIP_ERROBJECTBUSY = 4 ; One of the arguments in the call is already in use
+Global Const $GDIP_ERRINSUFFICIENTBUFFER = 5 ; A buffer is not large enough
+Global Const $GDIP_ERRNOTIMPLEMENTED = 6 ; The method is not implemented
+Global Const $GDIP_ERRWIN32ERROR = 7 ; The method generated a Microsoft Win32 error
+Global Const $GDIP_ERRWRONGSTATE = 8 ; The object is in an invalid state to satisfy the API call
+Global Const $GDIP_ERRABORTED = 9 ; The method was aborted
+Global Const $GDIP_ERRFILENOTFOUND = 10 ; The specified image file or metafile cannot be found
+Global Const $GDIP_ERRVALUEOVERFLOW = 11 ; The method produced a numeric overflow
+Global Const $GDIP_ERRACCESSDENIED = 12 ; A write operation is not allowed on the specified file
+Global Const $GDIP_ERRUNKNOWNIMAGEFORMAT = 13 ; The specified image file format is not known
+Global Const $GDIP_ERRFONTFAMILYNOTFOUND = 14 ; The specified font family cannot be found
+Global Const $GDIP_ERRFONTSTYLENOTFOUND = 15 ; The specified style is not available for the specified font
+Global Const $GDIP_ERRNOTTRUETYPEFONT = 16 ; The font retrieved is not a TrueType font
+Global Const $GDIP_ERRUNSUPPORTEDGDIVERSION = 17 ; The installed GDI+ version is incompatible
+Global Const $GDIP_ERRGDIPLUSNOTINITIALIZED = 18 ; The GDI+ API is not in an initialized state
+Global Const $GDIP_ERRPROPERTYNOTFOUND = 19 ; The specified property does not exist in the image
+Global Const $GDIP_ERRPROPERTYNOTSUPPORTED = 20 ; The specified property is not supported
+
+; Encoder Value Types
+Global Const $GDIP_EVTCOMPRESSIONLZW = 2 ; TIFF: LZW compression
+Global Const $GDIP_EVTCOMPRESSIONCCITT3 = 3 ; TIFF: CCITT3 compression
+Global Const $GDIP_EVTCOMPRESSIONCCITT4 = 4 ; TIFF: CCITT4 compression
+Global Const $GDIP_EVTCOMPRESSIONRLE = 5 ; TIFF: RLE compression
+Global Const $GDIP_EVTCOMPRESSIONNONE = 6 ; TIFF: No compression
+Global Const $GDIP_EVTTRANSFORMROTATE90 = 13 ; JPEG: Lossless 90 degree clockwise rotation
+Global Const $GDIP_EVTTRANSFORMROTATE180 = 14 ; JPEG: Lossless 180 degree clockwise rotation
+Global Const $GDIP_EVTTRANSFORMROTATE270 = 15 ; JPEG: Lossless 270 degree clockwise rotation
+Global Const $GDIP_EVTTRANSFORMFLIPHORIZONTAL = 16 ; JPEG: Lossless horizontal flip
+Global Const $GDIP_EVTTRANSFORMFLIPVERTICAL = 17 ; JPEG: Lossless vertical flip
+Global Const $GDIP_EVTMULTIFRAME = 18 ; Multiple frame encoding
+Global Const $GDIP_EVTLASTFRAME = 19 ; Last frame of a multiple frame image
+Global Const $GDIP_EVTFLUSH = 20 ; The encoder object is to be closed
+Global Const $GDIP_EVTFRAMEDIMENSIONPAGE = 23 ; TIFF: Page frame dimension
+
+; Image Codec Flags constants
+Global Const $GDIP_ICFENCODER = 0x00000001 ; The codec supports encoding (saving)
+Global Const $GDIP_ICFDECODER = 0x00000002 ; The codec supports decoding (reading)
+Global Const $GDIP_ICFSUPPORTBITMAP = 0x00000004 ; The codec supports raster images (bitmaps)
+Global Const $GDIP_ICFSUPPORTVECTOR = 0x00000008 ; The codec supports vector images (metafiles)
+Global Const $GDIP_ICFSEEKABLEENCODE = 0x00000010 ; The encoder requires a seekable output stream
+Global Const $GDIP_ICFBLOCKINGDECODE = 0x00000020 ; The decoder has blocking behavior during the decoding process
+Global Const $GDIP_ICFBUILTIN = 0x00010000 ; The codec is built in to GDI+
+Global Const $GDIP_ICFSYSTEM = 0x00020000 ; Not used in GDI+ version 1.0
+Global Const $GDIP_ICFUSER = 0x00040000 ; Not used in GDI+ version 1.0
+
+; Image Lock Mode constants
+Global Const $GDIP_ILMREAD = 0x0001 ; A portion of the image is locked for reading
+Global Const $GDIP_ILMWRITE = 0x0002 ; A portion of the image is locked for writing
+Global Const $GDIP_ILMUSERINPUTBUF = 0x0004 ; The buffer is allocated by the user
+
+; LineCap constants
+Global Const $GDIP_LINECAPFLAT = 0x00 ; Specifies a flat cap
+Global Const $GDIP_LINECAPSQUARE = 0x01 ; Specifies a square cap
+Global Const $GDIP_LINECAPROUND = 0x02 ; Specifies a circular cap
+Global Const $GDIP_LINECAPTRIANGLE = 0x03 ; Specifies a triangular cap
+Global Const $GDIP_LINECAPNOANCHOR = 0x10 ; Specifies that the line ends are not anchored
+Global Const $GDIP_LINECAPSQUAREANCHOR = 0x11 ; Specifies that the line ends are anchored with a square
+Global Const $GDIP_LINECAPROUNDANCHOR = 0x12 ; Specifies that the line ends are anchored with a circle
+Global Const $GDIP_LINECAPDIAMONDANCHOR = 0x13 ; Specifies that the line ends are anchored with a diamond
+Global Const $GDIP_LINECAPARROWANCHOR = 0x14 ; Specifies that the line ends are anchored with arrowheads
+Global Const $GDIP_LINECAPCUSTOM = 0xFF ; Specifies that the line ends are made from a CustomLineCap
+
+; Pixel Format constants
+Global Const $GDIP_PXF01INDEXED = 0x00030101 ; 1 bpp, indexed
+Global Const $GDIP_PXF04INDEXED = 0x00030402 ; 4 bpp, indexed
+Global Const $GDIP_PXF08INDEXED = 0x00030803 ; 8 bpp, indexed
+Global Const $GDIP_PXF16GRAYSCALE = 0x00101004 ; 16 bpp, grayscale
+Global Const $GDIP_PXF16RGB555 = 0x00021005 ; 16 bpp; 5 bits for each RGB
+Global Const $GDIP_PXF16RGB565 = 0x00021006 ; 16 bpp; 5 bits red, 6 bits green, and 5 bits blue
+Global Const $GDIP_PXF16ARGB1555 = 0x00061007 ; 16 bpp; 1 bit for alpha and 5 bits for each RGB component
+Global Const $GDIP_PXF24RGB = 0x00021808 ; 24 bpp; 8 bits for each RGB
+Global Const $GDIP_PXF32RGB = 0x00022009 ; 32 bpp; 8 bits for each RGB. No alpha.
+Global Const $GDIP_PXF32ARGB = 0x0026200A ; 32 bpp; 8 bits for each RGB and alpha
+Global Const $GDIP_PXF32PARGB = 0x000E200B ; 32 bpp; 8 bits for each RGB and alpha, pre-mulitiplied
+Global Const $GDIP_PXF48RGB = 0x0010300C ; 48 bpp; 16 bits for each RGB
+Global Const $GDIP_PXF64ARGB = 0x0034400D ; 64 bpp; 16 bits for each RGB and alpha
+Global Const $GDIP_PXF64PARGB = 0x001A400E ; 64 bpp; 16 bits for each RGB and alpha, pre-multiplied
+
+; ImageFormat constants (Globally Unique Identifier (GUID))
+Global Const $GDIP_IMAGEFORMAT_UNDEFINED = "{B96B3CA9-0728-11D3-9D7B-0000F81EF32E}" ; Windows GDI+ is unable to determine the format.
+Global Const $GDIP_IMAGEFORMAT_MEMORYBMP = "{B96B3CAA-0728-11D3-9D7B-0000F81EF32E}" ; Image was constructed from a memory bitmap.
+Global Const $GDIP_IMAGEFORMAT_BMP = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}" ; Microsoft Windows Bitmap (BMP) format.
+Global Const $GDIP_IMAGEFORMAT_EMF = "{B96B3CAC-0728-11D3-9D7B-0000F81EF32E}" ; Enhanced Metafile (EMF) format.
+Global Const $GDIP_IMAGEFORMAT_WMF = "{B96B3CAD-0728-11D3-9D7B-0000F81EF32E}" ; Windows Metafile Format (WMF) format.
+Global Const $GDIP_IMAGEFORMAT_JPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}" ; Joint Photographic Experts Group (JPEG) format.
+Global Const $GDIP_IMAGEFORMAT_PNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}" ; Portable Network Graphics (PNG) format.
+Global Const $GDIP_IMAGEFORMAT_GIF = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}" ; Graphics Interchange Format (GIF) format.
+Global Const $GDIP_IMAGEFORMAT_TIFF = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}" ; Tagged Image File Format (TIFF) format.
+Global Const $GDIP_IMAGEFORMAT_EXIF = "{B96B3CB2-0728-11D3-9D7B-0000F81EF32E}" ; Exchangeable Image File (EXIF) format.
+Global Const $GDIP_IMAGEFORMAT_ICON = "{B96B3CB5-0728-11D3-9D7B-0000F81EF32E}" ; Microsoft Windows Icon Image (ICO)format.
+
+; ImageType constants
+Global Const $GDIP_IMAGETYPE_UNKNOWN = 0
+Global Const $GDIP_IMAGETYPE_BITMAP = 1
+Global Const $GDIP_IMAGETYPE_METAFILE = 2
+
+; ImageFlags flags constants
+Global Const $GDIP_IMAGEFLAGS_NONE = 0x0 ; no format information.
+Global Const $GDIP_IMAGEFLAGS_SCALABLE = 0x0001 ; image can be scaled.
+Global Const $GDIP_IMAGEFLAGS_HASALPHA = 0x0002 ; pixel data contains alpha values.
+Global Const $GDIP_IMAGEFLAGS_HASTRANSLUCENT = 0x0004 ; pixel data has alpha values other than 0 (transparent) and 255 (opaque).
+Global Const $GDIP_IMAGEFLAGS_PARTIALLYSCALABLE = 0x0008 ; pixel data is partially scalable with some limitations.
+Global Const $GDIP_IMAGEFLAGS_COLORSPACE_RGB = 0x0010 ; image is stored using an RGB color space.
+Global Const $GDIP_IMAGEFLAGS_COLORSPACE_CMYK = 0x0020 ; image is stored using a CMYK color space.
+Global Const $GDIP_IMAGEFLAGS_COLORSPACE_GRAY = 0x0040 ; image is a grayscale image.
+Global Const $GDIP_IMAGEFLAGS_COLORSPACE_YCBCR = 0x0080 ; image is stored using a YCBCR color space.
+Global Const $GDIP_IMAGEFLAGS_COLORSPACE_YCCK = 0x0100 ; image is stored using a YCCK color space.
+Global Const $GDIP_IMAGEFLAGS_HASREALDPI = 0x1000 ; dots per inch information is stored in the image.
+Global Const $GDIP_IMAGEFLAGS_HASREALPIXELSIZE = 0x2000 ; pixel size is stored in the image.
+Global Const $GDIP_IMAGEFLAGS_READONLY = 0x00010000 ; pixel data is read-only.
+Global Const $GDIP_IMAGEFLAGS_CACHING = 0x00020000 ; pixel data can be cached for faster access.
+
+; Graphic SmoothingMode constants
+Global Const $GDIP_SMOOTHINGMODE_INVALID = -1 ; Reserved.
+Global Const $GDIP_SMOOTHINGMODE_DEFAULT = 0 ; Specifies that smoothing is not applied.
+Global Const $GDIP_SMOOTHINGMODE_HIGHSPEED = 1 ; Specifies that smoothing is not applied.
+Global Const $GDIP_SMOOTHINGMODE_HIGHQUALITY = 2 ; Specifies that smoothing is applied using an 8 X 4 box filter.
+Global Const $GDIP_SMOOTHINGMODE_NONE = 3 ; Specifies that smoothing is not applied.
+Global Const $GDIP_SMOOTHINGMODE_ANTIALIAS8X4 = 4 ; Specifies that smoothing is applied using an 8 X 4 box filter.
+Global Const $GDIP_SMOOTHINGMODE_ANTIALIAS = $GDIP_SMOOTHINGMODE_ANTIALIAS8X4 ; Specifies that smoothing is applied using an 8 X 4 box filter.
+Global Const $GDIP_SMOOTHINGMODE_ANTIALIAS8X8 = 5 ; Specifies that smoothing is applied using an 8 X 8 box filter.
+
+; Colors luminance
+Global Const $GDIP_RLUM = 0.3086
+Global Const $GDIP_GLUM = 0.6094
+Global Const $GDIP_BLUM = 0.0820
+
+; Interpolation Mode constants
+Global Const $GDIP_INTERPOLATIONMODE_INVALID = -1 ; Reserved (used internally)
+Global Const $GDIP_INTERPOLATIONMODE_DEFAULT = 0 ; Specifies the default interpolation mode
+Global Const $GDIP_INTERPOLATIONMODE_LOWQUALITY = 1 ; Specifies a low-quality mode
+Global Const $GDIP_INTERPOLATIONMODE_HIGHQUALITY = 2 ; Specifies a high-quality mode
+Global Const $GDIP_INTERPOLATIONMODE_BILINEAR = 3 ; Specifies bilinear interpolation. No prefiltering is done. This mode is not suitable for shrinking an image below 50 percent of its original size.
+Global Const $GDIP_INTERPOLATIONMODE_BICUBIC = 4 ; Specifies bicubic interpolation. No prefiltering is done. This mode is not suitable for shrinking an image below 25 percent of its original size
+Global Const $GDIP_INTERPOLATIONMODE_NEARESTNEIGHBOR = 5 ; Specifies nearest-neighbor interpolation
+Global Const $GDIP_INTERPOLATIONMODE_HIGHQUALITYBILINEAR = 6 ; Specifies high-quality, bilinear interpolation. Prefiltering is performed to ensure high-quality shrinking.
+Global Const $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC = 7 ; Specifies high-quality, bicubic interpolation. Prefiltering is performed to ensure high-quality shrinking. This mode produces the highest quality transformed images.
+
+; TextRenderingHint constants
+Global Const $GDIP_TEXTRENDERINGHINT_SYSTEMDEFAULT = 0 ; Specifies that a character is drawn using the currently selected system font smoothing mode (also called a rendering hint).
+Global Const $GDIP_TEXTRENDERINGHINT_SINGLEBITPERPIXELGRIDFIT = 1 ; Specifies that a character is drawn using its glyph bitmap and hinting to improve character appearance on stems and curvature.
+Global Const $GDIP_TEXTRENDERINGHINT_SINGLEBITPERPIXEL = 2 ; Specifies that a character is drawn using its glyph bitmap and no hinting. This results in better performance at the expense of quality.
+Global Const $GDIP_TEXTRENDERINGHINT_ANTIALIASGRIDFIT = 3 ; Specifies that a character is drawn using its antialiased glyph bitmap and hinting. This results in much better quality due to antialiasing at a higher performance cost.
+Global Const $GDIP_TEXTRENDERINGHINT_ANTIALIAS = 4 ; Specifies that a character is drawn using its antialiased glyph bitmap and no hinting. Stem width differences may be noticeable because hinting is turned off.
+Global Const $GDIP_TEXTRENDERINGHINT_CLEARTYPEGRIDFIT = 5 ; Specifies that a character is drawn using its glyph ClearType bitmap and hinting. This type of text rendering cannot be used along with CompositingModeSourceCopy.
+
+; PixelOffsetMode constants
+Global Const $GDIP_PIXELOFFSETMODE_INVALID = -1 ; Used internally.
+Global Const $GDIP_PIXELOFFSETMODE_DEFAULT = 0 ; Equivalent to $GDIP_PIXELOFFSETMODE_NONE
+Global Const $GDIP_PIXELOFFSETMODE_HIGHSPEED = 1 ; Equivalent to $GDIP_PIXELOFFSETMODE_NONE
+Global Const $GDIP_PIXELOFFSETMODE_HIGHQUALITY = 2 ; Equivalent to $GDIP_PIXELOFFSETMODE_HALF
+Global Const $GDIP_PIXELOFFSETMODE_NONE = 3 ; Indicates that pixel centers have integer coordinates.
+Global Const $GDIP_PIXELOFFSETMODE_HALF = 4 ; Indicates that pixel centers have coordinates that are half way between integer values.
+
+; LineJoin constants
+Global Const $GDIP_PENSETLINEJOIN_MITER = 0 ; Specifies a mitered join. This produces a sharp corner or a clipped corner, depending on whether the length of the miter exceeds the miter limit.
+Global Const $GDIP_PENSETLINEJOIN_BEVEL = 1 ; Specifies a beveled join. This produces a diagonal corner.
+Global Const $GDIP_PENSETLINEJOIN_ROUND = 2 ; Specifies a circular join. This produces a smooth, circular arc between the lines.
+Global Const $GDIP_PENSETLINEJOIN_MITERCLIPPED = 3 ; Specifies a mitered join. This produces a sharp corner or a beveled corner, depending on whether the length of the miter exceeds the miter limit.
+
+; Fill mode constants
+Global Const $GDIP_FillModeAlternate = 0 ;Specifies that areas are filled according to the even-odd parity rule. According to this rule, you can determine
+;whether a test point is inside or outside a closed curve as follows: Draw a line from the test point to a point
+;that is distant from the curve. If that line crosses the curve an odd number of times, the test point is inside
+;the curve; otherwise, the test point is outside the curve.
+
+Global Const $GDIP_FillModeWinding = 1 ;Specifies that areas are filled according to the nonzero winding rule. According to this rule, you can determine
+;whether a test point is inside or outside a closed curve as follows: Draw a line from a test point to a point that
+;is distant from the curve. Count the number of times the curve crosses the test line from left to right, and count
+;the number of times the curve crosses the test line from right to left. If those two numbers are the same, the test
+;point is outside the curve; otherwise, the test point is inside the curve.
+
+; Quality constants
+Global Const $GDIP_QUALITYMODEINVALID = -1
+Global Const $GDIP_QUALITYMODEDEFAULT = 0
+Global Const $GDIP_QUALITYMODELOW = 1
+Global Const $GDIP_QUALITYMODEHIGH = 2
+
+; Alpha Compositing mode constants
+Global Const $GDIP_COMPOSITINGMODESOURCEOVER = 0 ; Specifies that when a color is rendered, it is blended with the background color. The blend is determined by the alpha component of the color being rendered
+Global Const $GDIP_COMPOSITINGMODESOURCECOPY = 1 ; Specifies that when a color is rendered, it overwrites the background color. This mode cannot be used along with $TextRenderingHintClearTypeGridFit
+
+; Alpha Compositing quality constants
+Global Const $GDIP_COMPOSITINGQUALITYINVALID = $GDIP_QUALITYMODEINVALID ; Invalid quality
+Global Const $GDIP_COMPOSITINGQUALITYDEFAULT = $GDIP_QUALITYMODEDEFAULT ; Gamma correction is not applied
+Global Const $GDIP_COMPOSITINGQUALITYHIGHSPEED = $GDIP_QUALITYMODELOW ; Gamma correction is not applied. High speed, low quality
+Global Const $GDIP_COMPOSITINGQUALITYHIGHQUALITY = $GDIP_QUALITYMODEHIGH ; Gamma correction is applied. Composition of high quality and speed.
+Global Const $GDIP_COMPOSITINGQUALITYGAMMACORRECTED = 3 ; Gamma correction is applied
+Global Const $GDIP_COMPOSITINGQUALITYASSUMELINEAR = 4 ; Gamma correction is not applied. Linear values are used
+
+; Various hatch styles
+Global Const $GDIP_HATCHSTYLE_HORIZONTAL = 0
+Global Const $GDIP_HATCHSTYLE_VERTICAL = 1
+Global Const $GDIP_HATCHSTYLE_FORWARDDIAGONAL = 2
+Global Const $GDIP_HATCHSTYLE_BACKWARDDIAGONAL = 3
+Global Const $GDIP_HATCHSTYLE_CROSS = 4
+Global Const $GDIP_HATCHSTYLE_DIAGONALCROSS = 5
+Global Const $GDIP_HATCHSTYLE_05PERCENT = 6
+Global Const $GDIP_HATCHSTYLE_10PERCENT = 7
+Global Const $GDIP_HATCHSTYLE_20PERCENT = 8
+Global Const $GDIP_HATCHSTYLE_25PERCENT = 9
+Global Const $GDIP_HATCHSTYLE_30PERCENT = 10
+Global Const $GDIP_HATCHSTYLE_40PERCENT = 11
+Global Const $GDIP_HATCHSTYLE_50PERCENT = 12
+Global Const $GDIP_HATCHSTYLE_60PERCENT = 13
+Global Const $GDIP_HATCHSTYLE_70PERCENT = 14
+Global Const $GDIP_HATCHSTYLE_75PERCENT = 15
+Global Const $GDIP_HATCHSTYLE_80PERCENT = 16
+Global Const $GDIP_HATCHSTYLE_90PERCENT = 17
+Global Const $GDIP_HATCHSTYLE_LIGHTDOWNWARDDIAGONAL = 18
+Global Const $GDIP_HATCHSTYLE_LIGHTUPWARDDIAGONAL = 19
+Global Const $GDIP_HATCHSTYLE_DARKDOWNWARDDIAGONAL = 20
+Global Const $GDIP_HATCHSTYLE_DARKUPWARDDIAGONAL = 21
+Global Const $GDIP_HATCHSTYLE_WIDEDOWNWARDDIAGONAL = 22
+Global Const $GDIP_HATCHSTYLE_WIDEUPWARDDIAGONAL = 23
+Global Const $GDIP_HATCHSTYLE_LIGHTVERTICAL = 24
+Global Const $GDIP_HATCHSTYLE_LIGHTHORIZONTAL = 25
+Global Const $GDIP_HATCHSTYLE_NARROWVERTICAL = 26
+Global Const $GDIP_HATCHSTYLE_NARROWHORIZONTAL = 27
+Global Const $GDIP_HATCHSTYLE_DARKVERTICAL = 28
+Global Const $GDIP_HATCHSTYLE_DARKHORIZONTAL = 29
+Global Const $GDIP_HATCHSTYLE_DASHEDDOWNWARDDIAGONAL = 30
+Global Const $GDIP_HATCHSTYLE_DASHEDUPWARDDIAGONAL = 31
+Global Const $GDIP_HATCHSTYLE_DASHEDHORIZONTAL = 32
+Global Const $GDIP_HATCHSTYLE_DASHEDVERTICAL = 33
+Global Const $GDIP_HATCHSTYLE_SMALLCONFETTI = 34
+Global Const $GDIP_HATCHSTYLE_LARGECONFETTI = 35
+Global Const $GDIP_HATCHSTYLE_ZIGZAG = 36
+Global Const $GDIP_HATCHSTYLE_WAVE = 37
+Global Const $GDIP_HATCHSTYLE_DIAGONALBRICK = 38
+Global Const $GDIP_HATCHSTYLE_HORIZONTALBRICK = 39
+Global Const $GDIP_HATCHSTYLE_WEAVE = 40
+Global Const $GDIP_HATCHSTYLE_PLAID = 41
+Global Const $GDIP_HATCHSTYLE_DIVOT = 42
+Global Const $GDIP_HATCHSTYLE_DOTTEDGRID = 43
+Global Const $GDIP_HATCHSTYLE_DOTTEDDIAMOND = 44
+Global Const $GDIP_HATCHSTYLE_SHINGLE = 45
+Global Const $GDIP_HATCHSTYLE_TRELLIS = 46
+Global Const $GDIP_HATCHSTYLE_SPHERE = 47
+Global Const $GDIP_HATCHSTYLE_SMALLGRID = 48
+Global Const $GDIP_HATCHSTYLE_SMALLCHECKERBOARD = 49
+Global Const $GDIP_HATCHSTYLE_LARGECHECKERBOARD = 50
+Global Const $GDIP_HATCHSTYLE_OUTLINEDDIAMOND = 51
+Global Const $GDIP_HATCHSTYLE_SOLIDDIAMOND = 52
+Global Const $GDIP_HATCHSTYLE_TOTAL = 53
+Global Const $GDIP_HATCHSTYLE_LARGEGRID = $GDIP_HATCHSTYLE_CROSS
+Global Const $GDIP_HATCHSTYLE_MIN = $GDIP_HATCHSTYLE_HORIZONTAL
+Global Const $GDIP_HATCHSTYLE_MAX = $GDIP_HATCHSTYLE_TOTAL - 1
+
+; GDIPlus V1.1 constants
+;GDI+ effect GUIDs
+Global Const $GDIP_BlurEffectGuid = '{633C80A4-1843-482b-9EF2-BE2834C5FDD4}'
+Global Const $GDIP_SharpenEffectGuid = '{63CBF3EE-C526-402c-8F71-62C540BF5142}'
+Global Const $GDIP_ColorMatrixEffectGuid = '{718F2615-7933-40e3-A511-5F68FE14DD74}'
+Global Const $GDIP_ColorLUTEffectGuid = '{A7CE72A9-0F7F-40d7-B3CC-D0C02D5C3212}'
+Global Const $GDIP_BrightnessContrastEffectGuid = '{D3A1DBE1-8EC4-4c17-9F4C-EA97AD1C343D}'
+Global Const $GDIP_HueSaturationLightnessEffectGuid = '{8B2DD6C3-EB07-4d87-A5F0-7108E26A9C5F}'
+Global Const $GDIP_LevelsEffectGuid = '{99C354EC-2A31-4f3a-8C34-17A803B33A25}'
+Global Const $GDIP_TintEffectGuid = '{1077AF00-2848-4441-9489-44AD4C2D7A2C}'
+Global Const $GDIP_ColorBalanceEffectGuid = '{537E597D-251E-48da-9664-29CA496B70F8}'
+Global Const $GDIP_RedEyeCorrectionEffectGuid = '{74D29D05-69A4-4266-9549-3CC52836B632}'
+Global Const $GDIP_ColorCurveEffectGuid = '{DD6A0022-58E4-4a67-9D9B-D48EB881A53D}'
+
+Global Const $GDIP_AdjustExposure = 0 ;[-255..255]
+Global Const $GDIP_AdjustDensity = 1 ;[-255..255]
+Global Const $GDIP_AdjustContrast = 2 ;[-100..100]
+Global Const $GDIP_AdjustHighlight = 3 ;[-100..100]
+Global Const $GDIP_AdjustShadow = 4 ;[-100..100]
+Global Const $GDIP_AdjustMidtone = 5 ;[-100..100]
+Global Const $GDIP_AdjustWhiteSaturation = 6 ;[0..255]
+Global Const $GDIP_AdjustBlackSaturation = 7 ;[0..255]
+
+Global Const $GDIP_CurveChannelAll = 0
+Global Const $GDIP_CurveChannelRed = 1
+Global Const $GDIP_CurveChannelGreen = 2
+Global Const $GDIP_CurveChannelBlue = 3
+
+;Color format conversion parameters
+Global Const $GDIP_PaletteTypeCustom = 0 ;Arbitrary custom palette provided by caller.
+Global Const $GDIP_PaletteTypeOptimal = 1 ;Optimal palette generated using a median-cut algorithm.
+Global Const $GDIP_PaletteTypeFixedBW = 2 ;Black and white palette.
+
+;Symmetric halftone palettes. Each of these halftone palettes will be a superset of the system palette. E.g. Halftone8 will have it's 8-color on-off primaries and the 16 system colors added. With duplicates removed, that leaves 16 colors.
+Global Const $GDIP_PaletteTypeFixedHalftone8 = 3 ;8-color, on-off primaries
+Global Const $GDIP_PaletteTypeFixedHalftone27 = 4 ;3 intensity levels of each color
+Global Const $GDIP_PaletteTypeFixedHalftone64 = 5 ;4 intensity levels of each color
+Global Const $GDIP_PaletteTypeFixedHalftone125 = 6 ;5 intensity levels of each color
+Global Const $GDIP_PaletteTypeFixedHalftone216 = 7 ;6 intensity levels of each color
+
+;Assymetric halftone palettes. These are somewhat less useful than the symmetric ones, but are included for completeness. These do not include all of the system colors.
+Global Const $GDIP_PaletteTypeFixedHalftone252 = 8 ;6-red, 7-green, 6-blue intensities
+Global Const $GDIP_PaletteTypeFixedHalftone256 = 9 ;8-red, 8-green, 4-blue intensities
+
+;PaletteFlags enumeration
+Global Const $GDIP_PaletteFlagsHasAlpha = 0x0001
+Global Const $GDIP_PaletteFlagsGrayScale = 0x0002
+Global Const $GDIP_PaletteFlagsHalftone = 0x0004
+
+;DitherType
+Global Const $GDIP_DitherTypeNone = 0
+Global Const $GDIP_DitherTypeSolid = 1 ;Solid color - picks the nearest matching color with no attempt to halftone or dither. May be used on an arbitrary palette.
+
+;Ordered dithers and spiral dithers must be used with a fixed palette. NOTE: DitherOrdered4x4 is unique in that it may apply to 16bpp conversions also.
+Global Const $GDIP_DitherTypeOrdered4x4 = 2
+Global Const $GDIP_DitherTypeOrdered8x8 = 3
+Global Const $GDIP_DitherTypeOrdered16x16 = 4
+Global Const $GDIP_DitherTypeOrdered91x91 = 5
+Global Const $GDIP_DitherTypeSpiral4x4 = 6
+Global Const $GDIP_DitherTypeSpiral8x8 = 7
+Global Const $GDIP_DitherTypeDualSpiral4x4 = 8
+Global Const $GDIP_DitherTypeDualSpiral8x8 = 9
+
+;Error diffusion. May be used with any palette.
+Global Const $GDIP_DitherTypeErrorDiffusion = 10
+Global Const $GDIP_DitherTypeMax = 10
+
+;HistogramFormat
+Global Const $GDIP_HistogramFormatARGB = 0
+Global Const $GDIP_HistogramFormatPARGB = 1
+Global Const $GDIP_HistogramFormatRGB = 2
+Global Const $GDIP_HistogramFormatGray = 3
+Global Const $GDIP_HistogramFormatB = 4
+Global Const $GDIP_HistogramFormatG = 5
+Global Const $GDIP_HistogramFormatR = 6
+Global Const $GDIP_HistogramFormatA = 7
+
+;TextRenderingHint constants
+Global Const $GDIP_TextRenderingHintSystemDefault = 0
+Global Const $GDIP_TextRenderingHintSingleBitPerPixelGridFit = 1
+Global Const $GDIP_TextRenderingHintSingleBitPerPixel = 2
+Global Const $GDIP_TextRenderingHintAntialiasGridFit = 3
+Global Const $GDIP_TextRenderingHintAntialias = 4
+Global Const $GDIP_TextRenderingHintClearTypeGridFit = 5
+
+;RotateFlipType constants
+Global Const $GDIP_RotateNoneFlipNone = 0
+Global Const $GDIP_Rotate90FlipNone = 1
+Global Const $GDIP_Rotate180FlipNone = 2
+Global Const $GDIP_Rotate270FlipNone = 3
+Global Const $GDIP_RotateNoneFlipX = 4
+Global Const $GDIP_Rotate90FlipX = 5
+Global Const $GDIP_Rotate180FlipX = 6
+Global Const $GDIP_Rotate270FlipX = 7
+Global Const $GDIP_RotateNoneFlipY = $GDIP_Rotate180FlipX
+Global Const $GDIP_Rotate90FlipY = $GDIP_Rotate270FlipX
+Global Const $GDIP_Rotate180FlipY = $GDIP_RotateNoneFlipX
+Global Const $GDIP_Rotate270FlipY = $GDIP_Rotate90FlipX
+Global Const $GDIP_RotateNoneFlipXY = $GDIP_Rotate180FlipNone
+Global Const $GDIP_Rotate90FlipXY = $GDIP_Rotate270FlipNone
+Global Const $GDIP_Rotate270FlipXY = $GDIP_Rotate90FlipNone
+
+; Multi-frame dimensions (Globally Unique Identifier (GUID))
+Global Const $GDIP_FRAMEDIMENSION_TIME = "{6AEDBD6D-3FB5-418A-83A6-7F45229DC872}"
+Global Const $GDIP_FRAMEDIMENSION_RESOLUTION = "{84236F7B-3BD3-428F-8DAB-4EA1439CA315}"
+Global Const $GDIP_FRAMEDIMENSION_PAGE = "{7462DC86-6180-4C7E-8E3F-EE7333A7A483}"
+
+;ImageAttributesSetThreshold constants
+Global Const $GDIP_COLORADJUSTTYPE_DEFAULT = 0
+Global Const $GDIP_COLORADJUSTTYPE_BITMAP = 1
+Global Const $GDIP_COLORADJUSTTYPE_BRUSH = 2
+Global Const $GDIP_COLORADJUSTTYPE_PEN = 3
+Global Const $GDIP_COLORADJUSTTYPE_TEXT = 4
+Global Const $GDIP_COLORADJUSTTYPE_COUNT = 5
+Global Const $GDIP_COLORADJUSTTYPE_ANY = 6
+;===============================================================================================================================

+ 27 - 0
include/GUIConstants.au3

@@ -0,0 +1,27 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: All GUIConstants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants that can be used with GUI Applications
+; Author(s) .....: Valik, jpm
+; Dll ...........:
+; ===============================================================================================================================
+
+#include "AVIConstants.au3"
+#include "ButtonConstants.au3"
+#include "ComboConstants.au3"
+#include "DateTimeConstants.au3"
+#include "EditConstants.au3"
+#include "GUIConstantsEx.au3"
+#include "ListBoxConstants.au3"
+#include "ListViewConstants.au3"
+#include "ProgressConstants.au3"
+#include "RichEditConstants.au3"
+#include "SliderConstants.au3"
+#include "StaticConstants.au3"
+#include "TabConstants.au3"
+#include "TreeViewConstants.au3"
+#include "UpDownConstants.au3"
+#include "WindowsConstants.au3"

+ 111 - 0
include/GUIConstantsEx.au3

@@ -0,0 +1,111 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: GUIConstantsEx
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants to be used in GUI applications.
+; Author(s) .....: Jpm, Valik
+; Dll ...........:
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; Events and messages
+Global Const $GUI_EVENT_SINGLE = 0 ; (default) Returns a single event.
+Global Const $GUI_EVENT_ARRAY = 1 ; returns an array containing the event and extended information.
+
+Global Const $GUI_EVENT_NONE = 0
+Global Const $GUI_EVENT_CLOSE = -3
+Global Const $GUI_EVENT_MINIMIZE = -4
+Global Const $GUI_EVENT_RESTORE = -5
+Global Const $GUI_EVENT_MAXIMIZE = -6
+Global Const $GUI_EVENT_PRIMARYDOWN = -7
+Global Const $GUI_EVENT_PRIMARYUP = -8
+Global Const $GUI_EVENT_SECONDARYDOWN = -9
+Global Const $GUI_EVENT_SECONDARYUP = -10
+Global Const $GUI_EVENT_MOUSEMOVE = -11
+Global Const $GUI_EVENT_RESIZED = -12
+Global Const $GUI_EVENT_DROPPED = -13
+
+Global Const $GUI_RUNDEFMSG = 'GUI_RUNDEFMSG'
+
+; State
+Global Const $GUI_AVISTOP = 0
+Global Const $GUI_AVISTART = 1
+Global Const $GUI_AVICLOSE = 2
+
+Global Const $GUI_CHECKED = 1
+Global Const $GUI_INDETERMINATE = 2
+Global Const $GUI_UNCHECKED = 4
+
+Global Const $GUI_DROPACCEPTED = 8
+Global Const $GUI_NODROPACCEPTED = 4096
+Global Const $GUI_ACCEPTFILES = $GUI_DROPACCEPTED ; to be suppressed
+
+Global Const $GUI_SHOW = 16
+Global Const $GUI_HIDE = 32
+Global Const $GUI_ENABLE = 64
+Global Const $GUI_DISABLE = 128
+
+Global Const $GUI_FOCUS = 256
+Global Const $GUI_NOFOCUS = 8192
+Global Const $GUI_DEFBUTTON = 512
+
+Global Const $GUI_EXPAND = 1024
+Global Const $GUI_ONTOP = 2048
+
+; Font
+Global Const $GUI_FONTNORMAL = 0
+Global Const $GUI_FONTITALIC = 2
+Global Const $GUI_FONTUNDER = 4
+Global Const $GUI_FONTSTRIKE = 8
+
+; Resizing
+Global Const $GUI_DOCKAUTO = 0x0001
+Global Const $GUI_DOCKLEFT = 0x0002
+Global Const $GUI_DOCKRIGHT = 0x0004
+Global Const $GUI_DOCKHCENTER = 0x0008
+Global Const $GUI_DOCKTOP = 0x0020
+Global Const $GUI_DOCKBOTTOM = 0x0040
+Global Const $GUI_DOCKVCENTER = 0x0080
+Global Const $GUI_DOCKWIDTH = 0x0100
+Global Const $GUI_DOCKHEIGHT = 0x0200
+
+Global Const $GUI_DOCKSIZE = 0x0300 ; width+height
+Global Const $GUI_DOCKMENUBAR = 0x0220 ; top+height
+Global Const $GUI_DOCKSTATEBAR = 0x0240 ; bottom+height
+Global Const $GUI_DOCKALL = 0x0322 ; left+top+width+height
+Global Const $GUI_DOCKBORDERS = 0x0066 ; left+top+right+bottom
+
+; Graphic
+Global Const $GUI_GR_CLOSE = 1
+Global Const $GUI_GR_LINE = 2
+Global Const $GUI_GR_BEZIER = 4
+Global Const $GUI_GR_MOVE = 6
+Global Const $GUI_GR_COLOR = 8
+Global Const $GUI_GR_RECT = 10
+Global Const $GUI_GR_ELLIPSE = 12
+Global Const $GUI_GR_PIE = 14
+Global Const $GUI_GR_DOT = 16
+Global Const $GUI_GR_PIXEL = 18
+Global Const $GUI_GR_HINT = 20
+Global Const $GUI_GR_REFRESH = 22
+Global Const $GUI_GR_PENSIZE = 24
+Global Const $GUI_GR_NOBKCOLOR = -2
+
+; Background color special flags
+Global Const $GUI_BKCOLOR_DEFAULT = -1
+Global Const $GUI_BKCOLOR_TRANSPARENT = -2
+Global Const $GUI_BKCOLOR_LV_ALTERNATE = 0xFE000000
+
+; GUICtrlRead Constants
+Global Const $GUI_READ_DEFAULT = 0 ; (Default) Returns a value with state or data of a control.
+Global Const $GUI_READ_EXTENDED = 1 ; Returns extended information of a control (see Remarks).
+
+; GUISetCursor Constants
+Global Const $GUI_CURSOR_NOOVERRIDE = 0 ; (default) Don't override a control's default mouse cursor.
+Global Const $GUI_CURSOR_OVERRIDE = 1 ; override control's default mouse cursor.
+
+; Other
+Global Const $GUI_WS_EX_PARENTDRAG = 0x00100000
+; ===============================================================================================================================

+ 209 - 0
include/GuiAVI.au3

@@ -0,0 +1,209 @@
+#include-once
+
+#include "AVIConstants.au3"
+#include "Memory.au3"
+#include "SendMessage.au3"
+#include "UDFGlobalID.au3"
+#include "WinAPIConv.au3"
+#include "WinAPIInternals.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Animation
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with AVI control management.
+;                  An animation control is a window that displays an Audio-Video Interleaved (AVI) clip.  An AVI clip is a series
+;                  of bitmap frames like a movie. Animation controls can only display AVI clips that do not  contain  audio.  One
+;                  common use for an animation control is to indicate  system  activity  during  a  lengthy  operation.  This  is
+;                  possible because the operation thread continues executing while the AVI clip is displayed.  For  example,  the
+;                  Find dialog box of Microsoft Windows Explorer displays a moving magnifying glass as the system searches for  a
+;                  file.
+;
+;                  If you are using comctl32.dll version 6 the thread is not supported, therefore make sure that your application
+;                  does not block the UI or the animation  will  not  occur.  An  animation  control  can  display  an  AVI  clip
+;                  originating from either an uncompressed AVI file or from an AVI file that  was  compressed  using  run  length
+;                  (BI_RLE8) encoding. You can add the AVI clip to your application as an AVI resource, or the clip can accompany
+;                  your application as a separate AVI file.
+;
+;                  The AVI file, or resource, must not have a sound channel.  The capabilities of the animation control are  very
+;                  limited and are subject to change.  If you need  a  control  to  provide  multimedia  playback  and  recording
+;                  capabilities for your application, you can use the MCIWnd control.
+; Author(s) .....: Paul Campbell (PaulIA)
+; Dll(s .........: user32.dll
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+
+Global $__g_hAVLastWnd
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__AVICONSTANT_ClassName = "SysAnimate32"
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUICtrlAVI_Close
+; _GUICtrlAVI_Create
+; _GUICtrlAVI_Destroy
+; _GUICtrlAVI_IsPlaying
+; _GUICtrlAVI_Open
+; _GUICtrlAVI_OpenEx
+; _GUICtrlAVI_Play
+; _GUICtrlAVI_Seek
+; _GUICtrlAVI_Show
+; _GUICtrlAVI_Stop
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost
+; ===============================================================================================================================
+Func _GUICtrlAVI_Close($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $iRet = _SendMessage($hWnd, $ACM_OPENA)
+	Return SetError(@error, @extended, $iRet <> 0)
+EndFunc   ;==>_GUICtrlAVI_Close
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (Added params, Added Open calls "sets the avi to 1st frame")
+; ===============================================================================================================================
+Func _GUICtrlAVI_Create($hWnd, $sFilePath = "", $iSubFileID = -1, $iX = 0, $iY = 0, $iWidth = 0, $iHeight = 0, $iStyle = 0x00000006, $iExStyle = 0x00000000)
+	If Not IsHWnd($hWnd) Then Return SetError(1, 0, 0) ; Invalid Window handle for 1st parameter
+	If Not IsString($sFilePath) Then Return SetError(2, 0, 0) ; 2nd parameter not a string for _GUICtrlAVI_Create
+
+	$iStyle = BitOR($iStyle, $__UDFGUICONSTANT_WS_CHILD, $__UDFGUICONSTANT_WS_VISIBLE)
+
+	Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	Local $hAVI = _WinAPI_CreateWindowEx($iExStyle, $__AVICONSTANT_ClassName, "", $iStyle, $iX, $iY, $iWidth, $iHeight, $hWnd, $nCtrlID)
+	If $iSubFileID <> -1 And $sFilePath <> "" Then
+		_GUICtrlAVI_OpenEx($hAVI, $sFilePath, $iSubFileID)
+	ElseIf $sFilePath <> "" Then
+		_GUICtrlAVI_Open($hAVI, $sFilePath)
+	EndIf
+	Return $hAVI
+EndFunc   ;==>_GUICtrlAVI_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlAVI_Destroy(ByRef $hWnd)
+	If Not _WinAPI_IsClassName($hWnd, $__AVICONSTANT_ClassName) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hAVLastWnd) Then
+			Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
+			Local $hParent = _WinAPI_GetParent($hWnd)
+			$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+			Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
+			If Not $iRet Then
+				; can check for errors here if needed, for debug
+			EndIf
+		Else
+			; Not Allowed to Destroy Other Applications Control(s)
+			Return SetError(1, 1, False)
+		EndIf
+	Else
+		$iDestroyed = GUICtrlDelete($hWnd)
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUICtrlAVI_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlAVI_IsPlaying($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $ACM_ISPLAYING) <> 0
+EndFunc   ;==>_GUICtrlAVI_IsPlaying
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (Added seek "sets the avi to 1st frame")
+; ===============================================================================================================================
+Func _GUICtrlAVI_Open($hWnd, $sFileName)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hAVLastWnd) Then
+		$iRet = _SendMessage($hWnd, $ACM_OPENW, 0, $sFileName, 0, "wparam", "wstr")
+	Else
+		Local $tBuffer = DllStructCreate("wchar Text[" & StringLen($sFileName) + 1 & "]")
+		DllStructSetData($tBuffer, "Text", $sFileName)
+		Local $tMemMap
+		_MemInit($hWnd, DllStructGetSize($tBuffer), $tMemMap)
+		_MemWrite($tMemMap, $tBuffer)
+		$iRet = _SendMessage($hWnd, $ACM_OPENW, True, $tBuffer, 0, "wparam", "struct*")
+		_MemFree($tMemMap)
+	EndIf
+	If $iRet <> 0 Then _GUICtrlAVI_Seek($hWnd, 0)
+	Return SetError(@error, @extended, $iRet <> 0)
+EndFunc   ;==>_GUICtrlAVI_Open
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (Added seek "sets the avi to 1st frame")
+; ===============================================================================================================================
+Func _GUICtrlAVI_OpenEx($hWnd, $sFileName, $iResourceID)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $hInst = _WinAPI_LoadLibrary($sFileName)
+	If @error Then Return SetError(@error, @extended, False)
+	Local $iRet = _SendMessage($hWnd, $ACM_OPENW, $hInst, $iResourceID)
+	_WinAPI_FreeLibrary($hInst)
+	If $iRet <> 0 Then _GUICtrlAVI_Seek($hWnd, 0)
+	Return SetError(@error, @extended, $iRet <> 0)
+EndFunc   ;==>_GUICtrlAVI_OpenEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost
+; ===============================================================================================================================
+Func _GUICtrlAVI_Play($hWnd, $iFrom = 0, $iTo = -1, $iRepeat = -1)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $iRet = _SendMessage($hWnd, $ACM_PLAY, $iRepeat, _WinAPI_MakeLong($iFrom, $iTo))
+	Return SetError(@error, @extended, $iRet <> 0)
+EndFunc   ;==>_GUICtrlAVI_Play
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost
+; ===============================================================================================================================
+Func _GUICtrlAVI_Seek($hWnd, $iFrame)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $iRet = _SendMessage($hWnd, $ACM_PLAY, 1, _WinAPI_MakeLong($iFrame, $iFrame))
+	Return SetError(@error, @extended, $iRet <> 0)
+EndFunc   ;==>_GUICtrlAVI_Seek
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlAVI_Show($hWnd, $iState)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	If $iState <> @SW_HIDE And $iState <> @SW_SHOW Then Return SetError(1, 1, 0)
+	Return _WinAPI_ShowWindow($hWnd, $iState)
+EndFunc   ;==>_GUICtrlAVI_Show
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost
+; ===============================================================================================================================
+Func _GUICtrlAVI_Stop($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $iRet = _SendMessage($hWnd, $ACM_STOP)
+	Return SetError(@error, @extended, $iRet <> 0)
+EndFunc   ;==>_GUICtrlAVI_Stop

+ 562 - 0
include/GuiButton.au3

@@ -0,0 +1,562 @@
+#include-once
+
+#include "APIResConstants.au3"
+#include "ButtonConstants.au3"
+#include "SendMessage.au3"
+#include "UDFGlobalID.au3"
+#include "WinAPIConv.au3"
+#include "WinAPIIcons.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Button
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with Button control management.
+;                  A button is a control the user can click to provide input to an application.
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hButtonLastWnd
+
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $tagBUTTON_IMAGELIST = "ptr ImageList;" & $tagRECT & ";uint Align"
+Global Const $tagBUTTON_SPLITINFO = "uint mask;handle himlGlyph;uint uSplitStyle;" & $tagSIZE
+; mask
+; A set of flags that specify which members of this structure contain data to be set or which members are being requested. Set this member to one or more of the following flags.
+; BCSIF_GLYPH
+; himlGlyph is valid.
+; BCSIF_IMAGE
+; himlGlyph is valid. Use when uSplitStyle is set to BCSS_IMAGE.
+; BCSIF_SIZE
+; size is valid.
+; BCSIF_STYLE
+; uSplitStyle is valid.
+; himlGlyph
+; A handle to the image list. The provider retains ownership of the image list and is ultimately responsible for its disposal.
+; uSplitStyle
+; The split button style. Value must be one or more of the following flags.
+; BCSS_ALIGNLEFT
+; Align the image or glyph horizontally with the left margin.
+; BCSS_IMAGE
+; Draw an icon image as the glyph.
+; BCSS_NOSPLIT
+; No split.
+; BCSS_STRETCH
+; Stretch glyph, but try to retain aspect ratio.
+; size
+; Fields ........: X - Width
+;                  Y - Height
+
+Global Const $__BUTTONCONSTANT_ClassName = "Button"
+
+Global Const $__BUTTONCONSTANT_GWL_STYLE = 0xFFFFFFF0
+
+Global Const $__BUTTONCONSTANT_WM_SETFONT = 0x0030
+Global Const $__BUTTONCONSTANT_DEFAULT_GUI_FONT = 17
+; ===============================================================================================================================
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Not working/documented/implemented at this time
+;
+; _GUICtrlButton_SetDropDownState
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUICtrlButton_Click
+; _GUICtrlButton_Create
+; _GUICtrlButton_Destroy
+; _GUICtrlButton_Enable
+; _GUICtrlButton_GetCheck
+; _GUICtrlButton_GetFocus
+; _GUICtrlButton_GetIdealSize
+; _GUICtrlButton_GetImage
+; _GUICtrlButton_GetImageList
+; _GUICtrlButton_GetNote
+; _GUICtrlButton_GetNoteLength
+; _GUICtrlButton_GetSplitInfo
+; _GUICtrlButton_GetState
+; _GUICtrlButton_GetText
+; _GUICtrlButton_GetTextMargin
+; _GUICtrlButton_SetCheck
+; _GUICtrlButton_SetDontClick
+; _GUICtrlButton_SetFocus
+; _GUICtrlButton_SetImage
+; _GUICtrlButton_SetImageList
+; _GUICtrlButton_SetNote
+; _GUICtrlButton_SetShield
+; _GUICtrlButton_SetSize
+; _GUICtrlButton_SetSplitInfo
+; _GUICtrlButton_SetState
+; _GUICtrlButton_SetStyle
+; _GUICtrlButton_SetText
+; _GUICtrlButton_SetTextMargin
+; _GUICtrlButton_Show
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_Click($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	_SendMessage($hWnd, $BM_CLICK)
+EndFunc   ;==>_GUICtrlButton_Click
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_Create($hWnd, $sText, $iX, $iY, $iWidth, $iHeight, $iStyle = -1, $iExStyle = -1)
+	If Not IsHWnd($hWnd) Then
+		; Invalid Window handle for _GUICtrlButton_Create 1st parameter
+		Return SetError(1, 0, 0)
+	EndIf
+	If Not IsString($sText) Then
+		; 2nd parameter not a string for _GUICtrlButton_Create
+		Return SetError(2, 0, 0)
+	EndIf
+
+	Local $iForcedStyle = BitOR($__UDFGUICONSTANT_WS_TABSTOP, $__UDFGUICONSTANT_WS_VISIBLE, $__UDFGUICONSTANT_WS_CHILD, $BS_NOTIFY)
+
+	If $iStyle = -1 Then
+		$iStyle = $iForcedStyle
+	Else
+		$iStyle = BitOR($iStyle, $iForcedStyle)
+	EndIf
+	If $iExStyle = -1 Then $iExStyle = 0
+	Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+	Local $hButton = _WinAPI_CreateWindowEx($iExStyle, $__BUTTONCONSTANT_ClassName, $sText, $iStyle, $iX, $iY, $iWidth, $iHeight, $hWnd, $nCtrlID)
+	_SendMessage($hButton, $__BUTTONCONSTANT_WM_SETFONT, _WinAPI_GetStockObject($__BUTTONCONSTANT_DEFAULT_GUI_FONT), True)
+	Return $hButton
+EndFunc   ;==>_GUICtrlButton_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_Destroy(ByRef $hWnd)
+	If Not _WinAPI_IsClassName($hWnd, $__BUTTONCONSTANT_ClassName) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hButtonLastWnd) Then
+			Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
+			Local $hParent = _WinAPI_GetParent($hWnd)
+			$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+			Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
+			If Not $iRet Then
+				; can check for errors here if needed, for debug
+			EndIf
+		Else
+			; Not Allowed to Destroy Other Applications Control(s)
+			Return SetError(1, 1, False)
+		EndIf
+	Else
+		$iDestroyed = GUICtrlDelete($hWnd)
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUICtrlButton_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_Enable($hWnd, $bEnable = True)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	If _WinAPI_IsClassName($hWnd, $__BUTTONCONSTANT_ClassName) Then Return _WinAPI_EnableWindow($hWnd, $bEnable) = $bEnable
+EndFunc   ;==>_GUICtrlButton_Enable
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_GetCheck($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	Return _SendMessage($hWnd, $BM_GETCHECK)
+EndFunc   ;==>_GUICtrlButton_GetCheck
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_GetFocus($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	If _WinAPI_IsClassName($hWnd, $__BUTTONCONSTANT_ClassName) Then Return _WinAPI_GetFocus() = $hWnd
+EndFunc   ;==>_GUICtrlButton_GetFocus
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_GetIdealSize($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $tSize = DllStructCreate($tagSIZE), $aSize[2]
+	Local $iRet = _SendMessage($hWnd, $BCM_GETIDEALSIZE, 0, $tSize, 0, "wparam", "struct*")
+	If Not $iRet Then Return SetError(-1, -1, $aSize)
+	$aSize[0] = DllStructGetData($tSize, "X")
+	$aSize[1] = DllStructGetData($tSize, "Y")
+	Return $aSize
+EndFunc   ;==>_GUICtrlButton_GetIdealSize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_GetImage($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	Local $iRet = _SendMessage($hWnd, $BM_GETIMAGE, 0, 0, 0, "wparam", "lparam", "hwnd") ; check IMAGE_BITMAP
+	If $iRet <> 0x00000000 Then Return $iRet
+	$iRet = _SendMessage($hWnd, $BM_GETIMAGE, 1, 0, 0, "wparam", "lparam", "hwnd") ; check IMAGE_ICON
+	If $iRet = 0x00000000 Then Return 0
+	Return $iRet
+EndFunc   ;==>_GUICtrlButton_GetImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_GetImageList($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	Local $tBUTTON_IMAGELIST = DllStructCreate($tagBUTTON_IMAGELIST), $aImageList[6]
+	If Not _SendMessage($hWnd, $BCM_GETIMAGELIST, 0, $tBUTTON_IMAGELIST, 0, "wparam", "struct*") Then Return SetError(-1, -1, $aImageList)
+	$aImageList[0] = DllStructGetData($tBUTTON_IMAGELIST, "ImageList")
+	$aImageList[1] = DllStructGetData($tBUTTON_IMAGELIST, "Left")
+	$aImageList[2] = DllStructGetData($tBUTTON_IMAGELIST, "Right")
+	$aImageList[3] = DllStructGetData($tBUTTON_IMAGELIST, "Top")
+	$aImageList[4] = DllStructGetData($tBUTTON_IMAGELIST, "Bottom")
+	$aImageList[5] = DllStructGetData($tBUTTON_IMAGELIST, "Align")
+	Return $aImageList
+EndFunc   ;==>_GUICtrlButton_GetImageList
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_GetNote($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $iLen = _GUICtrlButton_GetNoteLength($hWnd) + 1
+	Local $tNote = DllStructCreate("wchar Note[" & $iLen & "]")
+	Local $tLen = DllStructCreate("dword")
+	DllStructSetData($tLen, 1, $iLen)
+	If Not _SendMessage($hWnd, $BCM_GETNOTE, $tLen, $tNote, 0, "struct*", "struct*") Then Return SetError(-1, 0, "")
+	Return _WinAPI_WideCharToMultiByte($tNote)
+EndFunc   ;==>_GUICtrlButton_GetNote
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_GetNoteLength($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	Return _SendMessage($hWnd, $BCM_GETNOTELENGTH)
+EndFunc   ;==>_GUICtrlButton_GetNoteLength
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_GetSplitInfo($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $tSplitInfo = DllStructCreate($tagBUTTON_SPLITINFO), $aInfo[4]
+	DllStructSetData($tSplitInfo, "mask", BitOR($BCSIF_GLYPH, $BCSIF_IMAGE, $BCSIF_SIZE, $BCSIF_STYLE))
+	If Not _SendMessage($hWnd, $BCM_GETSPLITINFO, 0, $tSplitInfo, 0, "wparam", "struct*") Then Return SetError(-1, 0, $aInfo)
+	$aInfo[0] = DllStructGetData($tSplitInfo, "himlGlyph")
+	$aInfo[1] = DllStructGetData($tSplitInfo, "uSplitStyle")
+	$aInfo[2] = DllStructGetData($tSplitInfo, "X")
+	$aInfo[3] = DllStructGetData($tSplitInfo, "Y")
+	Return $aInfo
+EndFunc   ;==>_GUICtrlButton_GetSplitInfo
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_GetState($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	Return _SendMessage($hWnd, $BM_GETSTATE)
+EndFunc   ;==>_GUICtrlButton_GetState
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_GetText($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	If _WinAPI_IsClassName($hWnd, $__BUTTONCONSTANT_ClassName) Then Return _WinAPI_GetWindowText($hWnd)
+	Return ""
+EndFunc   ;==>_GUICtrlButton_GetText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_GetTextMargin($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	Local $tRECT = DllStructCreate($tagRECT), $aRect[4]
+	If Not _SendMessage($hWnd, $BCM_GETTEXTMARGIN, 0, $tRECT, 0, "wparam", "struct*") Then Return SetError(-1, -1, $aRect)
+	$aRect[0] = DllStructGetData($tRECT, "Left")
+	$aRect[1] = DllStructGetData($tRECT, "Top")
+	$aRect[2] = DllStructGetData($tRECT, "Right")
+	$aRect[3] = DllStructGetData($tRECT, "Bottom")
+	Return $aRect
+EndFunc   ;==>_GUICtrlButton_GetTextMargin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetCheck($hWnd, $iState = $BST_CHECKED)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	_SendMessage($hWnd, $BM_SETCHECK, $iState)
+EndFunc   ;==>_GUICtrlButton_SetCheck
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetDontClick($hWnd, $bState = True)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	_SendMessage($hWnd, $BM_SETDONTCLICK, $bState)
+EndFunc   ;==>_GUICtrlButton_SetDontClick
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Name...........: _GUICtrlButton_SetDropDownState
+; Description ...: Sets the drop down state for a button with style $TBSTYLE_DROPDOWN
+; Syntax.........: _GUICtrlButton_SetDropDownState ( $hWnd [, $bState = True] )
+; Parameters ....: $hWnd        - Handle to the control
+;                  $iState      - Drop down state
+;                  |  True  - For state of $BST_DROPDOWNPUSHED
+;                  |  False - otherwise
+; Return values .: Success - True
+;                  Failure - False
+; Author ........: Gary Frost
+; Modified.......:
+; Remarks .......: Minimum Operating Systems: Windows Vista
+; Related .......:
+; Link ..........: @@MsdnLink@@ BCM_SETDROPDOWNSTATE
+; Example .......: Yes
+; ===============================================================================================================================
+Func _GUICtrlButton_SetDropDownState($hWnd, $bState = True)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	Return _SendMessage($hWnd, $BCM_SETDROPDOWNSTATE, $bState) <> 0
+EndFunc   ;==>_GUICtrlButton_SetDropDownState
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetFocus($hWnd, $bFocus = True)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	If _WinAPI_IsClassName($hWnd, $__BUTTONCONSTANT_ClassName) Then
+		If $bFocus Then
+			Return _WinAPI_SetFocus($hWnd) <> 0
+		Else
+			Return _WinAPI_SetFocus(_WinAPI_GetParent($hWnd)) <> 0
+		EndIf
+	EndIf
+EndFunc   ;==>_GUICtrlButton_SetFocus
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetImage($hWnd, $sImageFile, $iIconID = -1, $bLarge = False)
+	Local $hImage, $hPrevImage
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	If StringUpper(StringMid($sImageFile, StringLen($sImageFile) - 2)) = "BMP" Then
+		If BitAND(_WinAPI_GetWindowLong($hWnd, $__BUTTONCONSTANT_GWL_STYLE), $BS_BITMAP) = $BS_BITMAP Then
+			$hImage = _WinAPI_LoadImage(0, $sImageFile, 0, 0, 0, BitOR($LR_LOADFROMFILE, $LR_CREATEDIBSECTION))
+			If Not $hImage Then Return SetError(-1, -1, False)
+			$hPrevImage = _SendMessage($hWnd, $BM_SETIMAGE, 0, $hImage)
+			If $hPrevImage Then
+				If Not _WinAPI_DeleteObject($hPrevImage) Then _WinAPI_DestroyIcon($hPrevImage)
+			EndIf
+			_WinAPI_UpdateWindow($hWnd) ; force a WM_PAINT
+			Return True
+		EndIf
+	Else
+		If $iIconID = -1 Then
+			$hImage = _WinAPI_LoadImage(0, $sImageFile, 1, 0, 0, BitOR($LR_LOADFROMFILE, $LR_CREATEDIBSECTION))
+			If Not $hImage Then Return SetError(-1, -1, False)
+			$hPrevImage = _SendMessage($hWnd, $BM_SETIMAGE, 1, $hImage)
+			If $hPrevImage Then
+				If Not _WinAPI_DeleteObject($hPrevImage) Then _WinAPI_DestroyIcon($hPrevImage)
+			EndIf
+			_WinAPI_UpdateWindow($hWnd) ; force a WM_PAINT
+			Return True
+		Else
+			Local $tIcon = DllStructCreate("handle Handle")
+			Local $iRet
+			If $bLarge Then
+				$iRet = _WinAPI_ExtractIconEx($sImageFile, $iIconID, $tIcon, 0, 1)
+			Else
+				$iRet = _WinAPI_ExtractIconEx($sImageFile, $iIconID, 0, $tIcon, 1)
+			EndIf
+			If Not $iRet Then Return SetError(-1, -1, False)
+			$hPrevImage = _SendMessage($hWnd, $BM_SETIMAGE, 1, DllStructGetData($tIcon, "Handle"))
+			If $hPrevImage Then
+				If Not _WinAPI_DeleteObject($hPrevImage) Then _WinAPI_DestroyIcon($hPrevImage)
+			EndIf
+			_WinAPI_UpdateWindow($hWnd) ; force a WM_PAINT
+			Return True
+		EndIf
+	EndIf
+	Return False
+EndFunc   ;==>_GUICtrlButton_SetImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetImageList($hWnd, $hImage, $iAlign = 0, $iLeft = 1, $iTop = 1, $iRight = 1, $iBottom = 1)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	If $iAlign < 0 Or $iAlign > 4 Then $iAlign = 0
+
+	Local $tBUTTON_IMAGELIST = DllStructCreate($tagBUTTON_IMAGELIST)
+
+	DllStructSetData($tBUTTON_IMAGELIST, "ImageList", $hImage)
+	DllStructSetData($tBUTTON_IMAGELIST, "Left", $iLeft)
+	DllStructSetData($tBUTTON_IMAGELIST, "Top", $iTop)
+	DllStructSetData($tBUTTON_IMAGELIST, "Right", $iRight)
+	DllStructSetData($tBUTTON_IMAGELIST, "Bottom", $iBottom)
+	DllStructSetData($tBUTTON_IMAGELIST, "Align", $iAlign)
+
+	Local $bEnabled = _GUICtrlButton_Enable($hWnd, False)
+	Local $iRet = _SendMessage($hWnd, $BCM_SETIMAGELIST, 0, $tBUTTON_IMAGELIST, 0, "wparam", "struct*") <> 0
+	_GUICtrlButton_Enable($hWnd)
+	If Not $bEnabled Then _GUICtrlButton_Enable($hWnd, False)
+	Return $iRet
+EndFunc   ;==>_GUICtrlButton_SetImageList
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetNote($hWnd, $sNote)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	Local $tNote = _WinAPI_MultiByteToWideChar($sNote)
+	Return _SendMessage($hWnd, $BCM_SETNOTE, 0, $tNote, 0, "wparam", "struct*") <> 0
+EndFunc   ;==>_GUICtrlButton_SetNote
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetShield($hWnd, $bRequired = True)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	Return _SendMessage($hWnd, $BCM_SETSHIELD, 0, $bRequired) = 1
+EndFunc   ;==>_GUICtrlButton_SetShield
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetSize($hWnd, $iWidth, $iHeight)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	If Not _WinAPI_IsClassName($hWnd, $__BUTTONCONSTANT_ClassName) Then Return SetError(-1, -1, False)
+	Local $hParent = _WinAPI_GetParent($hWnd)
+	If Not $hParent Then Return SetError(-1, -1, False)
+	Local $aPos = WinGetPos($hWnd)
+	If Not IsArray($aPos) Then Return SetError(-1, -1, False)
+	Local $tPoint = DllStructCreate($tagPOINT)
+	DllStructSetData($tPoint, "X", $aPos[0])
+	DllStructSetData($tPoint, "Y", $aPos[1])
+	If Not _WinAPI_ScreenToClient($hParent, $tPoint) Then Return SetError(-1, -1, False)
+	Local $iRet = WinMove($hWnd, "", DllStructGetData($tPoint, "X"), DllStructGetData($tPoint, "Y"), $iWidth, $iHeight)
+	Return SetError($iRet - 1, $iRet - 1, $iRet <> 0)
+EndFunc   ;==>_GUICtrlButton_SetSize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetSplitInfo($hWnd, $hImlGlyph = -1, $iSplitStyle = $BCSS_ALIGNLEFT, $iWidth = 0, $iHeight = 0)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	Local $tSplitInfo = DllStructCreate($tagBUTTON_SPLITINFO), $iMask = 0
+
+	If $hImlGlyph <> -1 Then
+		$iMask = BitOR($iMask, $BCSIF_GLYPH)
+		DllStructSetData($tSplitInfo, "himlGlyph", $hImlGlyph)
+	EndIf
+
+	$iMask = BitOR($iMask, $BCSIF_STYLE)
+	If BitAND($iSplitStyle, $BCSS_IMAGE) = $BCSS_IMAGE Then $iMask = BitOR($iMask, $BCSIF_IMAGE)
+	DllStructSetData($tSplitInfo, "uSplitStyle", $iSplitStyle)
+
+	If $iWidth > 0 Or $iHeight > 0 Then
+		$iMask = BitOR($iMask, $BCSIF_SIZE)
+		DllStructSetData($tSplitInfo, "X", $iWidth)
+		DllStructSetData($tSplitInfo, "Y", $iHeight)
+	EndIf
+
+	DllStructSetData($tSplitInfo, "mask", $iMask)
+
+	Return _SendMessage($hWnd, $BCM_SETSPLITINFO, 0, $tSplitInfo, 0, "wparam", "struct*") <> 0
+EndFunc   ;==>_GUICtrlButton_SetSplitInfo
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetState($hWnd, $bHighlighted = True)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	_SendMessage($hWnd, $BM_SETSTATE, $bHighlighted)
+EndFunc   ;==>_GUICtrlButton_SetState
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetStyle($hWnd, $iStyle)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	_SendMessage($hWnd, $BM_SETSTYLE, $iStyle, True)
+	_WinAPI_UpdateWindow($hWnd) ; force a WM_PAINT
+EndFunc   ;==>_GUICtrlButton_SetStyle
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetText($hWnd, $sText)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	If _WinAPI_IsClassName($hWnd, $__BUTTONCONSTANT_ClassName) Then Return _WinAPI_SetWindowText($hWnd, $sText)
+EndFunc   ;==>_GUICtrlButton_SetText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_SetTextMargin($hWnd, $iLeft = 1, $iTop = 1, $iRight = 1, $iBottom = 1)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	Local $tRECT = DllStructCreate($tagRECT)
+	DllStructSetData($tRECT, "Left", $iLeft)
+	DllStructSetData($tRECT, "Top", $iTop)
+	DllStructSetData($tRECT, "Right", $iRight)
+	DllStructSetData($tRECT, "Bottom", $iBottom)
+	Return _SendMessage($hWnd, $BCM_SETTEXTMARGIN, 0, $tRECT, 0, "wparam", "struct*") <> 0
+EndFunc   ;==>_GUICtrlButton_SetTextMargin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlButton_Show($hWnd, $bShow = True)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	If _WinAPI_IsClassName($hWnd, $__BUTTONCONSTANT_ClassName) Then
+		If $bShow Then
+			Return _WinAPI_ShowWindow($hWnd, @SW_SHOW)
+		Else
+			Return _WinAPI_ShowWindow($hWnd, @SW_HIDE)
+		EndIf
+	EndIf
+EndFunc   ;==>_GUICtrlButton_Show

+ 801 - 0
include/GuiComboBox.au3

@@ -0,0 +1,801 @@
+#include-once
+
+#include "ComboConstants.au3"
+#include "DirConstants.au3"
+#include "SendMessage.au3"
+#include "StructureConstants.au3"
+#include "UDFGlobalID.au3"
+#include "WinAPIConv.au3"
+#include "WinAPIHObj.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: ComboBox
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with ComboBox control management.
+; Author(s) .....: gafrost, PaulIA, Valik
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hCBLastWnd
+
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__COMBOBOXCONSTANT_ClassName = "ComboBox"
+Global Const $__COMBOBOXCONSTANT_EM_GETLINE = 0xC4
+Global Const $__COMBOBOXCONSTANT_EM_LINEINDEX = 0xBB
+Global Const $__COMBOBOXCONSTANT_EM_LINELENGTH = 0xC1
+Global Const $__COMBOBOXCONSTANT_EM_REPLACESEL = 0xC2
+
+Global Const $__COMBOBOXCONSTANT_WM_SETREDRAW = 0x000B
+Global Const $__COMBOBOXCONSTANT_DEFAULT_GUI_FONT = 17
+; ===============================================================================================================================
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Not working/documented/implemented at this time
+;
+; _GUICtrlComboBox_SetLocale
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUICtrlComboBox_AddDir
+; _GUICtrlComboBox_AddString
+; _GUICtrlComboBox_AutoComplete
+; _GUICtrlComboBox_BeginUpdate
+; _GUICtrlComboBox_Create
+; _GUICtrlComboBox_DeleteString
+; _GUICtrlComboBox_Destroy
+; _GUICtrlComboBox_EndUpdate
+; _GUICtrlComboBox_FindString
+; _GUICtrlComboBox_FindStringExact
+; _GUICtrlComboBox_GetComboBoxInfo
+; _GUICtrlComboBox_GetCount
+; _GUICtrlComboBox_GetCueBanner
+; _GUICtrlComboBox_GetCurSel
+; _GUICtrlComboBox_GetDroppedControlRect
+; _GUICtrlComboBox_GetDroppedControlRectEx
+; _GUICtrlComboBox_GetDroppedState
+; _GUICtrlComboBox_GetDroppedWidth
+; _GUICtrlComboBox_GetEditSel
+; _GUICtrlComboBox_GetEditText
+; _GUICtrlComboBox_GetExtendedUI
+; _GUICtrlComboBox_GetHorizontalExtent
+; _GUICtrlComboBox_GetItemHeight
+; _GUICtrlComboBox_GetLBText
+; _GUICtrlComboBox_GetLBTextLen
+; _GUICtrlComboBox_GetList
+; _GUICtrlComboBox_GetListArray
+; _GUICtrlComboBox_GetLocale
+; _GUICtrlComboBox_GetLocaleCountry
+; _GUICtrlComboBox_GetLocaleLang
+; _GUICtrlComboBox_GetLocalePrimLang
+; _GUICtrlComboBox_GetLocaleSubLang
+; _GUICtrlComboBox_GetMinVisible
+; _GUICtrlComboBox_GetTopIndex
+; _GUICtrlComboBox_InitStorage
+; _GUICtrlComboBox_InsertString
+; _GUICtrlComboBox_LimitText
+; _GUICtrlComboBox_ReplaceEditSel
+; _GUICtrlComboBox_ResetContent
+; _GUICtrlComboBox_SelectString
+; _GUICtrlComboBox_SetCueBanner
+; _GUICtrlComboBox_SetCurSel
+; _GUICtrlComboBox_SetDroppedWidth
+; _GUICtrlComboBox_SetEditSel
+; _GUICtrlComboBox_SetEditText
+; _GUICtrlComboBox_SetExtendedUI
+; _GUICtrlComboBox_SetHorizontalExtent
+; _GUICtrlComboBox_SetItemHeight
+; _GUICtrlComboBox_SetMinVisible
+; _GUICtrlComboBox_SetTopIndex
+; _GUICtrlComboBox_ShowDropDown
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; $tagCOMBOBOXINFO
+; __GUICtrlComboBox_IsPressed
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: $tagCOMBOBOXINFO
+; Description ...: Contains combo box status information
+; Fields ........: cbSize      - The size, in bytes, of the structure. The calling application must set this to sizeof(COMBOBOXINFO).
+;                  rcItem      - A RECT structure that specifies the coordinates of the edit box.
+;                  |EditLeft
+;                  |EditTop
+;                  |EditRight
+;                  |EditBottom
+;                  rcButton    - A RECT structure that specifies the coordinates of the button that contains the drop-down arrow.
+;                  |BtnLeft
+;                  |BtnTop
+;                  |BtnRight
+;                  |BtnBottom
+;                  stateButton - The combo box button state. This parameter can be one of the following values.
+;                  |0                       - The button exists and is not pressed.
+;                  |$STATE_SYSTEM_INVISIBLE - There is no button.
+;                  |$STATE_SYSTEM_PRESSED   - The button is pressed.
+;                  hCombo      - A handle to the combo box.
+;                  hEdit       - A handle to the edit box.
+;                  hList       - A handle to the drop-down list.
+; Author ........: Gary Frost (gafrost)
+; Remarks .......:
+; ===============================================================================================================================
+Global Const $tagCOMBOBOXINFO = "dword Size;struct;long EditLeft;long EditTop;long EditRight;long EditBottom;endstruct;" & _
+		"struct;long BtnLeft;long BtnTop;long BtnRight;long BtnBottom;endstruct;dword BtnState;hwnd hCombo;hwnd hEdit;hwnd hList"
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_AddDir($hWnd, $sFilePath, $iAttributes = 0, $bBrackets = True)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	If BitAND($iAttributes, $DDL_DRIVES) = $DDL_DRIVES And Not $bBrackets Then
+		Local $sText
+		Local $hGui_no_brackets = GUICreate("no brackets")
+		Local $idCombo_no_brackets = GUICtrlCreateCombo("", 240, 40, 120, 120)
+		Local $iRet = GUICtrlSendMsg($idCombo_no_brackets, $CB_DIR, $iAttributes, $sFilePath)
+		For $i = 0 To _GUICtrlComboBox_GetCount($idCombo_no_brackets) - 1
+			_GUICtrlComboBox_GetLBText($idCombo_no_brackets, $i, $sText)
+			$sText = StringReplace(StringReplace(StringReplace($sText, "[", ""), "]", ":"), "-", "")
+			_GUICtrlComboBox_InsertString($hWnd, $sText)
+		Next
+		GUIDelete($hGui_no_brackets)
+		Return $iRet
+	Else
+		Return _SendMessage($hWnd, $CB_DIR, $iAttributes, $sFilePath, 0, "wparam", "wstr")
+	EndIf
+EndFunc   ;==>_GUICtrlComboBox_AddDir
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_AddString($hWnd, $sText)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_ADDSTRING, 0, $sText, 0, "wparam", "wstr")
+EndFunc   ;==>_GUICtrlComboBox_AddString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_AutoComplete($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	If Not __GUICtrlComboBox_IsPressed('08') And Not __GUICtrlComboBox_IsPressed("2E") Then ;backspace pressed or Del
+		Local $sEditText = _GUICtrlComboBox_GetEditText($hWnd)
+		If StringLen($sEditText) Then
+			Local $sInputText
+			Local $iRet = _GUICtrlComboBox_FindString($hWnd, $sEditText)
+			If ($iRet <> $CB_ERR) Then
+				_GUICtrlComboBox_GetLBText($hWnd, $iRet, $sInputText)
+				_GUICtrlComboBox_SetEditText($hWnd, $sInputText)
+				_GUICtrlComboBox_SetEditSel($hWnd, StringLen($sEditText), StringLen($sInputText))
+			EndIf
+		EndIf
+	EndIf
+EndFunc   ;==>_GUICtrlComboBox_AutoComplete
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlComboBox_BeginUpdate($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $__COMBOBOXCONSTANT_WM_SETREDRAW, False) = 0
+EndFunc   ;==>_GUICtrlComboBox_BeginUpdate
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_Create($hWnd, $sText, $iX, $iY, $iWidth = 100, $iHeight = 120, $iStyle = 0x00200042, $iExStyle = 0x00000000)
+	If Not IsHWnd($hWnd) Then Return SetError(1, 0, 0) ; Invalid Window handle for _GUICtrlComboBox_Create 1st parameter
+	If Not IsString($sText) Then Return SetError(2, 0, 0) ; 2nd parameter not a string for _GUICtrlComboBox_Create
+
+	Local $aText, $sDelimiter = Opt("GUIDataSeparatorChar")
+
+	If $iWidth = -1 Then $iWidth = 100
+	If $iHeight = -1 Then $iHeight = 120
+	Local Const $WS_VSCROLL = 0x00200000
+	If $iStyle = -1 Then $iStyle = BitOR($WS_VSCROLL, $CBS_AUTOHSCROLL, $CBS_DROPDOWN)
+	If $iExStyle = -1 Then $iExStyle = 0x00000000
+
+	$iStyle = BitOR($iStyle, $__UDFGUICONSTANT_WS_CHILD, $__UDFGUICONSTANT_WS_TABSTOP, $__UDFGUICONSTANT_WS_VISIBLE)
+
+	Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	Local $hCombo = _WinAPI_CreateWindowEx($iExStyle, $__COMBOBOXCONSTANT_ClassName, "", $iStyle, $iX, $iY, $iWidth, $iHeight, $hWnd, $nCtrlID)
+	_WinAPI_SetFont($hCombo, _WinAPI_GetStockObject($__COMBOBOXCONSTANT_DEFAULT_GUI_FONT))
+	If StringLen($sText) Then
+		$aText = StringSplit($sText, $sDelimiter)
+		For $x = 1 To $aText[0]
+			_GUICtrlComboBox_AddString($hCombo, $aText[$x])
+		Next
+	EndIf
+	Return $hCombo
+EndFunc   ;==>_GUICtrlComboBox_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_DeleteString($hWnd, $iIndex)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_DELETESTRING, $iIndex)
+EndFunc   ;==>_GUICtrlComboBox_DeleteString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_Destroy(ByRef $hWnd)
+	If Not _WinAPI_IsClassName($hWnd, $__COMBOBOXCONSTANT_ClassName) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hCBLastWnd) Then
+			Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
+			Local $hParent = _WinAPI_GetParent($hWnd)
+			$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+			Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
+			If Not $iRet Then
+				; can check for errors here if needed, for debug
+			EndIf
+		Else
+			; Not Allowed to Destroy Other Applications Control(s)
+			Return SetError(1, 1, False)
+		EndIf
+	Else
+		$iDestroyed = GUICtrlDelete($hWnd)
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUICtrlComboBox_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlComboBox_EndUpdate($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $__COMBOBOXCONSTANT_WM_SETREDRAW, True) = 0
+EndFunc   ;==>_GUICtrlComboBox_EndUpdate
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_FindString($hWnd, $sText, $iIndex = -1)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_FINDSTRING, $iIndex, $sText, 0, "int", "wstr")
+EndFunc   ;==>_GUICtrlComboBox_FindString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_FindStringExact($hWnd, $sText, $iIndex = -1)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_FINDSTRINGEXACT, $iIndex, $sText, 0, "wparam", "wstr")
+EndFunc   ;==>_GUICtrlComboBox_FindStringExact
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetComboBoxInfo($hWnd, ByRef $tInfo)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	$tInfo = DllStructCreate($tagCOMBOBOXINFO)
+	Local $iInfo = DllStructGetSize($tInfo)
+	DllStructSetData($tInfo, "Size", $iInfo)
+	Return _SendMessage($hWnd, $CB_GETCOMBOBOXINFO, 0, $tInfo, 0, "wparam", "struct*") <> 0
+EndFunc   ;==>_GUICtrlComboBox_GetComboBoxInfo
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetCount($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_GETCOUNT)
+EndFunc   ;==>_GUICtrlComboBox_GetCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetCueBanner($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $tText = DllStructCreate("wchar[4096]")
+	If _SendMessage($hWnd, $CB_GETCUEBANNER, $tText, 4096, 0, "struct*") <> 1 Then Return SetError(-1, 0, "")
+	Return _WinAPI_WideCharToMultiByte($tText)
+EndFunc   ;==>_GUICtrlComboBox_GetCueBanner
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetCurSel($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_GETCURSEL)
+EndFunc   ;==>_GUICtrlComboBox_GetCurSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetDroppedControlRect($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $aRect[4]
+
+	Local $tRECT = _GUICtrlComboBox_GetDroppedControlRectEx($hWnd)
+	$aRect[0] = DllStructGetData($tRECT, "Left")
+	$aRect[1] = DllStructGetData($tRECT, "Top")
+	$aRect[2] = DllStructGetData($tRECT, "Right")
+	$aRect[3] = DllStructGetData($tRECT, "Bottom")
+
+	Return $aRect
+EndFunc   ;==>_GUICtrlComboBox_GetDroppedControlRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetDroppedControlRectEx($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $tRECT = DllStructCreate($tagRECT)
+	_SendMessage($hWnd, $CB_GETDROPPEDCONTROLRECT, 0, $tRECT, 0, "wparam", "struct*")
+	Return $tRECT
+EndFunc   ;==>_GUICtrlComboBox_GetDroppedControlRectEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetDroppedState($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_GETDROPPEDSTATE) <> 0
+EndFunc   ;==>_GUICtrlComboBox_GetDroppedState
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetDroppedWidth($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_GETDROPPEDWIDTH)
+EndFunc   ;==>_GUICtrlComboBox_GetDroppedWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetEditSel($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $tStart = DllStructCreate("dword Start")
+	Local $tEnd = DllStructCreate("dword End")
+
+	Local $iRet = _SendMessage($hWnd, $CB_GETEDITSEL, $tStart, $tEnd, 0, "struct*", "struct*")
+	If $iRet = 0 Then Return SetError($CB_ERR, $CB_ERR, $CB_ERR)
+
+	Local $aSel[2]
+	$aSel[0] = DllStructGetData($tStart, "Start")
+	$aSel[1] = DllStructGetData($tEnd, "End")
+	Return $aSel
+EndFunc   ;==>_GUICtrlComboBox_GetEditSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......: Melba23
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetEditText($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $tInfo
+	If _GUICtrlComboBox_GetComboBoxInfo($hWnd, $tInfo) Then
+		Local $hEdit = DllStructGetData($tInfo, "hEdit")
+		Local $iLine = 0
+		Local $iIndex = _SendMessage($hEdit, $__COMBOBOXCONSTANT_EM_LINEINDEX, $iLine)
+		Local $iLength = _SendMessage($hEdit, $__COMBOBOXCONSTANT_EM_LINELENGTH, $iIndex)
+		If $iLength = 0 Then Return ""
+		Local $tBuffer = DllStructCreate("short Len;wchar Text[" & $iLength & "]")
+		DllStructSetData($tBuffer, "Len", $iLength)
+
+		Local $iRet = _SendMessage($hEdit, $__COMBOBOXCONSTANT_EM_GETLINE, $iLine, $tBuffer, 0, "wparam", "struct*")
+		If $iRet = 0 Then Return SetError(-1, -1, "")
+
+		Local $tText = DllStructCreate("wchar Text[" & $iLength & "]", DllStructGetPtr($tBuffer))
+		Return DllStructGetData($tText, "Text")
+	Else
+		Return SetError(-1, -1, "")
+	EndIf
+EndFunc   ;==>_GUICtrlComboBox_GetEditText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetExtendedUI($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_GETEXTENDEDUI) <> 0
+EndFunc   ;==>_GUICtrlComboBox_GetExtendedUI
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetHorizontalExtent($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_GETHORIZONTALEXTENT)
+EndFunc   ;==>_GUICtrlComboBox_GetHorizontalExtent
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetItemHeight($hWnd, $iIndex = -1)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_GETITEMHEIGHT, $iIndex)
+EndFunc   ;==>_GUICtrlComboBox_GetItemHeight
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetLBText($hWnd, $iIndex, ByRef $sText)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $iLen = _GUICtrlComboBox_GetLBTextLen($hWnd, $iIndex)
+	Local $tBuffer = DllStructCreate("wchar Text[" & $iLen + 1 & "]")
+	Local $iRet = _SendMessage($hWnd, $CB_GETLBTEXT, $iIndex, $tBuffer, 0, "wparam", "struct*")
+
+	If ($iRet == $CB_ERR) Then Return SetError($CB_ERR, $CB_ERR, $CB_ERR)
+
+	$sText = DllStructGetData($tBuffer, "Text")
+	Return $iRet
+EndFunc   ;==>_GUICtrlComboBox_GetLBText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetLBTextLen($hWnd, $iIndex)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_GETLBTEXTLEN, $iIndex)
+EndFunc   ;==>_GUICtrlComboBox_GetLBTextLen
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Jason Boggs
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetList($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $sDelimiter = Opt("GUIDataSeparatorChar")
+	Local $sResult = "", $sItem
+	For $i = 0 To _GUICtrlComboBox_GetCount($hWnd) - 1
+		_GUICtrlComboBox_GetLBText($hWnd, $i, $sItem)
+		$sResult &= $sItem & $sDelimiter
+	Next
+
+	Return StringTrimRight($sResult, StringLen($sDelimiter))
+EndFunc   ;==>_GUICtrlComboBox_GetList
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetListArray($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $sDelimiter = Opt("GUIDataSeparatorChar")
+	Return StringSplit(_GUICtrlComboBox_GetList($hWnd), $sDelimiter)
+EndFunc   ;==>_GUICtrlComboBox_GetListArray
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetLocale($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_GETLOCALE)
+EndFunc   ;==>_GUICtrlComboBox_GetLocale
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetLocaleCountry($hWnd)
+	Return _WinAPI_HiWord(_GUICtrlComboBox_GetLocale($hWnd))
+EndFunc   ;==>_GUICtrlComboBox_GetLocaleCountry
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetLocaleLang($hWnd)
+	Return _WinAPI_LoWord(_GUICtrlComboBox_GetLocale($hWnd))
+EndFunc   ;==>_GUICtrlComboBox_GetLocaleLang
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetLocalePrimLang($hWnd)
+	Return _WinAPI_PrimaryLangId(_GUICtrlComboBox_GetLocaleLang($hWnd))
+EndFunc   ;==>_GUICtrlComboBox_GetLocalePrimLang
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetLocaleSubLang($hWnd)
+	Return _WinAPI_SubLangId(_GUICtrlComboBox_GetLocaleLang($hWnd))
+EndFunc   ;==>_GUICtrlComboBox_GetLocaleSubLang
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetMinVisible($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_GETMINVISIBLE)
+EndFunc   ;==>_GUICtrlComboBox_GetMinVisible
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_GetTopIndex($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_GETTOPINDEX)
+EndFunc   ;==>_GUICtrlComboBox_GetTopIndex
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_InitStorage($hWnd, $iNum, $iBytes)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_INITSTORAGE, $iNum, $iBytes)
+EndFunc   ;==>_GUICtrlComboBox_InitStorage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_InsertString($hWnd, $sText, $iIndex = -1)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_INSERTSTRING, $iIndex, $sText, 0, "wparam", "wstr")
+EndFunc   ;==>_GUICtrlComboBox_InsertString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_LimitText($hWnd, $iLimit = 0)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $CB_LIMITTEXT, $iLimit)
+EndFunc   ;==>_GUICtrlComboBox_LimitText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_ReplaceEditSel($hWnd, $sText)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $tInfo
+	If _GUICtrlComboBox_GetComboBoxInfo($hWnd, $tInfo) Then
+		Local $hEdit = DllStructGetData($tInfo, "hEdit")
+		_SendMessage($hEdit, $__COMBOBOXCONSTANT_EM_REPLACESEL, True, $sText, 0, "wparam", "wstr")
+	EndIf
+EndFunc   ;==>_GUICtrlComboBox_ReplaceEditSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_ResetContent($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $CB_RESETCONTENT)
+EndFunc   ;==>_GUICtrlComboBox_ResetContent
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_SelectString($hWnd, $sText, $iIndex = -1)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_SELECTSTRING, $iIndex, $sText, 0, "wparam", "wstr")
+EndFunc   ;==>_GUICtrlComboBox_SelectString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_SetCueBanner($hWnd, $sText)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $tText = _WinAPI_MultiByteToWideChar($sText)
+
+	Return _SendMessage($hWnd, $CB_SETCUEBANNER, 0, $tText, 0, "wparam", "struct*") = 1
+EndFunc   ;==>_GUICtrlComboBox_SetCueBanner
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_SetCurSel($hWnd, $iIndex = -1)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_SETCURSEL, $iIndex)
+EndFunc   ;==>_GUICtrlComboBox_SetCurSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_SetDroppedWidth($hWnd, $iWidth)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_SETDROPPEDWIDTH, $iWidth)
+EndFunc   ;==>_GUICtrlComboBox_SetDroppedWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_SetEditSel($hWnd, $iStart, $iStop)
+	If Not HWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_SETEDITSEL, 0, _WinAPI_MakeLong($iStart, $iStop)) <> -1
+EndFunc   ;==>_GUICtrlComboBox_SetEditSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_SetEditText($hWnd, $sText)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_GUICtrlComboBox_SetEditSel($hWnd, 0, -1)
+	_GUICtrlComboBox_ReplaceEditSel($hWnd, $sText)
+EndFunc   ;==>_GUICtrlComboBox_SetEditText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_SetExtendedUI($hWnd, $bExtended = False)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_SETEXTENDEDUI, $bExtended) = 0
+EndFunc   ;==>_GUICtrlComboBox_SetExtendedUI
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_SetHorizontalExtent($hWnd, $iWidth)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $CB_SETHORIZONTALEXTENT, $iWidth)
+EndFunc   ;==>_GUICtrlComboBox_SetHorizontalExtent
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_SetItemHeight($hWnd, $iHeight, $iComponent = -1)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_SETITEMHEIGHT, $iComponent, $iHeight)
+EndFunc   ;==>_GUICtrlComboBox_SetItemHeight
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Name...........: _GUICtrlComboBox_SetLocale
+; Description ...: Set the current locale of the ComboBox
+; Syntax.........: _GUICtrlComboBox_SetLocale ( $hWnd, $iLocale )
+; Parameters ....: $hWnd        - Handle to control
+;                  $iLocale     - Specifies the locale identifier for the ComboBox to use for sorting when adding text
+; Return values .: Success      - The previous locale identifier
+;                  Failure      - -1
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; Remarks .......: _WinAPI_MAKELANGID, _WinAPI_MAKELCID, _WinAPI_PrimaryLangId, _WinAPI_SubLangId
+; Related .......: _GUICtrlComboBox_GetLocale
+; Link ..........:
+; Example .......: Yes
+; ===============================================================================================================================
+Func _GUICtrlComboBox_SetLocale($hWnd, $iLocal)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_SETLOCALE, $iLocal)
+EndFunc   ;==>_GUICtrlComboBox_SetLocale
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_SetMinVisible($hWnd, $iMinimum)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_SETMINVISIBLE, $iMinimum) <> 0
+EndFunc   ;==>_GUICtrlComboBox_SetMinVisible
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_SetTopIndex($hWnd, $iIndex)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $CB_SETTOPINDEX, $iIndex) = 0
+EndFunc   ;==>_GUICtrlComboBox_SetTopIndex
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBox_ShowDropDown($hWnd, $bShow = False)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $CB_SHOWDROPDOWN, $bShow)
+EndFunc   ;==>_GUICtrlComboBox_ShowDropDown
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __GUICtrlComboBox_IsPressed
+; Description ...: Check if key has been pressed
+; Syntax.........: __GUICtrlComboBox_IsPressed ( $sHexKey [, $vDLL = 'user32.dll'] )
+; Parameters ....: $sHexKey     - Key to check for
+;                  $vDLL        - Handle to dll or default to user32.dll
+; Return values .: True         - 1
+;                  False        - 0
+; Author ........: ezzetabi and Jon
+; Modified.......:
+; Remarks .......: If calling this function repeatidly, should open 'user32.dll' and pass in handle.
+;                  Make sure to close at end of script
+; Related .......:
+; Link ..........:
+; Example .......: Yes
+; ===============================================================================================================================
+Func __GUICtrlComboBox_IsPressed($sHexKey, $vDLL = 'user32.dll')
+	; $hexKey must be the value of one of the keys.
+	; _Is_Key_Pressed will return 0 if the key is not pressed, 1 if it is.
+	Local $a_R = DllCall($vDLL, "short", "GetAsyncKeyState", "int", '0x' & $sHexKey)
+	If @error Then Return SetError(@error, @extended, False)
+	Return BitAND($a_R[0], 0x8000) <> 0
+EndFunc   ;==>__GUICtrlComboBox_IsPressed

+ 909 - 0
include/GuiComboBoxEx.au3

@@ -0,0 +1,909 @@
+#include-once
+
+#include "DirConstants.au3"
+#include "GuiComboBox.au3"
+#include "Memory.au3"
+#include "UDFGlobalID.au3"
+#include "WinAPIGdi.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: ComboBoxEx
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with ComboBoxEx control management.
+;                  ComboBoxEx Controls are an extension of the combo box control that provides native support for item images.
+;                  To make item images easily accessible, the control provides image list support. By using this control, you
+;                  can provide the functionality of a combo box without having to manually draw item graphics.
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hCBExLastWnd
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__COMBOBOXEXCONSTANT_ClassName = "ComboBoxEx32"
+Global Const $__COMBOBOXEXCONSTANT_WM_SIZE = 0x05
+; ===============================================================================================================================
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Not working/documented/implemented at this time
+;
+; _GUICtrlComboBoxEx_HasEditChanged
+;
+; Things to figure out for ComboBoxEx
+; FindString
+; AutoComplete
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUICtrlComboBoxEx_AddDir
+; _GUICtrlComboBoxEx_AddString
+; _GUICtrlComboBoxEx_BeginUpdate
+; _GUICtrlComboBoxEx_Create
+; _GUICtrlComboBoxEx_CreateSolidBitMap
+; _GUICtrlComboBoxEx_DeleteString
+; _GUICtrlComboBoxEx_Destroy
+; _GUICtrlComboBoxEx_EndUpdate
+; _GUICtrlComboBoxEx_FindStringExact
+; _GUICtrlComboBoxEx_GetComboBoxInfo
+; _GUICtrlComboBoxEx_GetComboControl
+; _GUICtrlComboBoxEx_GetCount
+; _GUICtrlComboBoxEx_GetCurSel
+; _GUICtrlComboBoxEx_GetDroppedControlRect
+; _GUICtrlComboBoxEx_GetDroppedControlRectEx
+; _GUICtrlComboBoxEx_GetDroppedState
+; _GUICtrlComboBoxEx_GetDroppedWidth
+; _GUICtrlComboBoxEx_GetEditControl
+; _GUICtrlComboBoxEx_GetEditSel
+; _GUICtrlComboBoxEx_GetEditText
+; _GUICtrlComboBoxEx_GetExtendedStyle
+; _GUICtrlComboBoxEx_GetExtendedUI
+; _GUICtrlComboBoxEx_GetImageList
+; _GUICtrlComboBoxEx_GetItem
+; _GUICtrlComboBoxEx_GetItemEx
+; _GUICtrlComboBoxEx_GetItemHeight
+; _GUICtrlComboBoxEx_GetItemImage
+; _GUICtrlComboBoxEx_GetItemIndent
+; _GUICtrlComboBoxEx_GetItemOverlayImage
+; _GUICtrlComboBoxEx_GetItemParam
+; _GUICtrlComboBoxEx_GetItemSelectedImage
+; _GUICtrlComboBoxEx_GetItemText
+; _GUICtrlComboBoxEx_GetItemTextLen
+; _GUICtrlComboBoxEx_GetList
+; _GUICtrlComboBoxEx_GetListArray
+; _GUICtrlComboBoxEx_GetLocale
+; _GUICtrlComboBoxEx_GetLocaleCountry
+; _GUICtrlComboBoxEx_GetLocaleLang
+; _GUICtrlComboBoxEx_GetLocalePrimLang
+; _GUICtrlComboBoxEx_GetLocaleSubLang
+; _GUICtrlComboBoxEx_GetMinVisible
+; _GUICtrlComboBoxEx_GetTopIndex
+; _GUICtrlComboBoxEx_GetUnicode
+; _GUICtrlComboBoxEx_InitStorage
+; _GUICtrlComboBoxEx_InsertString
+; _GUICtrlComboBoxEx_LimitText
+; _GUICtrlComboBoxEx_ReplaceEditSel
+; _GUICtrlComboBoxEx_ResetContent
+; _GUICtrlComboBoxEx_SetCurSel
+; _GUICtrlComboBoxEx_SetDroppedWidth
+; _GUICtrlComboBoxEx_SetEditSel
+; _GUICtrlComboBoxEx_SetEditText
+; _GUICtrlComboBoxEx_SetExtendedStyle
+; _GUICtrlComboBoxEx_SetExtendedUI
+; _GUICtrlComboBoxEx_SetImageList
+; _GUICtrlComboBoxEx_SetItem
+; _GUICtrlComboBoxEx_SetItemEx
+; _GUICtrlComboBoxEx_SetItemHeight
+; _GUICtrlComboBoxEx_SetItemImage
+; _GUICtrlComboBoxEx_SetItemIndent
+; _GUICtrlComboBoxEx_SetItemOverlayImage
+; _GUICtrlComboBoxEx_SetItemParam
+; _GUICtrlComboBoxEx_SetItemSelectedImage
+; _GUICtrlComboBoxEx_SetMinVisible
+; _GUICtrlComboBoxEx_SetTopIndex
+; _GUICtrlComboBoxEx_SetUnicode
+; _GUICtrlComboBoxEx_ShowDropDown
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_AddDir($hWnd, $sFilePath, $iAttributes = 0, $bBrackets = True)
+	Local $hGui = GUICreate("combo gui")
+	Local $idCombo = GUICtrlCreateCombo("", 240, 40, 120, 120)
+	Local $iRet = GUICtrlSendMsg($idCombo, $CB_DIR, $iAttributes, $sFilePath)
+	If $iRet = -1 Then
+		GUIDelete($hGui)
+		Return SetError(-1, -1, -1)
+	EndIf
+	Local $sText
+	For $i = 0 To _GUICtrlComboBox_GetCount($idCombo) - 1
+		_GUICtrlComboBox_GetLBText($idCombo, $i, $sText)
+		If BitAND($iAttributes, $DDL_DRIVES) = $DDL_DRIVES And _
+				Not $bBrackets Then $sText = StringReplace(StringReplace(StringReplace($sText, "[", ""), "]", ":"), "-", "")
+		_GUICtrlComboBoxEx_InsertString($hWnd, $sText)
+	Next
+	GUIDelete($hGui)
+	Return $iRet
+EndFunc   ;==>_GUICtrlComboBoxEx_AddDir
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_AddString($hWnd, $sText, $iImage = -1, $iSelectedImage = -1, $iOverlayImage = -1, $iIndent = -1, $iParam = -1)
+	Return _GUICtrlComboBoxEx_InsertString($hWnd, $sText, -1, $iImage, $iSelectedImage, $iOverlayImage, $iIndent, $iParam)
+EndFunc   ;==>_GUICtrlComboBoxEx_AddString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_BeginUpdate($hWnd)
+	Return _SendMessage($hWnd, $__COMBOBOXCONSTANT_WM_SETREDRAW, False) = 0
+EndFunc   ;==>_GUICtrlComboBoxEx_BeginUpdate
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_Create($hWnd, $sText, $iX, $iY, $iWidth = 100, $iHeight = 200, $iStyle = 0x00200002, $iExStyle = 0x00000000)
+	If Not IsHWnd($hWnd) Then Return SetError(1, 0, 0) ; Invalid Window handle for _GUICtrlComboBoxEx_Create 1st parameter
+	If Not IsString($sText) Then Return SetError(2, 0, 0) ; 2nd parameter not a string for _GUICtrlComboBoxEx_Create
+
+	Local $sDelimiter = Opt("GUIDataSeparatorChar")
+
+	If $iWidth = -1 Then $iWidth = 100
+	If $iHeight = -1 Then $iHeight = 200
+	Local Const $WS_VSCROLL = 0x00200000
+	If $iStyle = -1 Then $iStyle = BitOR($WS_VSCROLL, $CBS_DROPDOWN)
+	If $iExStyle = -1 Then $iExStyle = 0x00000000
+
+	$iStyle = BitOR($iStyle, $__UDFGUICONSTANT_WS_CHILD, $__UDFGUICONSTANT_WS_TABSTOP, $__UDFGUICONSTANT_WS_VISIBLE)
+
+	Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	Local $hCombo = _WinAPI_CreateWindowEx($iExStyle, $__COMBOBOXEXCONSTANT_ClassName, "", $iStyle, $iX, $iY, $iWidth, $iHeight, $hWnd, $nCtrlID)
+	_WinAPI_SetFont($hCombo, _WinAPI_GetStockObject($__COMBOBOXCONSTANT_DEFAULT_GUI_FONT))
+	If StringLen($sText) Then
+		Local $aText = StringSplit($sText, $sDelimiter)
+		For $x = 1 To $aText[0]
+			_GUICtrlComboBoxEx_AddString($hCombo, $aText[$x])
+		Next
+	EndIf
+	Return $hCombo
+EndFunc   ;==>_GUICtrlComboBoxEx_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_CreateSolidBitMap($hWnd, $iColor, $iWidth, $iHeight)
+	Return _WinAPI_CreateSolidBitmap($hWnd, $iColor, $iWidth, $iHeight)
+EndFunc   ;==>_GUICtrlComboBoxEx_CreateSolidBitMap
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_DeleteString($hWnd, $iIndex)
+	Return _SendMessage($hWnd, $CBEM_DELETEITEM, $iIndex)
+EndFunc   ;==>_GUICtrlComboBoxEx_DeleteString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_Destroy(ByRef $hWnd)
+	If Not _WinAPI_IsClassName($hWnd, $__COMBOBOXEXCONSTANT_ClassName) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If _WinAPI_InProcess($hWnd, $__g_hCBExLastWnd) Then
+		Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
+		Local $hParent = _WinAPI_GetParent($hWnd)
+		$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+		Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
+		If Not $iRet Then
+			; can check for errors here if needed, for debug
+		EndIf
+	Else
+		; Not Allowed to Destroy Other Applications Control(s)
+		Return SetError(1, 1, False)
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUICtrlComboBoxEx_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_EndUpdate($hWnd)
+	Return _SendMessage($hWnd, $__COMBOBOXCONSTANT_WM_SETREDRAW, True) = 0
+EndFunc   ;==>_GUICtrlComboBoxEx_EndUpdate
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_FindStringExact($hWnd, $sText, $iIndex = -1)
+	Return _SendMessage($hWnd, $CB_FINDSTRINGEXACT, $iIndex, $sText, 0, "wparam", "wstr")
+EndFunc   ;==>_GUICtrlComboBoxEx_FindStringExact
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetComboBoxInfo($hWnd, ByRef $tInfo)
+	Local $hCombo = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return _GUICtrlComboBox_GetComboBoxInfo($hCombo, $tInfo)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetComboBoxInfo
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return HWnd(_SendMessage($hWnd, $CBEM_GETCOMBOCONTROL))
+EndFunc   ;==>_GUICtrlComboBoxEx_GetComboControl
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetCount($hWnd)
+	Return _SendMessage($hWnd, $CB_GETCOUNT)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetCurSel($hWnd)
+	Return _SendMessage($hWnd, $CB_GETCURSEL)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetCurSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetDroppedControlRect($hWnd)
+	Local $tRECT = _GUICtrlComboBox_GetDroppedControlRectEx($hWnd)
+	Local $aRect[4]
+	$aRect[0] = DllStructGetData($tRECT, "Left")
+	$aRect[1] = DllStructGetData($tRECT, "Top")
+	$aRect[2] = DllStructGetData($tRECT, "Right")
+	$aRect[3] = DllStructGetData($tRECT, "Bottom")
+
+	Return $aRect
+EndFunc   ;==>_GUICtrlComboBoxEx_GetDroppedControlRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetDroppedControlRectEx($hWnd)
+	Local $tRECT = DllStructCreate($tagRECT)
+	_SendMessage($hWnd, $CB_GETDROPPEDCONTROLRECT, 0, $tRECT, 0, "wparam", "struct*")
+	Return $tRECT
+EndFunc   ;==>_GUICtrlComboBoxEx_GetDroppedControlRectEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafro_GUICtrlComboBox_GetDroppedState
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetDroppedState($hWnd)
+	Return _SendMessage($hWnd, $CB_GETDROPPEDSTATE) <> 0
+EndFunc   ;==>_GUICtrlComboBoxEx_GetDroppedState
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetDroppedWidth($hWnd)
+	Local $hCombo = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return _GUICtrlComboBox_GetDroppedWidth($hCombo)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetDroppedWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetEditControl($hWnd)
+	Return HWnd(_SendMessage($hWnd, $CBEM_GETEDITCONTROL))
+EndFunc   ;==>_GUICtrlComboBoxEx_GetEditControl
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetEditSel($hWnd)
+	Local $hCombo = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Local $aResult = _GUICtrlComboBox_GetEditSel($hCombo)
+
+	Return SetError(@error, @extended, $aResult)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetEditSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetEditText($hWnd)
+	Local $hComboBox = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return _GUICtrlComboBox_GetEditText($hComboBox)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetEditText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetExtendedStyle($hWnd)
+	Return _SendMessage($hWnd, $CBEM_GETEXTENDEDSTYLE)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetExtendedStyle
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetExtendedUI($hWnd)
+	Return _GUICtrlComboBox_GetExtendedUI($hWnd)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetExtendedUI
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetImageList($hWnd)
+	Return Ptr(_SendMessage($hWnd, $CBEM_GETIMAGELIST))
+EndFunc   ;==>_GUICtrlComboBoxEx_GetImageList
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetItem($hWnd, $iIndex)
+	Local $aItem[7], $sText
+
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	DllStructSetData($tItem, "Mask", BitOR($CBEIF_IMAGE, $CBEIF_INDENT, $CBEIF_LPARAM, $CBEIF_SELECTEDIMAGE, $CBEIF_OVERLAY))
+	DllStructSetData($tItem, "Item", $iIndex)
+	_GUICtrlComboBoxEx_GetItemEx($hWnd, $tItem)
+	Local $iLen = _GUICtrlComboBoxEx_GetItemText($hWnd, $iIndex, $sText)
+	$aItem[0] = $sText
+	$aItem[1] = $iLen
+	$aItem[2] = DllStructGetData($tItem, "Indent")
+	$aItem[3] = DllStructGetData($tItem, "Image")
+	$aItem[4] = DllStructGetData($tItem, "SelectedImage")
+	$aItem[5] = DllStructGetData($tItem, "OverlayImage")
+	$aItem[6] = DllStructGetData($tItem, "Param")
+	Return $aItem
+EndFunc   ;==>_GUICtrlComboBoxEx_GetItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetItemEx($hWnd, ByRef $tItem)
+	Local $bUnicode = _GUICtrlComboBoxEx_GetUnicode($hWnd)
+
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hCBExLastWnd) Then
+		$iRet = _SendMessage($hWnd, $CBEM_GETITEMW, 0, $tItem, 0, "wparam", "struct*")
+	Else
+		Local $iItem = DllStructGetSize($tItem)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iItem, $tMemMap)
+		_MemWrite($tMemMap, $tItem)
+		If $bUnicode Then
+			$iRet = _SendMessage($hWnd, $CBEM_GETITEMW, 0, $pMemory, 0, "wparam", "ptr")
+		Else
+			$iRet = _SendMessage($hWnd, $CBEM_GETITEMA, 0, $pMemory, 0, "wparam", "ptr")
+		EndIf
+		_MemRead($tMemMap, $pMemory, $tItem, $iItem)
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlComboBoxEx_GetItemEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetItemHeight($hWnd, $iComponent = -1)
+	Return _GUICtrlComboBox_GetItemHeight($hWnd, $iComponent)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetItemHeight
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetItemImage($hWnd, $iIndex)
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	DllStructSetData($tItem, "Mask", $CBEIF_IMAGE)
+	DllStructSetData($tItem, "Item", $iIndex)
+	_GUICtrlComboBoxEx_GetItemEx($hWnd, $tItem)
+	Return DllStructGetData($tItem, "Image")
+EndFunc   ;==>_GUICtrlComboBoxEx_GetItemImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetItemIndent($hWnd, $iIndex)
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	DllStructSetData($tItem, "Mask", $CBEIF_INDENT)
+	DllStructSetData($tItem, "Item", $iIndex)
+	_GUICtrlComboBoxEx_GetItemEx($hWnd, $tItem)
+	Return DllStructGetData($tItem, "Indent")
+EndFunc   ;==>_GUICtrlComboBoxEx_GetItemIndent
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetItemOverlayImage($hWnd, $iIndex)
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	DllStructSetData($tItem, "Mask", $CBEIF_OVERLAY)
+	DllStructSetData($tItem, "Item", $iIndex)
+	_GUICtrlComboBoxEx_GetItemEx($hWnd, $tItem)
+	Return DllStructGetData($tItem, "OverlayImage")
+EndFunc   ;==>_GUICtrlComboBoxEx_GetItemOverlayImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetItemParam($hWnd, $iIndex)
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	DllStructSetData($tItem, "Mask", $CBEIF_LPARAM)
+	DllStructSetData($tItem, "Item", $iIndex)
+	_GUICtrlComboBoxEx_GetItemEx($hWnd, $tItem)
+	Return DllStructGetData($tItem, "Param")
+EndFunc   ;==>_GUICtrlComboBoxEx_GetItemParam
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetItemSelectedImage($hWnd, $iIndex)
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	DllStructSetData($tItem, "Mask", $CBEIF_SELECTEDIMAGE)
+	DllStructSetData($tItem, "Item", $iIndex)
+	_GUICtrlComboBoxEx_GetItemEx($hWnd, $tItem)
+	Return DllStructGetData($tItem, "SelectedImage")
+EndFunc   ;==>_GUICtrlComboBoxEx_GetItemSelectedImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetItemText($hWnd, $iIndex, ByRef $sText)
+	Return _GUICtrlComboBox_GetLBText($hWnd, $iIndex, $sText)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetItemText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetItemTextLen($hWnd, $iIndex)
+	Return _GUICtrlComboBox_GetLBTextLen($hWnd, $iIndex)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetItemTextLen
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetList($hWnd)
+	Return _GUICtrlComboBox_GetList($hWnd)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetList
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetListArray($hWnd)
+	Local $sDelimiter = Opt("GUIDataSeparatorChar")
+	Return StringSplit(_GUICtrlComboBoxEx_GetList($hWnd), $sDelimiter)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetListArray
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetLocale($hWnd)
+	Local $hCombo = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return _GUICtrlComboBox_GetLocale($hCombo)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetLocale
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetLocaleCountry($hWnd)
+	Return _WinAPI_HiWord(_GUICtrlComboBoxEx_GetLocale($hWnd))
+EndFunc   ;==>_GUICtrlComboBoxEx_GetLocaleCountry
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetLocaleLang($hWnd)
+	Return _WinAPI_LoWord(_GUICtrlComboBoxEx_GetLocale($hWnd))
+EndFunc   ;==>_GUICtrlComboBoxEx_GetLocaleLang
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetLocalePrimLang($hWnd)
+	Return _WinAPI_PrimaryLangId(_GUICtrlComboBoxEx_GetLocaleLang($hWnd))
+EndFunc   ;==>_GUICtrlComboBoxEx_GetLocalePrimLang
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetLocaleSubLang($hWnd)
+	Return _WinAPI_SubLangId(_GUICtrlComboBoxEx_GetLocaleLang($hWnd))
+EndFunc   ;==>_GUICtrlComboBoxEx_GetLocaleSubLang
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetMinVisible($hWnd)
+	Local $hCombo = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return _GUICtrlComboBox_GetMinVisible($hCombo)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetMinVisible
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetTopIndex($hWnd)
+	Local $hCombo = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return _GUICtrlComboBox_GetTopIndex($hCombo)
+EndFunc   ;==>_GUICtrlComboBoxEx_GetTopIndex
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_GetUnicode($hWnd)
+	Return _SendMessage($hWnd, $CBEM_GETUNICODEFORMAT) <> 0
+EndFunc   ;==>_GUICtrlComboBoxEx_GetUnicode
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Name...........: _GUICtrlComboBoxEx_HasEditChanged
+; Description ...: Determines whether the user has changed the text of a ComboBoxEx edit control
+; Syntax.........: _GUICtrlComboBoxEx_HasEditChanged ( $hWnd )
+; Parameters ....: $hWnd        - Handle to control
+; Return values .: True         - Text in the control's edit box has changed
+;                  False        - No change
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_HasEditChanged($hWnd)
+	Local $tInfo
+	If _GUICtrlComboBoxEx_GetComboBoxInfo($hWnd, $tInfo) Then
+		Local $hEdit = DllStructGetData($tInfo, "hEdit")
+		Return _SendMessage($hEdit, $CBEM_HASEDITCHANGED) <> 0
+	Else
+		Return False
+	EndIf
+EndFunc   ;==>_GUICtrlComboBoxEx_HasEditChanged
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_InitStorage($hWnd, $iNum, $iBytes)
+	Local $hCombo = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return _GUICtrlComboBox_InitStorage($hCombo, $iNum, $iBytes)
+EndFunc   ;==>_GUICtrlComboBoxEx_InitStorage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_InsertString($hWnd, $sText, $iIndex = -1, $iImage = -1, $iSelectedImage = -1, $iOverlayImage = -1, $iIndent = -1, $iParam = -1)
+	Local $iBuffer = 0, $iMask, $iRet
+	Local $bUnicode = _GUICtrlComboBoxEx_GetUnicode($hWnd)
+
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	If $sText <> -1 Then
+		$iMask = BitOR($CBEIF_TEXT, $CBEIF_LPARAM)
+		$iBuffer = StringLen($sText) + 1
+		Local $tBuffer
+		If $bUnicode Then
+			$tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+			$iBuffer *= 2
+		Else
+			$tBuffer = DllStructCreate("char Text[" & $iBuffer & "]")
+		EndIf
+		DllStructSetData($tBuffer, "Text", $sText)
+		DllStructSetData($tItem, "Text", DllStructGetPtr($tBuffer))
+		DllStructSetData($tItem, "TextMax", $iBuffer)
+	Else
+		$iMask = BitOR($CBEIF_DI_SETITEM, $CBEIF_LPARAM)
+	EndIf
+	If $iImage >= 0 Then $iMask = BitOR($iMask, $CBEIF_IMAGE)
+	If $iSelectedImage >= 0 Then $iMask = BitOR($iMask, $CBEIF_SELECTEDIMAGE)
+	If $iOverlayImage >= 0 Then $iMask = BitOR($iMask, $CBEIF_OVERLAY)
+	If $iIndent >= 1 Then $iMask = BitOR($iMask, $CBEIF_INDENT)
+	If $iParam = -1 Then $iParam = _GUICtrlComboBoxEx_GetCount($hWnd)
+	DllStructSetData($tItem, "Mask", $iMask)
+	DllStructSetData($tItem, "Item", $iIndex)
+	DllStructSetData($tItem, "Image", $iImage)
+	DllStructSetData($tItem, "SelectedImage", $iSelectedImage)
+	DllStructSetData($tItem, "OverlayImage", $iOverlayImage)
+	DllStructSetData($tItem, "Indent", $iIndent)
+	DllStructSetData($tItem, "Param", $iParam)
+	If _WinAPI_InProcess($hWnd, $__g_hCBExLastWnd) Or ($sText = -1) Then
+		$iRet = _SendMessage($hWnd, $CBEM_INSERTITEMW, 0, $tItem, 0, "wparam", "struct*")
+	Else
+		Local $iItem = DllStructGetSize($tItem)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iItem + $iBuffer, $tMemMap)
+		Local $pText = $pMemory + $iItem
+		DllStructSetData($tItem, "Text", $pText)
+		_MemWrite($tMemMap, $tItem, $pMemory, $iItem)
+		_MemWrite($tMemMap, $tBuffer, $pText, $iBuffer)
+		If $bUnicode Then
+			$iRet = _SendMessage($hWnd, $CBEM_INSERTITEMW, 0, $pMemory, 0, "wparam", "ptr")
+		Else
+			$iRet = _SendMessage($hWnd, $CBEM_INSERTITEMA, 0, $pMemory, 0, "wparam", "ptr")
+		EndIf
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet
+EndFunc   ;==>_GUICtrlComboBoxEx_InsertString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_LimitText($hWnd, $iLimit = 0)
+	_SendMessage($hWnd, $CB_LIMITTEXT, $iLimit)
+EndFunc   ;==>_GUICtrlComboBoxEx_LimitText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_ReplaceEditSel($hWnd, $sText)
+	Local $hCombo = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	_GUICtrlComboBox_ReplaceEditSel($hCombo, $sText)
+EndFunc   ;==>_GUICtrlComboBoxEx_ReplaceEditSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_ResetContent($hWnd)
+	_SendMessage($hWnd, $CB_RESETCONTENT)
+EndFunc   ;==>_GUICtrlComboBoxEx_ResetContent
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetCurSel($hWnd, $iIndex = -1)
+	Return _SendMessage($hWnd, $CB_SETCURSEL, $iIndex)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetCurSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetDroppedWidth($hWnd, $iWidth)
+	Local $hCombo = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return _GUICtrlComboBox_SetDroppedWidth($hCombo, $iWidth)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetDroppedWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetEditSel($hWnd, $iStart, $iStop)
+	Local $hCombo = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return _GUICtrlComboBox_SetEditSel($hCombo, $iStart, $iStop)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetEditSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetEditText($hWnd, $sText)
+	Local $hComboBox = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	_GUICtrlComboBox_SetEditSel($hComboBox, 0, -1)
+	_GUICtrlComboBox_ReplaceEditSel($hComboBox, $sText)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetEditText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetExtendedStyle($hWnd, $iExStyle, $iExMask = 0)
+	Local $iRet = _SendMessage($hWnd, $CBEM_SETEXTENDEDSTYLE, $iExMask, $iExStyle)
+	_WinAPI_InvalidateRect($hWnd)
+	Return $iRet
+EndFunc   ;==>_GUICtrlComboBoxEx_SetExtendedStyle
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetExtendedUI($hWnd, $bExtended = False)
+	Local $hComboBox = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return _SendMessage($hComboBox, $CB_SETEXTENDEDUI, $bExtended) = 0
+EndFunc   ;==>_GUICtrlComboBoxEx_SetExtendedUI
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetImageList($hWnd, $hHandle)
+	Local $hResult = _SendMessage($hWnd, $CBEM_SETIMAGELIST, 0, $hHandle, 0, "wparam", "handle", "handle")
+	_SendMessage($hWnd, $__COMBOBOXEXCONSTANT_WM_SIZE)
+	Return $hResult
+EndFunc   ;==>_GUICtrlComboBoxEx_SetImageList
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetItem($hWnd, $sText, $iIndex = 0, $iImage = -1, $iSelectedImage = -1, $iOverlayImage = -1, $iIndent = -1, $iParam = -1)
+	Local $iBuffer = StringLen($sText) + 1
+	Local $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+	Local $pBuffer = DllStructGetPtr($tBuffer)
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	Local $iMask = $CBEIF_TEXT
+	If $iImage <> -1 Then $iMask = BitOR($iMask, $CBEIF_IMAGE)
+	If $iSelectedImage <> -1 Then $iMask = BitOR($iMask, $CBEIF_SELECTEDIMAGE)
+	If $iOverlayImage <> -1 Then $iMask = BitOR($iMask, $CBEIF_OVERLAY)
+	If $iParam <> -1 Then $iMask = BitOR($iMask, $CBEIF_LPARAM)
+	If $iIndent <> -1 Then $iMask = BitOR($iMask, $CBEIF_INDENT)
+	DllStructSetData($tBuffer, "Text", $sText)
+	DllStructSetData($tItem, "Mask", $iMask)
+	DllStructSetData($tItem, "Item", $iIndex)
+	DllStructSetData($tItem, "Text", $pBuffer)
+	DllStructSetData($tItem, "TextMax", $iBuffer * 2)
+	DllStructSetData($tItem, "Image", $iImage)
+	DllStructSetData($tItem, "Param", $iParam)
+	DllStructSetData($tItem, "Indent", $iIndent)
+	DllStructSetData($tItem, "SelectedImage", $iSelectedImage)
+	DllStructSetData($tItem, "OverlayImage", $iOverlayImage)
+	Return _GUICtrlComboBoxEx_SetItemEx($hWnd, $tItem)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetItemEx($hWnd, ByRef $tItem)
+	Local $iItem = DllStructGetSize($tItem)
+	Local $iBuffer = DllStructGetData($tItem, "TextMax")
+	If $iBuffer = 0 Then $iBuffer = 1
+	Local $pBuffer = DllStructGetData($tItem, "Text")
+	Local $tMemMap
+	Local $pMemory = _MemInit($hWnd, $iItem + $iBuffer, $tMemMap)
+	Local $pText = $pMemory + $iItem
+	DllStructSetData($tItem, "Text", $pText)
+	_MemWrite($tMemMap, $tItem, $pMemory, $iItem)
+	If $pBuffer <> 0 Then _MemWrite($tMemMap, $pBuffer, $pText, $iBuffer)
+	Local $iRet = _SendMessage($hWnd, $CBEM_SETITEMW, 0, $pMemory, 0, "wparam", "ptr")
+	_MemFree($tMemMap)
+
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlComboBoxEx_SetItemEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetItemHeight($hWnd, $iComponent, $iHeight)
+	Return _SendMessage($hWnd, $CB_SETITEMHEIGHT, $iComponent, $iHeight)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetItemHeight
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetItemImage($hWnd, $iIndex, $iImage)
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	DllStructSetData($tItem, "Mask", $CBEIF_IMAGE)
+	DllStructSetData($tItem, "Item", $iIndex)
+	DllStructSetData($tItem, "Image", $iImage)
+	Return _GUICtrlComboBoxEx_SetItemEx($hWnd, $tItem)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetItemImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetItemIndent($hWnd, $iIndex, $iIndent)
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	DllStructSetData($tItem, "Mask", $CBEIF_INDENT)
+	DllStructSetData($tItem, "Item", $iIndex)
+	DllStructSetData($tItem, "Indent", $iIndent)
+	Return _GUICtrlComboBoxEx_SetItemEx($hWnd, $tItem)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetItemIndent
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetItemOverlayImage($hWnd, $iIndex, $iImage)
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	DllStructSetData($tItem, "Mask", $CBEIF_OVERLAY)
+	DllStructSetData($tItem, "Item", $iIndex)
+	DllStructSetData($tItem, "OverlayImage", $iImage)
+	Return _GUICtrlComboBoxEx_SetItemEx($hWnd, $tItem)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetItemOverlayImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetItemParam($hWnd, $iIndex, $iParam)
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	DllStructSetData($tItem, "Mask", $CBEIF_LPARAM)
+	DllStructSetData($tItem, "Item", $iIndex)
+	DllStructSetData($tItem, "Param", $iParam)
+	Return _GUICtrlComboBoxEx_SetItemEx($hWnd, $tItem)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetItemParam
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetItemSelectedImage($hWnd, $iIndex, $iImage)
+	Local $tItem = DllStructCreate($tagCOMBOBOXEXITEM)
+	DllStructSetData($tItem, "Mask", $CBEIF_SELECTEDIMAGE)
+	DllStructSetData($tItem, "Item", $iIndex)
+	DllStructSetData($tItem, "SelectedImage", $iImage)
+	Return _GUICtrlComboBoxEx_SetItemEx($hWnd, $tItem)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetItemSelectedImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetMinVisible($hWnd, $iMinimum)
+	Local $hCombo = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return _GUICtrlComboBox_SetMinVisible($hCombo, $iMinimum)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetMinVisible
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetTopIndex($hWnd, $iIndex)
+	Local $hCombo = _GUICtrlComboBoxEx_GetComboControl($hWnd)
+	Return _GUICtrlComboBox_SetTopIndex($hCombo, $iIndex)
+EndFunc   ;==>_GUICtrlComboBoxEx_SetTopIndex
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_SetUnicode($hWnd, $bUnicode = True)
+	Local $iUnicode = _SendMessage($hWnd, $CBEM_SETUNICODEFORMAT, $bUnicode) <> 0
+	Return $iUnicode <> $bUnicode
+EndFunc   ;==>_GUICtrlComboBoxEx_SetUnicode
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlComboBoxEx_ShowDropDown($hWnd, $bShow = False)
+	_GUICtrlComboBox_ShowDropDown($hWnd, $bShow)
+EndFunc   ;==>_GUICtrlComboBoxEx_ShowDropDown

+ 315 - 0
include/GuiDateTimePicker.au3

@@ -0,0 +1,315 @@
+#include-once
+
+#include "DateTimeConstants.au3"
+#include "Memory.au3"
+#include "SendMessage.au3"
+#include "StructureConstants.au3"
+#include "UDFGlobalID.au3"
+#include "WinAPIConv.au3"
+;~ #include "WinAPIGdiInternals.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Date_Time_Picker
+; AutoIt Version : 3.3.14.5
+; Description ...: Functions that assist with date and time picker (DTP) control management.
+;                  A date and time picker (DTP) control provides a simple and intuitive interface through which to exchange date
+;                  and time information with a user.  For example, with a DTP control you can ask the user to enter a date and
+;                  then retrieve his or her selection with ease.
+; Author(s) .....: Paul Campbell (PaulIA)
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hDTLastWnd
+
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__DTPCONSTANT_ClassName = "SysDateTimePick32"
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUICtrlDTP_Create
+; _GUICtrlDTP_Destroy
+; _GUICtrlDTP_GetMCColor
+; _GUICtrlDTP_GetMCFont
+; _GUICtrlDTP_GetMonthCal
+; _GUICtrlDTP_GetRange
+; _GUICtrlDTP_GetRangeEx
+; _GUICtrlDTP_GetSystemTime
+; _GUICtrlDTP_GetSystemTimeEx
+; _GUICtrlDTP_SetFormat
+; _GUICtrlDTP_SetMCColor
+; _GUICtrlDTP_SetMCFont
+; _GUICtrlDTP_SetRange
+; _GUICtrlDTP_SetRangeEx
+; _GUICtrlDTP_SetSystemTime
+; _GUICtrlDTP_SetSystemTimeEx
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost
+; ===============================================================================================================================
+Func _GUICtrlDTP_Create($hWnd, $iX, $iY, $iWidth = 120, $iHeight = 21, $iStyle = 0x00000000, $iExStyle = 0x00000000)
+	$iStyle = BitOR($iStyle, $__UDFGUICONSTANT_WS_CHILD, $__UDFGUICONSTANT_WS_VISIBLE)
+	Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	Return _WinAPI_CreateWindowEx($iExStyle, $__DTPCONSTANT_ClassName, "", $iStyle, $iX, $iY, $iWidth, $iHeight, $hWnd, $nCtrlID)
+EndFunc   ;==>_GUICtrlDTP_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_Destroy(ByRef $hWnd)
+	If Not _WinAPI_IsClassName($hWnd, $__DTPCONSTANT_ClassName) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hDTLastWnd) Then
+			Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
+			Local $hParent = _WinAPI_GetParent($hWnd)
+			$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+			Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
+			If Not $iRet Then
+				; can check for errors here if needed, for debug
+			EndIf
+		Else
+			; Not Allowed to Destroy Other Applications Control(s)
+			Return SetError(1, 1, False)
+		EndIf
+	Else
+		$iDestroyed = GUICtrlDelete($hWnd)
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUICtrlDTP_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_GetMCColor($hWnd, $iIndex)
+	Return _SendMessage($hWnd, $DTM_GETMCCOLOR, $iIndex)
+EndFunc   ;==>_GUICtrlDTP_GetMCColor
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_GetMCFont($hWnd)
+	Return Ptr(_SendMessage($hWnd, $DTM_GETMCFONT))
+EndFunc   ;==>_GUICtrlDTP_GetMCFont
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_GetMonthCal($hWnd)
+	Return HWnd(_SendMessage($hWnd, $DTM_GETMONTHCAL))
+EndFunc   ;==>_GUICtrlDTP_GetMonthCal
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_GetRange($hWnd)
+	Local $aRange[14]
+
+	Local $tRange = _GUICtrlDTP_GetRangeEx($hWnd)
+	$aRange[0] = DllStructGetData($tRange, "MinValid")
+	$aRange[1] = DllStructGetData($tRange, "MinYear")
+	$aRange[2] = DllStructGetData($tRange, "MinMonth")
+	$aRange[3] = DllStructGetData($tRange, "MinDay")
+	$aRange[4] = DllStructGetData($tRange, "MinHour")
+	$aRange[5] = DllStructGetData($tRange, "MinMinute")
+	$aRange[6] = DllStructGetData($tRange, "MinSecond")
+	$aRange[7] = DllStructGetData($tRange, "MaxValid")
+	$aRange[8] = DllStructGetData($tRange, "MaxYear")
+	$aRange[9] = DllStructGetData($tRange, "MaxMonth")
+	$aRange[10] = DllStructGetData($tRange, "MaxDay")
+	$aRange[11] = DllStructGetData($tRange, "MaxHour")
+	$aRange[12] = DllStructGetData($tRange, "MaxMinute")
+	$aRange[13] = DllStructGetData($tRange, "MaxSecond")
+	Return $aRange
+EndFunc   ;==>_GUICtrlDTP_GetRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_GetRangeEx($hWnd)
+	Local $tRange = DllStructCreate($tagDTPRANGE)
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hDTLastWnd) Then
+		$iRet = _SendMessage($hWnd, $DTM_GETRANGE, 0, $tRange, 0, "wparam", "struct*")
+	Else
+		Local $iRange = DllStructGetSize($tRange)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iRange, $tMemMap)
+		$iRet = _SendMessage($hWnd, $DTM_GETRANGE, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tRange, $iRange)
+		_MemFree($tMemMap)
+	EndIf
+	DllStructSetData($tRange, "MinValid", BitAND($iRet, $GDTR_MIN) <> 0)
+	DllStructSetData($tRange, "MaxValid", BitAND($iRet, $GDTR_MAX) <> 0)
+	Return $tRange
+EndFunc   ;==>_GUICtrlDTP_GetRangeEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_GetSystemTime($hWnd)
+	Local $aDate[6]
+
+	Local $tDate = _GUICtrlDTP_GetSystemTimeEx($hWnd)
+	$aDate[0] = DllStructGetData($tDate, "Year")
+	$aDate[1] = DllStructGetData($tDate, "Month")
+	$aDate[2] = DllStructGetData($tDate, "Day")
+	$aDate[3] = DllStructGetData($tDate, "Hour")
+	$aDate[4] = DllStructGetData($tDate, "Minute")
+	$aDate[5] = DllStructGetData($tDate, "Second")
+	Return $aDate
+EndFunc   ;==>_GUICtrlDTP_GetSystemTime
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_GetSystemTimeEx($hWnd)
+	Local $tDate = DllStructCreate($tagSYSTEMTIME)
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hDTLastWnd) Then
+		$iRet = _SendMessage($hWnd, $DTM_GETSYSTEMTIME, 0, $tDate, 0, "wparam", "struct*")
+	Else
+		Local $iDate = DllStructGetSize($tDate)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iDate, $tMemMap)
+		$iRet = _SendMessage($hWnd, $DTM_GETSYSTEMTIME, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tDate, $iDate)
+		_MemFree($tMemMap)
+	EndIf
+	Return SetError($iRet, $iRet, $tDate)
+EndFunc   ;==>_GUICtrlDTP_GetSystemTimeEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_SetFormat($hWnd, $sFormat)
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hDTLastWnd) Then
+		$iRet = _SendMessage($hWnd, $DTM_SETFORMATW, 0, $sFormat, 0, "wparam", "wstr")
+	Else
+		Local $iMemory = 2 * (StringLen($sFormat) + 1)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iMemory, $tMemMap)
+		_MemWrite($tMemMap, $sFormat, $pMemory, $iMemory, "wstr")
+		$iRet = _SendMessage($hWnd, $DTM_SETFORMATW, 0, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlDTP_SetFormat
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_SetMCColor($hWnd, $iIndex, $iColor)
+	Return _SendMessage($hWnd, $DTM_SETMCCOLOR, $iIndex, $iColor)
+EndFunc   ;==>_GUICtrlDTP_SetMCColor
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_SetMCFont($hWnd, $hFont, $bRedraw = True)
+	_SendMessage($hWnd, $DTM_SETMCFONT, $hFont, $bRedraw, 0, "handle")
+EndFunc   ;==>_GUICtrlDTP_SetMCFont
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_SetRange($hWnd, ByRef $aRange)
+	Local $tRange = DllStructCreate($tagDTPRANGE)
+	DllStructSetData($tRange, "MinValid", $aRange[0])
+	DllStructSetData($tRange, "MinYear", $aRange[1])
+	DllStructSetData($tRange, "MinMonth", $aRange[2])
+	DllStructSetData($tRange, "MinDay", $aRange[3])
+	DllStructSetData($tRange, "MinHour", $aRange[4])
+	DllStructSetData($tRange, "MinMinute", $aRange[5])
+	DllStructSetData($tRange, "MinSecond", $aRange[6])
+	DllStructSetData($tRange, "MaxValid", $aRange[7])
+	DllStructSetData($tRange, "MaxYear", $aRange[8])
+	DllStructSetData($tRange, "MaxMonth", $aRange[9])
+	DllStructSetData($tRange, "MaxDay", $aRange[10])
+	DllStructSetData($tRange, "MaxHour", $aRange[11])
+	DllStructSetData($tRange, "MaxMinute", $aRange[12])
+	DllStructSetData($tRange, "MaxSecond", $aRange[13])
+	Return _GUICtrlDTP_SetRangeEx($hWnd, $tRange)
+EndFunc   ;==>_GUICtrlDTP_SetRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_SetRangeEx($hWnd, ByRef $tRange)
+	Local $iFlags = 0, $iRet
+	If DllStructGetData($tRange, "MinValid") Then $iFlags = BitOR($iFlags, $GDTR_MIN)
+	If DllStructGetData($tRange, "MaxValid") Then $iFlags = BitOR($iFlags, $GDTR_MAX)
+	If _WinAPI_InProcess($hWnd, $__g_hDTLastWnd) Then
+		$iRet = _SendMessage($hWnd, $DTM_SETRANGE, $iFlags, $tRange, 0, "wparam", "struct*")
+	Else
+		Local $iRange = DllStructGetSize($tRange)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iRange, $tMemMap)
+		_MemWrite($tMemMap, $tRange)
+		$iRet = _SendMessage($hWnd, $DTM_SETRANGE, $iFlags, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlDTP_SetRangeEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_SetSystemTime($hWnd, ByRef $aDate)
+	Local $tDate = DllStructCreate($tagSYSTEMTIME)
+	DllStructSetData($tDate, "Year", $aDate[1])
+	DllStructSetData($tDate, "Month", $aDate[2])
+	DllStructSetData($tDate, "Day", $aDate[3])
+	DllStructSetData($tDate, "Hour", $aDate[4])
+	DllStructSetData($tDate, "Minute", $aDate[5])
+	DllStructSetData($tDate, "Second", $aDate[6])
+	Return _GUICtrlDTP_SetSystemTimeEx($hWnd, $tDate, $aDate[0])
+EndFunc   ;==>_GUICtrlDTP_SetSystemTime
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlDTP_SetSystemTimeEx($hWnd, ByRef $tDate, $bFlag = False)
+	Local $iFlag, $iRet
+
+	If $bFlag Then
+		$iFlag = $GDT_NONE
+	Else
+		$iFlag = $GDT_VALID
+	EndIf
+	If _WinAPI_InProcess($hWnd, $__g_hDTLastWnd) Then
+		$iRet = _SendMessage($hWnd, $DTM_SETSYSTEMTIME, $iFlag, $tDate, 0, "wparam", "struct*")
+	Else
+		Local $iDate = DllStructGetSize($tDate)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iDate, $tMemMap)
+		_MemWrite($tMemMap, $tDate)
+		$iRet = _SendMessage($hWnd, $DTM_SETSYSTEMTIME, $iFlag, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlDTP_SetSystemTimeEx

ファイルの差分が大きいため隠しています
+ 1059 - 0
include/GuiEdit_En.au3


+ 867 - 0
include/GuiHeader.au3

@@ -0,0 +1,867 @@
+#include-once
+
+#include "HeaderConstants.au3"
+#include "Memory.au3"
+#include "SendMessage.au3"
+#include "StructureConstants.au3"
+#include "UDFGlobalID.au3"
+#include "WinAPIConv.au3"
+#include "WinAPIHObj.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Header
+; AutoIt Version : 3.3.14.5
+; Description ...: Functions that assist with Header control management.
+;                  A header control is a window that is usually positioned above columns of text or numbers.  It contains a title
+;                  for each column, and it can be divided into parts.
+; Author(s) .....: Paul Campbell (PaulIA)
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hHDRLastWnd
+
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__HEADERCONSTANT_ClassName = "SysHeader32"
+Global Const $__HEADERCONSTANT_DEFAULT_GUI_FONT = 17
+Global Const $__HEADERCONSTANT_SWP_SHOWWINDOW = 0x0040
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUICtrlHeader_AddItem
+; _GUICtrlHeader_ClearFilter
+; _GUICtrlHeader_ClearFilterAll
+; _GUICtrlHeader_Create
+; _GUICtrlHeader_CreateDragImage
+; _GUICtrlHeader_DeleteItem
+; _GUICtrlHeader_Destroy
+; _GUICtrlHeader_EditFilter
+; _GUICtrlHeader_GetBitmapMargin
+; _GUICtrlHeader_GetImageList
+; _GUICtrlHeader_GetItem
+; _GUICtrlHeader_GetItemAlign
+; _GUICtrlHeader_GetItemBitmap
+; _GUICtrlHeader_GetItemCount
+; _GUICtrlHeader_GetItemDisplay
+; _GUICtrlHeader_GetItemFlags
+; _GUICtrlHeader_GetItemFormat
+; _GUICtrlHeader_GetItemImage
+; _GUICtrlHeader_GetItemOrder
+; _GUICtrlHeader_GetItemParam
+; _GUICtrlHeader_GetItemRect
+; _GUICtrlHeader_GetItemRectEx
+; _GUICtrlHeader_GetItemText
+; _GUICtrlHeader_GetItemWidth
+; _GUICtrlHeader_GetOrderArray
+; _GUICtrlHeader_GetUnicodeFormat
+; _GUICtrlHeader_HitTest
+; _GUICtrlHeader_InsertItem
+; _GUICtrlHeader_Layout
+; _GUICtrlHeader_OrderToIndex
+; _GUICtrlHeader_SetBitmapMargin
+; _GUICtrlHeader_SetFilterChangeTimeout
+; _GUICtrlHeader_SetHotDivider
+; _GUICtrlHeader_SetImageList
+; _GUICtrlHeader_SetItem
+; _GUICtrlHeader_SetItemAlign
+; _GUICtrlHeader_SetItemBitmap
+; _GUICtrlHeader_SetItemDisplay
+; _GUICtrlHeader_SetItemFlags
+; _GUICtrlHeader_SetItemFormat
+; _GUICtrlHeader_SetItemImage
+; _GUICtrlHeader_SetItemOrder
+; _GUICtrlHeader_SetItemParam
+; _GUICtrlHeader_SetItemText
+; _GUICtrlHeader_SetItemWidth
+; _GUICtrlHeader_SetOrderArray
+; _GUICtrlHeader_SetUnicodeFormat
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; $tagHDHITTESTINFO
+; $tagHDLAYOUT
+; $tagHDTEXTFILTER
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: $tagHDHITTESTINFO
+; Description ...: Contains information about a hit test
+; Fields ........: X     - Horizontal postion to be hit test, in client coordinates
+;                  Y     - Vertical position to be hit test, in client coordinates
+;                  Flags - Information about the results of a hit test
+;                  Item  - If the hit test is successful, contains the index of the item at the hit test point
+; Author ........: Paul Campbell (PaulIA)
+; Remarks .......: This structure is used with the $HDM_HITTEST message.
+; ===============================================================================================================================
+Global Const $tagHDHITTESTINFO = $tagPOINT & ";uint Flags;int Item"
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: $tagHDLAYOUT
+; Description ...: Contains information used to set the size and position of the control
+; Fields ........: Rect      - Pointer to a RECT structure that contains the rectangle that the header control will occupy
+;                  WindowPos - Pointer to a WINDOWPOS structure that receives information about the size/position of the control
+; Author ........: Paul Campbell (PaulIA)
+; Remarks .......: This structure is used with the $HDM_LAYOUT message
+; ===============================================================================================================================
+Global Const $tagHDLAYOUT = "ptr Rect;ptr WindowPos"
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: $tagHDTEXTFILTER
+; Description ...: Contains information about header control text filters
+; Fields ........: Text    - Pointer to the buffer containing the filter
+;                  TextMax - The maximum size, in characters, for an edit control buffer
+; Author ........: Paul Campbell (PaulIA)
+; Remarks .......:
+; ===============================================================================================================================
+Global Const $tagHDTEXTFILTER = "ptr Text;int TextMax"
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlHeader_AddItem($hWnd, $sText, $iWidth = 50, $iAlign = 0, $iImage = -1, $bOnRight = False)
+	Return _GUICtrlHeader_InsertItem($hWnd, _GUICtrlHeader_GetItemCount($hWnd), $sText, $iWidth, $iAlign, $iImage, $bOnRight)
+EndFunc   ;==>_GUICtrlHeader_AddItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_ClearFilter($hWnd, $iIndex)
+	Return _SendMessage($hWnd, $HDM_CLEARFILTER, $iIndex) <> 0
+EndFunc   ;==>_GUICtrlHeader_ClearFilter
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_ClearFilterAll($hWnd)
+	Return _SendMessage($hWnd, $HDM_CLEARFILTER, -1) <> 0
+EndFunc   ;==>_GUICtrlHeader_ClearFilterAll
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost
+; ===============================================================================================================================
+Func _GUICtrlHeader_Create($hWnd, $iStyle = 0x00000046)
+	$iStyle = BitOR($iStyle, $__UDFGUICONSTANT_WS_CHILD, $__UDFGUICONSTANT_WS_VISIBLE)
+
+	Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	Local $hHeader = _WinAPI_CreateWindowEx(0, $__HEADERCONSTANT_ClassName, "", $iStyle, 0, 0, 0, 0, $hWnd, $nCtrlID)
+	Local $tRECT = _WinAPI_GetClientRect($hWnd)
+	Local $tWindowPos = _GUICtrlHeader_Layout($hHeader, $tRECT)
+	Local $iFlags = BitOR(DllStructGetData($tWindowPos, "Flags"), $__HEADERCONSTANT_SWP_SHOWWINDOW)
+	_WinAPI_SetWindowPos($hHeader, DllStructGetData($tWindowPos, "InsertAfter"), _
+			DllStructGetData($tWindowPos, "X"), DllStructGetData($tWindowPos, "Y"), _
+			DllStructGetData($tWindowPos, "CX"), DllStructGetData($tWindowPos, "CY"), $iFlags)
+	_WinAPI_SetFont($hHeader, _WinAPI_GetStockObject($__HEADERCONSTANT_DEFAULT_GUI_FONT))
+	Return $hHeader
+EndFunc   ;==>_GUICtrlHeader_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_CreateDragImage($hWnd, $iIndex)
+	Return Ptr(_SendMessage($hWnd, $HDM_CREATEDRAGIMAGE, $iIndex))
+EndFunc   ;==>_GUICtrlHeader_CreateDragImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_DeleteItem($hWnd, $iIndex)
+	Return _SendMessage($hWnd, $HDM_DELETEITEM, $iIndex) <> 0
+EndFunc   ;==>_GUICtrlHeader_DeleteItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlHeader_Destroy(ByRef $hWnd)
+	If Not _WinAPI_IsClassName($hWnd, $__HEADERCONSTANT_ClassName) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
+			Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
+			Local $hParent = _WinAPI_GetParent($hWnd)
+			$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+			Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
+			If Not $iRet Then
+				; can check for errors here if needed, for debug
+			EndIf
+		Else
+			; Not Allowed to Destroy Other Applications Control(s)
+			Return SetError(1, 1, False)
+		EndIf
+	Else
+		$iDestroyed = GUICtrlDelete($hWnd)
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUICtrlHeader_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_EditFilter($hWnd, $iIndex, $bDiscard = True)
+	Return _SendMessage($hWnd, $HDM_EDITFILTER, $iIndex, $bDiscard) <> 0
+EndFunc   ;==>_GUICtrlHeader_EditFilter
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetBitmapMargin($hWnd)
+	Return _SendMessage($hWnd, $HDM_GETBITMAPMARGIN)
+EndFunc   ;==>_GUICtrlHeader_GetBitmapMargin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetImageList($hWnd)
+	Return Ptr(_SendMessage($hWnd, $HDM_GETIMAGELIST))
+EndFunc   ;==>_GUICtrlHeader_GetImageList
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItem($hWnd, $iIndex, ByRef $tItem)
+	Local $bUnicode = _GUICtrlHeader_GetUnicodeFormat($hWnd)
+
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
+		$iRet = _SendMessage($hWnd, $HDM_GETITEMW, $iIndex, $tItem, 0, "wparam", "struct*")
+	Else
+		Local $iItem = DllStructGetSize($tItem)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iItem, $tMemMap)
+		_MemWrite($tMemMap, $tItem)
+		If $bUnicode Then
+			$iRet = _SendMessage($hWnd, $HDM_GETITEMW, $iIndex, $pMemory, 0, "wparam", "ptr")
+		Else
+			$iRet = _SendMessage($hWnd, $HDM_GETITEMA, $iIndex, $pMemory, 0, "wparam", "ptr")
+		EndIf
+		_MemRead($tMemMap, $pMemory, $tItem, $iItem)
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlHeader_GetItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemAlign($hWnd, $iIndex)
+	Switch BitAND(_GUICtrlHeader_GetItemFormat($hWnd, $iIndex), $HDF_JUSTIFYMASK)
+		Case $HDF_LEFT
+			Return 0
+		Case $HDF_RIGHT
+			Return 1
+		Case $HDF_CENTER
+			Return 2
+		Case Else
+			Return -1
+	EndSwitch
+EndFunc   ;==>_GUICtrlHeader_GetItemAlign
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemBitmap($hWnd, $iIndex)
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_BITMAP)
+	_GUICtrlHeader_GetItem($hWnd, $iIndex, $tItem)
+	Return DllStructGetData($tItem, "hBmp")
+EndFunc   ;==>_GUICtrlHeader_GetItemBitmap
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemCount($hWnd)
+	Return _SendMessage($hWnd, $HDM_GETITEMCOUNT)
+EndFunc   ;==>_GUICtrlHeader_GetItemCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemDisplay($hWnd, $iIndex)
+	Local $iRet = 0
+
+	Local $iFormat = _GUICtrlHeader_GetItemFormat($hWnd, $iIndex)
+	If BitAND($iFormat, $HDF_BITMAP) <> 0 Then $iRet = BitOR($iRet, 1)
+	If BitAND($iFormat, $HDF_BITMAP_ON_RIGHT) <> 0 Then $iRet = BitOR($iRet, 2)
+	If BitAND($iFormat, $HDF_OWNERDRAW) <> 0 Then $iRet = BitOR($iRet, 4)
+	If BitAND($iFormat, $HDF_STRING) <> 0 Then $iRet = BitOR($iRet, 8)
+	Return $iRet
+EndFunc   ;==>_GUICtrlHeader_GetItemDisplay
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemFlags($hWnd, $iIndex)
+	Local $iRet = 0
+
+	Local $iFormat = _GUICtrlHeader_GetItemFormat($hWnd, $iIndex)
+	If BitAND($iFormat, $HDF_IMAGE) <> 0 Then $iRet = BitOR($iRet, 1)
+	If BitAND($iFormat, $HDF_RTLREADING) <> 0 Then $iRet = BitOR($iRet, 2)
+	If BitAND($iFormat, $HDF_SORTDOWN) <> 0 Then $iRet = BitOR($iRet, 4)
+	If BitAND($iFormat, $HDF_SORTUP) <> 0 Then $iRet = BitOR($iRet, 8)
+	Return $iRet
+EndFunc   ;==>_GUICtrlHeader_GetItemFlags
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemFormat($hWnd, $iIndex)
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_FORMAT)
+	_GUICtrlHeader_GetItem($hWnd, $iIndex, $tItem)
+	Return DllStructGetData($tItem, "Fmt")
+EndFunc   ;==>_GUICtrlHeader_GetItemFormat
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemImage($hWnd, $iIndex)
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_IMAGE)
+	_GUICtrlHeader_GetItem($hWnd, $iIndex, $tItem)
+	Return DllStructGetData($tItem, "Image")
+EndFunc   ;==>_GUICtrlHeader_GetItemImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemOrder($hWnd, $iIndex)
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_ORDER)
+	_GUICtrlHeader_GetItem($hWnd, $iIndex, $tItem)
+	Return DllStructGetData($tItem, "Order")
+EndFunc   ;==>_GUICtrlHeader_GetItemOrder
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemParam($hWnd, $iIndex)
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_PARAM)
+	_GUICtrlHeader_GetItem($hWnd, $iIndex, $tItem)
+	Return DllStructGetData($tItem, "Param")
+EndFunc   ;==>_GUICtrlHeader_GetItemParam
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemRect($hWnd, $iIndex)
+	Local $aRect[4]
+
+	Local $tRECT = _GUICtrlHeader_GetItemRectEx($hWnd, $iIndex)
+	$aRect[0] = DllStructGetData($tRECT, "Left")
+	$aRect[1] = DllStructGetData($tRECT, "Top")
+	$aRect[2] = DllStructGetData($tRECT, "Right")
+	$aRect[3] = DllStructGetData($tRECT, "Bottom")
+	Return $aRect
+EndFunc   ;==>_GUICtrlHeader_GetItemRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemRectEx($hWnd, $iIndex)
+	Local $tRECT = DllStructCreate($tagRECT)
+	If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
+		_SendMessage($hWnd, $HDM_GETITEMRECT, $iIndex, $tRECT, 0, "wparam", "struct*")
+	Else
+		Local $iRect = DllStructGetSize($tRECT)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iRect, $tMemMap)
+		_MemWrite($tMemMap, $tRECT)
+		_SendMessage($hWnd, $HDM_GETITEMRECT, $iIndex, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tRECT, $iRect)
+		_MemFree($tMemMap)
+	EndIf
+	Return $tRECT
+EndFunc   ;==>_GUICtrlHeader_GetItemRectEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemText($hWnd, $iIndex)
+	Local $bUnicode = _GUICtrlHeader_GetUnicodeFormat($hWnd)
+
+	Local $tBuffer
+	If $bUnicode Then
+		$tBuffer = DllStructCreate("wchar Text[4096]")
+	Else
+		$tBuffer = DllStructCreate("char Text[4096]")
+	EndIf
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_TEXT)
+	DllStructSetData($tItem, "TextMax", 4096)
+	If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
+		DllStructSetData($tItem, "Text", DllStructGetPtr($tBuffer))
+		_SendMessage($hWnd, $HDM_GETITEMW, $iIndex, $tItem, 0, "wparam", "struct*")
+	Else
+		Local $iItem = DllStructGetSize($tItem)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iItem + DllStructGetSize($tBuffer), $tMemMap)
+		Local $pText = $pMemory + $iItem
+		DllStructSetData($tItem, "Text", $pText)
+		_MemWrite($tMemMap, $tItem, $pMemory, $iItem)
+		If $bUnicode Then
+			_SendMessage($hWnd, $HDM_GETITEMW, $iIndex, $pMemory, 0, "wparam", "ptr")
+		Else
+			_SendMessage($hWnd, $HDM_GETITEMA, $iIndex, $pMemory, 0, "wparam", "ptr")
+		EndIf
+		_MemRead($tMemMap, $pText, $tBuffer, DllStructGetSize($tBuffer))
+		_MemFree($tMemMap)
+	EndIf
+	Return DllStructGetData($tBuffer, "Text")
+EndFunc   ;==>_GUICtrlHeader_GetItemText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetItemWidth($hWnd, $iIndex)
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_WIDTH)
+	_GUICtrlHeader_GetItem($hWnd, $iIndex, $tItem)
+	Return DllStructGetData($tItem, "XY")
+EndFunc   ;==>_GUICtrlHeader_GetItemWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetOrderArray($hWnd)
+	Local $iItems = _GUICtrlHeader_GetItemCount($hWnd)
+	Local $tBuffer = DllStructCreate("int[" & $iItems & "]")
+	If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
+		_SendMessage($hWnd, $HDM_GETORDERARRAY, $iItems, $tBuffer, 0, "wparam", "struct*")
+	Else
+		Local $iBuffer = DllStructGetSize($tBuffer)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+		_SendMessage($hWnd, $HDM_GETORDERARRAY, $iItems, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tBuffer, $iBuffer)
+		_MemFree($tMemMap)
+	EndIf
+
+	Local $aBuffer[$iItems + 1]
+	$aBuffer[0] = $iItems
+	For $iI = 1 To $iItems
+		$aBuffer[$iI] = DllStructGetData($tBuffer, 1, $iI)
+	Next
+	Return $aBuffer
+EndFunc   ;==>_GUICtrlHeader_GetOrderArray
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_GetUnicodeFormat($hWnd)
+	Return _SendMessage($hWnd, $HDM_GETUNICODEFORMAT) <> 0
+EndFunc   ;==>_GUICtrlHeader_GetUnicodeFormat
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_HitTest($hWnd, $iX, $iY)
+	Local $tTest = DllStructCreate($tagHDHITTESTINFO)
+	DllStructSetData($tTest, "X", $iX)
+	DllStructSetData($tTest, "Y", $iY)
+	Local $aTest[11]
+	If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
+		$aTest[0] = _SendMessage($hWnd, $HDM_HITTEST, 0, $tTest, 0, "wparam", "struct*")
+	Else
+		Local $iTest = DllStructGetSize($tTest)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iTest, $tMemMap)
+		_MemWrite($tMemMap, $tTest)
+		$aTest[0] = _SendMessage($hWnd, $HDM_HITTEST, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tTest, $iTest)
+		_MemFree($tMemMap)
+	EndIf
+	Local $iFlags = DllStructGetData($tTest, "Flags")
+	$aTest[1] = BitAND($iFlags, $HHT_NOWHERE) <> 0
+	$aTest[2] = BitAND($iFlags, $HHT_ONHEADER) <> 0
+	$aTest[3] = BitAND($iFlags, $HHT_ONDIVIDER) <> 0
+	$aTest[4] = BitAND($iFlags, $HHT_ONDIVOPEN) <> 0
+	$aTest[5] = BitAND($iFlags, $HHT_ONFILTER) <> 0
+	$aTest[6] = BitAND($iFlags, $HHT_ONFILTERBUTTON) <> 0
+	$aTest[7] = BitAND($iFlags, $HHT_ABOVE) <> 0
+	$aTest[8] = BitAND($iFlags, $HHT_BELOW) <> 0
+	$aTest[9] = BitAND($iFlags, $HHT_TORIGHT) <> 0
+	$aTest[10] = BitAND($iFlags, $HHT_TOLEFT) <> 0
+	Return $aTest
+EndFunc   ;==>_GUICtrlHeader_HitTest
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_InsertItem($hWnd, $iIndex, $sText, $iWidth = 50, $iAlign = 0, $iImage = -1, $bOnRight = False)
+	Local $aAlign[3] = [$HDF_LEFT, $HDF_RIGHT, $HDF_CENTER]
+	Local $bUnicode = _GUICtrlHeader_GetUnicodeFormat($hWnd)
+
+	Local $pBuffer, $iBuffer
+	If $sText <> -1 Then
+		$iBuffer = StringLen($sText) + 1
+		Local $tBuffer
+		If $bUnicode Then
+			$tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+			$iBuffer *= 2
+		Else
+			$tBuffer = DllStructCreate("char Text[" & $iBuffer & "]")
+		EndIf
+		DllStructSetData($tBuffer, "Text", $sText)
+		$pBuffer = DllStructGetPtr($tBuffer)
+	Else
+		$iBuffer = 0
+		$pBuffer = -1 ; LPSTR_TEXTCALLBACK
+	EndIf
+	Local $tItem = DllStructCreate($tagHDITEM)
+	Local $iFmt = $aAlign[$iAlign]
+	Local $iMask = BitOR($HDI_WIDTH, $HDI_FORMAT)
+	If $sText <> "" Then
+		$iMask = BitOR($iMask, $HDI_TEXT)
+		$iFmt = BitOR($iFmt, $HDF_STRING)
+	EndIf
+	If $iImage <> -1 Then
+		$iMask = BitOR($iMask, $HDI_IMAGE)
+		$iFmt = BitOR($iFmt, $HDF_IMAGE)
+	EndIf
+	If $bOnRight Then $iFmt = BitOR($iFmt, $HDF_BITMAP_ON_RIGHT)
+	DllStructSetData($tItem, "Mask", $iMask)
+	DllStructSetData($tItem, "XY", $iWidth)
+	DllStructSetData($tItem, "Fmt", $iFmt)
+	DllStructSetData($tItem, "Image", $iImage)
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
+		DllStructSetData($tItem, "Text", $pBuffer)
+		$iRet = _SendMessage($hWnd, $HDM_INSERTITEMW, $iIndex, $tItem, 0, "wparam", "struct*")
+	Else
+		Local $iItem = DllStructGetSize($tItem)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iItem + $iBuffer, $tMemMap)
+		If $sText <> -1 Then
+			Local $pText = $pMemory + $iItem
+			DllStructSetData($tItem, "Text", $pText)
+			_MemWrite($tMemMap, $tBuffer, $pText, $iBuffer)
+		Else
+			DllStructSetData($tItem, "Text", -1) ; LPSTR_TEXTCALLBACK
+		EndIf
+		_MemWrite($tMemMap, $tItem, $pMemory, $iItem)
+		If $bUnicode Then
+			$iRet = _SendMessage($hWnd, $HDM_INSERTITEMW, $iIndex, $pMemory, 0, "wparam", "ptr")
+		Else
+			$iRet = _SendMessage($hWnd, $HDM_INSERTITEMA, $iIndex, $pMemory, 0, "wparam", "ptr")
+		EndIf
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet
+EndFunc   ;==>_GUICtrlHeader_InsertItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_Layout($hWnd, ByRef $tRECT)
+	Local $tLayout = DllStructCreate($tagHDLAYOUT)
+	Local $tWindowPos = DllStructCreate($tagWINDOWPOS)
+	If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
+		DllStructSetData($tLayout, "Rect", DllStructGetPtr($tRECT))
+		DllStructSetData($tLayout, "WindowPos", DllStructGetPtr($tWindowPos))
+		_SendMessage($hWnd, $HDM_LAYOUT, 0, $tLayout, 0, "wparam", "struct*")
+	Else
+		Local $iLayout = DllStructGetSize($tLayout)
+		Local $iRect = DllStructGetSize($tRECT)
+		Local $iWindowPos = DllStructGetSize($tWindowPos)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iLayout + $iRect + $iWindowPos, $tMemMap)
+		DllStructSetData($tLayout, "Rect", $pMemory + $iLayout)
+		DllStructSetData($tLayout, "WindowPos", $pMemory + $iLayout + $iRect)
+		_MemWrite($tMemMap, $tLayout, $pMemory, $iLayout)
+		_MemWrite($tMemMap, $tRECT, $pMemory + $iLayout, $iRect)
+		_SendMessage($hWnd, $HDM_LAYOUT, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory + $iLayout + $iRect, $tWindowPos, $iWindowPos)
+		_MemFree($tMemMap)
+	EndIf
+	Return $tWindowPos
+EndFunc   ;==>_GUICtrlHeader_Layout
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_OrderToIndex($hWnd, $iOrder)
+	Return _SendMessage($hWnd, $HDM_ORDERTOINDEX, $iOrder)
+EndFunc   ;==>_GUICtrlHeader_OrderToIndex
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetBitmapMargin($hWnd, $iWidth)
+	Return _SendMessage($hWnd, $HDM_SETBITMAPMARGIN, $iWidth)
+EndFunc   ;==>_GUICtrlHeader_SetBitmapMargin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetFilterChangeTimeout($hWnd, $iTimeOut)
+	Return _SendMessage($hWnd, $HDM_SETFILTERCHANGETIMEOUT, 0, $iTimeOut)
+EndFunc   ;==>_GUICtrlHeader_SetFilterChangeTimeout
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetHotDivider($hWnd, $iFlag, $iInputValue)
+	Return _SendMessage($hWnd, $HDM_SETHOTDIVIDER, $iFlag, $iInputValue)
+EndFunc   ;==>_GUICtrlHeader_SetHotDivider
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetImageList($hWnd, $hImage)
+	Return _SendMessage($hWnd, $HDM_SETIMAGELIST, 0, $hImage, 0, "wparam", "handle", "handle")
+EndFunc   ;==>_GUICtrlHeader_SetImageList
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetItem($hWnd, $iIndex, ByRef $tItem)
+	Local $bUnicode = _GUICtrlHeader_GetUnicodeFormat($hWnd)
+
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
+		$iRet = _SendMessage($hWnd, $HDM_SETITEMW, $iIndex, $tItem, 0, "wparam", "struct*")
+	Else
+		Local $iItem = DllStructGetSize($tItem)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iItem, $tMemMap)
+		_MemWrite($tMemMap, $tItem)
+		If $bUnicode Then
+			$iRet = _SendMessage($hWnd, $HDM_SETITEMW, $iIndex, $pMemory, 0, "wparam", "ptr")
+		Else
+			$iRet = _SendMessage($hWnd, $HDM_SETITEMA, $iIndex, $pMemory, 0, "wparam", "ptr")
+		EndIf
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlHeader_SetItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetItemAlign($hWnd, $iIndex, $iAlign)
+	Local $aAlign[3] = [$HDF_LEFT, $HDF_RIGHT, $HDF_CENTER]
+
+	Local $iFormat = _GUICtrlHeader_GetItemFormat($hWnd, $iIndex)
+	$iFormat = BitAND($iFormat, BitNOT($HDF_JUSTIFYMASK))
+	$iFormat = BitOR($iFormat, $aAlign[$iAlign])
+	Return _GUICtrlHeader_SetItemFormat($hWnd, $iIndex, $iFormat)
+EndFunc   ;==>_GUICtrlHeader_SetItemAlign
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetItemBitmap($hWnd, $iIndex, $hBitmap)
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", BitOR($HDI_FORMAT, $HDI_BITMAP))
+	DllStructSetData($tItem, "Fmt", $HDF_BITMAP)
+	DllStructSetData($tItem, "hBMP", $hBitmap)
+	Return _GUICtrlHeader_SetItem($hWnd, $iIndex, $tItem)
+EndFunc   ;==>_GUICtrlHeader_SetItemBitmap
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetItemDisplay($hWnd, $iIndex, $iDisplay)
+	Local $iFormat = BitAND(_GUICtrlHeader_GetItemFormat($hWnd, $iIndex), Not $HDF_DISPLAYMASK)
+	If BitAND($iDisplay, 1) <> 0 Then $iFormat = BitOR($iFormat, $HDF_BITMAP)
+	If BitAND($iDisplay, 2) <> 0 Then $iFormat = BitOR($iFormat, $HDF_BITMAP_ON_RIGHT)
+	If BitAND($iDisplay, 4) <> 0 Then $iFormat = BitOR($iFormat, $HDF_OWNERDRAW)
+	If BitAND($iDisplay, 8) <> 0 Then $iFormat = BitOR($iFormat, $HDF_STRING)
+	Return _GUICtrlHeader_SetItemFormat($hWnd, $iIndex, $iFormat)
+EndFunc   ;==>_GUICtrlHeader_SetItemDisplay
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetItemFlags($hWnd, $iIndex, $iFlags)
+	Local $iFormat = _GUICtrlHeader_GetItemFormat($hWnd, $iIndex)
+	$iFormat = BitAND($iFormat, BitNOT($HDF_FLAGMASK))
+	If BitAND($iFlags, 1) <> 0 Then $iFormat = BitOR($iFormat, $HDF_IMAGE)
+	If BitAND($iFlags, 2) <> 0 Then $iFormat = BitOR($iFormat, $HDF_RTLREADING)
+	If BitAND($iFlags, 4) <> 0 Then $iFormat = BitOR($iFormat, $HDF_SORTDOWN)
+	If BitAND($iFlags, 8) <> 0 Then $iFormat = BitOR($iFormat, $HDF_SORTUP)
+	Return _GUICtrlHeader_SetItemFormat($hWnd, $iIndex, $iFormat)
+EndFunc   ;==>_GUICtrlHeader_SetItemFlags
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetItemFormat($hWnd, $iIndex, $iFormat)
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_FORMAT)
+	DllStructSetData($tItem, "Fmt", $iFormat)
+	Return _GUICtrlHeader_SetItem($hWnd, $iIndex, $tItem)
+EndFunc   ;==>_GUICtrlHeader_SetItemFormat
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetItemImage($hWnd, $iIndex, $iImage)
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_IMAGE)
+	DllStructSetData($tItem, "Image", $iImage)
+	Return _GUICtrlHeader_SetItem($hWnd, $iIndex, $tItem)
+EndFunc   ;==>_GUICtrlHeader_SetItemImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetItemOrder($hWnd, $iIndex, $iOrder)
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_ORDER)
+	DllStructSetData($tItem, "Order", $iOrder)
+	Return _GUICtrlHeader_SetItem($hWnd, $iIndex, $tItem)
+EndFunc   ;==>_GUICtrlHeader_SetItemOrder
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetItemParam($hWnd, $iIndex, $iParam)
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_PARAM)
+	DllStructSetData($tItem, "Param", $iParam)
+	Return _GUICtrlHeader_SetItem($hWnd, $iIndex, $tItem)
+EndFunc   ;==>_GUICtrlHeader_SetItemParam
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetItemText($hWnd, $iIndex, $sText)
+	Local $bUnicode = _GUICtrlHeader_GetUnicodeFormat($hWnd)
+
+	Local $iBuffer, $pBuffer
+	If $sText <> -1 Then
+		$iBuffer = StringLen($sText) + 1
+		Local $tBuffer
+		If $bUnicode Then
+			$tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+			$iBuffer *= 2
+		Else
+			$tBuffer = DllStructCreate("char Text[" & $iBuffer & "]")
+		EndIf
+		DllStructSetData($tBuffer, "Text", $sText)
+		$pBuffer = DllStructGetPtr($tBuffer)
+	Else
+		$iBuffer = 0
+		$pBuffer = -1 ; LPSTR_TEXTCALLBACK
+	EndIf
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_TEXT)
+	DllStructSetData($tItem, "TextMax", $iBuffer)
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
+		DllStructSetData($tItem, "Text", $pBuffer)
+		$iRet = _SendMessage($hWnd, $HDM_SETITEMW, $iIndex, $tItem, 0, "wparam", "struct*")
+	Else
+		Local $iItem = DllStructGetSize($tItem)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iItem + $iBuffer, $tMemMap)
+		If $sText <> -1 Then
+			Local $pText = $pMemory + $iItem
+			DllStructSetData($tItem, "Text", $pText)
+			_MemWrite($tMemMap, $tBuffer, $pText, $iBuffer)
+		Else
+			DllStructSetData($tItem, "Text", -1) ; LPSTR_TEXTCALLBACK
+		EndIf
+		_MemWrite($tMemMap, $tItem, $pMemory, $iItem)
+		If $bUnicode Then
+			$iRet = _SendMessage($hWnd, $HDM_SETITEMW, $iIndex, $pMemory, 0, "wparam", "ptr")
+		Else
+			$iRet = _SendMessage($hWnd, $HDM_SETITEMA, $iIndex, $pMemory, 0, "wparam", "ptr")
+		EndIf
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlHeader_SetItemText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetItemWidth($hWnd, $iIndex, $iWidth)
+	Local $tItem = DllStructCreate($tagHDITEM)
+	DllStructSetData($tItem, "Mask", $HDI_WIDTH)
+	DllStructSetData($tItem, "XY", $iWidth)
+	Return _GUICtrlHeader_SetItem($hWnd, $iIndex, $tItem)
+EndFunc   ;==>_GUICtrlHeader_SetItemWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetOrderArray($hWnd, ByRef $aOrder)
+	Local $tBuffer = DllStructCreate("int[" & $aOrder[0] & "]")
+	For $iI = 1 To $aOrder[0]
+		DllStructSetData($tBuffer, 1, $aOrder[$iI], $iI)
+	Next
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
+		$iRet = _SendMessage($hWnd, $HDM_SETORDERARRAY, $aOrder[0], $tBuffer, 0, "wparam", "struct*")
+	Else
+		Local $iBuffer = DllStructGetSize($tBuffer)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+		_MemWrite($tMemMap, $tBuffer)
+		$iRet = _SendMessage($hWnd, $HDM_SETORDERARRAY, $aOrder[0], $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlHeader_SetOrderArray
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlHeader_SetUnicodeFormat($hWnd, $bUnicode)
+	Return _SendMessage($hWnd, $HDM_SETUNICODEFORMAT, $bUnicode)
+EndFunc   ;==>_GUICtrlHeader_SetUnicodeFormat

+ 252 - 0
include/GuiIPAddress.au3

@@ -0,0 +1,252 @@
+#include-once
+
+#include "IPAddressConstants.au3"
+#include "Memory.au3"
+#include "SendMessage.au3"
+#include "StructureConstants.au3"
+#include "UDFGlobalID.au3"
+#include "WinAPIConv.au3"
+#include "WinAPIGdi.au3"
+#include "WinAPIHObj.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: IPAddress
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with IPAddress control management.
+; Author(s) .....: Gary Frost (gafrost)
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hIPLastWnd
+
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__IPADDRESSCONSTANT_ClassName = "SysIPAddress32"
+Global Const $__IPADDRESSCONSTANT_DEFAULT_GUI_FONT = 17
+Global Const $__IPADDRESSCONSTANT_LOGPIXELSX = 88
+Global Const $__IPADDRESSCONSTANT_PROOF_QUALITY = 2
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUICtrlIpAddress_Create
+; _GUICtrlIpAddress_ClearAddress
+; _GUICtrlIpAddress_Destroy
+; _GUICtrlIpAddress_Get
+; _GUICtrlIpAddress_GetArray
+; _GUICtrlIpAddress_GetEx
+; _GUICtrlIpAddress_IsBlank
+; _GUICtrlIpAddress_Set
+; _GUICtrlIpAddress_SetArray
+; _GUICtrlIpAddress_SetEx
+; _GUICtrlIpAddress_SetFocus
+; _GUICtrlIpAddress_SetFont
+; _GUICtrlIpAddress_SetRange
+; _GUICtrlIpAddress_ShowHide
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_Create($hWnd, $iX, $iY, $iWidth = 125, $iHeight = 25, $iStyles = 0x00000000, $iExstyles = 0x00000000)
+	If Not IsHWnd($hWnd) Then Return SetError(1, 0, 0) ; Invalid Window handle for _GUICtrlIpAddress_Create 1st parameter
+
+	If $iStyles = -1 Then $iStyles = 0x00000000
+	If $iExstyles = -1 Then $iExstyles = 0x00000000
+
+	Local $iStyle = BitOR($__UDFGUICONSTANT_WS_CHILD, $__UDFGUICONSTANT_WS_VISIBLE, $__UDFGUICONSTANT_WS_TABSTOP, $iStyles)
+
+	Local Const $ICC_INTERNET_CLASSES = 0x0800
+	Local $tICCE = DllStructCreate('dword dwSize;dword dwICC')
+	DllStructSetData($tICCE, "dwSize", DllStructGetSize($tICCE))
+	DllStructSetData($tICCE, "dwICC", $ICC_INTERNET_CLASSES)
+	DllCall('comctl32.dll', 'bool', 'InitCommonControlsEx', 'struct*', $tICCE)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	Local $hIPAddress = _WinAPI_CreateWindowEx($iExstyles, $__IPADDRESSCONSTANT_ClassName, "", $iStyle, $iX, $iY, $iWidth, $iHeight, $hWnd, $nCtrlID)
+	_WinAPI_SetFont($hIPAddress, _WinAPI_GetStockObject($__IPADDRESSCONSTANT_DEFAULT_GUI_FONT))
+
+	Return $hIPAddress
+EndFunc   ;==>_GUICtrlIpAddress_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_ClearAddress($hWnd)
+	_SendMessage($hWnd, $IPM_CLEARADDRESS)
+EndFunc   ;==>_GUICtrlIpAddress_ClearAddress
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_Destroy($hWnd)
+	If Not _WinAPI_IsClassName($hWnd, $__IPADDRESSCONSTANT_ClassName) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If _WinAPI_InProcess($hWnd, $__g_hIPLastWnd) Then
+		Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
+		Local $hParent = _WinAPI_GetParent($hWnd)
+		$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+		Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
+		If Not $iRet Then
+			; can check for errors here if needed, for debug
+		EndIf
+	Else
+		; Not Allowed to Delete Other Applications IPAddress Control(s)
+		Return SetError(1, 1, False)
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUICtrlIpAddress_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_Get($hWnd)
+	Local $tIP = _GUICtrlIpAddress_GetEx($hWnd)
+
+	If @error Then Return SetError(2, 2, "")
+	Return StringFormat("%d.%d.%d.%d", DllStructGetData($tIP, "Field1"), _
+			DllStructGetData($tIP, "Field2"), _
+			DllStructGetData($tIP, "Field3"), _
+			DllStructGetData($tIP, "Field4"))
+EndFunc   ;==>_GUICtrlIpAddress_Get
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_GetArray($hWnd)
+	Local $tIP = _GUICtrlIpAddress_GetEx($hWnd)
+	Local $aIP[4]
+	$aIP[0] = DllStructGetData($tIP, "Field1")
+	$aIP[1] = DllStructGetData($tIP, "Field2")
+	$aIP[2] = DllStructGetData($tIP, "Field3")
+	$aIP[3] = DllStructGetData($tIP, "Field4")
+	Return $aIP
+EndFunc   ;==>_GUICtrlIpAddress_GetArray
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_GetEx($hWnd)
+	Local $tIP = DllStructCreate($tagGETIPAddress)
+	If @error Then Return SetError(1, 1, "")
+	If _WinAPI_InProcess($hWnd, $__g_hIPLastWnd) Then
+		_SendMessage($hWnd, $IPM_GETADDRESS, 0, $tIP, 0, "wparam", "struct*")
+	Else
+		Local $iIP = DllStructGetSize($tIP)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iIP, $tMemMap)
+		_SendMessage($hWnd, $IPM_GETADDRESS, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tIP, $iIP)
+		_MemFree($tMemMap)
+	EndIf
+	Return $tIP
+EndFunc   ;==>_GUICtrlIpAddress_GetEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_IsBlank($hWnd)
+	Return _SendMessage($hWnd, $IPM_ISBLANK) <> 0
+EndFunc   ;==>_GUICtrlIpAddress_IsBlank
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_Set($hWnd, $sAddress)
+	Local $aAddress = StringSplit($sAddress, ".")
+	If $aAddress[0] = 4 Then
+		Local $tIP = DllStructCreate($tagGETIPAddress)
+		For $x = 1 To 4
+			DllStructSetData($tIP, "Field" & $x, $aAddress[$x])
+		Next
+		_GUICtrlIpAddress_SetEx($hWnd, $tIP)
+	EndIf
+EndFunc   ;==>_GUICtrlIpAddress_Set
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_SetArray($hWnd, $aAddress)
+	If UBound($aAddress) = 4 Then
+		Local $tIP = DllStructCreate($tagGETIPAddress)
+		For $x = 0 To 3
+			DllStructSetData($tIP, "Field" & $x + 1, $aAddress[$x])
+		Next
+		_GUICtrlIpAddress_SetEx($hWnd, $tIP)
+	EndIf
+EndFunc   ;==>_GUICtrlIpAddress_SetArray
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_SetEx($hWnd, $tIP)
+	_SendMessage($hWnd, $IPM_SETADDRESS, 0, _
+			_WinAPI_MakeLong(BitOR(DllStructGetData($tIP, "Field4"), 0x100 * DllStructGetData($tIP, "Field3")), _
+			BitOR(DllStructGetData($tIP, "Field2"), 0x100 * DllStructGetData($tIP, "Field1"))))
+EndFunc   ;==>_GUICtrlIpAddress_SetEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_SetFocus($hWnd, $iIndex)
+	_SendMessage($hWnd, $IPM_SETFOCUS, $iIndex)
+EndFunc   ;==>_GUICtrlIpAddress_SetFocus
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_SetFont($hWnd, $sFaceName = "Arial", $iFontSize = 12, $iFontWeight = 400, $bFontItalic = False)
+	Local $hDC = _WinAPI_GetDC(0)
+	Local $iHeight = Round(($iFontSize * _WinAPI_GetDeviceCaps($hDC, $__IPADDRESSCONSTANT_LOGPIXELSX)) / 72, 0)
+	_WinAPI_ReleaseDC(0, $hDC)
+
+	Local $tFont = DllStructCreate($tagLOGFONT)
+	DllStructSetData($tFont, "Height", $iHeight)
+	DllStructSetData($tFont, "Weight", $iFontWeight)
+	DllStructSetData($tFont, "Italic", $bFontItalic)
+	DllStructSetData($tFont, "Underline", False) ; font underline
+	DllStructSetData($tFont, "Strikeout", False) ; font strikethru
+	DllStructSetData($tFont, "Quality", $__IPADDRESSCONSTANT_PROOF_QUALITY)
+	DllStructSetData($tFont, "FaceName", $sFaceName)
+
+	Local $hFont = _WinAPI_CreateFontIndirect($tFont)
+	_WinAPI_SetFont($hWnd, $hFont)
+EndFunc   ;==>_GUICtrlIpAddress_SetFont
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_SetRange($hWnd, $iIndex, $iLowRange = 0, $iHighRange = 255)
+	If ($iLowRange < 0 Or $iLowRange > $iHighRange) Or $iHighRange > 255 Or ($iIndex < 0 Or $iIndex > 3) Then Return SetError(-1, -1, False)
+
+	Return _SendMessage($hWnd, $IPM_SETRANGE, $iIndex, BitOR($iLowRange, 0x100 * $iHighRange)) <> 0
+EndFunc   ;==>_GUICtrlIpAddress_SetRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlIpAddress_ShowHide($hWnd, $iState)
+	If $iState <> @SW_HIDE And $iState <> @SW_SHOW Then Return SetError(1, 1, 0)
+	Return _WinAPI_ShowWindow($hWnd, $iState) <> 0
+EndFunc   ;==>_GUICtrlIpAddress_ShowHide

+ 549 - 0
include/GuiImageList.au3

@@ -0,0 +1,549 @@
+#include-once
+
+#include "ColorConstants.au3"
+#include "ImageListConstants.au3"
+#include "StructureConstants.au3"
+#include "WinAPIConstants.au3"
+#include "WinAPIConv.au3"
+#include "WinAPIError.au3"
+;~ #include "WinAPIGdi.au3"
+#include "WinAPIIcons.au3"
+#include "WinAPIRes.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: ImageList
+; AutoIt Version : 3.3.14.5
+; Description ...: Functions that assist with ImageList control management.
+;                  An image list is a collection of images of the same size, each of which can be referred to by its index. Image
+;                  lists are used to efficiently manage large sets of icons or bitmaps. All images in an image list are contained
+;                  in a single, wide bitmap in screen device format.  An image list can also include  a  monochrome  bitmap  that
+;                  contains masks used to draw images transparently (icon style).
+; Author(s)......: Paul Campbell (PaulIA)
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__IMAGELISTCONSTANT_IMAGE_BITMAP = 0
+; ===============================================================================================================================
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Not documented at this time
+;
+; _GUIImageList_DragShowNolock
+; _GUIImageList_Merge
+; _GUIImageList_Replace
+; _GUIImageList_SetDragCursorImage
+; _GUIImageList_SetOverlayImage
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUIImageList_Add
+; _GUIImageList_AddMasked
+; _GUIImageList_AddBitmap
+; _GUIImageList_AddIcon
+; _GUIImageList_BeginDrag
+; _GUIImageList_Copy
+; _GUIImageList_Create
+; _GUIImageList_Destroy
+; _GUIImageList_DestroyIcon
+; _GUIImageList_DragEnter
+; _GUIImageList_DragLeave
+; _GUIImageList_DragMove
+; _GUIImageList_Draw
+; _GUIImageList_DrawEx
+; _GUIImageList_Duplicate
+; _GUIImageList_EndDrag
+; _GUIImageList_GetBkColor
+; _GUIImageList_GetIcon
+; _GUIImageList_GetIconHeight
+; _GUIImageList_GetIconSize
+; _GUIImageList_GetIconSizeEx
+; _GUIImageList_GetIconWidth
+; _GUIImageList_GetImageCount
+; _GUIImageList_GetImageInfoEx
+; _GUIImageList_Remove
+; _GUIImageList_ReplaceIcon
+; _GUIImageList_SetBkColor
+; _GUIImageList_SetIconSize
+; _GUIImageList_SetImageCount
+; _GUIImageList_Swap
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_Add($hWnd, $hImage, $hMask = 0)
+	Local $aResult = DllCall("comctl32.dll", "int", "ImageList_Add", "handle", $hWnd, "handle", $hImage, "handle", $hMask)
+	If @error Then Return SetError(@error, @extended, -1)
+	Return $aResult[0]
+EndFunc   ;==>_GUIImageList_Add
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_AddMasked($hWnd, $hImage, $iMask = 0)
+	Local $aResult = DllCall("comctl32.dll", "int", "ImageList_AddMasked", "handle", $hWnd, "handle", $hImage, "dword", $iMask)
+	If @error Then Return SetError(@error, @extended, -1)
+	Return $aResult[0]
+EndFunc   ;==>_GUIImageList_AddMasked
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_AddBitmap($hWnd, $sImage, $sMask = "")
+	Local $aSize = _GUIImageList_GetIconSize($hWnd)
+	Local $hImage = _WinAPI_LoadImage(0, $sImage, $__IMAGELISTCONSTANT_IMAGE_BITMAP, $aSize[0], $aSize[1], $LR_LOADFROMFILE)
+	If $hImage = 0 Then Return SetError(_WinAPI_GetLastError(), 1, -1)
+	Local $hMask = 0
+	If $sMask <> "" Then
+		$hMask = _WinAPI_LoadImage(0, $sMask, $__IMAGELISTCONSTANT_IMAGE_BITMAP, $aSize[0], $aSize[1], $LR_LOADFROMFILE)
+		If $hMask = 0 Then Return SetError(_WinAPI_GetLastError(), 2, -1)
+	EndIf
+
+	Local $iRet = _GUIImageList_Add($hWnd, $hImage, $hMask)
+	_WinAPI_DeleteObject($hImage)
+	If $hMask <> 0 Then _WinAPI_DeleteObject($hMask)
+	Return $iRet
+EndFunc   ;==>_GUIImageList_AddBitmap
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_AddIcon($hWnd, $sFilePath, $iIndex = 0, $bLarge = False)
+	Local $iRet, $tIcon = DllStructCreate("handle Handle")
+	If $bLarge Then
+		$iRet = _WinAPI_ExtractIconEx($sFilePath, $iIndex, $tIcon, 0, 1)
+	Else
+		$iRet = _WinAPI_ExtractIconEx($sFilePath, $iIndex, 0, $tIcon, 1)
+	EndIf
+	If $iRet <= 0 Then Return SetError(-1, $iRet, -1)
+
+	Local $hIcon = DllStructGetData($tIcon, "Handle")
+	$iRet = _GUIImageList_ReplaceIcon($hWnd, -1, $hIcon)
+	_WinAPI_DestroyIcon($hIcon)
+	If $iRet = -1 Then Return SetError(-2, $iRet, -1)
+	Return $iRet
+EndFunc   ;==>_GUIImageList_AddIcon
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_BeginDrag($hWnd, $iTrack, $iXHotSpot, $iYHotSpot)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_BeginDrag", "handle", $hWnd, "int", $iTrack, "int", $iXHotSpot, "int", $iYHotSpot)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_BeginDrag
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_Copy($hWnd, $iSource, $iDestination)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_Copy", "handle", $hWnd, "int", $iDestination, "handle", $hWnd, "int", $iSource, "uint", $ILCF_MOVE)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_Copy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_Create($iCX = 16, $iCY = 16, $iColor = 4, $iOptions = 0, $iInitial = 4, $iGrow = 4)
+	Local Const $aColor[7] = [$ILC_COLOR, $ILC_COLOR4, $ILC_COLOR8, $ILC_COLOR16, $ILC_COLOR24, $ILC_COLOR32, $ILC_COLORDDB]
+	Local $iFlags = 0
+
+	If BitAND($iOptions, 1) <> 0 Then $iFlags = BitOR($iFlags, $ILC_MASK)
+	If BitAND($iOptions, 2) <> 0 Then $iFlags = BitOR($iFlags, $ILC_MIRROR)
+	If BitAND($iOptions, 4) <> 0 Then $iFlags = BitOR($iFlags, $ILC_PERITEMMIRROR)
+	$iFlags = BitOR($iFlags, $aColor[$iColor])
+	Local $aResult = DllCall("comctl32.dll", "handle", "ImageList_Create", "int", $iCX, "int", $iCY, "uint", $iFlags, "int", $iInitial, "int", $iGrow)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_GUIImageList_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_Destroy($hWnd)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_Destroy", "handle", $hWnd)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_DestroyIcon($hIcon)
+	Return _WinAPI_DestroyIcon($hIcon)
+EndFunc   ;==>_GUIImageList_DestroyIcon
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_DragEnter($hWnd, $iX, $iY)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_DragEnter", "hwnd", $hWnd, "int", $iX, "int", $iY)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_DragEnter
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_DragLeave($hWnd)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_DragLeave", "hwnd", $hWnd)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_DragLeave
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_DragMove($iX, $iY)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_DragMove", "int", $iX, "int", $iY)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_DragMove
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Name...........: _GUIImageList_DragShowNolock
+; Description ...: Shows or hides the image being dragged
+; Syntax.........: _GUIImageList_DragShowNolock ( $bShow )
+; Parameters ....: $bShow       - Show or hide the image being dragged
+;                  | True       - Show
+;                  |False       - Hide
+; Return values .: Success      - True
+;                  Failure      - False
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; Remarks .......:
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func _GUIImageList_DragShowNolock($bShow)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_DragShowNolock", "bool", $bShow)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_DragShowNolock
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_Draw($hWnd, $iIndex, $hDC, $iX, $iY, $iStyle = 0)
+	Local $iFlags = 0
+
+	If BitAND($iStyle, 1) <> 0 Then $iFlags = BitOR($iFlags, $ILD_TRANSPARENT)
+	If BitAND($iStyle, 2) <> 0 Then $iFlags = BitOR($iFlags, $ILD_BLEND25)
+	If BitAND($iStyle, 4) <> 0 Then $iFlags = BitOR($iFlags, $ILD_BLEND50)
+	If BitAND($iStyle, 8) <> 0 Then $iFlags = BitOR($iFlags, $ILD_MASK)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_Draw", "handle", $hWnd, "int", $iIndex, "handle", $hDC, "int", $iX, "int", $iY, "uint", $iFlags)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_Draw
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_DrawEx($hWnd, $iIndex, $hDC, $iX, $iY, $iDX = 0, $iDY = 0, $iRGBBk = 0xFFFFFFFF, $iRGBFg = 0xFFFFFFFF, $iStyle = 0)
+	If $iDX = -1 Then $iDX = 0
+	If $iDY = -1 Then $iDY = 0
+	If $iRGBBk = -1 Then $iRGBBk = 0xFFFFFFFF
+	If $iRGBFg = -1 Then $iRGBFg = 0xFFFFFFFF
+	Local $iFlags = 0
+	If BitAND($iStyle, 1) <> 0 Then $iFlags = BitOR($iFlags, $ILD_TRANSPARENT)
+	If BitAND($iStyle, 2) <> 0 Then $iFlags = BitOR($iFlags, $ILD_BLEND25)
+	If BitAND($iStyle, 4) <> 0 Then $iFlags = BitOR($iFlags, $ILD_BLEND50)
+	If BitAND($iStyle, 8) <> 0 Then $iFlags = BitOR($iFlags, $ILD_MASK)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_DrawEx", "handle", $hWnd, "int", $iIndex, "handle", $hDC, "int", $iX, "int", $iY, _
+			"int", $iDX, "int", $iDY, "dword", $iRGBBk, "dword", $iRGBFg, "uint", $iFlags)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_DrawEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_Duplicate($hWnd)
+	Local $aResult = DllCall("comctl32.dll", "handle", "ImageList_Duplicate", "handle", $hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_GUIImageList_Duplicate
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_EndDrag()
+	DllCall("comctl32.dll", "none", "ImageList_EndDrag")
+	If @error Then Return SetError(@error, @extended)
+EndFunc   ;==>_GUIImageList_EndDrag
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_GetBkColor($hWnd)
+	Local $aResult = DllCall("comctl32.dll", "dword", "ImageList_GetBkColor", "handle", $hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_GUIImageList_GetBkColor
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_GetIcon($hWnd, $iIndex, $iStyle = 0)
+	Local $iFlags = 0
+
+	If BitAND($iStyle, 1) <> 0 Then $iFlags = BitOR($iFlags, $ILD_TRANSPARENT)
+	If BitAND($iStyle, 2) <> 0 Then $iFlags = BitOR($iFlags, $ILD_BLEND25)
+	If BitAND($iStyle, 4) <> 0 Then $iFlags = BitOR($iFlags, $ILD_BLEND50)
+	If BitAND($iStyle, 8) <> 0 Then $iFlags = BitOR($iFlags, $ILD_MASK)
+
+	Local $aResult = DllCall("comctl32.dll", "handle", "ImageList_GetIcon", "handle", $hWnd, "int", $iIndex, "uint", $iFlags)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_GUIImageList_GetIcon
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_GetIconHeight($hWnd)
+	Local $aSize = _GUIImageList_GetIconSize($hWnd)
+	Return $aSize[1]
+EndFunc   ;==>_GUIImageList_GetIconHeight
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_GetIconSize($hWnd)
+	Local $aSize[2]
+
+	Local $tPoint = _GUIImageList_GetIconSizeEx($hWnd)
+	$aSize[0] = DllStructGetData($tPoint, "X")
+	$aSize[1] = DllStructGetData($tPoint, "Y")
+	Return $aSize
+EndFunc   ;==>_GUIImageList_GetIconSize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_GetIconSizeEx($hWnd)
+	Local $tPoint = DllStructCreate($tagPOINT)
+	Local $pPointX = DllStructGetPtr($tPoint, "X")
+	Local $pPointY = DllStructGetPtr($tPoint, "Y")
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_GetIconSize", "hwnd", $hWnd, "struct*", $pPointX, "struct*", $pPointY)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return SetExtended($aResult[0], $tPoint)
+EndFunc   ;==>_GUIImageList_GetIconSizeEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_GetIconWidth($hWnd)
+	Local $aSize = _GUIImageList_GetIconSize($hWnd)
+	Return $aSize[0]
+EndFunc   ;==>_GUIImageList_GetIconWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_GetImageCount($hWnd)
+	Local $aResult = DllCall("comctl32.dll", "int", "ImageList_GetImageCount", "handle", $hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_GUIImageList_GetImageCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_GetImageInfoEx($hWnd, $iIndex)
+	Local $tImage = DllStructCreate($tagIMAGEINFO)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_GetImageInfo", "handle", $hWnd, "int", $iIndex, "struct*", $tImage)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return SetExtended($aResult[0], $tImage)
+EndFunc   ;==>_GUIImageList_GetImageInfoEx
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Name...........: _GUIImageList_Merge
+; Description ...: Creates a new image by combining two existing images
+; Syntax.........: _GUIImageList_Merge ( $hWnd1, $iIndex1, $hWnd2, $iIndex2, $iDX, $IDY )
+; Parameters ....: $hWnd1       - Handle to the 1st image control
+;                  $iIndex1     - Zero based of the first existing image
+;                  $hWnd2       - Handle to the 2nd image control
+;                  $iIndex2     - Zero based of the second existing image
+;                  $iDX         - The x-offset of the second image relative to the first image
+;                  $iDY         - The y-offset of the second image relative to the first image
+; Return values .: Success      - The handle to the new image list
+;                  Failure      - 0
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; Remarks .......: The new image consists of the second existing image drawn transparently over the first.
+;                  The mask for the new image is the result of performing a logical OR operation on the masks
+;                  of the two existing images.
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func _GUIImageList_Merge($hWnd1, $iIndex1, $hWnd2, $iIndex2, $iDX, $iDY)
+	Local $aResult = DllCall("comctl32.dll", "handle", "ImageList_Merge", "handle", $hWnd1, "int", $iIndex1, _
+			"handle", $hWnd2, "int", $iIndex2, "int", $iDX, "int", $iDY)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return $aResult[0]
+EndFunc   ;==>_GUIImageList_Merge
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_Remove($hWnd, $iIndex = -1)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_Remove", "handle", $hWnd, "int", $iIndex)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_Remove
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Name...........: _GUIImageList_Replace
+; Description ...: Replaces an image with an icon or cursor
+; Syntax.........: _GUIImageList_ReplaceIcon ( $hWnd, $iIndex, $hIcon )
+; Parameters ....: $hWnd        - Handle to the control
+;                  $iIndex      - Index of the image to replace.
+;                  $hImage      - Handle to the bitmap that contains the image
+;                  $hMask       - A handle to the bitmap that contains the mask.
+;                  +If no mask is used with the image list, this parameter is ignored
+; Return values .: Success      - True
+;                  Failure      - False
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; Remarks .......: The _GUIImageList_Replace function copies the bitmap to an internal data structure.
+;                  Be sure to use the _WinAPI_DeleteObject function to delete $hImage and $hMask after the function returns.
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func _GUIImageList_Replace($hWnd, $iIndex, $hImage, $hMask = 0)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_Replace", "handle", $hWnd, "int", $iIndex, "handle", $hImage, "handle", $hMask)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_Replace
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (GaryFrost) changed return type from hwnd to int
+; ===============================================================================================================================
+Func _GUIImageList_ReplaceIcon($hWnd, $iIndex, $hIcon)
+	Local $aResult = DllCall("comctl32.dll", "int", "ImageList_ReplaceIcon", "handle", $hWnd, "int", $iIndex, "handle", $hIcon)
+	If @error Then Return SetError(@error, @extended, -1)
+	Return $aResult[0]
+EndFunc   ;==>_GUIImageList_ReplaceIcon
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_SetBkColor($hWnd, $iClrBk)
+	Local $aResult = DllCall("comctl32.dll", "dword", "ImageList_SetBkColor", "handle", $hWnd, "dword", $iClrBk)
+	If @error Then Return SetError(@error, @extended, $CLR_NONE)
+	Return $aResult[0]
+EndFunc   ;==>_GUIImageList_SetBkColor
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Name...........: _GUIImageList_SetDragCursorImage
+; Description ...: Creates a new drag image
+; Syntax.........: _GUIImageList_SetDragCursorImage ( $hWnd, $iDrag, $iDXHotSpot, $iDYHotSpot )
+; Parameters ....: $hWnd        - A handle to the image list that contains the new image to combine with the drag image
+;                  $iDrag       - The index of the new image to combine with the drag image
+;                  $iDXHotSpot  - The x-position of the hot spot within the new image
+;                  $iDYHotSpot  - The y-position of the hot spot within the new image
+; Return values .: Success      - True
+;                  Failure      - False
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; Remarks .......: Creates a new drag image by combining the specified image (typically a mouse cursor image)
+;                  with the current drag image
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func _GUIImageList_SetDragCursorImage($hWnd, $iDrag, $iDXHotSpot, $iDYHotSpot)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_SetDragCursorImage", "handle", $hWnd, "int", $iDrag, "int", $iDXHotSpot, "int", $iDYHotSpot)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_SetDragCursorImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_SetIconSize($hWnd, $iCX, $iCY)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_SetIconSize", "handle", $hWnd, "int", $iCX, "int", $iCY)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_SetIconSize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_SetImageCount($hWnd, $iNewCount)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_SetImageCount", "handle", $hWnd, "uint", $iNewCount)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_SetImageCount
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Name...........: _GUIImageList_SetOverlayImage
+; Description ...: Adds a specified image to the list of images to be used as overlay masks
+; Syntax.........: _GUIImageList_SetOverlayImage ( $hWnd, $iImage, $iOverlay )
+; Parameters ....: $hWnd        - Handle to the control
+;                  $iImage      - The zero-based index of an image in the himl image list
+;                  +This index identifies the image to use as an overlay mask
+;                  $iOverlay    - The one-based index of the overlay mask
+; Return values .: Success      - True
+;                  Failure      - False
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; Remarks .......: An image list can have up to four overlay masks in (comctl32.dll) version 4.70 and earlier
+;                  and up to 15 in version 4.71. The function assigns an overlay mask index to the specified image.
+; +
+;                  An overlay mask is an image drawn transparently over another image.
+;                  To draw an overlay mask over an image, call the _GUIImageList_Draw or _GUIImageList_DrawEx function.
+; +
+;                  A call to this method fails and returns $E_INVALIDARG unless the image list is created using a mask.
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func _GUIImageList_SetOverlayImage($hWnd, $iImage, $iOverlay)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_SetOverlayImage", "handle", $hWnd, "int", $iImage, "int", $iOverlay)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_SetOverlayImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIImageList_Swap($hWnd, $iSource, $iDestination)
+	Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_Copy", "handle", $hWnd, "int", $iDestination, "handle", $hWnd, "int", $iSource, "uint", $ILCF_SWAP)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0] <> 0
+EndFunc   ;==>_GUIImageList_Swap

+ 928 - 0
include/GuiListBox.au3

@@ -0,0 +1,928 @@
+#include-once
+
+#include "DirConstants.au3"
+#include "ListBoxConstants.au3"
+#include "SendMessage.au3"
+#include "UDFGlobalID.au3"
+#include "WinAPIConv.au3"
+#include "WinAPIRes.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: ListBox
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with ListBox control management.
+; Author(s) .....: Paul Campbell (PaulIA)
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hLBLastWnd
+
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__LISTBOXCONSTANT_ClassName = "ListBox"
+Global Const $__LISTBOXCONSTANT_ClassNames = $__LISTBOXCONSTANT_ClassName & "|TListbox"
+Global Const $__LISTBOXCONSTANT_DEFAULT_GUI_FONT = 17
+Global Const $__LISTBOXCONSTANT_WM_SETREDRAW = 0x000B
+Global Const $__LISTBOXCONSTANT_WM_GETFONT = 0x0031
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUICtrlListBox_AddFile
+; _GUICtrlListBox_AddString
+; _GUICtrlListBox_BeginUpdate
+; _GUICtrlListBox_ClickItem
+; _GUICtrlListBox_Create
+; _GUICtrlListBox_DeleteString
+; _GUICtrlListBox_Destroy
+; _GUICtrlListBox_Dir
+; _GUICtrlListBox_EndUpdate
+; _GUICtrlListBox_FindString
+; _GUICtrlListBox_FindInText
+; _GUICtrlListBox_GetAnchorIndex
+; _GUICtrlListBox_GetCaretIndex
+; _GUICtrlListBox_GetCount
+; _GUICtrlListBox_GetCurSel
+; _GUICtrlListBox_GetHorizontalExtent
+; _GUICtrlListBox_GetItemData
+; _GUICtrlListBox_GetItemHeight
+; _GUICtrlListBox_GetItemRect
+; _GUICtrlListBox_GetItemRectEx
+; _GUICtrlListBox_GetListBoxInfo
+; _GUICtrlListBox_GetLocale
+; _GUICtrlListBox_GetLocaleCountry
+; _GUICtrlListBox_GetLocaleLang
+; _GUICtrlListBox_GetLocalePrimLang
+; _GUICtrlListBox_GetLocaleSubLang
+; _GUICtrlListBox_GetSel
+; _GUICtrlListBox_GetSelCount
+; _GUICtrlListBox_GetSelItems
+; _GUICtrlListBox_GetSelItemsText
+; _GUICtrlListBox_GetText
+; _GUICtrlListBox_GetTextLen
+; _GUICtrlListBox_GetTopIndex
+; _GUICtrlListBox_InitStorage
+; _GUICtrlListBox_InsertString
+; _GUICtrlListBox_ItemFromPoint
+; _GUICtrlListBox_ReplaceString
+; _GUICtrlListBox_ResetContent
+; _GUICtrlListBox_SelectString
+; _GUICtrlListBox_SelItemRange
+; _GUICtrlListBox_SelItemRangeEx
+; _GUICtrlListBox_SetAnchorIndex
+; _GUICtrlListBox_SetCaretIndex
+; _GUICtrlListBox_SetColumnWidth
+; _GUICtrlListBox_SetCurSel
+; _GUICtrlListBox_SetHorizontalExtent
+; _GUICtrlListBox_SetItemData
+; _GUICtrlListBox_SetItemHeight
+; _GUICtrlListBox_SetLocale
+; _GUICtrlListBox_SetSel
+; _GUICtrlListBox_SetTabStops
+; _GUICtrlListBox_SetTopIndex
+; _GUICtrlListBox_Sort
+; _GUICtrlListBox_SwapString
+; _GUICtrlListBox_UpdateHScroll
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_AddFile($hWnd, $sFilePath)
+	If Not IsString($sFilePath) Then $sFilePath = String($sFilePath)
+
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_ADDFILE, 0, $sFilePath, 0, "wparam", "wstr")
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_ADDFILE, 0, $sFilePath)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_AddFile
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_AddString($hWnd, $sText)
+	If Not IsString($sText) Then $sText = String($sText)
+
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_ADDSTRING, 0, $sText, 0, "wparam", "wstr")
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_ADDSTRING, 0, $sText)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_AddString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_BeginUpdate($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $__LISTBOXCONSTANT_WM_SETREDRAW, False) = 0
+EndFunc   ;==>_GUICtrlListBox_BeginUpdate
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_ClickItem($hWnd, $iIndex, $sButton = "left", $bMove = False, $iClicks = 1, $iSpeed = 0)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $tRECT = _GUICtrlListBox_GetItemRectEx($hWnd, $iIndex)
+	Local $tPoint = _WinAPI_PointFromRect($tRECT)
+	$tPoint = _WinAPI_ClientToScreen($hWnd, $tPoint)
+	Local $iX, $iY
+	_WinAPI_GetXYFromPoint($tPoint, $iX, $iY)
+	Local $iMode = Opt("MouseCoordMode", 1)
+	If Not $bMove Then
+		Local $aPos = MouseGetPos()
+		_WinAPI_ShowCursor(False)
+		MouseClick($sButton, $iX, $iY, $iClicks, $iSpeed)
+		MouseMove($aPos[0], $aPos[1], 0)
+		_WinAPI_ShowCursor(True)
+	Else
+		MouseClick($sButton, $iX, $iY, $iClicks, $iSpeed)
+	EndIf
+	Opt("MouseCoordMode", $iMode)
+EndFunc   ;==>_GUICtrlListBox_ClickItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost
+; ===============================================================================================================================
+Func _GUICtrlListBox_Create($hWnd, $sText, $iX, $iY, $iWidth = 100, $iHeight = 200, $iStyle = 0x00B00002, $iExStyle = 0x00000200)
+	If Not IsHWnd($hWnd) Then
+		; Invalid Window handle for _GUICtrlListBox_Create 1st parameter
+		Return SetError(1, 0, 0)
+	EndIf
+	If Not IsString($sText) Then
+		; 2nd parameter not a string for _GUICtrlListBox_Create
+		Return SetError(2, 0, 0)
+	EndIf
+
+	If $iWidth = -1 Then $iWidth = 100
+	If $iHeight = -1 Then $iHeight = 200
+	Local Const $WS_VSCROLL = 0x00200000, $WS_HSCROLL = 0x00100000, $WS_BORDER = 0x00800000
+	If $iStyle = -1 Then $iStyle = BitOR($WS_BORDER, $WS_VSCROLL, $WS_HSCROLL, $LBS_SORT)
+	If $iExStyle = -1 Then $iExStyle = 0x00000200
+
+	$iStyle = BitOR($iStyle, $__UDFGUICONSTANT_WS_VISIBLE, $__UDFGUICONSTANT_WS_TABSTOP, $__UDFGUICONSTANT_WS_CHILD, $LBS_NOTIFY)
+
+	Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	Local $hList = _WinAPI_CreateWindowEx($iExStyle, $__LISTBOXCONSTANT_ClassName, "", $iStyle, $iX, $iY, $iWidth, $iHeight, $hWnd, $nCtrlID)
+	_WinAPI_SetFont($hList, _WinAPI_GetStockObject($__LISTBOXCONSTANT_DEFAULT_GUI_FONT))
+	If StringLen($sText) Then _GUICtrlListBox_AddString($hList, $sText)
+	Return $hList
+EndFunc   ;==>_GUICtrlListBox_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_DeleteString($hWnd, $iIndex)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_DELETESTRING, $iIndex)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_DELETESTRING, $iIndex, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_DeleteString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_Destroy(ByRef $hWnd)
+	;If Not _WinAPI_IsClassName($hWnd, $__LISTBOXCONSTANT_ClassNames) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hLBLastWnd) Then
+			Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
+			Local $hParent = _WinAPI_GetParent($hWnd)
+			$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+			Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
+			If Not $iRet Then
+				; can check for errors here if needed, for debug
+			EndIf
+		Else
+			; Not Allowed to Destroy Other Applications Control(s)
+			Return SetError(1, 1, False)
+		EndIf
+	Else
+		$iDestroyed = GUICtrlDelete($hWnd)
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUICtrlListBox_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost), CyberSlug
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_Dir($hWnd, $sFilePath, $iAttributes = 0, $bBrackets = True)
+	If Not IsString($sFilePath) Then $sFilePath = String($sFilePath)
+
+	If BitAND($iAttributes, $DDL_DRIVES) = $DDL_DRIVES And Not $bBrackets Then
+		Local $sText
+		Local $hGui_no_brackets = GUICreate("no brackets")
+		Local $idList_no_brackets = GUICtrlCreateList("", 240, 40, 120, 120)
+		Local $iRet = GUICtrlSendMsg($idList_no_brackets, $LB_DIR, $iAttributes, $sFilePath)
+		For $i = 0 To _GUICtrlListBox_GetCount($idList_no_brackets) - 1
+			$sText = _GUICtrlListBox_GetText($idList_no_brackets, $i)
+			$sText = StringReplace(StringReplace(StringReplace($sText, "[", ""), "]", ":"), "-", "")
+			_GUICtrlListBox_InsertString($hWnd, $sText)
+		Next
+		GUIDelete($hGui_no_brackets)
+		Return $iRet
+	Else
+		If IsHWnd($hWnd) Then
+			Return _SendMessage($hWnd, $LB_DIR, $iAttributes, $sFilePath, 0, "wparam", "wstr")
+		Else
+			Return GUICtrlSendMsg($hWnd, $LB_DIR, $iAttributes, $sFilePath)
+		EndIf
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_Dir
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_EndUpdate($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $__LISTBOXCONSTANT_WM_SETREDRAW, True) = 0
+EndFunc   ;==>_GUICtrlListBox_EndUpdate
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_FindString($hWnd, $sText, $bExact = False)
+	If Not IsString($sText) Then $sText = String($sText)
+
+	If IsHWnd($hWnd) Then
+		If ($bExact) Then
+			Return _SendMessage($hWnd, $LB_FINDSTRINGEXACT, -1, $sText, 0, "wparam", "wstr")
+		Else
+			Return _SendMessage($hWnd, $LB_FINDSTRING, -1, $sText, 0, "wparam", "wstr")
+		EndIf
+	Else
+		If ($bExact) Then
+			Return GUICtrlSendMsg($hWnd, $LB_FINDSTRINGEXACT, -1, $sText)
+		Else
+			Return GUICtrlSendMsg($hWnd, $LB_FINDSTRING, -1, $sText)
+		EndIf
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_FindString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_FindInText($hWnd, $sText, $iStart = -1, $bWrapOK = True)
+	Local $sList
+
+	Local $iCount = _GUICtrlListBox_GetCount($hWnd)
+	For $iI = $iStart + 1 To $iCount - 1
+		$sList = _GUICtrlListBox_GetText($hWnd, $iI)
+		If StringInStr($sList, $sText) Then Return $iI
+	Next
+
+	If ($iStart = -1) Or Not $bWrapOK Then Return -1
+	For $iI = 0 To $iStart - 1
+		$sList = _GUICtrlListBox_GetText($hWnd, $iI)
+		If StringInStr($sList, $sText) Then Return $iI
+	Next
+
+	Return -1
+EndFunc   ;==>_GUICtrlListBox_FindInText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: CyberSlug
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetAnchorIndex($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETANCHORINDEX)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_GETANCHORINDEX, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_GetAnchorIndex
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: CyberSlug
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetCaretIndex($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETCARETINDEX)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_GETCARETINDEX, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_GetCaretIndex
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetCount($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETCOUNT)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_GETCOUNT, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_GetCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetCurSel($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETCURSEL)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_GETCURSEL, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_GetCurSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetHorizontalExtent($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETHORIZONTALEXTENT)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_GETHORIZONTALEXTENT, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_GetHorizontalExtent
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetItemData($hWnd, $iIndex)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETITEMDATA, $iIndex)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_GETITEMDATA, $iIndex, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_GetItemData
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetItemHeight($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETITEMHEIGHT)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_GETITEMHEIGHT, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_GetItemHeight
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetItemRect($hWnd, $iIndex)
+	Local $aRect[4]
+
+	Local $tRECT = _GUICtrlListBox_GetItemRectEx($hWnd, $iIndex)
+	$aRect[0] = DllStructGetData($tRECT, "Left")
+	$aRect[1] = DllStructGetData($tRECT, "Top")
+	$aRect[2] = DllStructGetData($tRECT, "Right")
+	$aRect[3] = DllStructGetData($tRECT, "Bottom")
+	Return $aRect
+EndFunc   ;==>_GUICtrlListBox_GetItemRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetItemRectEx($hWnd, $iIndex)
+	Local $tRECT = DllStructCreate($tagRECT)
+	If IsHWnd($hWnd) Then
+		_SendMessage($hWnd, $LB_GETITEMRECT, $iIndex, $tRECT, 0, "wparam", "struct*")
+	Else
+		GUICtrlSendMsg($hWnd, $LB_GETITEMRECT, $iIndex, DllStructGetPtr($tRECT))
+	EndIf
+	Return $tRECT
+EndFunc   ;==>_GUICtrlListBox_GetItemRectEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetListBoxInfo($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETLISTBOXINFO)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_GETLISTBOXINFO, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_GetListBoxInfo
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: CyberSlug
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetLocale($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETLOCALE)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_GETLOCALE, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_GetLocale
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetLocaleCountry($hWnd)
+	Return _WinAPI_HiWord(_GUICtrlListBox_GetLocale($hWnd))
+EndFunc   ;==>_GUICtrlListBox_GetLocaleCountry
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetLocaleLang($hWnd)
+	Return _WinAPI_LoWord(_GUICtrlListBox_GetLocale($hWnd))
+EndFunc   ;==>_GUICtrlListBox_GetLocaleLang
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetLocalePrimLang($hWnd)
+	Return _WinAPI_PrimaryLangId(_GUICtrlListBox_GetLocaleLang($hWnd))
+EndFunc   ;==>_GUICtrlListBox_GetLocalePrimLang
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetLocaleSubLang($hWnd)
+	Return _WinAPI_SubLangId(_GUICtrlListBox_GetLocaleLang($hWnd))
+EndFunc   ;==>_GUICtrlListBox_GetLocaleSubLang
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: CyberSlug
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetSel($hWnd, $iIndex)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETSEL, $iIndex) <> 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_GETSEL, $iIndex, 0) <> 0
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_GetSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: CyberSlug
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetSelCount($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETSELCOUNT)
+	EndIf
+
+	If IsHWnd(GUICtrlGetHandle($hWnd)) Then
+		Return GUICtrlSendMsg($hWnd, $LB_GETSELCOUNT, 0, 0)
+	EndIf
+
+	; Invalid controlID
+	Return -1
+EndFunc   ;==>_GUICtrlListBox_GetSelCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetSelItems($hWnd)
+	Local $aArray[1] = [0]
+
+	Local $iCount = _GUICtrlListBox_GetSelCount($hWnd)
+	If $iCount > 0 Then
+		ReDim $aArray[$iCount + 1]
+		Local $tArray = DllStructCreate("int[" & $iCount & "]")
+		If IsHWnd($hWnd) Then
+			_SendMessage($hWnd, $LB_GETSELITEMS, $iCount, $tArray, 0, "wparam", "struct*")
+		Else
+			GUICtrlSendMsg($hWnd, $LB_GETSELITEMS, $iCount, DllStructGetPtr($tArray))
+		EndIf
+		$aArray[0] = $iCount
+		For $iI = 1 To $iCount
+			$aArray[$iI] = DllStructGetData($tArray, 1, $iI)
+		Next
+	EndIf
+	Return $aArray
+EndFunc   ;==>_GUICtrlListBox_GetSelItems
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost), CyberSlug
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetSelItemsText($hWnd)
+	Local $aText[1] = [0], $iCount = _GUICtrlListBox_GetSelCount($hWnd)
+	If $iCount > 0 Then
+		Local $aIndices = _GUICtrlListBox_GetSelItems($hWnd)
+		ReDim $aText[UBound($aIndices)]
+		$aText[0] = $aIndices[0]
+		For $i = 1 To $aIndices[0]
+			$aText[$i] = _GUICtrlListBox_GetText($hWnd, $aIndices[$i])
+		Next
+	EndIf
+	Return $aText
+EndFunc   ;==>_GUICtrlListBox_GetSelItemsText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: CyberSlug
+; Modified.......: Gary Frost (gafrost
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetText($hWnd, $iIndex)
+	Local $tText = DllStructCreate("wchar Text[" & _GUICtrlListBox_GetTextLen($hWnd, $iIndex) + 1 & "]")
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	_SendMessage($hWnd, $LB_GETTEXT, $iIndex, $tText, 0, "wparam", "struct*")
+	Return DllStructGetData($tText, "Text")
+EndFunc   ;==>_GUICtrlListBox_GetText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: CyberSlug
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetTextLen($hWnd, $iIndex)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETTEXTLEN, $iIndex)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_GETTEXTLEN, $iIndex, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_GetTextLen
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost), CyberSlug
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_GetTopIndex($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_GETTOPINDEX)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_GETTOPINDEX, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_GetTopIndex
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_InitStorage($hWnd, $iItems, $iBytes)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_INITSTORAGE, $iItems, $iBytes)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_INITSTORAGE, $iItems, $iBytes)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_InitStorage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_InsertString($hWnd, $sText, $iIndex = -1)
+	If Not IsString($sText) Then $sText = String($sText)
+
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_INSERTSTRING, $iIndex, $sText, 0, "wparam", "wstr")
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_INSERTSTRING, $iIndex, $sText)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_InsertString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_ItemFromPoint($hWnd, $iX, $iY)
+	Local $iRet
+
+	If IsHWnd($hWnd) Then
+		$iRet = _SendMessage($hWnd, $LB_ITEMFROMPOINT, 0, _WinAPI_MakeLong($iX, $iY))
+	Else
+		$iRet = GUICtrlSendMsg($hWnd, $LB_ITEMFROMPOINT, 0, _WinAPI_MakeLong($iX, $iY))
+	EndIf
+
+	If _WinAPI_HiWord($iRet) <> 0 Then $iRet = -1
+	Return $iRet
+EndFunc   ;==>_GUICtrlListBox_ItemFromPoint
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost), CyberSlug
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_ReplaceString($hWnd, $iIndex, $sText)
+	If (_GUICtrlListBox_DeleteString($hWnd, $iIndex) == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, False)
+	If (_GUICtrlListBox_InsertString($hWnd, $sText, $iIndex) == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, False)
+	Return True
+EndFunc   ;==>_GUICtrlListBox_ReplaceString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_ResetContent($hWnd)
+	If IsHWnd($hWnd) Then
+		_SendMessage($hWnd, $LB_RESETCONTENT)
+	Else
+		GUICtrlSendMsg($hWnd, $LB_RESETCONTENT, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_ResetContent
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_SelectString($hWnd, $sText, $iIndex = -1)
+	If Not IsString($sText) Then $sText = String($sText)
+
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_SELECTSTRING, $iIndex, $sText, 0, "wparam", "wstr")
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_SELECTSTRING, $iIndex, $sText)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_SelectString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost), CyberSlug
+; Modified.......: Gary Frost (gafrost, re-written
+; ===============================================================================================================================
+Func _GUICtrlListBox_SelItemRange($hWnd, $iFirst, $iLast, $bSelect = True)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_SELITEMRANGE, $bSelect, _WinAPI_MakeLong($iFirst, $iLast)) = 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_SELITEMRANGE, $bSelect, _WinAPI_MakeLong($iFirst, $iLast)) = 0
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_SelItemRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: CyberSlug
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_SelItemRangeEx($hWnd, $iFirst, $iLast)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_SELITEMRANGEEX, $iFirst, $iLast) = 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_SELITEMRANGEEX, $iFirst, $iLast) = 0
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_SelItemRangeEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_SetAnchorIndex($hWnd, $iIndex)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_SETANCHORINDEX, $iIndex) = 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_SETANCHORINDEX, $iIndex, 0) = 0
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_SetAnchorIndex
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_SetCaretIndex($hWnd, $iIndex, $bPartial = False)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_SETCARETINDEX, $iIndex, $bPartial) = 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_SETCARETINDEX, $iIndex, $bPartial) = 0
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_SetCaretIndex
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_SetColumnWidth($hWnd, $iWidth)
+	If IsHWnd($hWnd) Then
+		_SendMessage($hWnd, $LB_SETCOLUMNWIDTH, $iWidth)
+	Else
+		GUICtrlSendMsg($hWnd, $LB_SETCOLUMNWIDTH, $iWidth, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_SetColumnWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Sokko
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_SetCurSel($hWnd, $iIndex)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_SETCURSEL, $iIndex)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_SETCURSEL, $iIndex, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_SetCurSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_SetHorizontalExtent($hWnd, $iWidth)
+	If IsHWnd($hWnd) Then
+		_SendMessage($hWnd, $LB_SETHORIZONTALEXTENT, $iWidth)
+	Else
+		GUICtrlSendMsg($hWnd, $LB_SETHORIZONTALEXTENT, $iWidth, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_SetHorizontalExtent
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_SetItemData($hWnd, $iIndex, $iValue)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_SETITEMDATA, $iIndex, $iValue) <> -1
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_SETITEMDATA, $iIndex, $iValue) <> -1
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_SetItemData
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_SetItemHeight($hWnd, $iHeight, $iIndex = 0)
+	Local $iRet
+
+	If IsHWnd($hWnd) Then
+		$iRet = _SendMessage($hWnd, $LB_SETITEMHEIGHT, $iIndex, $iHeight)
+		_WinAPI_InvalidateRect($hWnd)
+	Else
+		$iRet = GUICtrlSendMsg($hWnd, $LB_SETITEMHEIGHT, $iIndex, $iHeight)
+		_WinAPI_InvalidateRect(GUICtrlGetHandle($hWnd))
+	EndIf
+	Return $iRet <> -1
+EndFunc   ;==>_GUICtrlListBox_SetItemHeight
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: CyberSlug
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_SetLocale($hWnd, $iLocal)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_SETLOCALE, $iLocal)
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_SETLOCALE, $iLocal, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_SetLocale
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost), CyberSlug
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_SetSel($hWnd, $iIndex = -1, $iSelect = -1)
+	Local $i_Ret = 1
+	If IsHWnd($hWnd) Then
+		If $iIndex == -1 Then ; toggle all
+			For $iIndex = 0 To _GUICtrlListBox_GetCount($hWnd) - 1
+				$i_Ret = _GUICtrlListBox_GetSel($hWnd, $iIndex)
+				If ($i_Ret == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, False)
+				If ($i_Ret > 0) Then ;If Selected Then
+					$i_Ret = _SendMessage($hWnd, $LB_SETSEL, False, $iIndex) <> -1
+				Else
+					$i_Ret = _SendMessage($hWnd, $LB_SETSEL, True, $iIndex) <> -1
+				EndIf
+				If ($i_Ret == False) Then Return SetError($LB_ERR, $LB_ERR, False)
+			Next
+		ElseIf $iSelect == -1 Then ; toggle state of index
+			If _GUICtrlListBox_GetSel($hWnd, $iIndex) Then ;If Selected Then
+				Return _SendMessage($hWnd, $LB_SETSEL, False, $iIndex) <> -1
+			Else
+				Return _SendMessage($hWnd, $LB_SETSEL, True, $iIndex) <> -1
+			EndIf
+		Else ; set state according to flag
+			Return _SendMessage($hWnd, $LB_SETSEL, $iSelect, $iIndex) <> -1
+		EndIf
+	Else
+		If $iIndex == -1 Then ; toggle all
+			For $iIndex = 0 To _GUICtrlListBox_GetCount($hWnd) - 1
+				$i_Ret = _GUICtrlListBox_GetSel($hWnd, $iIndex)
+				If ($i_Ret == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, False)
+				If ($i_Ret > 0) Then ;If Selected Then
+					$i_Ret = GUICtrlSendMsg($hWnd, $LB_SETSEL, False, $iIndex) <> -1
+				Else
+					$i_Ret = GUICtrlSendMsg($hWnd, $LB_SETSEL, True, $iIndex) <> -1
+				EndIf
+				If ($i_Ret == 0) Then Return SetError($LB_ERR, $LB_ERR, False)
+			Next
+		ElseIf $iSelect == -1 Then ; toggle state of index
+			If _GUICtrlListBox_GetSel($hWnd, $iIndex) Then ;If Selected Then
+				Return GUICtrlSendMsg($hWnd, $LB_SETSEL, False, $iIndex) <> -1
+			Else
+				Return GUICtrlSendMsg($hWnd, $LB_SETSEL, True, $iIndex) <> -1
+			EndIf
+		Else ; set state according to flag
+			Return GUICtrlSendMsg($hWnd, $LB_SETSEL, $iSelect, $iIndex) <> -1
+		EndIf
+	EndIf
+	Return $i_Ret <> 0
+EndFunc   ;==>_GUICtrlListBox_SetSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_SetTabStops($hWnd, $aTabStops)
+	Local $iCount = $aTabStops[0]
+	Local $tTabStops = DllStructCreate("int[" & $iCount & "]")
+	For $iI = 1 To $iCount
+		DllStructSetData($tTabStops, 1, $aTabStops[$iI], $iI)
+	Next
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_SETTABSTOPS, $iCount, $tTabStops, 0, "wparam", "struct*") = 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_SETTABSTOPS, $iCount, DllStructGetPtr($tTabStops)) = 0
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_SetTabStops
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: CyberSlug
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_SetTopIndex($hWnd, $iIndex)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $LB_SETTOPINDEX, $iIndex) <> -1
+	Else
+		Return GUICtrlSendMsg($hWnd, $LB_SETTOPINDEX, $iIndex, 0) <> -1
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_SetTopIndex
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost), CyberSlug
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_Sort($hWnd)
+	Local $sBak = _GUICtrlListBox_GetText($hWnd, 0)
+	If ($sBak == -1) Then Return SetError($LB_ERR, $LB_ERR, False)
+	If (_GUICtrlListBox_DeleteString($hWnd, 0) == -1) Then Return SetError($LB_ERR, $LB_ERR, False)
+	Return _GUICtrlListBox_AddString($hWnd, $sBak) <> -1
+EndFunc   ;==>_GUICtrlListBox_Sort
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost), Cyberslug
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlListBox_SwapString($hWnd, $iIndexA, $iIndexB)
+	Local $sItemA = _GUICtrlListBox_GetText($hWnd, $iIndexA)
+	Local $sItemB = _GUICtrlListBox_GetText($hWnd, $iIndexB)
+	If (_GUICtrlListBox_DeleteString($hWnd, $iIndexA) == -1) Then Return SetError($LB_ERR, $LB_ERR, False)
+	If (_GUICtrlListBox_InsertString($hWnd, $sItemB, $iIndexA) == -1) Then Return SetError($LB_ERR, $LB_ERR, False)
+
+	If (_GUICtrlListBox_DeleteString($hWnd, $iIndexB) == -1) Then Return SetError($LB_ERR, $LB_ERR, False)
+	If (_GUICtrlListBox_InsertString($hWnd, $sItemA, $iIndexB) == -1) Then Return SetError($LB_ERR, $LB_ERR, False)
+	Return True
+EndFunc   ;==>_GUICtrlListBox_SwapString
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlListBox_UpdateHScroll($hWnd)
+	Local $hDC, $hFont, $tSize, $sText
+	Local $iMax = 0
+	If IsHWnd($hWnd) Then
+		$hFont = _SendMessage($hWnd, $__LISTBOXCONSTANT_WM_GETFONT)
+		$hDC = _WinAPI_GetDC($hWnd)
+		_WinAPI_SelectObject($hDC, $hFont)
+		For $iI = 0 To _GUICtrlListBox_GetCount($hWnd) - 1
+			$sText = _GUICtrlListBox_GetText($hWnd, $iI)
+			$tSize = _WinAPI_GetTextExtentPoint32($hDC, $sText & "W")
+			If DllStructGetData($tSize, "X") > $iMax Then
+				$iMax = DllStructGetData($tSize, "X")
+			EndIf
+		Next
+		_GUICtrlListBox_SetHorizontalExtent($hWnd, $iMax)
+		_WinAPI_SelectObject($hDC, $hFont)
+		_WinAPI_ReleaseDC($hWnd, $hDC)
+	Else
+		$hFont = GUICtrlSendMsg($hWnd, $__LISTBOXCONSTANT_WM_GETFONT, 0, 0)
+		Local $hWnd_t = GUICtrlGetHandle($hWnd)
+		$hDC = _WinAPI_GetDC($hWnd_t)
+		_WinAPI_SelectObject($hDC, $hFont)
+		For $iI = 0 To _GUICtrlListBox_GetCount($hWnd) - 1
+			$sText = _GUICtrlListBox_GetText($hWnd, $iI)
+			$tSize = _WinAPI_GetTextExtentPoint32($hDC, $sText & "W")
+			If DllStructGetData($tSize, "X") > $iMax Then
+				$iMax = DllStructGetData($tSize, "X")
+			EndIf
+		Next
+		_GUICtrlListBox_SetHorizontalExtent($hWnd, $iMax)
+		_WinAPI_SelectObject($hDC, $hFont)
+		_WinAPI_ReleaseDC($hWnd_t, $hDC)
+	EndIf
+EndFunc   ;==>_GUICtrlListBox_UpdateHScroll

ファイルの差分が大きいため隠しています
+ 4728 - 0
include/GuiListView.au3


ファイルの差分が大きいため隠しています
+ 1100 - 0
include/GuiMenu.au3


+ 906 - 0
include/GuiMonthCal.au3

@@ -0,0 +1,906 @@
+#include-once
+
+#include "DateTimeConstants.au3"
+#include "Memory.au3"
+#include "SendMessage.au3"
+#include "StructureConstants.au3"
+#include "UDFGlobalID.au3"
+#include "WinAPIConv.au3"
+;~ #include "WinAPIMisc.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: MonthCalendar
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with MonthCalendar control management.
+;                  A month calendar control implements a calendar-like user  interface.  This  provides  the  user  with  a  very
+;                  intuitive and recognizable method of entering or selecting a date.  The control also provides the  application
+;                  with the means to obtain and set the date information in the control using existing data types.
+; Author(s) .....: Paul Campbell (PaulIA), Gary Frost (gafrost)
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hMCLastWnd
+
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__MONTHCALCONSTANT_ClassName = "SysMonthCal32"
+Global Const $__MONTHCALCONSTANT_SWP_NOZORDER = 0x0004
+; ===============================================================================================================================$aArray[$i]
+
+; #CURRENT# =====================================================================================================================
+; _GUICtrlMonthCal_Create
+; _GUICtrlMonthCal_Destroy
+; _GUICtrlMonthCal_GetCalendarBorder
+; _GUICtrlMonthCal_GetCalendarCount
+; _GUICtrlMonthCal_GetColor
+; _GUICtrlMonthCal_GetColorArray
+; _GUICtrlMonthCal_GetCurSel
+; _GUICtrlMonthCal_GetCurSelStr
+; _GUICtrlMonthCal_GetFirstDOW
+; _GUICtrlMonthCal_GetFirstDOWStr
+; _GUICtrlMonthCal_GetMaxSelCount
+; _GUICtrlMonthCal_GetMaxTodayWidth
+; _GUICtrlMonthCal_GetMinReqHeight
+; _GUICtrlMonthCal_GetMinReqRect
+; _GUICtrlMonthCal_GetMinReqRectArray
+; _GUICtrlMonthCal_GetMinReqWidth
+; _GUICtrlMonthCal_GetMonthDelta
+; _GUICtrlMonthCal_GetMonthRange
+; _GUICtrlMonthCal_GetMonthRangeMax
+; _GUICtrlMonthCal_GetMonthRangeMaxStr
+; _GUICtrlMonthCal_GetMonthRangeMin
+; _GUICtrlMonthCal_GetMonthRangeMinStr
+; _GUICtrlMonthCal_GetMonthRangeSpan
+; _GUICtrlMonthCal_GetRange
+; _GUICtrlMonthCal_GetRangeMax
+; _GUICtrlMonthCal_GetRangeMaxStr
+; _GUICtrlMonthCal_GetRangeMin
+; _GUICtrlMonthCal_GetRangeMinStr
+; _GUICtrlMonthCal_GetSelRange
+; _GUICtrlMonthCal_GetSelRangeMax
+; _GUICtrlMonthCal_GetSelRangeMaxStr
+; _GUICtrlMonthCal_GetSelRangeMin
+; _GUICtrlMonthCal_GetSelRangeMinStr
+; _GUICtrlMonthCal_GetToday
+; _GUICtrlMonthCal_GetTodayStr
+; _GUICtrlMonthCal_GetUnicodeFormat
+; _GUICtrlMonthCal_HitTest
+; _GUICtrlMonthCal_SetCalendarBorder
+; _GUICtrlMonthCal_SetColor
+; _GUICtrlMonthCal_SetCurSel
+; _GUICtrlMonthCal_SetDayState
+; _GUICtrlMonthCal_SetFirstDOW
+; _GUICtrlMonthCal_SetMaxSelCount
+; _GUICtrlMonthCal_SetMonthDelta
+; _GUICtrlMonthCal_SetRange
+; _GUICtrlMonthCal_SetSelRange
+; _GUICtrlMonthCal_SetToday
+; _GUICtrlMonthCal_SetUnicodeFormat
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; __GUICtrlMonthCal_Resize
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_Create($hWnd, $iX, $iY, $iStyle = 0x00000000, $iExStyle = 0x00000000)
+	If Not IsHWnd($hWnd) Then
+		; Invalid Window handle for _GUICtrlMonthCal_Create 1st parameter
+		Return SetError(1, 0, 0)
+	EndIf
+
+	Local $hMonCal, $nCtrlID
+
+	If $iStyle = -1 Then $iStyle = 0x00000000
+	If $iExStyle = -1 Then $iExStyle = 0x00000000
+
+	$iStyle = BitOR($iStyle, $__UDFGUICONSTANT_WS_CHILD, $__UDFGUICONSTANT_WS_VISIBLE)
+
+	$nCtrlID = __UDF_GetNextGlobalID($hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	$hMonCal = _WinAPI_CreateWindowEx($iExStyle, $__MONTHCALCONSTANT_ClassName, "", $iStyle, $iX, $iY, 0, 0, $hWnd, $nCtrlID)
+	__GUICtrlMonthCal_Resize($hMonCal, $iX, $iY)
+	Return $hMonCal
+EndFunc   ;==>_GUICtrlMonthCal_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_Destroy(ByRef $hWnd)
+	If Not _WinAPI_IsClassName($hWnd, $__MONTHCALCONSTANT_ClassName) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
+			Local $hParent = _WinAPI_GetParent($hWnd)
+			$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+			Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
+			If Not $iRet Then
+				; can check for errors here if needed, for debug
+			EndIf
+		Else
+			; Not Allowed to Delete Other Applications Month Calendar(s) Control(s)
+			Return SetError(1, 1, False)
+		EndIf
+	Else
+		$iDestroyed = GUICtrlDelete($hWnd)
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUICtrlMonthCal_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetCalendarBorder($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $MCM_GETCALENDARBORDER)
+	Else
+		Return GUICtrlSendMsg($hWnd, $MCM_GETCALENDARBORDER, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_GetCalendarBorder
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetCalendarCount($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $MCM_GETCALENDARCOUNT)
+	Else
+		Return GUICtrlSendMsg($hWnd, $MCM_GETCALENDARCOUNT, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_GetCalendarCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetColor($hWnd, $iIndex)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $MCM_GETCOLOR, $iIndex)
+	Else
+		Return GUICtrlSendMsg($hWnd, $MCM_GETCOLOR, $iIndex, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_GetColor
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetColorArray($hWnd, $iColor)
+	Local $iRet, $a_Result[4]
+	$a_Result[0] = 3
+	If IsHWnd($hWnd) Then
+		$iRet = _SendMessage($hWnd, $MCM_GETCOLOR, $iColor)
+	Else
+		$iRet = GUICtrlSendMsg($hWnd, $MCM_GETCOLOR, $iColor, 0)
+	EndIf
+	If $iRet = -1 Then Return SetError(1, $iRet, 0)
+
+	$a_Result[1] = Int($iRet) ; COLORREF rgbcolor
+	$a_Result[2] = "0x" & Hex(String($iRet), 6) ; Hex BGR color
+	$a_Result[3] = Hex(String($iRet), 6)
+	$a_Result[3] = "0x" & StringMid($a_Result[3], 5, 2) & StringMid($a_Result[3], 3, 2) & StringMid($a_Result[3], 1, 2) ; Hex RGB Color
+	Return $a_Result
+EndFunc   ;==>_GUICtrlMonthCal_GetColorArray
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetCurSel($hWnd)
+	Local $tBuffer = DllStructCreate($tagSYSTEMTIME)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			_SendMessage($hWnd, $MCM_GETCURSEL, 0, $tBuffer, 0, "wparam", "struct*")
+		Else
+			Local $iBuffer = DllStructGetSize($tBuffer)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+			_SendMessage($hWnd, $MCM_GETCURSEL, 0, $pMemory, 0, "wparam", "ptr")
+			_MemRead($tMemMap, $pMemory, $tBuffer, $iBuffer)
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		GUICtrlSendMsg($hWnd, $MCM_GETCURSEL, 0, DllStructGetPtr($tBuffer))
+	EndIf
+	Return $tBuffer
+EndFunc   ;==>_GUICtrlMonthCal_GetCurSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetCurSelStr($hWnd, $sFormat = "%02d/%02d/%04d")
+	Local $tBuffer = _GUICtrlMonthCal_GetCurSel($hWnd)
+	Return StringFormat($sFormat, DllStructGetData($tBuffer, "Month"), DllStructGetData($tBuffer, "Day"), DllStructGetData($tBuffer, "Year"))
+EndFunc   ;==>_GUICtrlMonthCal_GetCurSelStr
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetFirstDOW($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _WinAPI_LoWord(_SendMessage($hWnd, $MCM_GETFIRSTDAYOFWEEK))
+	Else
+		Return _WinAPI_LoWord(GUICtrlSendMsg($hWnd, $MCM_GETFIRSTDAYOFWEEK, 0, 0))
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_GetFirstDOW
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetFirstDOWStr($hWnd)
+	Local $aDays[7] = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
+
+	Return $aDays[_GUICtrlMonthCal_GetFirstDOW($hWnd)]
+EndFunc   ;==>_GUICtrlMonthCal_GetFirstDOWStr
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMaxSelCount($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $MCM_GETMAXSELCOUNT)
+	Else
+		Return GUICtrlSendMsg($hWnd, $MCM_GETMAXSELCOUNT, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_GetMaxSelCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMaxTodayWidth($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $MCM_GETMAXTODAYWIDTH)
+	Else
+		Return GUICtrlSendMsg($hWnd, $MCM_GETMAXTODAYWIDTH, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_GetMaxTodayWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMinReqHeight($hWnd)
+	Local $tRECT = _GUICtrlMonthCal_GetMinReqRect($hWnd)
+	Return DllStructGetData($tRECT, "Bottom")
+EndFunc   ;==>_GUICtrlMonthCal_GetMinReqHeight
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMinReqRect($hWnd)
+	Local $tRECT = DllStructCreate($tagRECT)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			_SendMessage($hWnd, $MCM_GETMINREQRECT, 0, $tRECT, 0, "wparam", "struct*")
+		Else
+			Local $iRect = DllStructGetSize($tRECT)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iRect, $tMemMap)
+			_SendMessage($hWnd, $MCM_GETMINREQRECT, 0, $pMemory, 0, "wparam", "ptr")
+			_MemRead($tMemMap, $pMemory, $tRECT, $iRect)
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		GUICtrlSendMsg($hWnd, $MCM_GETMINREQRECT, 0, DllStructGetPtr($tRECT))
+	EndIf
+	Return $tRECT
+EndFunc   ;==>_GUICtrlMonthCal_GetMinReqRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMinReqRectArray($hWnd)
+	Local $i_Ret
+	Local $tRECT = DllStructCreate($tagRECT)
+	If @error Then Return SetError(-1, -1, -1)
+	If IsHWnd($hWnd) Then
+		$i_Ret = _SendMessage($hWnd, $MCM_GETMINREQRECT, 0, $tRECT, 0, "wparam", "struct*")
+	Else
+		$i_Ret = GUICtrlSendMsg($hWnd, $MCM_GETMINREQRECT, 0, DllStructGetPtr($tRECT))
+	EndIf
+	If (Not $i_Ret) Then Return SetError(-2, -1, -1)
+	Return StringSplit(DllStructGetData($tRECT, "Left") & "," & DllStructGetData($tRECT, "Top") & "," & DllStructGetData($tRECT, "Right") & "," & DllStructGetData($tRECT, "Bottom"), ",")
+EndFunc   ;==>_GUICtrlMonthCal_GetMinReqRectArray
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMinReqWidth($hWnd)
+	Local $tRECT = _GUICtrlMonthCal_GetMinReqRect($hWnd)
+	Return DllStructGetData($tRECT, "Right")
+EndFunc   ;==>_GUICtrlMonthCal_GetMinReqWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMonthDelta($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $MCM_GETMONTHDELTA)
+	Else
+		Return GUICtrlSendMsg($hWnd, $MCM_GETMONTHDELTA, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_GetMonthDelta
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMonthRange($hWnd, $bPartial = False)
+	Local $tBuffer = DllStructCreate($tagMCMONTHRANGE)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			DllStructSetData($tBuffer, "Span", _SendMessage($hWnd, $MCM_GETMONTHRANGE, $bPartial, $tBuffer, 0, "wparam", "struct*"))
+		Else
+			Local $iBuffer = DllStructGetSize($tBuffer)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+			DllStructSetData($tBuffer, "Span", _SendMessage($hWnd, $MCM_GETMONTHRANGE, $bPartial, $pMemory, 0, "wparam", "ptr"))
+			_MemRead($tMemMap, $pMemory, $tBuffer, $iBuffer)
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		DllStructSetData($tBuffer, "Span", GUICtrlSendMsg($hWnd, $MCM_GETMONTHRANGE, $bPartial, DllStructGetPtr($tBuffer)))
+	EndIf
+	Return $tBuffer
+EndFunc   ;==>_GUICtrlMonthCal_GetMonthRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMonthRangeMax($hWnd, $bPartial = False)
+	Local $tBuffer = _GUICtrlMonthCal_GetMonthRange($hWnd, $bPartial)
+	Local $tRange = DllStructCreate($tagSYSTEMTIME)
+	DllStructSetData($tRange, "Year", DllStructGetData($tBuffer, "MaxYear"))
+	DllStructSetData($tRange, "Month", DllStructGetData($tBuffer, "MaxMonth"))
+	DllStructSetData($tRange, "DOW", DllStructGetData($tBuffer, "MaxDOW"))
+	DllStructSetData($tRange, "Day", DllStructGetData($tBuffer, "MaxDay"))
+	Return $tRange
+EndFunc   ;==>_GUICtrlMonthCal_GetMonthRangeMax
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMonthRangeMaxStr($hWnd, $sFormat = "%02d/%02d/%04d")
+	Local $tBuffer = _GUICtrlMonthCal_GetMonthRangeMax($hWnd)
+	Return StringFormat($sFormat, DllStructGetData($tBuffer, "Month"), DllStructGetData($tBuffer, "Day"), DllStructGetData($tBuffer, "Year"))
+EndFunc   ;==>_GUICtrlMonthCal_GetMonthRangeMaxStr
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMonthRangeMin($hWnd, $bPartial = False)
+	Local $tBuffer = _GUICtrlMonthCal_GetMonthRange($hWnd, $bPartial)
+	Local $tRange = DllStructCreate($tagSYSTEMTIME)
+	DllStructSetData($tRange, "Year", DllStructGetData($tBuffer, "MinYear"))
+	DllStructSetData($tRange, "Month", DllStructGetData($tBuffer, "MinMonth"))
+	DllStructSetData($tRange, "DOW", DllStructGetData($tBuffer, "MinDOW"))
+	DllStructSetData($tRange, "Day", DllStructGetData($tBuffer, "MinDay"))
+	Return $tRange
+EndFunc   ;==>_GUICtrlMonthCal_GetMonthRangeMin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMonthRangeMinStr($hWnd, $sFormat = "%02d/%02d/%04d")
+	Local $tBuffer = _GUICtrlMonthCal_GetMonthRangeMin($hWnd)
+	Return StringFormat($sFormat, DllStructGetData($tBuffer, "Month"), DllStructGetData($tBuffer, "Day"), DllStructGetData($tBuffer, "Year"))
+EndFunc   ;==>_GUICtrlMonthCal_GetMonthRangeMinStr
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetMonthRangeSpan($hWnd, $bPartial = False)
+	Local $tBuffer = _GUICtrlMonthCal_GetMonthRange($hWnd, $bPartial)
+	Return DllStructGetData($tBuffer, "Span")
+EndFunc   ;==>_GUICtrlMonthCal_GetMonthRangeSpan
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetRange($hWnd)
+	Local $iRet
+
+	Local $tBuffer = DllStructCreate($tagMCRANGE)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			$iRet = _SendMessage($hWnd, $MCM_GETRANGE, 0, $tBuffer, 0, "wparam", "struct*")
+		Else
+			Local $iBuffer = DllStructGetSize($tBuffer)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+			$iRet = _SendMessage($hWnd, $MCM_GETRANGE, 0, $pMemory, 0, "wparam", "ptr")
+			_MemRead($tMemMap, $pMemory, $tBuffer, $iBuffer)
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		$iRet = GUICtrlSendMsg($hWnd, $MCM_GETRANGE, 0, DllStructGetPtr($tBuffer))
+	EndIf
+	DllStructSetData($tBuffer, "MinSet", BitAND($iRet, $GDTR_MIN) <> 0)
+	DllStructSetData($tBuffer, "MaxSet", BitAND($iRet, $GDTR_MAX) <> 0)
+	Return $tBuffer
+EndFunc   ;==>_GUICtrlMonthCal_GetRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetRangeMax($hWnd)
+	Local $tBuffer = _GUICtrlMonthCal_GetRange($hWnd)
+	Local $tRange = DllStructCreate($tagSYSTEMTIME)
+	DllStructSetData($tRange, "Year", DllStructGetData($tBuffer, "MaxYear"))
+	DllStructSetData($tRange, "Month", DllStructGetData($tBuffer, "MaxMonth"))
+	DllStructSetData($tRange, "DOW", DllStructGetData($tBuffer, "MaxDOW"))
+	DllStructSetData($tRange, "Day", DllStructGetData($tBuffer, "MaxDay"))
+	Return $tRange
+EndFunc   ;==>_GUICtrlMonthCal_GetRangeMax
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetRangeMaxStr($hWnd, $sFormat = "%02d/%02d/%04d")
+	Local $tBuffer = _GUICtrlMonthCal_GetRangeMax($hWnd)
+	Return StringFormat($sFormat, DllStructGetData($tBuffer, "Month"), DllStructGetData($tBuffer, "Day"), DllStructGetData($tBuffer, "Year"))
+EndFunc   ;==>_GUICtrlMonthCal_GetRangeMaxStr
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetRangeMin($hWnd)
+	Local $tBuffer = _GUICtrlMonthCal_GetRange($hWnd)
+	Local $tRange = DllStructCreate($tagSYSTEMTIME)
+	DllStructSetData($tRange, "Year", DllStructGetData($tBuffer, "MinYear"))
+	DllStructSetData($tRange, "Month", DllStructGetData($tBuffer, "MinMonth"))
+	DllStructSetData($tRange, "DOW", DllStructGetData($tBuffer, "MinDOW"))
+	DllStructSetData($tRange, "Day", DllStructGetData($tBuffer, "MinDay"))
+	Return $tRange
+EndFunc   ;==>_GUICtrlMonthCal_GetRangeMin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetRangeMinStr($hWnd, $sFormat = "%02d/%02d/%04d")
+	Local $tBuffer = _GUICtrlMonthCal_GetRangeMin($hWnd)
+	Return StringFormat($sFormat, DllStructGetData($tBuffer, "Month"), DllStructGetData($tBuffer, "Day"), DllStructGetData($tBuffer, "Year"))
+EndFunc   ;==>_GUICtrlMonthCal_GetRangeMinStr
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetSelRange($hWnd)
+	Local $iRet
+
+	Local $tBuffer = DllStructCreate($tagMCSELRANGE)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			$iRet = _SendMessage($hWnd, $MCM_GETSELRANGE, 0, $tBuffer, 0, "wparam", "ptr")
+		Else
+			Local $iBuffer = DllStructGetSize($tBuffer)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+			$iRet = _SendMessage($hWnd, $MCM_GETSELRANGE, 0, $pMemory, 0, "wparam", "ptr")
+			_MemRead($tMemMap, $pMemory, $tBuffer, $iBuffer)
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		$iRet = GUICtrlSendMsg($hWnd, $MCM_GETSELRANGE, 0, DllStructGetPtr($tBuffer))
+	EndIf
+	Return SetError($iRet = 0, 0, $tBuffer)
+EndFunc   ;==>_GUICtrlMonthCal_GetSelRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetSelRangeMax($hWnd)
+	Local $tBuffer = _GUICtrlMonthCal_GetSelRange($hWnd)
+	Local $tRange = DllStructCreate($tagSYSTEMTIME)
+	DllStructSetData($tRange, "Year", DllStructGetData($tBuffer, "MaxYear"))
+	DllStructSetData($tRange, "Month", DllStructGetData($tBuffer, "MaxMonth"))
+	DllStructSetData($tRange, "DOW", DllStructGetData($tBuffer, "MaxDOW"))
+	DllStructSetData($tRange, "Day", DllStructGetData($tBuffer, "MaxDay"))
+	Return $tRange
+EndFunc   ;==>_GUICtrlMonthCal_GetSelRangeMax
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetSelRangeMaxStr($hWnd, $sFormat = "%02d/%02d/%04d")
+	Local $tBuffer = _GUICtrlMonthCal_GetSelRangeMax($hWnd)
+	Return StringFormat($sFormat, DllStructGetData($tBuffer, "Month"), DllStructGetData($tBuffer, "Day"), DllStructGetData($tBuffer, "Year"))
+EndFunc   ;==>_GUICtrlMonthCal_GetSelRangeMaxStr
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetSelRangeMin($hWnd)
+	Local $tBuffer = _GUICtrlMonthCal_GetSelRange($hWnd)
+	Local $tRange = DllStructCreate($tagSYSTEMTIME)
+	DllStructSetData($tRange, "Year", DllStructGetData($tBuffer, "MinYear"))
+	DllStructSetData($tRange, "Month", DllStructGetData($tBuffer, "MinMonth"))
+	DllStructSetData($tRange, "DOW", DllStructGetData($tBuffer, "MinDOW"))
+	DllStructSetData($tRange, "Day", DllStructGetData($tBuffer, "MinDay"))
+	Return $tRange
+EndFunc   ;==>_GUICtrlMonthCal_GetSelRangeMin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetSelRangeMinStr($hWnd, $sFormat = "%02d/%02d/%04d")
+	Local $tBuffer = _GUICtrlMonthCal_GetSelRangeMin($hWnd)
+	Return StringFormat($sFormat, DllStructGetData($tBuffer, "Month"), DllStructGetData($tBuffer, "Day"), DllStructGetData($tBuffer, "Year"))
+EndFunc   ;==>_GUICtrlMonthCal_GetSelRangeMinStr
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetToday($hWnd)
+	Local $iRet
+
+	Local $tBuffer = DllStructCreate($tagSYSTEMTIME)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			$iRet = _SendMessage($hWnd, $MCM_GETTODAY, 0, $tBuffer, 0, "wparam", "ptr") <> 0
+		Else
+			Local $iBuffer = DllStructGetSize($tBuffer)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+			$iRet = _SendMessage($hWnd, $MCM_GETTODAY, 0, $pMemory, 0, "wparam", "ptr") <> 0
+			_MemRead($tMemMap, $pMemory, $tBuffer, $iBuffer)
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		$iRet = GUICtrlSendMsg($hWnd, $MCM_GETTODAY, 0, DllStructGetPtr($tBuffer)) <> 0
+	EndIf
+	Return SetError($iRet = 0, 0, $tBuffer)
+EndFunc   ;==>_GUICtrlMonthCal_GetToday
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetTodayStr($hWnd, $sFormat = "%02d/%02d/%04d")
+	Local $tBuffer = _GUICtrlMonthCal_GetToday($hWnd)
+	Return StringFormat($sFormat, DllStructGetData($tBuffer, "Month"), DllStructGetData($tBuffer, "Day"), DllStructGetData($tBuffer, "Year"))
+EndFunc   ;==>_GUICtrlMonthCal_GetTodayStr
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_GetUnicodeFormat($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $MCM_GETUNICODEFORMAT) <> 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $MCM_GETUNICODEFORMAT, 0, 0) <> 0
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_GetUnicodeFormat
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_HitTest($hWnd, $iX, $iY)
+	Local $tTest = DllStructCreate($tagMCHITTESTINFO)
+	Local $iTest = DllStructGetSize($tTest)
+	DllStructSetData($tTest, "Size", $iTest)
+	DllStructSetData($tTest, "X", $iX)
+	DllStructSetData($tTest, "Y", $iY)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			_SendMessage($hWnd, $MCM_HITTEST, 0, $tTest, 0, "wparam", "struct*")
+		Else
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iTest, $tMemMap)
+			_SendMessage($hWnd, $MCM_HITTEST, 0, $pMemory, 0, "wparam", "ptr")
+			_MemRead($tMemMap, $pMemory, $tTest, $iTest)
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		GUICtrlSendMsg($hWnd, $MCM_HITTEST, 0, DllStructGetPtr($tTest))
+	EndIf
+	Return $tTest
+EndFunc   ;==>_GUICtrlMonthCal_HitTest
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __GUICtrlMonthCal_Resize
+; Description ...: Adjusts the control size so that it is fully shown
+; Syntax.........: __GUICtrlMonthCal_Resize ( $hWnd [, $iX = -1 [, $iY = -1]] )
+; Parameters ....: $hWnd        - Handle to control
+;                  $iX          - Left position of calendar. If -1, the current position will be used
+;                  $iY          - Top position of calendar. If -1, the current position will be used
+; Return values .: None
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost
+; Remarks .......: This function is called internally by _GUICtrlMonthCal_Create and should not normally be called by the end user.
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __GUICtrlMonthCal_Resize($hWnd, $iX = -1, $iY = -1)
+	Local $iN = _GUICtrlMonthCal_GetMaxTodayWidth($hWnd)
+	Local $iH = _GUICtrlMonthCal_GetMinReqHeight($hWnd)
+	Local $iW = _GUICtrlMonthCal_GetMinReqWidth($hWnd)
+	If $iN > $iW Then $iW = $iN
+	If ($iX = -1) Or ($iY = -1) Then
+		Local $tRECT = _WinAPI_GetWindowRect($hWnd)
+		If $iX = -1 Then $iX = DllStructGetData($tRECT, "Left")
+		If $iY = -1 Then $iY = DllStructGetData($tRECT, "Top")
+	EndIf
+	;_WinAPI_SetWindowPos($hWnd, 0, $iX, $iY, $iX + $iW, $iY + $iH, $__MONTHCALCONSTANT_SWP_NOZORDER)
+	_WinAPI_SetWindowPos($hWnd, 0, $iX, $iY, $iW, $iH, $__MONTHCALCONSTANT_SWP_NOZORDER)
+EndFunc   ;==>__GUICtrlMonthCal_Resize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_SetCalendarBorder($hWnd, $iBorderSize = 4, $bSetBorder = True)
+	If IsHWnd($hWnd) Then
+		_SendMessage($hWnd, $MCM_SETCALENDARBORDER, $bSetBorder, $iBorderSize)
+	Else
+		GUICtrlSendMsg($hWnd, $MCM_SETCALENDARBORDER, $bSetBorder, $iBorderSize)
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_SetCalendarBorder
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_SetColor($hWnd, $iIndex, $iColor)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $MCM_SETCOLOR, $iIndex, $iColor)
+	Else
+		Return GUICtrlSendMsg($hWnd, $MCM_SETCOLOR, $iIndex, $iColor)
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_SetColor
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_SetCurSel($hWnd, $iYear, $iMonth, $iDay)
+	Local $iRet
+
+	Local $tBuffer = DllStructCreate($tagSYSTEMTIME)
+	DllStructSetData($tBuffer, "Month", $iMonth)
+	DllStructSetData($tBuffer, "Day", $iDay)
+	DllStructSetData($tBuffer, "Year", $iYear)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			$iRet = _SendMessage($hWnd, $MCM_SETCURSEL, 0, $tBuffer, 0, "wparam", "ptr")
+		Else
+			Local $iBuffer = DllStructGetSize($tBuffer)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+			_MemWrite($tMemMap, $tBuffer)
+			$iRet = _SendMessage($hWnd, $MCM_SETCURSEL, 0, $pMemory, 0, "wparam", "ptr")
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		$iRet = GUICtrlSendMsg($hWnd, $MCM_SETCURSEL, 0, DllStructGetPtr($tBuffer))
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlMonthCal_SetCurSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_SetDayState($hWnd, $aMasks)
+	Local $iRet
+
+	Local $iMasks = _GUICtrlMonthCal_GetMonthRangeSpan($hWnd, True)
+	Local $tBuffer = DllStructCreate("int;int;int")
+	For $iI = 0 To $iMasks - 1
+		DllStructSetData($tBuffer, $iI + 1, $aMasks[$iI])
+	Next
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			$iRet = _SendMessage($hWnd, $MCM_SETDAYSTATE, $iMasks, $tBuffer, 0, "wparam", "struct*")
+		Else
+			Local $iBuffer = DllStructGetSize($tBuffer)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+			_MemWrite($tMemMap, $tBuffer)
+			$iRet = _SendMessage($hWnd, $MCM_SETDAYSTATE, $iMasks, $pMemory, 0, "wparam", "ptr")
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		$iRet = GUICtrlSendMsg($hWnd, $MCM_SETDAYSTATE, $iMasks, DllStructGetPtr($tBuffer))
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlMonthCal_SetDayState
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_SetFirstDOW($hWnd, $sDay)
+	Local $i_Day
+	If $sDay >= 0 Or $sDay <= 6 Then
+		$i_Day = $sDay
+	ElseIf StringInStr("MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY", $sDay) Then
+		Switch StringUpper($sDay)
+			Case "MONDAY"
+				$i_Day = 0
+			Case "TUESDAY"
+				$i_Day = 1
+			Case "WEDNESDAY"
+				$i_Day = 2
+			Case "THURSDAY"
+				$i_Day = 3
+			Case "FRIDAY"
+				$i_Day = 4
+			Case "SATURDAY"
+				$i_Day = 5
+			Case "SUNDAY"
+				$i_Day = 6
+		EndSwitch
+	Else
+		Return SetError(-1, -1, -1)
+	EndIf
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $MCM_SETFIRSTDAYOFWEEK, 0, $i_Day)
+	Else
+		Return GUICtrlSendMsg($hWnd, $MCM_SETFIRSTDAYOFWEEK, 0, $i_Day)
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_SetFirstDOW
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_SetMaxSelCount($hWnd, $iMaxSel)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $MCM_SETMAXSELCOUNT, $iMaxSel) <> 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $MCM_SETMAXSELCOUNT, $iMaxSel, 0) <> 0
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_SetMaxSelCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_SetMonthDelta($hWnd, $iDelta)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $MCM_SETMONTHDELTA, $iDelta)
+	Else
+		Return GUICtrlSendMsg($hWnd, $MCM_SETMONTHDELTA, $iDelta, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_SetMonthDelta
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_SetRange($hWnd, $iMinYear, $iMinMonth, $iMinDay, $iMaxYear, $iMaxMonth, $iMaxDay)
+	Local $iRet
+
+	Local $tRange = DllStructCreate($tagMCRANGE)
+	Local $iFlags = BitOR($GDTR_MIN, $GDTR_MAX)
+	DllStructSetData($tRange, "MinYear", $iMinYear)
+	DllStructSetData($tRange, "MinMonth", $iMinMonth)
+	DllStructSetData($tRange, "MinDay", $iMinDay)
+	DllStructSetData($tRange, "MaxYear", $iMaxYear)
+	DllStructSetData($tRange, "MaxMonth", $iMaxMonth)
+	DllStructSetData($tRange, "MaxDay", $iMaxDay)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			$iRet = _SendMessage($hWnd, $MCM_SETRANGE, $iFlags, $tRange, 0, "wparam", "ptr")
+		Else
+			Local $iRange = DllStructGetSize($tRange)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iRange, $tMemMap)
+			_MemWrite($tMemMap, $tRange)
+			$iRet = _SendMessage($hWnd, $MCM_SETRANGE, $iFlags, $pMemory, 0, "wparam", "ptr")
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		$iRet = GUICtrlSendMsg($hWnd, $MCM_SETRANGE, $iFlags, DllStructGetPtr($tRange))
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlMonthCal_SetRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_SetSelRange($hWnd, $iMinYear, $iMinMonth, $iMinDay, $iMaxYear, $iMaxMonth, $iMaxDay)
+	Local $tBuffer = DllStructCreate($tagMCRANGE)
+	DllStructSetData($tBuffer, "MinYear", $iMinYear)
+	DllStructSetData($tBuffer, "MinMonth", $iMinMonth)
+	DllStructSetData($tBuffer, "MinDay", $iMinDay)
+	DllStructSetData($tBuffer, "MaxYear", $iMaxYear)
+	DllStructSetData($tBuffer, "MaxMonth", $iMaxMonth)
+	DllStructSetData($tBuffer, "MaxDay", $iMaxDay)
+	Local $iRet
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			$iRet = _SendMessage($hWnd, $MCM_SETSELRANGE, 0, $tBuffer, 0, "wparam", "struct*")
+		Else
+			Local $iBuffer = DllStructGetSize($tBuffer)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+			_MemWrite($tMemMap, $tBuffer)
+			$iRet = _SendMessage($hWnd, $MCM_SETSELRANGE, 0, $pMemory, 0, "wparam", "ptr")
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		$iRet = GUICtrlSendMsg($hWnd, $MCM_SETSELRANGE, 0, DllStructGetPtr($tBuffer))
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlMonthCal_SetSelRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_SetToday($hWnd, $iYear, $iMonth, $iDay)
+	Local $tBuffer = DllStructCreate($tagSYSTEMTIME)
+	DllStructSetData($tBuffer, "Month", $iMonth)
+	DllStructSetData($tBuffer, "Day", $iDay)
+	DllStructSetData($tBuffer, "Year", $iYear)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hMCLastWnd) Then
+			_SendMessage($hWnd, $MCM_SETTODAY, 0, $tBuffer, 0, "wparam", "struct*")
+		Else
+			Local $iBuffer = DllStructGetSize($tBuffer)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+			_MemWrite($tMemMap, $tBuffer)
+			_SendMessage($hWnd, $MCM_SETTODAY, 0, $pMemory, 0, "wparam", "ptr")
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		GUICtrlSendMsg($hWnd, $MCM_SETTODAY, 0, DllStructGetPtr($tBuffer))
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_SetToday
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlMonthCal_SetUnicodeFormat($hWnd, $bUnicode = False)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $MCM_SETUNICODEFORMAT, $bUnicode) <> 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $MCM_SETUNICODEFORMAT, $bUnicode, 0) <> 0
+	EndIf
+EndFunc   ;==>_GUICtrlMonthCal_SetUnicodeFormat

ファイルの差分が大きいため隠しています
+ 1312 - 0
include/GuiReBar.au3


ファイルの差分が大きいため隠しています
+ 3778 - 0
include/GuiRichEdit_En.au3


+ 450 - 0
include/GuiScrollBars.au3

@@ -0,0 +1,450 @@
+#include-once
+
+#include "ScrollbarsConstants.au3"
+#include "StructureConstants.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: ScrollBar
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with ScrollBar management.
+;                  A scroll bar consists of a shaded shaft with an arrow button at each end and a scroll box (sometimes called a thumb)
+;                  between the arrow buttons. A scroll bar represents the overall length or width of a data object in a window's client
+;                  area, the scroll box represents the portion of the object that is visible in the client area. The position of the
+;                  scroll box changes whenever the user scrolls a data object to display a different portion of it. The system also adjusts
+;                  the size of a scroll bar's scroll box so that it indicates what portion of the entire data object is currently visible
+;                  in the window. If most of the object is visible, the scroll box occupies most of the scroll bar shaft. Similarly,
+;                  if only a small portion of the object is visible, the scroll box occupies a small part of the scroll bar shaft.
+; Author(s) .....: Gary Frost
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+; 0 = hwnd;1 = xClientMax;2 cxChar;3 = cyChar;4 cxClient;5 = cyClient,6 = iHMax;7 = iVMax
+Global $__g_aSB_WindowInfo[1][8]
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUIScrollBars_EnableScrollBar
+; _GUIScrollBars_GetScrollBarInfoEx
+; _GUIScrollBars_GetScrollBarRect
+; _GUIScrollBars_GetScrollBarRGState
+; _GUIScrollBars_GetScrollBarXYLineButton
+; _GUIScrollBars_GetScrollBarXYThumbTop
+; _GUIScrollBars_GetScrollBarXYThumbBottom
+; _GUIScrollBars_GetScrollInfo
+; _GUIScrollBars_GetScrollInfoEx
+; _GUIScrollBars_GetScrollInfoPage
+; _GUIScrollBars_GetScrollInfoPos
+; _GUIScrollBars_GetScrollInfoMin
+; _GUIScrollBars_GetScrollInfoMax
+; _GUIScrollBars_GetScrollInfoTrackPos
+; _GUIScrollBars_GetScrollPos
+; _GUIScrollBars_GetScrollRange
+; _GUIScrollBars_Init
+; _GUIScrollBars_ScrollWindow
+; _GUIScrollBars_SetScrollInfo
+; _GUIScrollBars_SetScrollInfoMin
+; _GUIScrollBars_SetScrollInfoMax
+; _GUIScrollBars_SetScrollInfoPage
+; _GUIScrollBars_SetScrollInfoPos
+; _GUIScrollBars_SetScrollRange
+; _GUIScrollBars_ShowScrollBar
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_EnableScrollBar($hWnd, $iSBflags = $SB_BOTH, $iArrows = $ESB_ENABLE_BOTH)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, False)
+	Local $aResult = DllCall("user32.dll", "bool", "EnableScrollBar", "hwnd", $hWnd, "uint", $iSBflags, "uint", $iArrows)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0]
+EndFunc   ;==>_GUIScrollBars_EnableScrollBar
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollBarInfoEx($hWnd, $iObject)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, 0)
+	Local $tSCROLLBARINFO = DllStructCreate($tagSCROLLBARINFO)
+	DllStructSetData($tSCROLLBARINFO, "cbSize", DllStructGetSize($tSCROLLBARINFO))
+	Local $aResult = DllCall("user32.dll", "bool", "GetScrollBarInfo", "hwnd", $hWnd, "long", $iObject, "struct*", $tSCROLLBARINFO)
+	If @error Then Return SetError(@error, @extended, 0)
+	Return SetExtended($aResult[0], $tSCROLLBARINFO)
+EndFunc   ;==>_GUIScrollBars_GetScrollBarInfoEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollBarRect($hWnd, $iObject)
+	Local $aRect[4]
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, 0)
+	Local $tSCROLLBARINFO = _GUIScrollBars_GetScrollBarInfoEx($hWnd, $iObject)
+	If @error Then Return SetError(@error, @extended, 0)
+	$aRect[0] = DllStructGetData($tSCROLLBARINFO, "Left")
+	$aRect[1] = DllStructGetData($tSCROLLBARINFO, "Top")
+	$aRect[2] = DllStructGetData($tSCROLLBARINFO, "Right")
+	$aRect[3] = DllStructGetData($tSCROLLBARINFO, "Bottom")
+	Return $aRect
+EndFunc   ;==>_GUIScrollBars_GetScrollBarRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollBarRGState($hWnd, $iObject)
+	Local $aRGState[6]
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, 0)
+	Local $tSCROLLBARINFO = _GUIScrollBars_GetScrollBarInfoEx($hWnd, $iObject)
+	If @error Then Return SetError(@error, @extended, 0)
+	For $x = 0 To 5
+		$aRGState[$x] = DllStructGetData($tSCROLLBARINFO, "rgstate", $x + 1)
+	Next
+	Return $aRGState
+EndFunc   ;==>_GUIScrollBars_GetScrollBarRGState
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollBarXYLineButton($hWnd, $iObject)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
+	Local $tSCROLLBARINFO = _GUIScrollBars_GetScrollBarInfoEx($hWnd, $iObject)
+	If @error Then Return SetError(@error, @extended, -1)
+	Return DllStructGetData($tSCROLLBARINFO, "dxyLineButton")
+EndFunc   ;==>_GUIScrollBars_GetScrollBarXYLineButton
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollBarXYThumbTop($hWnd, $iObject)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
+	Local $tSCROLLBARINFO = _GUIScrollBars_GetScrollBarInfoEx($hWnd, $iObject)
+	If @error Then Return SetError(@error, @extended, -1)
+	Return DllStructGetData($tSCROLLBARINFO, "xyThumbTop")
+EndFunc   ;==>_GUIScrollBars_GetScrollBarXYThumbTop
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollBarXYThumbBottom($hWnd, $iObject)
+	If Not IsHWnd($hWnd) Then Return SetError(-1, -1, -1)
+	Local $tSCROLLBARINFO = _GUIScrollBars_GetScrollBarInfoEx($hWnd, $iObject)
+	If @error Then Return SetError(-1, -1, -1)
+	Return DllStructGetData($tSCROLLBARINFO, "xyThumbBottom")
+EndFunc   ;==>_GUIScrollBars_GetScrollBarXYThumbBottom
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollInfo($hWnd, $iBar, ByRef $tSCROLLINFO)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, False)
+	Local $aResult = DllCall("user32.dll", "bool", "GetScrollInfo", "hwnd", $hWnd, "int", $iBar, "struct*", $tSCROLLINFO)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0]
+EndFunc   ;==>_GUIScrollBars_GetScrollInfo
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, 0)
+	Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO)
+	DllStructSetData($tSCROLLINFO, "cbSize", DllStructGetSize($tSCROLLINFO))
+	DllStructSetData($tSCROLLINFO, "fMask", $SIF_ALL)
+	If Not _GUIScrollBars_GetScrollInfo($hWnd, $iBar, $tSCROLLINFO) Then Return SetError(@error, @extended, 0)
+	Return $tSCROLLINFO
+EndFunc   ;==>_GUIScrollBars_GetScrollInfoEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollInfoPage($hWnd, $iBar)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
+	Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
+	If @error Then Return SetError(@error, @extended, -1)
+	Return DllStructGetData($tSCROLLINFO, "nPage")
+EndFunc   ;==>_GUIScrollBars_GetScrollInfoPage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollInfoPos($hWnd, $iBar)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
+	Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
+	If @error Then Return SetError(@error, @extended, -1)
+	Return DllStructGetData($tSCROLLINFO, "nPos")
+EndFunc   ;==>_GUIScrollBars_GetScrollInfoPos
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollInfoMin($hWnd, $iBar)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
+	Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
+	If @error Then Return SetError(@error, @extended, -1)
+	Return DllStructGetData($tSCROLLINFO, "nMin")
+EndFunc   ;==>_GUIScrollBars_GetScrollInfoMin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollInfoMax($hWnd, $iBar)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
+	Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
+	If @error Then Return SetError(@error, @extended, -1)
+	Return DllStructGetData($tSCROLLINFO, "nMax")
+EndFunc   ;==>_GUIScrollBars_GetScrollInfoMax
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollInfoTrackPos($hWnd, $iBar)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
+	Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
+	If @error Then Return SetError(@error, @extended, -1)
+	Return DllStructGetData($tSCROLLINFO, "nTrackPos")
+EndFunc   ;==>_GUIScrollBars_GetScrollInfoTrackPos
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollPos($hWnd, $iBar)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
+	Local $aResult = DllCall("user32.dll", "int", "GetScrollPos", "hwnd", $hWnd, "int", $iBar)
+	If @error Then Return SetError(@error, @extended, -1)
+	Return $aResult[0]
+EndFunc   ;==>_GUIScrollBars_GetScrollPos
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_GetScrollRange($hWnd, $iBar)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
+	Local $aResult = DllCall("user32.dll", "bool", "GetScrollRange", "hwnd", $hWnd, "int", $iBar, "int*", 0, "int*", 0)
+	If @error Then Return SetError(@error, @extended, -1)
+	Local $aMin_Max[2]
+	$aMin_Max[0] = $aResult[3]
+	$aMin_Max[1] = $aResult[4]
+	Return SetExtended($aResult[0], $aMin_Max)
+EndFunc   ;==>_GUIScrollBars_GetScrollRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_Init($hWnd, $iMaxH = -1, $iMaxV = -1)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, 0)
+	If $__g_aSB_WindowInfo[0][0] <> 0 Then ReDim $__g_aSB_WindowInfo[UBound($__g_aSB_WindowInfo) + 1][8]
+
+	Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO)
+	Local $tRECT = DllStructCreate($tagRECT)
+
+	Local $iIndex = UBound($__g_aSB_WindowInfo) - 1
+	Local $iError, $iExtended
+
+	$__g_aSB_WindowInfo[$iIndex][0] = $hWnd
+	$__g_aSB_WindowInfo[$iIndex][1] = $iMaxH
+	$__g_aSB_WindowInfo[$iIndex][6] = $iMaxH
+	$__g_aSB_WindowInfo[$iIndex][7] = $iMaxV
+	If $iMaxV = -1 Then $__g_aSB_WindowInfo[$iIndex][7] = 27
+
+	Local $hDC = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hWnd)
+	If @error Then Return SetError(@error, @extended)
+	$hDC = $hDC[0]
+
+	Local $tTEXTMETRIC = DllStructCreate($tagTEXTMETRIC)
+
+	DllStructSetData($tSCROLLINFO, "cbSize", DllStructGetSize($tSCROLLINFO))
+
+	DllCall("gdi32.dll", "bool", "GetTextMetricsW", "handle", $hDC, "struct*", $tTEXTMETRIC)
+	If @error Then
+		$iError = @error
+		$iExtended = @extended
+	EndIf
+
+	DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $hWnd, "handle", $hDC)
+	; Skip @error test as the results don't matter.
+
+	; Test previous error from GetTextMetrics call.
+	If $iError Then Return SetError($iError, $iExtended)
+
+	Local $iUpperX, $iXAmount = DllStructGetData($tTEXTMETRIC, "tmAveCharWidth")
+	If BitAND(DllStructGetData($tTEXTMETRIC, "tmPitchAndFamily"), 1) Then ; $TMPF_FIXED_PITCH
+		$iUpperX = 3 * $iXAmount / 2
+	Else
+		$iUpperX = 2 * $iXAmount / 2
+	EndIf
+
+	Local $iYAmount = DllStructGetData($tTEXTMETRIC, "tmHeight") + DllStructGetData($tTEXTMETRIC, "tmExternalLeading")
+
+	If $iMaxH = -1 Then $__g_aSB_WindowInfo[$iIndex][1] = 48 * $iXAmount + 12 * $iUpperX
+	$__g_aSB_WindowInfo[$iIndex][2] = $iXAmount
+	$__g_aSB_WindowInfo[$iIndex][3] = $iYAmount
+
+	_GUIScrollBars_ShowScrollBar($hWnd, $SB_HORZ, False)
+	_GUIScrollBars_ShowScrollBar($hWnd, $SB_VERT, False)
+	_GUIScrollBars_ShowScrollBar($hWnd, $SB_HORZ)
+	_GUIScrollBars_ShowScrollBar($hWnd, $SB_VERT)
+
+	DllCall("user32.dll", "bool", "GetClientRect", "hwnd", $hWnd, "struct*", $tRECT)
+	If @error Then Return SetError(@error, @extended)
+
+	Local $iClientX = DllStructGetData($tRECT, "Right") - DllStructGetData($tRECT, "Left")
+	Local $iClientY = DllStructGetData($tRECT, "Bottom") - DllStructGetData($tRECT, "Top")
+	$__g_aSB_WindowInfo[$iIndex][4] = $iClientX
+	$__g_aSB_WindowInfo[$iIndex][5] = $iClientY
+
+	$tSCROLLINFO = DllStructCreate($tagSCROLLINFO)
+
+	; Set the vertical scrolling range and page size
+	DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE))
+	DllStructSetData($tSCROLLINFO, "nMin", 0)
+	DllStructSetData($tSCROLLINFO, "nMax", $__g_aSB_WindowInfo[$iIndex][7])
+	DllStructSetData($tSCROLLINFO, "nPage", $iClientY / $iYAmount)
+	_GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
+
+	; Set the horizontal scrolling range and page size
+	DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE))
+	DllStructSetData($tSCROLLINFO, "nMin", 0)
+	DllStructSetData($tSCROLLINFO, "nMax", 2 + $__g_aSB_WindowInfo[$iIndex][1] / $iXAmount)
+	DllStructSetData($tSCROLLINFO, "nPage", $iClientX / $iXAmount)
+	_GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
+EndFunc   ;==>_GUIScrollBars_Init
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_ScrollWindow($hWnd, $iXAmount, $iYAmount)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, False)
+	Local $aResult = DllCall("user32.dll", "bool", "ScrollWindow", "hwnd", $hWnd, "int", $iXAmount, "int", $iYAmount, "ptr", 0, "ptr", 0)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0]
+EndFunc   ;==>_GUIScrollBars_ScrollWindow
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_SetScrollInfo($hWnd, $iBar, $tSCROLLINFO, $bRedraw = True)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
+	DllStructSetData($tSCROLLINFO, "cbSize", DllStructGetSize($tSCROLLINFO))
+	Local $aResult = DllCall("user32.dll", "int", "SetScrollInfo", "hwnd", $hWnd, "int", $iBar, "struct*", $tSCROLLINFO, "bool", $bRedraw)
+	If @error Then Return SetError(@error, @extended, -1)
+	Return $aResult[0]
+EndFunc   ;==>_GUIScrollBars_SetScrollInfo
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_SetScrollInfoMin($hWnd, $iBar, $iMin)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, False)
+	Local $aRange = _GUIScrollBars_GetScrollRange($hWnd, $iBar)
+	_GUIScrollBars_SetScrollRange($hWnd, $iBar, $iMin, $aRange[1])
+	Local $aRange_check = _GUIScrollBars_GetScrollRange($hWnd, $iBar)
+	; invalid range check if invalid reset to previous values
+	If $aRange[1] <> $aRange_check[1] Or $iMin <> $aRange_check[0] Then
+		_GUIScrollBars_SetScrollRange($hWnd, $iBar, $aRange[0], $aRange[1])
+		Return False
+	EndIf
+	Return True
+EndFunc   ;==>_GUIScrollBars_SetScrollInfoMin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_SetScrollInfoMax($hWnd, $iBar, $iMax)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, False)
+	Local $aRange = _GUIScrollBars_GetScrollRange($hWnd, $iBar)
+	_GUIScrollBars_SetScrollRange($hWnd, $iBar, $aRange[0], $iMax)
+	Local $aRange_check = _GUIScrollBars_GetScrollRange($hWnd, $iBar)
+	; invalid range check if invalid reset to previous values
+	If $aRange[0] <> $aRange_check[0] Or $iMax <> $aRange_check[1] Then
+		_GUIScrollBars_SetScrollRange($hWnd, $iBar, $aRange[0], $aRange[1])
+		Return False
+	EndIf
+	Return True
+EndFunc   ;==>_GUIScrollBars_SetScrollInfoMax
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_SetScrollInfoPage($hWnd, $iBar, $iPage)
+	If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
+	Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO)
+	DllStructSetData($tSCROLLINFO, "fMask", $SIF_PAGE)
+	DllStructSetData($tSCROLLINFO, "nPage", $iPage)
+	Return _GUIScrollBars_SetScrollInfo($hWnd, $iBar, $tSCROLLINFO)
+EndFunc   ;==>_GUIScrollBars_SetScrollInfoPage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_SetScrollInfoPos($hWnd, $iBar, $iPos)
+	Local $iIndex = -1, $iYAmount, $iXAmount
+
+	For $x = 0 To UBound($__g_aSB_WindowInfo) - 1
+		If $__g_aSB_WindowInfo[$x][0] = $hWnd Then
+			$iIndex = $x
+			$iXAmount = $__g_aSB_WindowInfo[$iIndex][2]
+			$iYAmount = $__g_aSB_WindowInfo[$iIndex][3]
+			ExitLoop
+		EndIf
+	Next
+	If $iIndex = -1 Then Return 0
+
+	; Save the position for comparison later on
+	Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
+	Local $iPosXY = DllStructGetData($tSCROLLINFO, "nPos")
+
+	DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
+	DllStructSetData($tSCROLLINFO, "nPos", $iPos)
+	_GUIScrollBars_SetScrollInfo($hWnd, $iBar, $tSCROLLINFO)
+	_GUIScrollBars_GetScrollInfo($hWnd, $iBar, $tSCROLLINFO)
+	;// If the position has changed, scroll the window and update it
+	$iPos = DllStructGetData($tSCROLLINFO, "nPos")
+	If $iBar = $SB_HORZ Then
+		If ($iPos <> $iPosXY) Then _GUIScrollBars_ScrollWindow($hWnd, $iXAmount * ($iPosXY - $iPos), 0)
+	Else
+		If ($iPos <> $iPosXY) Then _GUIScrollBars_ScrollWindow($hWnd, 0, $iYAmount * ($iPosXY - $iPos))
+	EndIf
+EndFunc   ;==>_GUIScrollBars_SetScrollInfoPos
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_SetScrollRange($hWnd, $iBar, $iMinPos, $iMaxPos)
+	Local $aResult = DllCall("user32.dll", "bool", "SetScrollRange", "hwnd", $hWnd, "int", $iBar, "int", $iMinPos, "int", $iMaxPos, "bool", True)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0]
+EndFunc   ;==>_GUIScrollBars_SetScrollRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIScrollBars_ShowScrollBar($hWnd, $iBar, $bShow = True)
+	Local $aResult = DllCall("user32.dll", "bool", "ShowScrollBar", "hwnd", $hWnd, "int", $iBar, "bool", $bShow)
+	If @error Then Return SetError(@error, @extended, False)
+	Return $aResult[0]
+EndFunc   ;==>_GUIScrollBars_ShowScrollBar

+ 535 - 0
include/GuiSlider.au3

@@ -0,0 +1,535 @@
+#include-once
+
+#include "SendMessage.au3"
+#include "SliderConstants.au3"
+#include "StructureConstants.au3"
+#include "UDFGlobalID.au3"
+#include "WinAPIConv.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Slider
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with Slider Control "Trackbar" management.
+; Author(s) .....: Gary Frost (gafrost)
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hSLastWnd
+
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__SLIDERCONSTANT_ClassName = "msctls_trackbar32"
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUICtrlSlider_ClearSel
+; _GUICtrlSlider_ClearTics
+; _GUICtrlSlider_Create
+; _GUICtrlSlider_Destroy
+; _GUICtrlSlider_GetBuddy
+; _GUICtrlSlider_GetChannelRect
+; _GUICtrlSlider_GetChannelRectEx
+; _GUICtrlSlider_GetLineSize
+; _GUICtrlSlider_GetLogicalTics
+; _GUICtrlSlider_GetNumTics
+; _GUICtrlSlider_GetPageSize
+; _GUICtrlSlider_GetPos
+; _GUICtrlSlider_GetRange
+; _GUICtrlSlider_GetRangeMax
+; _GUICtrlSlider_GetRangeMin
+; _GUICtrlSlider_GetSel
+; _GUICtrlSlider_GetSelEnd
+; _GUICtrlSlider_GetSelStart
+; _GUICtrlSlider_GetThumbLength
+; _GUICtrlSlider_GetThumbRect
+; _GUICtrlSlider_GetThumbRectEx
+; _GUICtrlSlider_GetTic
+; _GUICtrlSlider_GetTicPos
+; _GUICtrlSlider_GetToolTips
+; _GUICtrlSlider_GetUnicodeFormat
+; _GUICtrlSlider_SetBuddy
+; _GUICtrlSlider_SetLineSize
+; _GUICtrlSlider_SetPageSize
+; _GUICtrlSlider_SetPos
+; _GUICtrlSlider_SetRange
+; _GUICtrlSlider_SetRangeMax
+; _GUICtrlSlider_SetRangeMin
+; _GUICtrlSlider_SetSel
+; _GUICtrlSlider_SetSelEnd
+; _GUICtrlSlider_SetSelStart
+; _GUICtrlSlider_SetThumbLength
+; _GUICtrlSlider_SetTic
+; _GUICtrlSlider_SetTicFreq
+; _GUICtrlSlider_SetTipSide
+; _GUICtrlSlider_SetToolTips
+; _GUICtrlSlider_SetUnicodeFormat
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_ClearSel($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_CLEARSEL, True)
+EndFunc   ;==>_GUICtrlSlider_ClearSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_ClearTics($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_CLEARTICS, True)
+EndFunc   ;==>_GUICtrlSlider_ClearTics
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_Create($hWnd, $iX, $iY, $iWidth = 100, $iHeight = 20, $iStyle = $TBS_AUTOTICKS, $iExStyle = 0x00000000)
+	If Not IsHWnd($hWnd) Then Return SetError(1, 0, 0) ; Invalid Window handle for _GUICtrlSlider_Create 1st parameter
+
+	If $iWidth = -1 Then $iWidth = 100
+	If $iHeight = -1 Then $iHeight = 20
+	If $iStyle = -1 Then $iStyle = $TBS_AUTOTICKS
+	If $iExStyle = -1 Then $iExStyle = 0x00000000
+
+	$iStyle = BitOR($iStyle, $__UDFGUICONSTANT_WS_CHILD, $__UDFGUICONSTANT_WS_VISIBLE)
+
+	Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	Local $hSlider = _WinAPI_CreateWindowEx($iExStyle, $__SLIDERCONSTANT_ClassName, "", $iStyle, $iX, $iY, $iWidth, $iHeight, $hWnd, $nCtrlID)
+	_SendMessage($hSlider, $TBM_SETRANGE, True, _WinAPI_MakeLong(0, 100));  // min. & max. positions
+	_GUICtrlSlider_SetTicFreq($hSlider, 5)
+	Return $hSlider
+EndFunc   ;==>_GUICtrlSlider_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_Destroy(ByRef $hWnd)
+	If Not _WinAPI_IsClassName($hWnd, $__SLIDERCONSTANT_ClassName) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hSLastWnd) Then
+			Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
+			Local $hParent = _WinAPI_GetParent($hWnd)
+			$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+			Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
+			If Not $iRet Then
+				; can check for errors here if needed, for debug
+			EndIf
+		Else
+			; Not Allowed to Destroy Other Applications Control(s)
+			Return SetError(1, 1, False)
+		EndIf
+	Else
+		$iDestroyed = GUICtrlDelete($hWnd)
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUICtrlSlider_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetBuddy($hWnd, $bLocation)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETBUDDY, $bLocation, 0, 0, "wparam", "lparam", "hwnd")
+EndFunc   ;==>_GUICtrlSlider_GetBuddy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetChannelRect($hWnd)
+	Local $tRECT = _GUICtrlSlider_GetChannelRectEx($hWnd)
+	Local $aRect[4]
+	$aRect[0] = DllStructGetData($tRECT, "Left")
+	$aRect[1] = DllStructGetData($tRECT, "Top")
+	$aRect[2] = DllStructGetData($tRECT, "Right")
+	$aRect[3] = DllStructGetData($tRECT, "Bottom")
+	Return $aRect
+EndFunc   ;==>_GUICtrlSlider_GetChannelRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetChannelRectEx($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $tRECT = DllStructCreate($tagRECT)
+	_SendMessage($hWnd, $TBM_GETCHANNELRECT, 0, $tRECT, 0, "wparam", "struct*")
+	Return $tRECT
+EndFunc   ;==>_GUICtrlSlider_GetChannelRectEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetLineSize($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETLINESIZE)
+EndFunc   ;==>_GUICtrlSlider_GetLineSize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetLogicalTics($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $iArraySize = _GUICtrlSlider_GetNumTics($hWnd) - 2
+	Local $aTics[$iArraySize]
+
+	Local $pArray = _SendMessage($hWnd, $TBM_GETPTICS)
+	If @error Then Return SetError(@error, @extended, $aTics)
+	Local $tArray = DllStructCreate("dword[" & $iArraySize & "]", $pArray)
+	For $x = 1 To $iArraySize
+		$aTics[$x - 1] = _GUICtrlSlider_GetTicPos($hWnd, DllStructGetData($tArray, 1, $x))
+	Next
+	Return $aTics
+EndFunc   ;==>_GUICtrlSlider_GetLogicalTics
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetNumTics($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETNUMTICS)
+EndFunc   ;==>_GUICtrlSlider_GetNumTics
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetPageSize($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETPAGESIZE)
+EndFunc   ;==>_GUICtrlSlider_GetPageSize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetPos($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETPOS)
+EndFunc   ;==>_GUICtrlSlider_GetPos
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetRange($hWnd)
+	Local $aMinMax[2]
+	$aMinMax[0] = _GUICtrlSlider_GetRangeMin($hWnd)
+	$aMinMax[1] = _GUICtrlSlider_GetRangeMax($hWnd)
+	Return $aMinMax
+EndFunc   ;==>_GUICtrlSlider_GetRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetRangeMax($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETRANGEMAX)
+EndFunc   ;==>_GUICtrlSlider_GetRangeMax
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetRangeMin($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETRANGEMIN)
+EndFunc   ;==>_GUICtrlSlider_GetRangeMin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetSel($hWnd)
+	Local $aSelStartEnd[2]
+	$aSelStartEnd[0] = _GUICtrlSlider_GetSelStart($hWnd)
+	$aSelStartEnd[1] = _GUICtrlSlider_GetSelEnd($hWnd)
+
+	Return $aSelStartEnd
+EndFunc   ;==>_GUICtrlSlider_GetSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetSelEnd($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETSELEND)
+EndFunc   ;==>_GUICtrlSlider_GetSelEnd
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetSelStart($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETSELSTART)
+EndFunc   ;==>_GUICtrlSlider_GetSelStart
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetThumbLength($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETTHUMBLENGTH)
+EndFunc   ;==>_GUICtrlSlider_GetThumbLength
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetThumbRect($hWnd)
+	Local $tRECT = _GUICtrlSlider_GetThumbRectEx($hWnd)
+	Local $aRect[4]
+	$aRect[0] = DllStructGetData($tRECT, "Left")
+	$aRect[1] = DllStructGetData($tRECT, "Top")
+	$aRect[2] = DllStructGetData($tRECT, "Right")
+	$aRect[3] = DllStructGetData($tRECT, "Bottom")
+	Return $aRect
+EndFunc   ;==>_GUICtrlSlider_GetThumbRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetThumbRectEx($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $tRECT = DllStructCreate($tagRECT)
+	_SendMessage($hWnd, $TBM_GETTHUMBRECT, 0, $tRECT, 0, "wparam", "struct*")
+	Return $tRECT
+EndFunc   ;==>_GUICtrlSlider_GetThumbRectEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetTic($hWnd, $iTic)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETTIC, $iTic)
+EndFunc   ;==>_GUICtrlSlider_GetTic
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetTicPos($hWnd, $iTic)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETTICPOS, $iTic)
+EndFunc   ;==>_GUICtrlSlider_GetTicPos
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetToolTips($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETTOOLTIPS, 0, 0, 0, "wparam", "lparam", "hwnd")
+EndFunc   ;==>_GUICtrlSlider_GetToolTips
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_GetUnicodeFormat($hWnd)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_GETUNICODEFORMAT) <> 0
+EndFunc   ;==>_GUICtrlSlider_GetUnicodeFormat
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetBuddy($hWnd, $bLocation, $hBuddy)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	If Not IsHWnd($hBuddy) Then $hBuddy = GUICtrlGetHandle($hBuddy)
+
+	Return _SendMessage($hWnd, $TBM_SETBUDDY, $bLocation, $hBuddy, 0, "wparam", "hwnd", "hwnd")
+EndFunc   ;==>_GUICtrlSlider_SetBuddy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetLineSize($hWnd, $iLineSize)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_SETLINESIZE, 0, $iLineSize)
+EndFunc   ;==>_GUICtrlSlider_SetLineSize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetPageSize($hWnd, $iPageSize)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_SETPAGESIZE, 0, $iPageSize)
+EndFunc   ;==>_GUICtrlSlider_SetPageSize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetPos($hWnd, $iPosition)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_SETPOS, True, $iPosition)
+EndFunc   ;==>_GUICtrlSlider_SetPos
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetRange($hWnd, $iMinimum, $iMaximum)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_SETRANGE, True, _WinAPI_MakeLong($iMinimum, $iMaximum))
+EndFunc   ;==>_GUICtrlSlider_SetRange
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetRangeMax($hWnd, $iMaximum)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_SETRANGEMAX, True, $iMaximum)
+EndFunc   ;==>_GUICtrlSlider_SetRangeMax
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetRangeMin($hWnd, $iMinimum)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_SETRANGEMIN, True, $iMinimum)
+EndFunc   ;==>_GUICtrlSlider_SetRangeMin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetSel($hWnd, $iMinimum, $iMaximum)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_SETSEL, True, _WinAPI_MakeLong($iMinimum, $iMaximum))
+EndFunc   ;==>_GUICtrlSlider_SetSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetSelEnd($hWnd, $iMaximum)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_SETSELEND, True, $iMaximum)
+EndFunc   ;==>_GUICtrlSlider_SetSelEnd
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetSelStart($hWnd, $iMinimum)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_SETSELSTART, True, $iMinimum)
+EndFunc   ;==>_GUICtrlSlider_SetSelStart
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetThumbLength($hWnd, $iLength)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_SETTHUMBLENGTH, $iLength)
+EndFunc   ;==>_GUICtrlSlider_SetThumbLength
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetTic($hWnd, $iPosition)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_SETTIC, 0, $iPosition)
+EndFunc   ;==>_GUICtrlSlider_SetTic
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetTicFreq($hWnd, $iFreg)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_SETTICFREQ, $iFreg)
+EndFunc   ;==>_GUICtrlSlider_SetTicFreq
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetTipSide($hWnd, $iLocation)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_SETTIPSIDE, $iLocation)
+EndFunc   ;==>_GUICtrlSlider_SetTipSide
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetToolTips($hWnd, $hWndTT)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	_SendMessage($hWnd, $TBM_SETTOOLTIPS, $hWndTT, 0, 0, "hwnd")
+EndFunc   ;==>_GUICtrlSlider_SetToolTips
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlSlider_SetUnicodeFormat($hWnd, $bUnicode)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Return _SendMessage($hWnd, $TBM_SETUNICODEFORMAT, $bUnicode) <> 0
+EndFunc   ;==>_GUICtrlSlider_SetUnicodeFormat

+ 650 - 0
include/GuiStatusBar.au3

@@ -0,0 +1,650 @@
+#include-once
+
+#include "Memory.au3"
+#include "SendMessage.au3"
+#include "StatusBarConstants.au3"
+#include "UDFGlobalID.au3"
+#include "WinAPIConv.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: StatusBar
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with StatusBar control management.
+;                  A status bar is a horizontal window at the bottom of a parent window in which an application can display
+;                  various kinds of status information.  The status bar can be divided into parts to display more than one type
+;                  of information
+; Author(s) .....: Paul Campbell (PaulIA)
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hSBLastWnd
+
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__STATUSBARCONSTANT_ClassName = "msctls_statusbar32"
+Global Const $__STATUSBARCONSTANT_WM_SIZE = 0x05
+Global Const $__STATUSBARCONSTANT_CLR_DEFAULT = 0xFF000000
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUICtrlStatusBar_Create
+; _GUICtrlStatusBar_Destroy
+; _GUICtrlStatusBar_EmbedControl
+; _GUICtrlStatusBar_GetBorders
+; _GUICtrlStatusBar_GetBordersHorz
+; _GUICtrlStatusBar_GetBordersRect
+; _GUICtrlStatusBar_GetBordersVert
+; _GUICtrlStatusBar_GetCount
+; _GUICtrlStatusBar_GetHeight
+; _GUICtrlStatusBar_GetIcon
+; _GUICtrlStatusBar_GetParts
+; _GUICtrlStatusBar_GetRect
+; _GUICtrlStatusBar_GetRectEx
+; _GUICtrlStatusBar_GetText
+; _GUICtrlStatusBar_GetTextFlags
+; _GUICtrlStatusBar_GetTextLength
+; _GUICtrlStatusBar_GetTextLengthEx
+; _GUICtrlStatusBar_GetTipText
+; _GUICtrlStatusBar_GetUnicodeFormat
+; _GUICtrlStatusBar_GetWidth
+; _GUICtrlStatusBar_IsSimple
+; _GUICtrlStatusBar_Resize
+; _GUICtrlStatusBar_SetBkColor
+; _GUICtrlStatusBar_SetIcon
+; _GUICtrlStatusBar_SetMinHeight
+; _GUICtrlStatusBar_SetParts
+; _GUICtrlStatusBar_SetSimple
+; _GUICtrlStatusBar_SetText
+; _GUICtrlStatusBar_SetTipText
+; _GUICtrlStatusBar_SetUnicodeFormat
+; _GUICtrlStatusBar_ShowHide
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; $tagBORDERS
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: $tagBORDERS
+; Description ...: Structure that recieves the current widths of the horizontal and vertical borders of a status window
+; Fields ........: BX - Width of the horizontal border
+;                  BY - Width of the vertical border
+;                  RX - Width of the border between rectangles
+; Author ........: Gary Frost (gafrost)
+; Remarks .......:
+; ===============================================================================================================================
+Global Const $tagBORDERS = "int BX;int BY;int RX"
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost, Steve Podhajecki <gehossafats at netmdc dot com>
+; Modified.......: Gary Frost
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_Create($hWnd, $vPartEdge = -1, $vPartText = "", $iStyles = -1, $iExStyles = 0x00000000)
+	If Not IsHWnd($hWnd) Then Return SetError(1, 0, 0) ; Invalid Window handle for _GUICtrlStatusBar_Create 1st parameter
+
+	Local $iStyle = BitOR($__UDFGUICONSTANT_WS_CHILD, $__UDFGUICONSTANT_WS_VISIBLE)
+
+	If $iStyles = -1 Then $iStyles = 0x00000000
+	If $iExStyles = -1 Then $iExStyles = 0x00000000
+
+	Local $aPartWidth[1], $aPartText[1]
+	If @NumParams > 1 Then ; more than param passed in
+		; setting up arrays
+		If IsArray($vPartEdge) Then ; setup part width array
+			$aPartWidth = $vPartEdge
+		Else
+			$aPartWidth[0] = $vPartEdge
+		EndIf
+		If @NumParams = 2 Then ; part text was not passed in so set array to same size as part width array
+			ReDim $aPartText[UBound($aPartWidth)]
+		Else
+			If IsArray($vPartText) Then ; setup part text array
+				$aPartText = $vPartText
+			Else
+				$aPartText[0] = $vPartText
+			EndIf
+			; if partwidth array is not same size as parttext array use larger sized array for size
+			If UBound($aPartWidth) <> UBound($aPartText) Then
+				Local $iLast
+				If UBound($aPartWidth) > UBound($aPartText) Then ; width array is larger
+					$iLast = UBound($aPartText)
+					ReDim $aPartText[UBound($aPartWidth)]
+				Else ; text array is larger
+					$iLast = UBound($aPartWidth)
+					ReDim $aPartWidth[UBound($aPartText)]
+					For $x = $iLast To UBound($aPartWidth) - 1
+						$aPartWidth[$x] = $aPartWidth[$x - 1] + 75
+					Next
+					$aPartWidth[UBound($aPartText) - 1] = -1
+				EndIf
+			EndIf
+		EndIf
+		If Not IsHWnd($hWnd) Then $hWnd = HWnd($hWnd)
+		If @NumParams > 3 Then $iStyle = BitOR($iStyle, $iStyles)
+	EndIf
+
+	Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	Local $hWndSBar = _WinAPI_CreateWindowEx($iExStyles, $__STATUSBARCONSTANT_ClassName, "", $iStyle, 0, 0, 0, 0, $hWnd, $nCtrlID)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	If @NumParams > 1 Then ; set the parts/text
+		_GUICtrlStatusBar_SetParts($hWndSBar, UBound($aPartWidth), $aPartWidth)
+		For $x = 0 To UBound($aPartText) - 1
+			_GUICtrlStatusBar_SetText($hWndSBar, $aPartText[$x], $x)
+		Next
+	EndIf
+	Return $hWndSBar
+EndFunc   ;==>_GUICtrlStatusBar_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_Destroy(ByRef $hWnd)
+	If Not _WinAPI_IsClassName($hWnd, $__STATUSBARCONSTANT_ClassName) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hSBLastWnd) Then
+			Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
+			Local $hParent = _WinAPI_GetParent($hWnd)
+			$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+			Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
+			If Not $iRet Then
+				; can check for errors here if needed, for debug
+			EndIf
+		Else
+			; Not Allowed to Destroy Other Applications Control(s)
+			Return SetError(1, 1, False)
+		EndIf
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUICtrlStatusBar_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_EmbedControl($hWnd, $iPart, $hControl, $iFit = 4)
+	Local $aRect = _GUICtrlStatusBar_GetRect($hWnd, $iPart)
+	Local $iBarX = $aRect[0]
+	Local $iBarY = $aRect[1]
+	Local $iBarW = $aRect[2] - $iBarX
+	Local $iBarH = $aRect[3] - $iBarY
+
+	Local $iConX = $iBarX
+	Local $iConY = $iBarY
+	Local $iConW = _WinAPI_GetWindowWidth($hControl)
+	Local $iConH = _WinAPI_GetWindowHeight($hControl)
+
+	If $iConW > $iBarW Then $iConW = $iBarW
+	If $iConH > $iBarH Then $iConH = $iBarH
+	Local $iPadX = ($iBarW - $iConW) / 2
+	Local $iPadY = ($iBarH - $iConH) / 2
+	If $iPadX < 0 Then $iPadX = 0
+	If $iPadY < 0 Then $iPadY = 0
+
+	If BitAND($iFit, 1) = 1 Then $iConX = $iBarX + $iPadX
+	If BitAND($iFit, 2) = 2 Then $iConY = $iBarY + $iPadY
+	If BitAND($iFit, 4) = 4 Then
+		$iPadX = _GUICtrlStatusBar_GetBordersRect($hWnd)
+		$iPadY = _GUICtrlStatusBar_GetBordersVert($hWnd)
+		$iConX = $iBarX
+		If _GUICtrlStatusBar_IsSimple($hWnd) Then $iConX += $iPadX
+		$iConY = $iBarY + $iPadY
+		$iConW = $iBarW - ($iPadX * 2)
+		$iConH = $iBarH - ($iPadY * 2)
+	EndIf
+
+	_WinAPI_SetParent($hControl, $hWnd)
+	_WinAPI_MoveWindow($hControl, $iConX, $iConY, $iConW, $iConH)
+EndFunc   ;==>_GUICtrlStatusBar_EmbedControl
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetBorders($hWnd)
+	Local $tBorders = DllStructCreate($tagBORDERS)
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hSBLastWnd) Then
+		$iRet = _SendMessage($hWnd, $SB_GETBORDERS, 0, $tBorders, 0, "wparam", "struct*")
+	Else
+		Local $iSize = DllStructGetSize($tBorders)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iSize, $tMemMap)
+		$iRet = _SendMessage($hWnd, $SB_GETBORDERS, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tBorders, $iSize)
+		_MemFree($tMemMap)
+	EndIf
+	Local $aBorders[3]
+	If $iRet = 0 Then Return SetError(-1, -1, $aBorders)
+	$aBorders[0] = DllStructGetData($tBorders, "BX")
+	$aBorders[1] = DllStructGetData($tBorders, "BY")
+	$aBorders[2] = DllStructGetData($tBorders, "RX")
+	Return $aBorders
+EndFunc   ;==>_GUICtrlStatusBar_GetBorders
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetBordersHorz($hWnd)
+	Local $aBorders = _GUICtrlStatusBar_GetBorders($hWnd)
+	Return SetError(@error, @extended, $aBorders[0])
+EndFunc   ;==>_GUICtrlStatusBar_GetBordersHorz
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetBordersRect($hWnd)
+	Local $aBorders = _GUICtrlStatusBar_GetBorders($hWnd)
+	Return SetError(@error, @extended, $aBorders[2])
+EndFunc   ;==>_GUICtrlStatusBar_GetBordersRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetBordersVert($hWnd)
+	Local $aBorders = _GUICtrlStatusBar_GetBorders($hWnd)
+	Return SetError(@error, @extended, $aBorders[1])
+EndFunc   ;==>_GUICtrlStatusBar_GetBordersVert
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetCount($hWnd)
+	Return _SendMessage($hWnd, $SB_GETPARTS)
+EndFunc   ;==>_GUICtrlStatusBar_GetCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost) Removed dot notation
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetHeight($hWnd)
+	Local $tRECT = _GUICtrlStatusBar_GetRectEx($hWnd, 0)
+	Return DllStructGetData($tRECT, "Bottom") - DllStructGetData($tRECT, "Top") - (_GUICtrlStatusBar_GetBordersVert($hWnd) * 2)
+EndFunc   ;==>_GUICtrlStatusBar_GetHeight
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Steve Podhajecki <gehossafats at netmdc dotcom>
+; Modified.......: Gary Frost (GaryFrost)
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetIcon($hWnd, $iIndex = 0)
+	Return _SendMessage($hWnd, $SB_GETICON, $iIndex, 0, 0, "wparam", "lparam", "handle")
+EndFunc   ;==>_GUICtrlStatusBar_GetIcon
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetParts($hWnd)
+	Local $iCount = _GUICtrlStatusBar_GetCount($hWnd)
+	Local $tParts = DllStructCreate("int[" & $iCount & "]")
+	Local $aParts[$iCount + 1]
+	If _WinAPI_InProcess($hWnd, $__g_hSBLastWnd) Then
+		$aParts[0] = _SendMessage($hWnd, $SB_GETPARTS, $iCount, $tParts, 0, "wparam", "struct*")
+	Else
+		Local $iParts = DllStructGetSize($tParts)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iParts, $tMemMap)
+		$aParts[0] = _SendMessage($hWnd, $SB_GETPARTS, $iCount, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tParts, $iParts)
+		_MemFree($tMemMap)
+	EndIf
+	For $iI = 1 To $iCount
+		$aParts[$iI] = DllStructGetData($tParts, 1, $iI)
+	Next
+	Return $aParts
+EndFunc   ;==>_GUICtrlStatusBar_GetParts
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetRect($hWnd, $iPart)
+	Local $tRECT = _GUICtrlStatusBar_GetRectEx($hWnd, $iPart)
+	If @error Then Return SetError(@error, 0, 0)
+	Local $aRect[4]
+	$aRect[0] = DllStructGetData($tRECT, "Left")
+	$aRect[1] = DllStructGetData($tRECT, "Top")
+	$aRect[2] = DllStructGetData($tRECT, "Right")
+	$aRect[3] = DllStructGetData($tRECT, "Bottom")
+	Return $aRect
+EndFunc   ;==>_GUICtrlStatusBar_GetRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetRectEx($hWnd, $iPart)
+	Local $tRECT = DllStructCreate($tagRECT)
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hSBLastWnd) Then
+		$iRet = _SendMessage($hWnd, $SB_GETRECT, $iPart, $tRECT, 0, "wparam", "struct*")
+	Else
+		Local $iRect = DllStructGetSize($tRECT)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iRect, $tMemMap)
+		$iRet = _SendMessage($hWnd, $SB_GETRECT, $iPart, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tRECT, $iRect)
+		_MemFree($tMemMap)
+	EndIf
+	Return SetError($iRet = 0, 0, $tRECT)
+EndFunc   ;==>_GUICtrlStatusBar_GetRectEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetText($hWnd, $iPart)
+	Local $bUnicode = _GUICtrlStatusBar_GetUnicodeFormat($hWnd)
+
+	Local $iBuffer = _GUICtrlStatusBar_GetTextLength($hWnd, $iPart) + 1
+	If $iBuffer = 1 Then Return SetError(1, 0, "")
+
+	Local $tBuffer
+	If $bUnicode Then
+		$tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+		$iBuffer *= 2
+	Else
+		$tBuffer = DllStructCreate("char Text[" & $iBuffer & "]")
+	EndIf
+	If _WinAPI_InProcess($hWnd, $__g_hSBLastWnd) Then
+		_SendMessage($hWnd, $SB_GETTEXTW, $iPart, $tBuffer, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+		If $bUnicode Then
+			_SendMessage($hWnd, $SB_GETTEXTW, $iPart, $pMemory, 0, "wparam", "ptr")
+		Else
+			_SendMessage($hWnd, $SB_GETTEXT, $iPart, $pMemory, 0, "wparam", "ptr")
+		EndIf
+		_MemRead($tMemMap, $pMemory, $tBuffer, $iBuffer)
+		_MemFree($tMemMap)
+	EndIf
+	Return DllStructGetData($tBuffer, "Text")
+EndFunc   ;==>_GUICtrlStatusBar_GetText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetTextFlags($hWnd, $iPart)
+	If _GUICtrlStatusBar_GetUnicodeFormat($hWnd) Then
+		Return _SendMessage($hWnd, $SB_GETTEXTLENGTHW, $iPart)
+	Else
+		Return _SendMessage($hWnd, $SB_GETTEXTLENGTH, $iPart)
+	EndIf
+EndFunc   ;==>_GUICtrlStatusBar_GetTextFlags
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetTextLength($hWnd, $iPart)
+	Return _WinAPI_LoWord(_GUICtrlStatusBar_GetTextFlags($hWnd, $iPart))
+EndFunc   ;==>_GUICtrlStatusBar_GetTextLength
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetTextLengthEx($hWnd, $iPart)
+	Return _WinAPI_HiWord(_GUICtrlStatusBar_GetTextFlags($hWnd, $iPart))
+EndFunc   ;==>_GUICtrlStatusBar_GetTextLengthEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (GaryFrost)
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetTipText($hWnd, $iPart)
+	Local $bUnicode = _GUICtrlStatusBar_GetUnicodeFormat($hWnd)
+
+	Local $tBuffer
+	If $bUnicode Then
+		$tBuffer = DllStructCreate("wchar Text[4096]")
+	Else
+		$tBuffer = DllStructCreate("char Text[4096]")
+	EndIf
+	If _WinAPI_InProcess($hWnd, $__g_hSBLastWnd) Then
+		_SendMessage($hWnd, $SB_GETTIPTEXTW, _WinAPI_MakeLong($iPart, 4096), $tBuffer, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, 4096, $tMemMap)
+		If $bUnicode Then
+			_SendMessage($hWnd, $SB_GETTIPTEXTW, _WinAPI_MakeLong($iPart, 4096), $pMemory, 0, "wparam", "ptr")
+		Else
+			_SendMessage($hWnd, $SB_GETTIPTEXTA, _WinAPI_MakeLong($iPart, 4096), $pMemory, 0, "wparam", "ptr")
+		EndIf
+		_MemRead($tMemMap, $pMemory, $tBuffer, 4096)
+		_MemFree($tMemMap)
+	EndIf
+	Return DllStructGetData($tBuffer, "Text")
+EndFunc   ;==>_GUICtrlStatusBar_GetTipText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetUnicodeFormat($hWnd)
+	Return _SendMessage($hWnd, $SB_GETUNICODEFORMAT) <> 0
+EndFunc   ;==>_GUICtrlStatusBar_GetUnicodeFormat
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost) Removed dot notation
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_GetWidth($hWnd, $iPart)
+	Local $tRECT = _GUICtrlStatusBar_GetRectEx($hWnd, $iPart)
+	Return DllStructGetData($tRECT, "Right") - DllStructGetData($tRECT, "Left") - (_GUICtrlStatusBar_GetBordersHorz($hWnd) * 2)
+EndFunc   ;==>_GUICtrlStatusBar_GetWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_IsSimple($hWnd)
+	Return _SendMessage($hWnd, $SB_ISSIMPLE) <> 0
+EndFunc   ;==>_GUICtrlStatusBar_IsSimple
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_Resize($hWnd)
+	_SendMessage($hWnd, $__STATUSBARCONSTANT_WM_SIZE)
+EndFunc   ;==>_GUICtrlStatusBar_Resize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost), jpm
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_SetBkColor($hWnd, $iColor)
+	$iColor = _SendMessage($hWnd, $SB_SETBKCOLOR, 0, $iColor)
+EndFunc   ;==>_GUICtrlStatusBar_SetBkColor
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_SetIcon($hWnd, $iPart, $hIcon = -1, $sIconFile = "")
+	If $hIcon = -1 Then Return _SendMessage($hWnd, $SB_SETICON, $iPart, $hIcon, 0, "wparam", "handle") <> 0 ; Remove Icon
+	If StringLen($sIconFile) <= 0 Then Return _SendMessage($hWnd, $SB_SETICON, $iPart, $hIcon) <> 0 ; set icon from icon handle
+	; set icon from file
+	Local $tIcon = DllStructCreate("handle")
+	Local $vResult = DllCall("shell32.dll", "uint", "ExtractIconExW", "wstr", $sIconFile, "int", $hIcon, "ptr", 0, "struct*", $tIcon, "uint", 1)
+	If @error Then Return SetError(@error, @extended, False)
+	$vResult = $vResult[0]
+	If $vResult > 0 Then $vResult = _SendMessage($hWnd, $SB_SETICON, $iPart, DllStructGetData($tIcon, 1), 0, "wparam", "handle")
+	DllCall("user32.dll", "bool", "DestroyIcon", "handle", DllStructGetData($tIcon, 1))
+	; No need to test @error.
+	Return $vResult
+EndFunc   ;==>_GUICtrlStatusBar_SetIcon
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_SetMinHeight($hWnd, $iMinHeight)
+	_SendMessage($hWnd, $SB_SETMINHEIGHT, $iMinHeight)
+	_GUICtrlStatusBar_Resize($hWnd)
+EndFunc   ;==>_GUICtrlStatusBar_SetMinHeight
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_SetParts($hWnd, $vPartEdge = -1, $vPartWidth = 25)
+	If IsArray($vPartEdge) And IsArray($vPartWidth) Then Return False
+
+	;== start sizing parts
+	Local $tParts, $iParts
+	If IsArray($vPartEdge) Then ; adding array of parts (contains widths)
+		$vPartEdge[UBound($vPartEdge) - 1] = -1
+		$iParts = UBound($vPartEdge)
+		$tParts = DllStructCreate("int[" & $iParts & "]")
+		For $x = 0 To $iParts - 2
+			DllStructSetData($tParts, 1, $vPartEdge[$x], $x + 1)
+		Next
+		DllStructSetData($tParts, 1, -1, $iParts)
+	Else
+		If $vPartEdge < -1 Then Return False
+
+		If IsArray($vPartWidth) Then ; adding array of part widths (make parts an array)
+			$iParts = UBound($vPartWidth)
+			$tParts = DllStructCreate("int[" & $iParts & "]")
+			Local $iPartRightEdge = 0
+			For $x = 0 To $iParts - 2
+				$iPartRightEdge += $vPartWidth[$x]
+				If $vPartWidth[$x] <= 0 Then Return False
+				DllStructSetData($tParts, 1, $iPartRightEdge, $x + 1)
+			Next
+			DllStructSetData($tParts, 1, -1, $iParts)
+		ElseIf $vPartEdge > 1 Then ; adding parts with default width
+			$iParts = $vPartEdge
+			$tParts = DllStructCreate("int[" & $iParts & "]")
+			For $x = 1 To $iParts - 1
+				DllStructSetData($tParts, 1, $vPartWidth * $x, $x)
+			Next
+			DllStructSetData($tParts, 1, -1, $iParts)
+		Else ; defaulting to 1 part
+			$iParts = 1
+			$tParts = DllStructCreate("int")
+			DllStructSetData($tParts, 1, -1)
+		EndIf
+	EndIf
+	;== end set sizing
+
+	If _WinAPI_InProcess($hWnd, $__g_hSBLastWnd) Then
+		_SendMessage($hWnd, $SB_SETPARTS, $iParts, $tParts, 0, "wparam", "struct*")
+	Else
+		Local $iSize = DllStructGetSize($tParts)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iSize, $tMemMap)
+		_MemWrite($tMemMap, $tParts)
+		_SendMessage($hWnd, $SB_SETPARTS, $iParts, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+	_GUICtrlStatusBar_Resize($hWnd)
+	Return True
+EndFunc   ;==>_GUICtrlStatusBar_SetParts
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_SetSimple($hWnd, $bSimple = True)
+	_SendMessage($hWnd, $SB_SIMPLE, $bSimple)
+EndFunc   ;==>_GUICtrlStatusBar_SetSimple
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: rysiora, JdeB, tonedef, Gary Frost (gafrost)
+; Modified.......: Gary Frost (gafrost) re-written also added $iUFlag
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_SetText($hWnd, $sText = "", $iPart = 0, $iUFlag = 0)
+	Local $bUnicode = _GUICtrlStatusBar_GetUnicodeFormat($hWnd)
+
+	Local $iBuffer = StringLen($sText) + 1
+	Local $tText
+	If $bUnicode Then
+		$tText = DllStructCreate("wchar Text[" & $iBuffer & "]")
+		$iBuffer *= 2
+	Else
+		$tText = DllStructCreate("char Text[" & $iBuffer & "]")
+	EndIf
+	DllStructSetData($tText, "Text", $sText)
+	If _GUICtrlStatusBar_IsSimple($hWnd) Then $iPart = $SB_SIMPLEID
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hSBLastWnd) Then
+		$iRet = _SendMessage($hWnd, $SB_SETTEXTW, BitOR($iPart, $iUFlag), $tText, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+		_MemWrite($tMemMap, $tText)
+		If $bUnicode Then
+			$iRet = _SendMessage($hWnd, $SB_SETTEXTW, BitOR($iPart, $iUFlag), $pMemory, 0, "wparam", "ptr")
+		Else
+			$iRet = _SendMessage($hWnd, $SB_SETTEXT, BitOR($iPart, $iUFlag), $pMemory, 0, "wparam", "ptr")
+		EndIf
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUICtrlStatusBar_SetText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_SetTipText($hWnd, $iPart, $sText)
+	Local $bUnicode = _GUICtrlStatusBar_GetUnicodeFormat($hWnd)
+
+	Local $iBuffer = StringLen($sText) + 1
+	Local $tText
+	If $bUnicode Then
+		$tText = DllStructCreate("wchar TipText[" & $iBuffer & "]")
+		$iBuffer *= 2
+	Else
+		$tText = DllStructCreate("char TipText[" & $iBuffer & "]")
+	EndIf
+	DllStructSetData($tText, "TipText", $sText)
+	If _WinAPI_InProcess($hWnd, $__g_hSBLastWnd) Then
+		_SendMessage($hWnd, $SB_SETTIPTEXTW, $iPart, $tText, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+		_MemWrite($tMemMap, $tText, $pMemory, $iBuffer)
+		If $bUnicode Then
+			_SendMessage($hWnd, $SB_SETTIPTEXTW, $iPart, $pMemory, 0, "wparam", "ptr")
+		Else
+			_SendMessage($hWnd, $SB_SETTIPTEXTA, $iPart, $pMemory, 0, "wparam", "ptr")
+		EndIf
+		_MemFree($tMemMap)
+	EndIf
+EndFunc   ;==>_GUICtrlStatusBar_SetTipText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_SetUnicodeFormat($hWnd, $bUnicode = True)
+	Return _SendMessage($hWnd, $SB_SETUNICODEFORMAT, $bUnicode)
+EndFunc   ;==>_GUICtrlStatusBar_SetUnicodeFormat
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlStatusBar_ShowHide($hWnd, $iState)
+	If $iState <> @SW_HIDE And $iState <> @SW_SHOW Then Return SetError(1, 1, False)
+	Return _WinAPI_ShowWindow($hWnd, $iState)
+EndFunc   ;==>_GUICtrlStatusBar_ShowHide

+ 864 - 0
include/GuiTab.au3

@@ -0,0 +1,864 @@
+#include-once
+
+#include "Memory.au3"
+#include "SendMessage.au3"
+#include "TabConstants.au3"
+#include "UDFGlobalID.au3"
+#include "WinAPIConv.au3"
+#include "WinAPIHObj.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Tab_Control
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with Tab control management.
+;                  A tab control is analogous to the dividers in a notebook or the labels in a  file  cabinet.  By  using  a  tab
+;                  control, an application can define multiple pages for the same area of a  window  or  dialog  box.  Each  page
+;                  consists of a certain type of information or a group of controls that the application displays when  the  user
+;                  selects the corresponding tab.
+; Author(s) .....: Paul Campbell (PaulIA), Gary Frost (gafrost)
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hTabLastWnd
+
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__TABCONSTANT_ClassName = "SysTabControl32"
+Global Const $__TABCONSTANT_WS_CLIPSIBLINGS = 0x04000000
+Global Const $__TABCONSTANT_WM_NOTIFY = 0x004E
+Global Const $__TABCONSTANT_DEFAULT_GUI_FONT = 17
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUICtrlTab_ActivateTab
+; _GUICtrlTab_ClickTab
+; _GUICtrlTab_Create
+; _GUICtrlTab_DeleteAllItems
+; _GUICtrlTab_DeleteItem
+; _GUICtrlTab_DeselectAll
+; _GUICtrlTab_Destroy
+; _GUICtrlTab_FindTab
+; _GUICtrlTab_GetCurFocus
+; _GUICtrlTab_GetCurSel
+; _GUICtrlTab_GetDisplayRect
+; _GUICtrlTab_GetDisplayRectEx
+; _GUICtrlTab_GetExtendedStyle
+; _GUICtrlTab_GetImageList
+; _GUICtrlTab_GetItem
+; _GUICtrlTab_GetItemCount
+; _GUICtrlTab_GetItemImage
+; _GUICtrlTab_GetItemParam
+; _GUICtrlTab_GetItemRect
+; _GUICtrlTab_GetItemRectEx
+; _GUICtrlTab_GetItemState
+; _GUICtrlTab_GetItemText
+; _GUICtrlTab_GetRowCount
+; _GUICtrlTab_GetToolTips
+; _GUICtrlTab_GetUnicodeFormat
+; _GUICtrlTab_HighlightItem
+; _GUICtrlTab_HitTest
+; _GUICtrlTab_InsertItem
+; _GUICtrlTab_RemoveImage
+; _GUICtrlTab_SetCurFocus
+; _GUICtrlTab_SetCurSel
+; _GUICtrlTab_SetExtendedStyle
+; _GUICtrlTab_SetImageList
+; _GUICtrlTab_SetItem
+; _GUICtrlTab_SetItemImage
+; _GUICtrlTab_SetItemParam
+; _GUICtrlTab_SetItemSize
+; _GUICtrlTab_SetItemState
+; _GUICtrlTab_SetItemText
+; _GUICtrlTab_SetMinTabWidth
+; _GUICtrlTab_SetPadding
+; _GUICtrlTab_SetToolTips
+; _GUICtrlTab_SetUnicodeFormat
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; $tagTCITEM
+; $tagTCHITTESTINFO
+; __GUICtrlTab_AdjustRect
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: $tagTCITEM
+; Description ...: Specifies or receives the attributes of a tab item
+; Fields ........: Mask      - Value that specifies which members to retrieve or set:
+;                  |$TCIF_IMAGE      - The Image member is valid
+;                  |$TCIF_PARAM      - The Param member is valid
+;                  |$TCIF_RTLREADING - The string pointed to by Text will be displayed in the opposite direction
+;                  |$TCIF_STATE      - The State member is valid
+;                  |$TCIF_TEXT       - The Text member is valid
+;                  State     - Specifies the item's current state if information is being retrieved. If item information is being
+;                  +set this member contains the state value to be set for the item.
+;                  StateMask - Specifies which bits of the dwState member contain valid information
+;                  Text      - String that contains the tab text when item information is being set. If item information is being
+;                  +retrieved, this member specifies the address of the buffer that receives the tab text.
+;                  TextMax   - Size of the buffer pointed to by the Text member.  If the structure is not receiving  information,
+;                  +this member is ignored.
+;                  Image     - Index in the tab control's image list, or -1 if there is no image for the tab.
+;                  Param     - Application-defined data associated with the tab control item
+; Author ........: Paul Campbell (PaulIA)
+; Remarks .......:
+; ===============================================================================================================================
+Global Const $tagTCITEM = "uint Mask;dword State;dword StateMask;ptr Text;int TextMax;int Image;lparam Param"
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: $tagTCHITTESTINFO
+; Description ...: Contains information about a hit test
+; Fields ........: X     - X position to hit test
+;                  Y     - Y position to hit test
+;                  Flags - Results of a hit test. The control sets this member to one of the following values:
+;                  |$TCHT_NOWHERE     - The position is not over a tab
+;                  |$TCHT_ONITEM      - The position is over a tab but not over its icon or its text
+;                  |$TCHT_ONITEMICON  - The position is over a tab's icon
+;                  |$TCHT_ONITEMLABEL - The position is over a tab's text
+;                  |$TCHT_ONITEM      - Bitwise OR of $TCHT_ONITEMICON and $TCHT_ONITEMLABEL
+; Author ........: Paul Campbell (PaulIA)
+; Remarks .......:
+; ===============================================================================================================================
+Global Const $tagTCHITTESTINFO = $tagPOINT & ";uint Flags"
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __GUICtrlTab_AdjustRect
+; Description ...: Calculates a tab control's display area given a window rectangle
+; Syntax.........: __GUICtrlTab_AdjustRect ( $hWnd, ByRef $tRECT [, $bLarger = False] )
+; Parameters ....: $hWnd        - Handle to the control
+;                  $tRECT       - $tagRECT structure that holds a window or text display rectangle
+;                  $bLarger     - Value that specifies which operation to perform.  If True, $tRECT is used to specify a text
+;                  +display rectangle and it receives the corresponding window rectangle.  If False, $tRECT is used to specify a
+;                  +window rectangle and it receives the corresponding text display rectangle.
+; Return values .: Success      - $tagRECT structure with requested coordinates
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; Remarks .......: This message applies only to tab controls that are at the top.  It does not apply to tab controls that are on
+;                  the sides or bottom.
+; Related .......: $tagRECT
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func __GUICtrlTab_AdjustRect($hWnd, ByRef $tRECT, $bLarger = False)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hTabLastWnd) Then
+			_SendMessage($hWnd, $TCM_ADJUSTRECT, $bLarger, $tRECT, 0, "wparam", "struct*")
+		Else
+			Local $iRect = DllStructGetSize($tRECT)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iRect, $tMemMap)
+			_MemWrite($tMemMap, $tRECT)
+			_SendMessage($hWnd, $TCM_ADJUSTRECT, $bLarger, $pMemory, 0, "wparam", "ptr")
+			_MemRead($tMemMap, $pMemory, $tRECT, $iRect)
+			_MemFree($tMemMap)
+		EndIf
+	EndIf
+	Return $tRECT
+EndFunc   ;==>__GUICtrlTab_AdjustRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Prog@ndy
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_ActivateTab($hWnd, $iIndex)
+	Local $nIndX
+	; first, get Handle and CtrlID of TabControl
+	If $hWnd = -1 Then $hWnd = GUICtrlGetHandle(-1)
+	If IsHWnd($hWnd) Then
+		$nIndX = _WinAPI_GetDlgCtrlID($hWnd)
+	Else
+		$nIndX = $hWnd
+		$hWnd = GUICtrlGetHandle($hWnd)
+	EndIf
+	Local $hParent = _WinAPI_GetParent($hWnd)
+	If @error Then Return SetError(1, 0, -1)
+
+	; create Struct for the Messages
+	Local $tNmhdr = DllStructCreate($tagNMHDR)
+	DllStructSetData($tNmhdr, 1, $hWnd)
+	DllStructSetData($tNmhdr, 2, $nIndX)
+	DllStructSetData($tNmhdr, 3, $TCN_SELCHANGING)
+
+	_SendMessage($hParent, $__TABCONSTANT_WM_NOTIFY, $nIndX, $tNmhdr, 0, "wparam", "struct*")
+	; select TabItem
+	Local $iRet = _GUICtrlTab_SetCurSel($hWnd, $iIndex)
+
+	DllStructSetData($tNmhdr, 3, $TCN_SELCHANGE)
+	_SendMessage($hParent, $__TABCONSTANT_WM_NOTIFY, $nIndX, $tNmhdr, 0, "wparam", "struct*")
+	Return $iRet
+EndFunc   ;==>_GUICtrlTab_ActivateTab
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost), PsaltyDS
+; ===============================================================================================================================
+Func _GUICtrlTab_ClickTab($hWnd, $iIndex, $sButton = "left", $bMove = False, $iClicks = 1, $iSpeed = 1)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $iX, $iY
+	If Not $bMove Then
+		; Don't move mouse, use ControlClick()
+		Local $hWinParent = _WinAPI_GetParent($hWnd)
+		Local $avTabPos = _GUICtrlTab_GetItemRect($hWnd, $iIndex)
+		$iX = $avTabPos[0] + (($avTabPos[2] - $avTabPos[0]) / 2)
+		$iY = $avTabPos[1] + (($avTabPos[3] - $avTabPos[1]) / 2)
+		ControlClick($hWinParent, "", $hWnd, $sButton, $iClicks, $iX, $iY)
+	Else
+		; Original code to move mouse and click (requires active window)
+		Local $tRECT = _GUICtrlTab_GetItemRectEx($hWnd, $iIndex)
+		Local $tPoint = _WinAPI_PointFromRect($tRECT, True)
+		$tPoint = _WinAPI_ClientToScreen($hWnd, $tPoint)
+		_WinAPI_GetXYFromPoint($tPoint, $iX, $iY)
+		Local $iMode = Opt("MouseCoordMode", 1)
+		MouseClick($sButton, $iX, $iY, $iClicks, $iSpeed)
+		Opt("MouseCoordMode", $iMode)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_ClickTab
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost
+; ===============================================================================================================================
+Func _GUICtrlTab_Create($hWnd, $iX, $iY, $iWidth = 150, $iHeight = 150, $iStyle = 0x00000040, $iExStyle = 0x00000000)
+	If Not IsHWnd($hWnd) Then
+		; Invalid Window handle for _GUICtrlTab_Create 1st parameter
+		Return SetError(1, 0, 0)
+	EndIf
+
+	If $iWidth = -1 Then $iWidth = 150
+	If $iHeight = -1 Then $iHeight = 150
+	If $iStyle = -1 Then $iStyle = $TCS_HOTTRACK
+	If $iExStyle = -1 Then $iExStyle = 0x00000000
+
+	$iStyle = BitOR($iStyle, $__UDFGUICONSTANT_WS_CHILD, $__TABCONSTANT_WS_CLIPSIBLINGS, $__UDFGUICONSTANT_WS_VISIBLE)
+
+	Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
+	If @error Then Return SetError(@error, @extended, 0)
+
+	Local $hTab = _WinAPI_CreateWindowEx($iExStyle, $__TABCONSTANT_ClassName, "", $iStyle, $iX, $iY, $iWidth, $iHeight, $hWnd, $nCtrlID)
+	_WinAPI_SetFont($hTab, _WinAPI_GetStockObject($__TABCONSTANT_DEFAULT_GUI_FONT))
+	Return $hTab
+EndFunc   ;==>_GUICtrlTab_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_DeleteAllItems($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_DELETEALLITEMS) <> 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_DELETEALLITEMS, 0, 0) <> 0
+	EndIf
+EndFunc   ;==>_GUICtrlTab_DeleteAllItems
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_DeleteItem($hWnd, $iIndex)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_DELETEITEM, $iIndex) <> 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_DELETEITEM, $iIndex, 0) <> 0
+	EndIf
+EndFunc   ;==>_GUICtrlTab_DeleteItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_DeselectAll($hWnd, $bExclude = True)
+	If IsHWnd($hWnd) Then
+		_SendMessage($hWnd, $TCM_DESELECTALL, $bExclude)
+	Else
+		GUICtrlSendMsg($hWnd, $TCM_DESELECTALL, $bExclude, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_DeselectAll
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_Destroy(ByRef $hWnd)
+	If Not _WinAPI_IsClassName($hWnd, $__TABCONSTANT_ClassName) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hTabLastWnd) Then
+			Local $nCtrlID = _WinAPI_GetDlgCtrlID($hWnd)
+			Local $hParent = _WinAPI_GetParent($hWnd)
+			$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+			Local $iRet = __UDF_FreeGlobalID($hParent, $nCtrlID)
+			If Not $iRet Then
+				; can check for errors here if needed, for debug
+			EndIf
+		Else
+			; Not Allowed to Destroy Other Applications Control(s)
+			Return SetError(1, 1, False)
+		EndIf
+	Else
+		$iDestroyed = GUICtrlDelete($hWnd)
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUICtrlTab_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_FindTab($hWnd, $sText, $bInStr = False, $iStart = 0)
+	Local $sTab
+
+	For $iI = $iStart To _GUICtrlTab_GetItemCount($hWnd)
+		$sTab = _GUICtrlTab_GetItemText($hWnd, $iI)
+		Switch $bInStr
+			Case False
+				If $sTab = $sText Then Return $iI
+			Case True
+				If StringInStr($sTab, $sText) Then Return $iI
+		EndSwitch
+	Next
+	Return -1
+EndFunc   ;==>_GUICtrlTab_FindTab
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetCurFocus($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_GETCURFOCUS)
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_GETCURFOCUS, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_GetCurFocus
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetCurSel($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_GETCURSEL)
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_GETCURSEL, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_GetCurSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetDisplayRect($hWnd)
+	Local $aRect[4]
+
+	Local $tRECT = _GUICtrlTab_GetDisplayRectEx($hWnd)
+	$aRect[0] = DllStructGetData($tRECT, "Left")
+	$aRect[1] = DllStructGetData($tRECT, "Top")
+	$aRect[2] = DllStructGetData($tRECT, "Right")
+	$aRect[3] = DllStructGetData($tRECT, "Bottom")
+	Return $aRect
+EndFunc   ;==>_GUICtrlTab_GetDisplayRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetDisplayRectEx($hWnd)
+	Local $tRECT = _WinAPI_GetClientRect($hWnd)
+	Return __GUICtrlTab_AdjustRect($hWnd, $tRECT)
+EndFunc   ;==>_GUICtrlTab_GetDisplayRectEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetExtendedStyle($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_GETEXTENDEDSTYLE)
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_GETEXTENDEDSTYLE, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_GetExtendedStyle
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_GetImageList($hWnd)
+	If IsHWnd($hWnd) Then
+		Return Ptr(_SendMessage($hWnd, $TCM_GETIMAGELIST))
+	Else
+		Return Ptr(GUICtrlSendMsg($hWnd, $TCM_GETIMAGELIST, 0, 0))
+	EndIf
+EndFunc   ;==>_GUICtrlTab_GetImageList
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_GetItem($hWnd, $iIndex)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+	Local $bUnicode = _GUICtrlTab_GetUnicodeFormat($hWnd)
+
+	Local $iBuffer = 4096
+	Local $tagTCITEMEx = $tagTCITEM & ";ptr Filler" ; strange the Filler is erased by TCM_GETITEM : MS Bug!!!
+	Local $tItem = DllStructCreate($tagTCITEMEx)
+	DllStructSetData($tItem, "Mask", $TCIF_ALLDATA)
+	DllStructSetData($tItem, "TextMax", $iBuffer)
+	DllStructSetData($tItem, "StateMask", BitOR($TCIS_HIGHLIGHTED, $TCIS_BUTTONPRESSED))
+	Local $iItem = DllStructGetSize($tItem)
+	Local $tBuffer
+	If $bUnicode Then
+		$tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+		$iBuffer *= 2
+	Else
+		$tBuffer = DllStructCreate("char Text[" & $iBuffer & "]")
+	EndIf
+	Local $tMemMap
+	Local $pMemory = _MemInit($hWnd, $iItem + $iBuffer, $tMemMap)
+	Local $pText = $pMemory + $iItem
+	DllStructSetData($tItem, "Text", $pText)
+	_MemWrite($tMemMap, $tItem, $pMemory, $iItem)
+	Local $iRet
+	If $bUnicode Then
+		$iRet = _SendMessage($hWnd, $TCM_GETITEMW, $iIndex, $pMemory)
+	Else
+		$iRet = _SendMessage($hWnd, $TCM_GETITEMA, $iIndex, $pMemory)
+	EndIf
+	_MemRead($tMemMap, $pMemory, $tItem, $iItem)
+	_MemRead($tMemMap, $pText, $tBuffer, $iBuffer)
+	_MemFree($tMemMap)
+	Local $aItem[4]
+	$aItem[0] = DllStructGetData($tItem, "State")
+	$aItem[1] = DllStructGetData($tBuffer, "Text")
+	$aItem[2] = DllStructGetData($tItem, "Image")
+	$aItem[3] = DllStructGetData($tItem, "Param")
+	Return SetError($iRet = 0, 0, $aItem)
+EndFunc   ;==>_GUICtrlTab_GetItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetItemCount($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_GETITEMCOUNT)
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_GETITEMCOUNT, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_GetItemCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetItemImage($hWnd, $iIndex)
+	Local $aItem = _GUICtrlTab_GetItem($hWnd, $iIndex)
+	Return $aItem[2]
+EndFunc   ;==>_GUICtrlTab_GetItemImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetItemParam($hWnd, $iIndex)
+	Local $aItem = _GUICtrlTab_GetItem($hWnd, $iIndex)
+	Return $aItem[3]
+EndFunc   ;==>_GUICtrlTab_GetItemParam
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetItemRect($hWnd, $iIndex)
+	Local $aRect[4]
+
+	Local $tRECT = _GUICtrlTab_GetItemRectEx($hWnd, $iIndex)
+	$aRect[0] = DllStructGetData($tRECT, "Left")
+	$aRect[1] = DllStructGetData($tRECT, "Top")
+	$aRect[2] = DllStructGetData($tRECT, "Right")
+	$aRect[3] = DllStructGetData($tRECT, "Bottom")
+	Return $aRect
+EndFunc   ;==>_GUICtrlTab_GetItemRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_GetItemRectEx($hWnd, $iIndex)
+	Local $tRECT = DllStructCreate($tagRECT)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hTabLastWnd) Then
+			_SendMessage($hWnd, $TCM_GETITEMRECT, $iIndex, $tRECT, 0, "wparam", "struct*")
+		Else
+			Local $iRect = DllStructGetSize($tRECT)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iRect, $tMemMap)
+			_SendMessage($hWnd, $TCM_GETITEMRECT, $iIndex, $pMemory, 0, "wparam", "ptr")
+			_MemRead($tMemMap, $pMemory, $tRECT, $iRect)
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		GUICtrlSendMsg($hWnd, $TCM_GETITEMRECT, $iIndex, DllStructGetPtr($tRECT))
+	EndIf
+	Return $tRECT
+EndFunc   ;==>_GUICtrlTab_GetItemRectEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetItemState($hWnd, $iIndex)
+	Local $aItem = _GUICtrlTab_GetItem($hWnd, $iIndex)
+	Return $aItem[0]
+EndFunc   ;==>_GUICtrlTab_GetItemState
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetItemText($hWnd, $iIndex)
+	Local $aItem = _GUICtrlTab_GetItem($hWnd, $iIndex)
+	Return $aItem[1]
+EndFunc   ;==>_GUICtrlTab_GetItemText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetRowCount($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_GETROWCOUNT)
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_GETROWCOUNT, 0, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_GetRowCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_GetToolTips($hWnd)
+	If IsHWnd($hWnd) Then
+		Return HWnd(_SendMessage($hWnd, $TCM_GETTOOLTIPS))
+	Else
+		Return HWnd(GUICtrlSendMsg($hWnd, $TCM_GETTOOLTIPS, 0, 0))
+	EndIf
+EndFunc   ;==>_GUICtrlTab_GetToolTips
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_GetUnicodeFormat($hWnd)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_GETUNICODEFORMAT) <> 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_GETUNICODEFORMAT, 0, 0) <> 0
+	EndIf
+EndFunc   ;==>_GUICtrlTab_GetUnicodeFormat
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_HighlightItem($hWnd, $iIndex, $bHighlight = True)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_HIGHLIGHTITEM, $iIndex, $bHighlight) <> 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_HIGHLIGHTITEM, $iIndex, $bHighlight) <> 0
+	EndIf
+EndFunc   ;==>_GUICtrlTab_HighlightItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_HitTest($hWnd, $iX, $iY)
+	Local $aHit[2] = [-1, 1]
+
+	Local $tHit = DllStructCreate($tagTCHITTESTINFO)
+	DllStructSetData($tHit, "X", $iX)
+	DllStructSetData($tHit, "Y", $iY)
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hTabLastWnd) Then
+			$aHit[0] = _SendMessage($hWnd, $TCM_HITTEST, 0, $tHit, 0, "wparam", "struct*")
+		Else
+			Local $iHit = DllStructGetSize($tHit)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iHit, $tMemMap)
+			_MemWrite($tMemMap, $tHit)
+			$aHit[0] = _SendMessage($hWnd, $TCM_HITTEST, 0, $pMemory, 0, "wparam", "ptr")
+			_MemRead($tMemMap, $pMemory, $tHit, $iHit)
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		$aHit[0] = GUICtrlSendMsg($hWnd, $TCM_HITTEST, 0, DllStructGetPtr($tHit))
+	EndIf
+	$aHit[1] = DllStructGetData($tHit, "Flags")
+	Return $aHit
+EndFunc   ;==>_GUICtrlTab_HitTest
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_InsertItem($hWnd, $iIndex, $sText, $iImage = -1, $iParam = 0)
+	Local $bUnicode = _GUICtrlTab_GetUnicodeFormat($hWnd)
+
+	Local $iBuffer = StringLen($sText) + 1
+	Local $tBuffer
+	If $bUnicode Then
+		$tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+		$iBuffer *= 2
+	Else
+		$tBuffer = DllStructCreate("char Text[" & $iBuffer & "]")
+	EndIf
+	Local $pBuffer = DllStructGetPtr($tBuffer)
+	Local $tItem = DllStructCreate($tagTCITEM)
+	DllStructSetData($tBuffer, "Text", $sText)
+	DllStructSetData($tItem, "Mask", BitOR($TCIF_TEXT, $TCIF_IMAGE, $TCIF_PARAM))
+	DllStructSetData($tItem, "TextMax", $iBuffer)
+	DllStructSetData($tItem, "Image", $iImage)
+	DllStructSetData($tItem, "Param", $iParam)
+	Local $iRet
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hTabLastWnd) Then
+			DllStructSetData($tItem, "Text", $pBuffer)
+			$iRet = _SendMessage($hWnd, $TCM_INSERTITEMW, $iIndex, $tItem, 0, "wparam", "struct*")
+		Else
+			Local $iItem = DllStructGetSize($tItem)
+			Local $tMemMap
+			Local $pMemory = _MemInit($hWnd, $iItem + $iBuffer, $tMemMap)
+			Local $pText = $pMemory + $iItem
+			DllStructSetData($tItem, "Text", $pText)
+			_MemWrite($tMemMap, $tItem, $pMemory, $iItem)
+			_MemWrite($tMemMap, $tBuffer, $pText, $iBuffer)
+			If $bUnicode Then
+				$iRet = _SendMessage($hWnd, $TCM_INSERTITEMW, $iIndex, $pMemory, 0, "wparam", "ptr")
+			Else
+				$iRet = _SendMessage($hWnd, $TCM_INSERTITEMA, $iIndex, $pMemory, 0, "wparam", "ptr")
+			EndIf
+			_MemFree($tMemMap)
+		EndIf
+	Else
+		Local $pItem = DllStructGetPtr($tItem)
+		DllStructSetData($tItem, "Text", $pBuffer)
+		If $bUnicode Then
+			$iRet = GUICtrlSendMsg($hWnd, $TCM_INSERTITEMW, $iIndex, $pItem)
+		Else
+			$iRet = GUICtrlSendMsg($hWnd, $TCM_INSERTITEMA, $iIndex, $pItem)
+		EndIf
+	EndIf
+	Return $iRet
+EndFunc   ;==>_GUICtrlTab_InsertItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_RemoveImage($hWnd, $iIndex)
+	If IsHWnd($hWnd) Then
+		_SendMessage($hWnd, $TCM_REMOVEIMAGE, $iIndex)
+		_WinAPI_InvalidateRect($hWnd)
+	Else
+		GUICtrlSendMsg($hWnd, $TCM_REMOVEIMAGE, $iIndex, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_RemoveImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_SetCurFocus($hWnd, $iIndex)
+	If IsHWnd($hWnd) Then
+		_SendMessage($hWnd, $TCM_SETCURFOCUS, $iIndex)
+	Else
+		GUICtrlSendMsg($hWnd, $TCM_SETCURFOCUS, $iIndex, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_SetCurFocus
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_SetCurSel($hWnd, $iIndex)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_SETCURSEL, $iIndex)
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_SETCURSEL, $iIndex, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_SetCurSel
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_SetExtendedStyle($hWnd, $iStyle)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_SETEXTENDEDSTYLE, 0, $iStyle)
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_SETEXTENDEDSTYLE, 0, $iStyle)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_SetExtendedStyle
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_SetImageList($hWnd, $hImage)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_SETIMAGELIST, 0, $hImage, 0, "wparam", "handle", "handle")
+	Else
+		Return Ptr(GUICtrlSendMsg($hWnd, $TCM_SETIMAGELIST, 0, $hImage))
+	EndIf
+EndFunc   ;==>_GUICtrlTab_SetImageList
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_SetItem($hWnd, $iIndex, $sText = -1, $iState = -1, $iImage = -1, $iParam = -1)
+	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
+
+	Local $tItem = DllStructCreate($tagTCITEM)
+	Local $iBuffer, $tBuffer, $iMask = 0, $iRet
+	Local $bUnicode = _GUICtrlTab_GetUnicodeFormat($hWnd)
+	If IsString($sText) Then
+		$iBuffer = StringLen($sText) + 1
+		If $bUnicode Then
+			$tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+			$iBuffer *= 2
+		Else
+			$tBuffer = DllStructCreate("char Text[" & $iBuffer & "]")
+		EndIf
+		DllStructSetData($tBuffer, "Text", $sText)
+		DllStructSetData($tItem, "Text", DllStructGetPtr($tBuffer))
+		$iMask = $TCIF_TEXT
+	EndIf
+	If $iState <> -1 Then
+		DllStructSetData($tItem, "State", $iState)
+		DllStructSetData($tItem, "StateMask", $iState)
+		$iMask = BitOR($iMask, $TCIF_STATE)
+	EndIf
+	If $iImage <> -1 Then
+		DllStructSetData($tItem, "Image", $iImage)
+		$iMask = BitOR($iMask, $TCIF_IMAGE)
+	EndIf
+	If $iParam <> -1 Then
+		DllStructSetData($tItem, "Param", $iParam)
+		$iMask = BitOR($iMask, $TCIF_PARAM)
+	EndIf
+	DllStructSetData($tItem, "Mask", $iMask)
+	Local $iItem = DllStructGetSize($tItem)
+	Local $tMemMap
+	Local $pMemory = _MemInit($hWnd, $iItem + 8192, $tMemMap)
+	Local $pText = $pMemory + 4096
+	DllStructSetData($tItem, "Text", $pText)
+	_MemWrite($tMemMap, $tItem, $pMemory, $iItem)
+	If IsString($sText) Then _MemWrite($tMemMap, $tBuffer, $pText, $iBuffer)
+	If $bUnicode Then
+		$iRet = _SendMessage($hWnd, $TCM_SETITEMW, $iIndex, $pMemory) <> 0
+	Else
+		$iRet = _SendMessage($hWnd, $TCM_SETITEMA, $iIndex, $pMemory) <> 0
+	EndIf
+	_MemFree($tMemMap)
+	Return $iRet
+EndFunc   ;==>_GUICtrlTab_SetItem
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_SetItemImage($hWnd, $iIndex, $iImage)
+	Return _GUICtrlTab_SetItem($hWnd, $iIndex, -1, -1, $iImage)
+EndFunc   ;==>_GUICtrlTab_SetItemImage
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_SetItemParam($hWnd, $iIndex, $iParam)
+	Return _GUICtrlTab_SetItem($hWnd, $iIndex, -1, -1, -1, $iParam)
+EndFunc   ;==>_GUICtrlTab_SetItemParam
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_SetItemSize($hWnd, $iWidth, $iHeight)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_SETITEMSIZE, 0, _WinAPI_MakeLong($iWidth, $iHeight))
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_SETITEMSIZE, 0, _WinAPI_MakeLong($iWidth, $iHeight))
+	EndIf
+EndFunc   ;==>_GUICtrlTab_SetItemSize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_SetItemState($hWnd, $iIndex, $iState)
+	Return _GUICtrlTab_SetItem($hWnd, $iIndex, -1, $iState)
+EndFunc   ;==>_GUICtrlTab_SetItemState
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_SetItemText($hWnd, $iIndex, $sText)
+	Return _GUICtrlTab_SetItem($hWnd, $iIndex, $sText)
+EndFunc   ;==>_GUICtrlTab_SetItemText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_SetMinTabWidth($hWnd, $iMinWidth)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_SETMINTABWIDTH, 0, $iMinWidth)
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_SETMINTABWIDTH, 0, $iMinWidth)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_SetMinTabWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_SetPadding($hWnd, $iHorz, $iVert)
+	If IsHWnd($hWnd) Then
+		_SendMessage($hWnd, $TCM_SETPADDING, 0, _WinAPI_MakeLong($iHorz, $iVert))
+	Else
+		GUICtrlSendMsg($hWnd, $TCM_SETPADDING, 0, _WinAPI_MakeLong($iHorz, $iVert))
+	EndIf
+EndFunc   ;==>_GUICtrlTab_SetPadding
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost (gafrost)
+; ===============================================================================================================================
+Func _GUICtrlTab_SetToolTips($hWnd, $hToolTip)
+	If IsHWnd($hWnd) Then
+		_SendMessage($hWnd, $TCM_SETTOOLTIPS, $hToolTip, 0, 0, "hwnd")
+	Else
+		GUICtrlSendMsg($hWnd, $TCM_SETTOOLTIPS, $hToolTip, 0)
+	EndIf
+EndFunc   ;==>_GUICtrlTab_SetToolTips
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost (gafrost)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUICtrlTab_SetUnicodeFormat($hWnd, $bUnicode)
+	If IsHWnd($hWnd) Then
+		Return _SendMessage($hWnd, $TCM_SETUNICODEFORMAT, $bUnicode) <> 0
+	Else
+		Return GUICtrlSendMsg($hWnd, $TCM_SETUNICODEFORMAT, $bUnicode, 0) <> 0
+	EndIf
+EndFunc   ;==>_GUICtrlTab_SetUnicodeFormat

+ 892 - 0
include/GuiToolTip.au3

@@ -0,0 +1,892 @@
+#include-once
+
+#include "Memory.au3"
+#include "SendMessage.au3"
+#include "StructureConstants.au3"
+#include "ToolTipConstants.au3"
+#include "WinAPIConv.au3"
+#include "WinAPISysInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: ToolTip
+; AutoIt Version : 3.3.14.5
+; Description ...: Functions that assist with ToolTip control management.
+;                  ToolTip controls are pop-up windows that display text.  The text usually describes a tool, which is  either  a
+;                  window, such as a child window or control, or an application-defined rectangular area within a window's client
+;                  area.
+; Author(s) .....: Paul Campbell (PaulIA)
+; ===============================================================================================================================
+
+; #VARIABLES# ===================================================================================================================
+Global $__g_hTTLastWnd
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $_TOOLTIPCONSTANTS_ClassName = "tooltips_class32"
+Global Const $_TT_ghTTDefaultStyle = BitOR($TTS_ALWAYSTIP, $TTS_NOPREFIX)
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GUIToolTip_Activate
+; _GUIToolTip_AddTool
+; _GUIToolTip_AdjustRect
+; _GUIToolTip_BitsToTTF
+; _GUIToolTip_Create
+; _GUIToolTip_Deactivate
+; _GUIToolTip_DelTool
+; _GUIToolTip_Destroy
+; _GUIToolTip_EnumTools
+; _GUIToolTip_GetBubbleHeight
+; _GUIToolTip_GetBubbleSize
+; _GUIToolTip_GetBubbleWidth
+; _GUIToolTip_GetCurrentTool
+; _GUIToolTip_GetDelayTime
+; _GUIToolTip_GetMargin
+; _GUIToolTip_GetMarginEx
+; _GUIToolTip_GetMaxTipWidth
+; _GUIToolTip_GetText
+; _GUIToolTip_GetTipBkColor
+; _GUIToolTip_GetTipTextColor
+; _GUIToolTip_GetTitleBitMap
+; _GUIToolTip_GetTitleText
+; _GUIToolTip_GetToolCount
+; _GUIToolTip_GetToolInfo
+; _GUIToolTip_HitTest
+; _GUIToolTip_NewToolRect
+; _GUIToolTip_Pop
+; _GUIToolTip_PopUp
+; _GUIToolTip_SetDelayTime
+; _GUIToolTip_SetMargin
+; _GUIToolTip_SetMaxTipWidth
+; _GUIToolTip_SetTipBkColor
+; _GUIToolTip_SetTipTextColor
+; _GUIToolTip_SetTitle
+; _GUIToolTip_SetToolInfo
+; _GUIToolTip_SetWindowTheme
+; _GUIToolTip_ToolExists
+; _GUIToolTip_ToolToArray
+; _GUIToolTip_TrackActivate
+; _GUIToolTip_TrackPosition
+; _GUIToolTip_Update
+; _GUIToolTip_UpdateTipText
+; ===============================================================================================================================
+
+; #NEW_FUNCTIONS# ===============================================================================================================
+; _GUIToolTip_Deactivate
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; $tagNMTTDISPINFO
+; $tagTOOLINFO
+; $tagTTGETTITLE
+; $tagTTHITTESTINFO
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: $tagNMTTDISPINFO
+; Description ...: Contains information used in handling the $TTN_GETDISPINFOW notification message
+; Fields ........: $tagNMHDR - Contains information about a notification message
+;                  pText     - Pointer to a string that will be displayed as the ToolTip text.  If Instance specifies an instance
+;                  +handle, this member must be the identifier of a string resource.
+;                  aText     - Buffer that receives the ToolTip text.  An application can copy the text to this buffer instead of
+;                  +specifying a string address or string resource.
+;                  Instance  - Handle to the instance that contains a string resource to be used as the ToolTip text. If pText is
+;                  +the address of the ToolTip text string, this member must be 0.
+;                  Flags     - Flags that indicates how to interpret the IDFrom member:
+;                  |$TTF_IDISHWND   - If this flag is set, IDFrom is the tool's handle. Otherwise, it is the tool's identifier.
+;                  |$TTF_RTLREADING - Specifies right to left text
+;                  |$TTF_DI_SETITEM - If you add this flag to Flags while processing the notification, the ToolTip  control  will
+;                  +retain the supplied information and not request it again.
+;                  Param     - Application-defined data associated with the tool
+; Author ........: Paul Campbell (PaulIA)
+; Remarks .......: You need to point the pText array to your own private buffer when the text used in the ToolTip text exceeds 80
+;                  +characters in length.  The system automatically strips the accelerator from all strings passed to  a  ToolTip
+;                  control, unless the control has the $TTS_NOPREFIX style.
+; ===============================================================================================================================
+Global Const $tagNMTTDISPINFO = $tagNMHDR & ";ptr pText;wchar aText[80];ptr Instance;uint Flags;lparam Param"
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: $tagTOOLINFO
+; Description ...: Contains information about a tool in a ToolTip contr
+; Fields ........: Size    - Size of this structure, in bytes
+;                  Flags    - Flags that control the ToolTip display. This member can be a combination of the following values:
+;                  |$TTF_ABSOLUTE    - Positions the ToolTip at the same coordinates provided by $TTM_TRACKPOSITION
+;                  |$TTF_CENTERTIP   - Centers the ToolTip below the tool specified by the ID member
+;                  |$TTF_IDISHWND    - Indicates that the ID member is the window handle to the tool
+;                  |$TTF_PARSELINKS  - Indicates that links in the tooltip text should be parsed
+;                  |$TTF_RTLREADING  - Indicates that the ToolTip text will be displayed in the opposite direction
+;                  |$TTF_SUBCLASS    - Indicates that the ToolTip control should subclass the tool's window to intercept messages
+;                  |$TTF_TRACK       - Positions the ToolTip next to the tool to which it corresponds
+;                  |$TTF_TRANSPARENT - Causes the ToolTip control to forward mouse event messages to the parent window
+;                  hWnd     - Handle to the window that contains the tool
+;                  ID       - Application-defined identifier of the tool
+;                  Left     - X position of upper left corner of bounding rectangle
+;                  Top      - Y position of upper left corner of bounding rectangle
+;                  Right    - X position of lower right corner of bounding rectangle
+;                  Bottom   - Y position of lower right corner of bounding rectangle
+;                  hInst    - Handle to the instance that contains the string resource for the too
+;                  Text     - Pointer to the buffer that contains the text for the tool
+;                  Param    - A 32-bit application-defined value that is associated with the tool
+;                  Reserved - Reserved
+; Author ........: Paul Campbell (PaulIA)
+; Remarks .......:
+; ===============================================================================================================================
+Global Const $tagTOOLINFO = "uint Size;uint Flags;hwnd hWnd;uint_ptr ID;" & $tagRECT & ";handle hInst;ptr Text;lparam Param;ptr Reserved"
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: $tagTTGETTITLE
+; Description ...: Provides information about the title of a tooltip control
+; Fields ........: Size     - Size of this structure, in bytes
+;                  Bitmap   - The tooltip icon
+;                  TitleMax - Specifies the number of characters in the title
+;                  Title    - Pointer to a wide character string that contains the title
+; Author ........: Paul Campbell (PaulIA)
+; Remarks .......:
+; ===============================================================================================================================
+Global Const $tagTTGETTITLE = "dword Size;uint Bitmap;uint TitleMax;ptr Title"
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: $tagTTHITTESTINFO
+; Description ...: Contains information that a ToolTip control uses to determine whether a point is in the bounding rectangle of the specified tool
+; Fields ........: Tool     - Handle to the tool or window with the specified tool
+;                  X        - X position to be tested, in client coordinates
+;                  Y        - Y position to be tested, in client coordinates
+;                  Size     - Size of a TOOLINFO structure
+;                  Flags    - Flags that control the ToolTip display. This member can be a combination of the following values:
+;                  |$TTF_ABSOLUTE    - Positions the ToolTip at the same coordinates provided by $TTM_TRACKPOSITION
+;                  |$TTF_CENTERTIP   - Centers the ToolTip below the tool specified by the ID member
+;                  |$TTF_IDISHWND    - Indicates that the ID member is the window handle to the tool
+;                  |$TTF_PARSELINKS  - Indicates that links in the tooltip text should be parsed
+;                  |$TTF_RTLREADING  - Indicates that the ToolTip text will be displayed in the opposite direction
+;                  |$TTF_SUBCLASS    - Indicates that the ToolTip control should subclass the tool's window to intercept messages
+;                  |$TTF_TRACK       - Positions the ToolTip next to the tool to which it corresponds
+;                  |$TTF_TRANSPARENT - Causes the ToolTip control to forward mouse event messages to the parent window
+;                  hWnd     - Handle to the window that contains the tool
+;                  ID       - Application-defined identifier of the tool
+;                  Left     - X position of upper left corner of bounding rectangle
+;                  Top      - Y position of upper left corner of bounding rectangle
+;                  Right    - X position of lower right corner of bounding rectangle
+;                  Bottom   - Y position of lower right corner of bounding rectangle
+;                  hInst    - Handle to the instance that contains the string resource for the too
+;                  Text     - Pointer to the buffer that contains the text for the tool
+;                  Param    - A 32-bit application-defined value that is associated with the tool
+;                  Reserved - Reserved
+; Author ........: Paul Campbell (PaulIA)
+; Remarks .......:
+; ===============================================================================================================================
+Global Const $tagTTHITTESTINFO = "hwnd Tool;" & $tagPOINT & ";" & $tagTOOLINFO
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Bob Marotte (BrewManNH)
+; ===============================================================================================================================
+Func _GUIToolTip_Activate($hWnd)
+	_SendMessage($hWnd, $TTM_ACTIVATE, True)
+EndFunc   ;==>_GUIToolTip_Activate
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Bob Marotte (BrewManNH)
+; ===============================================================================================================================
+Func _GUIToolTip_AddTool($hTool, $hWnd, $sText, $iID = 0, $iLeft = 0, $iTop = 0, $iRight = 0, $iBottom = 0, $iFlags = Default, $iParam = 0)
+	Local $iBuffer, $tBuffer, $pBuffer
+	If $iFlags = Default Then $iFlags = BitOR($TTF_SUBCLASS, $TTF_IDISHWND)
+	If $sText <> -1 Then
+		$iBuffer = StringLen($sText) + 1
+		$tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+		$iBuffer *= 2
+		$pBuffer = DllStructGetPtr($tBuffer)
+		DllStructSetData($tBuffer, "Text", $sText)
+	Else
+		$iBuffer = 0
+		$pBuffer = -1 ; LPSTR_TEXTCALLBACK
+	EndIf
+	Local $tToolInfo = DllStructCreate($tagTOOLINFO)
+	Local $iToolInfo = DllStructGetSize($tToolInfo)
+	DllStructSetData($tToolInfo, "Size", $iToolInfo)
+	DllStructSetData($tToolInfo, "Flags", $iFlags)
+	DllStructSetData($tToolInfo, "hWnd", $hWnd)
+	DllStructSetData($tToolInfo, "ID", $iID)
+	DllStructSetData($tToolInfo, "Left", $iLeft)
+	DllStructSetData($tToolInfo, "Top", $iTop)
+	DllStructSetData($tToolInfo, "Right", $iRight)
+	DllStructSetData($tToolInfo, "Bottom", $iBottom)
+	DllStructSetData($tToolInfo, "Param", $iParam)
+	Local $iRet
+	If _WinAPI_InProcess($hTool, $__g_hTTLastWnd) Then
+		DllStructSetData($tToolInfo, "Text", $pBuffer)
+		$iRet = _SendMessage($hTool, $TTM_ADDTOOLW, 0, $tToolInfo, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hTool, $iToolInfo + $iBuffer, $tMemMap)
+		If $sText <> -1 Then
+			Local $pText = $pMemory + $iToolInfo
+			DllStructSetData($tToolInfo, "Text", $pText)
+			_MemWrite($tMemMap, $tBuffer, $pText, $iBuffer)
+		Else
+			DllStructSetData($tToolInfo, "Text", -1) ; LPSTR_TEXTCALLBACK
+		EndIf
+		_MemWrite($tMemMap, $tToolInfo, $pMemory, $iToolInfo)
+		$iRet = _SendMessage($hTool, $TTM_ADDTOOLW, 0, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUIToolTip_AddTool
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_AdjustRect($hWnd, ByRef $tRECT, $bLarger = True)
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		_SendMessage($hWnd, $TTM_ADJUSTRECT, $bLarger, $tRECT, 0, "wparam", "struct*")
+	Else
+		Local $iRect = DllStructGetSize($tRECT)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iRect, $tMemMap)
+		_MemWrite($tMemMap, $tRECT)
+		_SendMessage($hWnd, $TTM_ADJUSTRECT, $bLarger, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tRECT, $iRect)
+		_MemFree($tMemMap)
+	EndIf
+	Return $tRECT
+EndFunc   ;==>_GUIToolTip_AdjustRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Bob Marotte (BrewManNH)
+; ===============================================================================================================================
+Func _GUIToolTip_BitsToTTF($iFlags)
+	Local $iN = ""
+	If BitAND($iFlags, $TTF_IDISHWND) <> 0 Then $iN &= "TTF_IDISHWND,"
+	If BitAND($iFlags, $TTF_CENTERTIP) <> 0 Then $iN &= "TTF_CENTERTIP,"
+	If BitAND($iFlags, $TTF_RTLREADING) <> 0 Then $iN &= "TTF_RTLREADING,"
+	If BitAND($iFlags, $TTF_SUBCLASS) <> 0 Then $iN &= "TTF_SUBCLASS,"
+	If BitAND($iFlags, $TTF_TRACK) <> 0 Then $iN &= "TTF_TRACK,"
+	If BitAND($iFlags, $TTF_ABSOLUTE) <> 0 Then $iN &= "TTF_ABSOLUTE,"
+	If BitAND($iFlags, $TTF_TRANSPARENT) <> 0 Then $iN &= "TTF_TRANSPARENT,"
+	If BitAND($iFlags, $TTF_PARSELINKS) <> 0 Then $iN &= "TTF_PARSELINKS,"
+	Return StringTrimRight($iN, 1)
+EndFunc   ;==>_GUIToolTip_BitsToTTF
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Gary Frost
+; ===============================================================================================================================
+Func _GUIToolTip_Create($hWnd, $iStyle = $_TT_ghTTDefaultStyle)
+	Return _WinAPI_CreateWindowEx(0, $_TOOLTIPCONSTANTS_ClassName, "", $iStyle, 0, 0, 0, 0, $hWnd)
+EndFunc   ;==>_GUIToolTip_Create
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Bob Marotte (BrewManNH)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_Deactivate($hWnd)
+	_SendMessage($hWnd, $TTM_ACTIVATE, False)
+EndFunc   ;==>_GUIToolTip_Deactivate
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Bob Marotte (BrewManNH)
+; ===============================================================================================================================
+Func _GUIToolTip_DelTool($hWnd, $hTool, $iID = 0)
+	Local $tToolInfo = DllStructCreate($tagTOOLINFO)
+	Local $iToolInfo = DllStructGetSize($tToolInfo)
+	DllStructSetData($tToolInfo, "Size", $iToolInfo)
+	DllStructSetData($tToolInfo, "ID", $iID)
+	DllStructSetData($tToolInfo, "hWnd", $hTool)
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		_SendMessage($hWnd, $TTM_DELTOOLW, 0, $tToolInfo, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iToolInfo, $tMemMap)
+		_MemWrite($tMemMap, $tToolInfo)
+		_SendMessage($hWnd, $TTM_DELTOOLW, 0, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+EndFunc   ;==>_GUIToolTip_DelTool
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Gary Frost
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_Destroy(ByRef $hWnd)
+	If Not _WinAPI_IsClassName($hWnd, $_TOOLTIPCONSTANTS_ClassName) Then Return SetError(2, 2, False)
+
+	Local $iDestroyed = 0
+	If IsHWnd($hWnd) Then
+		If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+			$iDestroyed = _WinAPI_DestroyWindow($hWnd)
+		Else
+			; Not Allowed to Destroy Other Applications Control(s)
+			Return SetError(1, 1, False)
+		EndIf
+	EndIf
+	If $iDestroyed Then $hWnd = 0
+	Return $iDestroyed <> 0
+EndFunc   ;==>_GUIToolTip_Destroy
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_EnumTools($hWnd, $iIndex)
+	Local $tToolInfo = DllStructCreate($tagTOOLINFO)
+	Local $iToolInfo = DllStructGetSize($tToolInfo)
+	DllStructSetData($tToolInfo, "Size", $iToolInfo)
+	Local $bResult
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		$bResult = _SendMessage($hWnd, $TTM_ENUMTOOLSW, $iIndex, $tToolInfo, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iToolInfo, $tMemMap)
+		_MemWrite($tMemMap, $tToolInfo, $pMemory, $iToolInfo)
+		$bResult = _SendMessage($hWnd, $TTM_ENUMTOOLSW, $iIndex, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tToolInfo, $iToolInfo)
+		_MemFree($tMemMap)
+	EndIf
+	Return _GUIToolTip_ToolToArray($hWnd, $tToolInfo, $bResult = True)
+EndFunc   ;==>_GUIToolTip_EnumTools
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Bob Marotte (BrewManNH)
+; ===============================================================================================================================
+Func _GUIToolTip_GetBubbleHeight($hWnd, $hTool, $iID, $iFlags = Default)
+	If $iFlags = Default Then $iFlags = BitOR($TTF_IDISHWND, $TTF_SUBCLASS)
+	Return _WinAPI_HiWord(_GUIToolTip_GetBubbleSize($hWnd, $hTool, $iID, $iFlags))
+EndFunc   ;==>_GUIToolTip_GetBubbleHeight
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Bob Marotte (BrewManNH)
+; ===============================================================================================================================
+Func _GUIToolTip_GetBubbleSize($hWnd, $hTool, $iID, $iFlags = Default)
+	If $iFlags = Default Then $iFlags = BitOR($TTF_IDISHWND, $TTF_SUBCLASS)
+	Local $tToolInfo = DllStructCreate($tagTOOLINFO)
+	Local $iToolInfo = DllStructGetSize($tToolInfo)
+	DllStructSetData($tToolInfo, "Size", $iToolInfo)
+	DllStructSetData($tToolInfo, "hWnd", $hTool)
+	DllStructSetData($tToolInfo, "ID", $iID)
+	DllStructSetData($tToolInfo, "Flags", $iFlags)
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		$iRet = _SendMessage($hWnd, $TTM_GETBUBBLESIZE, 0, $tToolInfo, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iToolInfo, $tMemMap)
+		_MemWrite($tMemMap, $tToolInfo)
+		$iRet = _SendMessage($hWnd, $TTM_GETBUBBLESIZE, 0, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet
+EndFunc   ;==>_GUIToolTip_GetBubbleSize
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Bob Marotte (BrewManNH)
+; ===============================================================================================================================
+Func _GUIToolTip_GetBubbleWidth($hWnd, $hTool, $iID, $iFlags = Default)
+	If $iFlags = Default Then $iFlags = BitOR($TTF_IDISHWND, $TTF_SUBCLASS)
+	Return _WinAPI_LoWord(_GUIToolTip_GetBubbleSize($hWnd, $hTool, $iID, $iFlags))
+EndFunc   ;==>_GUIToolTip_GetBubbleWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_GetCurrentTool($hWnd)
+	Local $tToolInfo = DllStructCreate($tagTOOLINFO)
+	Local $iToolInfo = DllStructGetSize($tToolInfo)
+	DllStructSetData($tToolInfo, "Size", $iToolInfo)
+	Local $bResult
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		$bResult = _SendMessage($hWnd, $TTM_GETCURRENTTOOLW, 0, $tToolInfo, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iToolInfo, $tMemMap)
+		_MemWrite($tMemMap, $tToolInfo, $pMemory, $iToolInfo)
+		$bResult = _SendMessage($hWnd, $TTM_GETCURRENTTOOLW, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tToolInfo, $iToolInfo)
+		_MemFree($tMemMap)
+	EndIf
+	Return _GUIToolTip_ToolToArray($hWnd, $tToolInfo, $bResult = True)
+EndFunc   ;==>_GUIToolTip_GetCurrentTool
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......: Bob Marotte (BrewManNH)
+; ===============================================================================================================================
+Func _GUIToolTip_GetDelayTime($hWnd, $iDuration)
+	Return _SendMessage($hWnd, $TTM_GETDELAYTIME, $iDuration)
+EndFunc   ;==>_GUIToolTip_GetDelayTime
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_GetMargin($hWnd)
+	Local $aMargin[4]
+
+	Local $tRECT = _GUIToolTip_GetMarginEx($hWnd)
+	$aMargin[0] = DllStructGetData($tRECT, "Left")
+	$aMargin[1] = DllStructGetData($tRECT, "Top")
+	$aMargin[2] = DllStructGetData($tRECT, "Right")
+	$aMargin[3] = DllStructGetData($tRECT, "Bottom")
+	Return $aMargin
+EndFunc   ;==>_GUIToolTip_GetMargin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_GetMarginEx($hWnd)
+	Local $tRECT = DllStructCreate($tagRECT)
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		_SendMessage($hWnd, $TTM_GETMARGIN, 0, $tRECT, 0, "wparam", "struct*")
+	Else
+		Local $iRect = DllStructGetSize($tRECT)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iRect, $tMemMap)
+		_SendMessage($hWnd, $TTM_GETMARGIN, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tRECT, $iRect)
+		_MemFree($tMemMap)
+	EndIf
+	Return $tRECT
+EndFunc   ;==>_GUIToolTip_GetMarginEx
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_GetMaxTipWidth($hWnd)
+	Return _SendMessage($hWnd, $TTM_GETMAXTIPWIDTH)
+EndFunc   ;==>_GUIToolTip_GetMaxTipWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_GetText($hWnd, $hTool, $iID)
+	Local $tBuffer = DllStructCreate("wchar Text[4096]")
+	Local $tToolInfo = DllStructCreate($tagTOOLINFO)
+	Local $iToolInfo = DllStructGetSize($tToolInfo)
+	DllStructSetData($tToolInfo, "Size", $iToolInfo)
+	DllStructSetData($tToolInfo, "hWnd", $hTool)
+	DllStructSetData($tToolInfo, "ID", $iID)
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		DllStructSetData($tToolInfo, "Text", DllStructGetPtr($tBuffer))
+		_SendMessage($hWnd, $TTM_GETTEXTW, 0, $tToolInfo, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iToolInfo + 4096, $tMemMap)
+		Local $pText = $pMemory + $iToolInfo
+		DllStructSetData($tToolInfo, "Text", $pText)
+		_MemWrite($tMemMap, $tToolInfo, $pMemory, $iToolInfo)
+		_SendMessage($hWnd, $TTM_GETTEXTW, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pText, $tBuffer, 81)
+		_MemFree($tMemMap)
+	EndIf
+	Return DllStructGetData($tBuffer, "Text")
+EndFunc   ;==>_GUIToolTip_GetText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_GetTipBkColor($hWnd)
+	Return _SendMessage($hWnd, $TTM_GETTIPBKCOLOR)
+EndFunc   ;==>_GUIToolTip_GetTipBkColor
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_GetTipTextColor($hWnd)
+	Return _SendMessage($hWnd, $TTM_GETTIPTEXTCOLOR)
+EndFunc   ;==>_GUIToolTip_GetTipTextColor
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_GetTitleBitMap($hWnd)
+	Local $tBuffer = DllStructCreate("wchar Text[4096]")
+	Local $tTitle = DllStructCreate($tagTTGETTITLE)
+	Local $iTitle = DllStructGetSize($tTitle)
+	DllStructSetData($tTitle, "TitleMax", DllStructGetSize($tBuffer))
+	DllStructSetData($tTitle, "Size", $iTitle)
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		DllStructSetData($tTitle, "Title", DllStructGetPtr($tBuffer))
+		_SendMessage($hWnd, $TTM_GETTITLE, 0, $tTitle, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iTitle + 4096, $tMemMap)
+		Local $pText = $pMemory + $iTitle
+		DllStructSetData($tTitle, "Title", $pText)
+		_MemWrite($tMemMap, $tTitle, $pMemory, $iTitle)
+		_SendMessage($hWnd, $TTM_GETTITLE, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pText, $tBuffer, 4096)
+		_MemFree($tMemMap)
+	EndIf
+	Return DllStructGetData($tTitle, "Bitmap")
+EndFunc   ;==>_GUIToolTip_GetTitleBitMap
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_GetTitleText($hWnd)
+	Local $tBuffer = DllStructCreate("wchar Text[4096]")
+	Local $tTitle = DllStructCreate($tagTTGETTITLE)
+	Local $iTitle = DllStructGetSize($tTitle)
+	DllStructSetData($tTitle, "TitleMax", DllStructGetSize($tBuffer))
+	DllStructSetData($tTitle, "Size", $iTitle)
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		DllStructSetData($tTitle, "Title", DllStructGetPtr($tBuffer))
+		_SendMessage($hWnd, $TTM_GETTITLE, 0, $tTitle, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iTitle + 4096, $tMemMap)
+		Local $pText = $pMemory + $iTitle
+		DllStructSetData($tTitle, "Title", $pText)
+		_MemWrite($tMemMap, $tTitle, $pMemory, $iTitle)
+		_SendMessage($hWnd, $TTM_GETTITLE, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pText, $tBuffer, 4096)
+		_MemFree($tMemMap)
+	EndIf
+	Return DllStructGetData($tBuffer, "Text")
+EndFunc   ;==>_GUIToolTip_GetTitleText
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_GetToolCount($hWnd)
+	Return _SendMessage($hWnd, $TTM_GETTOOLCOUNT)
+EndFunc   ;==>_GUIToolTip_GetToolCount
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_GetToolInfo($hWnd, $hTool, $iID)
+	Local $tToolInfo = DllStructCreate($tagTOOLINFO)
+	Local $iToolInfo = DllStructGetSize($tToolInfo)
+	DllStructSetData($tToolInfo, "Size", $iToolInfo)
+	DllStructSetData($tToolInfo, "hWnd", $hTool)
+	DllStructSetData($tToolInfo, "ID", $iID)
+	Local $bResult
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		$bResult = _SendMessage($hWnd, $TTM_GETTOOLINFOW, 0, $tToolInfo, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iToolInfo, $tMemMap)
+		_MemWrite($tMemMap, $tToolInfo, $pMemory, $iToolInfo)
+		$bResult = _SendMessage($hWnd, $TTM_GETTOOLINFOW, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tToolInfo, $iToolInfo)
+		_MemFree($tMemMap)
+	EndIf
+	Return _GUIToolTip_ToolToArray($hWnd, $tToolInfo, $bResult = True)
+EndFunc   ;==>_GUIToolTip_GetToolInfo
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_HitTest($hWnd, $hTool, $iX, $iY)
+	Local $tHitTest = DllStructCreate($tagTTHITTESTINFO)
+	Local $tToolInfo = DllStructCreate($tagTOOLINFO)
+	Local $iToolInfo = DllStructGetSize($tToolInfo)
+	DllStructSetData($tHitTest, "Tool", $hTool)
+	DllStructSetData($tHitTest, "X", $iX)
+	DllStructSetData($tHitTest, "Y", $iY)
+	DllStructSetData($tHitTest, "Size", $iToolInfo)
+	Local $bResult
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		$bResult = _SendMessage($hWnd, $TTM_HITTESTW, 0, $tHitTest, 0, "wparam", "struct*")
+	Else
+		Local $iHitTest = DllStructGetSize($tHitTest)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iHitTest, $tMemMap)
+		_MemWrite($tMemMap, $tHitTest, $pMemory, $iHitTest)
+		$bResult = _SendMessage($hWnd, $TTM_HITTESTW, 0, $pMemory, 0, "wparam", "ptr")
+		_MemRead($tMemMap, $pMemory, $tHitTest, $iHitTest)
+		_MemFree($tMemMap)
+	EndIf
+	DllStructSetData($tToolInfo, "Size", DllStructGetData($tHitTest, "Size"))
+	DllStructSetData($tToolInfo, "Flags", DllStructGetData($tHitTest, "Flags"))
+	DllStructSetData($tToolInfo, "hWnd", DllStructGetData($tHitTest, "hWnd"))
+	DllStructSetData($tToolInfo, "ID", DllStructGetData($tHitTest, "ID"))
+	DllStructSetData($tToolInfo, "Left", DllStructGetData($tHitTest, "Left"))
+	DllStructSetData($tToolInfo, "Top", DllStructGetData($tHitTest, "Top"))
+	DllStructSetData($tToolInfo, "Right", DllStructGetData($tHitTest, "Right"))
+	DllStructSetData($tToolInfo, "Bottom", DllStructGetData($tHitTest, "Bottom"))
+	DllStructSetData($tToolInfo, "hInst", DllStructGetData($tHitTest, "hInst"))
+	DllStructSetData($tToolInfo, "Param", DllStructGetData($tHitTest, "Param"))
+	Return _GUIToolTip_ToolToArray($hWnd, $tToolInfo, $bResult = True)
+EndFunc   ;==>_GUIToolTip_HitTest
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_NewToolRect($hWnd, $hTool, $iID, $iLeft, $iTop, $iRight, $iBottom)
+	Local $tToolInfo = DllStructCreate($tagTOOLINFO)
+	Local $iToolInfo = DllStructGetSize($tToolInfo)
+	DllStructSetData($tToolInfo, "Size", $iToolInfo)
+	DllStructSetData($tToolInfo, "hwnd", $hTool)
+	DllStructSetData($tToolInfo, "ID", $iID)
+	DllStructSetData($tToolInfo, "Left", $iLeft)
+	DllStructSetData($tToolInfo, "Top", $iTop)
+	DllStructSetData($tToolInfo, "Right", $iRight)
+	DllStructSetData($tToolInfo, "Bottom", $iBottom)
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		_SendMessage($hWnd, $TTM_NEWTOOLRECTW, 0, $tToolInfo, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iToolInfo, $tMemMap)
+		_MemWrite($tMemMap, $tToolInfo)
+		_SendMessage($hWnd, $TTM_NEWTOOLRECTW, 0, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+EndFunc   ;==>_GUIToolTip_NewToolRect
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_Pop($hWnd)
+	_SendMessage($hWnd, $TTM_POP)
+EndFunc   ;==>_GUIToolTip_Pop
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_PopUp($hWnd)
+	_SendMessage($hWnd, $TTM_POPUP)
+EndFunc   ;==>_GUIToolTip_PopUp
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_SetDelayTime($hWnd, $iDuration, $iTime)
+	_SendMessage($hWnd, $TTM_SETDELAYTIME, $iDuration, $iTime)
+EndFunc   ;==>_GUIToolTip_SetDelayTime
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_SetMargin($hWnd, $iLeft, $iTop, $iRight, $iBottom)
+	Local $tRECT = DllStructCreate($tagRECT)
+	DllStructSetData($tRECT, "Left", $iLeft)
+	DllStructSetData($tRECT, "Top", $iTop)
+	DllStructSetData($tRECT, "Right", $iRight)
+	DllStructSetData($tRECT, "Bottom", $iBottom)
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		_SendMessage($hWnd, $TTM_SETMARGIN, 0, $tRECT, 0, "wparam", "struct*")
+	Else
+		Local $iRect = DllStructGetSize($tRECT)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iRect, $tMemMap)
+		_MemWrite($tMemMap, $tRECT)
+		_SendMessage($hWnd, $TTM_SETMARGIN, 0, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+EndFunc   ;==>_GUIToolTip_SetMargin
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_SetMaxTipWidth($hWnd, $iWidth)
+	Return _SendMessage($hWnd, $TTM_SETMAXTIPWIDTH, 0, $iWidth)
+EndFunc   ;==>_GUIToolTip_SetMaxTipWidth
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_SetTipBkColor($hWnd, $iColor)
+	_SendMessage($hWnd, $TTM_SETTIPBKCOLOR, $iColor)
+EndFunc   ;==>_GUIToolTip_SetTipBkColor
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_SetTipTextColor($hWnd, $iColor)
+	_SendMessage($hWnd, $TTM_SETTIPTEXTCOLOR, $iColor)
+EndFunc   ;==>_GUIToolTip_SetTipTextColor
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_SetTitle($hWnd, $sTitle, $iIcon = 0)
+	Local $iBuffer = StringLen($sTitle) + 1
+	Local $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+	$iBuffer *= 2
+	DllStructSetData($tBuffer, "Text", $sTitle)
+	Local $iRet
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		$iRet = _SendMessage($hWnd, $TTM_SETTITLEW, $iIcon, $tBuffer, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
+		_MemWrite($tMemMap, $tBuffer)
+		$iRet = _SendMessage($hWnd, $TTM_SETTITLEW, $iIcon, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+	Return $iRet <> 0
+EndFunc   ;==>_GUIToolTip_SetTitle
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_SetToolInfo($hWnd, $sText, $iID = 0, $iLeft = 0, $iTop = 0, $iRight = 0, $iBottom = 0, $iFlags = Default, $iParam = 0)
+	If $iFlags = Default Then $iFlags = BitOR($TTF_SUBCLASS, $TTF_IDISHWND)
+	Local $tBuffer = DllStructCreate("wchar Text[4096]")
+	Local $tToolInfo = DllStructCreate($tagTOOLINFO)
+	Local $iToolInfo = DllStructGetSize($tToolInfo)
+	DllStructSetData($tBuffer, "Text", $sText)
+	DllStructSetData($tToolInfo, "Size", $iToolInfo)
+	DllStructSetData($tToolInfo, "Flags", $iFlags)
+	DllStructSetData($tToolInfo, "hWnd", $hWnd)
+	DllStructSetData($tToolInfo, "ID", $iID)
+	DllStructSetData($tToolInfo, "Left", $iLeft)
+	DllStructSetData($tToolInfo, "Top", $iTop)
+	DllStructSetData($tToolInfo, "Right", $iRight)
+	DllStructSetData($tToolInfo, "Bottom", $iBottom)
+	DllStructSetData($tToolInfo, "Param", $iParam)
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		DllStructSetData($tToolInfo, "Text", DllStructGetPtr($tBuffer))
+		_SendMessage($hWnd, $TTM_SETTOOLINFOW, 0, $tToolInfo, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iToolInfo + 4096, $tMemMap)
+		Local $pText = $pMemory + $iToolInfo
+		DllStructSetData($tToolInfo, "Text", $pText)
+		_MemWrite($tMemMap, $tToolInfo, $pMemory, $iToolInfo)
+		_MemWrite($tMemMap, $pText, $tBuffer, 4096)
+		_SendMessage($hWnd, $TTM_SETTOOLINFOW, 0, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+EndFunc   ;==>_GUIToolTip_SetToolInfo
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_SetWindowTheme($hWnd, $sStyle)
+	Local $tBuffer = _WinAPI_MultiByteToWideChar($sStyle)
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		_SendMessage($hWnd, $TTM_SETWINDOWTHEME, 0, $tBuffer, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, 4096, $tMemMap)
+		_MemWrite($tMemMap, $tBuffer)
+		_SendMessage($hWnd, $TTM_SETWINDOWTHEME, 0, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+EndFunc   ;==>_GUIToolTip_SetWindowTheme
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_ToolExists($hWnd)
+	Return _SendMessage($hWnd, $TTM_GETCURRENTTOOL) <> 0
+EndFunc   ;==>_GUIToolTip_ToolExists
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_ToolToArray($hWnd, ByRef $tToolInfo, $iError)
+	Local $aTool[10]
+
+	$aTool[0] = DllStructGetData($tToolInfo, "Flags")
+	$aTool[1] = DllStructGetData($tToolInfo, "hWnd")
+	$aTool[2] = DllStructGetData($tToolInfo, "ID")
+	$aTool[3] = DllStructGetData($tToolInfo, "Left")
+	$aTool[4] = DllStructGetData($tToolInfo, "Top")
+	$aTool[5] = DllStructGetData($tToolInfo, "Right")
+	$aTool[6] = DllStructGetData($tToolInfo, "Bottom")
+	$aTool[7] = DllStructGetData($tToolInfo, "hInst")
+	$aTool[8] = _GUIToolTip_GetText($hWnd, $aTool[1], $aTool[2])
+	$aTool[9] = DllStructGetData($tToolInfo, "Param")
+	Return SetError($iError, 0, $aTool)
+EndFunc   ;==>_GUIToolTip_ToolToArray
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_TrackActivate($hWnd, $bActivate = True, $hTool = 0, $iID = 0)
+	Local $tToolInfo = DllStructCreate($tagTOOLINFO)
+	Local $iToolInfo = DllStructGetSize($tToolInfo)
+
+	DllStructSetData($tToolInfo, "Size", $iToolInfo)
+	DllStructSetData($tToolInfo, "hWnd", $hTool)
+	DllStructSetData($tToolInfo, "ID", $iID)
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		_SendMessage($hWnd, $TTM_TRACKACTIVATE, $bActivate, $tToolInfo, 0, "wparam", "struct*")
+	Else
+		$iToolInfo = DllStructGetSize($tToolInfo)
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iToolInfo, $tMemMap)
+		_MemWrite($tMemMap, $tToolInfo)
+		_SendMessage($hWnd, $TTM_TRACKACTIVATE, $bActivate, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+EndFunc   ;==>_GUIToolTip_TrackActivate
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_TrackPosition($hWnd, $iX, $iY)
+	_SendMessage($hWnd, $TTM_TRACKPOSITION, 0, _WinAPI_MakeLong($iX, $iY))
+EndFunc   ;==>_GUIToolTip_TrackPosition
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_Update($hWnd)
+	_SendMessage($hWnd, $TTM_UPDATE)
+EndFunc   ;==>_GUIToolTip_Update
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Paul Campbell (PaulIA)
+; Modified.......:
+; ===============================================================================================================================
+Func _GUIToolTip_UpdateTipText($hWnd, $hTool, $iID, $sText)
+	Local $iBuffer = StringLen($sText) + 1
+	Local $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
+	$iBuffer *= 2
+	Local $tToolInfo = DllStructCreate($tagTOOLINFO)
+	Local $iToolInfo = DllStructGetSize($tToolInfo)
+	DllStructSetData($tBuffer, "Text", $sText)
+	DllStructSetData($tToolInfo, "Size", $iToolInfo)
+	DllStructSetData($tToolInfo, "hWnd", $hTool)
+	DllStructSetData($tToolInfo, "ID", $iID)
+	If _WinAPI_InProcess($hWnd, $__g_hTTLastWnd) Then
+		DllStructSetData($tToolInfo, "Text", DllStructGetPtr($tBuffer))
+		_SendMessage($hWnd, $TTM_UPDATETIPTEXTW, 0, $tToolInfo, 0, "wparam", "struct*")
+	Else
+		Local $tMemMap
+		Local $pMemory = _MemInit($hWnd, $iToolInfo + $iBuffer, $tMemMap)
+		Local $pText = $pMemory + $iToolInfo
+		DllStructSetData($tToolInfo, "Text", $pText)
+		_MemWrite($tMemMap, $tToolInfo, $pMemory, $iToolInfo)
+		_MemWrite($tMemMap, $tBuffer, $pText, $iBuffer)
+		_SendMessage($hWnd, $TTM_UPDATETIPTEXTW, 0, $pMemory, 0, "wparam", "ptr")
+		_MemFree($tMemMap)
+	EndIf
+EndFunc   ;==>_GUIToolTip_UpdateTipText

ファイルの差分が大きいため隠しています
+ 1689 - 0
include/GuiToolbar.au3


ファイルの差分が大きいため隠しています
+ 2508 - 0
include/GuiTreeView.au3


+ 120 - 0
include/HeaderConstants.au3

@@ -0,0 +1,120 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: Header_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants for Header functions.
+; Author(s) .....: Valik, Gary Frost
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $HDF_LEFT = 0x00000000
+Global Const $HDF_RIGHT = 0x00000001
+Global Const $HDF_CENTER = 0x00000002
+Global Const $HDF_JUSTIFYMASK = 0x00000003
+
+Global Const $HDF_BITMAP_ON_RIGHT = 0x00001000
+Global Const $HDF_BITMAP = 0x00002000
+Global Const $HDF_STRING = 0x00004000
+Global Const $HDF_OWNERDRAW = 0x00008000
+Global Const $HDF_DISPLAYMASK = 0x0000F000
+
+Global Const $HDF_RTLREADING = 0x00000004
+Global Const $HDF_SORTDOWN = 0x00000200
+Global Const $HDF_IMAGE = 0x00000800
+Global Const $HDF_SORTUP = 0x00000400
+Global Const $HDF_FLAGMASK = 0x00000E04
+
+Global Const $HDI_WIDTH = 0x00000001
+Global Const $HDI_TEXT = 0x00000002
+Global Const $HDI_FORMAT = 0x00000004
+Global Const $HDI_PARAM = 0x00000008
+Global Const $HDI_BITMAP = 0x00000010
+Global Const $HDI_IMAGE = 0x00000020
+Global Const $HDI_DI_SETITEM = 0x00000040
+Global Const $HDI_ORDER = 0x00000080
+Global Const $HDI_FILTER = 0x00000100
+
+Global Const $HHT_NOWHERE = 0x00000001
+Global Const $HHT_ONHEADER = 0x00000002
+Global Const $HHT_ONDIVIDER = 0x00000004
+Global Const $HHT_ONDIVOPEN = 0x00000008
+Global Const $HHT_ONFILTER = 0x00000010
+Global Const $HHT_ONFILTERBUTTON = 0x00000020
+Global Const $HHT_ABOVE = 0x00000100
+Global Const $HHT_BELOW = 0x00000200
+Global Const $HHT_TORIGHT = 0x00000400
+Global Const $HHT_TOLEFT = 0x00000800
+
+; Messages
+Global Const $HDM_FIRST = 0x1200
+Global Const $HDM_CLEARFILTER = $HDM_FIRST + 24
+Global Const $HDM_CREATEDRAGIMAGE = $HDM_FIRST + 16
+Global Const $HDM_DELETEITEM = $HDM_FIRST + 2
+Global Const $HDM_EDITFILTER = $HDM_FIRST + 23
+Global Const $HDM_GETBITMAPMARGIN = $HDM_FIRST + 21
+Global Const $HDM_GETFOCUSEDITEM = $HDM_FIRST + 27
+Global Const $HDM_GETIMAGELIST = $HDM_FIRST + 9
+Global Const $HDM_GETITEMA = $HDM_FIRST + 3
+Global Const $HDM_GETITEMW = $HDM_FIRST + 11
+Global Const $HDM_GETITEMCOUNT = $HDM_FIRST + 0
+Global Const $HDM_GETITEMDROPDOWNRECT = $HDM_FIRST + 25
+Global Const $HDM_GETITEMRECT = $HDM_FIRST + 7
+Global Const $HDM_GETORDERARRAY = $HDM_FIRST + 17
+Global Const $HDM_GETOVERFLOWRECT = $HDM_FIRST + 26
+Global Const $HDM_GETUNICODEFORMAT = 0x2000 + 6
+Global Const $HDM_HITTEST = $HDM_FIRST + 6
+Global Const $HDM_INSERTITEMA = $HDM_FIRST + 1
+Global Const $HDM_INSERTITEMW = $HDM_FIRST + 10
+Global Const $HDM_LAYOUT = $HDM_FIRST + 5
+Global Const $HDM_ORDERTOINDEX = $HDM_FIRST + 15
+Global Const $HDM_SETBITMAPMARGIN = $HDM_FIRST + 20
+Global Const $HDM_SETFILTERCHANGETIMEOUT = $HDM_FIRST + 22
+Global Const $HDM_SETFOCUSEDITEM = $HDM_FIRST + 28
+Global Const $HDM_SETHOTDIVIDER = $HDM_FIRST + 19
+Global Const $HDM_SETIMAGELIST = $HDM_FIRST + 8
+Global Const $HDM_SETITEMA = $HDM_FIRST + 4
+Global Const $HDM_SETITEMW = $HDM_FIRST + 12
+Global Const $HDM_SETORDERARRAY = $HDM_FIRST + 18
+Global Const $HDM_SETUNICODEFORMAT = 0x2000 + 5
+
+; Notifications
+Global Const $HDN_FIRST = -300
+Global Const $HDN_BEGINDRAG = $HDN_FIRST - 10 ; Sent when a drag operation has begun
+Global Const $HDN_BEGINTRACK = $HDN_FIRST - 6 ; Sent when the user has begun dragging a divider
+Global Const $HDN_DIVIDERDBLCLICK = $HDN_FIRST - 5 ; Sent when the user double clicks the divider
+Global Const $HDN_ENDDRAG = $HDN_FIRST - 11 ; Sent when a drag operation has ended
+Global Const $HDN_ENDTRACK = $HDN_FIRST - 7 ; Sent when the user has finished dragging a divider
+Global Const $HDN_FILTERBTNCLICK = $HDN_FIRST - 13 ; Sent when filter button is clicked
+Global Const $HDN_FILTERCHANGE = $HDN_FIRST - 12 ; Sent when the attributes of a header control filter are being changed
+Global Const $HDN_GETDISPINFO = $HDN_FIRST - 9 ; Sent when the control needs information about a callback
+Global Const $HDN_ITEMCHANGED = $HDN_FIRST - 1 ; Sent when a header item has changed
+Global Const $HDN_ITEMCHANGING = $HDN_FIRST - 0 ; Sent when a header item is about to change
+Global Const $HDN_ITEMCLICK = $HDN_FIRST - 2 ; Sent when the user clicks the control
+Global Const $HDN_ITEMDBLCLICK = $HDN_FIRST - 3 ; Sent when the user double clicks the control
+Global Const $HDN_TRACK = $HDN_FIRST - 8 ; Sent when the user is dragging a divider
+Global Const $HDN_BEGINTRACKW = $HDN_FIRST - 26 ; [Unicode] Sent when the user has begun dragging a divider
+Global Const $HDN_DIVIDERDBLCLICKW = $HDN_FIRST - 25 ; [Unicode] Sent when the user double clicks the divider
+Global Const $HDN_ENDTRACKW = $HDN_FIRST - 27 ; [Unicode] Sent when the user has finished dragging a divider
+Global Const $HDN_GETDISPINFOW = $HDN_FIRST - 29 ; [Unicode] Sent when the control needs information about a callback
+Global Const $HDN_ITEMCHANGEDW = $HDN_FIRST - 21 ; [Unicode] Sent when a header item has changed
+Global Const $HDN_ITEMCHANGINGW = $HDN_FIRST - 20 ; [Unicode] Sent when a header item is about to change
+Global Const $HDN_ITEMCLICKW = $HDN_FIRST - 22 ; [Unicode] Sent when the user clicks the control
+Global Const $HDN_ITEMDBLCLICKW = $HDN_FIRST - 23 ; [Unicode] Sent when the user double clicks the control
+Global Const $HDN_TRACKW = $HDN_FIRST - 28 ; [Unicode] Sent when the user is dragging a divider
+
+; Styles
+Global Const $HDS_BUTTONS = 0x00000002 ; Each item in the control looks and behaves like a push button
+Global Const $HDS_CHECKBOXES = 0x00000400 ; Allows the placing of checkboxes on header items on Vista
+Global Const $HDS_DRAGDROP = 0x00000040 ; Allows drag-and-drop reordering of header items
+Global Const $HDS_FILTERBAR = 0x00000100 ; Include a filter bar as part of the standard header control
+Global Const $HDS_FLAT = 0x00000200 ; Control is drawn flat when XP is running in classic mode
+Global Const $HDS_FULLDRAG = 0x00000080 ; Column contents are displayed while the user resizes a column
+Global Const $HDS_HIDDEN = 0x00000008 ; Indicates a header control that is intended to be hidden
+Global Const $HDS_HORZ = 0x00000000 ; Creates a header control with a horizontal orientation
+Global Const $HDS_HOTTRACK = 0x00000004 ; Enables hot tracking
+Global Const $HDS_NOSIZING = 0x0800 ; The user cannot drag the divider on the header control on Vista
+Global Const $HDS_OVERFLOW = 0x1000 ; A button is displayed when not all items can be displayed within the header control's rectangle on Vista
+Global Const $HDS_DEFAULT = 0x00000046 ; Default header style $HDS_DRAGDROP + $HDS_HOTTRACK + $HDS_BUTTONS
+; ===============================================================================================================================

ファイルの差分が大きいため隠しています
+ 3440 - 0
include/IE_En.au3


+ 23 - 0
include/IPAddressConstants.au3

@@ -0,0 +1,23 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: IPAddress_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants for IPAddress functions.
+; Author(s) .....: Valik, Gary Frost, ...
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $__IPADDRESSCONSTANT_WM_USER = 0X400
+Global Const $IPM_CLEARADDRESS = ($__IPADDRESSCONSTANT_WM_USER + 100)
+Global Const $IPM_SETADDRESS = ($__IPADDRESSCONSTANT_WM_USER + 101)
+Global Const $IPM_GETADDRESS = ($__IPADDRESSCONSTANT_WM_USER + 102)
+Global Const $IPM_SETRANGE = ($__IPADDRESSCONSTANT_WM_USER + 103)
+Global Const $IPM_SETFOCUS = ($__IPADDRESSCONSTANT_WM_USER + 104)
+Global Const $IPM_ISBLANK = ($__IPADDRESSCONSTANT_WM_USER + 105)
+
+; Notifications
+Global Const $IPN_FIRST = (-860)
+Global Const $IPN_FIELDCHANGED = ($IPN_FIRST - 0) ; Sent when the user changes a field or moves from one field to another
+; ===============================================================================================================================

+ 41 - 0
include/ImageListConstants.au3

@@ -0,0 +1,41 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: ImageList_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants for ImageList functions.
+; Author(s) .....: Gary Frost
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $ILC_MASK = 0x00000001
+Global Const $ILC_COLOR = 0x00000000
+Global Const $ILC_COLORDDB = 0x000000FE
+Global Const $ILC_COLOR4 = 0x00000004
+Global Const $ILC_COLOR8 = 0x00000008
+Global Const $ILC_COLOR16 = 0x00000010
+Global Const $ILC_COLOR24 = 0x00000018
+Global Const $ILC_COLOR32 = 0x00000020
+Global Const $ILC_PALETTE = 0x00000800
+Global Const $ILC_MIRROR = 0x00002000
+Global Const $ILC_PERITEMMIRROR = 0x00008000
+
+Global Const $ILCF_MOVE = 0x0
+Global Const $ILCF_SWAP = 0x1
+
+Global Const $ILD_NORMAL = 0x00000000
+Global Const $ILD_TRANSPARENT = 0x00000001
+Global Const $ILD_BLEND25 = 0x00000002
+Global Const $ILD_BLEND50 = 0x00000004
+Global Const $ILD_MASK = 0x00000010
+Global Const $ILD_IMAGE = 0x00000020
+Global Const $ILD_ROP = 0x00000040
+Global Const $ILD_OVERLAYMASK = 0x00000F00
+
+Global Const $ILS_NORMAL = 0x00000000
+Global Const $ILS_GLOW = 0x00000001
+Global Const $ILS_SHADOW = 0x00000002
+Global Const $ILS_SATURATE = 0x00000004
+Global Const $ILS_ALPHA = 0x00000008
+; ===============================================================================================================================

+ 341 - 0
include/Inet.au3

@@ -0,0 +1,341 @@
+#include-once
+
+#include "Date.au3"
+#include "InetConstants.au3"
+#include "StringConstants.au3"
+#include "WinAPIInternals.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Edit Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with Internet.
+; Author(s) .....: Larry, Ezzetabi, Jarvis Stubblefield, Wes Wolfe-Wolvereness, Wouter, Walkabout, Florian Fida, guinness
+; Dll ...........: wininet.dll, ws2_32.dll
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _GetIP
+; _INetExplorerCapable
+; _INetGetSource
+; _INetMail
+; _INetSmtpMail
+; _TCPIpToName
+; ===============================================================================================================================
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; __SmtpTrace
+; __SmtpSend
+; __TCPIpToName_szStringRead
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: guinness, Mat
+; ===============================================================================================================================
+Func _GetIP()
+	Local Const $GETIP_TIMER = 300000 ; Constant for how many milliseconds between each check. This is 5 minutes.
+	Local Static $hTimer = 0 ; Create a static variable to store the timer handle.
+	Local Static $sLastIP = 0 ; Create a static variable to store the last IP.
+
+	If TimerDiff($hTimer) < $GETIP_TIMER And Not $sLastIP Then ; If still in the timer and $sLastIP contains a value.
+		Return SetExtended(1, $sLastIP) ; Return the last IP instead and set @extended to 1.
+	EndIf
+
+	#cs
+		Additional list of possible IP disovery sites by z3r0c00l12.
+		http://corz.org/ip
+		http://icanhazip.com
+		http://ip.appspot.com
+		http://ip.eprci.net/text
+		http://ip.jsontest.com/
+		http://services.packetizer.com/ipaddress/?f=text
+		http://whatthehellismyip.com/?ipraw
+		http://wtfismyip.com/text
+		http://www.networksecuritytoolkit.org/nst/tools/ip.php
+		http://www.telize.com/ip
+		http://www.trackip.net/ip
+	#ce
+	Local $aGetIPURL = ["https://api.ipify.org", "http://checkip.dyndns.org", "http://www.myexternalip.com/raw", "http://bot.whatismyipaddress.com"], _
+			$aReturn = 0, _
+			$sReturn = ""
+
+	For $i = 0 To UBound($aGetIPURL) - 1
+		$sReturn = InetRead($aGetIPURL[$i])
+		If @error Or $sReturn == "" Then ContinueLoop
+		$aReturn = StringRegExp(BinaryToString($sReturn), "((?:\d{1,3}\.){3}\d{1,3})", $STR_REGEXPARRAYGLOBALMATCH) ; [\d\.]{7,15}
+		If Not @error Then
+			$sReturn = $aReturn[0]
+			ExitLoop
+		EndIf
+		$sReturn = ""
+	Next
+
+	$hTimer = TimerInit() ; Create a new timer handle.
+	$sLastIP = $sReturn ; Store this IP.
+	If $sReturn == "" Then Return SetError(1, 0, -1)
+	Return $sReturn
+EndFunc   ;==>_GetIP
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Wes Wolfe-Wolvereness <Weswolf at aol dot com>
+; ===============================================================================================================================
+Func _INetExplorerCapable($sIEString)
+	If StringLen($sIEString) <= 0 Then Return SetError(1, 0, '')
+	Local $s_IEReturn
+	Local $n_IEChar
+	For $i_IECount = 1 To StringLen($sIEString)
+		$n_IEChar = '0x' & Hex(Asc(StringMid($sIEString, $i_IECount, 1)), 2)
+		If $n_IEChar < 0x21 Or $n_IEChar = 0x25 Or $n_IEChar = 0x2f Or $n_IEChar > 0x7f Then
+			$s_IEReturn = $s_IEReturn & '%' & StringRight($n_IEChar, 2)
+		Else
+			$s_IEReturn = $s_IEReturn & Chr($n_IEChar)
+		EndIf
+	Next
+	Return $s_IEReturn
+EndFunc   ;==>_INetExplorerCapable
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Wouter van Kesteren.
+; ===============================================================================================================================
+Func _INetGetSource($sURL, $bString = True)
+	Local $sString = InetRead($sURL, $INET_FORCERELOAD)
+	Local $iError = @error, $iExtended = @extended
+	If $bString = Default Or $bString Then $sString = BinaryToString($sString)
+	Return SetError($iError, $iExtended, $sString)
+EndFunc   ;==>_INetGetSource
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Wes Wolfe-Wolvereness <Weswolf at aol dot com>, modified by Emiel Wieldraaijer
+; ===============================================================================================================================
+Func _INetMail($sMailTo, $sMailSubject, $sMailBody)
+	Local $iPrev = Opt("ExpandEnvStrings", 1)
+	Local $sVar, $sDflt = RegRead('HKCU\Software\Clients\Mail', "")
+	If $sDflt = "Windows Live Mail" Then
+		$sVar = RegRead('HKCR\WLMail.Url.Mailto\Shell\open\command', "")
+	Else
+		$sVar = RegRead('HKCR\mailto\shell\open\command', "")
+	EndIf
+	Local $iRet = Run(StringReplace($sVar, '%1', _INetExplorerCapable('mailto:' & $sMailTo & '?subject=' & $sMailSubject & '&body=' & $sMailBody)))
+	Local $iError = @error, $iExtended = @extended
+	Opt("ExpandEnvStrings", $iPrev)
+	Return SetError($iError, $iExtended, $iRet)
+EndFunc   ;==>_INetMail
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Asimzameer, Walkabout
+; Modified.......: Jpm
+; ===============================================================================================================================
+Func _INetSmtpMail($sSMTPServer, $sFromName, $sFromAddress, $sToAddress, $sSubject = "", $aBody = "", $sEHLO = "", $sFirst = "", $bTrace = 0)
+	If $sSMTPServer = "" Or $sFromAddress = "" Or $sToAddress = "" Or $sFromName = "" Or StringLen($sFromName) > 256 Then Return SetError(1, 0, 0)
+	If $sEHLO = "" Then $sEHLO = @ComputerName
+
+	If TCPStartup() = 0 Then Return SetError(2, 0, 0)
+
+	Local $s_IPAddress, $i_Count
+	If StringRegExp($sSMTPServer, "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$") Then
+		$s_IPAddress = $sSMTPServer
+	Else
+		$s_IPAddress = TCPNameToIP($sSMTPServer)
+	EndIf
+	If $s_IPAddress = "" Then
+		TCPShutdown()
+		Return SetError(3, 0, 0)
+	EndIf
+	Local $vSocket = TCPConnect($s_IPAddress, 25)
+	If $vSocket = -1 Then
+		TCPShutdown()
+		Return SetError(4, 0, 0)
+	EndIf
+
+	Local $aSend[6], $aReplyCode[6] ; Return code from SMTP server indicating success
+	$aSend[0] = "HELO " & $sEHLO & @CRLF
+	If StringLeft($sEHLO, 5) = "EHLO " Then $aSend[0] = $sEHLO & @CRLF
+	$aReplyCode[0] = "250"
+
+	$aSend[1] = "MAIL FROM: <" & $sFromAddress & ">" & @CRLF
+	$aReplyCode[1] = "250"
+	$aSend[2] = "RCPT TO: <" & $sToAddress & ">" & @CRLF
+	$aReplyCode[2] = "250"
+	$aSend[3] = "DATA" & @CRLF
+	$aReplyCode[3] = "354"
+
+	Local $aResult = _Date_Time_GetTimeZoneInformation()
+	Local $iBias = -$aResult[1] / 60
+	Local $iBiasH = Int($iBias)
+	Local $iBiasM = 0
+	If $iBiasH <> $iBias Then $iBiasM = Abs($iBias - $iBiasH) * 60
+	$iBias = StringFormat(" (%+.2d%.2d)", $iBiasH, $iBiasM)
+
+	$aSend[4] = "From:" & $sFromName & "<" & $sFromAddress & ">" & @CRLF & _
+			"To:" & "<" & $sToAddress & ">" & @CRLF & _
+			"Subject:" & $sSubject & @CRLF & _
+			"Mime-Version: 1.0" & @CRLF & _
+			"Date: " & _DateDayOfWeek(@WDAY, 1) & ", " & @MDAY & " " & _DateToMonth(@MON, 1) & " " & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & $iBias & @CRLF & _
+			"Content-Type: text/plain; charset=US-ASCII" & @CRLF & _
+			@CRLF
+	$aReplyCode[4] = ""
+
+	$aSend[5] = @CRLF & "." & @CRLF
+	$aReplyCode[5] = "250"
+
+	; open stmp session
+	If __SmtpSend($vSocket, $aSend[0], $aReplyCode[0], $bTrace, "220", $sFirst) Then Return SetError(50, 0, 0)
+
+	; send header
+	For $i_Count = 1 To UBound($aSend) - 2
+		If __SmtpSend($vSocket, $aSend[$i_Count], $aReplyCode[$i_Count], $bTrace) Then Return SetError(50 + $i_Count, 0, 0)
+	Next
+
+	; send body records (a record can be multiline : take care of a subline beginning with a dot should be ..)
+	For $i_Count = 0 To UBound($aBody) - 1
+		; correct line beginning with a dot
+		If StringLeft($aBody[$i_Count], 1) = "." Then $aBody[$i_Count] = "." & $aBody[$i_Count]
+
+		If __SmtpSend($vSocket, $aBody[$i_Count] & @CRLF, "", $bTrace) Then Return SetError(500 + $i_Count, 0, 0)
+	Next
+
+	; close the smtp session
+	$i_Count = UBound($aSend) - 1
+	If __SmtpSend($vSocket, $aSend[$i_Count], $aReplyCode[$i_Count], $bTrace) Then Return SetError(5000, 0, 0)
+
+	TCPCloseSocket($vSocket)
+	TCPShutdown()
+	Return 1
+EndFunc   ;==>_INetSmtpMail
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __SmtpTrace
+; Description ...: Used internally within this file, not for general use
+; Syntax.........: __SmtpTrace ( $sStr [, $iTimeout = 0] )
+; Author ........: Asimzameer, Walkabout
+; Modified.......: Jpm
+; ===============================================================================================================================
+Func __SmtpTrace($sStr, $iTimeout = 0)
+	Local $sW_TITLE = "SMTP trace"
+	Local $sSmtpTrace = ControlGetText($sW_TITLE, "", "Static1")
+	$sStr = StringLeft(StringReplace($sStr, @CRLF, ""), 70)
+	$sSmtpTrace &= @HOUR & ":" & @MIN & ":" & @SEC & " " & $sStr & @LF
+	If WinExists($sW_TITLE) Then
+		ControlSetText($sW_TITLE, "", "Static1", $sSmtpTrace)
+	Else
+		SplashTextOn($sW_TITLE, $sSmtpTrace, 400, 500, 500, 100, 4 + 16, "", 8)
+	EndIf
+	If $iTimeout Then Sleep($iTimeout * 1000)
+EndFunc   ;==>__SmtpTrace
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __SmtpSend
+; Description ...: Used internally within this file, not for general use
+; Syntax.........: __SmtpSend ( $vSocket, $sSend, $sReplyCode, $bTrace [, $sIntReply="" [, $sFirst=""]] )
+; Author ........: Asimzameer, Walkabout
+; Modified.......: Jpm
+; ===============================================================================================================================
+Func __SmtpSend($vSocket, $sSend, $sReplyCode, $bTrace, $sIntReply = "", $sFirst = "")
+	Local $sReceive, $i, $hTimer
+	If $bTrace Then __SmtpTrace($sSend)
+
+	If $sIntReply <> "" Then
+
+		; Send special first char to awake smtp server
+		If $sFirst <> -1 Then
+			If TCPSend($vSocket, $sFirst) = 0 Then
+				TCPCloseSocket($vSocket)
+				TCPShutdown()
+				Return 1; cannot send
+			EndIf
+		EndIf
+
+		; Check intermediate reply before HELO acceptation
+		$sReceive = ""
+		$hTimer = TimerInit()
+		While StringLeft($sReceive, StringLen($sIntReply)) <> $sIntReply And TimerDiff($hTimer) < 45000
+			$sReceive = TCPRecv($vSocket, 1000)
+			If $bTrace And $sReceive <> "" Then __SmtpTrace("intermediate->" & $sReceive)
+		WEnd
+	EndIf
+
+	; Send string.
+	If TCPSend($vSocket, $sSend) = 0 Then
+		TCPCloseSocket($vSocket)
+		TCPShutdown()
+		Return 1; cannot send
+	EndIf
+
+	$hTimer = TimerInit()
+
+	$sReceive = ""
+	While $sReceive = "" And TimerDiff($hTimer) < 45000
+		$i += 1
+		$sReceive = TCPRecv($vSocket, 1000)
+		If $sReplyCode = "" Then ExitLoop
+	WEnd
+
+	If $sReplyCode <> "" Then
+		; Check replycode
+		If $bTrace Then __SmtpTrace($i & " <- " & $sReceive)
+
+		If StringLeft($sReceive, StringLen($sReplyCode)) <> $sReplyCode Then
+			TCPCloseSocket($vSocket)
+			TCPShutdown()
+			If $bTrace Then __SmtpTrace("<-> " & $sReplyCode, 5)
+			Return 2; bad receive code
+		EndIf
+	EndIf
+
+	Return 0
+EndFunc   ;==>__SmtpSend
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Florian Fida
+; ===============================================================================================================================
+Func _TCPIpToName($sIp, $iOption = Default, $hDll = Default)
+	Local $iINADDR_NONE = 0xffffffff, $iAF_INET = 2, $sSeparator = @CR
+	If $iOption = Default Then $iOption = 0
+	If $hDll = Default Then $hDll = "ws2_32.dll"
+	Local $avDllCall = DllCall($hDll, "ulong", "inet_addr", "STR", $sIp)
+	If @error Then Return SetError(1, 0, "") ; inet_addr DllCall Failed
+	Local $vBinIP = $avDllCall[0]
+	If $vBinIP = $iINADDR_NONE Then Return SetError(2, 0, "") ; inet_addr Failed
+	$avDllCall = DllCall($hDll, "ptr", "gethostbyaddr", "ptr*", $vBinIP, "int", 4, "int", $iAF_INET)
+	If @error Then Return SetError(3, 0, "") ; gethostbyaddr DllCall Failed
+	Local $pvHostent = $avDllCall[0]
+	If $pvHostent = 0 Then
+		$avDllCall = DllCall($hDll, "int", "WSAGetLastError")
+		If @error Then Return SetError(5, 0, "") ; gethostbyaddr Failed, WSAGetLastError Failed
+		Return SetError(4, $avDllCall[0], "") ; gethostbyaddr Failed, WSAGetLastError = @extended
+	EndIf
+	Local $tHostent = DllStructCreate("ptr;ptr;short;short;ptr", $pvHostent)
+	Local $sHostnames = __TCPIpToName_szStringRead(DllStructGetData($tHostent, 1))
+	If @error Then Return SetError(6, 0, $sHostnames) ; strlen/sZStringRead Failed
+	If $iOption = 1 Then
+		Local $tAliases
+		$sHostnames &= $sSeparator
+		For $i = 0 To 63 ; up to 64 Aliases
+			$tAliases = DllStructCreate("ptr", DllStructGetData($tHostent, 2) + ($i * 4))
+			If DllStructGetData($tAliases, 1) = 0 Then ExitLoop ; Null Pointer
+			$sHostnames &= __TCPIpToName_szStringRead(DllStructGetData($tAliases, 1))
+			If @error Then
+				SetError(7) ; Error reading array
+				ExitLoop
+			EndIf
+		Next
+		Return StringSplit(StringStripWS($sHostnames, $STR_STRIPTRAILING), @CR)
+	Else
+		Return $sHostnames
+	EndIf
+EndFunc   ;==>_TCPIpToName
+
+; #INTERNAL_USE_ONLY# ===========================================================================================================
+; Name...........: __TCPIpToName_szStringRead
+; Description ...: Used internally within this file, not for general use
+; Syntax.........: __TCPIpToName_szStringRead ( $pStr [, $iLen = -1] )
+; Author ........: Florian Fida
+; ===============================================================================================================================
+Func __TCPIpToName_szStringRead($pStr, $iLen = -1)
+	Local $tString
+	If $pStr < 1 Then Return "" ; Null Pointer
+	If $iLen < 0 Then $iLen = _WinAPI_StrLen($pStr, False)
+	$tString = DllStructCreate("char[" & $iLen & "]", $pStr)
+	If @error Then Return SetError(2, 0, "")
+	Return SetExtended($iLen, DllStructGetData($tString, 1))
+EndFunc   ;==>__TCPIpToName_szStringRead

+ 28 - 0
include/InetConstants.au3

@@ -0,0 +1,28 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: Inet_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Constants to be included in an AutoIt v3 script when using Inet functions.
+; Author(s) .....: guinness
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+Global Const $INET_LOCALCACHE = 0
+Global Const $INET_FORCERELOAD = 1
+Global Const $INET_IGNORESSL = 2
+Global Const $INET_ASCIITRANSFER = 4
+Global Const $INET_BINARYTRANSFER = 8
+Global Const $INET_FORCEBYPASS = 16
+
+Global Const $INET_DOWNLOADWAIT = 0
+Global Const $INET_DOWNLOADBACKGROUND = 1
+
+Global Const $INET_DOWNLOADREAD = 0
+Global Const $INET_DOWNLOADSIZE = 1
+Global Const $INET_DOWNLOADCOMPLETE = 2
+Global Const $INET_DOWNLOADSUCCESS = 3
+Global Const $INET_DOWNLOADERROR = 4
+Global Const $INET_DOWNLOADEXTENDED = 5
+; ===============================================================================================================================

+ 91 - 0
include/ListBoxConstants.au3

@@ -0,0 +1,91 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: ListBox_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: <a href="../appendix/GUIStyles.htm#List">GUI control ListBox styles</a> and much more constants.
+; Author(s) .....: Valik, Gary Frost, ...
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; Styles
+Global Const $LBS_NOTIFY = 0x00000001 ; Notifies whenever the user clicks or double clicks a string
+Global Const $LBS_SORT = 0x00000002 ; Sorts strings in the list box alphabetically
+Global Const $LBS_NOREDRAW = 0x00000004 ; Specifies that the appearance is not updated when changes are made
+Global Const $LBS_MULTIPLESEL = 0x00000008 ; Turns string selection on or off each time the user clicks a string
+Global Const $LBS_OWNERDRAWFIXED = 0x00000010 ; Specifies that the list box is owner drawn
+Global Const $LBS_OWNERDRAWVARIABLE = 0x00000020 ; Specifies that the list box is owner drawn with variable height
+Global Const $LBS_HASSTRINGS = 0x00000040 ; Specifies that a list box contains items consisting of strings
+Global Const $LBS_USETABSTOPS = 0x00000080 ; Enables a list box to recognize and expand tab characters
+Global Const $LBS_NOINTEGRALHEIGHT = 0x00000100 ; Specifies that the size is exactly the size set by the application
+Global Const $LBS_MULTICOLUMN = 0x00000200 ; Specifies a multi columnn list box that is scrolled horizontally
+Global Const $LBS_WANTKEYBOARDINPUT = 0x00000400 ; Specifies that the owner window receives WM_VKEYTOITEM messages
+Global Const $LBS_EXTENDEDSEL = 0x00000800 ; Allows multiple items to be selected
+Global Const $LBS_DISABLENOSCROLL = 0x00001000 ; Shows a disabled vertical scroll bar
+Global Const $LBS_NODATA = 0x00002000 ; Specifies a no-data list box
+Global Const $LBS_NOSEL = 0x00004000 ; Specifies that items that can be viewed but not selected
+Global Const $LBS_COMBOBOX = 0x00008000 ; Notifies a list box that it is part of a combo box
+Global Const $LBS_STANDARD = 0x00000003 ; Standard list box style
+
+; Control default styles
+Global Const $GUI_SS_DEFAULT_LIST = 0x00a00003 ; BitOR($LBS_SORT, $WS_BORDER, $S_VSCROLL, $LBS_NOTIFY)
+
+; Errors
+Global Const $LB_ERR = -1
+Global Const $LB_ERRATTRIBUTE = -3
+Global Const $LB_ERRREQUIRED = -4
+Global Const $LB_ERRSPACE = -2
+
+; Messages
+Global Const $LB_ADDSTRING = 0x0180
+Global Const $LB_INSERTSTRING = 0x0181
+Global Const $LB_DELETESTRING = 0x0182
+Global Const $LB_SELITEMRANGEEX = 0x0183
+Global Const $LB_RESETCONTENT = 0x0184
+Global Const $LB_SETSEL = 0x0185
+Global Const $LB_SETCURSEL = 0x0186
+Global Const $LB_GETSEL = 0x0187
+Global Const $LB_GETCURSEL = 0x0188
+Global Const $LB_GETTEXT = 0x0189
+Global Const $LB_GETTEXTLEN = 0x018A
+Global Const $LB_GETCOUNT = 0x018B
+Global Const $LB_SELECTSTRING = 0x018C
+Global Const $LB_DIR = 0x018D
+Global Const $LB_GETTOPINDEX = 0x018E
+Global Const $LB_FINDSTRING = 0x018F
+Global Const $LB_GETSELCOUNT = 0x0190
+Global Const $LB_GETSELITEMS = 0x0191
+Global Const $LB_SETTABSTOPS = 0x0192
+Global Const $LB_GETHORIZONTALEXTENT = 0x0193
+Global Const $LB_SETHORIZONTALEXTENT = 0x0194
+Global Const $LB_SETCOLUMNWIDTH = 0x0195
+Global Const $LB_ADDFILE = 0x0196
+Global Const $LB_SETTOPINDEX = 0x0197
+Global Const $LB_GETITEMRECT = 0x0198
+Global Const $LB_GETITEMDATA = 0x0199
+Global Const $LB_SETITEMDATA = 0x019A
+Global Const $LB_SELITEMRANGE = 0x019B
+Global Const $LB_SETANCHORINDEX = 0x019C
+Global Const $LB_GETANCHORINDEX = 0x019D
+Global Const $LB_SETCARETINDEX = 0x019E
+Global Const $LB_GETCARETINDEX = 0x019F
+Global Const $LB_SETITEMHEIGHT = 0x01A0
+Global Const $LB_GETITEMHEIGHT = 0x01A1
+Global Const $LB_FINDSTRINGEXACT = 0x01A2
+Global Const $LB_SETLOCALE = 0x01A5
+Global Const $LB_GETLOCALE = 0x01A6
+Global Const $LB_SETCOUNT = 0x01A7
+Global Const $LB_INITSTORAGE = 0x01A8
+Global Const $LB_ITEMFROMPOINT = 0x01A9
+Global Const $LB_MULTIPLEADDSTRING = 0x01B1
+Global Const $LB_GETLISTBOXINFO = 0x01B2
+
+; Notifications
+Global Const $LBN_ERRSPACE = 0xFFFFFFFE ; Sent when a list box cannot allocate enough memory for a request
+Global Const $LBN_SELCHANGE = 0x00000001 ; Sent when the selection in a list box is about to change
+Global Const $LBN_DBLCLK = 0x00000002 ; Sent when the user double clicks a string in a list box
+Global Const $LBN_SELCANCEL = 0x00000003 ; Sent when the user cancels the selection in a list box
+Global Const $LBN_SETFOCUS = 0x00000004 ; Sent when a list box receives the keyboard focus
+Global Const $LBN_KILLFOCUS = 0x00000005 ; Sent when a list box loses the keyboard focus
+; ===============================================================================================================================

+ 423 - 0
include/ListViewConstants.au3

@@ -0,0 +1,423 @@
+#include-once
+
+; #INDEX# =======================================================================================================================
+; Title .........: ListView_Constants
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: <a href="../appendix/GUIStyles.htm#ListView">GUI control ListView styles</a> and much more constants.
+; Author(s) .....: Valik, Gary Frost, ...
+; ===============================================================================================================================
+
+; #CONSTANTS# ===================================================================================================================
+; Group state - Vista
+Global Const $LVGS_NORMAL = 0x00000000
+Global Const $LVGS_COLLAPSED = 0x00000001
+Global Const $LVGS_HIDDEN = 0x00000002
+Global Const $LVGS_NOHEADER = 0x00000004
+Global Const $LVGS_COLLAPSIBLE = 0x00000008
+Global Const $LVGS_FOCUSED = 0x00000010
+Global Const $LVGS_SELECTED = 0x00000020
+Global Const $LVGS_SUBSETED = 0x00000040
+Global Const $LVGS_SUBSETLINKFOCUSED = 0x00000080
+
+; Group Rect - Vista
+Global Const $LVGGR_GROUP = 0 ;// Entire expanded group
+Global Const $LVGGR_HEADER = 1 ; // Header only (collapsed group)
+Global Const $LVGGR_LABEL = 2 ; // Label only
+Global Const $LVGGR_SUBSETLINK = 3 ; // subset link only
+
+; error
+Global Const $LV_ERR = -1
+
+Global Const $LVBKIF_SOURCE_NONE = 0x00000000
+Global Const $LVBKIF_SOURCE_HBITMAP = 0x00000001
+Global Const $LVBKIF_SOURCE_URL = 0x00000002
+Global Const $LVBKIF_SOURCE_MASK = 0x00000003
+Global Const $LVBKIF_STYLE_NORMAL = 0x00000000
+Global Const $LVBKIF_STYLE_TILE = 0x00000010
+Global Const $LVBKIF_STYLE_MASK = 0x00000010
+Global Const $LVBKIF_FLAG_TILEOFFSET = 0x00000100
+Global Const $LVBKIF_TYPE_WATERMARK = 0x10000000
+
+Global Const $LV_VIEW_DETAILS = 0x0001
+Global Const $LV_VIEW_ICON = 0x0000
+Global Const $LV_VIEW_LIST = 0x0003
+Global Const $LV_VIEW_SMALLICON = 0x0002
+Global Const $LV_VIEW_TILE = 0x0004
+
+Global Const $LVA_ALIGNLEFT = 0x0001
+Global Const $LVA_ALIGNTOP = 0x0002
+Global Const $LVA_DEFAULT = 0x0000
+Global Const $LVA_SNAPTOGRID = 0x0005
+
+Global Const $LVCDI_ITEM = 0x00000000
+Global Const $LVCDI_GROUP = 0x00000001
+
+Global Const $LVCF_ALLDATA = 0X0000003F
+Global Const $LVCF_FMT = 0x0001
+Global Const $LVCF_IMAGE = 0x0010
+Global Const $LVCFMT_JUSTIFYMASK = 0x0003
+Global Const $LVCF_TEXT = 0x0004
+Global Const $LVCF_WIDTH = 0x0002
+
+Global Const $LVCFMT_BITMAP_ON_RIGHT = 0x1000
+Global Const $LVCFMT_CENTER = 0x0002
+Global Const $LVCFMT_COL_HAS_IMAGES = 0x8000
+Global Const $LVCFMT_IMAGE = 0x0800
+Global Const $LVCFMT_LEFT = 0x0000
+Global Const $LVCFMT_RIGHT = 0x0001
+
+Global Const $LVCFMT_LINE_BREAK = 0x100000
+Global Const $LVCFMT_FILL = 0x200000
+Global Const $LVCFMT_WRAP = 0x400000
+Global Const $LVCFMT_NO_TITLE = 0x800000
+Global Const $LVCFMT_TILE_PLACEMENTMASK = BitOR($LVCFMT_LINE_BREAK, $LVCFMT_FILL)
+
+Global Const $LVFI_NEARESTXY = 0x0040
+Global Const $LVFI_PARAM = 0x0001
+Global Const $LVFI_PARTIAL = 0x0008
+Global Const $LVFI_STRING = 0x0002
+Global Const $LVFI_SUBSTRING = 0x0004
+Global Const $LVFI_WRAP = 0x0020
+
+Global Const $LVGA_FOOTER_LEFT = 0x00000008
+Global Const $LVGA_FOOTER_CENTER = 0x00000010
+Global Const $LVGA_FOOTER_RIGHT = 0x00000020
+Global Const $LVGA_HEADER_LEFT = 0x00000001
+Global Const $LVGA_HEADER_CENTER = 0x00000002
+Global Const $LVGA_HEADER_RIGHT = 0x00000004
+
+Global Const $LVGF_ALIGN = 0x00000008
+Global Const $LVGF_DESCRIPTIONTOP = 0x00000400
+Global Const $LVGF_DESCRIPTIONBOTTOM = 0x00000800
+Global Const $LVGF_EXTENDEDIMAGE = 0x00002000
+Global Const $LVGF_FOOTER = 0x00000002
+Global Const $LVGF_GROUPID = 0x00000010
+Global Const $LVGF_HEADER = 0x00000001
+Global Const $LVGF_ITEMS = 0x00004000
+Global Const $LVGF_NONE = 0x00000000
+Global Const $LVGF_STATE = 0x00000004
+Global Const $LVGF_SUBSET = 0x00008000
+Global Const $LVGF_SUBSETITEMS = 0x00010000
+Global Const $LVGF_SUBTITLE = 0x00000100
+Global Const $LVGF_TASK = 0x00000200
+Global Const $LVGF_TITLEIMAGE = 0x00001000
+
+Global Const $LVHT_ABOVE = 0x00000008
+Global Const $LVHT_BELOW = 0x00000010
+Global Const $LVHT_NOWHERE = 0x00000001
+Global Const $LVHT_ONITEMICON = 0x00000002
+Global Const $LVHT_ONITEMLABEL = 0x00000004
+Global Const $LVHT_ONITEMSTATEICON = 0x00000008
+Global Const $LVHT_TOLEFT = 0x00000040
+Global Const $LVHT_TORIGHT = 0x00000020
+Global Const $LVHT_ONITEM = BitOR($LVHT_ONITEMICON, $LVHT_ONITEMLABEL, $LVHT_ONITEMSTATEICON)
+
+Global Const $LVHT_EX_GROUP_HEADER = 0x10000000
+Global Const $LVHT_EX_GROUP_FOOTER = 0x20000000
+Global Const $LVHT_EX_GROUP_COLLAPSE = 0x40000000
+Global Const $LVHT_EX_GROUP_BACKGROUND = 0x80000000
+Global Const $LVHT_EX_GROUP_STATEICON = 0x01000000
+Global Const $LVHT_EX_GROUP_SUBSETLINK = 0x02000000
+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)
+Global Const $LVHT_EX_ONCONTENTS = 0x04000000 ; On item AND not on the background
+Global Const $LVHT_EX_FOOTER = 0x08000000
+
+Global Const $LVIF_COLFMT = 0x00010000
+Global Const $LVIF_COLUMNS = 0x00000200
+Global Const $LVIF_GROUPID = 0x00000100
+Global Const $LVIF_IMAGE = 0x00000002
+Global Const $LVIF_INDENT = 0x00000010
+Global Const $LVIF_NORECOMPUTE = 0x00000800
+Global Const $LVIF_PARAM = 0x00000004
+Global Const $LVIF_STATE = 0x00000008
+Global Const $LVIF_TEXT = 0x00000001
+
+Global Const $LVIM_AFTER = 0x00000001
+
+Global Const $LVIR_BOUNDS = 0
+Global Const $LVIR_ICON = 1
+Global Const $LVIR_LABEL = 2
+Global Const $LVIR_SELECTBOUNDS = 3
+
+Global Const $LVIS_CUT = 0x0004
+Global Const $LVIS_DROPHILITED = 0x0008
+Global Const $LVIS_FOCUSED = 0x0001
+Global Const $LVIS_OVERLAYMASK = 0x0F00
+Global Const $LVIS_SELECTED = 0x0002
+Global Const $LVIS_STATEIMAGEMASK = 0xF000
+
+; Styles
+Global Const $LVS_ALIGNLEFT = 0x0800 ; Items are left aligned in icon and small icon view
+Global Const $LVS_ALIGNMASK = 0x0c00 ; Determines the control's current alignment
+Global Const $LVS_ALIGNTOP = 0x0000 ; Items are aligned at the top in icon and small icon view
+Global Const $LVS_AUTOARRANGE = 0x0100 ; Icons are automatically kept arranged in icon and small icon view
+Global Const $LVS_DEFAULT = 0x0000000D ; Default control style  $LVS_SHOWSELALWAYS + $LVS_SINGLESEL + $LVS_REPORT
+Global Const $LVS_EDITLABELS = 0x0200 ; Item text can be edited in place
+Global Const $LVS_ICON = 0x0000 ; This style specifies icon view
+Global Const $LVS_LIST = 0x0003 ; This style specifies list view
+Global Const $LVS_NOCOLUMNHEADER = 0x4000 ; Column headers are not displayed in report view
+Global Const $LVS_NOLABELWRAP = 0x0080 ; Item text is displayed on a single line in icon view
+Global Const $LVS_NOSCROLL = 0x2000 ; Scrolling is disabled
+Global Const $LVS_NOSORTHEADER = 0x8000 ; Column headers do not work like buttons
+Global Const $LVS_OWNERDATA = 0x1000
+Global Const $LVS_OWNERDRAWFIXED = 0x0400 ; The owner window can paint items in report view
+Global Const $LVS_REPORT = 0x0001 ; This style specifies report view
+Global Const $LVS_SHAREIMAGELISTS = 0x0040 ; The image list will not be deleted when the control is destroyed
+Global Const $LVS_SHOWSELALWAYS = 0x0008 ; The selection is always shown
+Global Const $LVS_SINGLESEL = 0x0004 ; Only one item at a time can be selected
+Global Const $LVS_SMALLICON = 0x0002 ; This style specifies small icon view
+Global Const $LVS_SORTASCENDING = 0x0010 ; Item indexes are sorted based on item text in ascending order
+Global Const $LVS_SORTDESCENDING = 0x0020 ; Item indexes are sorted based on item text in descending order
+Global Const $LVS_TYPEMASK = 0x0003 ; Determines the control's current window style
+Global Const $LVS_TYPESTYLEMASK = 0xfc00 ; Determines the window styles
+
+; listView Extended Styles
+Global Const $LVS_EX_AUTOAUTOARRANGE = 0x01000000 ; Vista - Automatically arrange icons if no icon positions have been set (Similar to LVS_AUTOARRANGE).
+Global Const $LVS_EX_AUTOCHECKSELECT = 0x08000000 ; Vista - Automatically select check boxes on single click
+Global Const $LVS_EX_AUTOSIZECOLUMNS = 0x10000000 ; Vista - Automatically size listview columns
+Global Const $LVS_EX_BORDERSELECT = 0x00008000 ; The border color of the item changes when selected
+Global Const $LVS_EX_CHECKBOXES = 0x00000004 ; Enables check boxes for items
+Global Const $LVS_EX_COLUMNOVERFLOW = 0x80000000 ; Indicates that an overflow button should be displayed in icon/tile view if there is not enough client width to display the complete set of header items
+Global Const $LVS_EX_COLUMNSNAPPOINTS = 0x40000000 ; Vista - Snap to minimum column width when the user resizes a column
+Global Const $LVS_EX_DOUBLEBUFFER = 0x00010000 ; Paints via double-buffering, which reduces flicker
+Global Const $LVS_EX_FLATSB = 0x00000100 ; Enables flat scroll bars
+Global Const $LVS_EX_FULLROWSELECT = 0x00000020 ; When an item is selected, the item and all its subitems are highlighted
+Global Const $LVS_EX_GRIDLINES = 0x00000001 ; Displays gridlines around items and subitems
+Global Const $LVS_EX_HEADERDRAGDROP = 0x00000010 ; Enables drag-and-drop reordering of columns
+Global Const $LVS_EX_HEADERINALLVIEWS = 0x02000000 ; Vista - Show column headers in all view modes
+Global Const $LVS_EX_HIDELABELS = 0x20000 ; Hides the labels in icon and small icon view
+Global Const $LVS_EX_INFOTIP = 0x00000400 ; A message is sent to the parent before displaying an item's ToolTip
+Global Const $LVS_EX_JUSTIFYCOLUMNS = 0x00200000 ; Vista - Icons are lined up in columns that use up the whole view
+Global Const $LVS_EX_LABELTIP = 0x00004000 ; If a partially hidden label lacks ToolTip text, the label will unfold
+Global Const $LVS_EX_MULTIWORKAREAS = 0x00002000 ; The control will not autoarrange its icons until a work area is defined
+Global Const $LVS_EX_ONECLICKACTIVATE = 0x00000040 ; Sends an $LVN_ITEMACTIVATE message when the user clicks an item
+Global Const $LVS_EX_REGIONAL = 0x00000200 ; Sets the region to include only the icons and text using SetWindowRgn
+Global Const $LVS_EX_SIMPLESELECT = 0x00100000 ; Moves the state image to the top right of the large icon rendering#cs
+Global Const $LVS_EX_SNAPTOGRID = 0x00080000 ; Icons automatically snap to grid
+Global Const $LVS_EX_SUBITEMIMAGES = 0x00000002 ; Allows images to be displayed for subitems
+Global Const $LVS_EX_TRACKSELECT = 0x00000008 ; Enables hot-track selection
+Global Const $LVS_EX_TRANSPARENTBKGND = 0x00400000 ; Vista - Background is painted by the parent via WM_PRINTCLIENT
+Global Const $LVS_EX_TRANSPARENTSHADOWTEXT = 0x00800000 ; Vista - Enable shadow text on transparent backgrounds only
+Global Const $LVS_EX_TWOCLICKACTIVATE = 0x00000080 ; Sends an $LVN_ITEMACTIVATE message when the user double clicks an item
+Global Const $LVS_EX_UNDERLINECOLD = 0x00001000 ; Causes non-hot items to be displayed with underlined text
+Global Const $LVS_EX_UNDERLINEHOT = 0x00000800 ; Causes hot items to be displayed with underlined text
+
+; Control default styles
+Global Const $GUI_SS_DEFAULT_LISTVIEW = BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL)
+; ===============================================================================================================================
+
+; #MESSAGES# ====================================================================================================================
+Global Const $LVM_FIRST = 0x1000
+
+Global Const $LVM_APPROXIMATEVIEWRECT = ($LVM_FIRST + 64)
+Global Const $LVM_ARRANGE = ($LVM_FIRST + 22)
+Global Const $LVM_CANCELEDITLABEL = ($LVM_FIRST + 179)
+Global Const $LVM_CREATEDRAGIMAGE = ($LVM_FIRST + 33)
+Global Const $LVM_DELETEALLITEMS = ($LVM_FIRST + 9)
+Global Const $LVM_DELETECOLUMN = ($LVM_FIRST + 28)
+Global Const $LVM_DELETEITEM = ($LVM_FIRST + 8)
+Global Const $LVM_EDITLABELA = ($LVM_FIRST + 23)
+Global Const $LVM_EDITLABELW = ($LVM_FIRST + 118)
+Global Const $LVM_EDITLABEL = $LVM_EDITLABELA
+Global Const $LVM_ENABLEGROUPVIEW = ($LVM_FIRST + 157)
+Global Const $LVM_ENSUREVISIBLE = ($LVM_FIRST + 19)
+Global Const $LVM_FINDITEM = ($LVM_FIRST + 13)
+Global Const $LVM_GETBKCOLOR = ($LVM_FIRST + 0)
+Global Const $LVM_GETBKIMAGEA = ($LVM_FIRST + 69)
+Global Const $LVM_GETBKIMAGEW = ($LVM_FIRST + 139)
+Global Const $LVM_GETCALLBACKMASK = ($LVM_FIRST + 10)
+Global Const $LVM_GETCOLUMNA = ($LVM_FIRST + 25)
+Global Const $LVM_GETCOLUMNW = ($LVM_FIRST + 95)
+Global Const $LVM_GETCOLUMNORDERARRAY = ($LVM_FIRST + 59)
+Global Const $LVM_GETCOLUMNWIDTH = ($LVM_FIRST + 29)
+Global Const $LVM_GETCOUNTPERPAGE = ($LVM_FIRST + 40)
+Global Const $LVM_GETEDITCONTROL = ($LVM_FIRST + 24)
+Global Const $LVM_GETEMPTYTEXT = ($LVM_FIRST + 204)
+Global Const $LVM_GETEXTENDEDLISTVIEWSTYLE = ($LVM_FIRST + 55)
+Global Const $LVM_GETFOCUSEDGROUP = ($LVM_FIRST + 93)
+Global Const $LVM_GETFOOTERINFO = ($LVM_FIRST + 206)
+Global Const $LVM_GETFOOTERITEM = ($LVM_FIRST + 208)
+Global Const $LVM_GETFOOTERITEMRECT = ($LVM_FIRST + 207)
+Global Const $LVM_GETFOOTERRECT = ($LVM_FIRST + 205)
+Global Const $LVM_GETGROUPCOUNT = ($LVM_FIRST + 152)
+Global Const $LVM_GETGROUPINFO = ($LVM_FIRST + 149)
+Global Const $LVM_GETGROUPINFOBYINDEX = ($LVM_FIRST + 153)
+Global Const $LVM_GETGROUPMETRICS = ($LVM_FIRST + 156)
+Global Const $LVM_GETGROUPRECT = ($LVM_FIRST + 98)
+Global Const $LVM_GETGROUPSTATE = ($LVM_FIRST + 92)
+Global Const $LVM_GETHEADER = ($LVM_FIRST + 31)
+Global Const $LVM_GETHOTCURSOR = ($LVM_FIRST + 63)
+Global Const $LVM_GETHOTITEM = ($LVM_FIRST + 61)
+Global Const $LVM_GETHOVERTIME = ($LVM_FIRST + 72)
+Global Const $LVM_GETIMAGELIST = ($LVM_FIRST + 2)
+Global Const $LVM_GETINSERTMARK = ($LVM_FIRST + 167)
+Global Const $LVM_GETINSERTMARKCOLOR = ($LVM_FIRST + 171)
+Global Const $LVM_GETINSERTMARKRECT = ($LVM_FIRST + 169)
+Global Const $LVM_GETISEARCHSTRINGA = ($LVM_FIRST + 52)
+Global Const $LVM_GETISEARCHSTRINGW = ($LVM_FIRST + 117)
+Global Const $LVM_GETITEMA = ($LVM_FIRST + 5)
+Global Const $LVM_GETITEMW = ($LVM_FIRST + 75)
+Global Const $LVM_GETITEMCOUNT = ($LVM_FIRST + 4)
+Global Const $LVM_GETITEMINDEXRECT = ($LVM_FIRST + 209)
+Global Const $LVM_GETITEMPOSITION = ($LVM_FIRST + 16)
+Global Const $LVM_GETITEMRECT = ($LVM_FIRST + 14)
+Global Const $LVM_GETITEMSPACING = ($LVM_FIRST + 51)
+Global Const $LVM_GETITEMSTATE = ($LVM_FIRST + 44)
+Global Const $LVM_GETITEMTEXTA = ($LVM_FIRST + 45)
+Global Const $LVM_GETITEMTEXTW = ($LVM_FIRST + 115)
+Global Const $LVM_GETNEXTITEM = ($LVM_FIRST + 12)
+Global Const $LVM_GETNEXTITEMINDEX = ($LVM_FIRST + 211)
+Global Const $LVM_GETNUMBEROFWORKAREAS = ($LVM_FIRST + 73)
+Global Const $LVM_GETORIGIN = ($LVM_FIRST + 41)
+Global Const $LVM_GETOUTLINECOLOR = ($LVM_FIRST + 176)
+Global Const $LVM_GETSELECTEDCOLUMN = ($LVM_FIRST + 174)
+Global Const $LVM_GETSELECTEDCOUNT = ($LVM_FIRST + 50)
+Global Const $LVM_GETSELECTIONMARK = ($LVM_FIRST + 66)
+Global Const $LVM_GETSTRINGWIDTHA = ($LVM_FIRST + 17)
+Global Const $LVM_GETSTRINGWIDTHW = ($LVM_FIRST + 87)
+Global Const $LVM_GETSUBITEMRECT = ($LVM_FIRST + 56)
+Global Const $LVM_GETTEXTBKCOLOR = ($LVM_FIRST + 37)
+Global Const $LVM_GETTEXTCOLOR = ($LVM_FIRST + 35)
+Global Const $LVM_GETTILEINFO = ($LVM_FIRST + 165)
+Global Const $LVM_GETTILEVIEWINFO = ($LVM_FIRST + 163)
+Global Const $LVM_GETTOOLTIPS = ($LVM_FIRST + 78)
+Global Const $LVM_GETTOPINDEX = ($LVM_FIRST + 39)
+Global Const $LVM_GETUNICODEFORMAT = 0x2000 + 6
+Global Const $LVM_GETVIEW = ($LVM_FIRST + 143)
+Global Const $LVM_GETVIEWRECT = ($LVM_FIRST + 34)
+Global Const $LVM_GETWORKAREAS = ($LVM_FIRST + 70)
+Global Const $LVM_HASGROUP = ($LVM_FIRST + 161)
+Global Const $LVM_HITTEST = ($LVM_FIRST + 18)
+Global Const $LVM_INSERTCOLUMNA = ($LVM_FIRST + 27)
+Global Const $LVM_INSERTCOLUMNW = ($LVM_FIRST + 97)
+Global Const $LVM_INSERTGROUP = ($LVM_FIRST + 145)
+Global Const $LVM_INSERTGROUPSORTED = ($LVM_FIRST + 159)
+Global Const $LVM_INSERTITEMA = ($LVM_FIRST + 7)
+Global Const $LVM_INSERTITEMW = ($LVM_FIRST + 77)
+Global Const $LVM_INSERTMARKHITTEST = ($LVM_FIRST + 168)
+Global Const $LVM_ISGROUPVIEWENABLED = ($LVM_FIRST + 175)
+Global Const $LVM_ISITEMVISIBLE = ($LVM_FIRST + 182)
+Global Const $LVM_MAPIDTOINDEX = ($LVM_FIRST + 181)
+Global Const $LVM_MAPINDEXTOID = ($LVM_FIRST + 180)
+Global Const $LVM_MOVEGROUP = ($LVM_FIRST + 151)
+Global Const $LVM_REDRAWITEMS = ($LVM_FIRST + 21)
+Global Const $LVM_REMOVEALLGROUPS = ($LVM_FIRST + 160)
+Global Const $LVM_REMOVEGROUP = ($LVM_FIRST + 150)
+Global Const $LVM_SCROLL = ($LVM_FIRST + 20)
+Global Const $LVM_SETBKCOLOR = ($LVM_FIRST + 1)
+Global Const $LVM_SETBKIMAGEA = ($LVM_FIRST + 68)
+Global Const $LVM_SETBKIMAGEW = ($LVM_FIRST + 138)
+Global Const $LVM_SETCALLBACKMASK = ($LVM_FIRST + 11)
+Global Const $LVM_SETCOLUMNA = ($LVM_FIRST + 26)
+Global Const $LVM_SETCOLUMNW = ($LVM_FIRST + 96)
+Global Const $LVM_SETCOLUMNORDERARRAY = ($LVM_FIRST + 58)
+Global Const $LVM_SETCOLUMNWIDTH = ($LVM_FIRST + 30)
+Global Const $LVM_SETEXTENDEDLISTVIEWSTYLE = ($LVM_FIRST + 54)
+Global Const $LVM_SETGROUPINFO = ($LVM_FIRST + 147)
+Global Const $LVM_SETGROUPMETRICS = ($LVM_FIRST + 155)
+Global Const $LVM_SETHOTCURSOR = ($LVM_FIRST + 62)
+Global Const $LVM_SETHOTITEM = ($LVM_FIRST + 60)
+Global Const $LVM_SETHOVERTIME = ($LVM_FIRST + 71)
+Global Const $LVM_SETICONSPACING = ($LVM_FIRST + 53)
+Global Const $LVM_SETIMAGELIST = ($LVM_FIRST + 3)
+Global Const $LVM_SETINFOTIP = ($LVM_FIRST + 173)
+Global Const $LVM_SETINSERTMARK = ($LVM_FIRST + 166)
+Global Const $LVM_SETINSERTMARKCOLOR = ($LVM_FIRST + 170)
+Global Const $LVM_SETITEMA = ($LVM_FIRST + 6)
+Global Const $LVM_SETITEMW = ($LVM_FIRST + 76)
+Global Const $LVM_SETITEMCOUNT = ($LVM_FIRST + 47)
+Global Const $LVM_SETITEMINDEXSTATE = ($LVM_FIRST + 210)
+Global Const $LVM_SETITEMPOSITION = ($LVM_FIRST + 15)
+Global Const $LVM_SETITEMPOSITION32 = ($LVM_FIRST + 49)
+Global Const $LVM_SETITEMSTATE = ($LVM_FIRST + 43)
+Global Const $LVM_SETITEMTEXTA = ($LVM_FIRST + 46)
+Global Const $LVM_SETITEMTEXTW = ($LVM_FIRST + 116)
+Global Const $LVM_SETOUTLINECOLOR = ($LVM_FIRST + 177)
+Global Const $LVM_SETSELECTEDCOLUMN = ($LVM_FIRST + 140)
+Global Const $LVM_SETSELECTIONMARK = ($LVM_FIRST + 67)
+Global Const $LVM_SETTEXTBKCOLOR = ($LVM_FIRST + 38)
+Global Const $LVM_SETTEXTCOLOR = ($LVM_FIRST + 36)
+Global Const $LVM_SETTILEINFO = ($LVM_FIRST + 164)
+Global Const $LVM_SETTILEVIEWINFO = ($LVM_FIRST + 162)
+Global Const $LVM_SETTILEWIDTH = ($LVM_FIRST + 141)
+Global Const $LVM_SETTOOLTIPS = ($LVM_FIRST + 74)
+Global Const $LVM_SETUNICODEFORMAT = 0x2000 + 5
+Global Const $LVM_SETVIEW = ($LVM_FIRST + 142)
+Global Const $LVM_SETWORKAREAS = ($LVM_FIRST + 65)
+Global Const $LVM_SORTGROUPS = ($LVM_FIRST + 158)
+Global Const $LVM_SORTITEMS = ($LVM_FIRST + 48)
+Global Const $LVM_SORTITEMSEX = ($LVM_FIRST + 81)
+Global Const $LVM_SUBITEMHITTEST = ($LVM_FIRST + 57)
+Global Const $LVM_UPDATE = ($LVM_FIRST + 42)
+; ===============================================================================================================================
+
+; #NOTIFICATIONS# ===============================================================================================================
+Global Const $LVN_FIRST = -100
+Global Const $LVN_LAST = -199
+Global Const $LVN_BEGINDRAG = ($LVN_FIRST - 9) ; A drag and drop involving the left mouse button is being initiated
+Global Const $LVN_BEGINLABELEDITA = ($LVN_FIRST - 5) ; The label editting is starting
+Global Const $LVN_BEGINLABELEDITW = ($LVN_FIRST - 75) ; [Unicode] The label editting is starting
+Global Const $LVN_BEGINRDRAG = ($LVN_FIRST - 11) ; A drag and drop involving the right mouse button is being initiated
+Global Const $LVN_BEGINSCROLL = ($LVN_FIRST - 80)
+Global Const $LVN_COLUMNCLICK = ($LVN_FIRST - 8) ; A column was clicked
+Global Const $LVN_COLUMNDROPDOWN = ($LVN_FIRST - 64)
+Global Const $LVN_COLUMNOVERFLOWCLICK = ($LVN_FIRST - 66)
+Global Const $LVN_DELETEALLITEMS = ($LVN_FIRST - 4) ; All items are about to be deleted
+Global Const $LVN_DELETEITEM = ($LVN_FIRST - 3) ; An item is about to be deleted
+Global Const $LVN_ENDLABELEDITA = ($LVN_FIRST - 6) ; The label editting is ending
+Global Const $LVN_ENDLABELEDITW = ($LVN_FIRST - 76) ; [Unicode] The label editting is ending
+Global Const $LVN_ENDSCROLL = ($LVN_FIRST - 81)
+Global Const $LVN_GETDISPINFOA = ($LVN_FIRST - 50) ; Request for the parent to provide information
+Global Const $LVN_GETDISPINFOW = ($LVN_FIRST - 77) ; [Unicode] Request for the parent to provide information
+Global Const $LVN_GETDISPINFO = $LVN_GETDISPINFOA
+Global Const $LVN_GETEMPTYMARKUP = ($LVN_FIRST - 87) ; Vista - when the control has no items
+Global Const $LVN_GETINFOTIPA = ($LVN_FIRST - 57)
+Global Const $LVN_GETINFOTIPW = ($LVN_FIRST - 58)
+Global Const $LVN_HOTTRACK = ($LVN_FIRST - 21) ; The user moved the mouse over an item
+Global Const $LVN_INCREMENTALSEARCHA = ($LVN_FIRST - 62)
+Global Const $LVN_INCREMENTALSEARCHW = ($LVN_FIRST - 63)
+Global Const $LVN_INSERTITEM = ($LVN_FIRST - 2) ; A new item was inserted
+Global Const $LVN_ITEMACTIVATE = ($LVN_FIRST - 14) ; The user activated an item
+Global Const $LVN_ITEMCHANGED = ($LVN_FIRST - 1) ; An item has changed
+Global Const $LVN_ITEMCHANGING = ($LVN_FIRST - 0) ; An item is changing
+Global Const $LVN_KEYDOWN = ($LVN_FIRST - 55)
+Global Const $LVN_LINKCLICK = ($LVN_FIRST - 84) ; Vista - a link has been clicked on
+Global Const $LVN_MARQUEEBEGIN = ($LVN_FIRST - 56)
+Global Const $LVN_ODCACHEHINT = ($LVN_FIRST - 13) ; The contents of its display area for a virtual control have changed
+Global Const $LVN_ODFINDITEMA = ($LVN_FIRST - 52) ; Sent to the parent when it needs to find a callback item
+Global Const $LVN_ODFINDITEMW = ($LVN_FIRST - 79) ; [Unicode] Sent to the parent when it needs to find a callback item
+Global Const $LVN_ODFINDITEM = $LVN_ODFINDITEMA
+Global Const $LVN_ODSTATECHANGED = ($LVN_FIRST - 15) ; The state of an item or range of items in a virtual control has changed
+Global Const $LVN_SETDISPINFOA = ($LVN_FIRST - 51) ; Sent to the parent when it needs to update item information
+Global Const $LVN_SETDISPINFOW = ($LVN_FIRST - 78) ; [Unicode] Sent to the parent when it needs to update item information
+
+Global Const $LVNI_ABOVE = 0x0100
+Global Const $LVNI_BELOW = 0x0200
+Global Const $LVNI_TOLEFT = 0x0400
+Global Const $LVNI_TORIGHT = 0x0800
+Global Const $LVNI_ALL = 0x0000
+Global Const $LVNI_CUT = 0x0004
+Global Const $LVNI_DROPHILITED = 0x0008
+Global Const $LVNI_FOCUSED = 0x0001
+Global Const $LVNI_SELECTED = 0x0002
+
+Global Const $LVSCW_AUTOSIZE = -1
+Global Const $LVSCW_AUTOSIZE_USEHEADER = -2
+
+Global Const $LVSICF_NOINVALIDATEALL = 0x00000001
+Global Const $LVSICF_NOSCROLL = 0x00000002
+
+Global Const $LVSIL_NORMAL = 0
+Global Const $LVSIL_SMALL = 1
+Global Const $LVSIL_STATE = 2
+
+Global Const $LVFN_DIR_LEFT = 0
+Global Const $LVFN_DIR_RIGHT = 1
+Global Const $LVFN_DIR_UP = 2
+Global Const $LVFN_DIR_DOWN = 3
+Global Const $LVFN_DIR_START = 4
+Global Const $LVFN_DIR_MEND = 5
+Global Const $LVFN_DIR_PRIOR = 6
+Global Const $LVFN_DIR_NEXT = 7
+; ===============================================================================================================================

+ 81 - 0
include/Math.au3

@@ -0,0 +1,81 @@
+#include-once
+
+#include "MathConstants.au3"
+
+; #INDEX# =======================================================================================================================
+; Title .........: Mathematical calculations
+; AutoIt Version : 3.3.14.5
+; Language ......: English
+; Description ...: Functions that assist with mathematical calculations.
+; Author(s) .....: Valik, Gary Frost, guinness ...
+; ===============================================================================================================================
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; _MathCheckDiv
+; ===============================================================================================================================
+
+; #CURRENT# =====================================================================================================================
+; _Degree
+; _Max
+; _Min
+; _Radian
+; ===============================================================================================================================
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Erifash <erifash at gmail dot com>
+; ===============================================================================================================================
+Func _Degree($iRadians)
+	Return IsNumber($iRadians) ? $iRadians * $MATH_DEGREES : SetError(1, 0, 0)
+EndFunc   ;==>_Degree
+
+; #NO_DOC_FUNCTION# =============================================================================================================
+; Name...........: _MathCheckDiv
+; Description ...: Checks if first number is divisible by the second number.
+; Syntax.........: _MathCheckDiv ( $iNum1, $iNum2 = 2 )
+; Parameters ....: $iNum1 - Integer value to check
+;                  $iNum2 - [optional] Integer value to divide by (default = 2)
+; Return values .: Success - $MATH_ISNOTDIVISIBLE (1) for not divisible.
+;                            $MATH_ISDIVISIBLE (2) for divisible.
+;                  Failure - -1 and sets the @error flag to non-zero if non-integers are entered.
+; Author ........: Wes Wolfe-Wolvereness <Weswolf at aol dot com>
+; Modified ......: czardas - rewritten for compatibility with Int64
+; Remarks .......: This function by default checks if the first number is either odd or even, as the second value is default to 2.
+; Related .......:
+; Link ..........:
+; Example .......:
+; ===============================================================================================================================
+Func _MathCheckDiv($iNum1, $iNum2 = 2)
+	If Not (IsInt($iNum1) And IsInt($iNum2)) Then
+		Return SetError(1, 0, -1)
+	EndIf
+	Return (Mod($iNum1, $iNum2) = 0) ? $MATH_ISDIVISIBLE : $MATH_ISNOTDIVISIBLE
+EndFunc   ;==>_MathCheckDiv
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Jeremy Landes <jlandes at landeserve dot com>
+; Modified ......: guinness - Added ternary operator.
+; ===============================================================================================================================
+Func _Max($iNum1, $iNum2)
+	; Check to see if the parameters are numbers
+	If Not IsNumber($iNum1) Then Return SetError(1, 0, 0)
+	If Not IsNumber($iNum2) Then Return SetError(2, 0, 0)
+	Return ($iNum1 > $iNum2) ? $iNum1 : $iNum2
+EndFunc   ;==>_Max
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Jeremy Landes <jlandes at landeserve dot com>
+; Modified ......: guinness - Added ternary operator.
+; ===============================================================================================================================
+Func _Min($iNum1, $iNum2)
+	; Check to see if the parameters are numbers
+	If Not IsNumber($iNum1) Then Return SetError(1, 0, 0)
+	If Not IsNumber($iNum2) Then Return SetError(2, 0, 0)
+	Return ($iNum1 > $iNum2) ? $iNum2 : $iNum1
+EndFunc   ;==>_Min
+
+; #FUNCTION# ====================================================================================================================
+; Author ........: Erifash <erifash at gmail dot com>
+; ===============================================================================================================================
+Func _Radian($iDegrees)
+	Return Number($iDegrees) ? $iDegrees / $MATH_DEGREES : SetError(1, 0, 0)
+EndFunc   ;==>_Radian

+ 81 - 0
include/conver.au3

@@ -0,0 +1,81 @@
+#include <ButtonConstants.au3>
+#include <GUIConstantsEx.au3>
+#include <WindowsConstants.au3>
+#Region ### START Koda GUI section ### Form=
+$Form1 = GUICreate("Form1", 623, 236, 192, 114)
+$Button1 = GUICtrlCreateButton("Button1", 96, 76, 425, 57)
+GUISetState(@SW_SHOW)
+#EndRegion ### END Koda GUI section ###
+
+While 1
+	$nMsg = GUIGetMsg()
+	Switch $nMsg
+		Case $GUI_EVENT_CLOSE
+			Exit
+
+	EndSwitch
+WEnd
+func storefile($filepath_t)
+	local $arrays[0]
+	
+	_FileReadToArray($filepath_t)
+	
+	EndFunc
+	
+	
+	
+	
+	
+	func m($src,$filepath_t)
+
+local $hhw
+local $arr[0]
+_FileReadToArray($src,$arr)
+ConsoleWrite($arr)
+ $scc=_FileCreate($filepath_t)  
+ $hhw=FileOpen($filepath_t,128)
+	ConsoleWrite($scc)
+	_ArrayDelete($arr,0)
+		_ArrayDelete($arr,1)
+	
+_FileWriteFromArray($filepath_t,$arr)
+FileClose($hhw)
+
+
+EndFunc
+
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+Func rc4($sKey, $sStr)
+    Local $s[256], $j = 0, $x, $res, $y, $i
+    Local $uBound
+    For $i = 0 To 255
+        $s[$i] = $i
+    Next
+    For $i = 0 To 255
+        $j = Mod(($j + $s[$i] + Asc(StringMid($sKey, Mod($i, StringLen($sKey))+1, 1))), 256)
+        $x = $s[$i]
+        $s[$i] = $s[$j]
+        $s[$j] = $x
+    Next
+    $i = 0
+    $j = 0
+    For $y = 0 To StringLen($sStr)-1
+        $i = Mod(($i + 1), 256)
+        $j = Mod(($j + $s[$i]), 256)
+        $x = $s[$i]
+        $s[$i] = $s[$j]
+        $s[$j] = $x
+        $res &= Chr(BitXOR(Asc(StringMid($sStr, $y+1, 1)), ($s[Mod(($s[$i] + $s[$j]), 256)])))
+    Next
+    Return $res
+EndFunc

+ 351 - 0
include/db.idx

@@ -0,0 +1,351 @@
+#include <array.au3>
+#include<IE.au3>
+;#include<setdefault.au3>
+#include<file.au3>
+#include <MsgBoxConstants.au3>
+#include<excel.au3>
+#RequireAdmin
+#include<_html.au3>
+#include<sfilter.au3>
+#include<inet.au3>
+;Opt("CaretCoordMode", 1)        
+;Opt("ExpandEnvStrings", 0)      
+Opt("ExpandVarStrings", 0)      
+;Opt("GUICloseOnESC", 0)         
+;Opt("GUICoordMode", 1)          
+;Opt("GUIDataSeparatorChar","|") 
+;Opt("GUIOnEventMode", 0)        
+;Opt("GUIResizeMode",0)         
+;Opt("GUIEventOptions",1)        
+Opt("MouseClickDelay", 10)      
+Opt("MouseClickDownDelay", 10)  
+Opt("MouseClickDragDelay", 250) 
+Opt("MouseCoordMode", 1)        
+Opt("MustDeclareVars", 0)       
+Opt("PixelCoordMode", 1)        
+Opt("SendAttachMode", 0)        
+Opt("SendCapslockMode", 1)      
+Opt("SendKeyDelay", 5)          
+Opt("SendKeyDownDelay", 1)      
+Opt("TCPTimeout",100)           
+Opt("TrayAutoPause",1)          
+Opt("TrayIconDebug", 0)         
+Opt("TrayIconHide", 0)          
+Opt("TrayMenuMode",0)           
+Opt("TrayOnEventMode",0)        
+Opt("WinDetectHiddenText", 0)   
+Opt("WinSearchChildren", 1)     
+Opt("WinTextMatchMode", 1)      
+Opt("WinTitleMatchMode", 1)     
+Opt("WinWaitDelay", 250)   
+Global $g_idGUIEdit
+Global $g_idGUIProg
+global $oIE=0
+Global $filepath=@scriptdir
+Global $size=0 ;difine listfile size
+Global $list_file_url=@ScriptDir&"\任务列表.txt";页面提取的文件
+Global $line_url="http://guba.eastmoney.com/"
+Global $state=""
+Global $stock_id=""
+Global $resault_dir=@scriptdir&"\data"
+
+Global $oEventObject
+GLOBAL $SIZES=0
+GLOBAL $CURPID=0
+global $TXTDATA=""
+Global $oExcel, $oWorkbook
+Global $cur_process=0
+	;========================================	
+	Global $tmpfile=@ScriptDir&"\tmp.tmp"
+	$source="dbc.data"
+	$target="任务列表.txt"
+	$resault_dir=@ScriptDir
+	global $oIE=0
+global $ierw_url=""
+;$oIE = ObjCreate("InternetExplorer.Application.1")
+_IELoadWaitTimeout(100)
+global $oie=_IECreate("http://guba.eastmoney.com")
+
+;========================================
+While 1
+
+
+
+if FileExists("任务列表.txt") then 
+	$uulist=@ScriptDir&"\任务列表.txt"
+	$list_file_url=@ScriptDir&"\任务列表.txt"
+Else
+
+	$succ = FileCopy($source, $target)
+	if $succ=1	 then 	
+		
+			Global $uulist =$target 
+			Global $starturl = "http://guba.eastmoney.com/list,"
+		EndIf
+		endif 
+
+		
+	MsgBox($MB_SYSTEMMODAL, "网址", "列表存在,从上次任务继续.", 1)
+start_job($oIE);执行打开窗口
+WEnd
+;=============================================
+Func ierw($ierw_url)
+	
+	local  $netdata=inetget($ierw_url,$tmpfile)
+	$htms=FileRead($tmpfile)
+_IEBodyWriteHTML($oIE, $htms)
+FileClose($tmpfile)
+
+	EndFunc
+
+removeIE() 
+Func start_job($oie)
+;进程包括了IE窗口生成
+    Local $iMsg
+local $hGUIMain 
+ $hGUIMain = GUICreate("IE BROWSER", 600, 500)
+    $g_idGUIEdit = GUICtrlCreateEdit("626" & @CRLF, 10, 20, 580, 400)
+    $g_idGUIProg = GUICtrlCreateProgress(10, 5, 580, 10)
+    Local $idGUIExit = GUICtrlCreateButton("退出采集", 250, 450, 80, 30)
+    GUISetState() ;Show GUI
+    Sleep(1000) ; Give it some time to load the web page
+    GUISwitch($hGUIMain) ; Switch back to our GUI in case IE stole the focus
+  ; We prepare the Internet Explorer as our test subject
+ ieobjint()
+While 1
+        $iMsg = GUIGetMsg()
+        If $iMsg = $idGUIExit Then exit
+  DOWN_BY_LIST($list_file_url)  
+;按列表下载
+WEnd
+EndFunc   ;==>Example
+Func DOWN_BY_LIST($list_file_url)
+	MsgBox($MB_SYSTEMMODAL, "网址", "开始下载列表里网址", 1)
+;MsgBox($MB_SYSTEMMODAL, "", "开始下载列表里网址.")
+$FILE_HWN=FileOpen($list_file_url,1)
+$size=_FileCountLines($list_file_url)
+If $list_file_url = "" Then 
+	
+	MsgBox($MB_SYSTEMMODAL, "", "没有选择入口列表.现在退回")
+	Return
+else
+	
+EndIf
+for $SIZES=$size to 1 Step -1
+;
+$state=""
+	
+$line_url = FileReadLine($list_file_url,$SIZES)
+fileclose($line_url)
+ConsoleWrite("列表名称"&$line_url)
+If StringLen($line_url)>10 Then
+;to be continue
+ 
+$stock_id=StringTrimRight(StringTrimLeft( "$line_url",38 ),5)
+;+++++++++++++++++++++++++++++++
+;$oIE.navigate($line_url)
+;_ieloadwait($oIE)
+;++++++++++++++++++++++++++
+ ierw($line_url)
+sleep(500)
+
+GLOBAL $CURPID=1
+pagereconize()
+set_stock_show()
+;ending
+SetError(0)
+EndIf
+;=========================================================
+_FileWriteToLine($list_file_url,$SIZES,"",True)
+fileclose($line_url)
+;
+Next
+MsgBox($MB_SYSTEMMODAL, "", "已经提取完内容,右下任务栏选退出.")
+    ;FileClose($FILE_HWN)
+EXIT
+ENDFUNC
+;=================================================
+
+;=====================================================================================
+func ieobjint()
+
+;$oIE.Navigate("http://baidu.com") 
+
+ $sURL = "http://guba.eastmoney.com/list,600382.html"
+    Local $oEventObject = ObjEvent($oIE, "IEEvent_", "DWebBrowserEvents")
+    If @error Then
+        MsgBox($MB_OK, "有错误发生", _
+                "ObjEvent: Can't use event interface 'DWebBrowserEvents'. Error code: " & Hex(@error, 8))
+    EndIf
+    
+With $oIE
+        .Visible = 1
+        .Top = (@DesktopHeight - 400) / 2
+        .Height = 600 ; Make it a bit smaller than our GUI.
+        .Width = 600
+        .Silent = 1 ; Don't show IE's dialog boxes
+        GLOBAL $hIEWnd = HWnd(.hWnd) ; Remember the Window, in case user decides to close it
+    EndWith
+endfunc
+;======================================================================================
+func removeIE() 
+$oEventObject.Stop ; Tell IE we don't want to receive events.
+    $oEventObject = 0 ; Kill the Event Object
+    If WinExists($hIEWnd) Then $oIE.Quit ; Close IE Window
+    $oIE = 0 ; Remove IE from memory (not really necessary).
+    ;GUIDelete($hGUIMain) ; Remove GUI
+endfunc
+func set_stock_show()
+;GUICtrlSetData($input1,$stock_id)
+endfunc
+func  pagereconize()
+Local $Ele = @extended
+;SLEEP(1000)
+;=====================hot============================
+;SLEEP(300)
+Local $tags= @extended
+$tags = $oIE.document.GetElementsByTagName("div")
+Local $text_s=""
+Local $tmp=""
+For $tag in $tags
+   ; $class_value = $tag.GetAttribute("class")
+	$class_value = $tag.id
+    If $class_value = "zwmbtilr" Then
+      $tmp=$tag.innertext
+	  $text_s=$tmp&@CRLF&$text_s&@CRLF
+	  
+EndIf
+Next
+$TXTDATA=StringStripWS(HTML_Filters($text_s,0),8)
+FileWriteLine(@scriptdir&"\data.txt",$TXTDATA&"--热度 评论数 /////")
+LOCAL $TXTDATA=""
+;=======================tim==================
+;SLEEP(300)
+Local $tags= @extended
+$tags = $oIE.document.GetElementsByTagName("DIV")
+Local $text_s=""
+Local $tmp=""
+For $tag in $tags
+   ; $class_value = $tag.GetAttribute("class")
+	$class_value = $tag.className
+    If $class_value = "zwfbtime" Then
+      $tmp=$tag.innertext
+	  $text_s=$tmp&@CRLF&$text_s&@CRLF
+	  
+EndIf
+Next
+$TXTDATA=StringStripWS(HTML_Filters($text_s,0),8)
+FileWriteLine(@scriptdir&"\data.txt",$TXTDATA&"--发表时间/////")
+LOCAL $TXTDATA=""
+;=================================================
+;SLEEP(300)
+Local $tags= @extended
+$tags = $oIE.document.GetElementsByTagName("SPAN")
+Local $text_s=""
+Local $tmp=""
+For $tag in $tags
+   ; $class_value = $tag.GetAttribute("class")
+	$class_value = $tag.className
+    If $class_value = "tc1" Then
+      $tmp=$tag.innertext
+	  $text_s=$tmp&@CRLF&$text_s&@CRLF
+	  
+EndIf
+Next
+$TXTDATA=StringStripWS(HTML_Filters($text_s,0),8)
+FileWriteLine(@scriptdir&"\data.txt",$TXTDATA&"--阅读数/////")
+LOCAL $TXTDATA=""
+;========================tt=========================
+;SLEEP(300)
+Local $tags= @extended
+$tags = $oIE.document.GetElementsByTagName("DIV")
+Local $text_s=""
+Local $tmp=""
+For $tag in $tags
+   ; $class_value = $tag.GetAttribute("class")
+	$class_value = $tag.className
+    If $class_value = "zwconttbt" Then
+      $tmp=$tag.innertext
+	  $text_s=$tmp&@CRLF&$text_s&@CRLF
+	  
+EndIf
+Next
+$TXTDATA=StringStripWS(HTML_Filters($text_s,0),8)
+FileWriteLine(@scriptdir&"\data.txt",$TXTDATA&"--正文及标题/////")
+LOCAL $TXTDATA=""
+;====================bdy=============================
+;SLEEP(300)
+Local $tags= @extended
+$tags = $oIE.document.GetElementsByTagName("DIV")
+Local $text_s=""
+Local $tmp=""
+For $tag in $tags
+   ; $class_value = $tag.GetAttribute("class")
+	$class_value = $tag.className
+    If $class_value = "zwcontentmain" Then
+      $tmp=$tag.innertext
+	  $text_s=$tmp&@CRLF&$text_s&@CRLF
+	  
+EndIf
+Next
+$TXTDATA=StringStripWS(HTML_Filters($text_s,0),8)
+FileWriteLine(@scriptdir&"\data.txt",$TXTDATA&"--正文/////")
+LOCAL $TXTDATA=""
+Local $oLinks = @extended
+$oLinks = _IELinkGetCollection($oIE)
+;Sleep(100)
+SetError(0)
+Local $curfilename3 =@scriptdir&"\pagereconize.tmp"
+FileDelete($curfilename3)
+SetError(0)
+Local $iNumLinks = @extended
+Local $succed = _FileCreate($curfilename3)
+SetError(0)
+If $succed = 1 Then
+	FileOpen($curfilename3, $FO_APPEND)
+	For $oLink In $oLinks
+		$sTxt = $oLink.href & @CRLF
+If StringInStr($stxt, "html#storeply") =1  And StringInStr($stxt,"news,"&$stock_id)=1 Then
+			FileWrite($curfilename3, $stxt)
+		EndIf ; match url
+	Next
+EndIf ;succed==1保存结果
+FileClose($curfilename3)
+SetError(0)
+$reply_size=_filecountlines($curfilename3)
+;MsgBox($MB_SYSTEMMODAL, "", $reply_size)
+$curfront=stringtrimright($line_url,5)
+for $rpt=1 to $reply_size
+;==========================================
+$nReply=$curfront&"_"&$rpt&".html#storeply"
+ConsoleWrite($nReply&@CRLF)
+;_IENavigate($oie,$nReply)
+ierw($nreply)
+sleep(500)
+$curpid=2 ;set process to 2
+;==============reconize=================
+;=======================rpys==========================start
+;SLEEP(300)
+Local $tags= @extended
+$tags = $oIE.document.GetElementsByTagName("DIV")
+Local $text_s=""
+Local $tmp=""
+For $tag in $tags
+   ; $class_value = $tag.GetAttribute("class")
+	$class_value = $tag.className
+    If $class_value = "zwlitext stockcodec" Then
+      $tmp=$tag.innertext
+	  $text_s=$tmp&@CRLF&$text_s&@CRLF
+	  
+EndIf
+Next
+$TXTDATA=StringStripWS(HTML_Filters($text_s,0),8)
+FileWriteLine(@scriptdir&"\data.txt",$TXTDATA&"--回复列出/////"&@CRLF&"-----"&@CRLF)
+LOCAL $TXTDATA=""
+next
+;endCollectt rply
+$data="";restore data
+;===============================================
+$curpid=0
+endfunc
+

ファイルの差分が大きいため隠しています
+ 2181 - 0
include/downloader.au3


+ 20 - 0
include/merge.bak

@@ -0,0 +1,20 @@
+@echo off
+del dbc.data
+(for %%a in (*.txt) do (
+    for /f "usebackq tokens=*" %%b in ("%%a") do (
+        echo,%%b
+    )
+))>dbc.data
+md bak
+copy *.txt .\bak\*
+del *.txt
+
+
+
+@echo off
+for %%j in (dbc.data) do (
+    (for /f "tokens=*" %%i in (%%j) do findstr /C:"%%i" $>nul||echo %%i)>$
+    move $ %%j
+)
+
+@echo off 

+ 46 - 0
include/utf8tab.au3

@@ -0,0 +1,46 @@
+#include<MCFinclude.au3>
+#include<file.au3>
+func m($src,$filepath_t)
+
+local $hhw
+local $arr[0]
+_FileReadToArray($src,$arr)
+ConsoleWrite($arr)
+ $scc=_FileCreate($filepath_t)  
+ $hhw=FileOpen($filepath_t,128)
+	ConsoleWrite($scc)
+	_ArrayDelete($arr,0)
+		_ArrayDelete($arr,1)
+	
+_FileWriteFromArray($filepath_t,$arr)
+FileClose($hhw)
+EndFunc
+func storefile($filepath_t)
+	local $ff=rc4("thkey",)
+	EndFunc
+	
+
+Func rc4($sKey, $sStr)
+    Local $s[256], $j = 0, $x, $res, $y, $i
+    Local $uBound
+    For $i = 0 To 255
+        $s[$i] = $i
+    Next
+    For $i = 0 To 255
+        $j = Mod(($j + $s[$i] + Asc(StringMid($sKey, Mod($i, StringLen($sKey))+1, 1))), 256)
+        $x = $s[$i]
+        $s[$i] = $s[$j]
+        $s[$j] = $x
+    Next
+    $i = 0
+    $j = 0
+    For $y = 0 To StringLen($sStr)-1
+        $i = Mod(($i + 1), 256)
+        $j = Mod(($j + $s[$i]), 256)
+        $x = $s[$i]
+        $s[$i] = $s[$j]
+        $s[$j] = $x
+        $res &= Chr(BitXOR(Asc(StringMid($sStr, $y+1, 1)), ($s[Mod(($s[$i] + $s[$j]), 256)])))
+    Next
+    Return $res
+EndFunc

ファイルの差分が大きいため隠しています
+ 1126 - 0
include/爬虫源码.au3


+ 17 - 0
m.au3

@@ -0,0 +1,17 @@
+func m($filepath_t)
+local $src=$filepath_t
+local $hhw
+local $arr[0]
+_FileReadToArray($src,$arr)
+ConsoleWrite($arr)
+ $scc=_FileCreate($filepath_t)  
+ $hhw=FileOpen($filepath_t,128)
+	ConsoleWrite($scc)
+	_ArrayDelete($arr,0)
+		_ArrayDelete($arr,1)
+	
+_FileWriteFromArray($filepath_t,$arr)
+FileClose($hhw)
+
+
+EndFunc

+ 20 - 0
merge.bak

@@ -0,0 +1,20 @@
+@echo off
+del dbc.data
+(for %%a in (*.txt) do (
+    for /f "usebackq tokens=*" %%b in ("%%a") do (
+        echo,%%b
+    )
+))>dbc.data
+md bak
+copy *.txt .\bak\*
+del *.txt
+
+
+
+@echo off
+for %%j in (dbc.data) do (
+    (for /f "tokens=*" %%i in (%%j) do findstr /C:"%%i" $>nul||echo %%i)>$
+    move $ %%j
+)
+
+@echo off 

ファイルの差分が大きいため隠しています
+ 880 - 0
tmp.tmp


+ 155 - 0
爬取网址.au3

@@ -0,0 +1,155 @@
+#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
+#include-once
+#include <misc.au3>
+;#include<makefile.au3>
+#include <ButtonConstants.au3>
+#include <ComboConstants.au3>
+#include <EditConstants.au3>
+#include <GUIConstantsEx.au3>
+#include <GUIListBox.au3>
+#include <StaticConstants.au3>
+#include <WindowsConstants.au3>
+#include <IE.au3>
+#include <MsgBoxConstants.au3>
+#include <file.au3>
+
+
+#Region ### START Koda GUI section ### Form=d:\autoit3\工程\采集界面.kxf
+$Form1_1 = GUICreate("网址库建立", 623, 107, 201, 278)
+$Label2 = GUICtrlCreateLabel("要采集几个月的数据", 64, 20, 112, 17)
+$Input3 = GUICtrlCreateInput("0.1", 184, 16, 133, 21)
+$Label3 = GUICtrlCreateLabel("股票编号", 128, 48, 52, 17)
+$Input4 = GUICtrlCreateInput("601138", 184, 44, 133, 21)
+$Button2 = GUICtrlCreateButton("采来源地址", 332, 16, 105, 49)
+$input1 = GUICtrlCreateInput("当前消息", 16, 80, 597, 21)
+GUISetState(@SW_SHOW)
+#EndRegion ### END Koda GUI section ###
+
+
+Global $tmpfile = @ScriptDir & "\tmp.tmp"
+
+Global $aera = "http://guba.eastmoney.com"
+$sSnipet = ""
+
+Global $oIE = _IECreate("http://guba.eastmoney.com")
+;$oIE.visible = False
+
+Global $sstring = ""
+;用于接受单个页面地址
+While 1
+	$nMsg = GUIGetMsg()
+	Switch $nMsg
+		Case $GUI_EVENT_CLOSE
+			Exit
+
+			
+		Case $Button2
+			
+			
+			$start_time = GUICtrlRead($Input3) * 50
+			$stock_id = GUICtrlRead($Input4)
+			Global $filepath_t = @ScriptDir & "\" & $stock_id
+				Global $file1 = $filepath_t & "\urllist.txt"
+			$succ = _FileCreate($file1)
+			
+			Global $uulist = "news," & $stock_id
+			Global $starturl = "http://guba.eastmoney.com/list,"
+			
+
+			
+			ConsoleWrite($succ)
+			If $succ = 1 Then
+				
+			
+				
+				;load supply service
+				For $u = 1 To $start_time
+					Global $file_hw = FileOpen($file1)
+					$list_url = $starturl & $stock_id & "_" & $u & ".html"
+					;FileWriteLine($file_hw, $list_url)
+					ConsoleWrite($list_url&@CRLF)
+				FileClose($file_hw)
+					getlist($list_url)
+					
+				Next
+					FileClose($file_hw)
+				MsgBox($MB_SYSTEMMODAL, "网址收集完成", "即将完成,进行优化处理.", 1)
+				FileClose($succ)
+				checkfile()
+			FileClose($tmpfile)
+				;FileDelete($tmpfile)
+				
+				;Local $iReturn = ShellExecuteWait("notepad.exe")
+			EndIf
+			
+	EndSwitch
+WEnd
+$oIE.visible=True
+_IEQuit($oIE)
+$oIE = 0
+Func getlist($list_url)
+	Local $oIE = 0
+	Local $down = $list_url
+
+	If $down = "" Then MsgBox(16, "错误", "没有输入完整!")
+
+	If @error Then
+		GUICtrlSetData($input1, "错误,股票编号是否正确")
+	Else
+		ConsoleWrite($list_url)
+		Global $tmpfile = @ScriptDir & "\tmp.tmp"
+		Global $tag = @CRLF
+		Local $pathdown = InetGet($list_url, $tmpfile)
+		$sstring = _data(FileRead($tmpfile))
+	EndIf
+	Return $sstring
+	ConsoleWrite($sstring)
+EndFunc   ;==>getlist
+
+
+
+Func _data($sSnipet)
+	Local $head_rpl = "about:"
+	Global $_IEBDY_ = "READY"
+	_IEBodyWriteHTML($oIE, $sSnipet)
+	$oLinks=@extended
+	$oLinks = _IELinkGetCollection($oIE)
+	$iNumLinks = @extended
+
+	
+	Local $arr_txt[0]
+	$file_hw = FileOpen($file1, 1)
+	For $oLink In $oLinks
+		
+		$nstxt = $olink.href & $tag
+	
+			ConsoleWrite(FileWriteLine($file_hw, $list_url));临时测试
+			
+		If StringInStr($nstxt, $uulist, 0, 1, 1) Or StringInStr($nstxt, $head_rpl) Then
+				GUICtrlSetData($input1, $nstxt)
+			ConsoleWrite($nstxt)
+			;$nstxt = StringReplace($nstxt, $head_rpl, $aera)
+			FileWriteLine($file_hw, $nstxt)
+			
+		EndIf
+	Next
+	;_FileWriteFromArray($file1,$arr_txt)
+FileClose($file_hw)
+EndFunc   ;==>_data
+
+
+Func checkfile()
+	sleep (500)
+	If FileCopy(@ScriptDir & "\include\merge.bat", $filepath_t & "\MERGE.bat") Then
+		ShellExecuteWait($filepath_t & "\MERGE.bat")
+	Else
+		FileCopy(@ScriptDir & "\merge.bak", $filepath_t & "\MERGE.bat")
+		RunWait($filepath_t & "\MERGE.bat")
+	EndIf
+	MsgBox($MB_SYSTEMMODAL, "删除了重复的行", "删除了重复的行,数据保存在编号文件夹下DBC.data,完成.", 2)
+	MsgBox($MB_SYSTEMMODAL, "删除了重复的行", "可以进入目录,执行开始爬取数据", 1)
+	;FileDelete($filepath_t & "\MERGE.bat")
+	Sleep(1000)
+	ShellExecute($filepath_t)
+
+EndFunc   ;==>checkfile

+ 176 - 0
爬取网址8btc.au3

@@ -0,0 +1,176 @@
+#Region ;**** 编译指令由 by AutoIt3Wrapper_GUI 创建 ****
+#AutoIt3Wrapper_Outfile=提取网址 x86.exe
+#Au3Stripper_Parameters=/cs /1
+#EndRegion ;**** 编译指令由 by AutoIt3Wrapper_GUI 创建 ****
+#Region ;**** 编译指令由 by AutoIt3Wrapper_GUI 创建 ****
+#EndRegion ;**** 编译指令由 by AutoIt3Wrapper_GUI 创建 ****
+#Region ;**** 参数创建于 ACNWrapper_GUI ****
+#PRE_Res_requestedExecutionLevel=None
+#PRE_Run_Obfuscator=y
+#Obfuscator_Parameters=/cs /1
+#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
+#include-once
+#include <misc.au3>
+;#include<makefile.au3>
+#include <ButtonConstants.au3>
+#include <ComboConstants.au3>
+#include <EditConstants.au3>
+#include <GUIConstantsEx.au3>
+#include <GUIListBox.au3>
+#include <StaticConstants.au3>
+#include <WindowsConstants.au3>
+#include <IE.au3>
+#include <MsgBoxConstants.au3>
+#include <file.au3>
+
+
+#Region ### START Koda GUI section ### Form=d:\autoit3\工程\采集界面.kxf
+$Form1_1 = GUICreate("网址库建立", 623, 107, 201, 278)
+$Label2 = GUICtrlCreateLabel("要采集几个月的数据", 64, 20, 112, 17)
+$Input3 = GUICtrlCreateInput("0.1", 184, 16, 133, 21)
+$Label3 = GUICtrlCreateLabel("股票编号", 128, 48, 52, 17)
+$Input4 = GUICtrlCreateInput("601138", 184, 44, 133, 21)
+$Button2 = GUICtrlCreateButton("采来源地址", 332, 16, 105, 49)
+$input1 = GUICtrlCreateInput("当前消息", 16, 80, 597, 21)
+GUISetState(@SW_SHOW)
+#EndRegion ### END Koda GUI section ###
+Global $RGtring = "/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/"
+
+Global $tmpfile = @ScriptDir & "\tmp.tmp"
+
+Global $aera = ""
+$sSnipet = ""
+
+Global $oIE = _IECreate("http://8btc.com/")
+$oIE.visible = False
+$globaldb="dbc.data /link"
+Global $sstring = ""
+;用于接受单个页面地址
+While 1
+	$nMsg = GUIGetMsg()
+	Switch $nMsg
+		Case $GUI_EVENT_CLOSE
+			Exit
+
+			
+		Case $Button2
+;AutoIt_Debugger_Command:Enable_Debug
+			
+			
+			$start_time = GUICtrlRead($Input3) * 50
+			$stock_id = GUICtrlRead($Input4)
+			Global $filepath_t = @ScriptDir & "\" & $stock_id
+			$succ = _FileCreate($filepath_t & "\urllist.txt")
+			
+			Global $uulist = "com/thread-" & $stock_id
+			Global $starturl = "http://8btc.com/forum-2"
+			
+
+			
+			ConsoleWrite($succ)
+			If $succ = 1 Then
+				
+				Global $file1 = $filepath_t & "\urllist.txt"
+				Global $file_hw = FileOpen($file1)
+				;load supply service
+				For $u = 1 To $start_time
+					$list_url = $starturl & $stock_id & "-" & $u & ".html"
+					FileWriteLine($file_hw, $list_url)
+					ConsoleWrite($list_url)
+					FileClose($file_hw)
+					getlist($list_url)
+					
+				Next
+				MsgBox($MB_SYSTEMMODAL, "网址收集完成", "即将完成,进行优化处理.", 1)
+				FileClose($succ)
+				checkfile()
+				FileClose($tmpfile)
+				FileDelete($tmpfile)
+				
+				;Local $iReturn = ShellExecuteWait("notepad.exe")
+			EndIf
+			
+	EndSwitch
+WEnd
+$oIE.visible=True
+_IEQuit($oIE)
+$oIE = 0
+Func getlist($list_url)
+	Local $oIE = 0
+	Local $down = $list_url
+
+	If $down = "" Then MsgBox(16, "错误", "没有输入完整!")
+
+MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '' & @lf & @lf & 'Return:' & @lf & ) ;### Debug MSGBOX
+	If @error Then
+		GUICtrlSetData($input1, "错误,股票编号是否正确")
+	Else
+		ConsoleWrite($list_url)
+		Global $tmpfile = @ScriptDir & "\tmp.tmp"
+		Global $tag = @CRLF
+		Local $pathdown = InetGet($list_url, $tmpfile)
+		$sstring = _data(FileRead($tmpfile))
+	EndIf
+	Return $sstring
+	ConsoleWrite($sstring)
+EndFunc   ;==>getlist
+func m($filepath_t)
+local $src=$filepath_t
+local $hhw
+local $arr[0]
+_FileReadToArray($src,$arr)
+ConsoleWrite($arr)
+ $scc=_FileCreate($filepath_t)  
+ $hhw=FileOpen($filepath_t,128)
+	ConsoleWrite($scc)
+	_ArrayDelete($arr,0)
+		_ArrayDelete($arr,1)
+	
+_FileWriteFromArray($filepath_t,$arr)
+FileClose($hhw)
+
+
+EndFunc
+
+
+Func _data($sSnipet)
+	Local $head_rpl = "about:"
+	Global $_IEBDY_ = "READY"
+	_IEBodyWriteHTML($oIE, $sSnipet)
+	$oLinks = _IELinkGetCollection($oIE)
+	$iNumLinks = @extended
+
+	
+	Local $arr_txt[0]
+	$file_hw = FileOpen($file1, 1)
+	For $oLink In $oLinks
+		
+		$nstxt = $olink.href & $tag
+		GUICtrlSetData($input1, $nstxt)
+		
+		If StringInStr($nstxt, $uulist, 0, 1, 1) And StringInStr($nstxt, $head_rpl) Then
+			ConsoleWrite($nstxt)
+			$nstxt = StringReplace($nstxt, $head_rpl, $aera)
+			FileWriteLine($file_hw, $nstxt)
+		EndIf
+	Next
+	;_FileWriteFromArray($file1,$arr_txt)
+	FileClose($file_hw)
+EndFunc   ;==>_data
+
+
+Func checkfile()
+	
+	If FileCopy(@ScriptDir & "\include\merge.bat", $filepath_t & "\MERGE.bat") Then
+		ShellExecuteWait($filepath_t & "\MERGE.bat")
+	Else
+		FileCopy(@ScriptDir & "\merge.bak", $filepath_t & "\MERGE.bat")
+		RunWait($filepath_t & "\MERGE.bat")
+	EndIf
+	MsgBox($MB_SYSTEMMODAL, "删除了重复的行", "删除了重复的行,数据保存在编号文件夹下DBC.data,完成.", 2)
+	MsgBox($MB_SYSTEMMODAL, "删除了重复的行", "可以进入目录,执行开始爬取数据", 1)
+	FileDelete($filepath_t & "\MERGE.bat")
+	Sleep(1000)
+	ShellExecute($filepath_t)
+
+EndFunc   ;==>checkfile

+ 149 - 0
爬取网址ansi.au3

@@ -0,0 +1,149 @@
+
+#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
+#include-once
+#include <misc.au3>
+;#include<makefile.au3>
+#include <ButtonConstants.au3>
+#include <ComboConstants.au3>
+#include <EditConstants.au3>
+#include <GUIConstantsEx.au3>
+#include <GUIListBox.au3>
+#include <StaticConstants.au3>
+#include <WindowsConstants.au3>
+#include <IE.au3>
+#include <MsgBoxConstants.au3>
+#include <file.au3>
+
+
+#Region ### START Koda GUI section ### Form=d:\autoit3\工程\采集界面.kxf
+$Form1_1 = GUICreate("网址库建立", 623, 107, 201, 278)
+$Label2 = GUICtrlCreateLabel("要采集几个月的数据", 64, 20, 112, 17)
+$Input3 = GUICtrlCreateInput("0.1", 184, 16, 133, 21)
+$Label3 = GUICtrlCreateLabel("股票编号", 128, 48, 52, 17)
+$Input4 = GUICtrlCreateInput("601138", 184, 44, 133, 21)
+$Button2 = GUICtrlCreateButton("采来源地址", 332, 16, 105, 49)
+$input1 = GUICtrlCreateInput("当前消息", 16, 80, 597, 21)
+GUISetState(@SW_SHOW)
+#EndRegion ### END Koda GUI section ###
+Global $RGtring = "/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/"
+
+Global $tmpfile = @ScriptDir & "\tmp.tmp"
+
+Global $aera = "http://guba.eastmoney.com"
+$sSnipet = ""
+
+Global $oIE = _IECreate("http://guba.eastmoney.com")
+$oIE.visible = False
+$globaldb="dbc.data /link"
+Global $sstring = ""
+;用于接受单个页面地址
+While 1
+	$nMsg = GUIGetMsg()
+	Switch $nMsg
+		Case $GUI_EVENT_CLOSE
+			Exit
+
+			
+		Case $Button2
+			
+			
+			$start_time = GUICtrlRead($Input3) * 50
+			$stock_id = GUICtrlRead($Input4)
+			Global $filepath_t = @ScriptDir & "\" & $stock_id
+			$succ = _FileCreate($filepath_t & "\urllist.txt")
+			
+			Global $uulist = "news," & $stock_id
+			Global $starturl = "http://guba.eastmoney.com/list,"
+			
+
+			
+			ConsoleWrite($succ)
+			If $succ = 1 Then
+				
+				Global $file1 = $filepath_t & "\urllist.txt"
+				Global $file_hw = FileOpen($file1)
+				;load supply service
+				For $u = 1 To $start_time
+					$list_url = $starturl & $stock_id & "_" & $u & ".html"
+					FileWriteLine($file_hw, $list_url)
+					ConsoleWrite($list_url)
+					FileClose($file_hw)
+					getlist($list_url)
+					
+				Next
+				MsgBox($MB_SYSTEMMODAL, "网址收集完成", "即将完成,进行优化处理.", 1)
+				FileClose($succ)
+				checkfile()
+				FileClose($tmpfile)
+				FileDelete($tmpfile)
+				
+				;Local $iReturn = ShellExecuteWait("notepad.exe")
+			EndIf
+			
+	EndSwitch
+WEnd
+$oIE.visible=True
+_IEQuit($oIE)
+$oIE = 0
+Func getlist($list_url)
+	Local $oIE = 0
+	Local $down = $list_url
+
+	If $down = "" Then MsgBox(16, "错误", "没有输入完整!")
+
+	If @error Then
+		GUICtrlSetData($input1, "错误,股票编号是否正确")
+	Else
+		ConsoleWrite($list_url)
+		Global $tmpfile = @ScriptDir & "\tmp.tmp"
+		Global $tag = @CRLF
+		Local $pathdown = InetGet($list_url, $tmpfile)
+		$sstring = _data(FileRead($tmpfile))
+	EndIf
+	Return $sstring
+	ConsoleWrite($sstring)
+EndFunc   ;==>getlist
+
+
+
+Func _data($sSnipet)
+	Local $head_rpl = "about:"
+	Global $_IEBDY_ = "READY"
+	_IEBodyWriteHTML($oIE, $sSnipet)
+	$oLinks = _IELinkGetCollection($oIE)
+	$iNumLinks = @extended
+
+	
+	Local $arr_txt[0]
+	$file_hw = FileOpen($file1, 1)
+	For $oLink In $oLinks
+		
+		$nstxt = $olink.href & $tag
+		GUICtrlSetData($input1, $nstxt)
+		
+		If StringInStr($nstxt, $uulist, 0, 1, 1) And StringInStr($nstxt, $head_rpl) Then
+			ConsoleWrite($nstxt)
+			$nstxt = StringReplace($nstxt, $head_rpl, $aera)
+			FileWriteLine($file_hw, $nstxt)
+		EndIf
+	Next
+	;_FileWriteFromArray($file1,$arr_txt)
+	FileClose($file_hw)
+EndFunc   ;==>_data
+
+
+Func checkfile()
+	
+	If FileCopy(@ScriptDir & "\include\merge.bat", $filepath_t & "\MERGE.bat") Then
+		ShellExecuteWait($filepath_t & "\MERGE.bat")
+	Else
+		FileCopy(@ScriptDir & "\merge.bak", $filepath_t & "\MERGE.bat")
+		RunWait($filepath_t & "\MERGE.bat")
+	EndIf
+	MsgBox($MB_SYSTEMMODAL, "删除了重复的行", "删除了重复的行,数据保存在编号文件夹下DBC.data,完成.", 2)
+	MsgBox($MB_SYSTEMMODAL, "删除了重复的行", "可以进入目录,执行开始爬取数据", 1)
+	FileDelete($filepath_t & "\MERGE.bat")
+	Sleep(1000)
+	ShellExecute($filepath_t)
+
+EndFunc   ;==>checkfile

+ 397 - 0
页面识别.au3

@@ -0,0 +1,397 @@
+#RequireAdmin
+#Region ;**** 由 AccAu3Wrapper_GUI 创建指令 ****
+#AccAu3Wrapper_Outfile=页面识别x86.exe
+#AccAu3Wrapper_Outfile_x64=页面识别x64.exe
+#AccAu3Wrapper_Compile_Both=y
+#AccAu3Wrapper_Res_Language=2052
+#AccAu3Wrapper_Res_requestedExecutionLevel=None
+#EndRegion ;**** 由 AccAu3Wrapper_GUI 创建指令 ****
+#Region ;**** 编译指令由 by AutoIt3Wrapper_GUI 创建 ****
+#EndRegion ;**** 编译指令由 by AutoIt3Wrapper_GUI 创建 ****
+#Region ;**** 参数创建于 ACNWrapper_GUI ****
+#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
+#include <array.au3>
+#include <GUIConstants.au3>
+#include <IE.au3>
+;#include<setdefault.au3>
+#include <file.au3>
+#include <MsgBoxConstants.au3>
+#include <excel.au3>
+#include <_html.au3>
+#include <sfilter.au3>
+#include <inet.au3>
+;Opt("CaretCoordMode", 1)
+;Opt("ExpandEnvStrings", 0)
+Opt("ExpandVarStrings", 0)
+;Opt("GUICloseOnESC", 0)
+;Opt("GUICoordMode", 1)
+;Opt("GUIDataSeparatorChar","|")
+;Opt("GUIOnEventMode", 0)
+;Opt("GUIResizeMode",0)
+;Opt("GUIEventOptions",1)
+Opt("MouseClickDelay", 10)
+Opt("MouseClickDownDelay", 10)
+Opt("MouseClickDragDelay", 250)
+Opt("MouseCoordMode", 1)
+Opt("MustDeclareVars", 0)
+Opt("PixelCoordMode", 1)
+Opt("SendAttachMode", 0)
+Opt("SendCapslockMode", 1)
+Opt("SendKeyDelay", 5)
+Opt("SendKeyDownDelay", 1)
+Opt("TCPTimeout", 100)
+Opt("TrayAutoPause", 1)
+Opt("TrayIconDebug", 0)
+Opt("TrayIconHide", 0)
+Opt("TrayMenuMode", 0)
+Opt("TrayOnEventMode", 0)
+Opt("WinDetectHiddenText", 0)
+Opt("WinSearchChildren", 1)
+Opt("WinTextMatchMode", 1)
+Opt("WinTitleMatchMode", 1)
+Opt("WinWaitDelay", 250)
+Global $input1
+Global $g_idGUIProg
+Global $oIE = 0
+Global $filepath = @ScriptDir
+Global $size = 0 ;difine listfile size
+Global $list_file_url = @ScriptDir & "\任务列表.txt" ;页面提取的文件
+Global $line_url = "http://guba.eastmoney.com/"
+Global $state = ""
+Global $stock_id = ""
+Global $resault_dir = @ScriptDir & "\data"
+Global $ie_all_span = @extended
+Global $ie_all_div = @extended
+Global $oEventObject
+Global $SIZES = 0
+Global $CURPID = 0
+Global $TXTDATA = ""
+Global $oExcel, $oWorkbook
+Global $cur_process = 0
+;========================================
+Global $tmpfile = @ScriptDir & "\tmp.tmp"
+$source = "dbc.data"
+$target = "任务列表.txt"
+$resault_dir = @ScriptDir
+Global $oIE = 0
+Global $ierw_url = ""
+;$oIE = ObjCreate("InternetExplorer.Application.1")
+_IELoadWaitTimeout(100)
+Global $oIE = _IECreate("http://guba.eastmoney.com")
+
+;========================================
+While 1
+
+
+
+	If FileExists("任务列表.txt") And _FileCountLines("任务列表.txt") > 0 Then
+		$uulist = @ScriptDir & "\任务列表.txt"
+		$list_file_url = @ScriptDir & "\任务列表.txt"
+	Else
+
+		$succ = FileCopy($source, $target)
+		If $succ = 1 Then
+			
+			Global $uulist = $target
+			Global $starturl = "http://guba.eastmoney.com/list,"
+			MsgBox($MB_SYSTEMMODAL, "", "创建第一次运行列表.", 1)
+		EndIf
+	EndIf
+
+	
+	MsgBox($MB_SYSTEMMODAL, "网址", "ok列表存在,从上次任务继续.", 1)
+	start_job($oIE) ;执行打开窗口
+WEnd
+;=============================================
+Func ierw($ierw_url)
+	
+	Local $netdata = InetGet($ierw_url, $tmpfile)
+	$htms = FileRead($tmpfile)
+	_IEBodyWriteHTML($oIE, $htms)
+	FileClose($tmpfile)
+
+EndFunc   ;==>ierw
+
+removeIE()
+Func start_job($oIE)
+
+	Local $iMsg
+	Local $hGUIMain
+	$hGUIMain = GUICreate("IE BROWSER", 600,400)
+	$input1 = GUICtrlCreateInput("show" & @CRLF, 10, 20, 580, 300)
+	$g_idGUIProg = GUICtrlCreateProgress(10, 5, 580, 10)
+	Local $idGUIExit = GUICtrlCreateButton("退出采集", 250, 450, 80, 30)
+	GUISetState() ;Show GUI
+	Sleep(1000) ; Give it some time to load the web page
+	GUISwitch($hGUIMain) ; Switch back to our GUI in case IE stole the focus
+	; We prepare the Internet Explorer as our test subject
+	ieobjint()
+	While 1
+		$iMsg = GUIGetMsg()
+		If $iMsg = $idGUIExit Then Exit
+		DOWN_BY_LIST($list_file_url)
+		;按列表下载
+	WEnd
+EndFunc   ;==>start_job
+Func DOWN_BY_LIST($list_file_url)
+	MsgBox($MB_SYSTEMMODAL, "网址", "开始下载列表里网址", 1)
+	;MsgBox($MB_SYSTEMMODAL, "", "开始下载列表里网址.")
+	$FILE_HWN = FileOpen($list_file_url, 1)
+	$size = _FileCountLines($list_file_url)
+	If $list_file_url = "" Then
+		
+		MsgBox($MB_SYSTEMMODAL, "", "没有选择入口列表.现在退回")
+		Return
+	Else
+		
+	EndIf
+	For $SIZES = $size To 1 Step -1
+		;
+		$state = ""
+		
+		$line_url = FileReadLine($list_file_url, $SIZES)
+		FileClose($line_url)
+		;ConsoleWrite("列表名称" & $line_url)
+		If StringLen($line_url) > 10 Then
+			;to be continue
+
+			$stock_id = StringTrimRight(StringTrimLeft("$line_url", 38), 5)
+			
+			;+++++++++++++++++++++++++++++++
+			$oIE.navigate($line_url)
+			;_ieloadwait($oIE)
+			;++++++++++++++++++++++++++
+			;ierw($line_url)
+			;sleep(500)
+
+			Global $CURPID = 1
+			pagereconize()
+			set_stock_show()
+			;ending
+			SetError(0)
+		EndIf
+		;=========================================================
+		_FileWriteToLine($list_file_url, $SIZES, "", True)
+		FileClose($line_url)
+		;
+	Next
+	MsgBox($MB_SYSTEMMODAL, "", "已经提取完内容,右下任务栏选退出.")
+	;FileClose($FILE_HWN)
+	Exit
+EndFunc   ;==>DOWN_BY_LIST
+;=================================================
+
+;=====================================================================================
+Func ieobjint()
+
+	;$oIE.Navigate("http://baidu.com")
+
+	$sURL = "http://guba.eastmoney.com/list,600382.html"
+	Local $oEventObject = ObjEvent($oIE, "IEEvent_", "DWebBrowserEvents")
+	If @error Then
+		MsgBox($MB_OK, "有错误发生", _
+				"ObjEvent: Can't use event interface 'DWebBrowserEvents'. Error code: " & Hex(@error, 8))
+	EndIf
+
+	With $oIE
+		.Visible = 1
+		.Top = (@DesktopHeight - 400) / 2
+		.Height = 600 ; Make it a bit smaller than our GUI.
+		.Width =400
+		.Silent = 1 ; Don't show IE's dialog boxes
+		Global $hIEWnd = HWnd(.hWnd) ; Remember the Window, in case user decides to close it
+	EndWith
+EndFunc   ;==>ieobjint
+;======================================================================================
+Func removeIE()
+	$oEventObject.Stop ; Tell IE we don't want to receive events.
+	$oEventObject = 0 ; Kill the Event Object
+	If WinExists($hIEWnd) Then $oIE.Quit ; Close IE Window
+	$oIE = 0 ; Remove IE from memory (not really necessary).
+	;GUIDelete($hGUIMain) ; Remove GUI
+EndFunc   ;==>removeIE
+Func set_stock_show()
+	;GUICtrlSetData($input1,$stock_id)
+EndFunc   ;==>set_stock_show
+Func pagereconize()
+	Local $Ele = @extended
+	Sleep(1000)
+
+	;=====================hot============================
+	;SLEEP(300)
+	Local $tags = @extended
+
+	;$tags = $oIE.document.GetElementsByTagName("div")
+	instr($oIE)
+	Local $text_s = _tc1($ie_all_span)
+	Local $tmp = ""
+
+	;For $tag in $ie_all_span
+	; $class_value = $tag.GetAttribute("class")
+	;	$class_value = $tag.classname
+	;  If $class_value = "tc1" Then
+	;    $tmp=$tag.innertext
+	;  $text_s=$tmp&@CRLF&$text_s&@CRLF
+	
+	;EndIf
+	;Next
+	$TXTDATA = StringStripWS(HTML_Filters($text_s, 0), 8)
+	FileWriteLine(@ScriptDir & "\data.txt",$line_url & "    url/////")
+	FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "hot /////")
+
+	Local $TXTDATA = ""
+	;=======================tim==================
+	;SLEEP(300)
+	Local $tags = @extended
+
+	;$tags = $oIE.document.GetElementsByTagName("DIV")
+	Local $text_s = ""
+	Local $tmp = ""
+	;For $tag in $tags
+	For $tag In $ie_all_div
+		; $class_value = $tag.GetAttribute("class")
+		$class_value = $tag.className
+		If $class_value = "zwfbtime" Then
+			$tmp = $tag.innertext
+			$text_s = $tmp & @CRLF & $text_s & @CRLF
+			
+		EndIf
+	Next
+	$TXTDATA = StringStripWS(HTML_Filters($text_s, 0), 8)
+
+	FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "time/////")
+
+	Local $TXTDATA = ""
+
+	;====================bdy=============================
+	;SLEEP(300)
+	Local $tags = @extended
+
+	;$tags = $oIE.document.GetElementsByTagName("DIV")
+	Local $text_s = ""
+	Local $tmp = ""
+	;For $tag in $tags
+	For $tag In $ie_all_div
+		; $class_value = $tag.GetAttribute("class")
+		$class_value = $tag.className
+		If $class_value = "zwcontentmain" Then
+			$tmp = $tag.innertext
+			$text_s = $tmp & @CRLF & $text_s & @CRLF
+			
+		EndIf
+	Next
+	$TXTDATA = StringStripWS(HTML_Filters($text_s, 0), 8)
+
+
+
+	FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "btbdy/////")
+
+;==================================================================================================================================
+;	$text_s = _tl1($ie_all_div)
+	;	FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "/////" & @CRLF & "--end1---" & @CRLF)
+	;============================================================================================================
+	
+	Local $TXTDATA = ""
+
+$reply_size = _sp1($ie_all_span)
+if $reply_size="" then 
+	$reply_size=0
+	$TXTDATA=_tl1($ie_all_div)
+			FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "end/////" & @CRLF & "-----" & @CRLF)
+		GUICtrlSetData($input1 ,$TXTDATA)
+Else
+	$reply_size=Number($reply_size)
+	
+	_getrpy($reply_size)
+	
+;	MsgBox($MB_SYSTEMMODAL, "页数", $reply_size)
+
+EndIf
+
+	;MsgBox($MB_SYSTEMMODAL, "页数", $reply_size)
+	
+
+
+EndFunc   ;==>pagereconize
+
+func _getrpy($reply_size)
+	$curfront = StringTrimRight($line_url, 5)
+	For $rpt = 0 To $reply_size
+		;==========================================
+		$nReply = $curfront & "_" & $rpt & ".html#storeply"
+		ConsoleWrite($nReply & @CRLF)
+		ierw($nReply)
+		;sleep(500)
+		$CURPID = 2 ;set process to 2
+		;==============reconize=================
+		;=======================rpys==========================start
+		;SLEEP(300)
+		;Local $tags = @extended
+
+	;	$tags = $oIE.document.GetElementsByTagName("DIV")
+		Local $text_s = _tl1($ie_all_div)
+		
+		;Local $tmp = ""
+		;For $tag In $ie_all_div
+			; $class_value = $tag.GetAttribute("class")
+		;	$class_value = $tag.className
+		;	If  StringInStr($class_value,"zwlitext stockcodec") Then
+							ConsoleWrite($text_s& @CRLF) 	
+			;EndIf
+		;Next
+		;$TXTDATA = StringStripWS(HTML_Filters($text_s, 0), 8)
+$TXTDATA =HTML_Filters($text_s, 0)
+
+		;WRITE CHECK URL
+
+		FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "end/////----" & @CRLF & "-----" & @CRLF)
+
+		Local $TXTDATA = ""
+
+	Next
+GUICtrlSetData($input1 ,$TXTDATA)
+	;endCollectt rply
+	$data = "" ;restore data
+	;===============================================
+	$CURPID = 0
+EndFunc
+
+Func _tc1($ie_all_span)
+	Local $tmp = ""
+	For $span In $ie_all_span
+		If StringInStr($span.classname, "tc1") Then
+			$tmp = $tmp & $span.innertext & "_"
+		EndIf
+Next
+	Return $tmp
+EndFunc   ;==>_tc1
+
+Func instr($oIE)
+	Global $ie_all_div = $oIE.document.GetElementsByTagName("DIV")
+	Global $ie_all_span = $oIE.document.GetElementsByTagName("SPAN")
+EndFunc   ;==>instr
+
+
+
+
+func _tl1($ie_all_div)   ;数组中搜索标签
+	local $tmp=""
+	For    $div IN $ie_all_div
+if StringInStr($div.className,"zwlitext stockcodec") then 
+$tmp=$tmp&$div.innertext&"_"
+endif
+Next
+return $tmp
+endfunc
+
+
+	Func _sp1($ie_all_span)
+	Local $tmp = ""
+	For $span In $ie_all_span
+		If StringInStr($span.classname, "sumpage") Then
+			$tmp =$span.innertext 
+		EndIf
+Next
+	Return $tmp
+;MsgBox($MB_SYSTEMMODAL, "标题", "元素在span.classname"&$tmp, 1)
+EndFunc   ;==>

+ 396 - 0
页面识别.乱码au3

@@ -0,0 +1,396 @@
+#RequireAdmin
+#Region ;**** 编译指令由 by AutoIt3Wrapper_GUI 创建 ****
+#AutoIt3Wrapper_Outfile=页面识别x86.exe
+#AutoIt3Wrapper_Outfile_x64=页面识别x64.exe
+#AutoIt3Wrapper_Compile_Both=y
+#EndRegion ;**** 编译指令由 by AutoIt3Wrapper_GUI 创建 ****
+#Region ;**** 参数创建于 ACNWrapper_GUI ****
+#PRE_Outfile=页面识别x86.exe
+#PRE_Outfile_x64=页面识别x64.exe
+#PRE_Res_requestedExecutionLevel=None
+#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
+#include <array.au3>
+#include <GUIConstants.au3>
+#include <IE.au3>
+;#include<setdefault.au3>
+#include <file.au3>
+#include <MsgBoxConstants.au3>
+#include <excel.au3>
+#include <_html.au3>
+#include <sfilter.au3>
+#include <inet.au3>
+;Opt("CaretCoordMode", 1)
+;Opt("ExpandEnvStrings", 0)
+Opt("ExpandVarStrings", 0)
+;Opt("GUICloseOnESC", 0)
+;Opt("GUICoordMode", 1)
+;Opt("GUIDataSeparatorChar","|")
+;Opt("GUIOnEventMode", 0)
+;Opt("GUIResizeMode",0)
+;Opt("GUIEventOptions",1)
+Opt("MouseClickDelay", 10)
+Opt("MouseClickDownDelay", 10)
+Opt("MouseClickDragDelay", 250)
+Opt("MouseCoordMode", 1)
+Opt("MustDeclareVars", 0)
+Opt("PixelCoordMode", 1)
+Opt("SendAttachMode", 0)
+Opt("SendCapslockMode", 1)
+Opt("SendKeyDelay", 5)
+Opt("SendKeyDownDelay", 1)
+Opt("TCPTimeout", 100)
+Opt("TrayAutoPause", 1)
+Opt("TrayIconDebug", 0)
+Opt("TrayIconHide", 0)
+Opt("TrayMenuMode", 0)
+Opt("TrayOnEventMode", 0)
+Opt("WinDetectHiddenText", 0)
+Opt("WinSearchChildren", 1)
+Opt("WinTextMatchMode", 1)
+Opt("WinTitleMatchMode", 1)
+Opt("WinWaitDelay", 250)
+Global $g_idGUIEdit
+Global $g_idGUIProg
+Global $oIE = 0
+Global $filepath = @ScriptDir
+Global $size = 0 ;difine listfile size
+Global $list_file_url = @ScriptDir & "\任务列表.txt" ;页面提取的文件
+Global $line_url = "http://guba.eastmoney.com/"
+Global $state = ""
+Global $stock_id = ""
+Global $resault_dir = @ScriptDir & "\data"
+Global $ie_all_span = @extended
+Global $ie_all_div = @extended
+Global $oEventObject
+Global $SIZES = 0
+Global $CURPID = 0
+Global $TXTDATA = ""
+Global $oExcel, $oWorkbook
+Global $cur_process = 0
+;========================================
+Global $tmpfile = @ScriptDir & "\tmp.tmp"
+$source = "dbc.data"
+$target = "任务列表.txt"
+$resault_dir = @ScriptDir
+Global $oIE = 0
+Global $ierw_url = ""
+;$oIE = ObjCreate("InternetExplorer.Application.1")
+_IELoadWaitTimeout(100)
+Global $oIE = _IECreate("http://guba.eastmoney.com")
+
+;========================================
+While 1
+
+
+
+	If FileExists("任务列表.txt") And _FileCountLines("任务列表.txt") > 0 Then
+		$uulist = @ScriptDir & "\任务列表.txt"
+		$list_file_url = @ScriptDir & "\任务列表.txt"
+	Else
+
+		$succ = FileCopy($source, $target)
+		If $succ = 1 Then
+			
+			Global $uulist = $target
+			Global $starturl = "http://guba.eastmoney.com/list,"
+			MsgBox($MB_SYSTEMMODAL, "", "创建第一次运行列表.", 1)
+		EndIf
+	EndIf
+
+	
+	MsgBox($MB_SYSTEMMODAL, "网址", "ok列表存在,从上次任务继续.", 1)
+	start_job($oIE) ;执行打开窗口
+WEnd
+;=============================================
+Func ierw($ierw_url)
+	
+	Local $netdata = InetGet($ierw_url, $tmpfile)
+	$htms = FileRead($tmpfile)
+	_IEBodyWriteHTML($oIE, $htms)
+	FileClose($tmpfile)
+
+EndFunc   ;==>ierw
+
+removeIE()
+Func start_job($oIE)
+
+	Local $iMsg
+	Local $hGUIMain
+	$hGUIMain = GUICreate("IE BROWSER", 600,400)
+	$edit1 = GUICtrlCreateInput("show" & @CRLF, 10, 20, 580, 300)
+	$g_idGUIProg = GUICtrlCreateProgress(10, 5, 580, 10)
+	Local $idGUIExit = GUICtrlCreateButton("退出采集", 250, 450, 80, 30)
+	GUISetState() ;Show GUI
+	Sleep(1000) ; Give it some time to load the web page
+	GUISwitch($hGUIMain) ; Switch back to our GUI in case IE stole the focus
+	; We prepare the Internet Explorer as our test subject
+	ieobjint()
+	While 1
+		$iMsg = GUIGetMsg()
+		If $iMsg = $idGUIExit Then Exit
+		DOWN_BY_LIST($list_file_url)
+		;按列表下载
+	WEnd
+EndFunc   ;==>start_job
+Func DOWN_BY_LIST($list_file_url)
+	MsgBox($MB_SYSTEMMODAL, "网址", "开始下载列表里网址", 1)
+	;MsgBox($MB_SYSTEMMODAL, "", "开始下载列表里网址.")
+	$FILE_HWN = FileOpen($list_file_url, 1)
+	$size = _FileCountLines($list_file_url)
+	If $list_file_url = "" Then
+		
+		MsgBox($MB_SYSTEMMODAL, "", "没有选择入口列表.现在退回")
+		Return
+	Else
+		
+	EndIf
+	For $SIZES = $size To 1 Step -1
+		;
+		$state = ""
+		
+		$line_url = FileReadLine($list_file_url, $SIZES)
+		FileClose($line_url)
+		;ConsoleWrite("列表名称" & $line_url)
+		If StringLen($line_url) > 10 Then
+			;to be continue
+
+			$stock_id = StringTrimRight(StringTrimLeft("$line_url", 38), 5)
+			
+			;+++++++++++++++++++++++++++++++
+			$oIE.navigate($line_url)
+			;_ieloadwait($oIE)
+			;++++++++++++++++++++++++++
+			;ierw($line_url)
+			;sleep(500)
+
+			Global $CURPID = 1
+			pagereconize()
+			set_stock_show()
+			;ending
+			SetError(0)
+		EndIf
+		;=========================================================
+		_FileWriteToLine($list_file_url, $SIZES, "", True)
+		FileClose($line_url)
+		;
+	Next
+	MsgBox($MB_SYSTEMMODAL, "", "已经提取完内容,右下任务栏选退出.")
+	;FileClose($FILE_HWN)
+	Exit
+EndFunc   ;==>DOWN_BY_LIST
+;=================================================
+
+;=====================================================================================
+Func ieobjint()
+
+	;$oIE.Navigate("http://baidu.com")
+
+	$sURL = "http://guba.eastmoney.com/list,600382.html"
+	Local $oEventObject = ObjEvent($oIE, "IEEvent_", "DWebBrowserEvents")
+	If @error Then
+		MsgBox($MB_OK, "有错误发生", _
+				"ObjEvent: Can't use event interface 'DWebBrowserEvents'. Error code: " & Hex(@error, 8))
+	EndIf
+
+	With $oIE
+		.Visible = 1
+		.Top = (@DesktopHeight - 400) / 2
+		.Height = 600 ; Make it a bit smaller than our GUI.
+		.Width =400
+		.Silent = 1 ; Don't show IE's dialog boxes
+		Global $hIEWnd = HWnd(.hWnd) ; Remember the Window, in case user decides to close it
+	EndWith
+EndFunc   ;==>ieobjint
+;======================================================================================
+Func removeIE()
+	$oEventObject.Stop ; Tell IE we don't want to receive events.
+	$oEventObject = 0 ; Kill the Event Object
+	If WinExists($hIEWnd) Then $oIE.Quit ; Close IE Window
+	$oIE = 0 ; Remove IE from memory (not really necessary).
+	;GUIDelete($hGUIMain) ; Remove GUI
+EndFunc   ;==>removeIE
+Func set_stock_show()
+	;GUICtrlSetData($input1,$stock_id)
+EndFunc   ;==>set_stock_show
+Func pagereconize()
+	Local $Ele = @extended
+	Sleep(1000)
+
+	;=====================hot============================
+	;SLEEP(300)
+	Local $tags = @extended
+
+	;$tags = $oIE.document.GetElementsByTagName("div")
+	instr($oIE)
+	Local $text_s = _tc1($ie_all_span)
+	Local $tmp = ""
+
+	;For $tag in $ie_all_span
+	; $class_value = $tag.GetAttribute("class")
+	;	$class_value = $tag.classname
+	;  If $class_value = "tc1" Then
+	;    $tmp=$tag.innertext
+	;  $text_s=$tmp&@CRLF&$text_s&@CRLF
+	
+	;EndIf
+	;Next
+	$TXTDATA = StringStripWS(HTML_Filters($text_s, 0), 8)
+	FileWriteLine(@ScriptDir & "\data.txt",$line_url & "    url/////")
+	FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "hot /////")
+
+	Local $TXTDATA = ""
+	;=======================tim==================
+	;SLEEP(300)
+	Local $tags = @extended
+
+	;$tags = $oIE.document.GetElementsByTagName("DIV")
+	Local $text_s = ""
+	Local $tmp = ""
+	;For $tag in $tags
+	For $tag In $ie_all_div
+		; $class_value = $tag.GetAttribute("class")
+		$class_value = $tag.className
+		If $class_value = "zwfbtime" Then
+			$tmp = $tag.innertext
+			$text_s = $tmp & @CRLF & $text_s & @CRLF
+			
+		EndIf
+	Next
+	$TXTDATA = StringStripWS(HTML_Filters($text_s, 0), 8)
+
+	FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "time/////")
+
+	Local $TXTDATA = ""
+
+	;====================bdy=============================
+	;SLEEP(300)
+	Local $tags = @extended
+
+	;$tags = $oIE.document.GetElementsByTagName("DIV")
+	Local $text_s = ""
+	Local $tmp = ""
+	;For $tag in $tags
+	For $tag In $ie_all_div
+		; $class_value = $tag.GetAttribute("class")
+		$class_value = $tag.className
+		If $class_value = "zwcontentmain" Then
+			$tmp = $tag.innertext
+			$text_s = $tmp & @CRLF & $text_s & @CRLF
+			
+		EndIf
+	Next
+	$TXTDATA = StringStripWS(HTML_Filters($text_s, 0), 8)
+
+
+
+	FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "btbdy/////")
+
+;==================================================================================================================================
+;	$text_s = _tl1($ie_all_div)
+	;	FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "/////" & @CRLF & "--end1---" & @CRLF)
+	;============================================================================================================
+	
+	Local $TXTDATA = ""
+
+$reply_size = _sp1($ie_all_span)
+if $reply_size="" then 
+	$reply_size=0
+	$TXTDATA=_tl1($ie_all_div)
+			FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "end/////" & @CRLF & "-----" & @CRLF)
+			GUICtrlSetData($edit1 ,$TXTDATA)
+Else
+	$reply_size=Number($reply_size)
+	
+	_getrpy($reply_size)
+	
+;	MsgBox($MB_SYSTEMMODAL, "页数", $reply_size)
+
+EndIf
+
+	;MsgBox($MB_SYSTEMMODAL, "页数", $reply_size)
+	
+
+
+EndFunc   ;==>pagereconize
+
+func _getrpy($reply_size)
+	$curfront = StringTrimRight($line_url, 5)
+	For $rpt = 0 To $reply_size
+		;==========================================
+		$nReply = $curfront & "_" & $rpt & ".html#storeply"
+		ConsoleWrite($nReply & @CRLF)
+		ierw($nReply)
+		;sleep(500)
+		$CURPID = 2 ;set process to 2
+		;==============reconize=================
+		;=======================rpys==========================start
+		;SLEEP(300)
+		;Local $tags = @extended
+
+	;	$tags = $oIE.document.GetElementsByTagName("DIV")
+		Local $text_s = _tl1($ie_all_div)
+		
+		;Local $tmp = ""
+		;For $tag In $ie_all_div
+			; $class_value = $tag.GetAttribute("class")
+		;	$class_value = $tag.className
+		;	If  StringInStr($class_value,"zwlitext stockcodec") Then
+							ConsoleWrite($text_s& @CRLF) 	
+			;EndIf
+		;Next
+		;$TXTDATA = StringStripWS(HTML_Filters($text_s, 0), 8)
+$TXTDATA =HTML_Filters($text_s, 0)
+
+		;WRITE CHECK URL
+
+		FileWriteLine(@ScriptDir & "\data.txt", $TXTDATA & "end/////----" & @CRLF & "-----" & @CRLF)
+
+		Local $TXTDATA = ""
+
+	Next
+GUICtrlSetData($edit1 ,$TXTDATA)
+	;endCollectt rply
+	$data = "" ;restore data
+	;===============================================
+	$CURPID = 0
+EndFunc
+
+Func _tc1($ie_all_span)
+	Local $tmp = ""
+	For $span In $ie_all_span
+		If StringInStr($span.classname, "tc1") Then
+			$tmp = $tmp & $span.innertext & "_"
+		EndIf
+Next
+	Return $tmp
+EndFunc   ;==>_tc1
+
+Func instr($oIE)
+	Global $ie_all_div = $oIE.document.GetElementsByTagName("DIV")
+	Global $ie_all_span = $oIE.document.GetElementsByTagName("SPAN")
+EndFunc   ;==>instr
+
+
+
+
+func _tl1($ie_all_div)   ;数组中搜索标签
+	local $tmp=""
+	For    $div IN $ie_all_div
+if StringInStr($div.className,"zwlitext stockcodec") then 
+$tmp=$tmp&$div.innertext&"_"
+endif
+Next
+return $tmp
+endfunc
+
+
+	Func _sp1($ie_all_span)
+	Local $tmp = ""
+	For $span In $ie_all_span
+		If StringInStr($span.classname, "sumpage") Then
+			$tmp =$span.innertext 
+		EndIf
+Next
+	Return $tmp
+;MsgBox($MB_SYSTEMMODAL, "标题", "元素在span.classname"&$tmp, 1)
+EndFunc   ;==>