Advertisement
Guest User

PoliFix 2.0.7 - SourceCode on AutoIt

a guest
May 1st, 2013
1,018
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 259.66 KB | None | 0 0
  1. ; Article: http://pilaresdelcodigo.wordpress.com/2013/05/01/polifix-2-0-7-y-su-codigo-fuente/
  2. ; Executable: http://www.infospyware.com/antimalware/polifix/
  3. ; Downoad: http://www1.datafilehost.com/d/0a81e70f
  4.  
  5. #NoTrayIcon
  6. #RequireAdmin
  7. #region
  8. #AutoIt3Wrapper_Icon=icono.ico
  9. #AutoIt3Wrapper_Res_Comment=PoliFix
  10. #AutoIt3Wrapper_Res_Description=Eliminar Virus de la Policia (Rasonware)
  11. #AutoIt3Wrapper_Res_Fileversion=2.0.7.0
  12. #AutoIt3Wrapper_Res_LegalCopyright=2011-2012
  13. #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
  14. #endregion
  15. Global Const $BS_GROUPBOX = 7
  16. Global Const $BS_BOTTOM = 2048
  17. Global Const $BS_CENTER = 768
  18. Global Const $BS_DEFPUSHBUTTON = 1
  19. Global Const $BS_LEFT = 256
  20. Global Const $BS_MULTILINE = 8192
  21. Global Const $BS_PUSHBOX = 10
  22. Global Const $BS_PUSHLIKE = 4096
  23. Global Const $BS_RIGHT = 512
  24. Global Const $BS_RIGHTBUTTON = 32
  25. Global Const $BS_TOP = 1024
  26. Global Const $BS_VCENTER = 3072
  27. Global Const $BS_FLAT = 32768
  28. Global Const $BS_ICON = 64
  29. Global Const $BS_BITMAP = 128
  30. Global Const $BS_NOTIFY = 16384
  31. Global Const $BS_SPLITBUTTON = 12
  32. Global Const $BS_DEFSPLITBUTTON = 13
  33. Global Const $BS_COMMANDLINK = 14
  34. Global Const $BS_DEFCOMMANDLINK = 15
  35. Global Const $BCSIF_GLYPH = 1
  36. Global Const $BCSIF_IMAGE = 2
  37. Global Const $BCSIF_STYLE = 4
  38. Global Const $BCSIF_SIZE = 8
  39. Global Const $BCSS_NOSPLIT = 1
  40. Global Const $BCSS_STRETCH = 2
  41. Global Const $BCSS_ALIGNLEFT = 4
  42. Global Const $BCSS_IMAGE = 8
  43. Global Const $BUTTON_IMAGELIST_ALIGN_LEFT = 0
  44. Global Const $BUTTON_IMAGELIST_ALIGN_RIGHT = 1
  45. Global Const $BUTTON_IMAGELIST_ALIGN_TOP = 2
  46. Global Const $BUTTON_IMAGELIST_ALIGN_BOTTOM = 3
  47. Global Const $BUTTON_IMAGELIST_ALIGN_CENTER = 4
  48. Global Const $BS_3STATE = 5
  49. Global Const $BS_AUTO3STATE = 6
  50. Global Const $BS_AUTOCHECKBOX = 3
  51. Global Const $BS_CHECKBOX = 2
  52. Global Const $BS_RADIOBUTTON = 4
  53. Global Const $BS_AUTORADIOBUTTON = 9
  54. Global Const $BS_OWNERDRAW = 11
  55. Global Const $GUI_SS_DEFAULT_BUTTON = 0
  56. Global Const $GUI_SS_DEFAULT_CHECKBOX = 0
  57. Global Const $GUI_SS_DEFAULT_GROUP = 0
  58. Global Const $GUI_SS_DEFAULT_RADIO = 0
  59. Global Const $BCM_FIRST = 5632
  60. Global Const $BCM_GETIDEALSIZE = ($BCM_FIRST + 1)
  61. Global Const $BCM_GETIMAGELIST = ($BCM_FIRST + 3)
  62. Global Const $BCM_GETNOTE = ($BCM_FIRST + 10)
  63. Global Const $BCM_GETNOTELENGTH = ($BCM_FIRST + 11)
  64. Global Const $BCM_GETSPLITINFO = ($BCM_FIRST + 8)
  65. Global Const $BCM_GETTEXTMARGIN = ($BCM_FIRST + 5)
  66. Global Const $BCM_SETDROPDOWNSTATE = ($BCM_FIRST + 6)
  67. Global Const $BCM_SETIMAGELIST = ($BCM_FIRST + 2)
  68. Global Const $BCM_SETNOTE = ($BCM_FIRST + 9)
  69. Global Const $BCM_SETSHIELD = ($BCM_FIRST + 12)
  70. Global Const $BCM_SETSPLITINFO = ($BCM_FIRST + 7)
  71. Global Const $BCM_SETTEXTMARGIN = ($BCM_FIRST + 4)
  72. Global Const $BM_CLICK = 245
  73. Global Const $BM_GETCHECK = 240
  74. Global Const $BM_GETIMAGE = 246
  75. Global Const $BM_GETSTATE = 242
  76. Global Const $BM_SETCHECK = 241
  77. Global Const $BM_SETDONTCLICK = 248
  78. Global Const $BM_SETIMAGE = 247
  79. Global Const $BM_SETSTATE = 243
  80. Global Const $BM_SETSTYLE = 244
  81. Global Const $BCN_FIRST = -1250
  82. Global Const $BCN_DROPDOWN = ($BCN_FIRST + 2)
  83. Global Const $BCN_HOTITEMCHANGE = ($BCN_FIRST + 1)
  84. Global Const $BN_CLICKED = 0
  85. Global Const $BN_PAINT = 1
  86. Global Const $BN_HILITE = 2
  87. Global Const $BN_UNHILITE = 3
  88. Global Const $BN_DISABLE = 4
  89. Global Const $BN_DOUBLECLICKED = 5
  90. Global Const $BN_SETFOCUS = 6
  91. Global Const $BN_KILLFOCUS = 7
  92. Global Const $BN_PUSHED = $BN_HILITE
  93. Global Const $BN_UNPUSHED = $BN_UNHILITE
  94. Global Const $BN_DBLCLK = $BN_DOUBLECLICKED
  95. Global Const $BST_CHECKED = 1
  96. Global Const $BST_INDETERMINATE = 2
  97. Global Const $BST_UNCHECKED = 0
  98. Global Const $BST_FOCUS = 8
  99. Global Const $BST_PUSHED = 4
  100. Global Const $BST_DONTCLICK = 128
  101. Global Const $GUI_EVENT_CLOSE = -3
  102. Global Const $GUI_EVENT_MINIMIZE = -4
  103. Global Const $GUI_EVENT_RESTORE = -5
  104. Global Const $GUI_EVENT_MAXIMIZE = -6
  105. Global Const $GUI_EVENT_PRIMARYDOWN = -7
  106. Global Const $GUI_EVENT_PRIMARYUP = -8
  107. Global Const $GUI_EVENT_SECONDARYDOWN = -9
  108. Global Const $GUI_EVENT_SECONDARYUP = -10
  109. Global Const $GUI_EVENT_MOUSEMOVE = -11
  110. Global Const $GUI_EVENT_RESIZED = -12
  111. Global Const $GUI_EVENT_DROPPED = -13
  112. Global Const $GUI_RUNDEFMSG = "GUI_RUNDEFMSG"
  113. Global Const $GUI_AVISTOP = 0
  114. Global Const $GUI_AVISTART = 1
  115. Global Const $GUI_AVICLOSE = 2
  116. Global Const $GUI_CHECKED = 1
  117. Global Const $GUI_INDETERMINATE = 2
  118. Global Const $GUI_UNCHECKED = 4
  119. Global Const $GUI_DROPACCEPTED = 8
  120. Global Const $GUI_NODROPACCEPTED = 4096
  121. Global Const $GUI_ACCEPTFILES = $GUI_DROPACCEPTED
  122. Global Const $GUI_SHOW = 16
  123. Global Const $GUI_HIDE = 32
  124. Global Const $GUI_ENABLE = 64
  125. Global Const $GUI_DISABLE = 128
  126. Global Const $GUI_FOCUS = 256
  127. Global Const $GUI_NOFOCUS = 8192
  128. Global Const $GUI_DEFBUTTON = 512
  129. Global Const $GUI_EXPAND = 1024
  130. Global Const $GUI_ONTOP = 2048
  131. Global Const $GUI_FONTITALIC = 2
  132. Global Const $GUI_FONTUNDER = 4
  133. Global Const $GUI_FONTSTRIKE = 8
  134. Global Const $GUI_DOCKAUTO = 1
  135. Global Const $GUI_DOCKLEFT = 2
  136. Global Const $GUI_DOCKRIGHT = 4
  137. Global Const $GUI_DOCKHCENTER = 8
  138. Global Const $GUI_DOCKTOP = 32
  139. Global Const $GUI_DOCKBOTTOM = 64
  140. Global Const $GUI_DOCKVCENTER = 128
  141. Global Const $GUI_DOCKWIDTH = 256
  142. Global Const $GUI_DOCKHEIGHT = 512
  143. Global Const $GUI_DOCKSIZE = 768
  144. Global Const $GUI_DOCKMENUBAR = 544
  145. Global Const $GUI_DOCKSTATEBAR = 576
  146. Global Const $GUI_DOCKALL = 802
  147. Global Const $GUI_DOCKBORDERS = 102
  148. Global Const $GUI_GR_CLOSE = 1
  149. Global Const $GUI_GR_LINE = 2
  150. Global Const $GUI_GR_BEZIER = 4
  151. Global Const $GUI_GR_MOVE = 6
  152. Global Const $GUI_GR_COLOR = 8
  153. Global Const $GUI_GR_RECT = 10
  154. Global Const $GUI_GR_ELLIPSE = 12
  155. Global Const $GUI_GR_PIE = 14
  156. Global Const $GUI_GR_DOT = 16
  157. Global Const $GUI_GR_PIXEL = 18
  158. Global Const $GUI_GR_HINT = 20
  159. Global Const $GUI_GR_REFRESH = 22
  160. Global Const $GUI_GR_PENSIZE = 24
  161. Global Const $GUI_GR_NOBKCOLOR = -2
  162. Global Const $GUI_BKCOLOR_DEFAULT = -1
  163. Global Const $GUI_BKCOLOR_TRANSPARENT = -2
  164. Global Const $GUI_BKCOLOR_LV_ALTERNATE = -33554432
  165. Global Const $GUI_WS_EX_PARENTDRAG = 1048576
  166. Global Const $PBS_MARQUEE = 8
  167. Global Const $PBS_SMOOTH = 1
  168. Global Const $PBS_SMOOTHREVERSE = 16
  169. Global Const $PBS_VERTICAL = 4
  170. Global Const $GUI_SS_DEFAULT_PROGRESS = 0
  171. Global Const $__PROGRESSBARCONSTANT_WM_USER = 1024
  172. Global Const $PBM_DELTAPOS = $__PROGRESSBARCONSTANT_WM_USER + 3
  173. Global Const $PBM_GETBARCOLOR = 1039
  174. Global Const $PBM_GETBKCOLOR = 1038
  175. Global Const $PBM_GETPOS = $__PROGRESSBARCONSTANT_WM_USER + 8
  176. Global Const $PBM_GETRANGE = $__PROGRESSBARCONSTANT_WM_USER + 7
  177. Global Const $PBM_GETSTATE = 1041
  178. Global Const $PBM_GETSTEP = 1037
  179. Global Const $PBM_SETBARCOLOR = $__PROGRESSBARCONSTANT_WM_USER + 9
  180. Global Const $PBM_SETBKCOLOR = 8192 + 1
  181. Global Const $PBM_SETMARQUEE = $__PROGRESSBARCONSTANT_WM_USER + 10
  182. Global Const $PBM_SETPOS = $__PROGRESSBARCONSTANT_WM_USER + 2
  183. Global Const $PBM_SETRANGE = $__PROGRESSBARCONSTANT_WM_USER + 1
  184. Global Const $PBM_SETRANGE32 = $__PROGRESSBARCONSTANT_WM_USER + 6
  185. Global Const $PBM_SETSTATE = 1040
  186. Global Const $PBM_SETSTEP = $__PROGRESSBARCONSTANT_WM_USER + 4
  187. Global Const $PBM_STEPIT = $__PROGRESSBARCONSTANT_WM_USER + 5
  188. Global Const $SS_LEFT = 0
  189. Global Const $SS_CENTER = 1
  190. Global Const $SS_RIGHT = 2
  191. Global Const $SS_ICON = 3
  192. Global Const $SS_BLACKRECT = 4
  193. Global Const $SS_GRAYRECT = 5
  194. Global Const $SS_WHITERECT = 6
  195. Global Const $SS_BLACKFRAME = 7
  196. Global Const $SS_GRAYFRAME = 8
  197. Global Const $SS_WHITEFRAME = 9
  198. Global Const $SS_SIMPLE = 11
  199. Global Const $SS_LEFTNOWORDWRAP = 12
  200. Global Const $SS_BITMAP = 14
  201. Global Const $SS_ETCHEDHORZ = 16
  202. Global Const $SS_ETCHEDVERT = 17
  203. Global Const $SS_ETCHEDFRAME = 18
  204. Global Const $SS_NOPREFIX = 128
  205. Global Const $SS_NOTIFY = 256
  206. Global Const $SS_CENTERIMAGE = 512
  207. Global Const $SS_RIGHTJUST = 1024
  208. Global Const $SS_SUNKEN = 4096
  209. Global Const $GUI_SS_DEFAULT_LABEL = 0
  210. Global Const $GUI_SS_DEFAULT_GRAPHIC = 0
  211. Global Const $GUI_SS_DEFAULT_ICON = $SS_NOTIFY
  212. Global Const $GUI_SS_DEFAULT_PIC = $SS_NOTIFY
  213. Global Const $WS_TILED = 0
  214. Global Const $WS_OVERLAPPED = 0
  215. Global Const $WS_MAXIMIZEBOX = 65536
  216. Global Const $WS_MINIMIZEBOX = 131072
  217. Global Const $WS_TABSTOP = 65536
  218. Global Const $WS_GROUP = 131072
  219. Global Const $WS_SIZEBOX = 262144
  220. Global Const $WS_THICKFRAME = 262144
  221. Global Const $WS_SYSMENU = 524288
  222. Global Const $WS_HSCROLL = 1048576
  223. Global Const $WS_VSCROLL = 2097152
  224. Global Const $WS_DLGFRAME = 4194304
  225. Global Const $WS_BORDER = 8388608
  226. Global Const $WS_CAPTION = 12582912
  227. Global Const $WS_OVERLAPPEDWINDOW = 13565952
  228. Global Const $WS_TILEDWINDOW = 13565952
  229. Global Const $WS_MAXIMIZE = 16777216
  230. Global Const $WS_CLIPCHILDREN = 33554432
  231. Global Const $WS_CLIPSIBLINGS = 67108864
  232. Global Const $WS_DISABLED = 134217728
  233. Global Const $WS_VISIBLE = 268435456
  234. Global Const $WS_MINIMIZE = 536870912
  235. Global Const $WS_CHILD = 1073741824
  236. Global Const $WS_POPUP = -2147483648
  237. Global Const $WS_POPUPWINDOW = -2138570752
  238. Global Const $DS_MODALFRAME = 128
  239. Global Const $DS_SETFOREGROUND = 512
  240. Global Const $DS_CONTEXTHELP = 8192
  241. Global Const $WS_EX_ACCEPTFILES = 16
  242. Global Const $WS_EX_MDICHILD = 64
  243. Global Const $WS_EX_APPWINDOW = 262144
  244. Global Const $WS_EX_COMPOSITED = 33554432
  245. Global Const $WS_EX_CLIENTEDGE = 512
  246. Global Const $WS_EX_CONTEXTHELP = 1024
  247. Global Const $WS_EX_DLGMODALFRAME = 1
  248. Global Const $WS_EX_LEFTSCROLLBAR = 16384
  249. Global Const $WS_EX_OVERLAPPEDWINDOW = 768
  250. Global Const $WS_EX_RIGHT = 4096
  251. Global Const $WS_EX_STATICEDGE = 131072
  252. Global Const $WS_EX_TOOLWINDOW = 128
  253. Global Const $WS_EX_TOPMOST = 8
  254. Global Const $WS_EX_TRANSPARENT = 32
  255. Global Const $WS_EX_WINDOWEDGE = 256
  256. Global Const $WS_EX_LAYERED = 524288
  257. Global Const $WS_EX_CONTROLPARENT = 65536
  258. Global Const $WS_EX_LAYOUTRTL = 4194304
  259. Global Const $WS_EX_RTLREADING = 8192
  260. Global Const $WM_GETTEXTLENGTH = 14
  261. Global Const $WM_GETTEXT = 13
  262. Global Const $WM_SIZE = 5
  263. Global Const $WM_SIZING = 532
  264. Global Const $WM_USER = 1024
  265. Global Const $WM_CREATE = 1
  266. Global Const $WM_DESTROY = 2
  267. Global Const $WM_MOVE = 3
  268. Global Const $WM_ACTIVATE = 6
  269. Global Const $WM_SETFOCUS = 7
  270. Global Const $WM_KILLFOCUS = 8
  271. Global Const $WM_ENABLE = 10
  272. Global Const $WM_SETREDRAW = 11
  273. Global Const $WM_SETTEXT = 12
  274. Global Const $WM_PAINT = 15
  275. Global Const $WM_CLOSE = 16
  276. Global Const $WM_QUERYENDSESSION = 17
  277. Global Const $WM_QUIT = 18
  278. Global Const $WM_ERASEBKGND = 20
  279. Global Const $WM_QUERYOPEN = 19
  280. Global Const $WM_SYSCOLORCHANGE = 21
  281. Global Const $WM_ENDSESSION = 22
  282. Global Const $WM_SHOWWINDOW = 24
  283. Global Const $WM_SETTINGCHANGE = 26
  284. Global Const $WM_WININICHANGE = 26
  285. Global Const $WM_DEVMODECHANGE = 27
  286. Global Const $WM_ACTIVATEAPP = 28
  287. Global Const $WM_FONTCHANGE = 29
  288. Global Const $WM_TIMECHANGE = 30
  289. Global Const $WM_CANCELMODE = 31
  290. Global Const $WM_IME_STARTCOMPOSITION = 269
  291. Global Const $WM_IME_ENDCOMPOSITION = 270
  292. Global Const $WM_IME_COMPOSITION = 271
  293. Global Const $WM_IME_KEYLAST = 271
  294. Global Const $WM_SETCURSOR = 32
  295. Global Const $WM_MOUSEACTIVATE = 33
  296. Global Const $WM_CHILDACTIVATE = 34
  297. Global Const $WM_QUEUESYNC = 35
  298. Global Const $WM_GETMINMAXINFO = 36
  299. Global Const $WM_PAINTICON = 38
  300. Global Const $WM_ICONERASEBKGND = 39
  301. Global Const $WM_NEXTDLGCTL = 40
  302. Global Const $WM_SPOOLERSTATUS = 42
  303. Global Const $WM_DRAWITEM = 43
  304. Global Const $WM_MEASUREITEM = 44
  305. Global Const $WM_DELETEITEM = 45
  306. Global Const $WM_VKEYTOITEM = 46
  307. Global Const $WM_CHARTOITEM = 47
  308. Global Const $WM_SETFONT = 48
  309. Global Const $WM_GETFONT = 49
  310. Global Const $WM_SETHOTKEY = 50
  311. Global Const $WM_GETHOTKEY = 51
  312. Global Const $WM_QUERYDRAGICON = 55
  313. Global Const $WM_COMPAREITEM = 57
  314. Global Const $WM_GETOBJECT = 61
  315. Global Const $WM_COMPACTING = 65
  316. Global Const $WM_COMMNOTIFY = 68
  317. Global Const $WM_WINDOWPOSCHANGING = 70
  318. Global Const $WM_WINDOWPOSCHANGED = 71
  319. Global Const $WM_POWER = 72
  320. Global Const $WM_NOTIFY = 78
  321. Global Const $WM_COPYDATA = 74
  322. Global Const $WM_CANCELJOURNAL = 75
  323. Global Const $WM_INPUTLANGCHANGEREQUEST = 80
  324. Global Const $WM_INPUTLANGCHANGE = 81
  325. Global Const $WM_TCARD = 82
  326. Global Const $WM_HELP = 83
  327. Global Const $WM_USERCHANGED = 84
  328. Global Const $WM_NOTIFYFORMAT = 85
  329. Global Const $WM_PARENTNOTIFY = 528
  330. Global Const $WM_ENTERMENULOOP = 529
  331. Global Const $WM_EXITMENULOOP = 530
  332. Global Const $WM_NEXTMENU = 531
  333. Global Const $WM_CAPTURECHANGED = 533
  334. Global Const $WM_MOVING = 534
  335. Global Const $WM_POWERBROADCAST = 536
  336. Global Const $WM_DEVICECHANGE = 537
  337. Global Const $WM_MDICREATE = 544
  338. Global Const $WM_MDIDESTROY = 545
  339. Global Const $WM_MDIACTIVATE = 546
  340. Global Const $WM_MDIRESTORE = 547
  341. Global Const $WM_MDINEXT = 548
  342. Global Const $WM_MDIMAXIMIZE = 549
  343. Global Const $WM_MDITILE = 550
  344. Global Const $WM_MDICASCADE = 551
  345. Global Const $WM_MDIICONARRANGE = 552
  346. Global Const $WM_MDIGETACTIVE = 553
  347. Global Const $WM_MDISETMENU = 560
  348. Global Const $WM_ENTERSIZEMOVE = 561
  349. Global Const $WM_EXITSIZEMOVE = 562
  350. Global Const $WM_DROPFILES = 563
  351. Global Const $WM_MDIREFRESHMENU = 564
  352. Global Const $WM_IME_SETCONTEXT = 641
  353. Global Const $WM_IME_NOTIFY = 642
  354. Global Const $WM_IME_CONTROL = 643
  355. Global Const $WM_IME_COMPOSITIONFULL = 644
  356. Global Const $WM_IME_SELECT = 645
  357. Global Const $WM_IME_CHAR = 646
  358. Global Const $WM_IME_REQUEST = 648
  359. Global Const $WM_IME_KEYDOWN = 656
  360. Global Const $WM_IME_KEYUP = 657
  361. Global Const $WM_NCMOUSEHOVER = 672
  362. Global Const $WM_MOUSEHOVER = 673
  363. Global Const $WM_NCMOUSELEAVE = 674
  364. Global Const $WM_MOUSELEAVE = 675
  365. Global Const $WM_WTSSESSION_CHANGE = 689
  366. Global Const $WM_TABLET_FIRST = 704
  367. Global Const $WM_TABLET_LAST = 735
  368. Global Const $WM_CUT = 768
  369. Global Const $WM_COPY = 769
  370. Global Const $WM_PASTE = 770
  371. Global Const $WM_CLEAR = 771
  372. Global Const $WM_UNDO = 772
  373. Global Const $WM_PALETTEISCHANGING = 784
  374. Global Const $WM_HOTKEY = 786
  375. Global Const $WM_PALETTECHANGED = 785
  376. Global Const $WM_PRINT = 791
  377. Global Const $WM_PRINTCLIENT = 792
  378. Global Const $WM_APPCOMMAND = 793
  379. Global Const $WM_QUERYNEWPALETTE = 783
  380. Global Const $WM_THEMECHANGED = 794
  381. Global Const $WM_HANDHELDFIRST = 856
  382. Global Const $WM_HANDHELDLAST = 863
  383. Global Const $WM_AFXFIRST = 864
  384. Global Const $WM_AFXLAST = 895
  385. Global Const $WM_PENWINFIRST = 896
  386. Global Const $WM_PENWINLAST = 911
  387. Global Const $WM_CONTEXTMENU = 123
  388. Global Const $WM_STYLECHANGING = 124
  389. Global Const $WM_STYLECHANGED = 125
  390. Global Const $WM_DISPLAYCHANGE = 126
  391. Global Const $WM_GETICON = 127
  392. Global Const $WM_SETICON = 128
  393. Global Const $WM_NCCREATE = 129
  394. Global Const $WM_NCDESTROY = 130
  395. Global Const $WM_NCCALCSIZE = 131
  396. Global Const $WM_NCHITTEST = 132
  397. Global Const $WM_NCPAINT = 133
  398. Global Const $WM_NCACTIVATE = 134
  399. Global Const $WM_GETDLGCODE = 135
  400. Global Const $WM_SYNCPAINT = 136
  401. Global Const $WM_NCMOUSEMOVE = 160
  402. Global Const $WM_NCLBUTTONDOWN = 161
  403. Global Const $WM_NCLBUTTONUP = 162
  404. Global Const $WM_NCLBUTTONDBLCLK = 163
  405. Global Const $WM_NCRBUTTONDOWN = 164
  406. Global Const $WM_NCRBUTTONUP = 165
  407. Global Const $WM_NCRBUTTONDBLCLK = 166
  408. Global Const $WM_NCMBUTTONDOWN = 167
  409. Global Const $WM_NCMBUTTONUP = 168
  410. Global Const $WM_NCMBUTTONDBLCLK = 169
  411. Global Const $WM_NCXBUTTONDOWN = 171
  412. Global Const $WM_NCXBUTTONUP = 172
  413. Global Const $WM_NCXBUTTONDBLCLK = 173
  414. Global Const $WM_KEYDOWN = 256
  415. Global Const $WM_KEYFIRST = 256
  416. Global Const $WM_KEYUP = 257
  417. Global Const $WM_CHAR = 258
  418. Global Const $WM_DEADCHAR = 259
  419. Global Const $WM_SYSKEYDOWN = 260
  420. Global Const $WM_SYSKEYUP = 261
  421. Global Const $WM_SYSCHAR = 262
  422. Global Const $WM_SYSDEADCHAR = 263
  423. Global Const $WM_KEYLAST = 265
  424. Global Const $WM_UNICHAR = 265
  425. Global Const $WM_INITDIALOG = 272
  426. Global Const $WM_COMMAND = 273
  427. Global Const $WM_SYSCOMMAND = 274
  428. Global Const $WM_TIMER = 275
  429. Global Const $WM_HSCROLL = 276
  430. Global Const $WM_VSCROLL = 277
  431. Global Const $WM_INITMENU = 278
  432. Global Const $WM_INITMENUPOPUP = 279
  433. Global Const $WM_MENUSELECT = 287
  434. Global Const $WM_MENUCHAR = 288
  435. Global Const $WM_ENTERIDLE = 289
  436. Global Const $WM_MENURBUTTONUP = 290
  437. Global Const $WM_MENUDRAG = 291
  438. Global Const $WM_MENUGETOBJECT = 292
  439. Global Const $WM_UNINITMENUPOPUP = 293
  440. Global Const $WM_MENUCOMMAND = 294
  441. Global Const $WM_CHANGEUISTATE = 295
  442. Global Const $WM_UPDATEUISTATE = 296
  443. Global Const $WM_QUERYUISTATE = 297
  444. Global Const $WM_CTLCOLORMSGBOX = 306
  445. Global Const $WM_CTLCOLOREDIT = 307
  446. Global Const $WM_CTLCOLORLISTBOX = 308
  447. Global Const $WM_CTLCOLORBTN = 309
  448. Global Const $WM_CTLCOLORDLG = 310
  449. Global Const $WM_CTLCOLORSCROLLBAR = 311
  450. Global Const $WM_CTLCOLORSTATIC = 312
  451. Global Const $WM_CTLCOLOR = 25
  452. Global Const $MN_GETHMENU = 481
  453. Global Const $WM_APP = 32768
  454. Global Const $NM_FIRST = 0
  455. Global Const $NM_OUTOFMEMORY = $NM_FIRST - 1
  456. Global Const $NM_CLICK = $NM_FIRST - 2
  457. Global Const $NM_DBLCLK = $NM_FIRST - 3
  458. Global Const $NM_RETURN = $NM_FIRST - 4
  459. Global Const $NM_RCLICK = $NM_FIRST - 5
  460. Global Const $NM_RDBLCLK = $NM_FIRST - 6
  461. Global Const $NM_SETFOCUS = $NM_FIRST - 7
  462. Global Const $NM_KILLFOCUS = $NM_FIRST - 8
  463. Global Const $NM_CUSTOMDRAW = $NM_FIRST - 12
  464. Global Const $NM_HOVER = $NM_FIRST - 13
  465. Global Const $NM_NCHITTEST = $NM_FIRST - 14
  466. Global Const $NM_KEYDOWN = $NM_FIRST - 15
  467. Global Const $NM_RELEASEDCAPTURE = $NM_FIRST - 16
  468. Global Const $NM_SETCURSOR = $NM_FIRST - 17
  469. Global Const $NM_CHAR = $NM_FIRST - 18
  470. Global Const $NM_TOOLTIPSCREATED = $NM_FIRST - 19
  471. Global Const $NM_LDOWN = $NM_FIRST - 20
  472. Global Const $NM_RDOWN = $NM_FIRST - 21
  473. Global Const $NM_THEMECHANGED = $NM_FIRST - 22
  474. Global Const $WM_MOUSEFIRST = 512
  475. Global Const $WM_MOUSEMOVE = 512
  476. Global Const $WM_LBUTTONDOWN = 513
  477. Global Const $WM_LBUTTONUP = 514
  478. Global Const $WM_LBUTTONDBLCLK = 515
  479. Global Const $WM_RBUTTONDOWN = 516
  480. Global Const $WM_RBUTTONUP = 517
  481. Global Const $WM_RBUTTONDBLCLK = 518
  482. Global Const $WM_MBUTTONDOWN = 519
  483. Global Const $WM_MBUTTONUP = 520
  484. Global Const $WM_MBUTTONDBLCLK = 521
  485. Global Const $WM_MOUSEWHEEL = 522
  486. Global Const $WM_XBUTTONDOWN = 523
  487. Global Const $WM_XBUTTONUP = 524
  488. Global Const $WM_XBUTTONDBLCLK = 525
  489. Global Const $WM_MOUSEHWHEEL = 526
  490. Global Const $PS_SOLID = 0
  491. Global Const $PS_DASH = 1
  492. Global Const $PS_DOT = 2
  493. Global Const $PS_DASHDOT = 3
  494. Global Const $PS_DASHDOTDOT = 4
  495. Global Const $PS_NULL = 5
  496. Global Const $PS_INSIDEFRAME = 6
  497. Global Const $LWA_ALPHA = 2
  498. Global Const $LWA_COLORKEY = 1
  499. Global Const $RGN_AND = 1
  500. Global Const $RGN_OR = 2
  501. Global Const $RGN_XOR = 3
  502. Global Const $RGN_DIFF = 4
  503. Global Const $RGN_COPY = 5
  504. Global Const $ERRORREGION = 0
  505. Global Const $NULLREGION = 1
  506. Global Const $SIMPLEREGION = 2
  507. Global Const $COMPLEXREGION = 3
  508. Global Const $TRANSPARENT = 1
  509. Global Const $OPAQUE = 2
  510. Global Const $CCM_FIRST = 8192
  511. Global Const $CCM_GETUNICODEFORMAT = ($CCM_FIRST + 6)
  512. Global Const $CCM_SETUNICODEFORMAT = ($CCM_FIRST + 5)
  513. Global Const $CCM_SETBKCOLOR = $CCM_FIRST + 1
  514. Global Const $CCM_SETCOLORSCHEME = $CCM_FIRST + 2
  515. Global Const $CCM_GETCOLORSCHEME = $CCM_FIRST + 3
  516. Global Const $CCM_GETDROPTARGET = $CCM_FIRST + 4
  517. Global Const $CCM_SETWINDOWTHEME = $CCM_FIRST + 11
  518. Global Const $GA_PARENT = 1
  519. Global Const $GA_ROOT = 2
  520. Global Const $GA_ROOTOWNER = 3
  521. Global Const $SM_CXSCREEN = 0
  522. Global Const $SM_CYSCREEN = 1
  523. Global Const $SM_CXVSCROLL = 2
  524. Global Const $SM_CYHSCROLL = 3
  525. Global Const $SM_CYCAPTION = 4
  526. Global Const $SM_CXBORDER = 5
  527. Global Const $SM_CYBORDER = 6
  528. Global Const $SM_CXDLGFRAME = 7
  529. Global Const $SM_CYDLGFRAME = 8
  530. Global Const $SM_CYVTHUMB = 9
  531. Global Const $SM_CXHTHUMB = 10
  532. Global Const $SM_CXICON = 11
  533. Global Const $SM_CYICON = 12
  534. Global Const $SM_CXCURSOR = 13
  535. Global Const $SM_CYCURSOR = 14
  536. Global Const $SM_CYMENU = 15
  537. Global Const $SM_CXFULLSCREEN = 16
  538. Global Const $SM_CYFULLSCREEN = 17
  539. Global Const $SM_CYKANJIWINDOW = 18
  540. Global Const $SM_MOUSEPRESENT = 19
  541. Global Const $SM_CYVSCROLL = 20
  542. Global Const $SM_CXHSCROLL = 21
  543. Global Const $SM_DEBUG = 22
  544. Global Const $SM_SWAPBUTTON = 23
  545. Global Const $SM_RESERVED1 = 24
  546. Global Const $SM_RESERVED2 = 25
  547. Global Const $SM_RESERVED3 = 26
  548. Global Const $SM_RESERVED4 = 27
  549. Global Const $SM_CXMIN = 28
  550. Global Const $SM_CYMIN = 29
  551. Global Const $SM_CXSIZE = 30
  552. Global Const $SM_CYSIZE = 31
  553. Global Const $SM_CXFRAME = 32
  554. Global Const $SM_CYFRAME = 33
  555. Global Const $SM_CXMINTRACK = 34
  556. Global Const $SM_CYMINTRACK = 35
  557. Global Const $SM_CXDOUBLECLK = 36
  558. Global Const $SM_CYDOUBLECLK = 37
  559. Global Const $SM_CXICONSPACING = 38
  560. Global Const $SM_CYICONSPACING = 39
  561. Global Const $SM_MENUDROPALIGNMENT = 40
  562. Global Const $SM_PENWINDOWS = 41
  563. Global Const $SM_DBCSENABLED = 42
  564. Global Const $SM_CMOUSEBUTTONS = 43
  565. Global Const $SM_SECURE = 44
  566. Global Const $SM_CXEDGE = 45
  567. Global Const $SM_CYEDGE = 46
  568. Global Const $SM_CXMINSPACING = 47
  569. Global Const $SM_CYMINSPACING = 48
  570. Global Const $SM_CXSMICON = 49
  571. Global Const $SM_CYSMICON = 50
  572. Global Const $SM_CYSMCAPTION = 51
  573. Global Const $SM_CXSMSIZE = 52
  574. Global Const $SM_CYSMSIZE = 53
  575. Global Const $SM_CXMENUSIZE = 54
  576. Global Const $SM_CYMENUSIZE = 55
  577. Global Const $SM_ARRANGE = 56
  578. Global Const $SM_CXMINIMIZED = 57
  579. Global Const $SM_CYMINIMIZED = 58
  580. Global Const $SM_CXMAXTRACK = 59
  581. Global Const $SM_CYMAXTRACK = 60
  582. Global Const $SM_CXMAXIMIZED = 61
  583. Global Const $SM_CYMAXIMIZED = 62
  584. Global Const $SM_NETWORK = 63
  585. Global Const $SM_CLEANBOOT = 67
  586. Global Const $SM_CXDRAG = 68
  587. Global Const $SM_CYDRAG = 69
  588. Global Const $SM_SHOWSOUNDS = 70
  589. Global Const $SM_CXMENUCHECK = 71
  590. Global Const $SM_CYMENUCHECK = 72
  591. Global Const $SM_SLOWMACHINE = 73
  592. Global Const $SM_MIDEASTENABLED = 74
  593. Global Const $SM_MOUSEWHEELPRESENT = 75
  594. Global Const $SM_XVIRTUALSCREEN = 76
  595. Global Const $SM_YVIRTUALSCREEN = 77
  596. Global Const $SM_CXVIRTUALSCREEN = 78
  597. Global Const $SM_CYVIRTUALSCREEN = 79
  598. Global Const $SM_CMONITORS = 80
  599. Global Const $SM_SAMEDISPLAYFORMAT = 81
  600. Global Const $SM_IMMENABLED = 82
  601. Global Const $SM_CXFOCUSBORDER = 83
  602. Global Const $SM_CYFOCUSBORDER = 84
  603. Global Const $SM_TABLETPC = 86
  604. Global Const $SM_MEDIACENTER = 87
  605. Global Const $SM_STARTER = 88
  606. Global Const $SM_SERVERR2 = 89
  607. Global Const $SM_CMETRICS = 90
  608. Global Const $SM_REMOTESESSION = 4096
  609. Global Const $SM_SHUTTINGDOWN = 8192
  610. Global Const $SM_REMOTECONTROL = 8193
  611. Global Const $SM_CARETBLINKINGENABLED = 8194
  612. Global Const $BLACKNESS = 66
  613. Global Const $CAPTUREBLT = 1073741824
  614. Global Const $DSTINVERT = 5570569
  615. Global Const $MERGECOPY = 12583114
  616. Global Const $MERGEPAINT = 12255782
  617. Global Const $NOMIRRORBITMAP = -2147483648
  618. Global Const $NOTSRCCOPY = 3342344
  619. Global Const $NOTSRCERASE = 1114278
  620. Global Const $PATCOPY = 15728673
  621. Global Const $PATINVERT = 5898313
  622. Global Const $PATPAINT = 16452105
  623. Global Const $SRCAND = 8913094
  624. Global Const $SRCCOPY = 13369376
  625. Global Const $SRCERASE = 4457256
  626. Global Const $SRCINVERT = 6684742
  627. Global Const $SRCPAINT = 15597702
  628. Global Const $WHITENESS = 16711778
  629. Global Const $DT_BOTTOM = 8
  630. Global Const $DT_CALCRECT = 1024
  631. Global Const $DT_CENTER = 1
  632. Global Const $DT_EDITCONTROL = 8192
  633. Global Const $DT_END_ELLIPSIS = 32768
  634. Global Const $DT_EXPANDTABS = 64
  635. Global Const $DT_EXTERNALLEADING = 512
  636. Global Const $DT_HIDEPREFIX = 1048576
  637. Global Const $DT_INTERNAL = 4096
  638. Global Const $DT_LEFT = 0
  639. Global Const $DT_MODIFYSTRING = 65536
  640. Global Const $DT_NOCLIP = 256
  641. Global Const $DT_NOFULLWIDTHCHARBREAK = 524288
  642. Global Const $DT_NOPREFIX = 2048
  643. Global Const $DT_PATH_ELLIPSIS = 16384
  644. Global Const $DT_PREFIXONLY = 2097152
  645. Global Const $DT_RIGHT = 2
  646. Global Const $DT_RTLREADING = 131072
  647. Global Const $DT_SINGLELINE = 32
  648. Global Const $DT_TABSTOP = 128
  649. Global Const $DT_TOP = 0
  650. Global Const $DT_VCENTER = 4
  651. Global Const $DT_WORDBREAK = 16
  652. Global Const $DT_WORD_ELLIPSIS = 262144
  653. Global Const $RDW_ERASE = 4
  654. Global Const $RDW_FRAME = 1024
  655. Global Const $RDW_INTERNALPAINT = 2
  656. Global Const $RDW_INVALIDATE = 1
  657. Global Const $RDW_NOERASE = 32
  658. Global Const $RDW_NOFRAME = 2048
  659. Global Const $RDW_NOINTERNALPAINT = 16
  660. Global Const $RDW_VALIDATE = 8
  661. Global Const $RDW_ERASENOW = 512
  662. Global Const $RDW_UPDATENOW = 256
  663. Global Const $RDW_ALLCHILDREN = 128
  664. Global Const $RDW_NOCHILDREN = 64
  665. Global Const $WM_RENDERFORMAT = 773
  666. Global Const $WM_RENDERALLFORMATS = 774
  667. Global Const $WM_DESTROYCLIPBOARD = 775
  668. Global Const $WM_DRAWCLIPBOARD = 776
  669. Global Const $WM_PAINTCLIPBOARD = 777
  670. Global Const $WM_VSCROLLCLIPBOARD = 778
  671. Global Const $WM_SIZECLIPBOARD = 779
  672. Global Const $WM_ASKCBFORMATNAME = 780
  673. Global Const $WM_CHANGECBCHAIN = 781
  674. Global Const $WM_HSCROLLCLIPBOARD = 782
  675. Global Const $HTERROR = -2
  676. Global Const $HTTRANSPARENT = -1
  677. Global Const $HTNOWHERE = 0
  678. Global Const $HTCLIENT = 1
  679. Global Const $HTCAPTION = 2
  680. Global Const $HTSYSMENU = 3
  681. Global Const $HTGROWBOX = 4
  682. Global Const $HTSIZE = $HTGROWBOX
  683. Global Const $HTMENU = 5
  684. Global Const $HTHSCROLL = 6
  685. Global Const $HTVSCROLL = 7
  686. Global Const $HTMINBUTTON = 8
  687. Global Const $HTMAXBUTTON = 9
  688. Global Const $HTLEFT = 10
  689. Global Const $HTRIGHT = 11
  690. Global Const $HTTOP = 12
  691. Global Const $HTTOPLEFT = 13
  692. Global Const $HTTOPRIGHT = 14
  693. Global Const $HTBOTTOM = 15
  694. Global Const $HTBOTTOMLEFT = 16
  695. Global Const $HTBOTTOMRIGHT = 17
  696. Global Const $HTBORDER = 18
  697. Global Const $HTREDUCE = $HTMINBUTTON
  698. Global Const $HTZOOM = $HTMAXBUTTON
  699. Global Const $HTSIZEFIRST = $HTLEFT
  700. Global Const $HTSIZELAST = $HTBOTTOMRIGHT
  701. Global Const $HTOBJECT = 19
  702. Global Const $HTCLOSE = 20
  703. Global Const $HTHELP = 21
  704. Global Const $COLOR_SCROLLBAR = 0
  705. Global Const $COLOR_BACKGROUND = 1
  706. Global Const $COLOR_ACTIVECAPTION = 2
  707. Global Const $COLOR_INACTIVECAPTION = 3
  708. Global Const $COLOR_MENU = 4
  709. Global Const $COLOR_WINDOW = 5
  710. Global Const $COLOR_WINDOWFRAME = 6
  711. Global Const $COLOR_MENUTEXT = 7
  712. Global Const $COLOR_WINDOWTEXT = 8
  713. Global Const $COLOR_CAPTIONTEXT = 9
  714. Global Const $COLOR_ACTIVEBORDER = 10
  715. Global Const $COLOR_INACTIVEBORDER = 11
  716. Global Const $COLOR_APPWORKSPACE = 12
  717. Global Const $COLOR_HIGHLIGHT = 13
  718. Global Const $COLOR_HIGHLIGHTTEXT = 14
  719. Global Const $COLOR_BTNFACE = 15
  720. Global Const $COLOR_BTNSHADOW = 16
  721. Global Const $COLOR_GRAYTEXT = 17
  722. Global Const $COLOR_BTNTEXT = 18
  723. Global Const $COLOR_INACTIVECAPTIONTEXT = 19
  724. Global Const $COLOR_BTNHIGHLIGHT = 20
  725. Global Const $COLOR_3DDKSHADOW = 21
  726. Global Const $COLOR_3DLIGHT = 22
  727. Global Const $COLOR_INFOTEXT = 23
  728. Global Const $COLOR_INFOBK = 24
  729. Global Const $COLOR_HOTLIGHT = 26
  730. Global Const $COLOR_GRADIENTACTIVECAPTION = 27
  731. Global Const $COLOR_GRADIENTINACTIVECAPTION = 28
  732. Global Const $COLOR_MENUHILIGHT = 29
  733. Global Const $COLOR_MENUBAR = 30
  734. Global Const $COLOR_DESKTOP = 1
  735. Global Const $COLOR_3DFACE = 15
  736. Global Const $COLOR_3DSHADOW = 16
  737. Global Const $COLOR_3DHIGHLIGHT = 20
  738. Global Const $COLOR_3DHILIGHT = 20
  739. Global Const $COLOR_BTNHILIGHT = 20
  740. Global Const $HINST_COMMCTRL = -1
  741. Global Const $IDB_STD_SMALL_COLOR = 0
  742. Global Const $IDB_STD_LARGE_COLOR = 1
  743. Global Const $IDB_VIEW_SMALL_COLOR = 4
  744. Global Const $IDB_VIEW_LARGE_COLOR = 5
  745. Global Const $IDB_HIST_SMALL_COLOR = 8
  746. Global Const $IDB_HIST_LARGE_COLOR = 9
  747. Global Const $STARTF_FORCEOFFFEEDBACK = 128
  748. Global Const $STARTF_FORCEONFEEDBACK = 64
  749. Global Const $STARTF_RUNFULLSCREEN = 32
  750. Global Const $STARTF_USECOUNTCHARS = 8
  751. Global Const $STARTF_USEFILLATTRIBUTE = 16
  752. Global Const $STARTF_USEHOTKEY = 512
  753. Global Const $STARTF_USEPOSITION = 4
  754. Global Const $STARTF_USESHOWWINDOW = 1
  755. Global Const $STARTF_USESIZE = 2
  756. Global Const $STARTF_USESTDHANDLES = 256
  757. Global Const $CDDS_PREPAINT = 1
  758. Global Const $CDDS_POSTPAINT = 2
  759. Global Const $CDDS_PREERASE = 3
  760. Global Const $CDDS_POSTERASE = 4
  761. Global Const $CDDS_ITEM = 65536
  762. Global Const $CDDS_ITEMPREPAINT = 65537
  763. Global Const $CDDS_ITEMPOSTPAINT = 65538
  764. Global Const $CDDS_ITEMPREERASE = 65539
  765. Global Const $CDDS_ITEMPOSTERASE = 65540
  766. Global Const $CDDS_SUBITEM = 131072
  767. Global Const $CDIS_SELECTED = 1
  768. Global Const $CDIS_GRAYED = 2
  769. Global Const $CDIS_DISABLED = 4
  770. Global Const $CDIS_CHECKED = 8
  771. Global Const $CDIS_FOCUS = 16
  772. Global Const $CDIS_DEFAULT = 32
  773. Global Const $CDIS_HOT = 64
  774. Global Const $CDIS_MARKED = 128
  775. Global Const $CDIS_INDETERMINATE = 256
  776. Global Const $CDIS_SHOWKEYBOARDCUES = 512
  777. Global Const $CDIS_NEARHOT = 1024
  778. Global Const $CDIS_OTHERSIDEHOT = 2048
  779. Global Const $CDIS_DROPHILITED = 4096
  780. Global Const $CDRF_DODEFAULT = 0
  781. Global Const $CDRF_NEWFONT = 2
  782. Global Const $CDRF_SKIPDEFAULT = 4
  783. Global Const $CDRF_NOTIFYPOSTPAINT = 16
  784. Global Const $CDRF_NOTIFYITEMDRAW = 32
  785. Global Const $CDRF_NOTIFYSUBITEMDRAW = 32
  786. Global Const $CDRF_NOTIFYPOSTERASE = 64
  787. Global Const $CDRF_DOERASE = 8
  788. Global Const $CDRF_SKIPPOSTPAINT = 256
  789. Global Const $GUI_SS_DEFAULT_GUI = BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU)
  790. Global Const $ERROR_NO_TOKEN = 1008
  791. Global Const $SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege"
  792. Global Const $SE_AUDIT_NAME = "SeAuditPrivilege"
  793. Global Const $SE_BACKUP_NAME = "SeBackupPrivilege"
  794. Global Const $SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege"
  795. Global Const $SE_CREATE_GLOBAL_NAME = "SeCreateGlobalPrivilege"
  796. Global Const $SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege"
  797. Global Const $SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege"
  798. Global Const $SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege"
  799. Global Const $SE_DEBUG_NAME = "SeDebugPrivilege"
  800. Global Const $SE_ENABLE_DELEGATION_NAME = "SeEnableDelegationPrivilege"
  801. Global Const $SE_IMPERSONATE_NAME = "SeImpersonatePrivilege"
  802. Global Const $SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege"
  803. Global Const $SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege"
  804. Global Const $SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege"
  805. Global Const $SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege"
  806. Global Const $SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege"
  807. Global Const $SE_MANAGE_VOLUME_NAME = "SeManageVolumePrivilege"
  808. Global Const $SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege"
  809. Global Const $SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege"
  810. Global Const $SE_RESTORE_NAME = "SeRestorePrivilege"
  811. Global Const $SE_SECURITY_NAME = "SeSecurityPrivilege"
  812. Global Const $SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
  813. Global Const $SE_SYNC_AGENT_NAME = "SeSyncAgentPrivilege"
  814. Global Const $SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege"
  815. Global Const $SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege"
  816. Global Const $SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege"
  817. Global Const $SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege"
  818. Global Const $SE_TCB_NAME = "SeTcbPrivilege"
  819. Global Const $SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege"
  820. Global Const $SE_UNDOCK_NAME = "SeUndockPrivilege"
  821. Global Const $SE_PRIVILEGE_ENABLED_BY_DEFAULT = 1
  822. Global Const $SE_PRIVILEGE_ENABLED = 2
  823. Global Const $SE_PRIVILEGE_REMOVED = 4
  824. Global Const $SE_PRIVILEGE_USED_FOR_ACCESS = -2147483648
  825. Global Const $SE_GROUP_MANDATORY = 1
  826. Global Const $SE_GROUP_ENABLED_BY_DEFAULT = 2
  827. Global Const $SE_GROUP_ENABLED = 4
  828. Global Const $SE_GROUP_OWNER = 8
  829. Global Const $SE_GROUP_USE_FOR_DENY_ONLY = 16
  830. Global Const $SE_GROUP_INTEGRITY = 32
  831. Global Const $SE_GROUP_INTEGRITY_ENABLED = 64
  832. Global Const $SE_GROUP_RESOURCE = 536870912
  833. Global Const $SE_GROUP_LOGON_ID = -1073741824
  834. Global Enum $TOKENPRIMARY = 1, $TOKENIMPERSONATION
  835. Global Enum $SECURITYANONYMOUS = 0, $SECURITYIDENTIFICATION, $SECURITYIMPERSONATION, $SECURITYDELEGATION
  836. Global Enum $TOKENUSER = 1, $TOKENGROUPS, $TOKENPRIVILEGES, $TOKENOWNER, $TOKENPRIMARYGROUP, $TOKENDEFAULTDACL, $TOKENSOURCE, $TOKENTYPE, $TOKENIMPERSONATIONLEVEL, $TOKENSTATISTICS, $TOKENRESTRICTEDSIDS, $TOKENSESSIONID, $TOKENGROUPSANDPRIVILEGES, $TOKENSESSIONREFERENCE, $TOKENSANDBOXINERT, $TOKENAUDITPOLICY, $TOKENORIGIN, $TOKENELEVATIONTYPE, $TOKENLINKEDTOKEN, $TOKENELEVATION, $TOKENHASRESTRICTIONS, $TOKENACCESSINFORMATION, $TOKENVIRTUALIZATIONALLOWED, $TOKENVIRTUALIZATIONENABLED, $TOKENINTEGRITYLEVEL, $TOKENUIACCESS, $TOKENMANDATORYPOLICY, $TOKENLOGONSID
  837. Global Const $TOKEN_ASSIGN_PRIMARY = 1
  838. Global Const $TOKEN_DUPLICATE = 2
  839. Global Const $TOKEN_IMPERSONATE = 4
  840. Global Const $TOKEN_QUERY = 8
  841. Global Const $TOKEN_QUERY_SOURCE = 16
  842. Global Const $TOKEN_ADJUST_PRIVILEGES = 32
  843. Global Const $TOKEN_ADJUST_GROUPS = 64
  844. Global Const $TOKEN_ADJUST_DEFAULT = 128
  845. Global Const $TOKEN_ADJUST_SESSIONID = 256
  846. Global Const $TOKEN_ALL_ACCESS = 983551
  847. Global Const $TOKEN_READ = 131080
  848. Global Const $TOKEN_WRITE = 131296
  849. Global Const $TOKEN_EXECUTE = 131072
  850. Global Const $TOKEN_HAS_TRAVERSE_PRIVILEGE = 1
  851. Global Const $TOKEN_HAS_BACKUP_PRIVILEGE = 2
  852. Global Const $TOKEN_HAS_RESTORE_PRIVILEGE = 4
  853. Global Const $TOKEN_HAS_ADMIN_GROUP = 8
  854. Global Const $TOKEN_IS_RESTRICTED = 16
  855. Global Const $TOKEN_SESSION_NOT_REFERENCED = 32
  856. Global Const $TOKEN_SANDBOX_INERT = 64
  857. Global Const $TOKEN_HAS_IMPERSONATE_PRIVILEGE = 128
  858. Global Const $RIGHTS_DELETE = 65536
  859. Global Const $READ_CONTROL = 131072
  860. Global Const $WRITE_DAC = 262144
  861. Global Const $WRITE_OWNER = 524288
  862. Global Const $SYNCHRONIZE = 1048576
  863. Global Const $STANDARD_RIGHTS_REQUIRED = 983040
  864. Global Const $STANDARD_RIGHTS_READ = $READ_CONTROL
  865. Global Const $STANDARD_RIGHTS_WRITE = $READ_CONTROL
  866. Global Const $STANDARD_RIGHTS_EXECUTE = $READ_CONTROL
  867. Global Const $STANDARD_RIGHTS_ALL = 2031616
  868. Global Const $SPECIFIC_RIGHTS_ALL = 65535
  869. Global Enum $NOT_USED_ACCESS = 0, $GRANT_ACCESS, $SET_ACCESS, $DENY_ACCESS, $REVOKE_ACCESS, $SET_AUDIT_SUCCESS, $SET_AUDIT_FAILURE
  870. Global Enum $TRUSTEE_IS_UNKNOWN = 0, $TRUSTEE_IS_USER, $TRUSTEE_IS_GROUP, $TRUSTEE_IS_DOMAIN, $TRUSTEE_IS_ALIAS, $TRUSTEE_IS_WELL_KNOWN_GROUP, $TRUSTEE_IS_DELETED, $TRUSTEE_IS_INVALID, $TRUSTEE_IS_COMPUTER
  871. Global Const $LOGON_WITH_PROFILE = 1
  872. Global Const $LOGON_NETCREDENTIALS_ONLY = 2
  873. Global Enum $SIDTYPEUSER = 1, $SIDTYPEGROUP, $SIDTYPEDOMAIN, $SIDTYPEALIAS, $SIDTYPEWELLKNOWNGROUP, $SIDTYPEDELETEDACCOUNT, $SIDTYPEINVALID, $SIDTYPEUNKNOWN, $SIDTYPECOMPUTER, $SIDTYPELABEL
  874. Global Const $SID_ADMINISTRATORS = "S-1-5-32-544"
  875. Global Const $SID_USERS = "S-1-5-32-545"
  876. Global Const $SID_GUESTS = "S-1-5-32-546"
  877. Global Const $SID_ACCOUNT_OPERATORS = "S-1-5-32-548"
  878. Global Const $SID_SERVER_OPERATORS = "S-1-5-32-549"
  879. Global Const $SID_PRINT_OPERATORS = "S-1-5-32-550"
  880. Global Const $SID_BACKUP_OPERATORS = "S-1-5-32-551"
  881. Global Const $SID_REPLICATOR = "S-1-5-32-552"
  882. Global Const $SID_OWNER = "S-1-3-0"
  883. Global Const $SID_EVERYONE = "S-1-1-0"
  884. Global Const $SID_NETWORK = "S-1-5-2"
  885. Global Const $SID_INTERACTIVE = "S-1-5-4"
  886. Global Const $SID_SYSTEM = "S-1-5-18"
  887. Global Const $SID_AUTHENTICATED_USERS = "S-1-5-11"
  888. Global Const $SID_SCHANNEL_AUTHENTICATION = "S-1-5-64-14"
  889. Global Const $SID_DIGEST_AUTHENTICATION = "S-1-5-64-21"
  890. Global Const $SID_NT_SERVICE = "S-1-5-80"
  891. Global Const $SID_UNTRUSTED_MANDATORY_LEVEL = "S-1-16-0"
  892. Global Const $SID_LOW_MANDATORY_LEVEL = "S-1-16-4096"
  893. Global Const $SID_MEDIUM_MANDATORY_LEVEL = "S-1-16-8192"
  894. Global Const $SID_MEDIUM_PLUS_MANDATORY_LEVEL = "S-1-16-8448"
  895. Global Const $SID_HIGH_MANDATORY_LEVEL = "S-1-16-12288"
  896. Global Const $SID_SYSTEM_MANDATORY_LEVEL = "S-1-16-16384"
  897. Global Const $SID_PROTECTED_PROCESS_MANDATORY_LEVEL = "S-1-16-20480"
  898. Global Const $SID_SECURE_PROCESS_MANDATORY_LEVEL = "S-1-16-28672"
  899. Global Const $SID_ALL_SERVICES = "S-1-5-80-0"
  900. Global Const $FC_NOOVERWRITE = 0
  901. Global Const $FC_OVERWRITE = 1
  902. Global Const $FT_MODIFIED = 0
  903. Global Const $FT_CREATED = 1
  904. Global Const $FT_ACCESSED = 2
  905. Global Const $FO_READ = 0
  906. Global Const $FO_APPEND = 1
  907. Global Const $FO_OVERWRITE = 2
  908. Global Const $FO_BINARY = 16
  909. Global Const $FO_UNICODE = 32
  910. Global Const $FO_UTF16_LE = 32
  911. Global Const $FO_UTF16_BE = 64
  912. Global Const $FO_UTF8 = 128
  913. Global Const $FO_UTF8_NOBOM = 256
  914. Global Const $EOF = -1
  915. Global Const $FD_FILEMUSTEXIST = 1
  916. Global Const $FD_PATHMUSTEXIST = 2
  917. Global Const $FD_MULTISELECT = 4
  918. Global Const $FD_PROMPTCREATENEW = 8
  919. Global Const $FD_PROMPTOVERWRITE = 16
  920. Global Const $CREATE_NEW = 1
  921. Global Const $CREATE_ALWAYS = 2
  922. Global Const $OPEN_EXISTING = 3
  923. Global Const $OPEN_ALWAYS = 4
  924. Global Const $TRUNCATE_EXISTING = 5
  925. Global Const $INVALID_SET_FILE_POINTER = -1
  926. Global Const $FILE_BEGIN = 0
  927. Global Const $FILE_CURRENT = 1
  928. Global Const $FILE_END = 2
  929. Global Const $FILE_ATTRIBUTE_READONLY = 1
  930. Global Const $FILE_ATTRIBUTE_HIDDEN = 2
  931. Global Const $FILE_ATTRIBUTE_SYSTEM = 4
  932. Global Const $FILE_ATTRIBUTE_DIRECTORY = 16
  933. Global Const $FILE_ATTRIBUTE_ARCHIVE = 32
  934. Global Const $FILE_ATTRIBUTE_DEVICE = 64
  935. Global Const $FILE_ATTRIBUTE_NORMAL = 128
  936. Global Const $FILE_ATTRIBUTE_TEMPORARY = 256
  937. Global Const $FILE_ATTRIBUTE_SPARSE_FILE = 512
  938. Global Const $FILE_ATTRIBUTE_REPARSE_POINT = 1024
  939. Global Const $FILE_ATTRIBUTE_COMPRESSED = 2048
  940. Global Const $FILE_ATTRIBUTE_OFFLINE = 4096
  941. Global Const $FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 8192
  942. Global Const $FILE_ATTRIBUTE_ENCRYPTED = 16384
  943. Global Const $FILE_SHARE_READ = 1
  944. Global Const $FILE_SHARE_WRITE = 2
  945. Global Const $FILE_SHARE_DELETE = 4
  946. Global Const $GENERIC_ALL = 268435456
  947. Global Const $GENERIC_EXECUTE = 536870912
  948. Global Const $GENERIC_WRITE = 1073741824
  949. Global Const $GENERIC_READ = -2147483648
  950. #region
  951. Global Const $OWNER_SECURITY_INFORMATION = 1
  952. Global Const $GROUP_SECURITY_INFORMATION = 2
  953. Global Const $DACL_SECURITY_INFORMATION = 4
  954. Global Const $SACL_SECURITY_INFORMATION = 8
  955. Global Const $LABEL_SECURITY_INFORMATION = 16
  956. Global Enum $SE_UNKNOWN_OBJECT_TYPE = 0, $SE_FILE_OBJECT, $SE_SERVICE, $SE_PRINTER, $SE_REGISTRY_KEY, $SE_LMSHARE, $SE_KERNEL_OBJECT, $SE_WINDOW_OBJECT, $SE_DS_OBJECT, $SE_DS_OBJECT_ALL, $SE_PROVIDER_DEFINED_OBJECT, $SE_WMIGUID_OBJECT, $SE_REGISTRY_WOW64_32KEY
  957. Global Const $ACL_REVISION = 2
  958. Global Const $ACL_REVISION_DS = 4
  959. Global Const $ACL_REVISION1 = 1
  960. Global Const $ACL_REVISION2 = 2
  961. Global Const $ACL_REVISION3 = 3
  962. Global Const $ACL_REVISION4 = 4
  963. Global Const $ACCESS_SYSTEM_SECURITY = 16777216
  964. Global Const $DELETE = 65536
  965. Global Const $_SYNCHRONIZE = 1048576
  966. Global Const $MAXIMUM_ALLOWED = 536870912
  967. Global Const $FILE_LIST_DIRECTORY = 1
  968. Global Const $FILE_READ_DATA = 1
  969. Global Const $FILE_ADD_FILE = 2
  970. Global Const $FILE_WRITE_DATA = 2
  971. Global Const $FILE_ADD_SUBDIRECTORY = 4
  972. Global Const $FILE_APPEND_DATA = 4
  973. Global Const $FILE_CREATE_PIPE_INSTANCE = 4
  974. Global Const $FILE_READ_EA = 8
  975. Global Const $FILE_READ_PROPERTIES = 8
  976. Global Const $FILE_WRITE_EA = 16
  977. Global Const $FILE_WRITE_PROPERTIES = 16
  978. Global Const $FILE_EXECUTE = 32
  979. Global Const $FILE_TRAVERSE = 32
  980. Global Const $FILE_DELETE_CHILD = 64
  981. Global Const $FILE_READ_ATTRIBUTES = 128
  982. Global Const $FILE_WRITE_ATTRIBUTES = 256
  983. Global Const $FILE_USERS_DEFAULT = BitOR($GENERIC_READ, $FILE_LIST_DIRECTORY, $FILE_READ_DATA, $GENERIC_EXECUTE)
  984. Global Const $FILE_AUTH_USERS_DEFAULT = BitOR($GENERIC_READ, $GENERIC_EXECUTE, $GENERIC_WRITE, $DELETE)
  985. Global Const $ACTRL_FILE_READ = 1
  986. Global Const $ACTRL_FILE_WRITE = 2
  987. Global Const $ACTRL_FILE_APPEND = 4
  988. Global Const $ACTRL_FILE_READ_PROP = 8
  989. Global Const $ACTRL_FILE_WRITE_PROP = 16
  990. Global Const $ACTRL_FILE_EXECUTE = 32
  991. Global Const $ACTRL_FILE_READ_ATTRIB = 128
  992. Global Const $ACTRL_FILE_WRITE_ATTRIB = 256
  993. Global Const $ACTRL_FILE_CREATE_PIPE = 512
  994. Global Const $ACTRL_DIR_LIST = 1
  995. Global Const $ACTRL_DIR_CREATE_OBJECT = 2
  996. Global Const $ACTRL_DIR_CREATE_CHILD = 4
  997. Global Const $ACTRL_DIR_DELETE_CHILD = 64
  998. Global Const $ACTRL_DIR_TRAVERSE = 32
  999. Global Const $ACTRL_KERNEL_TERMINATE = 1
  1000. Global Const $ACTRL_KERNEL_THREAD = 2
  1001. Global Const $ACTRL_KERNEL_VM = 4
  1002. Global Const $ACTRL_KERNEL_VM_READ = 8
  1003. Global Const $ACTRL_KERNEL_VM_WRITE = 16
  1004. Global Const $ACTRL_KERNEL_DUP_HANDLE = 32
  1005. Global Const $ACTRL_KERNEL_PROCESS = 64
  1006. Global Const $ACTRL_KERNEL_SET_INFO = 128
  1007. Global Const $ACTRL_KERNEL_GET_INFO = 256
  1008. Global Const $ACTRL_KERNEL_CONTROL = 512
  1009. Global Const $ACTRL_KERNEL_ALERT = 1024
  1010. Global Const $ACTRL_KERNEL_GET_CONTEXT = 2048
  1011. Global Const $ACTRL_KERNEL_SET_CONTEXT = 4096
  1012. Global Const $ACTRL_KERNEL_TOKEN = 8192
  1013. Global Const $ACTRL_KERNEL_IMPERSONATE = 16384
  1014. Global Const $ACTRL_KERNEL_DIMPERSONATE = 32768
  1015. Global Const $ACTRL_PRINT_SADMIN = 1
  1016. Global Const $ACTRL_PRINT_SLIST = 2
  1017. Global Const $ACTRL_PRINT_PADMIN = 4
  1018. Global Const $ACTRL_PRINT_PUSE = 8
  1019. Global Const $ACTRL_PRINT_JADMIN = 16
  1020. Global Const $ACTRL_SVC_GET_INFO = 1
  1021. Global Const $ACTRL_SVC_SET_INFO = 2
  1022. Global Const $ACTRL_SVC_STATUS = 4
  1023. Global Const $ACTRL_SVC_LIST = 8
  1024. Global Const $ACTRL_SVC_START = 16
  1025. Global Const $ACTRL_SVC_STOP = 32
  1026. Global Const $ACTRL_SVC_PAUSE = 64
  1027. Global Const $ACTRL_SVC_INTERROGATE = 128
  1028. Global Const $ACTRL_SVC_UCONTROL = 256
  1029. Global Const $ACTRL_REG_QUERY = 1
  1030. Global Const $ACTRL_REG_SET = 2
  1031. Global Const $ACTRL_REG_CREATE_CHILD = 4
  1032. Global Const $ACTRL_REG_LIST = 8
  1033. Global Const $ACTRL_REG_NOTIFY = 16
  1034. Global Const $ACTRL_REG_LINK = 32
  1035. Global Const $ACTRL_WIN_CLIPBRD = 1
  1036. Global Const $ACTRL_WIN_GLOBAL_ATOMS = 2
  1037. Global Const $ACTRL_WIN_CREATE = 4
  1038. Global Const $ACTRL_WIN_LIST_DESK = 8
  1039. Global Const $ACTRL_WIN_LIST = 16
  1040. Global Const $ACTRL_WIN_READ_ATTRIBS = 32
  1041. Global Const $ACTRL_WIN_WRITE_ATTRIBS = 64
  1042. Global Const $ACTRL_WIN_SCREEN = 128
  1043. Global Const $ACTRL_WIN_EXIT = 256
  1044. Global Const $REG_GENERIC_READ = BitOR($ACTRL_REG_QUERY, $ACTRL_REG_LIST, $ACTRL_REG_NOTIFY, $READ_CONTROL)
  1045. Global Const $SUB_OBJECTS_ONLY_INHERIT = 1
  1046. Global Const $SUB_CONTAINERS_ONLY_INHERIT = 2
  1047. Global Const $SUB_CONTAINERS_AND_OBJECTS_INHERIT = 3
  1048. Global Const $INHERIT_NO_PROPAGATE = 4
  1049. Global Const $INHERIT_ONLY = 8
  1050. Global Const $INHERITED_ACCESS_ENTRY = 16
  1051. Global Const $INHERITED_PARENT = 268435456
  1052. Global Const $INHERITED_GRANDPARENT = 536870912
  1053. Global Const $OBJECT_INHERIT_ACE = 1
  1054. Global Const $CONTAINER_INHERIT_ACE = 2
  1055. Global Const $NO_PROPAGATE_INHERIT_ACE = 4
  1056. Global Const $INHERIT_ONLY_ACE = 8
  1057. Global Const $INHERITED_ACE = 16
  1058. Global Const $SUCCESSFUL_ACCESS_ACE_FLAG = 64
  1059. Global Const $FAILED_ACCESS_ACE_FLAG = 128
  1060. Global Const $RECURSE_ALL = 1
  1061. Global Const $RECURSE_CONTAINERS = 2
  1062. Global Const $RECURSE_OBJECTS = 3
  1063. Global $H__ADVAPI32DLL = @SystemDir & "\Advapi32.dll"
  1064. Global $H__KERNEL32DLL = @SystemDir & "\Kernel32.dll"
  1065. Global $A__PRIV[4][2], $A__PREV[4][2]
  1066. Global $RESOURCESSTATE = 0
  1067. #endregion
  1068. Func _INITIATEPERMISSIONRESOURCES()
  1069.     $H__ADVAPI32DLL = DllOpen(@SystemDir & "\Advapi32.dll")
  1070.     $H__KERNEL32DLL = DllOpen(@SystemDir & "\Kernel32.dll")
  1071.     $A__PRIV[0][0] = "SeRestorePrivilege"
  1072.     $A__PRIV[0][1] = 2
  1073.     $A__PRIV[1][0] = "SeTakeOwnershipPrivilege"
  1074.     $A__PRIV[1][1] = 2
  1075.     $A__PRIV[2][0] = "SeDebugPrivilege"
  1076.     $A__PRIV[2][1] = 2
  1077.     $A__PRIV[3][0] = "SeSecurityPrivilege"
  1078.     $A__PRIV[3][1] = 2
  1079.     $A__PREV = _SETPRIVILEGE($A__PRIV)
  1080.     $RESOURCESSTATE = 1
  1081. EndFunc
  1082. Func _CLOSEPERMISSIONRESOURCES()
  1083.     _SETPRIVILEGE($A__PREV)
  1084.     DllClose($H__ADVAPI32DLL)
  1085.     DllClose($H__KERNEL32DLL)
  1086.     $H__ADVAPI32DLL = @SystemDir & "\Advapi32.dll"
  1087.     $H__KERNEL32DLL = @SystemDir & "\Kernel32.dll"
  1088.     $RESOURCESSTATE = 0
  1089. EndFunc
  1090. Func _COPYFULLDACL($ONAME, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT, $ONAME2 = @ScriptFullPath, $_SE_OBJECT_TYPE2 = $SE_FILE_OBJECT, $SETOWNER = "")
  1091.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1092.     Local $NEWDACL = _GETOBJECTDACL($ONAME2, $_SE_OBJECT_TYPE2), $SECURITY_INFORMATION = 4, $POWNER = 0
  1093.     If $SETOWNER <> "" Then
  1094.         If Not IsDllStruct($SETOWNER) Then $SETOWNER = _GETSIDSTRUCT($SETOWNER)
  1095.         $POWNER = DllStructGetPtr($SETOWNER)
  1096.         If $POWNER And _ISVALIDSID($POWNER) Then
  1097.             $SECURITY_INFORMATION = 5
  1098.         Else
  1099.             $POWNER = 0
  1100.         EndIf
  1101.     EndIf
  1102.     Return _SETOBJECTSECURITY($ONAME, $_SE_OBJECT_TYPE, $SECURITY_INFORMATION, $POWNER, 0, $NEWDACL, 0)
  1103. EndFunc
  1104. Func _INHERITPARENTPERMISSIONS($ONAME, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT, $CLEARDACL = 0)
  1105.     Local $PSD = _GETOBJECTSECURITYDESCRIPTOR($ONAME, $_SE_OBJECT_TYPE), $SECINFO = 0
  1106.     If $PSD = 0 Then Return SetError(1, 0, 0)
  1107.     Local $POWNER = _GETSECURITYDESCRIPTOROWNER($PSD, 1)
  1108.     If $POWNER Then $SECINFO += 1
  1109.     Local $DACL = _GETSECURITYDESCRIPTORDACL($PSD)
  1110.     If $DACL Then $SECINFO += 4
  1111.     If $CLEARDACL Then _CLEAROBJECTDACL($ONAME, $_SE_OBJECT_TYPE)
  1112.     Return _TREERESETPERMISSIONS($ONAME, $_SE_OBJECT_TYPE, $SECINFO, $POWNER, 0, $DACL, 0, $CLEARDACL)
  1113. EndFunc
  1114. Func _SETDEFAULTFILEACCESS($PATH, $RECURSE = 0)
  1115.     Local $AFILEPERM[4][4], $OWNER
  1116.     If StringInStr($PATH, @UserProfileDir) Then
  1117.         $OWNER = @UserName
  1118.         $AFILEPERM[0][0] = "Administrators"
  1119.         $AFILEPERM[0][1] = 1
  1120.         $AFILEPERM[0][2] = $GENERIC_ALL
  1121.         $AFILEPERM[0][3] = $SUB_CONTAINERS_AND_OBJECTS_INHERIT
  1122.         $AFILEPERM[1][0] = "System"
  1123.         $AFILEPERM[1][1] = 1
  1124.         $AFILEPERM[1][2] = $GENERIC_ALL
  1125.         $AFILEPERM[1][3] = $SUB_CONTAINERS_AND_OBJECTS_INHERIT
  1126.         $AFILEPERM[2][0] = @UserName
  1127.         $AFILEPERM[2][1] = 1
  1128.         $AFILEPERM[2][2] = $GENERIC_ALL
  1129.         $AFILEPERM[2][3] = $SUB_CONTAINERS_AND_OBJECTS_INHERIT
  1130.     Else
  1131.         $OWNER = "Administrators"
  1132.         $AFILEPERM[0][0] = "Administrators"
  1133.         $AFILEPERM[0][1] = 1
  1134.         $AFILEPERM[0][2] = $GENERIC_ALL
  1135.         $AFILEPERM[0][3] = $SUB_CONTAINERS_AND_OBJECTS_INHERIT
  1136.         $AFILEPERM[1][0] = "System"
  1137.         $AFILEPERM[1][1] = 1
  1138.         $AFILEPERM[1][2] = $GENERIC_ALL
  1139.         $AFILEPERM[1][3] = $SUB_CONTAINERS_AND_OBJECTS_INHERIT
  1140.         $AFILEPERM[2][0] = "Users"
  1141.         $AFILEPERM[2][1] = 1
  1142.         $AFILEPERM[2][2] = $FILE_USERS_DEFAULT
  1143.         $AFILEPERM[2][3] = $SUB_CONTAINERS_AND_OBJECTS_INHERIT
  1144.         $AFILEPERM[3][0] = "Authenticated Users"
  1145.         $AFILEPERM[3][1] = 1
  1146.         $AFILEPERM[3][2] = $FILE_AUTH_USERS_DEFAULT
  1147.         $AFILEPERM[3][3] = $SUB_CONTAINERS_AND_OBJECTS_INHERIT
  1148.         If StringInStr($PATH, @WindowsDir) Or StringInStr($PATH, @ProgramFilesDir) And Not StringInStr("WIN_2003|WIN_XP|WIN_XPe|WIN_2000", @OSVersion) Then
  1149.             ReDim $AFILEPERM[5][4]
  1150.             $AFILEPERM[4][0] = "TrustedInstaller"
  1151.             $AFILEPERM[4][1] = 1
  1152.             $AFILEPERM[4][2] = $GENERIC_ALL
  1153.             $AFILEPERM[4][3] = $SUB_CONTAINERS_AND_OBJECTS_INHERIT
  1154.         EndIf
  1155.     EndIf
  1156.     Return _EDITOBJECTPERMISSIONS($PATH, $AFILEPERM, $SE_FILE_OBJECT, $OWNER, 0, $RECURSE)
  1157. EndFunc
  1158. Func _DENYALLACCESS($ONAME, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT, $SETOWNER = "Administrators", $RECURSE = 1)
  1159.     Local $APERM[1][3]
  1160.     $APERM[0][0] = "Everyone"
  1161.     $APERM[0][1] = 0
  1162.     $APERM[0][2] = $GENERIC_ALL
  1163.     Return _SETOBJECTPERMISSIONS($ONAME, $APERM, $_SE_OBJECT_TYPE, $SETOWNER, 0, $RECURSE)
  1164. EndFunc
  1165. Func _GRANTALLACCESS($ONAME, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT, $SETOWNER = "Administrators", $RECURSE = 1)
  1166.     Local $APERM[1][3]
  1167.     $APERM[0][0] = "Everyone"
  1168.     $APERM[0][1] = 1
  1169.     $APERM[0][2] = $GENERIC_ALL
  1170.     Return _SETOBJECTPERMISSIONS($ONAME, $APERM, $_SE_OBJECT_TYPE, $SETOWNER, 1, $RECURSE)
  1171. EndFunc
  1172. Func _GRANTREADACCESS($ONAME, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT, $SETOWNER = "Administrators", $RECURSE = 1)
  1173.     Local $APERM[3][3]
  1174.     $APERM[0][0] = "Everyone"
  1175.     $APERM[0][1] = 1
  1176.     $APERM[0][2] = $GENERIC_READ
  1177.     $APERM[1][0] = "Administrators"
  1178.     $APERM[1][1] = 1
  1179.     $APERM[1][2] = $GENERIC_ALL
  1180.     $APERM[2][0] = "System"
  1181.     $APERM[2][1] = 1
  1182.     $APERM[2][2] = $GENERIC_ALL
  1183.     Return _SETOBJECTPERMISSIONS($ONAME, $APERM, $_SE_OBJECT_TYPE, $SETOWNER, 1, $RECURSE)
  1184. EndFunc
  1185. Func _GRANTREADDENYWRITE($ONAME, $SETOWNER = "Administrators", $RECURSE = 1)
  1186.     Local $APERM[2][3]
  1187.     $APERM[0][0] = "Everyone"
  1188.     $APERM[0][1] = 0
  1189.     $APERM[0][2] = BitOR($ACTRL_REG_SET, $ACTRL_REG_CREATE_CHILD, $WRITE_DAC, $WRITE_OWNER)
  1190.     $APERM[1][0] = "Everyone"
  1191.     $APERM[1][1] = 1
  1192.     $APERM[1][2] = $REG_GENERIC_READ
  1193.     Return _SETOBJECTPERMISSIONS($ONAME, $APERM, $SE_REGISTRY_KEY, $SETOWNER, 1, $RECURSE)
  1194. EndFunc
  1195. Func _SETOBJECTPERMISSIONS($ONAME, $APERMISSIONS, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT, $SETOWNER = "", $CLEARDACL = 0, $RECURSE = 0, $INHERIT = 3)
  1196.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1197.     If Not IsArray($APERMISSIONS) Or UBound($APERMISSIONS, 2) < 3 Then Return SetError(1, 0, 0)
  1198.     Local $DACL = _CREATEDACLFROMARRAY($APERMISSIONS, $INHERIT)
  1199.     Local $HASDENIEDACES = @extended
  1200.     Local $SECURITY_INFORMATION = 4, $POWNER = 0
  1201.     If $SETOWNER <> "" Then
  1202.         If Not IsDllStruct($SETOWNER) Then $SETOWNER = _GETSIDSTRUCT($SETOWNER)
  1203.         $POWNER = DllStructGetPtr($SETOWNER)
  1204.         If $POWNER And _ISVALIDSID($POWNER) Then
  1205.             $SECURITY_INFORMATION = 5
  1206.         Else
  1207.             $POWNER = 0
  1208.         EndIf
  1209.     EndIf
  1210.     If Not IsPtr($ONAME) And $_SE_OBJECT_TYPE = $SE_FILE_OBJECT Then
  1211.         Return _SETFILEOBJECTSECURITY($ONAME, $DACL, $POWNER, $CLEARDACL, $RECURSE, $HASDENIEDACES, $SECURITY_INFORMATION)
  1212.     ElseIf Not IsPtr($ONAME) And $_SE_OBJECT_TYPE = $SE_REGISTRY_KEY Then
  1213.         Return _SETREGOBJECTSECURITY($ONAME, $DACL, $POWNER, $CLEARDACL, $RECURSE, $HASDENIEDACES, $SECURITY_INFORMATION)
  1214.     Else
  1215.         If $CLEARDACL Then _CLEAROBJECTDACL($ONAME, $_SE_OBJECT_TYPE)
  1216.         Return _SETOBJECTSECURITY($ONAME, $_SE_OBJECT_TYPE, $SECURITY_INFORMATION, $POWNER, 0, $DACL, 0)
  1217.     EndIf
  1218. EndFunc
  1219. Func _EDITOBJECTPERMISSIONS($ONAME, $APERMISSIONS, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT, $SETOWNER = "", $CLEARDACL = 0, $RECURSE = 0, $INHERIT = 3)
  1220.     If Not IsArray($APERMISSIONS) Or UBound($APERMISSIONS, 2) < 3 Then Return SetError(1, 0, 0)
  1221.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1222.     Local $DACL = _GETOBJECTDACL($ONAME, $_SE_OBJECT_TYPE)
  1223.     _MERGEDACLTOARRAY($DACL, $APERMISSIONS)
  1224.     Local $NEWDACL = _CREATEDACLFROMARRAY($APERMISSIONS, $INHERIT)
  1225.     Local $HASDENIEDACES = @extended
  1226.     Local $SECURITY_INFORMATION = 4, $POWNER = 0
  1227.     If $SETOWNER <> "" Then
  1228.         If Not IsDllStruct($SETOWNER) Then $SETOWNER = _GETSIDSTRUCT($SETOWNER)
  1229.         $POWNER = DllStructGetPtr($SETOWNER)
  1230.         If $POWNER And _ISVALIDSID($POWNER) Then
  1231.             $SECURITY_INFORMATION = 5
  1232.         Else
  1233.             $POWNER = 0
  1234.         EndIf
  1235.     EndIf
  1236.     If $CLEARDACL Then _CLEAROBJECTDACL($ONAME, $_SE_OBJECT_TYPE)
  1237.     If Not IsPtr($ONAME) And $_SE_OBJECT_TYPE = $SE_FILE_OBJECT Then
  1238.         Return _SETFILEOBJECTSECURITY($ONAME, $NEWDACL, $POWNER, $CLEARDACL, $RECURSE, $HASDENIEDACES, $SECURITY_INFORMATION)
  1239.     ElseIf Not IsPtr($ONAME) And $_SE_OBJECT_TYPE = $SE_REGISTRY_KEY Then
  1240.         Return _SETREGOBJECTSECURITY($ONAME, $NEWDACL, $POWNER, $CLEARDACL, $RECURSE, $HASDENIEDACES, $SECURITY_INFORMATION)
  1241.     Else
  1242.         Return _SETOBJECTSECURITY($ONAME, $_SE_OBJECT_TYPE, $SECURITY_INFORMATION, $POWNER, 0, $NEWDACL, 0)
  1243.     EndIf
  1244. EndFunc
  1245. Func _MERGEDACLTOARRAY(ByRef $DACL, ByRef $APERM)
  1246.     If Not IsArray($APERM) Or UBound($APERM, 2) < 3 Then Return SetError(1, 0, 0)
  1247.     Local $ADACLINFO = _GETDACLSIZEINFORMATION($DACL)
  1248.     If @error Then Return 0
  1249.     Local $UB = UBound($APERM), $UB2 = UBound($APERM, 2), $AACE, $PSID, $DUPSID, $ACALL, $RET = 0
  1250.     For $I = 0 To $UB - 1
  1251.         If Not IsDllStruct($APERM[$I][0]) Then $APERM[$I][0] = _GETSIDSTRUCT($APERM[$I][0])
  1252.     Next
  1253.     For $I = 0 To $ADACLINFO[0] - 1
  1254.         $AACE = _GETACE($DACL, $I)
  1255.         $PSID = DllStructGetPtr($AACE[0])
  1256.         If @error Then ContinueLoop
  1257.         $DUPSID = 0
  1258.         For $L = 0 To $UB - 1
  1259.             $ACALL = DllCall($H__ADVAPI32DLL, "bool", "EqualSid", "ptr", DllStructGetPtr($APERM[$L][0]), "ptr", $PSID)
  1260.             If Not @error And $ACALL[0] Then
  1261.                 $DUPSID = 1
  1262.                 ExitLoop
  1263.             EndIf
  1264.         Next
  1265.         If $DUPSID Then ContinueLoop
  1266.         ReDim $APERM[$UB + $RET + 1][$UB2]
  1267.         $APERM[$UB + $RET][0] = $AACE[0]
  1268.         $APERM[$UB + $RET][1] = Number($AACE[1] <> 1)
  1269.         $APERM[$UB + $RET][2] = $AACE[2]
  1270.         If $UB2 > 3 Then $APERM[$UB + $RET][3] = $AACE[3]
  1271.         $RET += 1
  1272.     Next
  1273.     Return $RET
  1274. EndFunc
  1275. Func _GETDACLSIZEINFORMATION(ByRef $DACL)
  1276.     Local $ARET[3] = [0, 0, 0]
  1277.     If Not IsPtr($DACL) Then Return SetError(1, 0, $ARET)
  1278.     Local $_ACL_SIZE_INFORMATION = DllStructCreate("DWORD AceCount;DWORD AclBytesInUse;WORD AclBytesFree")
  1279.     Local $ACALL = DllCall($H__ADVAPI32DLL, "bool", "GetAclInformation", "ptr", $DACL, "ptr", DllStructGetPtr($_ACL_SIZE_INFORMATION), "dword", DllStructGetSize($_ACL_SIZE_INFORMATION), "dword", 2)
  1280.     If @error Or $ACALL[0] = 0 Then Return SetError(2, 0, $ARET)
  1281.     $ARET[0] = DllStructGetData($_ACL_SIZE_INFORMATION, "AceCount")
  1282.     $ARET[1] = DllStructGetData($_ACL_SIZE_INFORMATION, "AclBytesInUse")
  1283.     $ARET[2] = DllStructGetData($_ACL_SIZE_INFORMATION, "AclBytesFree")
  1284.     Return $ARET
  1285. EndFunc
  1286. Func _GETACE(ByRef $DACL, $INDEX)
  1287.     Local $ARET[4]
  1288.     If Not IsPtr($DACL) Then Return SetError(1, 0, $ARET)
  1289.     Local $PACE = DllStructCreate("ptr")
  1290.     Local $ACALL = DllCall($H__ADVAPI32DLL, "bool", "GetAce", "ptr", $DACL, "dword", $INDEX, "ptr", DllStructGetPtr($PACE, 1))
  1291.     If @error Or Not $ACALL[0] Then Return SetError(2, 0, $ARET)
  1292.     Local $_ACE = DllStructCreate("BYTE AceType;BYTE AceFlags;WORD AceSize;DWORD ACCESS_MASK;byte SID[256]", DllStructGetData($PACE, 1))
  1293.     Local $SID = DllStructCreate("byte SID[256]", DllStructGetPtr($_ACE, "SID"))
  1294.     $ARET[0] = $SID
  1295.     $ARET[1] = DllStructGetData($_ACE, "AceType")
  1296.     $ARET[2] = DllStructGetData($_ACE, "ACCESS_MASK")
  1297.     $ARET[3] = DllStructGetData($_ACE, "AceFlags")
  1298.     If BitAND($ARET[3], 16) Then
  1299.         $ARET[3] -= 16
  1300.     ElseIf BitAND($ARET[3], 8) Then
  1301.         $ARET[3] -= 8
  1302.     EndIf
  1303.     Return $ARET
  1304. EndFunc
  1305. Func _CREATEDACLFROMARRAY(ByRef $APERMISSIONS, ByRef $INHERIT)
  1306.     Local $UB2 = UBound($APERMISSIONS, 2)
  1307.     If Not IsArray($APERMISSIONS) Or $UB2 < 3 Then Return SetError(1, 0, 0)
  1308.     Local $UB = UBound($APERMISSIONS), $PSID[$UB], $L = 0, $_TRUSTEE_TYPE = 1
  1309.     Local $ACCESSMODE, $HASDENIEDACES = 0, $ACALL
  1310.     Local $_EXPLICIT_ACCESS, $T_EXPLICIT_ACCESS = "DWORD;DWORD;DWORD;ptr;DWORD;DWORD;DWORD;ptr"
  1311.     For $I = 1 To $UB - 1
  1312.         $T_EXPLICIT_ACCESS &= ";DWORD;DWORD;DWORD;ptr;DWORD;DWORD;DWORD;ptr"
  1313.     Next
  1314.     $_EXPLICIT_ACCESS = DllStructCreate($T_EXPLICIT_ACCESS)
  1315.     For $I = 0 To $UB - 1
  1316.         If Not IsDllStruct($APERMISSIONS[$I][0]) Then $APERMISSIONS[$I][0] = _GETSIDSTRUCT($APERMISSIONS[$I][0])
  1317.         $PSID[$I] = DllStructGetPtr($APERMISSIONS[$I][0])
  1318.         If Not _ISVALIDSID($PSID[$I]) Then ContinueLoop
  1319.         DllStructSetData($_EXPLICIT_ACCESS, $L + 1, $APERMISSIONS[$I][2])
  1320.         If $APERMISSIONS[$I][1] = 0 Then
  1321.             $HASDENIEDACES = 1
  1322.             $ACCESSMODE = $DENY_ACCESS
  1323.         Else
  1324.             $ACCESSMODE = $SET_ACCESS
  1325.         EndIf
  1326.         If $UB2 > 3 Then $INHERIT = $APERMISSIONS[$I][3]
  1327.         DllStructSetData($_EXPLICIT_ACCESS, $L + 2, $ACCESSMODE)
  1328.         DllStructSetData($_EXPLICIT_ACCESS, $L + 3, $INHERIT)
  1329.         DllStructSetData($_EXPLICIT_ACCESS, $L + 6, 0)
  1330.         $ACALL = DllCall($H__ADVAPI32DLL, "BOOL", "LookupAccountSid", "ptr", 0, "ptr", $PSID[$I], "ptr*", 0, "dword*", 32, "ptr*", 0, "dword*", 32, "dword*", 0)
  1331.         If Not @error Then $_TRUSTEE_TYPE = $ACALL[7]
  1332.         DllStructSetData($_EXPLICIT_ACCESS, $L + 7, $_TRUSTEE_TYPE)
  1333.         DllStructSetData($_EXPLICIT_ACCESS, $L + 8, $PSID[$I])
  1334.         $L += 8
  1335.     Next
  1336.     Local $P_EXPLICIT_ACCESS = DllStructGetPtr($_EXPLICIT_ACCESS)
  1337.     $ACALL = DllCall($H__ADVAPI32DLL, "DWORD", "SetEntriesInAcl", "ULONG", $UB, "ptr", $P_EXPLICIT_ACCESS, "ptr", 0, "ptr*", 0)
  1338.     If @error Or $ACALL[0] Then Return SetError(1, 0, 0)
  1339.     Return SetExtended($HASDENIEDACES, $ACALL[4])
  1340. EndFunc
  1341. Func _SETOBJECTSECURITY($ONAME, $_SE_OBJECT_TYPE, $SECURITY_INFORMATION, $POWNER = 0, $PGROUP = 0, $DACL = 0, $SACL = 0)
  1342.     Local $ACALL
  1343.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1344.     If $DACL And Not _ISVALIDACL($DACL) Then Return 0
  1345.     If $SACL And Not _ISVALIDACL($SACL) Then Return 0
  1346.     If IsPtr($ONAME) Then
  1347.         $ACALL = DllCall($H__ADVAPI32DLL, "dword", "SetSecurityInfo", "handle", $ONAME, "dword", $_SE_OBJECT_TYPE, "dword", $SECURITY_INFORMATION, "ptr", $POWNER, "ptr", $PGROUP, "ptr", $DACL, "ptr", $SACL)
  1348.     Else
  1349.         If $_SE_OBJECT_TYPE = $SE_REGISTRY_KEY Then $ONAME = _SECURITY_REGKEYNAME($ONAME)
  1350.         $ACALL = DllCall($H__ADVAPI32DLL, "dword", "SetNamedSecurityInfo", "str", $ONAME, "dword", $_SE_OBJECT_TYPE, "dword", $SECURITY_INFORMATION, "ptr", $POWNER, "ptr", $PGROUP, "ptr", $DACL, "ptr", $SACL)
  1351.     EndIf
  1352.     If @error Then Return SetError(1, 0, 0)
  1353.     If $ACALL[0] And $POWNER Then
  1354.         If _SETOBJECTOWNER($ONAME, $_SE_OBJECT_TYPE, _SIDTOSTRINGSID($POWNER)) Then Return _SETOBJECTSECURITY($ONAME, $_SE_OBJECT_TYPE, $SECURITY_INFORMATION - 1, 0, $PGROUP, $DACL, $SACL)
  1355.     EndIf
  1356.     Return SetError($ACALL[0], 0, Number($ACALL[0] = 0))
  1357. EndFunc
  1358. Func _ISVALIDACL($ACL)
  1359.     If $ACL = 0 Then Return SetError(1, 0, 0)
  1360.     Local $ACALL = DllCall($H__ADVAPI32DLL, "bool", "IsValidAcl", "ptr", $ACL)
  1361.     If @error Or Not $ACALL[0] Then Return 0
  1362.     Return 1
  1363. EndFunc
  1364. Func _SETOBJECTSECURITYDESCRIPTOR($ONAME, ByRef $PSECDESCRIPTOR, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT)
  1365.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1366.     Local $SECURITY_INFORMATION = BitOR($OWNER_SECURITY_INFORMATION, $GROUP_SECURITY_INFORMATION, $DACL_SECURITY_INFORMATION, $SACL_SECURITY_INFORMATION), $ACALL
  1367.     If $_SE_OBJECT_TYPE = $SE_KERNEL_OBJECT Then
  1368.         $ACALL = DllCall($H__ADVAPI32DLL, "BOOL", "SetKernelObjectSecurity", "handle", $ONAME, "dword", $SECURITY_INFORMATION, "ptr", $PSECDESCRIPTOR)
  1369.         If @error Or $ACALL[0] = 0 Then Return SetError(1, 0, 0)
  1370.         Return 1
  1371.     Else
  1372.         Local $POWNER = _GETSECURITYDESCRIPTOROWNER($PSECDESCRIPTOR, 1)
  1373.         Local $PGROUP = _GETSECURITYDESCRIPTORGROUP($PSECDESCRIPTOR, 1)
  1374.         Local $DACL = _GETSECURITYDESCRIPTORDACL($PSECDESCRIPTOR)
  1375.         Local $SACL = _GETSECURITYDESCRIPTORSACL($PSECDESCRIPTOR)
  1376.         Return _SETOBJECTSECURITY($ONAME, $_SE_OBJECT_TYPE, $SECURITY_INFORMATION, $POWNER, $PGROUP, $DACL, $SACL)
  1377.     EndIf
  1378. EndFunc
  1379. Func _TREERESETPERMISSIONS($ONAME, $_SE_OBJECT_TYPE, $SECURITY_INFORMATION, $POWNER = 0, $PGROUP = 0, $DACL = 0, $SACL = 0, $CLEARDACL = 0)
  1380.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1381.     If $DACL And Not _ISVALIDACL($DACL) Then Return 0
  1382.     If $SACL And Not _ISVALIDACL($SACL) Then Return 0
  1383.     If $_SE_OBJECT_TYPE = $SE_REGISTRY_KEY Then $ONAME = _SECURITY_REGKEYNAME($ONAME)
  1384.     Local $ACALL = DllCall($H__ADVAPI32DLL, "dword", "TreeResetNamedSecurityInfoW", "wstr", $ONAME, "dword", $_SE_OBJECT_TYPE, "dword", $SECURITY_INFORMATION, "ptr", $POWNER, "ptr", $PGROUP, "ptr", $DACL, "ptr", $SACL, "bool", $CLEARDACL = 0, "ptr", 0, "dword", 1, "ptr", 0)
  1385.     If @error Then Return SetError(1, 0, 0)
  1386.     Return SetError($ACALL[0], 0, Number($ACALL[0] = 0))
  1387. EndFunc
  1388. Func _PERMISSIONS_OPENPROCESS($PROCESS, $DACCESS = -1)
  1389.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1390.     If $DACCESS = -1 Then $DACCESS = BitOR($READ_CONTROL, $WRITE_DAC, $WRITE_OWNER, $ACCESS_SYSTEM_SECURITY)
  1391.     $PROCESS = ProcessExists($PROCESS)
  1392.     If $PROCESS = 0 Then Return SetError(1, 0, 0)
  1393.     Local $ACALL = DllCall($H__KERNEL32DLL, "handle", "OpenProcess", "dword", $DACCESS, "bool", False, "dword", $PROCESS)
  1394.     If @error Or $ACALL[0] = 0 Then Return SetError(2, 0, 0)
  1395.     Return $ACALL[0]
  1396. EndFunc
  1397. Func _PERMISSIONS_KILLPROCESS($PROCESS)
  1398.     Local $HPROCESS = _PERMISSIONS_OPENPROCESS($PROCESS, BitOR(1, $READ_CONTROL, $WRITE_DAC, $WRITE_OWNER, $ACCESS_SYSTEM_SECURITY))
  1399.     If $HPROCESS = 0 Then Return SetError(1, 0, 0)
  1400.     Local $RET = 0
  1401.     _GRANTALLACCESS($HPROCESS, $SE_KERNEL_OBJECT)
  1402.     For $I = 1 To 10
  1403.         DllCall($H__KERNEL32DLL, "bool", "TerminateProcess", "handle", $HPROCESS, "uint", 0)
  1404.         If @error Then $RET = 0
  1405.         Sleep(30)
  1406.         If Not ProcessExists($PROCESS) Then
  1407.             $RET = 1
  1408.             ExitLoop
  1409.         EndIf
  1410.     Next
  1411.     _PERMISSIONS_CLOSEHANDLE($HPROCESS)
  1412.     Return $RET
  1413. EndFunc
  1414. Func _PERMISSIONS_CLOSEHANDLE($HANDLE)
  1415.     Local $ACALL = DllCall($H__KERNEL32DLL, "bool", "CloseHandle", "handle", $HANDLE)
  1416.     If @error Then Return SetError(@error, 0, 0)
  1417.     Return $ACALL[0]
  1418. EndFunc
  1419. Func _SETFILEOBJECTSECURITY($ONAME, ByRef $DACL, ByRef $POWNER, ByRef $CLEARDACL, ByRef $RECURSE, ByRef $HASDENIEDACES, ByRef $SECURITY_INFORMATION)
  1420.     Local $RET, $NAME
  1421.     If Not $HASDENIEDACES Then
  1422.         If $CLEARDACL Then _CLEAROBJECTDACL($ONAME, $SE_FILE_OBJECT)
  1423.         $RET = _SETOBJECTSECURITY($ONAME, $SE_FILE_OBJECT, $SECURITY_INFORMATION, $POWNER, 0, $DACL, 0)
  1424.     EndIf
  1425.     If $RECURSE Then
  1426.         Local $H = FileFindFirstFile($ONAME & "\*")
  1427.         While 1
  1428.             $NAME = FileFindNextFile($H)
  1429.             If $RECURSE = 1 Or $RECURSE = 2 And @extended = 1 Then
  1430.                 _SETFILEOBJECTSECURITY($ONAME & "\" & $NAME, $DACL, $POWNER, $CLEARDACL, $RECURSE, $HASDENIEDACES, $SECURITY_INFORMATION)
  1431.             ElseIf @error Then
  1432.                 ExitLoop
  1433.             ElseIf $RECURSE = 1 Or $RECURSE = 3 Then
  1434.                 If $CLEARDACL Then _CLEAROBJECTDACL($ONAME & "\" & $NAME, $SE_FILE_OBJECT)
  1435.                 _SETOBJECTSECURITY($ONAME & "\" & $NAME, $SE_FILE_OBJECT, $SECURITY_INFORMATION, $POWNER, 0, $DACL, 0)
  1436.             EndIf
  1437.         WEnd
  1438.         FileClose($H)
  1439.     EndIf
  1440.     If $HASDENIEDACES Then
  1441.         If $CLEARDACL Then _CLEAROBJECTDACL($ONAME, $SE_FILE_OBJECT)
  1442.         $RET = _SETOBJECTSECURITY($ONAME, $SE_FILE_OBJECT, $SECURITY_INFORMATION, $POWNER, 0, $DACL, 0)
  1443.     EndIf
  1444.     Return $RET
  1445. EndFunc
  1446. Func _SETREGOBJECTSECURITY($ONAME, ByRef $DACL, ByRef $POWNER, ByRef $CLEARDACL, ByRef $RECURSE, ByRef $HASDENIEDACES, ByRef $SECURITY_INFORMATION)
  1447.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1448.     Local $RET, $I = 0, $NAME
  1449.     If Not $HASDENIEDACES Then
  1450.         If $CLEARDACL Then _CLEAROBJECTDACL($ONAME, $SE_REGISTRY_KEY)
  1451.         $RET = _SETOBJECTSECURITY($ONAME, $SE_REGISTRY_KEY, $SECURITY_INFORMATION, $POWNER, 0, $DACL, 0)
  1452.     EndIf
  1453.     If $RECURSE Then
  1454.         While 1
  1455.             $I += 1
  1456.             $NAME = RegEnumKey($ONAME, $I)
  1457.             If @error Then ExitLoop
  1458.             _SETREGOBJECTSECURITY($ONAME & "\" & $NAME, $DACL, $POWNER, $CLEARDACL, $RECURSE, $HASDENIEDACES, $SECURITY_INFORMATION)
  1459.         WEnd
  1460.     EndIf
  1461.     If $HASDENIEDACES Then
  1462.         If $CLEARDACL Then _CLEAROBJECTDACL($ONAME, $SE_REGISTRY_KEY)
  1463.         $RET = _SETOBJECTSECURITY($ONAME, $SE_REGISTRY_KEY, $SECURITY_INFORMATION, $POWNER, 0, $DACL, 0)
  1464.     EndIf
  1465.     Return $RET
  1466. EndFunc
  1467. Func _CLEAROBJECTDACL($ONAME, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT)
  1468.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1469.     Local $BUFFER = DllStructCreate("byte[32]"), $ARET
  1470.     Local $DACL = DllStructGetPtr($BUFFER, 1)
  1471.     DllCall($H__ADVAPI32DLL, "bool", "InitializeAcl", "Ptr", $DACL, "dword", DllStructGetSize($BUFFER), "dword", $ACL_REVISION)
  1472.     If IsPtr($ONAME) Then
  1473.         $ARET = DllCall($H__ADVAPI32DLL, "dword", "SetSecurityInfo", "handle", $ONAME, "dword", $_SE_OBJECT_TYPE, "dword", 4, "ptr", 0, "ptr", 0, "ptr", $DACL, "ptr", 0)
  1474.     Else
  1475.         If $_SE_OBJECT_TYPE = $SE_REGISTRY_KEY Then $ONAME = _SECURITY_REGKEYNAME($ONAME)
  1476.         DllCall($H__ADVAPI32DLL, "DWORD", "SetNamedSecurityInfo", "str", $ONAME, "dword", $_SE_OBJECT_TYPE, "DWORD", 4, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0)
  1477.         $ARET = DllCall($H__ADVAPI32DLL, "DWORD", "SetNamedSecurityInfo", "str", $ONAME, "dword", $_SE_OBJECT_TYPE, "DWORD", 4, "ptr", 0, "ptr", 0, "ptr", $DACL, "ptr", 0)
  1478.     EndIf
  1479.     If @error Then Return SetError(@error, 0, 0)
  1480.     Return SetError($ARET[0], 0, Number($ARET[0] = 0))
  1481. EndFunc
  1482. Func _GETOBJECTDACL($ONAME, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT)
  1483.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1484.     Local $PSD = _GETOBJECTSECURITYDESCRIPTOR($ONAME, $_SE_OBJECT_TYPE)
  1485.     If Not $PSD Then Return SetError(1, 0, 0)
  1486.     Return _GETSECURITYDESCRIPTORDACL($PSD)
  1487. EndFunc
  1488. Func _GETOBJECTOWNER($ONAME, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT, $FORMAT = 0)
  1489.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1490.     Local $PSD = _GETOBJECTSECURITYDESCRIPTOR($ONAME, $_SE_OBJECT_TYPE)
  1491.     If Not $PSD Then Return SetError(1, 0, 0)
  1492.     Return _GETSECURITYDESCRIPTOROWNER($PSD, $FORMAT)
  1493. EndFunc
  1494. Func _SETOBJECTOWNER($ONAME, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT, $ACCOUNTNAME = "Administrators")
  1495.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1496.     Local $SID = _GETSIDSTRUCT($ACCOUNTNAME), $ARET
  1497.     Local $PSID = DllStructGetPtr($SID)
  1498.     If IsPtr($ONAME) Then
  1499.         $ARET = DllCall($H__ADVAPI32DLL, "dword", "SetSecurityInfo", "handle", $ONAME, "dword", $_SE_OBJECT_TYPE, "dword", 1, "ptr", $PSID, "ptr", 0, "ptr", 0, "ptr", 0)
  1500.     Else
  1501.         If $_SE_OBJECT_TYPE = $SE_REGISTRY_KEY Then $ONAME = _SECURITY_REGKEYNAME($ONAME)
  1502.         $ARET = DllCall($H__ADVAPI32DLL, "DWORD", "SetNamedSecurityInfo", "str", $ONAME, "dword", $_SE_OBJECT_TYPE, "DWORD", 1, "ptr", $PSID, "ptr", 0, "ptr", 0, "ptr", 0)
  1503.     EndIf
  1504.     If @error Then Return SetError(@error, 0, False)
  1505.     Return SetError($ARET[0], 0, Number($ARET[0] = 0))
  1506. EndFunc
  1507. Func _GETSECURITYDESCRIPTOROWNER(ByRef $PSECDESCRIPTOR, $FORMAT = 0)
  1508.     If Not IsPtr($PSECDESCRIPTOR) Then Return SetError(1, 0, 0)
  1509.     Local $ARET = DllCall($H__ADVAPI32DLL, "bool", "GetSecurityDescriptorOwner", "ptr", $PSECDESCRIPTOR, "ptr*", 0, "bool*", 0)
  1510.     If @error Then Return SetError(@error, 0, "")
  1511.     If $FORMAT = 1 Then Return $ARET[2]
  1512.     Return _SIDTOSTRINGSID($ARET[2])
  1513. EndFunc
  1514. Func _GETSECURITYDESCRIPTORGROUP(ByRef $PSECDESCRIPTOR, $FORMAT = 0)
  1515.     If Not IsPtr($PSECDESCRIPTOR) Then Return SetError(1, 0, 0)
  1516.     Local $ACALL = DllCall($H__ADVAPI32DLL, "BOOL", "GetSecurityDescriptorGroup", "ptr", $PSECDESCRIPTOR, "ptr*", 0, "bool*", 0)
  1517.     If @error Then Return SetError(@error, 0, 0)
  1518.     If $FORMAT = 1 Then Return $ACALL[2]
  1519.     Return _SIDTOSTRINGSID($ACALL[2])
  1520. EndFunc
  1521. Func _GETSECURITYDESCRIPTORDACL(ByRef $PSECDESCRIPTOR)
  1522.     If Not IsPtr($PSECDESCRIPTOR) Then Return SetError(1, 0, 0)
  1523.     Local $ARET = DllCall($H__ADVAPI32DLL, "bool", "GetSecurityDescriptorDacl", "ptr", $PSECDESCRIPTOR, "bool*", 0, "ptr*", 0, "bool*", 0)
  1524.     If @error Then Return SetError(@error, 0, 0)
  1525.     If Not $ARET[2] Then Return SetError(1, 0, 0)
  1526.     Return $ARET[3]
  1527. EndFunc
  1528. Func _GETSECURITYDESCRIPTORSACL(ByRef $PSECDESCRIPTOR)
  1529.     If Not IsPtr($PSECDESCRIPTOR) Then Return SetError(1, 0, 0)
  1530.     Local $ARET = DllCall($H__ADVAPI32DLL, "bool", "GetSecurityDescriptorSacl", "ptr", $PSECDESCRIPTOR, "bool*", 0, "ptr*", 0, "bool*", 0)
  1531.     If @error Then Return SetError(2, 0, 0)
  1532.     If Not $ARET[2] Then Return SetError(3, 0, 0)
  1533.     Return $ARET[3]
  1534. EndFunc
  1535. Func _GETOBJECTSECURITYDESCRIPTOR($ONAME, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT)
  1536.     Local $SECURITY_INFORMATION = BitOR($OWNER_SECURITY_INFORMATION, $GROUP_SECURITY_INFORMATION, $DACL_SECURITY_INFORMATION, $SACL_SECURITY_INFORMATION), $ARET
  1537.     If $RESOURCESSTATE = 0 Then _INITIATEPERMISSIONRESOURCES()
  1538.     If IsPtr($ONAME) Then
  1539.         $ARET = DllCall($H__ADVAPI32DLL, "DWORD", "GetSecurityInfo", "handle", $ONAME, "dword", $_SE_OBJECT_TYPE, "DWORD", $SECURITY_INFORMATION, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr*", 0)
  1540.     Else
  1541.         If $_SE_OBJECT_TYPE = $SE_REGISTRY_KEY Then $ONAME = _SECURITY_REGKEYNAME($ONAME)
  1542.         $ARET = DllCall($H__ADVAPI32DLL, "DWORD", "GetNamedSecurityInfo", "str", $ONAME, "dword", $_SE_OBJECT_TYPE, "DWORD", $SECURITY_INFORMATION, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr*", 0)
  1543.     EndIf
  1544.     If @error Then Return SetError(@error, 0, 0)
  1545.     Return SetError($ARET[0], 0, $ARET[8])
  1546. EndFunc
  1547. Func _GETOBJECTSTRINGSECURITYDESCRIPTOR($ONAME, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT)
  1548.     Local $PSECDESCRIPTOR = _GETOBJECTSECURITYDESCRIPTOR($ONAME, $_SE_OBJECT_TYPE)
  1549.     If $PSECDESCRIPTOR = 0 Then Return SetError(2, 0, "")
  1550.     Local $STRSECDESCRIPTOR = _CONVERTSECURITYDESCRIPTORTOSTRINGSECURITYDESCRIPTOR($PSECDESCRIPTOR)
  1551.     DllCall($H__KERNEL32DLL, "handle", "LocalFree", "handle", $PSECDESCRIPTOR)
  1552.     Return $STRSECDESCRIPTOR
  1553. EndFunc
  1554. Func _SETOBJECTSTRINGSECURITYDESCRIPTOR($ONAME, $STRSECDESCRIPTOR, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT)
  1555.     If Not IsString($STRSECDESCRIPTOR) Then Return SetError(1, 0, 0)
  1556.     Local $PSECDESCRIPTOR = _CONVERTSTRINGSECURITYDESCRIPTORTOSECURITYDESCRIPTOR($STRSECDESCRIPTOR)
  1557.     If $PSECDESCRIPTOR = 0 Then Return SetError(2, 0, 0)
  1558.     Return _SETOBJECTSECURITYDESCRIPTOR($ONAME, $PSECDESCRIPTOR, $_SE_OBJECT_TYPE)
  1559. EndFunc
  1560. Func _CONVERTSECURITYDESCRIPTORTOSTRINGSECURITYDESCRIPTOR(ByRef $PSECDESCRIPTOR)
  1561.     If Not IsPtr($PSECDESCRIPTOR) Then Return SetError(1, 0, 0)
  1562.     Local $SECURITY_INFORMATION = BitOR($DACL_SECURITY_INFORMATION, $OWNER_SECURITY_INFORMATION)
  1563.     Local $ARET = DllCall($H__ADVAPI32DLL, "bool", "ConvertSecurityDescriptorToStringSecurityDescriptor", "ptr", $PSECDESCRIPTOR, "DWORD", 1, "DWORD", $SECURITY_INFORMATION, "str*", 0, "ptr", 0)
  1564.     If @error Then Return SetError(1, 0, "")
  1565.     Return $ARET[4]
  1566. EndFunc
  1567. Func _CONVERTSTRINGSECURITYDESCRIPTORTOSECURITYDESCRIPTOR($STRSECDESCRIPTOR)
  1568.     If Not IsString($STRSECDESCRIPTOR) Then Return SetError(1, 0, 0)
  1569.     Local $ARET = DllCall($H__ADVAPI32DLL, "bool", "ConvertStringSecurityDescriptorToSecurityDescriptor", "str", $STRSECDESCRIPTOR, "DWORD", 1, "ptr*", 0, "ptr", 0)
  1570.     If @error Then Return SetError(1, 0, 0)
  1571.     Return $ARET[3]
  1572. EndFunc
  1573. Func _GETSIDSTRUCT($ACCOUNTNAME)
  1574.     If $ACCOUNTNAME = "TrustedInstaller" Then $ACCOUNTNAME = "NT SERVICE\TrustedInstaller"
  1575.     If $ACCOUNTNAME = "Everyone" Then
  1576.         Return _STRINGSIDTOSID("S-1-1-0")
  1577.     ElseIf $ACCOUNTNAME = "Authenticated Users" Then
  1578.         Return _STRINGSIDTOSID("S-1-5-11")
  1579.     ElseIf $ACCOUNTNAME = "System" Then
  1580.         Return _STRINGSIDTOSID("S-1-5-18")
  1581.     ElseIf $ACCOUNTNAME = "Administrators" Then
  1582.         Return _STRINGSIDTOSID("S-1-5-32-544")
  1583.     ElseIf $ACCOUNTNAME = "Users" Then
  1584.         Return _STRINGSIDTOSID("S-1-5-32-545")
  1585.     ElseIf $ACCOUNTNAME = "Guests" Then
  1586.         Return _STRINGSIDTOSID("S-1-5-32-546")
  1587.     ElseIf $ACCOUNTNAME = "Power Users" Then
  1588.         Return _STRINGSIDTOSID("S-1-5-32-547")
  1589.     ElseIf $ACCOUNTNAME = "Local Authority" Then
  1590.         Return _STRINGSIDTOSID("S-1-2")
  1591.     ElseIf $ACCOUNTNAME = "Creator Owner" Then
  1592.         Return _STRINGSIDTOSID("S-1-3-0")
  1593.     ElseIf $ACCOUNTNAME = "NT Authority" Then
  1594.         Return _STRINGSIDTOSID("S-1-5-1")
  1595.     ElseIf $ACCOUNTNAME = "Restricted" Then
  1596.         Return _STRINGSIDTOSID("S-1-5-12")
  1597.     ElseIf StringRegExp($ACCOUNTNAME, "\A(S-1-\d+(-\d+){0,5})\z") Then
  1598.         Return _STRINGSIDTOSID($ACCOUNTNAME)
  1599.     Else
  1600.         Local $SID = _LOOKUPACCOUNTNAME($ACCOUNTNAME)
  1601.         Return _STRINGSIDTOSID($SID)
  1602.     EndIf
  1603. EndFunc
  1604. Func _SECURITY_REGKEYNAME($REGKEY)
  1605.     If StringInStr($REGKEY, "\\") = 1 Then
  1606.         $REGKEY = StringRegExpReplace($REGKEY, "(?i)\\(HKEY_CLASSES_ROOT|HKCR)", "\CLASSES_ROOT")
  1607.         $REGKEY = StringRegExpReplace($REGKEY, "(?i)\\(HKEY_CURRENT_USER|HKCU)", "\CURRENT_USER")
  1608.         $REGKEY = StringRegExpReplace($REGKEY, "(?i)\\(HKEY_LOCAL_MACHINE|HKLM)", "\MACHINE")
  1609.         $REGKEY = StringRegExpReplace($REGKEY, "(?i)\\(HKEY_USERS|HKU)", "\USERS")
  1610.     Else
  1611.         $REGKEY = StringRegExpReplace($REGKEY, "(?i)\A(HKEY_CLASSES_ROOT|HKCR)", "CLASSES_ROOT")
  1612.         $REGKEY = StringRegExpReplace($REGKEY, "(?i)\A(HKEY_CURRENT_USER|HKCU)", "CURRENT_USER")
  1613.         $REGKEY = StringRegExpReplace($REGKEY, "(?i)\A(HKEY_LOCAL_MACHINE|HKLM)", "MACHINE")
  1614.         $REGKEY = StringRegExpReplace($REGKEY, "(?i)\A(HKEY_USERS|HKU)", "USERS")
  1615.     EndIf
  1616.     Return $REGKEY
  1617. EndFunc
  1618. Func _LOOKUPACCOUNTNAME($SACCOUNT, $SSYSTEM = "")
  1619.     Local $TDATA = DllStructCreate("byte SID[256]")
  1620.     Local $PSID = DllStructGetPtr($TDATA, "SID")
  1621.     Local $ARESULT = DllCall($H__ADVAPI32DLL, "bool", "LookupAccountNameW", "wstr", $SSYSTEM, "wstr", $SACCOUNT, "ptr", $PSID, "dword*", 256, "wstr", "", "dword*", 256, "int*", 0)
  1622.     If @error Then Return SetError(@error, @extended, 0)
  1623.     If Not $ARESULT[0] Then Return 0
  1624.     Return _SIDTOSTRINGSID($PSID)
  1625. EndFunc
  1626. Func _STRINGSIDTOSID($SSID)
  1627.     Local $ARESULT = DllCall($H__ADVAPI32DLL, "bool", "ConvertStringSidToSidW", "wstr", $SSID, "ptr*", 0)
  1628.     If @error Then Return SetError(@error, @extended, 0)
  1629.     If Not $ARESULT[0] Then Return 0
  1630.     Local $ISIZE = _GETLENGTHSID($ARESULT[2])
  1631.     Local $TBUFFER = DllStructCreate("byte Data[" & $ISIZE & "]", $ARESULT[2])
  1632.     Local $TSID = DllStructCreate("byte Data[" & $ISIZE & "]")
  1633.     DllStructSetData($TSID, "Data", DllStructGetData($TBUFFER, "Data"))
  1634.     DllCall($H__KERNEL32DLL, "ptr", "LocalFree", "ptr", $ARESULT[2])
  1635.     Return $TSID
  1636. EndFunc
  1637. Func _GETLENGTHSID($PSID)
  1638.     If Not _ISVALIDSID($PSID) Then Return SetError(-1, 0, "")
  1639.     Local $ARESULT = DllCall($H__ADVAPI32DLL, "dword", "GetLengthSid", "ptr", $PSID)
  1640.     If @error Then Return SetError(@error, @extended, 0)
  1641.     Return $ARESULT[0]
  1642. EndFunc
  1643. Func _SIDTOSTRINGSID($PSID)
  1644.     If Not _ISVALIDSID($PSID) Then Return SetError(-1, 0, "")
  1645.     Local $ARESULT = DllCall($H__ADVAPI32DLL, "int", "ConvertSidToStringSidW", "ptr", $PSID, "ptr*", 0)
  1646.     If @error Then Return SetError(@error, @extended, "")
  1647.     If Not $ARESULT[0] Then Return ""
  1648.     Local $TBUFFER = DllStructCreate("wchar Text[256]", $ARESULT[2])
  1649.     Local $SSID = DllStructGetData($TBUFFER, "Text")
  1650.     DllCall($H__KERNEL32DLL, "ptr", "LocalFree", "ptr", $ARESULT[2])
  1651.     Return $SSID
  1652. EndFunc
  1653. Func _ISVALIDSID($PSID)
  1654.     Local $ARESULT = DllCall($H__ADVAPI32DLL, "bool", "IsValidSid", "ptr", $PSID)
  1655.     If @error Then Return SetError(@error, @extended, False)
  1656.     Return $ARESULT[0]
  1657. EndFunc
  1658. Func _SETPRIVILEGE($AVPRIVILEGE)
  1659.     Local $IDIM = UBound($AVPRIVILEGE, 0), $AVPREVSTATE[1][2]
  1660.     If Not ($IDIM <= 2 And UBound($AVPRIVILEGE, $IDIM) = 2) Then Return SetError(1300, 0, $AVPREVSTATE)
  1661.     If $IDIM = 1 Then
  1662.         Local $AVTEMP[1][2]
  1663.         $AVTEMP[0][0] = $AVPRIVILEGE[0]
  1664.         $AVTEMP[0][1] = $AVPRIVILEGE[1]
  1665.         $AVPRIVILEGE = $AVTEMP
  1666.         $AVTEMP = 0
  1667.     EndIf
  1668.     Local $K, $TAGTP = "dword", $ITOKENS = UBound($AVPRIVILEGE, 1)
  1669.     Do
  1670.         $K += 1
  1671.         $TAGTP &= ";dword;long;dword"
  1672.     Until $K = $ITOKENS
  1673.     Local $TCURRSTATE, $TPREVSTATE, $PPREVSTATE, $TLUID, $AHGCP, $AVOPT, $AIGLE
  1674.     $TCURRSTATE = DllStructCreate($TAGTP)
  1675.     $TPREVSTATE = DllStructCreate($TAGTP)
  1676.     $PPREVSTATE = DllStructGetPtr($TPREVSTATE)
  1677.     $TLUID = DllStructCreate("dword;long")
  1678.     DllStructSetData($TCURRSTATE, 1, $ITOKENS)
  1679.     For $I = 0 To $ITOKENS - 1
  1680.         DllCall($H__ADVAPI32DLL, "int", "LookupPrivilegeValue", "str", "", "str", $AVPRIVILEGE[$I][0], "ptr", DllStructGetPtr($TLUID))
  1681.         DllStructSetData($TCURRSTATE, 3 * $I + 2, DllStructGetData($TLUID, 1))
  1682.         DllStructSetData($TCURRSTATE, 3 * $I + 3, DllStructGetData($TLUID, 2))
  1683.         DllStructSetData($TCURRSTATE, 3 * $I + 4, $AVPRIVILEGE[$I][1])
  1684.     Next
  1685.     $AHGCP = DllCall($H__KERNEL32DLL, "hwnd", "GetCurrentProcess")
  1686.     $AVOPT = DllCall($H__ADVAPI32DLL, "int", "OpenProcessToken", "hwnd", $AHGCP[0], "dword", BitOR(32, 8), "hwnd*", 0)
  1687.     DllCall($H__ADVAPI32DLL, "int", "AdjustTokenPrivileges", "hwnd", $AVOPT[3], "int", False, "ptr", DllStructGetPtr($TCURRSTATE), "dword", DllStructGetSize($TCURRSTATE), "ptr", $PPREVSTATE, "dword*", 0)
  1688.     $AIGLE = DllCall($H__KERNEL32DLL, "dword", "GetLastError")
  1689.     DllCall($H__KERNEL32DLL, "int", "CloseHandle", "hwnd", $AVOPT[3])
  1690.     Local $ICOUNT = DllStructGetData($TPREVSTATE, 1)
  1691.     If $ICOUNT > 0 Then
  1692.         Local $PLUID, $AVLPN, $TNAME, $AVPREVSTATE[$ICOUNT][2]
  1693.         For $I = 0 To $ICOUNT - 1
  1694.             $PLUID = $PPREVSTATE + 12 * $I + 4
  1695.             $AVLPN = DllCall($H__ADVAPI32DLL, "int", "LookupPrivilegeName", "str", "", "ptr", $PLUID, "ptr", 0, "dword*", 0)
  1696.             $TNAME = DllStructCreate("char[" & $AVLPN[4] & "]")
  1697.             DllCall($H__ADVAPI32DLL, "int", "LookupPrivilegeName", "str", "", "ptr", $PLUID, "ptr", DllStructGetPtr($TNAME), "dword*", DllStructGetSize($TNAME))
  1698.             $AVPREVSTATE[$I][0] = DllStructGetData($TNAME, 1)
  1699.             $AVPREVSTATE[$I][1] = DllStructGetData($TPREVSTATE, 3 * $I + 4)
  1700.         Next
  1701.     EndIf
  1702.     Return SetError($AIGLE[0], 0, $AVPREVSTATE)
  1703. EndFunc
  1704. Global Const $TAGPOINT = "struct;long X;long Y;endstruct"
  1705. Global Const $TAGRECT = "struct;long Left;long Top;long Right;long Bottom;endstruct"
  1706. Global Const $TAGSIZE = "struct;long X;long Y;endstruct"
  1707. Global Const $TAGMARGINS = "int cxLeftWidth;int cxRightWidth;int cyTopHeight;int cyBottomHeight"
  1708. Global Const $TAGFILETIME = "struct;dword Lo;dword Hi;endstruct"
  1709. Global Const $TAGSYSTEMTIME = "struct;word Year;word Month;word Dow;word Day;word Hour;word Minute;word Second;word MSeconds;endstruct"
  1710. Global Const $TAGTIME_ZONE_INFORMATION = "struct;long Bias;wchar StdName[32];word StdDate[8];long StdBias;wchar DayName[32];word DayDate[8];long DayBias;endstruct"
  1711. Global Const $TAGNMHDR = "struct;hwnd hWndFrom;uint_ptr IDFrom;INT Code;endstruct"
  1712. Global Const $TAGCOMBOBOXEXITEM = "uint Mask;int_ptr Item;ptr Text;int TextMax;int Image;int SelectedImage;int OverlayImage;" & "int Indent;lparam Param"
  1713. Global Const $TAGNMCBEDRAGBEGIN = $TAGNMHDR & ";int ItemID;wchar szText[260]"
  1714. Global Const $TAGNMCBEENDEDIT = $TAGNMHDR & ";bool fChanged;int NewSelection;wchar szText[260];int Why"
  1715. Global Const $TAGNMCOMBOBOXEX = $TAGNMHDR & ";uint Mask;int_ptr Item;ptr Text;int TextMax;int Image;" & "int SelectedImage;int OverlayImage;int Indent;lparam Param"
  1716. Global Const $TAGDTPRANGE = "word MinYear;word MinMonth;word MinDOW;word MinDay;word MinHour;word MinMinute;" & "word MinSecond;word MinMSecond;word MaxYear;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;" & "word MaxMinute;word MaxSecond;word MaxMSecond;bool MinValid;bool MaxValid"
  1717. Global Const $TAGNMDATETIMECHANGE = $TAGNMHDR & ";dword Flag;" & $TAGSYSTEMTIME
  1718. Global Const $TAGNMDATETIMEFORMAT = $TAGNMHDR & ";ptr Format;" & $TAGSYSTEMTIME & ";ptr pDisplay;wchar Display[64]"
  1719. Global Const $TAGNMDATETIMEFORMATQUERY = $TAGNMHDR & ";ptr Format;struct;long SizeX;long SizeY;endstruct"
  1720. Global Const $TAGNMDATETIMEKEYDOWN = $TAGNMHDR & ";int VirtKey;ptr Format;" & $TAGSYSTEMTIME
  1721. Global Const $TAGNMDATETIMESTRING = $TAGNMHDR & ";ptr UserString;" & $TAGSYSTEMTIME & ";dword Flags"
  1722. Global Const $TAGEVENTLOGRECORD = "dword Length;dword Reserved;dword RecordNumber;dword TimeGenerated;dword TimeWritten;dword EventID;" & "word EventType;word NumStrings;word EventCategory;word ReservedFlags;dword ClosingRecordNumber;dword StringOffset;" & "dword UserSidLength;dword UserSidOffset;dword DataLength;dword DataOffset"
  1723. Global Const $TAGGDIPBITMAPDATA = "uint Width;uint Height;int Stride;int Format;ptr Scan0;uint_ptr Reserved"
  1724. Global Const $TAGGDIPENCODERPARAM = "byte GUID[16];ulong Count;ulong Type;ptr Values"
  1725. Global Const $TAGGDIPENCODERPARAMS = "uint Count;byte Params[1]"
  1726. Global Const $TAGGDIPRECTF = "float X;float Y;float Width;float Height"
  1727. Global Const $TAGGDIPSTARTUPINPUT = "uint Version;ptr Callback;bool NoThread;bool NoCodecs"
  1728. Global Const $TAGGDIPSTARTUPOUTPUT = "ptr HookProc;ptr UnhookProc"
  1729. Global Const $TAGGDIPIMAGECODECINFO = "byte CLSID[16];byte FormatID[16];ptr CodecName;ptr DllName;ptr FormatDesc;ptr FileExt;" & "ptr MimeType;dword Flags;dword Version;dword SigCount;dword SigSize;ptr SigPattern;ptr SigMask"
  1730. Global Const $TAGGDIPPENCODERPARAMS = "uint Count;byte Params[1]"
  1731. Global Const $TAGHDITEM = "uint Mask;int XY;ptr Text;handle hBMP;int TextMax;int Fmt;lparam Param;int Image;int Order;uint Type;ptr pFilter;uint State"
  1732. Global Const $TAGNMHDDISPINFO = $TAGNMHDR & ";int Item;uint Mask;ptr Text;int TextMax;int Image;lparam lParam"
  1733. Global Const $TAGNMHDFILTERBTNCLICK = $TAGNMHDR & ";int Item;" & $TAGRECT
  1734. Global Const $TAGNMHEADER = $TAGNMHDR & ";int Item;int Button;ptr pItem"
  1735. Global Const $TAGGETIPADDRESS = "byte Field4;byte Field3;byte Field2;byte Field1"
  1736. Global Const $TAGNMIPADDRESS = $TAGNMHDR & ";int Field;int Value"
  1737. Global Const $TAGLVFINDINFO = "struct;uint Flags;ptr Text;lparam Param;" & $TAGPOINT & ";uint Direction;endstruct"
  1738. Global Const $TAGLVHITTESTINFO = $TAGPOINT & ";uint Flags;int Item;int SubItem;int iGroup"
  1739. Global Const $TAGLVITEM = "struct;uint Mask;int Item;int SubItem;uint State;uint StateMask;ptr Text;int TextMax;int Image;lparam Param;" & "int Indent;int GroupID;uint Columns;ptr pColumns;ptr piColFmt;int iGroup;endstruct"
  1740. Global Const $TAGNMLISTVIEW = $TAGNMHDR & ";int Item;int SubItem;uint NewState;uint OldState;uint Changed;" & "struct;long ActionX;long ActionY;endstruct;lparam Param"
  1741. Global Const $TAGNMLVCUSTOMDRAW = "struct;" & $TAGNMHDR & ";dword dwDrawStage;handle hdc;" & $TAGRECT & ";dword_ptr dwItemSpec;uint uItemState;lparam lItemlParam;endstruct" & ";dword clrText;dword clrTextBk;int iSubItem;dword dwItemType;dword clrFace;int iIconEffect;" & "int iIconPhase;int iPartId;int iStateId;struct;long TextLeft;long TextTop;long TextRight;long TextBottom;endstruct;uint uAlign"
  1742. Global Const $TAGNMLVDISPINFO = $TAGNMHDR & ";" & $TAGLVITEM
  1743. Global Const $TAGNMLVFINDITEM = $TAGNMHDR & ";int Start;" & $TAGLVFINDINFO
  1744. Global Const $TAGNMLVGETINFOTIP = $TAGNMHDR & ";dword Flags;ptr Text;int TextMax;int Item;int SubItem;lparam lParam"
  1745. Global Const $TAGNMITEMACTIVATE = $TAGNMHDR & ";int Index;int SubItem;uint NewState;uint OldState;uint Changed;" & $TAGPOINT & ";lparam lParam;uint KeyFlags"
  1746. Global Const $TAGNMLVKEYDOWN = "align 1;" & $TAGNMHDR & ";word VKey;uint Flags"
  1747. Global Const $TAGNMLVSCROLL = $TAGNMHDR & ";int DX;int DY"
  1748. Global Const $TAGMCHITTESTINFO = "uint Size;" & $TAGPOINT & ";uint Hit;" & $TAGSYSTEMTIME & ";" & $TAGRECT & ";int iOffset;int iRow;int iCol"
  1749. Global Const $TAGMCMONTHRANGE = "word MinYear;word MinMonth;word MinDOW;word MinDay;word MinHour;word MinMinute;word MinSecond;" & "word MinMSeconds;word MaxYear;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;word MaxMinute;word MaxSecond;" & "word MaxMSeconds;short Span"
  1750. Global Const $TAGMCRANGE = "word MinYear;word MinMonth;word MinDOW;word MinDay;word MinHour;word MinMinute;word MinSecond;" & "word MinMSeconds;word MaxYear;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;word MaxMinute;word MaxSecond;" & "word MaxMSeconds;short MinSet;short MaxSet"
  1751. Global Const $TAGMCSELRANGE = "word MinYear;word MinMonth;word MinDOW;word MinDay;word MinHour;word MinMinute;word MinSecond;" & "word MinMSeconds;word MaxYear;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;word MaxMinute;word MaxSecond;" & "word MaxMSeconds"
  1752. Global Const $TAGNMDAYSTATE = $TAGNMHDR & ";" & $TAGSYSTEMTIME & ";int DayState;ptr pDayState"
  1753. Global Const $TAGNMSELCHANGE = $TAGNMHDR & ";struct;word BegYear;word BegMonth;word BegDOW;word BegDay;word BegHour;word BegMinute;word BegSecond;word BegMSeconds;endstruct;" & "struct;word EndYear;word EndMonth;word EndDOW;word EndDay;word EndHour;word EndMinute;word EndSecond;word EndMSeconds;endstruct"
  1754. Global Const $TAGNMOBJECTNOTIFY = $TAGNMHDR & ";int Item;ptr piid;ptr pObject;long Result;dword dwFlags"
  1755. Global Const $TAGNMTCKEYDOWN = "align 1;" & $TAGNMHDR & ";word VKey;uint Flags"
  1756. Global Const $TAGTVITEM = "struct;uint Mask;handle hItem;uint State;uint StateMask;ptr Text;int TextMax;int Image;int SelectedImage;" & "int Children;lparam Param;endstruct"
  1757. Global Const $TAGTVITEMEX = "struct;" & $TAGTVITEM & ";int Integral;uint uStateEx;hwnd hwnd;int iExpandedImage;int iReserved;endstruct"
  1758. Global Const $TAGNMTREEVIEW = $TAGNMHDR & ";uint Action;" & "struct;uint OldMask;handle OldhItem;uint OldState;uint OldStateMask;" & "ptr OldText;int OldTextMax;int OldImage;int OldSelectedImage;int OldChildren;lparam OldParam;endstruct;" & "struct;uint NewMask;handle NewhItem;uint NewState;uint NewStateMask;" & "ptr NewText;int NewTextMax;int NewImage;int NewSelectedImage;int NewChildren;lparam NewParam;endstruct;" & "struct;long PointX;long PointY;endstruct"
  1759. Global Const $TAGNMTVCUSTOMDRAW = "struct;" & $TAGNMHDR & ";dword DrawStage;handle HDC;" & $TAGRECT & ";dword_ptr ItemSpec;uint ItemState;lparam ItemParam;endstruct" & ";dword ClrText;dword ClrTextBk;int Level"
  1760. Global Const $TAGNMTVDISPINFO = $TAGNMHDR & ";" & $TAGTVITEM
  1761. Global Const $TAGNMTVGETINFOTIP = $TAGNMHDR & ";ptr Text;int TextMax;handle hItem;lparam lParam"
  1762. Global Const $TAGTVHITTESTINFO = $TAGPOINT & ";uint Flags;handle Item"
  1763. Global Const $TAGNMTVKEYDOWN = "align 1;" & $TAGNMHDR & ";word VKey;uint Flags"
  1764. Global Const $TAGNMMOUSE = $TAGNMHDR & ";dword_ptr ItemSpec;dword_ptr ItemData;" & $TAGPOINT & ";lparam HitInfo"
  1765. Global Const $TAGTOKEN_PRIVILEGES = "dword Count;align 4;int64 LUID;dword Attributes"
  1766. Global Const $TAGIMAGEINFO = "handle hBitmap;handle hMask;int Unused1;int Unused2;" & $TAGRECT
  1767. Global Const $TAGMENUINFO = "dword Size;INT Mask;dword Style;uint YMax;handle hBack;dword ContextHelpID;ulong_ptr MenuData"
  1768. Global Const $TAGMENUITEMINFO = "uint Size;uint Mask;uint Type;uint State;uint ID;handle SubMenu;handle BmpChecked;handle BmpUnchecked;" & "ulong_ptr ItemData;ptr TypeData;uint CCH;handle BmpItem"
  1769. Global Const $TAGREBARBANDINFO = "uint cbSize;uint fMask;uint fStyle;dword clrFore;dword clrBack;ptr lpText;uint cch;" & "int iImage;hwnd hwndChild;uint cxMinChild;uint cyMinChild;uint cx;handle hbmBack;uint wID;uint cyChild;uint cyMaxChild;" & "uint cyIntegral;uint cxIdeal;lparam lParam;uint cxHeader;" & $TAGRECT & ";uint uChevronState"
  1770. Global Const $TAGNMREBARAUTOBREAK = $TAGNMHDR & ";uint uBand;uint wID;lparam lParam;uint uMsg;uint fStyleCurrent;bool fAutoBreak"
  1771. Global Const $TAGNMRBAUTOSIZE = $TAGNMHDR & ";bool fChanged;" & "struct;long TargetLeft;long TargetTop;long TargetRight;long TargetBottom;endstruct;" & "struct;long ActualLeft;long ActualTop;long ActualRight;long ActualBottom;endstruct"
  1772. Global Const $TAGNMREBAR = $TAGNMHDR & ";dword dwMask;uint uBand;uint fStyle;uint wID;lparam lParam"
  1773. Global Const $TAGNMREBARCHEVRON = $TAGNMHDR & ";uint uBand;uint wID;lparam lParam;" & $TAGRECT & ";lparam lParamNM"
  1774. Global Const $TAGNMREBARCHILDSIZE = $TAGNMHDR & ";uint uBand;uint wID;" & "struct;long CLeft;long CTop;long CRight;long CBottom;endstruct;" & "struct;long BLeft;long BTop;long BRight;long BBottom;endstruct"
  1775. Global Const $TAGCOLORSCHEME = "dword Size;dword BtnHighlight;dword BtnShadow"
  1776. Global Const $TAGNMTOOLBAR = $TAGNMHDR & ";int iItem;" & "struct;int iBitmap;int idCommand;byte fsState;byte fsStyle;dword_ptr dwData;int_ptr iString;endstruct" & ";int cchText;ptr pszText;" & $TAGRECT
  1777. Global Const $TAGNMTBHOTITEM = $TAGNMHDR & ";int idOld;int idNew;dword dwFlags"
  1778. Global Const $TAGTBBUTTON = "int Bitmap;int Command;byte State;byte Style;align;dword_ptr Param;int_ptr String"
  1779. Global Const $TAGTBBUTTONINFO = "uint Size;dword Mask;int Command;int Image;byte State;byte Style;word CX;dword_ptr Param;ptr Text;int TextMax"
  1780. Global Const $TAGNETRESOURCE = "dword Scope;dword Type;dword DisplayType;dword Usage;ptr LocalName;ptr RemoteName;ptr Comment;ptr Provider"
  1781. Global Const $TAGOVERLAPPED = "ulong_ptr Internal;ulong_ptr InternalHigh;struct;dword Offset;dword OffsetHigh;endstruct;handle hEvent"
  1782. Global Const $TAGOPENFILENAME = "dword StructSize;hwnd hwndOwner;handle hInstance;ptr lpstrFilter;ptr lpstrCustomFilter;" & "dword nMaxCustFilter;dword nFilterIndex;ptr lpstrFile;dword nMaxFile;ptr lpstrFileTitle;dword nMaxFileTitle;" & "ptr lpstrInitialDir;ptr lpstrTitle;dword Flags;word nFileOffset;word nFileExtension;ptr lpstrDefExt;lparam lCustData;" & "ptr lpfnHook;ptr lpTemplateName;ptr pvReserved;dword dwReserved;dword FlagsEx"
  1783. Global Const $TAGBITMAPINFO = "struct;dword Size;long Width;long Height;word Planes;word BitCount;dword Compression;dword SizeImage;" & "long XPelsPerMeter;long YPelsPerMeter;dword ClrUsed;dword ClrImportant;endstruct;dword RGBQuad"
  1784. Global Const $TAGBLENDFUNCTION = "byte Op;byte Flags;byte Alpha;byte Format"
  1785. Global Const $TAGGUID = "ulong Data1;ushort Data2;ushort Data3;byte Data4[8]"
  1786. Global Const $TAGWINDOWPLACEMENT = "uint length;uint flags;uint showCmd;long ptMinPosition[2];long ptMaxPosition[2];long rcNormalPosition[4]"
  1787. Global Const $TAGWINDOWPOS = "hwnd hWnd;hwnd InsertAfter;int X;int Y;int CX;int CY;uint Flags"
  1788. Global Const $TAGSCROLLINFO = "uint cbSize;uint fMask;int nMin;int nMax;uint nPage;int nPos;int nTrackPos"
  1789. Global Const $TAGSCROLLBARINFO = "dword cbSize;" & $TAGRECT & ";int dxyLineButton;int xyThumbTop;" & "int xyThumbBottom;int reserved;dword rgstate[6]"
  1790. Global Const $TAGLOGFONT = "long Height;long Width;long Escapement;long Orientation;long Weight;byte Italic;byte Underline;" & "byte Strikeout;byte CharSet;byte OutPrecision;byte ClipPrecision;byte Quality;byte PitchAndFamily;wchar FaceName[32]"
  1791. Global Const $TAGKBDLLHOOKSTRUCT = "dword vkCode;dword scanCode;dword flags;dword time;ulong_ptr dwExtraInfo"
  1792. Global Const $TAGPROCESS_INFORMATION = "handle hProcess;handle hThread;dword ProcessID;dword ThreadID"
  1793. Global Const $TAGSTARTUPINFO = "dword Size;ptr Reserved1;ptr Desktop;ptr Title;dword X;dword Y;dword XSize;dword YSize;dword XCountChars;" & "dword YCountChars;dword FillAttribute;dword Flags;word ShowWindow;word Reserved2;ptr Reserved3;handle StdInput;" & "handle StdOutput;handle StdError"
  1794. Global Const $TAGSECURITY_ATTRIBUTES = "dword Length;ptr Descriptor;bool InheritHandle"
  1795. 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]"
  1796. Global Const $TAGTEXTMETRIC = "long tmHeight;long tmAscent;long tmDescent;long tmInternalLeading;long tmExternalLeading;" & "long tmAveCharWidth;long tmMaxCharWidth;long tmWeight;long tmOverhang;long tmDigitizedAspectX;long tmDigitizedAspectY;" & "wchar tmFirstChar;wchar tmLastChar;wchar tmDefaultChar;wchar tmBreakChar;byte tmItalic;byte tmUnderlined;byte tmStruckOut;" & "byte tmPitchAndFamily;byte tmCharSet"
  1797. Func _WinAPI_GetLastError($CURERR = @error, $CUREXT = @extended)
  1798.     Local $ARESULT = DllCall("kernel32.dll", "dword", "GetLastError")
  1799.     Return SetError($CURERR, $CUREXT, $ARESULT[0])
  1800. EndFunc
  1801. Func _WinAPI_SetLastError($IERRCODE, $CURERR = @error, $CUREXT = @extended)
  1802.     DllCall("kernel32.dll", "none", "SetLastError", "dword", $IERRCODE)
  1803.     Return SetError($CURERR, $CUREXT)
  1804. EndFunc
  1805. Func _SendMessage($HWND, $IMSG, $WPARAM = 0, $LPARAM = 0, $IRETURN = 0, $WPARAMTYPE = "wparam", $LPARAMTYPE = "lparam", $SRETURNTYPE = "lresult")
  1806.     Local $ARESULT = DllCall("user32.dll", $SRETURNTYPE, "SendMessageW", "hwnd", $HWND, "uint", $IMSG, $WPARAMTYPE, $WPARAM, $LPARAMTYPE, $LPARAM)
  1807.     If @error Then Return SetError(@error, @extended, "")
  1808.     If $IRETURN >= 0 And $IRETURN <= 4 Then Return $ARESULT[$IRETURN]
  1809.     Return $ARESULT
  1810. EndFunc
  1811. Func _SendMessageA($HWND, $IMSG, $WPARAM = 0, $LPARAM = 0, $IRETURN = 0, $WPARAMTYPE = "wparam", $LPARAMTYPE = "lparam", $SRETURNTYPE = "lresult")
  1812.     Local $ARESULT = DllCall("user32.dll", $SRETURNTYPE, "SendMessageA", "hwnd", $HWND, "uint", $IMSG, $WPARAMTYPE, $WPARAM, $LPARAMTYPE, $LPARAM)
  1813.     If @error Then Return SetError(@error, @extended, "")
  1814.     If $IRETURN >= 0 And $IRETURN <= 4 Then Return $ARESULT[$IRETURN]
  1815.     Return $ARESULT
  1816. EndFunc
  1817. Global $__GAINPROCESS_WINAPI[64][2] = [[0, 0]]
  1818. Global $__GAWINLIST_WINAPI[64][2] = [[0, 0]]
  1819. Global Const $__WINAPICONSTANT_WM_SETFONT = 48
  1820. Global Const $__WINAPICONSTANT_FW_NORMAL = 400
  1821. Global Const $__WINAPICONSTANT_DEFAULT_CHARSET = 1
  1822. Global Const $__WINAPICONSTANT_OUT_DEFAULT_PRECIS = 0
  1823. Global Const $__WINAPICONSTANT_CLIP_DEFAULT_PRECIS = 0
  1824. Global Const $__WINAPICONSTANT_DEFAULT_QUALITY = 0
  1825. Global Const $__WINAPICONSTANT_FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
  1826. Global Const $__WINAPICONSTANT_FORMAT_MESSAGE_FROM_SYSTEM = 4096
  1827. Global Const $__WINAPICONSTANT_LOGPIXELSX = 88
  1828. Global Const $__WINAPICONSTANT_LOGPIXELSY = 90
  1829. Global Const $HGDI_ERROR = Ptr(-1)
  1830. Global Const $INVALID_HANDLE_VALUE = Ptr(-1)
  1831. Global Const $CLR_INVALID = -1
  1832. Global Const $__WINAPICONSTANT_FLASHW_CAPTION = 1
  1833. Global Const $__WINAPICONSTANT_FLASHW_TRAY = 2
  1834. Global Const $__WINAPICONSTANT_FLASHW_TIMER = 4
  1835. Global Const $__WINAPICONSTANT_FLASHW_TIMERNOFG = 12
  1836. Global Const $__WINAPICONSTANT_GW_HWNDNEXT = 2
  1837. Global Const $__WINAPICONSTANT_GW_CHILD = 5
  1838. Global Const $__WINAPICONSTANT_DI_MASK = 1
  1839. Global Const $__WINAPICONSTANT_DI_IMAGE = 2
  1840. Global Const $__WINAPICONSTANT_DI_NORMAL = 3
  1841. Global Const $__WINAPICONSTANT_DI_COMPAT = 4
  1842. Global Const $__WINAPICONSTANT_DI_DEFAULTSIZE = 8
  1843. Global Const $__WINAPICONSTANT_DI_NOMIRROR = 16
  1844. Global Const $__WINAPICONSTANT_DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = 1
  1845. Global Const $__WINAPICONSTANT_DISPLAY_DEVICE_PRIMARY_DEVICE = 4
  1846. Global Const $__WINAPICONSTANT_DISPLAY_DEVICE_MIRRORING_DRIVER = 8
  1847. Global Const $__WINAPICONSTANT_DISPLAY_DEVICE_VGA_COMPATIBLE = 16
  1848. Global Const $__WINAPICONSTANT_DISPLAY_DEVICE_REMOVABLE = 32
  1849. Global Const $__WINAPICONSTANT_DISPLAY_DEVICE_MODESPRUNED = 134217728
  1850. Global Const $NULL_BRUSH = 5
  1851. Global Const $NULL_PEN = 8
  1852. Global Const $BLACK_BRUSH = 4
  1853. Global Const $DKGRAY_BRUSH = 3
  1854. Global Const $DC_BRUSH = 18
  1855. Global Const $GRAY_BRUSH = 2
  1856. Global Const $HOLLOW_BRUSH = $NULL_BRUSH
  1857. Global Const $LTGRAY_BRUSH = 1
  1858. Global Const $WHITE_BRUSH = 0
  1859. Global Const $BLACK_PEN = 7
  1860. Global Const $DC_PEN = 19
  1861. Global Const $WHITE_PEN = 6
  1862. Global Const $ANSI_FIXED_FONT = 11
  1863. Global Const $ANSI_VAR_FONT = 12
  1864. Global Const $DEVICE_DEFAULT_FONT = 14
  1865. Global Const $DEFAULT_GUI_FONT = 17
  1866. Global Const $OEM_FIXED_FONT = 10
  1867. Global Const $SYSTEM_FONT = 13
  1868. Global Const $SYSTEM_FIXED_FONT = 16
  1869. Global Const $DEFAULT_PALETTE = 15
  1870. Global Const $MB_PRECOMPOSED = 1
  1871. Global Const $MB_COMPOSITE = 2
  1872. Global Const $MB_USEGLYPHCHARS = 4
  1873. Global Const $ULW_ALPHA = 2
  1874. Global Const $ULW_COLORKEY = 1
  1875. Global Const $ULW_OPAQUE = 4
  1876. Global Const $WH_CALLWNDPROC = 4
  1877. Global Const $WH_CALLWNDPROCRET = 12
  1878. Global Const $WH_CBT = 5
  1879. Global Const $WH_DEBUG = 9
  1880. Global Const $WH_FOREGROUNDIDLE = 11
  1881. Global Const $WH_GETMESSAGE = 3
  1882. Global Const $WH_JOURNALPLAYBACK = 1
  1883. Global Const $WH_JOURNALRECORD = 0
  1884. Global Const $WH_KEYBOARD = 2
  1885. Global Const $WH_KEYBOARD_LL = 13
  1886. Global Const $WH_MOUSE = 7
  1887. Global Const $WH_MOUSE_LL = 14
  1888. Global Const $WH_MSGFILTER = -1
  1889. Global Const $WH_SHELL = 10
  1890. Global Const $WH_SYSMSGFILTER = 6
  1891. Global Const $WPF_ASYNCWINDOWPLACEMENT = 4
  1892. Global Const $WPF_RESTORETOMAXIMIZED = 2
  1893. Global Const $WPF_SETMINPOSITION = 1
  1894. Global Const $KF_EXTENDED = 256
  1895. Global Const $KF_ALTDOWN = 8192
  1896. Global Const $KF_UP = 32768
  1897. Global Const $LLKHF_EXTENDED = BitShift($KF_EXTENDED, 8)
  1898. Global Const $LLKHF_INJECTED = 16
  1899. Global Const $LLKHF_ALTDOWN = BitShift($KF_ALTDOWN, 8)
  1900. Global Const $LLKHF_UP = BitShift($KF_UP, 8)
  1901. Global Const $OFN_ALLOWMULTISELECT = 512
  1902. Global Const $OFN_CREATEPROMPT = 8192
  1903. Global Const $OFN_DONTADDTORECENT = 33554432
  1904. Global Const $OFN_ENABLEHOOK = 32
  1905. Global Const $OFN_ENABLEINCLUDENOTIFY = 4194304
  1906. Global Const $OFN_ENABLESIZING = 8388608
  1907. Global Const $OFN_ENABLETEMPLATE = 64
  1908. Global Const $OFN_ENABLETEMPLATEHANDLE = 128
  1909. Global Const $OFN_EXPLORER = 524288
  1910. Global Const $OFN_EXTENSIONDIFFERENT = 1024
  1911. Global Const $OFN_FILEMUSTEXIST = 4096
  1912. Global Const $OFN_FORCESHOWHIDDEN = 268435456
  1913. Global Const $OFN_HIDEREADONLY = 4
  1914. Global Const $OFN_LONGNAMES = 2097152
  1915. Global Const $OFN_NOCHANGEDIR = 8
  1916. Global Const $OFN_NODEREFERENCELINKS = 1048576
  1917. Global Const $OFN_NOLONGNAMES = 262144
  1918. Global Const $OFN_NONETWORKBUTTON = 131072
  1919. Global Const $OFN_NOREADONLYRETURN = 32768
  1920. Global Const $OFN_NOTESTFILECREATE = 65536
  1921. Global Const $OFN_NOVALIDATE = 256
  1922. Global Const $OFN_OVERWRITEPROMPT = 2
  1923. Global Const $OFN_PATHMUSTEXIST = 2048
  1924. Global Const $OFN_READONLY = 1
  1925. Global Const $OFN_SHAREAWARE = 16384
  1926. Global Const $OFN_SHOWHELP = 16
  1927. Global Const $OFN_EX_NOPLACESBAR = 1
  1928. Global Const $TMPF_FIXED_PITCH = 1
  1929. Global Const $TMPF_VECTOR = 2
  1930. Global Const $TMPF_TRUETYPE = 4
  1931. Global Const $TMPF_DEVICE = 8
  1932. Global Const $DUPLICATE_CLOSE_SOURCE = 1
  1933. Global Const $DUPLICATE_SAME_ACCESS = 2
  1934. Global Const $TAGCURSORINFO = "dword Size;dword Flags;handle hCursor;" & $TAGPOINT
  1935. Global Const $TAGDISPLAY_DEVICE = "dword Size;wchar Name[32];wchar String[128];dword Flags;wchar ID[128];wchar Key[128]"
  1936. Global Const $TAGFLASHWINFO = "uint Size;hwnd hWnd;dword Flags;uint Count;dword TimeOut"
  1937. Global Const $TAGICONINFO = "bool Icon;dword XHotSpot;dword YHotSpot;handle hMask;handle hColor"
  1938. Global Const $TAGMEMORYSTATUSEX = "dword Length;dword MemoryLoad;" & "uint64 TotalPhys;uint64 AvailPhys;uint64 TotalPageFile;uint64 AvailPageFile;" & "uint64 TotalVirtual;uint64 AvailVirtual;uint64 AvailExtendedVirtual"
  1939. Func _WinAPI_AttachConsole($IPROCESSID = -1)
  1940.     Local $ARESULT = DllCall("kernel32.dll", "bool", "AttachConsole", "dword", $IPROCESSID)
  1941.     If @error Then Return SetError(@error, @extended, False)
  1942.     Return $ARESULT[0]
  1943. EndFunc
  1944. Func _WinAPI_AttachThreadInput($IATTACH, $IATTACHTO, $FATTACH)
  1945.     Local $ARESULT = DllCall("user32.dll", "bool", "AttachThreadInput", "dword", $IATTACH, "dword", $IATTACHTO, "bool", $FATTACH)
  1946.     If @error Then Return SetError(@error, @extended, False)
  1947.     Return $ARESULT[0]
  1948. EndFunc
  1949. Func _WinAPI_Beep($IFREQ = 500, $IDURATION = 1000)
  1950.     Local $ARESULT = DllCall("kernel32.dll", "bool", "Beep", "dword", $IFREQ, "dword", $IDURATION)
  1951.     If @error Then Return SetError(@error, @extended, False)
  1952.     Return $ARESULT[0]
  1953. EndFunc
  1954. Func _WinAPI_BitBlt($HDESTDC, $IXDEST, $IYDEST, $IWIDTH, $IHEIGHT, $HSRCDC, $IXSRC, $IYSRC, $IROP)
  1955.     Local $ARESULT = DllCall("gdi32.dll", "bool", "BitBlt", "handle", $HDESTDC, "int", $IXDEST, "int", $IYDEST, "int", $IWIDTH, "int", $IHEIGHT, "handle", $HSRCDC, "int", $IXSRC, "int", $IYSRC, "dword", $IROP)
  1956.     If @error Then Return SetError(@error, @extended, False)
  1957.     Return $ARESULT[0]
  1958. EndFunc
  1959. Func _WinAPI_CallNextHookEx($HHK, $ICODE, $WPARAM, $LPARAM)
  1960.     Local $ARESULT = DllCall("user32.dll", "lresult", "CallNextHookEx", "handle", $HHK, "int", $ICODE, "wparam", $WPARAM, "lparam", $LPARAM)
  1961.     If @error Then Return SetError(@error, @extended, -1)
  1962.     Return $ARESULT[0]
  1963. EndFunc
  1964. Func _WinAPI_CallWindowProc($LPPREVWNDFUNC, $HWND, $MSG, $WPARAM, $LPARAM)
  1965.     Local $ARESULT = DllCall("user32.dll", "lresult", "CallWindowProc", "ptr", $LPPREVWNDFUNC, "hwnd", $HWND, "uint", $MSG, "wparam", $WPARAM, "lparam", $LPARAM)
  1966.     If @error Then Return SetError(@error, @extended, -1)
  1967.     Return $ARESULT[0]
  1968. EndFunc
  1969. Func _WinAPI_ClientToScreen($HWND, ByRef $TPOINT)
  1970.     DllCall("user32.dll", "bool", "ClientToScreen", "hwnd", $HWND, "struct*", $TPOINT)
  1971.     Return SetError(@error, @extended, $TPOINT)
  1972. EndFunc
  1973. Func _WinAPI_CloseHandle($HOBJECT)
  1974.     Local $ARESULT = DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $HOBJECT)
  1975.     If @error Then Return SetError(@error, @extended, False)
  1976.     Return $ARESULT[0]
  1977. EndFunc
  1978. Func _WinAPI_CombineRgn($HRGNDEST, $HRGNSRC1, $HRGNSRC2, $ICOMBINEMODE)
  1979.     Local $ARESULT = DllCall("gdi32.dll", "int", "CombineRgn", "handle", $HRGNDEST, "handle", $HRGNSRC1, "handle", $HRGNSRC2, "int", $ICOMBINEMODE)
  1980.     If @error Then Return SetError(@error, @extended, 0)
  1981.     Return $ARESULT[0]
  1982. EndFunc
  1983. Func _WinAPI_CommDlgExtendedError()
  1984.     Local Const $CDERR_DIALOGFAILURE = 65535
  1985.     Local Const $CDERR_FINDRESFAILURE = 6
  1986.     Local Const $CDERR_INITIALIZATION = 2
  1987.     Local Const $CDERR_LOADRESFAILURE = 7
  1988.     Local Const $CDERR_LOADSTRFAILURE = 5
  1989.     Local Const $CDERR_LOCKRESFAILURE = 8
  1990.     Local Const $CDERR_MEMALLOCFAILURE = 9
  1991.     Local Const $CDERR_MEMLOCKFAILURE = 10
  1992.     Local Const $CDERR_NOHINSTANCE = 4
  1993.     Local Const $CDERR_NOHOOK = 11
  1994.     Local Const $CDERR_NOTEMPLATE = 3
  1995.     Local Const $CDERR_REGISTERMSGFAIL = 12
  1996.     Local Const $CDERR_STRUCTSIZE = 1
  1997.     Local Const $FNERR_BUFFERTOOSMALL = 12291
  1998.     Local Const $FNERR_INVALIDFILENAME = 12290
  1999.     Local Const $FNERR_SUBCLASSFAILURE = 12289
  2000.     Local $ARESULT = DllCall("comdlg32.dll", "dword", "CommDlgExtendedError")
  2001.     If @error Then Return SetError(@error, @extended, 0)
  2002.     Switch $ARESULT[0]
  2003.         Case $CDERR_DIALOGFAILURE
  2004.             Return SetError($ARESULT[0], 0, "The dialog box could not be created." & @LF & "The common dialog box function's call to the DialogBox function failed." & @LF & "For example, this error occurs if the common dialog box call specifies an invalid window handle.")
  2005.         Case $CDERR_FINDRESFAILURE
  2006.             Return SetError($ARESULT[0], 0, "The common dialog box function failed to find a specified resource.")
  2007.         Case $CDERR_INITIALIZATION
  2008.             Return SetError($ARESULT[0], 0, "The common dialog box function failed during initialization." & @LF & "This error often occurs when sufficient memory is not available.")
  2009.         Case $CDERR_LOADRESFAILURE
  2010.             Return SetError($ARESULT[0], 0, "The common dialog box function failed to load a specified resource.")
  2011.         Case $CDERR_LOADSTRFAILURE
  2012.             Return SetError($ARESULT[0], 0, "The common dialog box function failed to load a specified string.")
  2013.         Case $CDERR_LOCKRESFAILURE
  2014.             Return SetError($ARESULT[0], 0, "The common dialog box function failed to lock a specified resource.")
  2015.         Case $CDERR_MEMALLOCFAILURE
  2016.             Return SetError($ARESULT[0], 0, "The common dialog box function was unable to allocate memory for internal structures.")
  2017.         Case $CDERR_MEMLOCKFAILURE
  2018.             Return SetError($ARESULT[0], 0, "The common dialog box function was unable to lock the memory associated with a handle.")
  2019.         Case $CDERR_NOHINSTANCE
  2020.             Return SetError($ARESULT[0], 0, "The ENABLETEMPLATE flag was set in the Flags member of the initialization structure for the corresponding common dialog box," & @LF & "but you failed to provide a corresponding instance handle.")
  2021.         Case $CDERR_NOHOOK
  2022.             Return SetError($ARESULT[0], 0, "The ENABLEHOOK flag was set in the Flags member of the initialization structure for the corresponding common dialog box," & @LF & "but you failed to provide a pointer to a corresponding hook procedure.")
  2023.         Case $CDERR_NOTEMPLATE
  2024.             Return SetError($ARESULT[0], 0, "The ENABLETEMPLATE flag was set in the Flags member of the initialization structure for the corresponding common dialog box," & @LF & "but you failed to provide a corresponding template.")
  2025.         Case $CDERR_REGISTERMSGFAIL
  2026.             Return SetError($ARESULT[0], 0, "The RegisterWindowMessage function returned an error code when it was called by the common dialog box function.")
  2027.         Case $CDERR_STRUCTSIZE
  2028.             Return SetError($ARESULT[0], 0, "The lStructSize member of the initialization structure for the corresponding common dialog box is invalid")
  2029.         Case $FNERR_BUFFERTOOSMALL
  2030.             Return SetError($ARESULT[0], 0, "The buffer pointed to by the lpstrFile member of the OPENFILENAME structure is too small for the file name specified by the user." & @LF & "The first two bytes of the lpstrFile buffer contain an integer value specifying the size, in TCHARs, required to receive the full name.")
  2031.         Case $FNERR_INVALIDFILENAME
  2032.             Return SetError($ARESULT[0], 0, "A file name is invalid.")
  2033.         Case $FNERR_SUBCLASSFAILURE
  2034.             Return SetError($ARESULT[0], 0, "An attempt to subclass a list box failed because sufficient memory was not available.")
  2035.     EndSwitch
  2036.     Return Hex($ARESULT[0])
  2037. EndFunc
  2038. Func _WinAPI_CopyIcon($HICON)
  2039.     Local $ARESULT = DllCall("user32.dll", "handle", "CopyIcon", "handle", $HICON)
  2040.     If @error Then Return SetError(@error, @extended, 0)
  2041.     Return $ARESULT[0]
  2042. EndFunc
  2043. Func _WinAPI_CreateBitmap($IWIDTH, $IHEIGHT, $IPLANES = 1, $IBITSPERPEL = 1, $PBITS = 0)
  2044.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateBitmap", "int", $IWIDTH, "int", $IHEIGHT, "uint", $IPLANES, "uint", $IBITSPERPEL, "ptr", $PBITS)
  2045.     If @error Then Return SetError(@error, @extended, 0)
  2046.     Return $ARESULT[0]
  2047. EndFunc
  2048. Func _WinAPI_CreateCompatibleBitmap($HDC, $IWIDTH, $IHEIGHT)
  2049.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateCompatibleBitmap", "handle", $HDC, "int", $IWIDTH, "int", $IHEIGHT)
  2050.     If @error Then Return SetError(@error, @extended, 0)
  2051.     Return $ARESULT[0]
  2052. EndFunc
  2053. Func _WinAPI_CreateCompatibleDC($HDC)
  2054.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateCompatibleDC", "handle", $HDC)
  2055.     If @error Then Return SetError(@error, @extended, 0)
  2056.     Return $ARESULT[0]
  2057. EndFunc
  2058. Func _WinAPI_CreateEvent($PATTRIBUTES = 0, $FMANUALRESET = True, $FINITIALSTATE = True, $SNAME = "")
  2059.     Local $SNAMETYPE = "wstr"
  2060.     If $SNAME = "" Then
  2061.         $SNAME = 0
  2062.         $SNAMETYPE = "ptr"
  2063.     EndIf
  2064.     Local $ARESULT = DllCall("kernel32.dll", "handle", "CreateEventW", "ptr", $PATTRIBUTES, "bool", $FMANUALRESET, "bool", $FINITIALSTATE, $SNAMETYPE, $SNAME)
  2065.     If @error Then Return SetError(@error, @extended, 0)
  2066.     Return $ARESULT[0]
  2067. EndFunc
  2068. Func _WinAPI_CreateFile($SFILENAME, $ICREATION, $IACCESS = 4, $ISHARE = 0, $IATTRIBUTES = 0, $PSECURITY = 0)
  2069.     Local $IDA = 0, $ISM = 0, $ICD = 0, $IFA = 0
  2070.     If BitAND($IACCESS, 1) <> 0 Then $IDA = BitOR($IDA, $GENERIC_EXECUTE)
  2071.     If BitAND($IACCESS, 2) <> 0 Then $IDA = BitOR($IDA, $GENERIC_READ)
  2072.     If BitAND($IACCESS, 4) <> 0 Then $IDA = BitOR($IDA, $GENERIC_WRITE)
  2073.     If BitAND($ISHARE, 1) <> 0 Then $ISM = BitOR($ISM, $FILE_SHARE_DELETE)
  2074.     If BitAND($ISHARE, 2) <> 0 Then $ISM = BitOR($ISM, $FILE_SHARE_READ)
  2075.     If BitAND($ISHARE, 4) <> 0 Then $ISM = BitOR($ISM, $FILE_SHARE_WRITE)
  2076.     Switch $ICREATION
  2077.         Case 0
  2078.             $ICD = $CREATE_NEW
  2079.         Case 1
  2080.             $ICD = $CREATE_ALWAYS
  2081.         Case 2
  2082.             $ICD = $OPEN_EXISTING
  2083.         Case 3
  2084.             $ICD = $OPEN_ALWAYS
  2085.         Case 4
  2086.             $ICD = $TRUNCATE_EXISTING
  2087.     EndSwitch
  2088.     If BitAND($IATTRIBUTES, 1) <> 0 Then $IFA = BitOR($IFA, $FILE_ATTRIBUTE_ARCHIVE)
  2089.     If BitAND($IATTRIBUTES, 2) <> 0 Then $IFA = BitOR($IFA, $FILE_ATTRIBUTE_HIDDEN)
  2090.     If BitAND($IATTRIBUTES, 4) <> 0 Then $IFA = BitOR($IFA, $FILE_ATTRIBUTE_READONLY)
  2091.     If BitAND($IATTRIBUTES, 8) <> 0 Then $IFA = BitOR($IFA, $FILE_ATTRIBUTE_SYSTEM)
  2092.     Local $ARESULT = DllCall("kernel32.dll", "handle", "CreateFileW", "wstr", $SFILENAME, "dword", $IDA, "dword", $ISM, "ptr", $PSECURITY, "dword", $ICD, "dword", $IFA, "ptr", 0)
  2093.     If @error Or $ARESULT[0] = Ptr(-1) Then Return SetError(@error, @extended, 0)
  2094.     Return $ARESULT[0]
  2095. EndFunc
  2096. Func _WinAPI_CreateFont($NHEIGHT, $NWIDTH, $NESCAPE = 0, $NORIENTN = 0, $FNWEIGHT = $__WINAPICONSTANT_FW_NORMAL, $BITALIC = False, $BUNDERLINE = False, $BSTRIKEOUT = False, $NCHARSET = $__WINAPICONSTANT_DEFAULT_CHARSET, $NOUTPUTPREC = $__WINAPICONSTANT_OUT_DEFAULT_PRECIS, $NCLIPPREC = $__WINAPICONSTANT_CLIP_DEFAULT_PRECIS, $NQUALITY = $__WINAPICONSTANT_DEFAULT_QUALITY, $NPITCH = 0, $SZFACE = "Arial")
  2097.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateFontW", "int", $NHEIGHT, "int", $NWIDTH, "int", $NESCAPE, "int", $NORIENTN, "int", $FNWEIGHT, "dword", $BITALIC, "dword", $BUNDERLINE, "dword", $BSTRIKEOUT, "dword", $NCHARSET, "dword", $NOUTPUTPREC, "dword", $NCLIPPREC, "dword", $NQUALITY, "dword", $NPITCH, "wstr", $SZFACE)
  2098.     If @error Then Return SetError(@error, @extended, 0)
  2099.     Return $ARESULT[0]
  2100. EndFunc
  2101. Func _WinAPI_CreateFontIndirect($TLOGFONT)
  2102.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateFontIndirectW", "struct*", $TLOGFONT)
  2103.     If @error Then Return SetError(@error, @extended, 0)
  2104.     Return $ARESULT[0]
  2105. EndFunc
  2106. Func _WinAPI_CreatePen($IPENSTYLE, $IWIDTH, $NCOLOR)
  2107.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreatePen", "int", $IPENSTYLE, "int", $IWIDTH, "dword", $NCOLOR)
  2108.     If @error Then Return SetError(@error, @extended, 0)
  2109.     Return $ARESULT[0]
  2110. EndFunc
  2111. Func _WinAPI_CreateProcess($SAPPNAME, $SCOMMAND, $PSECURITY, $PTHREAD, $FINHERIT, $IFLAGS, $PENVIRON, $SDIR, $PSTARTUPINFO, $PPROCESS)
  2112.     Local $TCOMMAND = 0
  2113.     Local $SAPPNAMETYPE = "wstr", $SDIRTYPE = "wstr"
  2114.     If $SAPPNAME = "" Then
  2115.         $SAPPNAMETYPE = "ptr"
  2116.         $SAPPNAME = 0
  2117.     EndIf
  2118.     If $SCOMMAND <> "" Then
  2119.         $TCOMMAND = DllStructCreate("wchar Text[" & 260 + 1 & "]")
  2120.         DllStructSetData($TCOMMAND, "Text", $SCOMMAND)
  2121.     EndIf
  2122.     If $SDIR = "" Then
  2123.         $SDIRTYPE = "ptr"
  2124.         $SDIR = 0
  2125.     EndIf
  2126.     Local $ARESULT = DllCall("kernel32.dll", "bool", "CreateProcessW", $SAPPNAMETYPE, $SAPPNAME, "struct*", $TCOMMAND, "ptr", $PSECURITY, "ptr", $PTHREAD, "bool", $FINHERIT, "dword", $IFLAGS, "ptr", $PENVIRON, $SDIRTYPE, $SDIR, "ptr", $PSTARTUPINFO, "ptr", $PPROCESS)
  2127.     If @error Then Return SetError(@error, @extended, False)
  2128.     Return $ARESULT[0]
  2129. EndFunc
  2130. Func _WinAPI_CreateRectRgn($ILEFTRECT, $ITOPRECT, $IRIGHTRECT, $IBOTTOMRECT)
  2131.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateRectRgn", "int", $ILEFTRECT, "int", $ITOPRECT, "int", $IRIGHTRECT, "int", $IBOTTOMRECT)
  2132.     If @error Then Return SetError(@error, @extended, 0)
  2133.     Return $ARESULT[0]
  2134. EndFunc
  2135. Func _WinAPI_CreateRoundRectRgn($ILEFTRECT, $ITOPRECT, $IRIGHTRECT, $IBOTTOMRECT, $IWIDTHELLIPSE, $IHEIGHTELLIPSE)
  2136.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateRoundRectRgn", "int", $ILEFTRECT, "int", $ITOPRECT, "int", $IRIGHTRECT, "int", $IBOTTOMRECT, "int", $IWIDTHELLIPSE, "int", $IHEIGHTELLIPSE)
  2137.     If @error Then Return SetError(@error, @extended, 0)
  2138.     Return $ARESULT[0]
  2139. EndFunc
  2140. Func _WinAPI_CreateSolidBitmap($HWND, $ICOLOR, $IWIDTH, $IHEIGHT, $BRGB = 1)
  2141.     Local $HDC = _WinAPI_GetDC($HWND)
  2142.     Local $HDESTDC = _WinAPI_CreateCompatibleDC($HDC)
  2143.     Local $HBITMAP = _WinAPI_CreateCompatibleBitmap($HDC, $IWIDTH, $IHEIGHT)
  2144.     Local $HOLD = _WinAPI_SelectObject($HDESTDC, $HBITMAP)
  2145.     Local $TRECT = DllStructCreate($TAGRECT)
  2146.     DllStructSetData($TRECT, 1, 0)
  2147.     DllStructSetData($TRECT, 2, 0)
  2148.     DllStructSetData($TRECT, 3, $IWIDTH)
  2149.     DllStructSetData($TRECT, 4, $IHEIGHT)
  2150.     If $BRGB Then
  2151.         $ICOLOR = BitOR(BitAND($ICOLOR, 65280), BitShift(BitAND($ICOLOR, 255), -16), BitShift(BitAND($ICOLOR, 16711680), 16))
  2152.     EndIf
  2153.     Local $HBRUSH = _WinAPI_CreateSolidBrush($ICOLOR)
  2154.     _WinAPI_FillRect($HDESTDC, $TRECT, $HBRUSH)
  2155.     If @error Then
  2156.         _WinAPI_DeleteObject($HBITMAP)
  2157.         $HBITMAP = 0
  2158.     EndIf
  2159.     _WinAPI_DeleteObject($HBRUSH)
  2160.     _WinAPI_ReleaseDC($HWND, $HDC)
  2161.     _WinAPI_SelectObject($HDESTDC, $HOLD)
  2162.     _WinAPI_DeleteDC($HDESTDC)
  2163.     If Not $HBITMAP Then Return SetError(1, 0, 0)
  2164.     Return $HBITMAP
  2165. EndFunc
  2166. Func _WinAPI_CreateSolidBrush($NCOLOR)
  2167.     Local $ARESULT = DllCall("gdi32.dll", "handle", "CreateSolidBrush", "dword", $NCOLOR)
  2168.     If @error Then Return SetError(@error, @extended, 0)
  2169.     Return $ARESULT[0]
  2170. EndFunc
  2171. Func _WinAPI_CreateWindowEx($IEXSTYLE, $SCLASS, $SNAME, $ISTYLE, $IX, $IY, $IWIDTH, $IHEIGHT, $HPARENT, $HMENU = 0, $HINSTANCE = 0, $PPARAM = 0)
  2172.     If $HINSTANCE = 0 Then $HINSTANCE = _WinAPI_GetModuleHandle("")
  2173.     Local $ARESULT = DllCall("user32.dll", "hwnd", "CreateWindowExW", "dword", $IEXSTYLE, "wstr", $SCLASS, "wstr", $SNAME, "dword", $ISTYLE, "int", $IX, "int", $IY, "int", $IWIDTH, "int", $IHEIGHT, "hwnd", $HPARENT, "handle", $HMENU, "handle", $HINSTANCE, "ptr", $PPARAM)
  2174.     If @error Then Return SetError(@error, @extended, 0)
  2175.     Return $ARESULT[0]
  2176. EndFunc
  2177. Func _WinAPI_DefWindowProc($HWND, $IMSG, $IWPARAM, $ILPARAM)
  2178.     Local $ARESULT = DllCall("user32.dll", "lresult", "DefWindowProc", "hwnd", $HWND, "uint", $IMSG, "wparam", $IWPARAM, "lparam", $ILPARAM)
  2179.     If @error Then Return SetError(@error, @extended, 0)
  2180.     Return $ARESULT[0]
  2181. EndFunc
  2182. Func _WinAPI_DeleteDC($HDC)
  2183.     Local $ARESULT = DllCall("gdi32.dll", "bool", "DeleteDC", "handle", $HDC)
  2184.     If @error Then Return SetError(@error, @extended, False)
  2185.     Return $ARESULT[0]
  2186. EndFunc
  2187. Func _WinAPI_DeleteObject($HOBJECT)
  2188.     Local $ARESULT = DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $HOBJECT)
  2189.     If @error Then Return SetError(@error, @extended, False)
  2190.     Return $ARESULT[0]
  2191. EndFunc
  2192. Func _WinAPI_DestroyIcon($HICON)
  2193.     Local $ARESULT = DllCall("user32.dll", "bool", "DestroyIcon", "handle", $HICON)
  2194.     If @error Then Return SetError(@error, @extended, False)
  2195.     Return $ARESULT[0]
  2196. EndFunc
  2197. Func _WinAPI_DestroyWindow($HWND)
  2198.     Local $ARESULT = DllCall("user32.dll", "bool", "DestroyWindow", "hwnd", $HWND)
  2199.     If @error Then Return SetError(@error, @extended, False)
  2200.     Return $ARESULT[0]
  2201. EndFunc
  2202. Func _WinAPI_DrawEdge($HDC, $PTRRECT, $NEDGETYPE, $GRFFLAGS)
  2203.     Local $ARESULT = DllCall("user32.dll", "bool", "DrawEdge", "handle", $HDC, "ptr", $PTRRECT, "uint", $NEDGETYPE, "uint", $GRFFLAGS)
  2204.     If @error Then Return SetError(@error, @extended, False)
  2205.     Return $ARESULT[0]
  2206. EndFunc
  2207. Func _WinAPI_DrawFrameControl($HDC, $PTRRECT, $NTYPE, $NSTATE)
  2208.     Local $ARESULT = DllCall("user32.dll", "bool", "DrawFrameControl", "handle", $HDC, "ptr", $PTRRECT, "uint", $NTYPE, "uint", $NSTATE)
  2209.     If @error Then Return SetError(@error, @extended, False)
  2210.     Return $ARESULT[0]
  2211. EndFunc
  2212. Func _WinAPI_DrawIcon($HDC, $IX, $IY, $HICON)
  2213.     Local $ARESULT = DllCall("user32.dll", "bool", "DrawIcon", "handle", $HDC, "int", $IX, "int", $IY, "handle", $HICON)
  2214.     If @error Then Return SetError(@error, @extended, False)
  2215.     Return $ARESULT[0]
  2216. EndFunc
  2217. Func _WinAPI_DrawIconEx($HDC, $IX, $IY, $HICON, $IWIDTH = 0, $IHEIGHT = 0, $ISTEP = 0, $HBRUSH = 0, $IFLAGS = 3)
  2218.     Local $IOPTIONS
  2219.     Switch $IFLAGS
  2220.         Case 1
  2221.             $IOPTIONS = $__WINAPICONSTANT_DI_MASK
  2222.         Case 2
  2223.             $IOPTIONS = $__WINAPICONSTANT_DI_IMAGE
  2224.         Case 3
  2225.             $IOPTIONS = $__WINAPICONSTANT_DI_NORMAL
  2226.         Case 4
  2227.             $IOPTIONS = $__WINAPICONSTANT_DI_COMPAT
  2228.         Case 5
  2229.             $IOPTIONS = $__WINAPICONSTANT_DI_DEFAULTSIZE
  2230.         Case Else
  2231.             $IOPTIONS = $__WINAPICONSTANT_DI_NOMIRROR
  2232.     EndSwitch
  2233.     Local $ARESULT = DllCall("user32.dll", "bool", "DrawIconEx", "handle", $HDC, "int", $IX, "int", $IY, "handle", $HICON, "int", $IWIDTH, "int", $IHEIGHT, "uint", $ISTEP, "handle", $HBRUSH, "uint", $IOPTIONS)
  2234.     If @error Then Return SetError(@error, @extended, False)
  2235.     Return $ARESULT[0]
  2236. EndFunc
  2237. Func _WinAPI_DrawLine($HDC, $IX1, $IY1, $IX2, $IY2)
  2238.     _WinAPI_MoveTo($HDC, $IX1, $IY1)
  2239.     If @error Then Return SetError(@error, @extended, False)
  2240.     _WinAPI_LineTo($HDC, $IX2, $IY2)
  2241.     If @error Then Return SetError(@error, @extended, False)
  2242.     Return True
  2243. EndFunc
  2244. Func _WinAPI_DrawText($HDC, $STEXT, ByRef $TRECT, $IFLAGS)
  2245.     Local $ARESULT = DllCall("user32.dll", "int", "DrawTextW", "handle", $HDC, "wstr", $STEXT, "int", -1, "struct*", $TRECT, "uint", $IFLAGS)
  2246.     If @error Then Return SetError(@error, @extended, 0)
  2247.     Return $ARESULT[0]
  2248. EndFunc
  2249. Func _WinAPI_DuplicateHandle($HSOURCEPROCESSHANDLE, $HSOURCEHANDLE, $HTARGETPROCESSHANDLE, $IDESIREDACCESS, $FINHERITHANDLE, $IOPTIONS)
  2250.     Local $ACALL = DllCall("kernel32.dll", "bool", "DuplicateHandle", "handle", $HSOURCEPROCESSHANDLE, "handle", $HSOURCEHANDLE, "handle", $HTARGETPROCESSHANDLE, "handle*", 0, "dword", $IDESIREDACCESS, "bool", $FINHERITHANDLE, "dword", $IOPTIONS)
  2251.     If @error Or Not $ACALL[0] Then Return SetError(1, @extended, 0)
  2252.     Return $ACALL[4]
  2253. EndFunc
  2254. Func _WinAPI_EnableWindow($HWND, $FENABLE = True)
  2255.     Local $ARESULT = DllCall("user32.dll", "bool", "EnableWindow", "hwnd", $HWND, "bool", $FENABLE)
  2256.     If @error Then Return SetError(@error, @extended, False)
  2257.     Return $ARESULT[0]
  2258. EndFunc
  2259. Func _WinAPI_EnumDisplayDevices($SDEVICE, $IDEVNUM)
  2260.     Local $TNAME = 0, $IFLAGS = 0, $ADEVICE[5]
  2261.     If $SDEVICE <> "" Then
  2262.         $TNAME = DllStructCreate("wchar Text[" & StringLen($SDEVICE) + 1 & "]")
  2263.         DllStructSetData($TNAME, "Text", $SDEVICE)
  2264.     EndIf
  2265.     Local $TDEVICE = DllStructCreate($TAGDISPLAY_DEVICE)
  2266.     Local $IDEVICE = DllStructGetSize($TDEVICE)
  2267.     DllStructSetData($TDEVICE, "Size", $IDEVICE)
  2268.     DllCall("user32.dll", "bool", "EnumDisplayDevicesW", "struct*", $TNAME, "dword", $IDEVNUM, "struct*", $TDEVICE, "dword", 1)
  2269.     If @error Then Return SetError(@error, @extended, 0)
  2270.     Local $IN = DllStructGetData($TDEVICE, "Flags")
  2271.     If BitAND($IN, $__WINAPICONSTANT_DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) <> 0 Then $IFLAGS = BitOR($IFLAGS, 1)
  2272.     If BitAND($IN, $__WINAPICONSTANT_DISPLAY_DEVICE_PRIMARY_DEVICE) <> 0 Then $IFLAGS = BitOR($IFLAGS, 2)
  2273.     If BitAND($IN, $__WINAPICONSTANT_DISPLAY_DEVICE_MIRRORING_DRIVER) <> 0 Then $IFLAGS = BitOR($IFLAGS, 4)
  2274.     If BitAND($IN, $__WINAPICONSTANT_DISPLAY_DEVICE_VGA_COMPATIBLE) <> 0 Then $IFLAGS = BitOR($IFLAGS, 8)
  2275.     If BitAND($IN, $__WINAPICONSTANT_DISPLAY_DEVICE_REMOVABLE) <> 0 Then $IFLAGS = BitOR($IFLAGS, 16)
  2276.     If BitAND($IN, $__WINAPICONSTANT_DISPLAY_DEVICE_MODESPRUNED) <> 0 Then $IFLAGS = BitOR($IFLAGS, 32)
  2277.     $ADEVICE[0] = True
  2278.     $ADEVICE[1] = DllStructGetData($TDEVICE, "Name")
  2279.     $ADEVICE[2] = DllStructGetData($TDEVICE, "String")
  2280.     $ADEVICE[3] = $IFLAGS
  2281.     $ADEVICE[4] = DllStructGetData($TDEVICE, "ID")
  2282.     Return $ADEVICE
  2283. EndFunc
  2284. Func _WinAPI_EnumWindows($FVISIBLE = True, $HWND = Default)
  2285.     __WINAPI_ENUMWINDOWSINIT()
  2286.     If $HWND = Default Then $HWND = _WinAPI_GetDesktopWindow()
  2287.     __WINAPI_ENUMWINDOWSCHILD($HWND, $FVISIBLE)
  2288.     Return $__GAWINLIST_WINAPI
  2289. EndFunc
  2290. Func __WINAPI_ENUMWINDOWSADD($HWND, $SCLASS = "")
  2291.     If $SCLASS = "" Then $SCLASS = _WinAPI_GetClassName($HWND)
  2292.     $__GAWINLIST_WINAPI[0][0] += 1
  2293.     Local $ICOUNT = $__GAWINLIST_WINAPI[0][0]
  2294.     If $ICOUNT >= $__GAWINLIST_WINAPI[0][1] Then
  2295.         ReDim $__GAWINLIST_WINAPI[$ICOUNT + 64][2]
  2296.         $__GAWINLIST_WINAPI[0][1] += 64
  2297.     EndIf
  2298.     $__GAWINLIST_WINAPI[$ICOUNT][0] = $HWND
  2299.     $__GAWINLIST_WINAPI[$ICOUNT][1] = $SCLASS
  2300. EndFunc
  2301. Func __WINAPI_ENUMWINDOWSCHILD($HWND, $FVISIBLE = True)
  2302.     $HWND = _WinAPI_GetWindow($HWND, $__WINAPICONSTANT_GW_CHILD)
  2303.     While $HWND <> 0
  2304.         If (Not $FVISIBLE) Or _WinAPI_IsWindowVisible($HWND) Then
  2305.             __WINAPI_ENUMWINDOWSCHILD($HWND, $FVISIBLE)
  2306.             __WINAPI_ENUMWINDOWSADD($HWND)
  2307.         EndIf
  2308.         $HWND = _WinAPI_GetWindow($HWND, $__WINAPICONSTANT_GW_HWNDNEXT)
  2309.     WEnd
  2310. EndFunc
  2311. Func __WINAPI_ENUMWINDOWSINIT()
  2312.     ReDim $__GAWINLIST_WINAPI[64][2]
  2313.     $__GAWINLIST_WINAPI[0][0] = 0
  2314.     $__GAWINLIST_WINAPI[0][1] = 64
  2315. EndFunc
  2316. Func _WinAPI_EnumWindowsPopup()
  2317.     __WINAPI_ENUMWINDOWSINIT()
  2318.     Local $HWND = _WinAPI_GetWindow(_WinAPI_GetDesktopWindow(), $__WINAPICONSTANT_GW_CHILD)
  2319.     Local $SCLASS
  2320.     While $HWND <> 0
  2321.         If _WinAPI_IsWindowVisible($HWND) Then
  2322.             $SCLASS = _WinAPI_GetClassName($HWND)
  2323.             If $SCLASS = "#32768" Then
  2324.                 __WINAPI_ENUMWINDOWSADD($HWND)
  2325.             ElseIf $SCLASS = "ToolbarWindow32" Then
  2326.                 __WINAPI_ENUMWINDOWSADD($HWND)
  2327.             ElseIf $SCLASS = "ToolTips_Class32" Then
  2328.                 __WINAPI_ENUMWINDOWSADD($HWND)
  2329.             ElseIf $SCLASS = "BaseBar" Then
  2330.                 __WINAPI_ENUMWINDOWSCHILD($HWND)
  2331.             EndIf
  2332.         EndIf
  2333.         $HWND = _WinAPI_GetWindow($HWND, $__WINAPICONSTANT_GW_HWNDNEXT)
  2334.     WEnd
  2335.     Return $__GAWINLIST_WINAPI
  2336. EndFunc
  2337. Func _WinAPI_EnumWindowsTop()
  2338.     __WINAPI_ENUMWINDOWSINIT()
  2339.     Local $HWND = _WinAPI_GetWindow(_WinAPI_GetDesktopWindow(), $__WINAPICONSTANT_GW_CHILD)
  2340.     While $HWND <> 0
  2341.         If _WinAPI_IsWindowVisible($HWND) Then __WINAPI_ENUMWINDOWSADD($HWND)
  2342.         $HWND = _WinAPI_GetWindow($HWND, $__WINAPICONSTANT_GW_HWNDNEXT)
  2343.     WEnd
  2344.     Return $__GAWINLIST_WINAPI
  2345. EndFunc
  2346. Func _WinAPI_ExpandEnvironmentStrings($SSTRING)
  2347.     Local $ARESULT = DllCall("kernel32.dll", "dword", "ExpandEnvironmentStringsW", "wstr", $SSTRING, "wstr", "", "dword", 4096)
  2348.     If @error Then Return SetError(@error, @extended, "")
  2349.     Return $ARESULT[2]
  2350. EndFunc
  2351. Func _WinAPI_ExtractIconEx($SFILE, $IINDEX, $PLARGE, $PSMALL, $IICONS)
  2352.     Local $ARESULT = DllCall("shell32.dll", "uint", "ExtractIconExW", "wstr", $SFILE, "int", $IINDEX, "struct*", $PLARGE, "struct*", $PSMALL, "uint", $IICONS)
  2353.     If @error Then Return SetError(@error, @extended, 0)
  2354.     Return $ARESULT[0]
  2355. EndFunc
  2356. Func _WinAPI_FatalAppExit($SMESSAGE)
  2357.     DllCall("kernel32.dll", "none", "FatalAppExitW", "uint", 0, "wstr", $SMESSAGE)
  2358.     If @error Then Return SetError(@error, @extended)
  2359. EndFunc
  2360. Func _WinAPI_FillRect($HDC, $PTRRECT, $HBRUSH)
  2361.     Local $ARESULT
  2362.     If IsPtr($HBRUSH) Then
  2363.         $ARESULT = DllCall("user32.dll", "int", "FillRect", "handle", $HDC, "struct*", $PTRRECT, "handle", $HBRUSH)
  2364.     Else
  2365.         $ARESULT = DllCall("user32.dll", "int", "FillRect", "handle", $HDC, "struct*", $PTRRECT, "dword_ptr", $HBRUSH)
  2366.     EndIf
  2367.     If @error Then Return SetError(@error, @extended, False)
  2368.     Return $ARESULT[0]
  2369. EndFunc
  2370. Func _WinAPI_FindExecutable($SFILENAME, $SDIRECTORY = "")
  2371.     Local $ARESULT = DllCall("shell32.dll", "INT", "FindExecutableW", "wstr", $SFILENAME, "wstr", $SDIRECTORY, "wstr", "")
  2372.     If @error Then Return SetError(@error, @extended, 0)
  2373.     Return SetExtended($ARESULT[0], $ARESULT[3])
  2374. EndFunc
  2375. Func _WinAPI_FindWindow($SCLASSNAME, $SWINDOWNAME)
  2376.     Local $ARESULT = DllCall("user32.dll", "hwnd", "FindWindowW", "wstr", $SCLASSNAME, "wstr", $SWINDOWNAME)
  2377.     If @error Then Return SetError(@error, @extended, 0)
  2378.     Return $ARESULT[0]
  2379. EndFunc
  2380. Func _WinAPI_FlashWindow($HWND, $FINVERT = True)
  2381.     Local $ARESULT = DllCall("user32.dll", "bool", "FlashWindow", "hwnd", $HWND, "bool", $FINVERT)
  2382.     If @error Then Return SetError(@error, @extended, False)
  2383.     Return $ARESULT[0]
  2384. EndFunc
  2385. Func _WinAPI_FlashWindowEx($HWND, $IFLAGS = 3, $ICOUNT = 3, $ITIMEOUT = 0)
  2386.     Local $TFLASH = DllStructCreate($TAGFLASHWINFO)
  2387.     Local $IFLASH = DllStructGetSize($TFLASH)
  2388.     Local $IMODE = 0
  2389.     If BitAND($IFLAGS, 1) <> 0 Then $IMODE = BitOR($IMODE, $__WINAPICONSTANT_FLASHW_CAPTION)
  2390.     If BitAND($IFLAGS, 2) <> 0 Then $IMODE = BitOR($IMODE, $__WINAPICONSTANT_FLASHW_TRAY)
  2391.     If BitAND($IFLAGS, 4) <> 0 Then $IMODE = BitOR($IMODE, $__WINAPICONSTANT_FLASHW_TIMER)
  2392.     If BitAND($IFLAGS, 8) <> 0 Then $IMODE = BitOR($IMODE, $__WINAPICONSTANT_FLASHW_TIMERNOFG)
  2393.     DllStructSetData($TFLASH, "Size", $IFLASH)
  2394.     DllStructSetData($TFLASH, "hWnd", $HWND)
  2395.     DllStructSetData($TFLASH, "Flags", $IMODE)
  2396.     DllStructSetData($TFLASH, "Count", $ICOUNT)
  2397.     DllStructSetData($TFLASH, "Timeout", $ITIMEOUT)
  2398.     Local $ARESULT = DllCall("user32.dll", "bool", "FlashWindowEx", "struct*", $TFLASH)
  2399.     If @error Then Return SetError(@error, @extended, False)
  2400.     Return $ARESULT[0]
  2401. EndFunc
  2402. Func _WinAPI_FloatToInt($NFLOAT)
  2403.     Local $TFLOAT = DllStructCreate("float")
  2404.     Local $TINT = DllStructCreate("int", DllStructGetPtr($TFLOAT))
  2405.     DllStructSetData($TFLOAT, 1, $NFLOAT)
  2406.     Return DllStructGetData($TINT, 1)
  2407. EndFunc
  2408. Func _WinAPI_FlushFileBuffers($HFILE)
  2409.     Local $ARESULT = DllCall("kernel32.dll", "bool", "FlushFileBuffers", "handle", $HFILE)
  2410.     If @error Then Return SetError(@error, @extended, False)
  2411.     Return $ARESULT[0]
  2412. EndFunc
  2413. Func _WinAPI_FormatMessage($IFLAGS, $PSOURCE, $IMESSAGEID, $ILANGUAGEID, ByRef $PBUFFER, $ISIZE, $VARGUMENTS)
  2414.     Local $SBUFFERTYPE = "struct*"
  2415.     If IsString($PBUFFER) Then $SBUFFERTYPE = "wstr"
  2416.     Local $ARESULT = DllCall("Kernel32.dll", "dword", "FormatMessageW", "dword", $IFLAGS, "ptr", $PSOURCE, "dword", $IMESSAGEID, "dword", $ILANGUAGEID, $SBUFFERTYPE, $PBUFFER, "dword", $ISIZE, "ptr", $VARGUMENTS)
  2417.     If @error Then Return SetError(@error, @extended, 0)
  2418.     If $SBUFFERTYPE = "wstr" Then $PBUFFER = $ARESULT[5]
  2419.     Return $ARESULT[0]
  2420. EndFunc
  2421. Func _WinAPI_FrameRect($HDC, $PTRRECT, $HBRUSH)
  2422.     Local $ARESULT = DllCall("user32.dll", "int", "FrameRect", "handle", $HDC, "ptr", $PTRRECT, "handle", $HBRUSH)
  2423.     If @error Then Return SetError(@error, @extended, False)
  2424.     Return $ARESULT[0]
  2425. EndFunc
  2426. Func _WinAPI_FreeLibrary($HMODULE)
  2427.     Local $ARESULT = DllCall("kernel32.dll", "bool", "FreeLibrary", "handle", $HMODULE)
  2428.     If @error Then Return SetError(@error, @extended, False)
  2429.     Return $ARESULT[0]
  2430. EndFunc
  2431. Func _WinAPI_GetAncestor($HWND, $IFLAGS = 1)
  2432.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetAncestor", "hwnd", $HWND, "uint", $IFLAGS)
  2433.     If @error Then Return SetError(@error, @extended, 0)
  2434.     Return $ARESULT[0]
  2435. EndFunc
  2436. Func _WinAPI_GetAsyncKeyState($IKEY)
  2437.     Local $ARESULT = DllCall("user32.dll", "short", "GetAsyncKeyState", "int", $IKEY)
  2438.     If @error Then Return SetError(@error, @extended, 0)
  2439.     Return $ARESULT[0]
  2440. EndFunc
  2441. Func _WinAPI_GetBkMode($HDC)
  2442.     Local $ARESULT = DllCall("gdi32.dll", "int", "GetBkMode", "handle", $HDC)
  2443.     If @error Then Return SetError(@error, @extended, 0)
  2444.     Return $ARESULT[0]
  2445. EndFunc
  2446. Func _WinAPI_GetClassName($HWND)
  2447.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  2448.     Local $ARESULT = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $HWND, "wstr", "", "int", 4096)
  2449.     If @error Then Return SetError(@error, @extended, False)
  2450.     Return SetExtended($ARESULT[0], $ARESULT[2])
  2451. EndFunc
  2452. Func _WinAPI_GetClientHeight($HWND)
  2453.     Local $TRECT = _WinAPI_GetClientRect($HWND)
  2454.     If @error Then Return SetError(@error, @extended, 0)
  2455.     Return DllStructGetData($TRECT, "Bottom") - DllStructGetData($TRECT, "Top")
  2456. EndFunc
  2457. Func _WinAPI_GetClientWidth($HWND)
  2458.     Local $TRECT = _WinAPI_GetClientRect($HWND)
  2459.     If @error Then Return SetError(@error, @extended, 0)
  2460.     Return DllStructGetData($TRECT, "Right") - DllStructGetData($TRECT, "Left")
  2461. EndFunc
  2462. Func _WinAPI_GetClientRect($HWND)
  2463.     Local $TRECT = DllStructCreate($TAGRECT)
  2464.     DllCall("user32.dll", "bool", "GetClientRect", "hwnd", $HWND, "struct*", $TRECT)
  2465.     If @error Then Return SetError(@error, @extended, 0)
  2466.     Return $TRECT
  2467. EndFunc
  2468. Func _WinAPI_GetCurrentProcess()
  2469.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GetCurrentProcess")
  2470.     If @error Then Return SetError(@error, @extended, 0)
  2471.     Return $ARESULT[0]
  2472. EndFunc
  2473. Func _WinAPI_GetCurrentProcessID()
  2474.     Local $ARESULT = DllCall("kernel32.dll", "dword", "GetCurrentProcessId")
  2475.     If @error Then Return SetError(@error, @extended, 0)
  2476.     Return $ARESULT[0]
  2477. EndFunc
  2478. Func _WinAPI_GetCurrentThread()
  2479.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GetCurrentThread")
  2480.     If @error Then Return SetError(@error, @extended, 0)
  2481.     Return $ARESULT[0]
  2482. EndFunc
  2483. Func _WinAPI_GetCurrentThreadId()
  2484.     Local $ARESULT = DllCall("kernel32.dll", "dword", "GetCurrentThreadId")
  2485.     If @error Then Return SetError(@error, @extended, 0)
  2486.     Return $ARESULT[0]
  2487. EndFunc
  2488. Func _WinAPI_GetCursorInfo()
  2489.     Local $TCURSOR = DllStructCreate($TAGCURSORINFO)
  2490.     Local $ICURSOR = DllStructGetSize($TCURSOR)
  2491.     DllStructSetData($TCURSOR, "Size", $ICURSOR)
  2492.     DllCall("user32.dll", "bool", "GetCursorInfo", "struct*", $TCURSOR)
  2493.     If @error Then Return SetError(@error, @extended, 0)
  2494.     Local $ACURSOR[5]
  2495.     $ACURSOR[0] = True
  2496.     $ACURSOR[1] = DllStructGetData($TCURSOR, "Flags") <> 0
  2497.     $ACURSOR[2] = DllStructGetData($TCURSOR, "hCursor")
  2498.     $ACURSOR[3] = DllStructGetData($TCURSOR, "X")
  2499.     $ACURSOR[4] = DllStructGetData($TCURSOR, "Y")
  2500.     Return $ACURSOR
  2501. EndFunc
  2502. Func _WinAPI_GetDC($HWND)
  2503.     Local $ARESULT = DllCall("user32.dll", "handle", "GetDC", "hwnd", $HWND)
  2504.     If @error Then Return SetError(@error, @extended, 0)
  2505.     Return $ARESULT[0]
  2506. EndFunc
  2507. Func _WinAPI_GetDesktopWindow()
  2508.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetDesktopWindow")
  2509.     If @error Then Return SetError(@error, @extended, 0)
  2510.     Return $ARESULT[0]
  2511. EndFunc
  2512. Func _WinAPI_GetDeviceCaps($HDC, $IINDEX)
  2513.     Local $ARESULT = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $HDC, "int", $IINDEX)
  2514.     If @error Then Return SetError(@error, @extended, 0)
  2515.     Return $ARESULT[0]
  2516. EndFunc
  2517. Func _WinAPI_GetDIBits($HDC, $HBMP, $ISTARTSCAN, $ISCANLINES, $PBITS, $PBI, $IUSAGE)
  2518.     Local $ARESULT = DllCall("gdi32.dll", "int", "GetDIBits", "handle", $HDC, "handle", $HBMP, "uint", $ISTARTSCAN, "uint", $ISCANLINES, "ptr", $PBITS, "ptr", $PBI, "uint", $IUSAGE)
  2519.     If @error Then Return SetError(@error, @extended, False)
  2520.     Return $ARESULT[0]
  2521. EndFunc
  2522. Func _WinAPI_GetDlgCtrlID($HWND)
  2523.     Local $ARESULT = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $HWND)
  2524.     If @error Then Return SetError(@error, @extended, 0)
  2525.     Return $ARESULT[0]
  2526. EndFunc
  2527. Func _WinAPI_GetDlgItem($HWND, $IITEMID)
  2528.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetDlgItem", "hwnd", $HWND, "int", $IITEMID)
  2529.     If @error Then Return SetError(@error, @extended, 0)
  2530.     Return $ARESULT[0]
  2531. EndFunc
  2532. Func _WinAPI_GetFocus()
  2533.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetFocus")
  2534.     If @error Then Return SetError(@error, @extended, 0)
  2535.     Return $ARESULT[0]
  2536. EndFunc
  2537. Func _WinAPI_GetForegroundWindow()
  2538.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetForegroundWindow")
  2539.     If @error Then Return SetError(@error, @extended, 0)
  2540.     Return $ARESULT[0]
  2541. EndFunc
  2542. Func _WinAPI_GetGuiResources($IFLAG = 0, $HPROCESS = -1)
  2543.     If $HPROCESS = -1 Then $HPROCESS = _WinAPI_GetCurrentProcess()
  2544.     Local $ARESULT = DllCall("user32.dll", "dword", "GetGuiResources", "handle", $HPROCESS, "dword", $IFLAG)
  2545.     If @error Then Return SetError(@error, @extended, 0)
  2546.     Return $ARESULT[0]
  2547. EndFunc
  2548. Func _WinAPI_GetIconInfo($HICON)
  2549.     Local $TINFO = DllStructCreate($TAGICONINFO)
  2550.     DllCall("user32.dll", "bool", "GetIconInfo", "handle", $HICON, "struct*", $TINFO)
  2551.     If @error Then Return SetError(@error, @extended, 0)
  2552.     Local $AICON[6]
  2553.     $AICON[0] = True
  2554.     $AICON[1] = DllStructGetData($TINFO, "Icon") <> 0
  2555.     $AICON[2] = DllStructGetData($TINFO, "XHotSpot")
  2556.     $AICON[3] = DllStructGetData($TINFO, "YHotSpot")
  2557.     $AICON[4] = DllStructGetData($TINFO, "hMask")
  2558.     $AICON[5] = DllStructGetData($TINFO, "hColor")
  2559.     Return $AICON
  2560. EndFunc
  2561. Func _WinAPI_GetFileSizeEx($HFILE)
  2562.     Local $ARESULT = DllCall("kernel32.dll", "bool", "GetFileSizeEx", "handle", $HFILE, "int64*", 0)
  2563.     If @error Then Return SetError(@error, @extended, 0)
  2564.     Return $ARESULT[2]
  2565. EndFunc
  2566. Func _WinAPI_GetLastErrorMessage()
  2567.     Local $TBUFFERPTR = DllStructCreate("ptr")
  2568.     Local $NCOUNT = _WinAPI_FormatMessage(BitOR($__WINAPICONSTANT_FORMAT_MESSAGE_ALLOCATE_BUFFER, $__WINAPICONSTANT_FORMAT_MESSAGE_FROM_SYSTEM), 0, _WinAPI_GetLastError(), 0, $TBUFFERPTR, 0, 0)
  2569.     If @error Then Return SetError(@error, 0, "")
  2570.     Local $STEXT = ""
  2571.     Local $PBUFFER = DllStructGetData($TBUFFERPTR, 1)
  2572.     If $PBUFFER Then
  2573.         If $NCOUNT > 0 Then
  2574.             Local $TBUFFER = DllStructCreate("wchar[" & ($NCOUNT + 1) & "]", $PBUFFER)
  2575.             $STEXT = DllStructGetData($TBUFFER, 1)
  2576.         EndIf
  2577.         _WinAPI_LocalFree($PBUFFER)
  2578.     EndIf
  2579.     Return $STEXT
  2580. EndFunc
  2581. Func _WinAPI_GetLayeredWindowAttributes($HWND, ByRef $I_TRANSCOLOR, ByRef $TRANSPARENCY, $ASCOLORREF = False)
  2582.     $I_TRANSCOLOR = -1
  2583.     $TRANSPARENCY = -1
  2584.     Local $ARESULT = DllCall("user32.dll", "bool", "GetLayeredWindowAttributes", "hwnd", $HWND, "dword*", $I_TRANSCOLOR, "byte*", $TRANSPARENCY, "dword*", 0)
  2585.     If @error Then Return SetError(@error, @extended, 0)
  2586.     If Not $ASCOLORREF Then
  2587.         $ARESULT[2] = Int(BinaryMid($ARESULT[2], 3, 1) & BinaryMid($ARESULT[2], 2, 1) & BinaryMid($ARESULT[2], 1, 1))
  2588.     EndIf
  2589.     $I_TRANSCOLOR = $ARESULT[2]
  2590.     $TRANSPARENCY = $ARESULT[3]
  2591.     Return $ARESULT[4]
  2592. EndFunc
  2593. Func _WinAPI_GetModuleHandle($SMODULENAME)
  2594.     Local $SMODULENAMETYPE = "wstr"
  2595.     If $SMODULENAME = "" Then
  2596.         $SMODULENAME = 0
  2597.         $SMODULENAMETYPE = "ptr"
  2598.     EndIf
  2599.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GetModuleHandleW", $SMODULENAMETYPE, $SMODULENAME)
  2600.     If @error Then Return SetError(@error, @extended, 0)
  2601.     Return $ARESULT[0]
  2602. EndFunc
  2603. Func _WinAPI_GetMousePos($FTOCLIENT = False, $HWND = 0)
  2604.     Local $IMODE = Opt("MouseCoordMode", 1)
  2605.     Local $APOS = MouseGetPos()
  2606.     Opt("MouseCoordMode", $IMODE)
  2607.     Local $TPOINT = DllStructCreate($TAGPOINT)
  2608.     DllStructSetData($TPOINT, "X", $APOS[0])
  2609.     DllStructSetData($TPOINT, "Y", $APOS[1])
  2610.     If $FTOCLIENT Then
  2611.         _WinAPI_ScreenToClient($HWND, $TPOINT)
  2612.         If @error Then Return SetError(@error, @extended, 0)
  2613.     EndIf
  2614.     Return $TPOINT
  2615. EndFunc
  2616. Func _WinAPI_GetMousePosX($FTOCLIENT = False, $HWND = 0)
  2617.     Local $TPOINT = _WinAPI_GetMousePos($FTOCLIENT, $HWND)
  2618.     If @error Then Return SetError(@error, @extended, 0)
  2619.     Return DllStructGetData($TPOINT, "X")
  2620. EndFunc
  2621. Func _WinAPI_GetMousePosY($FTOCLIENT = False, $HWND = 0)
  2622.     Local $TPOINT = _WinAPI_GetMousePos($FTOCLIENT, $HWND)
  2623.     If @error Then Return SetError(@error, @extended, 0)
  2624.     Return DllStructGetData($TPOINT, "Y")
  2625. EndFunc
  2626. Func _WinAPI_GetObject($HOBJECT, $ISIZE, $POBJECT)
  2627.     Local $ARESULT = DllCall("gdi32.dll", "int", "GetObjectW", "handle", $HOBJECT, "int", $ISIZE, "ptr", $POBJECT)
  2628.     If @error Then Return SetError(@error, @extended, 0)
  2629.     Return $ARESULT[0]
  2630. EndFunc
  2631. Func _WinAPI_GetOpenFileName($STITLE = "", $SFILTER = "All files (*.*)", $SINITALDIR = ".", $SDEFAULTFILE = "", $SDEFAULTEXT = "", $IFILTERINDEX = 1, $IFLAGS = 0, $IFLAGSEX = 0, $HWNDOWNER = 0)
  2632.     Local $IPATHLEN = 4096
  2633.     Local $INULLS = 0
  2634.     Local $TOFN = DllStructCreate($TAGOPENFILENAME)
  2635.     Local $AFILES[1] = [0]
  2636.     Local $IFLAG = $IFLAGS
  2637.     Local $ASFLINES = StringSplit($SFILTER, "|")
  2638.     Local $ASFILTER[$ASFLINES[0] * 2 + 1]
  2639.     Local $ISTART, $IFINAL, $STFILTER
  2640.     $ASFILTER[0] = $ASFLINES[0] * 2
  2641.     For $I = 1 To $ASFLINES[0]
  2642.         $ISTART = StringInStr($ASFLINES[$I], "(", 0, 1)
  2643.         $IFINAL = StringInStr($ASFLINES[$I], ")", 0, -1)
  2644.         $ASFILTER[$I * 2 - 1] = StringStripWS(StringLeft($ASFLINES[$I], $ISTART - 1), 3)
  2645.         $ASFILTER[$I * 2] = StringStripWS(StringTrimRight(StringTrimLeft($ASFLINES[$I], $ISTART), StringLen($ASFLINES[$I]) - $IFINAL + 1), 3)
  2646.         $STFILTER &= "wchar[" & StringLen($ASFILTER[$I * 2 - 1]) + 1 & "];wchar[" & StringLen($ASFILTER[$I * 2]) + 1 & "];"
  2647.     Next
  2648.     Local $TTITLE = DllStructCreate("wchar Title[" & StringLen($STITLE) + 1 & "]")
  2649.     Local $TINITIALDIR = DllStructCreate("wchar InitDir[" & StringLen($SINITALDIR) + 1 & "]")
  2650.     Local $TFILTER = DllStructCreate($STFILTER & "wchar")
  2651.     Local $TPATH = DllStructCreate("wchar Path[" & $IPATHLEN & "]")
  2652.     Local $TEXTN = DllStructCreate("wchar Extension[" & StringLen($SDEFAULTEXT) + 1 & "]")
  2653.     For $I = 1 To $ASFILTER[0]
  2654.         DllStructSetData($TFILTER, $I, $ASFILTER[$I])
  2655.     Next
  2656.     DllStructSetData($TTITLE, "Title", $STITLE)
  2657.     DllStructSetData($TINITIALDIR, "InitDir", $SINITALDIR)
  2658.     DllStructSetData($TPATH, "Path", $SDEFAULTFILE)
  2659.     DllStructSetData($TEXTN, "Extension", $SDEFAULTEXT)
  2660.     DllStructSetData($TOFN, "StructSize", DllStructGetSize($TOFN))
  2661.     DllStructSetData($TOFN, "hwndOwner", $HWNDOWNER)
  2662.     DllStructSetData($TOFN, "lpstrFilter", DllStructGetPtr($TFILTER))
  2663.     DllStructSetData($TOFN, "nFilterIndex", $IFILTERINDEX)
  2664.     DllStructSetData($TOFN, "lpstrFile", DllStructGetPtr($TPATH))
  2665.     DllStructSetData($TOFN, "nMaxFile", $IPATHLEN)
  2666.     DllStructSetData($TOFN, "lpstrInitialDir", DllStructGetPtr($TINITIALDIR))
  2667.     DllStructSetData($TOFN, "lpstrTitle", DllStructGetPtr($TTITLE))
  2668.     DllStructSetData($TOFN, "Flags", $IFLAG)
  2669.     DllStructSetData($TOFN, "lpstrDefExt", DllStructGetPtr($TEXTN))
  2670.     DllStructSetData($TOFN, "FlagsEx", $IFLAGSEX)
  2671.     DllCall("comdlg32.dll", "bool", "GetOpenFileNameW", "struct*", $TOFN)
  2672.     If @error Then Return SetError(@error, @extended, $AFILES)
  2673.     If BitAND($IFLAGS, $OFN_ALLOWMULTISELECT) = $OFN_ALLOWMULTISELECT And BitAND($IFLAGS, $OFN_EXPLORER) = $OFN_EXPLORER Then
  2674.         For $X = 1 To $IPATHLEN
  2675.             If DllStructGetData($TPATH, "Path", $X) = Chr(0) Then
  2676.                 DllStructSetData($TPATH, "Path", "|", $X)
  2677.                 $INULLS += 1
  2678.             Else
  2679.                 $INULLS = 0
  2680.             EndIf
  2681.             If $INULLS = 2 Then ExitLoop
  2682.         Next
  2683.         DllStructSetData($TPATH, "Path", Chr(0), $X - 1)
  2684.         $AFILES = StringSplit(DllStructGetData($TPATH, "Path"), "|")
  2685.         If $AFILES[0] = 1 Then Return __WINAPI_PARSEFILEDIALOGPATH(DllStructGetData($TPATH, "Path"))
  2686.         Return StringSplit(DllStructGetData($TPATH, "Path"), "|")
  2687.     ElseIf BitAND($IFLAGS, $OFN_ALLOWMULTISELECT) = $OFN_ALLOWMULTISELECT Then
  2688.         $AFILES = StringSplit(DllStructGetData($TPATH, "Path"), " ")
  2689.         If $AFILES[0] = 1 Then Return __WINAPI_PARSEFILEDIALOGPATH(DllStructGetData($TPATH, "Path"))
  2690.         Return StringSplit(StringReplace(DllStructGetData($TPATH, "Path"), " ", "|"), "|")
  2691.     Else
  2692.         Return __WINAPI_PARSEFILEDIALOGPATH(DllStructGetData($TPATH, "Path"))
  2693.     EndIf
  2694. EndFunc
  2695. Func _WinAPI_GetOverlappedResult($HFILE, $POVERLAPPED, ByRef $IBYTES, $FWAIT = False)
  2696.     Local $ARESULT = DllCall("kernel32.dll", "bool", "GetOverlappedResult", "handle", $HFILE, "ptr", $POVERLAPPED, "dword*", 0, "bool", $FWAIT)
  2697.     If @error Then Return SetError(@error, @extended, False)
  2698.     $IBYTES = $ARESULT[3]
  2699.     Return $ARESULT[0]
  2700. EndFunc
  2701. Func _WinAPI_GetParent($HWND)
  2702.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $HWND)
  2703.     If @error Then Return SetError(@error, @extended, 0)
  2704.     Return $ARESULT[0]
  2705. EndFunc
  2706. Func _WinAPI_GetProcessAffinityMask($HPROCESS)
  2707.     Local $ARESULT = DllCall("kernel32.dll", "bool", "GetProcessAffinityMask", "handle", $HPROCESS, "dword_ptr*", 0, "dword_ptr*", 0)
  2708.     If @error Then Return SetError(@error, @extended, 0)
  2709.     Local $AMASK[3]
  2710.     $AMASK[0] = True
  2711.     $AMASK[1] = $ARESULT[2]
  2712.     $AMASK[2] = $ARESULT[3]
  2713.     Return $AMASK
  2714. EndFunc
  2715. Func _WinAPI_GetSaveFileName($STITLE = "", $SFILTER = "All files (*.*)", $SINITALDIR = ".", $SDEFAULTFILE = "", $SDEFAULTEXT = "", $IFILTERINDEX = 1, $IFLAGS = 0, $IFLAGSEX = 0, $HWNDOWNER = 0)
  2716.     Local $IPATHLEN = 4096
  2717.     Local $TOFN = DllStructCreate($TAGOPENFILENAME)
  2718.     Local $AFILES[1] = [0]
  2719.     Local $IFLAG = $IFLAGS
  2720.     Local $ASFLINES = StringSplit($SFILTER, "|")
  2721.     Local $ASFILTER[$ASFLINES[0] * 2 + 1]
  2722.     Local $ISTART, $IFINAL, $STFILTER
  2723.     $ASFILTER[0] = $ASFLINES[0] * 2
  2724.     For $I = 1 To $ASFLINES[0]
  2725.         $ISTART = StringInStr($ASFLINES[$I], "(", 0, 1)
  2726.         $IFINAL = StringInStr($ASFLINES[$I], ")", 0, -1)
  2727.         $ASFILTER[$I * 2 - 1] = StringStripWS(StringLeft($ASFLINES[$I], $ISTART - 1), 3)
  2728.         $ASFILTER[$I * 2] = StringStripWS(StringTrimRight(StringTrimLeft($ASFLINES[$I], $ISTART), StringLen($ASFLINES[$I]) - $IFINAL + 1), 3)
  2729.         $STFILTER &= "wchar[" & StringLen($ASFILTER[$I * 2 - 1]) + 1 & "];wchar[" & StringLen($ASFILTER[$I * 2]) + 1 & "];"
  2730.     Next
  2731.     Local $TTITLE = DllStructCreate("wchar Title[" & StringLen($STITLE) + 1 & "]")
  2732.     Local $TINITIALDIR = DllStructCreate("wchar InitDir[" & StringLen($SINITALDIR) + 1 & "]")
  2733.     Local $TFILTER = DllStructCreate($STFILTER & "wchar")
  2734.     Local $TPATH = DllStructCreate("wchar Path[" & $IPATHLEN & "]")
  2735.     Local $TEXTN = DllStructCreate("wchar Extension[" & StringLen($SDEFAULTEXT) + 1 & "]")
  2736.     For $I = 1 To $ASFILTER[0]
  2737.         DllStructSetData($TFILTER, $I, $ASFILTER[$I])
  2738.     Next
  2739.     DllStructSetData($TTITLE, "Title", $STITLE)
  2740.     DllStructSetData($TINITIALDIR, "InitDir", $SINITALDIR)
  2741.     DllStructSetData($TPATH, "Path", $SDEFAULTFILE)
  2742.     DllStructSetData($TEXTN, "Extension", $SDEFAULTEXT)
  2743.     DllStructSetData($TOFN, "StructSize", DllStructGetSize($TOFN))
  2744.     DllStructSetData($TOFN, "hwndOwner", $HWNDOWNER)
  2745.     DllStructSetData($TOFN, "lpstrFilter", DllStructGetPtr($TFILTER))
  2746.     DllStructSetData($TOFN, "nFilterIndex", $IFILTERINDEX)
  2747.     DllStructSetData($TOFN, "lpstrFile", DllStructGetPtr($TPATH))
  2748.     DllStructSetData($TOFN, "nMaxFile", $IPATHLEN)
  2749.     DllStructSetData($TOFN, "lpstrInitialDir", DllStructGetPtr($TINITIALDIR))
  2750.     DllStructSetData($TOFN, "lpstrTitle", DllStructGetPtr($TTITLE))
  2751.     DllStructSetData($TOFN, "Flags", $IFLAG)
  2752.     DllStructSetData($TOFN, "lpstrDefExt", DllStructGetPtr($TEXTN))
  2753.     DllStructSetData($TOFN, "FlagsEx", $IFLAGSEX)
  2754.     DllCall("comdlg32.dll", "bool", "GetSaveFileNameW", "struct*", $TOFN)
  2755.     If @error Then Return SetError(@error, @extended, $AFILES)
  2756.     Return __WINAPI_PARSEFILEDIALOGPATH(DllStructGetData($TPATH, "Path"))
  2757. EndFunc
  2758. Func _WinAPI_GetStockObject($IOBJECT)
  2759.     Local $ARESULT = DllCall("gdi32.dll", "handle", "GetStockObject", "int", $IOBJECT)
  2760.     If @error Then Return SetError(@error, @extended, 0)
  2761.     Return $ARESULT[0]
  2762. EndFunc
  2763. Func _WinAPI_GetStdHandle($ISTDHANDLE)
  2764.     If $ISTDHANDLE < 0 Or $ISTDHANDLE > 2 Then Return SetError(2, 0, -1)
  2765.     Local Const $AHANDLE[3] = [-10, -11, -12]
  2766.     Local $ARESULT = DllCall("kernel32.dll", "handle", "GetStdHandle", "dword", $AHANDLE[$ISTDHANDLE])
  2767.     If @error Then Return SetError(@error, @extended, -1)
  2768.     Return $ARESULT[0]
  2769. EndFunc
  2770. Func _WinAPI_GetSysColor($IINDEX)
  2771.     Local $ARESULT = DllCall("user32.dll", "dword", "GetSysColor", "int", $IINDEX)
  2772.     If @error Then Return SetError(@error, @extended, 0)
  2773.     Return $ARESULT[0]
  2774. EndFunc
  2775. Func _WinAPI_GetSysColorBrush($IINDEX)
  2776.     Local $ARESULT = DllCall("user32.dll", "handle", "GetSysColorBrush", "int", $IINDEX)
  2777.     If @error Then Return SetError(@error, @extended, 0)
  2778.     Return $ARESULT[0]
  2779. EndFunc
  2780. Func _WinAPI_GetSystemMetrics($IINDEX)
  2781.     Local $ARESULT = DllCall("user32.dll", "int", "GetSystemMetrics", "int", $IINDEX)
  2782.     If @error Then Return SetError(@error, @extended, 0)
  2783.     Return $ARESULT[0]
  2784. EndFunc
  2785. Func _WinAPI_GetTextExtentPoint32($HDC, $STEXT)
  2786.     Local $TSIZE = DllStructCreate($TAGSIZE)
  2787.     Local $ISIZE = StringLen($STEXT)
  2788.     DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $HDC, "wstr", $STEXT, "int", $ISIZE, "struct*", $TSIZE)
  2789.     If @error Then Return SetError(@error, @extended, 0)
  2790.     Return $TSIZE
  2791. EndFunc
  2792. Func _WinAPI_GetTextMetrics($HDC)
  2793.     Local $TTEXTMETRIC = DllStructCreate($TAGTEXTMETRIC)
  2794.     Local $RET = DllCall("gdi32.dll", "bool", "GetTextMetricsW", "handle", $HDC, "struct*", $TTEXTMETRIC)
  2795.     If @error Then Return SetError(@error, @extended, 0)
  2796.     If Not $RET[0] Then Return SetError(-1, 0, 0)
  2797.     Return $TTEXTMETRIC
  2798. EndFunc
  2799. Func _WinAPI_GetWindow($HWND, $ICMD)
  2800.     Local $ARESULT = DllCall("user32.dll", "hwnd", "GetWindow", "hwnd", $HWND, "uint", $ICMD)
  2801.     If @error Then Return SetError(@error, @extended, 0)
  2802.     Return $ARESULT[0]
  2803. EndFunc
  2804. Func _WinAPI_GetWindowDC($HWND)
  2805.     Local $ARESULT = DllCall("user32.dll", "handle", "GetWindowDC", "hwnd", $HWND)
  2806.     If @error Then Return SetError(@error, @extended, 0)
  2807.     Return $ARESULT[0]
  2808. EndFunc
  2809. Func _WinAPI_GetWindowHeight($HWND)
  2810.     Local $TRECT = _WinAPI_GetWindowRect($HWND)
  2811.     If @error Then Return SetError(@error, @extended, 0)
  2812.     Return DllStructGetData($TRECT, "Bottom") - DllStructGetData($TRECT, "Top")
  2813. EndFunc
  2814. Func _WinAPI_GetWindowLong($HWND, $IINDEX)
  2815.     Local $SFUNCNAME = "GetWindowLongW"
  2816.     If @AutoItX64 Then $SFUNCNAME = "GetWindowLongPtrW"
  2817.     Local $ARESULT = DllCall("user32.dll", "long_ptr", $SFUNCNAME, "hwnd", $HWND, "int", $IINDEX)
  2818.     If @error Then Return SetError(@error, @extended, 0)
  2819.     Return $ARESULT[0]
  2820. EndFunc
  2821. Func _WinAPI_GetWindowPlacement($HWND)
  2822.     Local $TWINDOWPLACEMENT = DllStructCreate($TAGWINDOWPLACEMENT)
  2823.     DllStructSetData($TWINDOWPLACEMENT, "length", DllStructGetSize($TWINDOWPLACEMENT))
  2824.     DllCall("user32.dll", "bool", "GetWindowPlacement", "hwnd", $HWND, "struct*", $TWINDOWPLACEMENT)
  2825.     If @error Then Return SetError(@error, @extended, 0)
  2826.     Return $TWINDOWPLACEMENT
  2827. EndFunc
  2828. Func _WinAPI_GetWindowRect($HWND)
  2829.     Local $TRECT = DllStructCreate($TAGRECT)
  2830.     DllCall("user32.dll", "bool", "GetWindowRect", "hwnd", $HWND, "struct*", $TRECT)
  2831.     If @error Then Return SetError(@error, @extended, 0)
  2832.     Return $TRECT
  2833. EndFunc
  2834. Func _WinAPI_GetWindowRgn($HWND, $HRGN)
  2835.     Local $ARESULT = DllCall("user32.dll", "int", "GetWindowRgn", "hwnd", $HWND, "handle", $HRGN)
  2836.     If @error Then Return SetError(@error, @extended, 0)
  2837.     Return $ARESULT[0]
  2838. EndFunc
  2839. Func _WinAPI_GetWindowText($HWND)
  2840.     Local $ARESULT = DllCall("user32.dll", "int", "GetWindowTextW", "hwnd", $HWND, "wstr", "", "int", 4096)
  2841.     If @error Then Return SetError(@error, @extended, "")
  2842.     Return SetExtended($ARESULT[0], $ARESULT[2])
  2843. EndFunc
  2844. Func _WinAPI_GetWindowThreadProcessId($HWND, ByRef $IPID)
  2845.     Local $ARESULT = DllCall("user32.dll", "dword", "GetWindowThreadProcessId", "hwnd", $HWND, "dword*", 0)
  2846.     If @error Then Return SetError(@error, @extended, 0)
  2847.     $IPID = $ARESULT[2]
  2848.     Return $ARESULT[0]
  2849. EndFunc
  2850. Func _WinAPI_GetWindowWidth($HWND)
  2851.     Local $TRECT = _WinAPI_GetWindowRect($HWND)
  2852.     If @error Then Return SetError(@error, @extended, 0)
  2853.     Return DllStructGetData($TRECT, "Right") - DllStructGetData($TRECT, "Left")
  2854. EndFunc
  2855. Func _WinAPI_GetXYFromPoint(ByRef $TPOINT, ByRef $IX, ByRef $IY)
  2856.     $IX = DllStructGetData($TPOINT, "X")
  2857.     $IY = DllStructGetData($TPOINT, "Y")
  2858. EndFunc
  2859. Func _WinAPI_GlobalMemoryStatus()
  2860.     Local $TMEM = DllStructCreate($TAGMEMORYSTATUSEX)
  2861.     Local $IMEM = DllStructGetSize($TMEM)
  2862.     DllStructSetData($TMEM, 1, $IMEM)
  2863.     DllCall("kernel32.dll", "none", "GlobalMemoryStatusEx", "ptr", $TMEM)
  2864.     If @error Then Return SetError(@error, @extended, 0)
  2865.     Local $AMEM[7]
  2866.     $AMEM[0] = DllStructGetData($TMEM, 2)
  2867.     $AMEM[1] = DllStructGetData($TMEM, 3)
  2868.     $AMEM[2] = DllStructGetData($TMEM, 4)
  2869.     $AMEM[3] = DllStructGetData($TMEM, 5)
  2870.     $AMEM[4] = DllStructGetData($TMEM, 6)
  2871.     $AMEM[5] = DllStructGetData($TMEM, 7)
  2872.     $AMEM[6] = DllStructGetData($TMEM, 8)
  2873.     Return $AMEM
  2874. EndFunc
  2875. Func _WinAPI_GUIDFromString($SGUID)
  2876.     Local $TGUID = DllStructCreate($TAGGUID)
  2877.     _WinAPI_GUIDFromStringEx($SGUID, $TGUID)
  2878.     If @error Then Return SetError(@error, @extended, 0)
  2879.     Return $TGUID
  2880. EndFunc
  2881. Func _WinAPI_GUIDFromStringEx($SGUID, $PGUID)
  2882.     Local $ARESULT = DllCall("ole32.dll", "long", "CLSIDFromString", "wstr", $SGUID, "struct*", $PGUID)
  2883.     If @error Then Return SetError(@error, @extended, False)
  2884.     Return $ARESULT[0]
  2885. EndFunc
  2886. Func _WinAPI_HiWord($ILONG)
  2887.     Return BitShift($ILONG, 16)
  2888. EndFunc
  2889. Func _WinAPI_InProcess($HWND, ByRef $HLASTWND)
  2890.     If $HWND = $HLASTWND Then Return True
  2891.     For $II = $__GAINPROCESS_WINAPI[0][0] To 1 Step -1
  2892.         If $HWND = $__GAINPROCESS_WINAPI[$II][0] Then
  2893.             If $__GAINPROCESS_WINAPI[$II][1] Then
  2894.                 $HLASTWND = $HWND
  2895.                 Return True
  2896.             Else
  2897.                 Return False
  2898.             EndIf
  2899.         EndIf
  2900.     Next
  2901.     Local $IPROCESSID
  2902.     _WinAPI_GetWindowThreadProcessId($HWND, $IPROCESSID)
  2903.     Local $ICOUNT = $__GAINPROCESS_WINAPI[0][0] + 1
  2904.     If $ICOUNT >= 64 Then $ICOUNT = 1
  2905.     $__GAINPROCESS_WINAPI[0][0] = $ICOUNT
  2906.     $__GAINPROCESS_WINAPI[$ICOUNT][0] = $HWND
  2907.     $__GAINPROCESS_WINAPI[$ICOUNT][1] = ($IPROCESSID = @AutoItPID)
  2908.     Return $__GAINPROCESS_WINAPI[$ICOUNT][1]
  2909. EndFunc
  2910. Func _WinAPI_IntToFloat($IINT)
  2911.     Local $TINT = DllStructCreate("int")
  2912.     Local $TFLOAT = DllStructCreate("float", DllStructGetPtr($TINT))
  2913.     DllStructSetData($TINT, 1, $IINT)
  2914.     Return DllStructGetData($TFLOAT, 1)
  2915. EndFunc
  2916. Func _WinAPI_IsClassName($HWND, $SCLASSNAME)
  2917.     Local $SSEPARATOR = Opt("GUIDataSeparatorChar")
  2918.     Local $ACLASSNAME = StringSplit($SCLASSNAME, $SSEPARATOR)
  2919.     If Not IsHWnd($HWND) Then $HWND = GUICtrlGetHandle($HWND)
  2920.     Local $SCLASSCHECK = _WinAPI_GetClassName($HWND)
  2921.     For $X = 1 To UBound($ACLASSNAME) - 1
  2922.         If StringUpper(StringMid($SCLASSCHECK, 1, StringLen($ACLASSNAME[$X]))) = StringUpper($ACLASSNAME[$X]) Then Return True
  2923.     Next
  2924.     Return False
  2925. EndFunc
  2926. Func _WinAPI_IsWindow($HWND)
  2927.     Local $ARESULT = DllCall("user32.dll", "bool", "IsWindow", "hwnd", $HWND)
  2928.     If @error Then Return SetError(@error, @extended, 0)
  2929.     Return $ARESULT[0]
  2930. EndFunc
  2931. Func _WinAPI_IsWindowVisible($HWND)
  2932.     Local $ARESULT = DllCall("user32.dll", "bool", "IsWindowVisible", "hwnd", $HWND)
  2933.     If @error Then Return SetError(@error, @extended, 0)
  2934.     Return $ARESULT[0]
  2935. EndFunc
  2936. Func _WinAPI_InvalidateRect($HWND, $TRECT = 0, $FERASE = True)
  2937.     Local $ARESULT = DllCall("user32.dll", "bool", "InvalidateRect", "hwnd", $HWND, "struct*", $TRECT, "bool", $FERASE)
  2938.     If @error Then Return SetError(@error, @extended, False)
  2939.     Return $ARESULT[0]
  2940. EndFunc
  2941. Func _WinAPI_LineTo($HDC, $IX, $IY)
  2942.     Local $ARESULT = DllCall("gdi32.dll", "bool", "LineTo", "handle", $HDC, "int", $IX, "int", $IY)
  2943.     If @error Then Return SetError(@error, @extended, False)
  2944.     Return $ARESULT[0]
  2945. EndFunc
  2946. Func _WinAPI_LoadBitmap($HINSTANCE, $SBITMAP)
  2947.     Local $SBITMAPTYPE = "int"
  2948.     If IsString($SBITMAP) Then $SBITMAPTYPE = "wstr"
  2949.     Local $ARESULT = DllCall("user32.dll", "handle", "LoadBitmapW", "handle", $HINSTANCE, $SBITMAPTYPE, $SBITMAP)
  2950.     If @error Then Return SetError(@error, @extended, 0)
  2951.     Return $ARESULT[0]
  2952. EndFunc
  2953. Func _WinAPI_LoadImage($HINSTANCE, $SIMAGE, $ITYPE, $IXDESIRED, $IYDESIRED, $ILOAD)
  2954.     Local $ARESULT, $SIMAGETYPE = "int"
  2955.     If IsString($SIMAGE) Then $SIMAGETYPE = "wstr"
  2956.     $ARESULT = DllCall("user32.dll", "handle", "LoadImageW", "handle", $HINSTANCE, $SIMAGETYPE, $SIMAGE, "uint", $ITYPE, "int", $IXDESIRED, "int", $IYDESIRED, "uint", $ILOAD)
  2957.     If @error Then Return SetError(@error, @extended, 0)
  2958.     Return $ARESULT[0]
  2959. EndFunc
  2960. Func _WinAPI_LoadLibrary($SFILENAME)
  2961.     Local $ARESULT = DllCall("kernel32.dll", "handle", "LoadLibraryW", "wstr", $SFILENAME)
  2962.     If @error Then Return SetError(@error, @extended, 0)
  2963.     Return $ARESULT[0]
  2964. EndFunc
  2965. Func _WinAPI_LoadLibraryEx($SFILENAME, $IFLAGS = 0)
  2966.     Local $ARESULT = DllCall("kernel32.dll", "handle", "LoadLibraryExW", "wstr", $SFILENAME, "ptr", 0, "dword", $IFLAGS)
  2967.     If @error Then Return SetError(@error, @extended, 0)
  2968.     Return $ARESULT[0]
  2969. EndFunc
  2970. Func _WinAPI_LoadShell32Icon($IICONID)
  2971.     Local $TICONS = DllStructCreate("ptr Data")
  2972.     Local $IICONS = _WinAPI_ExtractIconEx("shell32.dll", $IICONID, 0, $TICONS, 1)
  2973.     If @error Then Return SetError(@error, @extended, 0)
  2974.     If $IICONS <= 0 Then Return SetError(1, 0, 0)
  2975.     Return DllStructGetData($TICONS, "Data")
  2976. EndFunc
  2977. Func _WinAPI_LoadString($HINSTANCE, $ISTRINGID)
  2978.     Local $ARESULT = DllCall("user32.dll", "int", "LoadStringW", "handle", $HINSTANCE, "uint", $ISTRINGID, "wstr", "", "int", 4096)
  2979.     If @error Then Return SetError(@error, @extended, "")
  2980.     Return SetExtended($ARESULT[0], $ARESULT[3])
  2981. EndFunc
  2982. Func _WinAPI_LocalFree($HMEM)
  2983.     Local $ARESULT = DllCall("kernel32.dll", "handle", "LocalFree", "handle", $HMEM)
  2984.     If @error Then Return SetError(@error, @extended, False)
  2985.     Return $ARESULT[0]
  2986. EndFunc
  2987. Func _WinAPI_LoWord($ILONG)
  2988.     Return BitAND($ILONG, 65535)
  2989. EndFunc
  2990. Func _WinAPI_MAKELANGID($LGIDPRIMARY, $LGIDSUB)
  2991.     Return BitOR(BitShift($LGIDSUB, -10), $LGIDPRIMARY)
  2992. EndFunc
  2993. Func _WinAPI_MAKELCID($LGID, $SRTID)
  2994.     Return BitOR(BitShift($SRTID, -16), $LGID)
  2995. EndFunc
  2996. Func _WinAPI_MakeLong($ILO, $IHI)
  2997.     Return BitOR(BitShift($IHI, -16), BitAND($ILO, 65535))
  2998. EndFunc
  2999. Func _WinAPI_MakeQWord($LODWORD, $HIDWORD)
  3000.     Local $TINT64 = DllStructCreate("uint64")
  3001.     Local $TDWORDS = DllStructCreate("dword;dword", DllStructGetPtr($TINT64))
  3002.     DllStructSetData($TDWORDS, 1, $LODWORD)
  3003.     DllStructSetData($TDWORDS, 2, $HIDWORD)
  3004.     Return DllStructGetData($TINT64, 1)
  3005. EndFunc
  3006. Func _WinAPI_MessageBeep($ITYPE = 1)
  3007.     Local $ISOUND
  3008.     Switch $ITYPE
  3009.         Case 1
  3010.             $ISOUND = 0
  3011.         Case 2
  3012.             $ISOUND = 16
  3013.         Case 3
  3014.             $ISOUND = 32
  3015.         Case 4
  3016.             $ISOUND = 48
  3017.         Case 5
  3018.             $ISOUND = 64
  3019.         Case Else
  3020.             $ISOUND = -1
  3021.     EndSwitch
  3022.     Local $ARESULT = DllCall("user32.dll", "bool", "MessageBeep", "uint", $ISOUND)
  3023.     If @error Then Return SetError(@error, @extended, False)
  3024.     Return $ARESULT[0]
  3025. EndFunc
  3026. Func _WinAPI_MsgBox($IFLAGS, $STITLE, $STEXT)
  3027.     BlockInput(0)
  3028.     MsgBox($IFLAGS, $STITLE, $STEXT & "      ")
  3029. EndFunc
  3030. Func _WinAPI_Mouse_Event($IFLAGS, $IX = 0, $IY = 0, $IDATA = 0, $IEXTRAINFO = 0)
  3031.     DllCall("user32.dll", "none", "mouse_event", "dword", $IFLAGS, "dword", $IX, "dword", $IY, "dword", $IDATA, "ulong_ptr", $IEXTRAINFO)
  3032.     If @error Then Return SetError(@error, @extended)
  3033. EndFunc
  3034. Func _WinAPI_MoveTo($HDC, $IX, $IY)
  3035.     Local $ARESULT = DllCall("gdi32.dll", "bool", "MoveToEx", "handle", $HDC, "int", $IX, "int", $IY, "ptr", 0)
  3036.     If @error Then Return SetError(@error, @extended, False)
  3037.     Return $ARESULT[0]
  3038. EndFunc
  3039. Func _WinAPI_MoveWindow($HWND, $IX, $IY, $IWIDTH, $IHEIGHT, $FREPAINT = True)
  3040.     Local $ARESULT = DllCall("user32.dll", "bool", "MoveWindow", "hwnd", $HWND, "int", $IX, "int", $IY, "int", $IWIDTH, "int", $IHEIGHT, "bool", $FREPAINT)
  3041.     If @error Then Return SetError(@error, @extended, False)
  3042.     Return $ARESULT[0]
  3043. EndFunc
  3044. Func _WinAPI_MulDiv($INUMBER, $INUMERATOR, $IDENOMINATOR)
  3045.     Local $ARESULT = DllCall("kernel32.dll", "int", "MulDiv", "int", $INUMBER, "int", $INUMERATOR, "int", $IDENOMINATOR)
  3046.     If @error Then Return SetError(@error, @extended, -1)
  3047.     Return $ARESULT[0]
  3048. EndFunc
  3049. Func _WinAPI_MultiByteToWideChar($STEXT, $ICODEPAGE = 0, $IFLAGS = 0, $BRETSTRING = False)
  3050.     Local $STEXTTYPE = "str"
  3051.     If Not IsString($STEXT) Then $STEXTTYPE = "struct*"
  3052.     Local $ARESULT = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $ICODEPAGE, "dword", $IFLAGS, $STEXTTYPE, $STEXT, "int", -1, "ptr", 0, "int", 0)
  3053.     If @error Then Return SetError(@error, @extended, 0)
  3054.     Local $IOUT = $ARESULT[0]
  3055.     Local $TOUT = DllStructCreate("wchar[" & $IOUT & "]")
  3056.     $ARESULT = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $ICODEPAGE, "dword", $IFLAGS, $STEXTTYPE, $STEXT, "int", -1, "struct*", $TOUT, "int", $IOUT)
  3057.     If @error Then Return SetError(@error, @extended, 0)
  3058.     If $BRETSTRING Then Return DllStructGetData($TOUT, 1)
  3059.     Return $TOUT
  3060. EndFunc
  3061. Func _WinAPI_MultiByteToWideCharEx($STEXT, $PTEXT, $ICODEPAGE = 0, $IFLAGS = 0)
  3062.     Local $ARESULT = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $ICODEPAGE, "dword", $IFLAGS, "STR", $STEXT, "int", -1, "struct*", $PTEXT, "int", (StringLen($STEXT) + 1) * 2)
  3063.     If @error Then Return SetError(@error, @extended, False)
  3064.     Return $ARESULT[0]
  3065. EndFunc
  3066. Func _WinAPI_OpenProcess($IACCESS, $FINHERIT, $IPROCESSID, $FDEBUGPRIV = False)
  3067.     Local $ARESULT = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $IACCESS, "bool", $FINHERIT, "dword", $IPROCESSID)
  3068.     If @error Then Return SetError(@error, @extended, 0)
  3069.     If $ARESULT[0] Then Return $ARESULT[0]
  3070.     If Not $FDEBUGPRIV Then Return 0
  3071.     Local $HTOKEN = _Security__OpenThreadTokenEx(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
  3072.     If @error Then Return SetError(@error, @extended, 0)
  3073.     _Security__SetPrivilege($HTOKEN, "SeDebugPrivilege", True)
  3074.     Local $IERROR = @error
  3075.     Local $ILASTERROR = @extended
  3076.     Local $IRET = 0
  3077.     If Not @error Then
  3078.         $ARESULT = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $IACCESS, "bool", $FINHERIT, "dword", $IPROCESSID)
  3079.         $IERROR = @error
  3080.         $ILASTERROR = @extended
  3081.         If $ARESULT[0] Then $IRET = $ARESULT[0]
  3082.         _Security__SetPrivilege($HTOKEN, "SeDebugPrivilege", False)
  3083.         If @error Then
  3084.             $IERROR = @error
  3085.             $ILASTERROR = @extended
  3086.         EndIf
  3087.     EndIf
  3088.     _WinAPI_CloseHandle($HTOKEN)
  3089.     Return SetError($IERROR, $ILASTERROR, $IRET)
  3090. EndFunc
  3091. Func __WINAPI_PARSEFILEDIALOGPATH($SPATH)
  3092.     Local $AFILES[3]
  3093.     $AFILES[0] = 2
  3094.     Local $STEMP = StringMid($SPATH, 1, StringInStr($SPATH, "\", 0, -1) - 1)
  3095.     $AFILES[1] = $STEMP
  3096.     $AFILES[2] = StringMid($SPATH, StringInStr($SPATH, "\", 0, -1) + 1)
  3097.     Return $AFILES
  3098. EndFunc
  3099. Func _WinAPI_PathFindOnPath(Const $SZFILE, $AEXTRAPATHS = "", Const $SZPATHDELIMITER = @LF)
  3100.     Local $IEXTRACOUNT = 0
  3101.     If IsString($AEXTRAPATHS) Then
  3102.         If StringLen($AEXTRAPATHS) Then
  3103.             $AEXTRAPATHS = StringSplit($AEXTRAPATHS, $SZPATHDELIMITER, 1 + 2)
  3104.             $IEXTRACOUNT = UBound($AEXTRAPATHS, 1)
  3105.         EndIf
  3106.     ElseIf IsArray($AEXTRAPATHS) Then
  3107.         $IEXTRACOUNT = UBound($AEXTRAPATHS)
  3108.     EndIf
  3109.     Local $TPATHS, $TPATHPTRS
  3110.     If $IEXTRACOUNT Then
  3111.         Local $SZSTRUCT = ""
  3112.         For $PATH In $AEXTRAPATHS
  3113.             $SZSTRUCT &= "wchar[" & StringLen($PATH) + 1 & "];"
  3114.         Next
  3115.         $TPATHS = DllStructCreate($SZSTRUCT)
  3116.         $TPATHPTRS = DllStructCreate("ptr[" & $IEXTRACOUNT + 1 & "]")
  3117.         For $I = 1 To $IEXTRACOUNT
  3118.             DllStructSetData($TPATHS, $I, $AEXTRAPATHS[$I - 1])
  3119.             DllStructSetData($TPATHPTRS, 1, DllStructGetPtr($TPATHS, $I), $I)
  3120.         Next
  3121.         DllStructSetData($TPATHPTRS, 1, Ptr(0), $IEXTRACOUNT + 1)
  3122.     EndIf
  3123.     Local $ARESULT = DllCall("shlwapi.dll", "bool", "PathFindOnPathW", "wstr", $SZFILE, "struct*", $TPATHPTRS)
  3124.     If @error Then Return SetError(@error, @extended, False)
  3125.     If $ARESULT[0] = 0 Then Return SetError(1, 0, $SZFILE)
  3126.     Return $ARESULT[1]
  3127. EndFunc
  3128. Func _WinAPI_PointFromRect(ByRef $TRECT, $FCENTER = True)
  3129.     Local $IX1 = DllStructGetData($TRECT, "Left")
  3130.     Local $IY1 = DllStructGetData($TRECT, "Top")
  3131.     Local $IX2 = DllStructGetData($TRECT, "Right")
  3132.     Local $IY2 = DllStructGetData($TRECT, "Bottom")
  3133.     If $FCENTER Then
  3134.         $IX1 = $IX1 + (($IX2 - $IX1) / 2)
  3135.         $IY1 = $IY1 + (($IY2 - $IY1) / 2)
  3136.     EndIf
  3137.     Local $TPOINT = DllStructCreate($TAGPOINT)
  3138.     DllStructSetData($TPOINT, "X", $IX1)
  3139.     DllStructSetData($TPOINT, "Y", $IY1)
  3140.     Return $TPOINT
  3141. EndFunc
  3142. Func _WinAPI_PostMessage($HWND, $IMSG, $IWPARAM, $ILPARAM)
  3143.     Local $ARESULT = DllCall("user32.dll", "bool", "PostMessage", "hwnd", $HWND, "uint", $IMSG, "wparam", $IWPARAM, "lparam", $ILPARAM)
  3144.     If @error Then Return SetError(@error, @extended, False)
  3145.     Return $ARESULT[0]
  3146. EndFunc
  3147. Func _WinAPI_PrimaryLangId($LGID)
  3148.     Return BitAND($LGID, 1023)
  3149. EndFunc
  3150. Func _WinAPI_PtInRect(ByRef $TRECT, ByRef $TPOINT)
  3151.     Local $ARESULT = DllCall("user32.dll", "bool", "PtInRect", "struct*", $TRECT, "struct", $TPOINT)
  3152.     If @error Then Return SetError(1, @extended, False)
  3153.     Return Not ($ARESULT[0] = 0)
  3154. EndFunc
  3155. Func _WinAPI_ReadFile($HFILE, $PBUFFER, $ITOREAD, ByRef $IREAD, $POVERLAPPED = 0)
  3156.     Local $ARESULT = DllCall("kernel32.dll", "bool", "ReadFile", "handle", $HFILE, "ptr", $PBUFFER, "dword", $ITOREAD, "dword*", 0, "ptr", $POVERLAPPED)
  3157.     If @error Then Return SetError(@error, @extended, False)
  3158.     $IREAD = $ARESULT[4]
  3159.     Return $ARESULT[0]
  3160. EndFunc
  3161. Func _WinAPI_ReadProcessMemory($HPROCESS, $PBASEADDRESS, $PBUFFER, $ISIZE, ByRef $IREAD)
  3162.     Local $ARESULT = DllCall("kernel32.dll", "bool", "ReadProcessMemory", "handle", $HPROCESS, "ptr", $PBASEADDRESS, "ptr", $PBUFFER, "ulong_ptr", $ISIZE, "ulong_ptr*", 0)
  3163.     If @error Then Return SetError(@error, @extended, False)
  3164.     $IREAD = $ARESULT[5]
  3165.     Return $ARESULT[0]
  3166. EndFunc
  3167. Func _WinAPI_RectIsEmpty(ByRef $TRECT)
  3168.     Return (DllStructGetData($TRECT, "Left") = 0) And (DllStructGetData($TRECT, "Top") = 0) And (DllStructGetData($TRECT, "Right") = 0) And (DllStructGetData($TRECT, "Bottom") = 0)
  3169. EndFunc
  3170. Func _WinAPI_RedrawWindow($HWND, $TRECT = 0, $HREGION = 0, $IFLAGS = 5)
  3171.     Local $ARESULT = DllCall("user32.dll", "bool", "RedrawWindow", "hwnd", $HWND, "struct*", $TRECT, "handle", $HREGION, "uint", $IFLAGS)
  3172.     If @error Then Return SetError(@error, @extended, False)
  3173.     Return $ARESULT[0]
  3174. EndFunc
  3175. Func _WinAPI_RegisterWindowMessage($SMESSAGE)
  3176.     Local $ARESULT = DllCall("user32.dll", "uint", "RegisterWindowMessageW", "wstr", $SMESSAGE)
  3177.     If @error Then Return SetError(@error, @extended, 0)
  3178.     Return $ARESULT[0]
  3179. EndFunc
  3180. Func _WinAPI_ReleaseCapture()
  3181.     Local $ARESULT = DllCall("user32.dll", "bool", "ReleaseCapture")
  3182.     If @error Then Return SetError(@error, @extended, False)
  3183.     Return $ARESULT[0]
  3184. EndFunc
  3185. Func _WinAPI_ReleaseDC($HWND, $HDC)
  3186.     Local $ARESULT = DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $HWND, "handle", $HDC)
  3187.     If @error Then Return SetError(@error, @extended, False)
  3188.     Return $ARESULT[0]
  3189. EndFunc
  3190. Func _WinAPI_ScreenToClient($HWND, ByRef $TPOINT)
  3191.     Local $ARESULT = DllCall("user32.dll", "bool", "ScreenToClient", "hwnd", $HWND, "struct*", $TPOINT)
  3192.     If @error Then Return SetError(@error, @extended, False)
  3193.     Return $ARESULT[0]
  3194. EndFunc
  3195. Func _WinAPI_SelectObject($HDC, $HGDIOBJ)
  3196.     Local $ARESULT = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $HDC, "handle", $HGDIOBJ)
  3197.     If @error Then Return SetError(@error, @extended, False)
  3198.     Return $ARESULT[0]
  3199. EndFunc
  3200. Func _WinAPI_SetBkColor($HDC, $ICOLOR)
  3201.     Local $ARESULT = DllCall("gdi32.dll", "INT", "SetBkColor", "handle", $HDC, "dword", $ICOLOR)
  3202.     If @error Then Return SetError(@error, @extended, -1)
  3203.     Return $ARESULT[0]
  3204. EndFunc
  3205. Func _WinAPI_SetBkMode($HDC, $IBKMODE)
  3206.     Local $ARESULT = DllCall("gdi32.dll", "int", "SetBkMode", "handle", $HDC, "int", $IBKMODE)
  3207.     If @error Then Return SetError(@error, @extended, 0)
  3208.     Return $ARESULT[0]
  3209. EndFunc
  3210. Func _WinAPI_SetCapture($HWND)
  3211.     Local $ARESULT = DllCall("user32.dll", "hwnd", "SetCapture", "hwnd", $HWND)
  3212.     If @error Then Return SetError(@error, @extended, 0)
  3213.     Return $ARESULT[0]
  3214. EndFunc
  3215. Func _WinAPI_SetCursor($HCURSOR)
  3216.     Local $ARESULT = DllCall("user32.dll", "handle", "SetCursor", "handle", $HCURSOR)
  3217.     If @error Then Return SetError(@error, @extended, 0)
  3218.     Return $ARESULT[0]
  3219. EndFunc
  3220. Func _WinAPI_SetDefaultPrinter($SPRINTER)
  3221.     Local $ARESULT = DllCall("winspool.drv", "bool", "SetDefaultPrinterW", "wstr", $SPRINTER)
  3222.     If @error Then Return SetError(@error, @extended, False)
  3223.     Return $ARESULT[0]
  3224. EndFunc
  3225. Func _WinAPI_SetDIBits($HDC, $HBMP, $ISTARTSCAN, $ISCANLINES, $PBITS, $PBMI, $ICOLORUSE = 0)
  3226.     Local $ARESULT = DllCall("gdi32.dll", "int", "SetDIBits", "handle", $HDC, "handle", $HBMP, "uint", $ISTARTSCAN, "uint", $ISCANLINES, "ptr", $PBITS, "ptr", $PBMI, "uint", $ICOLORUSE)
  3227.     If @error Then Return SetError(@error, @extended, False)
  3228.     Return $ARESULT[0]
  3229. EndFunc
  3230. Func _WinAPI_SetEndOfFile($HFILE)
  3231.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SetEndOfFile", "handle", $HFILE)
  3232.     If @error Then Return SetError(@error, @extended, False)
  3233.     Return $ARESULT[0]
  3234. EndFunc
  3235. Func _WinAPI_SetEvent($HEVENT)
  3236.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SetEvent", "handle", $HEVENT)
  3237.     If @error Then Return SetError(@error, @extended, False)
  3238.     Return $ARESULT[0]
  3239. EndFunc
  3240. Func _WinAPI_SetFilePointer($HFILE, $IPOS, $IMETHOD = 0)
  3241.     Local $ARESULT = DllCall("kernel32.dll", "INT", "SetFilePointer", "handle", $HFILE, "long", $IPOS, "ptr", 0, "long", $IMETHOD)
  3242.     If @error Then Return SetError(@error, @extended, -1)
  3243.     Return $ARESULT[0]
  3244. EndFunc
  3245. Func _WinAPI_SetFocus($HWND)
  3246.     Local $ARESULT = DllCall("user32.dll", "hwnd", "SetFocus", "hwnd", $HWND)
  3247.     If @error Then Return SetError(@error, @extended, 0)
  3248.     Return $ARESULT[0]
  3249. EndFunc
  3250. Func _WinAPI_SetFont($HWND, $HFONT, $FREDRAW = True)
  3251.     _SendMessage($HWND, $__WINAPICONSTANT_WM_SETFONT, $HFONT, $FREDRAW, 0, "hwnd")
  3252. EndFunc
  3253. Func _WinAPI_SetHandleInformation($HOBJECT, $IMASK, $IFLAGS)
  3254.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SetHandleInformation", "handle", $HOBJECT, "dword", $IMASK, "dword", $IFLAGS)
  3255.     If @error Then Return SetError(@error, @extended, False)
  3256.     Return $ARESULT[0]
  3257. EndFunc
  3258. Func _WinAPI_SetLayeredWindowAttributes($HWND, $I_TRANSCOLOR, $TRANSPARENCY = 255, $DWFLAGS = 3, $ISCOLORREF = False)
  3259.     If $DWFLAGS = Default Or $DWFLAGS = "" Or $DWFLAGS < 0 Then $DWFLAGS = 3
  3260.     If Not $ISCOLORREF Then
  3261.         $I_TRANSCOLOR = Int(BinaryMid($I_TRANSCOLOR, 3, 1) & BinaryMid($I_TRANSCOLOR, 2, 1) & BinaryMid($I_TRANSCOLOR, 1, 1))
  3262.     EndIf
  3263.     Local $ARESULT = DllCall("user32.dll", "bool", "SetLayeredWindowAttributes", "hwnd", $HWND, "dword", $I_TRANSCOLOR, "byte", $TRANSPARENCY, "dword", $DWFLAGS)
  3264.     If @error Then Return SetError(@error, @extended, False)
  3265.     Return $ARESULT[0]
  3266. EndFunc
  3267. Func _WinAPI_SetParent($HWNDCHILD, $HWNDPARENT)
  3268.     Local $ARESULT = DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $HWNDCHILD, "hwnd", $HWNDPARENT)
  3269.     If @error Then Return SetError(@error, @extended, 0)
  3270.     Return $ARESULT[0]
  3271. EndFunc
  3272. Func _WinAPI_SetProcessAffinityMask($HPROCESS, $IMASK)
  3273.     Local $ARESULT = DllCall("kernel32.dll", "bool", "SetProcessAffinityMask", "handle", $HPROCESS, "ulong_ptr", $IMASK)
  3274.     If @error Then Return SetError(@error, @extended, False)
  3275.     Return $ARESULT[0]
  3276. EndFunc
  3277. Func _WinAPI_SetSysColors($VELEMENTS, $VCOLORS)
  3278.     Local $ISEARRAY = IsArray($VELEMENTS), $ISCARRAY = IsArray($VCOLORS)
  3279.     Local $IELEMENTNUM
  3280.     If Not $ISCARRAY And Not $ISEARRAY Then
  3281.         $IELEMENTNUM = 1
  3282.     ElseIf $ISCARRAY Or $ISEARRAY Then
  3283.         If Not $ISCARRAY Or Not $ISEARRAY Then Return SetError(-1, -1, False)
  3284.         If UBound($VELEMENTS) <> UBound($VCOLORS) Then Return SetError(-1, -1, False)
  3285.         $IELEMENTNUM = UBound($VELEMENTS)
  3286.     EndIf
  3287.     Local $TELEMENTS = DllStructCreate("int Element[" & $IELEMENTNUM & "]")
  3288.     Local $TCOLORS = DllStructCreate("dword NewColor[" & $IELEMENTNUM & "]")
  3289.     If Not $ISEARRAY Then
  3290.         DllStructSetData($TELEMENTS, "Element", $VELEMENTS, 1)
  3291.     Else
  3292.         For $X = 0 To $IELEMENTNUM - 1
  3293.             DllStructSetData($TELEMENTS, "Element", $VELEMENTS[$X], $X + 1)
  3294.         Next
  3295.     EndIf
  3296.     If Not $ISCARRAY Then
  3297.         DllStructSetData($TCOLORS, "NewColor", $VCOLORS, 1)
  3298.     Else
  3299.         For $X = 0 To $IELEMENTNUM - 1
  3300.             DllStructSetData($TCOLORS, "NewColor", $VCOLORS[$X], $X + 1)
  3301.         Next
  3302.     EndIf
  3303.     Local $ARESULT = DllCall("user32.dll", "bool", "SetSysColors", "int", $IELEMENTNUM, "struct*", $TELEMENTS, "struct*", $TCOLORS)
  3304.     If @error Then Return SetError(@error, @extended, False)
  3305.     Return $ARESULT[0]
  3306. EndFunc
  3307. Func _WinAPI_SetTextColor($HDC, $ICOLOR)
  3308.     Local $ARESULT = DllCall("gdi32.dll", "INT", "SetTextColor", "handle", $HDC, "dword", $ICOLOR)
  3309.     If @error Then Return SetError(@error, @extended, -1)
  3310.     Return $ARESULT[0]
  3311. EndFunc
  3312. Func _WinAPI_SetWindowLong($HWND, $IINDEX, $IVALUE)
  3313.     _WinAPI_SetLastError(0)
  3314.     Local $SFUNCNAME = "SetWindowLongW"
  3315.     If @AutoItX64 Then $SFUNCNAME = "SetWindowLongPtrW"
  3316.     Local $ARESULT = DllCall("user32.dll", "long_ptr", $SFUNCNAME, "hwnd", $HWND, "int", $IINDEX, "long_ptr", $IVALUE)
  3317.     If @error Then Return SetError(@error, @extended, 0)
  3318.     Return $ARESULT[0]
  3319. EndFunc
  3320. Func _WinAPI_SetWindowPlacement($HWND, $PWINDOWPLACEMENT)
  3321.     Local $ARESULT = DllCall("user32.dll", "bool", "SetWindowPlacement", "hwnd", $HWND, "ptr", $PWINDOWPLACEMENT)
  3322.     If @error Then Return SetError(@error, @extended, False)
  3323.     Return $ARESULT[0]
  3324. EndFunc
  3325. Func _WinAPI_SetWindowPos($HWND, $HAFTER, $IX, $IY, $ICX, $ICY, $IFLAGS)
  3326.     Local $ARESULT = DllCall("user32.dll", "bool", "SetWindowPos", "hwnd", $HWND, "hwnd", $HAFTER, "int", $IX, "int", $IY, "int", $ICX, "int", $ICY, "uint", $IFLAGS)
  3327.     If @error Then Return SetError(@error, @extended, False)
  3328.     Return $ARESULT[0]
  3329. EndFunc
  3330. Func _WinAPI_SetWindowRgn($HWND, $HRGN, $BREDRAW = True)
  3331.     Local $ARESULT = DllCall("user32.dll", "int", "SetWindowRgn", "hwnd", $HWND, "handle", $HRGN, "bool", $BREDRAW)
  3332.     If @error Then Return SetError(@error, @extended, False)
  3333.     Return $ARESULT[0]
  3334. EndFunc
  3335. Func _WinAPI_SetWindowsHookEx($IDHOOK, $LPFN, $HMOD, $DWTHREADID = 0)
  3336.     Local $ARESULT = DllCall("user32.dll", "handle", "SetWindowsHookEx", "int", $IDHOOK, "ptr", $LPFN, "handle", $HMOD, "dword", $DWTHREADID)
  3337.     If @error Then Return SetError(@error, @extended, 0)
  3338.     Return $ARESULT[0]
  3339. EndFunc
  3340. Func _WinAPI_SetWindowText($HWND, $STEXT)
  3341.     Local $ARESULT = DllCall("user32.dll", "bool", "SetWindowTextW", "hwnd", $HWND, "wstr", $STEXT)
  3342.     If @error Then Return SetError(@error, @extended, False)
  3343.     Return $ARESULT[0]
  3344. EndFunc
  3345. Func _WinAPI_ShowCursor($FSHOW)
  3346.     Local $ARESULT = DllCall("user32.dll", "int", "ShowCursor", "bool", $FSHOW)
  3347.     If @error Then Return SetError(@error, @extended, 0)
  3348.     Return $ARESULT[0]
  3349. EndFunc
  3350. Func _WinAPI_ShowError($STEXT, $FEXIT = True)
  3351.     _WinAPI_MsgBox(266256, "Error", $STEXT)
  3352.     If $FEXIT Then Exit
  3353. EndFunc
  3354. Func _WinAPI_ShowMsg($STEXT)
  3355.     _WinAPI_MsgBox(64 + 4096, "Information", $STEXT)
  3356. EndFunc
  3357. Func _WinAPI_ShowWindow($HWND, $ICMDSHOW = 5)
  3358.     Local $ARESULT = DllCall("user32.dll", "bool", "ShowWindow", "hwnd", $HWND, "int", $ICMDSHOW)
  3359.     If @error Then Return SetError(@error, @extended, False)
  3360.     Return $ARESULT[0]
  3361. EndFunc
  3362. Func _WinAPI_StringFromGUID($PGUID)
  3363.     Local $ARESULT = DllCall("ole32.dll", "int", "StringFromGUID2", "struct*", $PGUID, "wstr", "", "int", 40)
  3364.     If @error Then Return SetError(@error, @extended, "")
  3365.     Return SetExtended($ARESULT[0], $ARESULT[2])
  3366. EndFunc
  3367. Func _WinAPI_StringLenA($VSTRING)
  3368.     Local $ACALL = DllCall("kernel32.dll", "int", "lstrlenA", "struct*", $VSTRING)
  3369.     If @error Then Return SetError(1, @extended, 0)
  3370.     Return $ACALL[0]
  3371. EndFunc
  3372. Func _WinAPI_StringLenW($VSTRING)
  3373.     Local $ACALL = DllCall("kernel32.dll", "int", "lstrlenW", "struct*", $VSTRING)
  3374.     If @error Then Return SetError(1, @extended, 0)
  3375.     Return $ACALL[0]
  3376. EndFunc
  3377. Func _WinAPI_SubLangId($LGID)
  3378.     Return BitShift($LGID, 10)
  3379. EndFunc
  3380. Func _WinAPI_SystemParametersInfo($IACTION, $IPARAM = 0, $VPARAM = 0, $IWININI = 0)
  3381.     Local $ARESULT = DllCall("user32.dll", "bool", "SystemParametersInfoW", "uint", $IACTION, "uint", $IPARAM, "ptr", $VPARAM, "uint", $IWININI)
  3382.     If @error Then Return SetError(@error, @extended, False)
  3383.     Return $ARESULT[0]
  3384. EndFunc
  3385. Func _WinAPI_TwipsPerPixelX()
  3386.     Local $LNGDC, $TWIPSPERPIXELX
  3387.     $LNGDC = _WinAPI_GetDC(0)
  3388.     $TWIPSPERPIXELX = 1440 / _WinAPI_GetDeviceCaps($LNGDC, $__WINAPICONSTANT_LOGPIXELSX)
  3389.     _WinAPI_ReleaseDC(0, $LNGDC)
  3390.     Return $TWIPSPERPIXELX
  3391. EndFunc
  3392. Func _WinAPI_TwipsPerPixelY()
  3393.     Local $LNGDC, $TWIPSPERPIXELY
  3394.     $LNGDC = _WinAPI_GetDC(0)
  3395.     $TWIPSPERPIXELY = 1440 / _WinAPI_GetDeviceCaps($LNGDC, $__WINAPICONSTANT_LOGPIXELSY)
  3396.     _WinAPI_ReleaseDC(0, $LNGDC)
  3397.     Return $TWIPSPERPIXELY
  3398. EndFunc
  3399. Func _WinAPI_UnhookWindowsHookEx($HHK)
  3400.     Local $ARESULT = DllCall("user32.dll", "bool", "UnhookWindowsHookEx", "handle", $HHK)
  3401.     If @error Then Return SetError(@error, @extended, False)
  3402.     Return $ARESULT[0]
  3403. EndFunc
  3404. Func _WinAPI_UpdateLayeredWindow($HWND, $HDCDEST, $PPTDEST, $PSIZE, $HDCSRCE, $PPTSRCE, $IRGB, $PBLEND, $IFLAGS)
  3405.     Local $ARESULT = DllCall("user32.dll", "bool", "UpdateLayeredWindow", "hwnd", $HWND, "handle", $HDCDEST, "ptr", $PPTDEST, "ptr", $PSIZE, "handle", $HDCSRCE, "ptr", $PPTSRCE, "dword", $IRGB, "ptr", $PBLEND, "dword", $IFLAGS)
  3406.     If @error Then Return SetError(@error, @extended, False)
  3407.     Return $ARESULT[0]
  3408. EndFunc
  3409. Func _WinAPI_UpdateWindow($HWND)
  3410.     Local $ARESULT = DllCall("user32.dll", "bool", "UpdateWindow", "hwnd", $HWND)
  3411.     If @error Then Return SetError(@error, @extended, False)
  3412.     Return $ARESULT[0]
  3413. EndFunc
  3414. Func _WinAPI_WaitForInputIdle($HPROCESS, $ITIMEOUT = -1)
  3415.     Local $ARESULT = DllCall("user32.dll", "dword", "WaitForInputIdle", "handle", $HPROCESS, "dword", $ITIMEOUT)
  3416.     If @error Then Return SetError(@error, @extended, False)
  3417.     Return $ARESULT[0]
  3418. EndFunc
  3419. Func _WinAPI_WaitForMultipleObjects($ICOUNT, $PHANDLES, $FWAITALL = False, $ITIMEOUT = -1)
  3420.     Local $ARESULT = DllCall("kernel32.dll", "INT", "WaitForMultipleObjects", "dword", $ICOUNT, "ptr", $PHANDLES, "bool", $FWAITALL, "dword", $ITIMEOUT)
  3421.     If @error Then Return SetError(@error, @extended, -1)
  3422.     Return $ARESULT[0]
  3423. EndFunc
  3424. Func _WinAPI_WaitForSingleObject($HHANDLE, $ITIMEOUT = -1)
  3425.     Local $ARESULT = DllCall("kernel32.dll", "INT", "WaitForSingleObject", "handle", $HHANDLE, "dword", $ITIMEOUT)
  3426.     If @error Then Return SetError(@error, @extended, -1)
  3427.     Return $ARESULT[0]
  3428. EndFunc
  3429. Func _WinAPI_WideCharToMultiByte($PUNICODE, $ICODEPAGE = 0, $BRETSTRING = True)
  3430.     Local $SUNICODETYPE = "wstr"
  3431.     If Not IsString($PUNICODE) Then $SUNICODETYPE = "struct*"
  3432.     Local $ARESULT = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", $ICODEPAGE, "dword", 0, $SUNICODETYPE, $PUNICODE, "int", -1, "ptr", 0, "int", 0, "ptr", 0, "ptr", 0)
  3433.     If @error Then Return SetError(@error, @extended, "")
  3434.     Local $TMULTIBYTE = DllStructCreate("char[" & $ARESULT[0] & "]")
  3435.     $ARESULT = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", $ICODEPAGE, "dword", 0, $SUNICODETYPE, $PUNICODE, "int", -1, "struct*", $TMULTIBYTE, "int", $ARESULT[0], "ptr", 0, "ptr", 0)
  3436.     If @error Then Return SetError(@error, @extended, "")
  3437.     If $BRETSTRING Then Return DllStructGetData($TMULTIBYTE, 1)
  3438.     Return $TMULTIBYTE
  3439. EndFunc
  3440. Func _WinAPI_WindowFromPoint(ByRef $TPOINT)
  3441.     Local $ARESULT = DllCall("user32.dll", "hwnd", "WindowFromPoint", "struct", $TPOINT)
  3442.     If @error Then Return SetError(1, @extended, 0)
  3443.     Return $ARESULT[0]
  3444. EndFunc
  3445. Func _WinAPI_WriteConsole($HCONSOLE, $STEXT)
  3446.     Local $ARESULT = DllCall("kernel32.dll", "bool", "WriteConsoleW", "handle", $HCONSOLE, "wstr", $STEXT, "dword", StringLen($STEXT), "dword*", 0, "ptr", 0)
  3447.     If @error Then Return SetError(@error, @extended, False)
  3448.     Return $ARESULT[0]
  3449. EndFunc
  3450. Func _WinAPI_WriteFile($HFILE, $PBUFFER, $ITOWRITE, ByRef $IWRITTEN, $POVERLAPPED = 0)
  3451.     Local $ARESULT = DllCall("kernel32.dll", "bool", "WriteFile", "handle", $HFILE, "ptr", $PBUFFER, "dword", $ITOWRITE, "dword*", 0, "ptr", $POVERLAPPED)
  3452.     If @error Then Return SetError(@error, @extended, False)
  3453.     $IWRITTEN = $ARESULT[4]
  3454.     Return $ARESULT[0]
  3455. EndFunc
  3456. Func _WinAPI_WriteProcessMemory($HPROCESS, $PBASEADDRESS, $PBUFFER, $ISIZE, ByRef $IWRITTEN, $SBUFFER = "ptr")
  3457.     Local $ARESULT = DllCall("kernel32.dll", "bool", "WriteProcessMemory", "handle", $HPROCESS, "ptr", $PBASEADDRESS, $SBUFFER, $PBUFFER, "ulong_ptr", $ISIZE, "ulong_ptr*", 0)
  3458.     If @error Then Return SetError(@error, @extended, False)
  3459.     $IWRITTEN = $ARESULT[5]
  3460.     Return $ARESULT[0]
  3461. EndFunc
  3462. Func _Security__AdjustTokenPrivileges($HTOKEN, $FDISABLEALL, $PNEWSTATE, $IBUFFERLEN, $PPREVSTATE = 0, $PREQUIRED = 0)
  3463.     Local $ACALL = DllCall("advapi32.dll", "bool", "AdjustTokenPrivileges", "handle", $HTOKEN, "bool", $FDISABLEALL, "struct*", $PNEWSTATE, "dword", $IBUFFERLEN, "struct*", $PPREVSTATE, "struct*", $PREQUIRED)
  3464.     If @error Then Return SetError(1, @extended, False)
  3465.     Return Not ($ACALL[0] = 0)
  3466. EndFunc
  3467. Func _Security__CreateProcessWithToken($HTOKEN, $ILOGONFLAGS, $SCOMMANDLINE, $ICREATIONFLAGS, $SCURDIR, $TSTARTUPINFO, $TPROCESS_INFORMATION)
  3468.     Local $ACALL = DllCall("advapi32.dll", "bool", "CreateProcessWithTokenW", "handle", $HTOKEN, "dword", $ILOGONFLAGS, "ptr", 0, "wstr", $SCOMMANDLINE, "dword", $ICREATIONFLAGS, "struct*", 0, "wstr", $SCURDIR, "struct*", $TSTARTUPINFO, "struct*", $TPROCESS_INFORMATION)
  3469.     If @error Or Not $ACALL[0] Then Return SetError(1, @extended, False)
  3470.     Return True
  3471. EndFunc
  3472. Func _Security__DuplicateTokenEx($HEXISTINGTOKEN, $IDESIREDACCESS, $IIMPERSONATIONLEVEL, $ITOKENTYPE)
  3473.     Local $ACALL = DllCall("advapi32.dll", "bool", "DuplicateTokenEx", "handle", $HEXISTINGTOKEN, "dword", $IDESIREDACCESS, "struct*", 0, "int", $IIMPERSONATIONLEVEL, "int", $ITOKENTYPE, "handle*", 0)
  3474.     If @error Or Not $ACALL[0] Then Return SetError(1, @extended, 0)
  3475.     Return $ACALL[6]
  3476. EndFunc
  3477. Func _Security__GetAccountSid($SACCOUNT, $SSYSTEM = "")
  3478.     Local $AACCT = _Security__LookupAccountName($SACCOUNT, $SSYSTEM)
  3479.     If @error Then Return SetError(@error, @extended, 0)
  3480.     If IsArray($AACCT) Then Return _Security__StringSidToSid($AACCT[0])
  3481.     Return ""
  3482. EndFunc
  3483. Func _Security__GetLengthSid($PSID)
  3484.     If Not _Security__IsValidSid($PSID) Then Return SetError(1, @extended, 0)
  3485.     Local $ACALL = DllCall("advapi32.dll", "dword", "GetLengthSid", "struct*", $PSID)
  3486.     If @error Then Return SetError(2, @extended, 0)
  3487.     Return $ACALL[0]
  3488. EndFunc
  3489. Func _Security__GetTokenInformation($HTOKEN, $ICLASS)
  3490.     Local $ACALL = DllCall("advapi32.dll", "bool", "GetTokenInformation", "handle", $HTOKEN, "int", $ICLASS, "struct*", 0, "dword", 0, "dword*", 0)
  3491.     If @error Or Not $ACALL[5] Then Return SetError(1, @extended, 0)
  3492.     Local $ILEN = $ACALL[5]
  3493.     Local $TBUFFER = DllStructCreate("byte[" & $ILEN & "]")
  3494.     $ACALL = DllCall("advapi32.dll", "bool", "GetTokenInformation", "handle", $HTOKEN, "int", $ICLASS, "struct*", $TBUFFER, "dword", DllStructGetSize($TBUFFER), "dword*", 0)
  3495.     If @error Or Not $ACALL[0] Then Return SetError(2, @extended, 0)
  3496.     Return $TBUFFER
  3497. EndFunc
  3498. Func _Security__ImpersonateSelf($ILEVEL = $SECURITYIMPERSONATION)
  3499.     Local $ACALL = DllCall("advapi32.dll", "bool", "ImpersonateSelf", "int", $ILEVEL)
  3500.     If @error Then Return SetError(1, @extended, False)
  3501.     Return Not ($ACALL[0] = 0)
  3502. EndFunc
  3503. Func _Security__IsValidSid($PSID)
  3504.     Local $ACALL = DllCall("advapi32.dll", "bool", "IsValidSid", "struct*", $PSID)
  3505.     If @error Then Return SetError(1, @extended, False)
  3506.     Return Not ($ACALL[0] = 0)
  3507. EndFunc
  3508. Func _Security__LookupAccountName($SACCOUNT, $SSYSTEM = "")
  3509.     Local $TDATA = DllStructCreate("byte SID[256]")
  3510.     Local $ACALL = DllCall("advapi32.dll", "bool", "LookupAccountNameW", "wstr", $SSYSTEM, "wstr", $SACCOUNT, "struct*", $TDATA, "dword*", DllStructGetSize($TDATA), "wstr", "", "dword*", DllStructGetSize($TDATA), "int*", 0)
  3511.     If @error Or Not $ACALL[0] Then Return SetError(1, @extended, 0)
  3512.     Local $AACCT[3]
  3513.     $AACCT[0] = _Security__SidToStringSid(DllStructGetPtr($TDATA, "SID"))
  3514.     $AACCT[1] = $ACALL[5]
  3515.     $AACCT[2] = $ACALL[7]
  3516.     Return $AACCT
  3517. EndFunc
  3518. Func _Security__LookupAccountSid($VSID, $SSYSTEM = "")
  3519.     Local $PSID, $AACCT[3]
  3520.     If IsString($VSID) Then
  3521.         $PSID = _Security__StringSidToSid($VSID)
  3522.     Else
  3523.         $PSID = $VSID
  3524.     EndIf
  3525.     If Not _Security__IsValidSid($PSID) Then Return SetError(1, @extended, 0)
  3526.     Local $TYPESYSTEM = "ptr"
  3527.     If $SSYSTEM Then $TYPESYSTEM = "wstr"
  3528.     Local $ACALL = DllCall("advapi32.dll", "bool", "LookupAccountSidW", $TYPESYSTEM, $SSYSTEM, "struct*", $PSID, "wstr", "", "dword*", 65536, "wstr", "", "dword*", 65536, "int*", 0)
  3529.     If @error Or Not $ACALL[0] Then Return SetError(2, @extended, 0)
  3530.     Local $AACCT[3]
  3531.     $AACCT[0] = $ACALL[3]
  3532.     $AACCT[1] = $ACALL[5]
  3533.     $AACCT[2] = $ACALL[7]
  3534.     Return $AACCT
  3535. EndFunc
  3536. Func _Security__LookupPrivilegeValue($SSYSTEM, $SNAME)
  3537.     Local $ACALL = DllCall("advapi32.dll", "bool", "LookupPrivilegeValueW", "wstr", $SSYSTEM, "wstr", $SNAME, "int64*", 0)
  3538.     If @error Or Not $ACALL[0] Then Return SetError(1, @extended, 0)
  3539.     Return $ACALL[3]
  3540. EndFunc
  3541. Func _Security__OpenProcessToken($HPROCESS, $IACCESS)
  3542.     Local $ACALL = DllCall("advapi32.dll", "bool", "OpenProcessToken", "handle", $HPROCESS, "dword", $IACCESS, "handle*", 0)
  3543.     If @error Or Not $ACALL[0] Then Return SetError(1, @extended, 0)
  3544.     Return $ACALL[3]
  3545. EndFunc
  3546. Func _Security__OpenThreadToken($IACCESS, $HTHREAD = 0, $FOPENASSELF = False)
  3547.     If $HTHREAD = 0 Then $HTHREAD = _WinAPI_GetCurrentThread()
  3548.     If @error Then Return SetError(1, @extended, 0)
  3549.     Local $ACALL = DllCall("advapi32.dll", "bool", "OpenThreadToken", "handle", $HTHREAD, "dword", $IACCESS, "bool", $FOPENASSELF, "handle*", 0)
  3550.     If @error Or Not $ACALL[0] Then Return SetError(2, @extended, 0)
  3551.     Return $ACALL[4]
  3552. EndFunc
  3553. Func _Security__OpenThreadTokenEx($IACCESS, $HTHREAD = 0, $FOPENASSELF = False)
  3554.     Local $HTOKEN = _Security__OpenThreadToken($IACCESS, $HTHREAD, $FOPENASSELF)
  3555.     If $HTOKEN = 0 Then
  3556.         If _WinAPI_GetLastError() <> $ERROR_NO_TOKEN Then Return SetError(3, _WinAPI_GetLastError(), 0)
  3557.         If Not _Security__ImpersonateSelf() Then Return SetError(1, _WinAPI_GetLastError(), 0)
  3558.         $HTOKEN = _Security__OpenThreadToken($IACCESS, $HTHREAD, $FOPENASSELF)
  3559.         If $HTOKEN = 0 Then Return SetError(2, _WinAPI_GetLastError(), 0)
  3560.     EndIf
  3561.     Return $HTOKEN
  3562. EndFunc
  3563. Func _Security__SetPrivilege($HTOKEN, $SPRIVILEGE, $FENABLE)
  3564.     Local $ILUID = _Security__LookupPrivilegeValue("", $SPRIVILEGE)
  3565.     If $ILUID = 0 Then Return SetError(1, @extended, False)
  3566.     Local $TCURRSTATE = DllStructCreate($TAGTOKEN_PRIVILEGES)
  3567.     Local $ICURRSTATE = DllStructGetSize($TCURRSTATE)
  3568.     Local $TPREVSTATE = DllStructCreate($TAGTOKEN_PRIVILEGES)
  3569.     Local $IPREVSTATE = DllStructGetSize($TPREVSTATE)
  3570.     Local $TREQUIRED = DllStructCreate("int Data")
  3571.     DllStructSetData($TCURRSTATE, "Count", 1)
  3572.     DllStructSetData($TCURRSTATE, "LUID", $ILUID)
  3573.     If Not _Security__AdjustTokenPrivileges($HTOKEN, False, $TCURRSTATE, $ICURRSTATE, $TPREVSTATE, $TREQUIRED) Then Return SetError(2, @error, False)
  3574.     DllStructSetData($TPREVSTATE, "Count", 1)
  3575.     DllStructSetData($TPREVSTATE, "LUID", $ILUID)
  3576.     Local $IATTRIBUTES = DllStructGetData($TPREVSTATE, "Attributes")
  3577.     If $FENABLE Then
  3578.         $IATTRIBUTES = BitOR($IATTRIBUTES, $SE_PRIVILEGE_ENABLED)
  3579.     Else
  3580.         $IATTRIBUTES = BitAND($IATTRIBUTES, BitNOT($SE_PRIVILEGE_ENABLED))
  3581.     EndIf
  3582.     DllStructSetData($TPREVSTATE, "Attributes", $IATTRIBUTES)
  3583.     If Not _Security__AdjustTokenPrivileges($HTOKEN, False, $TPREVSTATE, $IPREVSTATE, $TCURRSTATE, $TREQUIRED) Then Return SetError(3, @error, False)
  3584.     Return True
  3585. EndFunc
  3586. Func _Security__SetTokenInformation($HTOKEN, $ITOKENINFORMATION, $VTOKENINFORMATION, $ITOKENINFORMATIONLENGTH)
  3587.     Local $ACALL = DllCall("advapi32.dll", "bool", "SetTokenInformation", "handle", $HTOKEN, "int", $ITOKENINFORMATION, "struct*", $VTOKENINFORMATION, "dword", $ITOKENINFORMATIONLENGTH)
  3588.     If @error Or Not $ACALL[0] Then Return SetError(1, @extended, False)
  3589.     Return True
  3590. EndFunc
  3591. Func _Security__SidToStringSid($PSID)
  3592.     If Not _Security__IsValidSid($PSID) Then Return SetError(1, 0, "")
  3593.     Local $ACALL = DllCall("advapi32.dll", "bool", "ConvertSidToStringSidW", "struct*", $PSID, "ptr*", 0)
  3594.     If @error Or Not $ACALL[0] Then Return SetError(2, @extended, "")
  3595.     Local $PSTRINGSID = $ACALL[2]
  3596.     Local $SSID = DllStructGetData(DllStructCreate("wchar Text[" & _WinAPI_StringLenW($PSTRINGSID) + 1 & "]", $PSTRINGSID), "Text")
  3597.     _WinAPI_LocalFree($PSTRINGSID)
  3598.     Return $SSID
  3599. EndFunc
  3600. Func _Security__SidTypeStr($ITYPE)
  3601.     Switch $ITYPE
  3602.         Case $SIDTYPEUSER
  3603.             Return "User"
  3604.         Case $SIDTYPEGROUP
  3605.             Return "Group"
  3606.         Case $SIDTYPEDOMAIN
  3607.             Return "Domain"
  3608.         Case $SIDTYPEALIAS
  3609.             Return "Alias"
  3610.         Case $SIDTYPEWELLKNOWNGROUP
  3611.             Return "Well Known Group"
  3612.         Case $SIDTYPEDELETEDACCOUNT
  3613.             Return "Deleted Account"
  3614.         Case $SIDTYPEINVALID
  3615.             Return "Invalid"
  3616.         Case $SIDTYPEUNKNOWN
  3617.             Return "Unknown Type"
  3618.         Case $SIDTYPECOMPUTER
  3619.             Return "Computer"
  3620.         Case $SIDTYPELABEL
  3621.             Return "A mandatory integrity label SID"
  3622.         Case Else
  3623.             Return "Unknown SID Type"
  3624.     EndSwitch
  3625. EndFunc
  3626. Func _Security__StringSidToSid($SSID)
  3627.     Local $ACALL = DllCall("advapi32.dll", "bool", "ConvertStringSidToSidW", "wstr", $SSID, "ptr*", 0)
  3628.     If @error Or Not $ACALL[0] Then Return SetError(1, @extended, 0)
  3629.     Local $PSID = $ACALL[2]
  3630.     Local $TBUFFER = DllStructCreate("byte Data[" & _Security__GetLengthSid($PSID) & "]", $PSID)
  3631.     Local $TSID = DllStructCreate("byte Data[" & DllStructGetSize($TBUFFER) & "]")
  3632.     DllStructSetData($TSID, "Data", DllStructGetData($TBUFFER, "Data"))
  3633.     _WinAPI_LocalFree($PSID)
  3634.     Return $TSID
  3635. EndFunc
  3636. Func _FileCountLines($SFILEPATH)
  3637.     Local $HFILE = FileOpen($SFILEPATH, $FO_READ)
  3638.     If $HFILE = -1 Then Return SetError(1, 0, 0)
  3639.     Local $SFILECONTENT = StringStripWS(FileRead($HFILE), 2)
  3640.     FileClose($HFILE)
  3641.     Local $ATMP
  3642.     If StringInStr($SFILECONTENT, @LF) Then
  3643.         $ATMP = StringSplit(StringStripCR($SFILECONTENT), @LF)
  3644.     ElseIf StringInStr($SFILECONTENT, @CR) Then
  3645.         $ATMP = StringSplit($SFILECONTENT, @CR)
  3646.     Else
  3647.         If StringLen($SFILECONTENT) Then
  3648.             Return 1
  3649.         Else
  3650.             Return SetError(2, 0, 0)
  3651.         EndIf
  3652.     EndIf
  3653.     Return $ATMP[0]
  3654. EndFunc
  3655. Func _FileCreate($SFILEPATH)
  3656.     Local $HOPENFILE = FileOpen($SFILEPATH, $FO_OVERWRITE)
  3657.     If $HOPENFILE = -1 Then Return SetError(1, 0, 0)
  3658.     Local $HWRITEFILE = FileWrite($HOPENFILE, "")
  3659.     FileClose($HOPENFILE)
  3660.     If $HWRITEFILE = -1 Then Return SetError(2, 0, 0)
  3661.     Return 1
  3662. EndFunc
  3663. Func _FileListToArray($SPATH, $SFILTER = "*", $IFLAG = 0)
  3664.     Local $HSEARCH, $SFILE, $SFILELIST, $SDELIM = "|"
  3665.     $SPATH = StringRegExpReplace($SPATH, "[\\/]+\z", "") & "\"
  3666.     If Not FileExists($SPATH) Then Return SetError(1, 1, "")
  3667.     If StringRegExp($SFILTER, "[\\/:><\|]|(?s)\A\s*\z") Then Return SetError(2, 2, "")
  3668.     If Not ($IFLAG = 0 Or $IFLAG = 1 Or $IFLAG = 2) Then Return SetError(3, 3, "")
  3669.     $HSEARCH = FileFindFirstFile($SPATH & $SFILTER)
  3670.     If @error Then Return SetError(4, 4, "")
  3671.     While 1
  3672.         $SFILE = FileFindNextFile($HSEARCH)
  3673.         If @error Then ExitLoop
  3674.         If ($IFLAG + @extended = 2) Then ContinueLoop
  3675.         $SFILELIST &= $SDELIM & $SFILE
  3676.     WEnd
  3677.     FileClose($HSEARCH)
  3678.     If Not $SFILELIST Then Return SetError(4, 4, "")
  3679.     Return StringSplit(StringTrimLeft($SFILELIST, 1), "|")
  3680. EndFunc
  3681. Func _FilePrint($S_FILE, $I_SHOW = @SW_HIDE)
  3682.     Local $A_RET = DllCall("shell32.dll", "int", "ShellExecuteW", "hwnd", 0, "wstr", "print", "wstr", $S_FILE, "wstr", "", "wstr", "", "int", $I_SHOW)
  3683.     If @error Then Return SetError(@error, @extended, 0)
  3684.     If $A_RET[0] <= 32 Then Return SetError(10, $A_RET[0], 0)
  3685.     Return 1
  3686. EndFunc
  3687. Func _FileReadToArray($SFILEPATH, ByRef $AARRAY)
  3688.     Local $HFILE = FileOpen($SFILEPATH, $FO_READ)
  3689.     If $HFILE = -1 Then Return SetError(1, 0, 0)
  3690.     Local $AFILE = FileRead($HFILE, FileGetSize($SFILEPATH))
  3691.     If StringRight($AFILE, 1) = @LF Then $AFILE = StringTrimRight($AFILE, 1)
  3692.     If StringRight($AFILE, 1) = @CR Then $AFILE = StringTrimRight($AFILE, 1)
  3693.     FileClose($HFILE)
  3694.     If StringInStr($AFILE, @LF) Then
  3695.         $AARRAY = StringSplit(StringStripCR($AFILE), @LF)
  3696.     ElseIf StringInStr($AFILE, @CR) Then
  3697.         $AARRAY = StringSplit($AFILE, @CR)
  3698.     Else
  3699.         If StringLen($AFILE) Then
  3700.             Dim $AARRAY[2] = [1, $AFILE]
  3701.         Else
  3702.             Return SetError(2, 0, 0)
  3703.         EndIf
  3704.     EndIf
  3705.     Return 1
  3706. EndFunc
  3707. Func _FileWriteFromArray($FILE, $A_ARRAY, $I_BASE = 0, $I_UBOUND = 0, $S_DELIM = "|")
  3708.     If Not IsArray($A_ARRAY) Then Return SetError(2, 0, 0)
  3709.     Local $IDIMS = UBound($A_ARRAY, 0)
  3710.     If $IDIMS > 2 Then Return SetError(4, 0, 0)
  3711.     Local $LAST = UBound($A_ARRAY) - 1
  3712.     If $I_UBOUND < 1 Or $I_UBOUND > $LAST Then $I_UBOUND = $LAST
  3713.     If $I_BASE < 0 Or $I_BASE > $LAST Then $I_BASE = 0
  3714.     Local $HFILE
  3715.     If IsString($FILE) Then
  3716.         $HFILE = FileOpen($FILE, $FO_OVERWRITE)
  3717.     Else
  3718.         $HFILE = $FILE
  3719.     EndIf
  3720.     If $HFILE = -1 Then Return SetError(1, 0, 0)
  3721.     Local $ERRORSAV = 0
  3722.     Switch $IDIMS
  3723.         Case 1
  3724.             For $X = $I_BASE To $I_UBOUND
  3725.                 If FileWrite($HFILE, $A_ARRAY[$X] & @CRLF) = 0 Then
  3726.                     $ERRORSAV = 3
  3727.                     ExitLoop
  3728.                 EndIf
  3729.             Next
  3730.         Case 2
  3731.             Local $S_TEMP
  3732.             For $X = $I_BASE To $I_UBOUND
  3733.                 $S_TEMP = $A_ARRAY[$X][0]
  3734.                 For $Y = 1 To $IDIMS
  3735.                     $S_TEMP &= $S_DELIM & $A_ARRAY[$X][$Y]
  3736.                 Next
  3737.                 If FileWrite($HFILE, $S_TEMP & @CRLF) = 0 Then
  3738.                     $ERRORSAV = 3
  3739.                     ExitLoop
  3740.                 EndIf
  3741.             Next
  3742.     EndSwitch
  3743.     If IsString($FILE) Then FileClose($HFILE)
  3744.     If $ERRORSAV Then Return SetError($ERRORSAV, 0, 0)
  3745.     Return 1
  3746. EndFunc
  3747. Func _FileWriteLog($SLOGPATH, $SLOGMSG, $IFLAG = -1)
  3748.     Local $HOPENFILE = $SLOGPATH, $IOPENMODE = $FO_APPEND
  3749.     Local $SDATENOW = @YEAR & "-" & @MON & "-" & @MDAY
  3750.     Local $STIMENOW = @HOUR & ":" & @MIN & ":" & @SEC
  3751.     Local $SMSG = $SDATENOW & " " & $STIMENOW & " : " & $SLOGMSG
  3752.     If $IFLAG <> -1 Then
  3753.         $SMSG &= @CRLF & FileRead($SLOGPATH)
  3754.         $IOPENMODE = $FO_OVERWRITE
  3755.     EndIf
  3756.     If IsString($SLOGPATH) Then
  3757.         $HOPENFILE = FileOpen($SLOGPATH, $IOPENMODE)
  3758.         If $HOPENFILE = -1 Then
  3759.             Return SetError(1, 0, 0)
  3760.         EndIf
  3761.     EndIf
  3762.     Local $IRETURN = FileWriteLine($HOPENFILE, $SMSG)
  3763.     If IsString($SLOGPATH) Then
  3764.         $IRETURN = FileClose($HOPENFILE)
  3765.     EndIf
  3766.     If $IRETURN <= 0 Then
  3767.         Return SetError(2, $IRETURN, 0)
  3768.     EndIf
  3769.     Return $IRETURN
  3770. EndFunc
  3771. Func _FileWriteToLine($SFILE, $ILINE, $STEXT, $FOVERWRITE = 0)
  3772.     If $ILINE <= 0 Then Return SetError(4, 0, 0)
  3773.     If Not IsString($STEXT) Then
  3774.         $STEXT = String($STEXT)
  3775.         If $STEXT = "" Then Return SetError(6, 0, 0)
  3776.     EndIf
  3777.     If $FOVERWRITE <> 0 And $FOVERWRITE <> 1 Then Return SetError(5, 0, 0)
  3778.     If Not FileExists($SFILE) Then Return SetError(2, 0, 0)
  3779.     Local $SREAD_FILE = FileRead($SFILE)
  3780.     Local $ASPLIT_FILE = StringSplit(StringStripCR($SREAD_FILE), @LF)
  3781.     If UBound($ASPLIT_FILE) < $ILINE Then Return SetError(1, 0, 0)
  3782.     Local $IENCODING = FileGetEncoding($SFILE)
  3783.     Local $HFILE = FileOpen($SFILE, $IENCODING + $FO_OVERWRITE)
  3784.     If $HFILE = -1 Then Return SetError(3, 0, 0)
  3785.     $SREAD_FILE = ""
  3786.     For $I = 1 To $ASPLIT_FILE[0]
  3787.         If $I = $ILINE Then
  3788.             If $FOVERWRITE = 1 Then
  3789.                 If $STEXT <> "" Then $SREAD_FILE &= $STEXT & @CRLF
  3790.             Else
  3791.                 $SREAD_FILE &= $STEXT & @CRLF & $ASPLIT_FILE[$I] & @CRLF
  3792.             EndIf
  3793.         ElseIf $I < $ASPLIT_FILE[0] Then
  3794.             $SREAD_FILE &= $ASPLIT_FILE[$I] & @CRLF
  3795.         ElseIf $I = $ASPLIT_FILE[0] Then
  3796.             $SREAD_FILE &= $ASPLIT_FILE[$I]
  3797.         EndIf
  3798.     Next
  3799.     FileWrite($HFILE, $SREAD_FILE)
  3800.     FileClose($HFILE)
  3801.     Return 1
  3802. EndFunc
  3803. Func _PathFull($SRELATIVEPATH, $SBASEPATH = @WorkingDir)
  3804.     If Not $SRELATIVEPATH Or $SRELATIVEPATH = "." Then Return $SBASEPATH
  3805.     Local $SFULLPATH = StringReplace($SRELATIVEPATH, "/", "\")
  3806.     Local Const $SFULLPATHCONST = $SFULLPATH
  3807.     Local $SPATH
  3808.     Local $BROOTONLY = StringLeft($SFULLPATH, 1) = "\" And StringMid($SFULLPATH, 2, 1) <> "\"
  3809.     For $I = 1 To 2
  3810.         $SPATH = StringLeft($SFULLPATH, 2)
  3811.         If $SPATH = "\\" Then
  3812.             $SFULLPATH = StringTrimLeft($SFULLPATH, 2)
  3813.             Local $NSERVERLEN = StringInStr($SFULLPATH, "\") - 1
  3814.             $SPATH = "\\" & StringLeft($SFULLPATH, $NSERVERLEN)
  3815.             $SFULLPATH = StringTrimLeft($SFULLPATH, $NSERVERLEN)
  3816.             ExitLoop
  3817.         ElseIf StringRight($SPATH, 1) = ":" Then
  3818.             $SFULLPATH = StringTrimLeft($SFULLPATH, 2)
  3819.             ExitLoop
  3820.         Else
  3821.             $SFULLPATH = $SBASEPATH & "\" & $SFULLPATH
  3822.         EndIf
  3823.     Next
  3824.     If $I = 3 Then Return ""
  3825.     If StringLeft($SFULLPATH, 1) <> "\" Then
  3826.         If StringLeft($SFULLPATHCONST, 2) = StringLeft($SBASEPATH, 2) Then
  3827.             $SFULLPATH = $SBASEPATH & "\" & $SFULLPATH
  3828.         Else
  3829.             $SFULLPATH = "\" & $SFULLPATH
  3830.         EndIf
  3831.     EndIf
  3832.     Local $ATEMP = StringSplit($SFULLPATH, "\")
  3833.     Local $APATHPARTS[$ATEMP[0]], $J = 0
  3834.     For $I = 2 To $ATEMP[0]
  3835.         If $ATEMP[$I] = ".." Then
  3836.             If $J Then $J -= 1
  3837.         ElseIf Not ($ATEMP[$I] = "" And $I <> $ATEMP[0]) And $ATEMP[$I] <> "." Then
  3838.             $APATHPARTS[$J] = $ATEMP[$I]
  3839.             $J += 1
  3840.         EndIf
  3841.     Next
  3842.     $SFULLPATH = $SPATH
  3843.     If Not $BROOTONLY Then
  3844.         For $I = 0 To $J - 1
  3845.             $SFULLPATH &= "\" & $APATHPARTS[$I]
  3846.         Next
  3847.     Else
  3848.         $SFULLPATH &= $SFULLPATHCONST
  3849.         If StringInStr($SFULLPATH, "..") Then $SFULLPATH = _PathFull($SFULLPATH)
  3850.     EndIf
  3851.     While StringInStr($SFULLPATH, ".\")
  3852.         $SFULLPATH = StringReplace($SFULLPATH, ".\", "\")
  3853.     WEnd
  3854.     Return $SFULLPATH
  3855. EndFunc
  3856. Func _PathGetRelative($SFROM, $STO)
  3857.     If StringRight($SFROM, 1) <> "\" Then $SFROM &= "\"
  3858.     If StringRight($STO, 1) <> "\" Then $STO &= "\"
  3859.     If $SFROM = $STO Then Return SetError(1, 0, StringTrimRight($STO, 1))
  3860.     Local $ASFROM = StringSplit($SFROM, "\")
  3861.     Local $ASTO = StringSplit($STO, "\")
  3862.     If $ASFROM[1] <> $ASTO[1] Then Return SetError(2, 0, StringTrimRight($STO, 1))
  3863.     Local $I = 2
  3864.     Local $IDIFF = 1
  3865.     While 1
  3866.         If $ASFROM[$I] <> $ASTO[$I] Then
  3867.             $IDIFF = $I
  3868.             ExitLoop
  3869.         EndIf
  3870.         $I += 1
  3871.     WEnd
  3872.     $I = 1
  3873.     Local $SRELPATH = ""
  3874.     For $J = 1 To $ASTO[0]
  3875.         If $I >= $IDIFF Then
  3876.             $SRELPATH &= "\" & $ASTO[$I]
  3877.         EndIf
  3878.         $I += 1
  3879.     Next
  3880.     $SRELPATH = StringTrimLeft($SRELPATH, 1)
  3881.     $I = 1
  3882.     For $J = 1 To $ASFROM[0]
  3883.         If $I > $IDIFF Then
  3884.             $SRELPATH = "..\" & $SRELPATH
  3885.         EndIf
  3886.         $I += 1
  3887.     Next
  3888.     If StringRight($SRELPATH, 1) == "\" Then $SRELPATH = StringTrimRight($SRELPATH, 1)
  3889.     Return $SRELPATH
  3890. EndFunc
  3891. Func _PathMake($SZDRIVE, $SZDIR, $SZFNAME, $SZEXT)
  3892.     If StringLen($SZDRIVE) Then
  3893.         If Not (StringLeft($SZDRIVE, 2) = "\\") Then $SZDRIVE = StringLeft($SZDRIVE, 1) & ":"
  3894.     EndIf
  3895.     If StringLen($SZDIR) Then
  3896.         If Not (StringRight($SZDIR, 1) = "\") And Not (StringRight($SZDIR, 1) = "/") Then $SZDIR = $SZDIR & "\"
  3897.     EndIf
  3898.     If StringLen($SZEXT) Then
  3899.         If Not (StringLeft($SZEXT, 1) = ".") Then $SZEXT = "." & $SZEXT
  3900.     EndIf
  3901.     Return $SZDRIVE & $SZDIR & $SZFNAME & $SZEXT
  3902. EndFunc
  3903. Func _PathSplit($SZPATH, ByRef $SZDRIVE, ByRef $SZDIR, ByRef $SZFNAME, ByRef $SZEXT)
  3904.     Local $DRIVE = ""
  3905.     Local $DIR = ""
  3906.     Local $FNAME = ""
  3907.     Local $EXT = ""
  3908.     Local $POS
  3909.     Local $ARRAY[5]
  3910.     $ARRAY[0] = $SZPATH
  3911.     If StringMid($SZPATH, 2, 1) = ":" Then
  3912.         $DRIVE = StringLeft($SZPATH, 2)
  3913.         $SZPATH = StringTrimLeft($SZPATH, 2)
  3914.     ElseIf StringLeft($SZPATH, 2) = "\\" Then
  3915.         $SZPATH = StringTrimLeft($SZPATH, 2)
  3916.         $POS = StringInStr($SZPATH, "\")
  3917.         If $POS = 0 Then $POS = StringInStr($SZPATH, "/")
  3918.         If $POS = 0 Then
  3919.             $DRIVE = "\\" & $SZPATH
  3920.             $SZPATH = ""
  3921.         Else
  3922.             $DRIVE = "\\" & StringLeft($SZPATH, $POS - 1)
  3923.             $SZPATH = StringTrimLeft($SZPATH, $POS - 1)
  3924.         EndIf
  3925.     EndIf
  3926.     Local $NPOSFORWARD = StringInStr($SZPATH, "/", 0, -1)
  3927.     Local $NPOSBACKWARD = StringInStr($SZPATH, "\", 0, -1)
  3928.     If $NPOSFORWARD >= $NPOSBACKWARD Then
  3929.         $POS = $NPOSFORWARD
  3930.     Else
  3931.         $POS = $NPOSBACKWARD
  3932.     EndIf
  3933.     $DIR = StringLeft($SZPATH, $POS)
  3934.     $FNAME = StringRight($SZPATH, StringLen($SZPATH) - $POS)
  3935.     If StringLen($DIR) = 0 Then $FNAME = $SZPATH
  3936.     $POS = StringInStr($FNAME, ".", 0, -1)
  3937.     If $POS Then
  3938.         $EXT = StringRight($FNAME, StringLen($FNAME) - ($POS - 1))
  3939.         $FNAME = StringLeft($FNAME, $POS - 1)
  3940.     EndIf
  3941.     $SZDRIVE = $DRIVE
  3942.     $SZDIR = $DIR
  3943.     $SZFNAME = $FNAME
  3944.     $SZEXT = $EXT
  3945.     $ARRAY[1] = $DRIVE
  3946.     $ARRAY[2] = $DIR
  3947.     $ARRAY[3] = $FNAME
  3948.     $ARRAY[4] = $EXT
  3949.     Return $ARRAY
  3950. EndFunc
  3951. Func _ReplaceStringInFile($SZFILENAME, $SZSEARCHSTRING, $SZREPLACESTRING, $FCASENESS = 0, $FOCCURANCE = 1)
  3952.     Local $IRETVAL = 0
  3953.     Local $NCOUNT, $SENDSWITH
  3954.     If StringInStr(FileGetAttrib($SZFILENAME), "R") Then Return SetError(6, 0, -1)
  3955.     Local $HFILE = FileOpen($SZFILENAME, $FO_READ)
  3956.     If $HFILE = -1 Then Return SetError(1, 0, -1)
  3957.     Local $S_TOTFILE = FileRead($HFILE, FileGetSize($SZFILENAME))
  3958.     If StringRight($S_TOTFILE, 2) = @CRLF Then
  3959.         $SENDSWITH = @CRLF
  3960.     ElseIf StringRight($S_TOTFILE, 1) = @CR Then
  3961.         $SENDSWITH = @CR
  3962.     ElseIf StringRight($S_TOTFILE, 1) = @LF Then
  3963.         $SENDSWITH = @LF
  3964.     Else
  3965.         $SENDSWITH = ""
  3966.     EndIf
  3967.     Local $AFILELINES = StringSplit(StringStripCR($S_TOTFILE), @LF)
  3968.     FileClose($HFILE)
  3969.     Local $IENCODING = FileGetEncoding($SZFILENAME)
  3970.     Local $HWRITEHANDLE = FileOpen($SZFILENAME, $IENCODING + $FO_OVERWRITE)
  3971.     If $HWRITEHANDLE = -1 Then Return SetError(2, 0, -1)
  3972.     For $NCOUNT = 1 To $AFILELINES[0]
  3973.         If StringInStr($AFILELINES[$NCOUNT], $SZSEARCHSTRING, $FCASENESS) Then
  3974.             $AFILELINES[$NCOUNT] = StringReplace($AFILELINES[$NCOUNT], $SZSEARCHSTRING, $SZREPLACESTRING, 1 - $FOCCURANCE, $FCASENESS)
  3975.             $IRETVAL = $IRETVAL + 1
  3976.             If $FOCCURANCE = 0 Then
  3977.                 $IRETVAL = 1
  3978.                 ExitLoop
  3979.             EndIf
  3980.         EndIf
  3981.     Next
  3982.     For $NCOUNT = 1 To $AFILELINES[0] - 1
  3983.         If FileWriteLine($HWRITEHANDLE, $AFILELINES[$NCOUNT]) = 0 Then
  3984.             FileClose($HWRITEHANDLE)
  3985.             Return SetError(3, 0, -1)
  3986.         EndIf
  3987.     Next
  3988.     If $AFILELINES[$NCOUNT] <> "" Then FileWrite($HWRITEHANDLE, $AFILELINES[$NCOUNT] & $SENDSWITH)
  3989.     FileClose($HWRITEHANDLE)
  3990.     Return $IRETVAL
  3991. EndFunc
  3992. Func _TempFile($S_DIRECTORYNAME = @TempDir, $S_FILEPREFIX = "~", $S_FILEEXTENSION = ".tmp", $I_RANDOMLENGTH = 7)
  3993.     If IsKeyword($S_FILEPREFIX) Then $S_FILEPREFIX = "~"
  3994.     If IsKeyword($S_FILEEXTENSION) Then $S_FILEEXTENSION = ".tmp"
  3995.     If IsKeyword($I_RANDOMLENGTH) Then $I_RANDOMLENGTH = 7
  3996.     If Not FileExists($S_DIRECTORYNAME) Then $S_DIRECTORYNAME = @TempDir
  3997.     If Not FileExists($S_DIRECTORYNAME) Then $S_DIRECTORYNAME = @ScriptDir
  3998.     If StringRight($S_DIRECTORYNAME, 1) <> "\" Then $S_DIRECTORYNAME = $S_DIRECTORYNAME & "\"
  3999.     Local $S_TEMPNAME
  4000.     Do
  4001.         $S_TEMPNAME = ""
  4002.         While StringLen($S_TEMPNAME) < $I_RANDOMLENGTH
  4003.             $S_TEMPNAME = $S_TEMPNAME & Chr(Random(97, 122, 1))
  4004.         WEnd
  4005.         $S_TEMPNAME = $S_DIRECTORYNAME & $S_FILEPREFIX & $S_TEMPNAME & $S_FILEEXTENSION
  4006.     Until Not FileExists($S_TEMPNAME)
  4007.     Return $S_TEMPNAME
  4008. EndFunc
  4009. #RequireAdmin
  4010. Global $OBJ_SR, $OBJ_WMI
  4011. Global $SYSTEMDRIVE = EnvGet("SystemDrive") & "\"
  4012. Func _SR_CREATERESTOREPOINT($STRDESCRIPTION)
  4013.     Local Const $MAX_DESC = 64
  4014.     Local Const $MAX_DESC_W = 256
  4015.     Local Const $BEGIN_SYSTEM_CHANGE = 100
  4016.     Local Const $MODIFY_SETTINGS = 12
  4017.     Local $_RESTOREPTINFO = DllStructCreate("DWORD dwEventType;DWORD dwRestorePtType;INT64 llSequenceNumber;WCHAR szDescription[" & $MAX_DESC_W & "]")
  4018.     DllStructSetData($_RESTOREPTINFO, "dwEventType", $BEGIN_SYSTEM_CHANGE)
  4019.     DllStructSetData($_RESTOREPTINFO, "dwRestorePtType", $MODIFY_SETTINGS)
  4020.     DllStructSetData($_RESTOREPTINFO, "llSequenceNumber", 0)
  4021.     DllStructSetData($_RESTOREPTINFO, "szDescription", $STRDESCRIPTION)
  4022.     Local $PRESTOREPTSPEC = DllStructGetPtr($_RESTOREPTINFO)
  4023.     Local $_SMGRSTATUS = DllStructCreate("UINT  nStatus;INT64 llSequenceNumber")
  4024.     Local $PSMGRSTATUS = DllStructGetPtr($_SMGRSTATUS)
  4025.     Local $ARET = DllCall("SrClient.dll", "BOOL", "SRSetRestorePointW", "ptr", $PRESTOREPTSPEC, "ptr", $PSMGRSTATUS)
  4026.     If @error Then Return 0
  4027.     Return $ARET[0]
  4028. EndFunc
  4029. Func _SR_ENUMRESTOREPOINTS()
  4030.     Local $ARET[1][3], $I = 0
  4031.     $ARET[0][0] = 0
  4032.     If Not IsObj($OBJ_WMI) Then $OBJ_WMI = ObjGet("winmgmts:root/default")
  4033.     If Not IsObj($OBJ_WMI) Then Return $ARET
  4034.     Local $RPSET = $OBJ_WMI.InstancesOf("SystemRestore")
  4035.     If Not IsObj($RPSET) Then Return $ARET
  4036.     For $RP In $RPSET
  4037.         $I += 1
  4038.         ReDim $ARET[$I + 1][3]
  4039.         $ARET[$I][0] = $RP.SequenceNumber
  4040.         $ARET[$I][1] = $RP.Description
  4041.         $ARET[$I][2] = WMIDATESTRINGTODATE($RP.CreationTime)
  4042.     Next
  4043.     $ARET[0][0] = $I
  4044.     Return $ARET
  4045. EndFunc
  4046. Func WMIDATESTRINGTODATE($DTMDATE)
  4047.     Return (StringMid($DTMDATE, 5, 2) & "/" & StringMid($DTMDATE, 7, 2) & "/" & StringLeft($DTMDATE, 4) & " " & StringMid($DTMDATE, 9, 2) & ":" & StringMid($DTMDATE, 11, 2) & ":" & StringMid($DTMDATE, 13, 2))
  4048. EndFunc
  4049. Func _SR_REMOVERESTOREPOINT($RPSEQNUMBER)
  4050.     Local $ARET = DllCall("SrClient.dll", "DWORD", "SRRemoveRestorePoint", "DWORD", $RPSEQNUMBER)
  4051.     If @error Then
  4052.         Return SetError(1, 0, 0)
  4053.     ElseIf $ARET[0] = 0 Then
  4054.         Return 1
  4055.     Else
  4056.         Return SetError(1, 0, 0)
  4057.     EndIf
  4058. EndFunc
  4059. Func _SR_REMOVEALLRESTOREPOINTS()
  4060.     Local $ARP = _SR_ENUMRESTOREPOINTS(), $RET = 0
  4061.     For $I = 1 To $ARP[0][0]
  4062.         $RET += _SR_REMOVERESTOREPOINT($ARP[$I][0])
  4063.     Next
  4064.     Return $RET
  4065. EndFunc
  4066. Func _SR_ENABLE($DRIVEL = $SYSTEMDRIVE)
  4067.     If Not IsObj($OBJ_SR) Then $OBJ_SR = ObjGet("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore")
  4068.     If Not IsObj($OBJ_SR) Then Return 0
  4069.     If $OBJ_SR.Enable($DRIVEL) = 0 Then Return 1
  4070.     Return 0
  4071. EndFunc
  4072. Func _SR_DISABLE($DRIVEL = $SYSTEMDRIVE)
  4073.     If Not IsObj($OBJ_SR) Then $OBJ_SR = ObjGet("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore")
  4074.     If Not IsObj($OBJ_SR) Then Return 0
  4075.     If $OBJ_SR.Disable($DRIVEL) = 0 Then Return 1
  4076.     Return 0
  4077. EndFunc
  4078. Func _SR_RESTORE($RPSEQNUMBER)
  4079.     If Not IsObj($OBJ_SR) Then $OBJ_SR = ObjGet("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore")
  4080.     If Not IsObj($OBJ_SR) Then Return 0
  4081.     If $OBJ_SR.Restore($RPSEQNUMBER) = 0 Then Return 1
  4082.     Return 0
  4083. EndFunc
  4084. Func _ArrayAdd(ByRef $AVARRAY, $VVALUE)
  4085.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, -1)
  4086.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, -1)
  4087.     Local $IUBOUND = UBound($AVARRAY)
  4088.     ReDim $AVARRAY[$IUBOUND + 1]
  4089.     $AVARRAY[$IUBOUND] = $VVALUE
  4090.     Return $IUBOUND
  4091. EndFunc
  4092. Func _ArrayBinarySearch(Const ByRef $AVARRAY, $VVALUE, $ISTART = 0, $IEND = 0)
  4093.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, -1)
  4094.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(5, 0, -1)
  4095.     Local $IUBOUND = UBound($AVARRAY) - 1
  4096.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  4097.     If $ISTART < 0 Then $ISTART = 0
  4098.     If $ISTART > $IEND Then Return SetError(4, 0, -1)
  4099.     Local $IMID = Int(($IEND + $ISTART) / 2)
  4100.     If $AVARRAY[$ISTART] > $VVALUE Or $AVARRAY[$IEND] < $VVALUE Then Return SetError(2, 0, -1)
  4101.     While $ISTART <= $IMID And $VVALUE <> $AVARRAY[$IMID]
  4102.         If $VVALUE < $AVARRAY[$IMID] Then
  4103.             $IEND = $IMID - 1
  4104.         Else
  4105.             $ISTART = $IMID + 1
  4106.         EndIf
  4107.         $IMID = Int(($IEND + $ISTART) / 2)
  4108.     WEnd
  4109.     If $ISTART > $IEND Then Return SetError(3, 0, -1)
  4110.     Return $IMID
  4111. EndFunc
  4112. Func _ArrayCombinations(ByRef $AVARRAY, $ISET, $SDELIM = "")
  4113.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  4114.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
  4115.     Local $IN = UBound($AVARRAY)
  4116.     Local $IR = $ISET
  4117.     Local $AIDX[$IR]
  4118.     For $I = 0 To $IR - 1
  4119.         $AIDX[$I] = $I
  4120.     Next
  4121.     Local $ITOTAL = __ARRAY_COMBINATIONS($IN, $IR)
  4122.     Local $ILEFT = $ITOTAL
  4123.     Local $ARESULT[$ITOTAL + 1]
  4124.     $ARESULT[0] = $ITOTAL
  4125.     Local $ICOUNT = 1
  4126.     While $ILEFT > 0
  4127.         __ARRAY_GETNEXT($IN, $IR, $ILEFT, $ITOTAL, $AIDX)
  4128.         For $I = 0 To $ISET - 1
  4129.             $ARESULT[$ICOUNT] &= $AVARRAY[$AIDX[$I]] & $SDELIM
  4130.         Next
  4131.         If $SDELIM <> "" Then $ARESULT[$ICOUNT] = StringTrimRight($ARESULT[$ICOUNT], 1)
  4132.         $ICOUNT += 1
  4133.     WEnd
  4134.     Return $ARESULT
  4135. EndFunc
  4136. Func _ArrayConcatenate(ByRef $AVARRAYTARGET, Const ByRef $AVARRAYSOURCE, $ISTART = 0)
  4137.     If Not IsArray($AVARRAYTARGET) Then Return SetError(1, 0, 0)
  4138.     If Not IsArray($AVARRAYSOURCE) Then Return SetError(2, 0, 0)
  4139.     If UBound($AVARRAYTARGET, 0) <> 1 Then
  4140.         If UBound($AVARRAYSOURCE, 0) <> 1 Then Return SetError(5, 0, 0)
  4141.         Return SetError(3, 0, 0)
  4142.     EndIf
  4143.     If UBound($AVARRAYSOURCE, 0) <> 1 Then Return SetError(4, 0, 0)
  4144.     Local $IUBOUNDTARGET = UBound($AVARRAYTARGET) - $ISTART, $IUBOUNDSOURCE = UBound($AVARRAYSOURCE)
  4145.     ReDim $AVARRAYTARGET[$IUBOUNDTARGET + $IUBOUNDSOURCE]
  4146.     For $I = $ISTART To $IUBOUNDSOURCE - 1
  4147.         $AVARRAYTARGET[$IUBOUNDTARGET + $I] = $AVARRAYSOURCE[$I]
  4148.     Next
  4149.     Return $IUBOUNDTARGET + $IUBOUNDSOURCE
  4150. EndFunc
  4151. Func _ARRAYCREATE($V_0, $V_1 = 0, $V_2 = 0, $V_3 = 0, $V_4 = 0, $V_5 = 0, $V_6 = 0, $V_7 = 0, $V_8 = 0, $V_9 = 0, $V_10 = 0, $V_11 = 0, $V_12 = 0, $V_13 = 0, $V_14 = 0, $V_15 = 0, $V_16 = 0, $V_17 = 0, $V_18 = 0, $V_19 = 0, $V_20 = 0)
  4152.     Local $AV_ARRAY[21] = [$V_0, $V_1, $V_2, $V_3, $V_4, $V_5, $V_6, $V_7, $V_8, $V_9, $V_10, $V_11, $V_12, $V_13, $V_14, $V_15, $V_16, $V_17, $V_18, $V_19, $V_20]
  4153.     ReDim $AV_ARRAY[@NumParams]
  4154.     Return $AV_ARRAY
  4155. EndFunc
  4156. Func _ArrayDelete(ByRef $AVARRAY, $IELEMENT)
  4157.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  4158.     Local $IUBOUND = UBound($AVARRAY, 1) - 1
  4159.     If Not $IUBOUND Then
  4160.         $AVARRAY = ""
  4161.         Return 0
  4162.     EndIf
  4163.     If $IELEMENT < 0 Then $IELEMENT = 0
  4164.     If $IELEMENT > $IUBOUND Then $IELEMENT = $IUBOUND
  4165.     Switch UBound($AVARRAY, 0)
  4166.         Case 1
  4167.             For $I = $IELEMENT To $IUBOUND - 1
  4168.                 $AVARRAY[$I] = $AVARRAY[$I + 1]
  4169.             Next
  4170.             ReDim $AVARRAY[$IUBOUND]
  4171.         Case 2
  4172.             Local $ISUBMAX = UBound($AVARRAY, 2) - 1
  4173.             For $I = $IELEMENT To $IUBOUND - 1
  4174.                 For $J = 0 To $ISUBMAX
  4175.                     $AVARRAY[$I][$J] = $AVARRAY[$I + 1][$J]
  4176.                 Next
  4177.             Next
  4178.             ReDim $AVARRAY[$IUBOUND][$ISUBMAX + 1]
  4179.         Case Else
  4180.             Return SetError(3, 0, 0)
  4181.     EndSwitch
  4182.     Return $IUBOUND
  4183. EndFunc
  4184. Func _ArrayDisplay(Const ByRef $AVARRAY, $STITLE = "Array: ListView Display", $IITEMLIMIT = -1, $ITRANSPOSE = 0, $SSEPARATOR = "", $SREPLACE = "|", $SHEADER = "")
  4185.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  4186.     Local $IDIMENSION = UBound($AVARRAY, 0), $IUBOUND = UBound($AVARRAY, 1) - 1, $ISUBMAX = UBound($AVARRAY, 2) - 1
  4187.     If $IDIMENSION > 2 Then Return SetError(2, 0, 0)
  4188.     If $SSEPARATOR = "" Then $SSEPARATOR = Chr(124)
  4189.     If _ArraySearch($AVARRAY, $SSEPARATOR, 0, 0, 0, 1) <> -1 Then
  4190.         For $X = 1 To 255
  4191.             If $X >= 32 And $X <= 127 Then ContinueLoop
  4192.             Local $SFIND = _ArraySearch($AVARRAY, Chr($X), 0, 0, 0, 1)
  4193.             If $SFIND = -1 Then
  4194.                 $SSEPARATOR = Chr($X)
  4195.                 ExitLoop
  4196.             EndIf
  4197.         Next
  4198.     EndIf
  4199.     Local $VTMP, $IBUFFER = 4094
  4200.     Local $ICOLLIMIT = 250
  4201.     Local $IONEVENTMODE = Opt("GUIOnEventMode", 0), $SDATASEPARATORCHAR = Opt("GUIDataSeparatorChar", $SSEPARATOR)
  4202.     If $ISUBMAX < 0 Then $ISUBMAX = 0
  4203.     If $ITRANSPOSE Then
  4204.         $VTMP = $IUBOUND
  4205.         $IUBOUND = $ISUBMAX
  4206.         $ISUBMAX = $VTMP
  4207.     EndIf
  4208.     If $ISUBMAX > $ICOLLIMIT Then $ISUBMAX = $ICOLLIMIT
  4209.     If $IITEMLIMIT < 1 Then $IITEMLIMIT = $IUBOUND
  4210.     If $IUBOUND > $IITEMLIMIT Then $IUBOUND = $IITEMLIMIT
  4211.     If $SHEADER = "" Then
  4212.         $SHEADER = "Row  "
  4213.         For $I = 0 To $ISUBMAX
  4214.             $SHEADER &= $SSEPARATOR & "Col " & $I
  4215.         Next
  4216.     EndIf
  4217.     Local $AVARRAYTEXT[$IUBOUND + 1]
  4218.     For $I = 0 To $IUBOUND
  4219.         $AVARRAYTEXT[$I] = "[" & $I & "]"
  4220.         For $J = 0 To $ISUBMAX
  4221.             If $IDIMENSION = 1 Then
  4222.                 If $ITRANSPOSE Then
  4223.                     $VTMP = $AVARRAY[$J]
  4224.                 Else
  4225.                     $VTMP = $AVARRAY[$I]
  4226.                 EndIf
  4227.             Else
  4228.                 If $ITRANSPOSE Then
  4229.                     $VTMP = $AVARRAY[$J][$I]
  4230.                 Else
  4231.                     $VTMP = $AVARRAY[$I][$J]
  4232.                 EndIf
  4233.             EndIf
  4234.             $VTMP = StringReplace($VTMP, $SSEPARATOR, $SREPLACE, 0, 1)
  4235.             If StringLen($VTMP) > $IBUFFER Then $VTMP = StringLeft($VTMP, $IBUFFER)
  4236.             $AVARRAYTEXT[$I] &= $SSEPARATOR & $VTMP
  4237.         Next
  4238.     Next
  4239.     Local Const $_ARRAYCONSTANT_GUI_DOCKBORDERS = 102
  4240.     Local Const $_ARRAYCONSTANT_GUI_DOCKBOTTOM = 64
  4241.     Local Const $_ARRAYCONSTANT_GUI_DOCKHEIGHT = 512
  4242.     Local Const $_ARRAYCONSTANT_GUI_DOCKLEFT = 2
  4243.     Local Const $_ARRAYCONSTANT_GUI_DOCKRIGHT = 4
  4244.     Local Const $_ARRAYCONSTANT_GUI_EVENT_CLOSE = -3
  4245.     Local Const $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH = (4096 + 29)
  4246.     Local Const $_ARRAYCONSTANT_LVM_GETITEMCOUNT = (4096 + 4)
  4247.     Local Const $_ARRAYCONSTANT_LVM_GETITEMSTATE = (4096 + 44)
  4248.     Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (4096 + 54)
  4249.     Local Const $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT = 32
  4250.     Local Const $_ARRAYCONSTANT_LVS_EX_GRIDLINES = 1
  4251.     Local Const $_ARRAYCONSTANT_LVS_SHOWSELALWAYS = 8
  4252.     Local Const $_ARRAYCONSTANT_WS_EX_CLIENTEDGE = 512
  4253.     Local Const $_ARRAYCONSTANT_WS_MAXIMIZEBOX = 65536
  4254.     Local Const $_ARRAYCONSTANT_WS_MINIMIZEBOX = 131072
  4255.     Local Const $_ARRAYCONSTANT_WS_SIZEBOX = 262144
  4256.     Local $IWIDTH = 640, $IHEIGHT = 480
  4257.     Local $HGUI = GUICreate($STITLE, $IWIDTH, $IHEIGHT, Default, Default, BitOR($_ARRAYCONSTANT_WS_SIZEBOX, $_ARRAYCONSTANT_WS_MINIMIZEBOX, $_ARRAYCONSTANT_WS_MAXIMIZEBOX))
  4258.     Local $AIGUISIZE = WinGetClientSize($HGUI)
  4259.     Local $HLISTVIEW = GUICtrlCreateListView($SHEADER, 0, 0, $AIGUISIZE[0], $AIGUISIZE[1] - 26, $_ARRAYCONSTANT_LVS_SHOWSELALWAYS)
  4260.     Local $HCOPY = GUICtrlCreateButton("Copy Selected", 3, $AIGUISIZE[1] - 23, $AIGUISIZE[0] - 6, 20)
  4261.     GUICtrlSetResizing($HLISTVIEW, $_ARRAYCONSTANT_GUI_DOCKBORDERS)
  4262.     GUICtrlSetResizing($HCOPY, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
  4263.     GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_GRIDLINES, $_ARRAYCONSTANT_LVS_EX_GRIDLINES)
  4264.     GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT)
  4265.     GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE)
  4266.     For $I = 0 To $IUBOUND
  4267.         GUICtrlCreateListViewItem($AVARRAYTEXT[$I], $HLISTVIEW)
  4268.     Next
  4269.     $IWIDTH = 0
  4270.     For $I = 0 To $ISUBMAX + 1
  4271.         $IWIDTH += GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $I, 0)
  4272.     Next
  4273.     If $IWIDTH < 250 Then $IWIDTH = 230
  4274.     $IWIDTH += 20
  4275.     If $IWIDTH > @DesktopWidth Then $IWIDTH = @DesktopWidth - 100
  4276.     WinMove($HGUI, "", (@DesktopWidth - $IWIDTH) / 2, Default, $IWIDTH)
  4277.     GUISetState(@SW_SHOW, $HGUI)
  4278.     While 1
  4279.         Switch GUIGetMsg()
  4280.             Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
  4281.                 ExitLoop
  4282.             Case $HCOPY
  4283.                 Local $SCLIP = ""
  4284.                 Local $AICURITEMS[1] = [0]
  4285.                 For $I = 0 To GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0)
  4286.                     If GUICtrlSendMsg($HLISTVIEW, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $I, 2) Then
  4287.                         $AICURITEMS[0] += 1
  4288.                         ReDim $AICURITEMS[$AICURITEMS[0] + 1]
  4289.                         $AICURITEMS[$AICURITEMS[0]] = $I
  4290.                     EndIf
  4291.                 Next
  4292.                 If Not $AICURITEMS[0] Then
  4293.                     For $SITEM In $AVARRAYTEXT
  4294.                         $SCLIP &= $SITEM & @CRLF
  4295.                     Next
  4296.                 Else
  4297.                     For $I = 1 To UBound($AICURITEMS) - 1
  4298.                         $SCLIP &= $AVARRAYTEXT[$AICURITEMS[$I]] & @CRLF
  4299.                     Next
  4300.                 EndIf
  4301.                 ClipPut($SCLIP)
  4302.         EndSwitch
  4303.     WEnd
  4304.     GUIDelete($HGUI)
  4305.     Opt("GUIOnEventMode", $IONEVENTMODE)
  4306.     Opt("GUIDataSeparatorChar", $SDATASEPARATORCHAR)
  4307.     Return 1
  4308. EndFunc
  4309. Func _ArrayFindAll(Const ByRef $AVARRAY, $VVALUE, $ISTART = 0, $IEND = 0, $ICASE = 0, $ICOMPARE = 0, $ISUBITEM = 0)
  4310.     $ISTART = _ArraySearch($AVARRAY, $VVALUE, $ISTART, $IEND, $ICASE, $ICOMPARE, 1, $ISUBITEM)
  4311.     If @error Then Return SetError(@error, 0, -1)
  4312.     Local $IINDEX = 0, $AVRESULT[UBound($AVARRAY)]
  4313.     Do
  4314.         $AVRESULT[$IINDEX] = $ISTART
  4315.         $IINDEX += 1
  4316.         $ISTART = _ArraySearch($AVARRAY, $VVALUE, $ISTART + 1, $IEND, $ICASE, $ICOMPARE, 1, $ISUBITEM)
  4317.     Until @error
  4318.     ReDim $AVRESULT[$IINDEX]
  4319.     Return $AVRESULT
  4320. EndFunc
  4321. Func _ArrayInsert(ByRef $AVARRAY, $IELEMENT, $VVALUE = "")
  4322.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  4323.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
  4324.     Local $IUBOUND = UBound($AVARRAY) + 1
  4325.     ReDim $AVARRAY[$IUBOUND]
  4326.     For $I = $IUBOUND - 1 To $IELEMENT + 1 Step -1
  4327.         $AVARRAY[$I] = $AVARRAY[$I - 1]
  4328.     Next
  4329.     $AVARRAY[$IELEMENT] = $VVALUE
  4330.     Return $IUBOUND
  4331. EndFunc
  4332. Func _ArrayMax(Const ByRef $AVARRAY, $ICOMPNUMERIC = 0, $ISTART = 0, $IEND = 0)
  4333.     Local $IRESULT = _ArrayMaxIndex($AVARRAY, $ICOMPNUMERIC, $ISTART, $IEND)
  4334.     If @error Then Return SetError(@error, 0, "")
  4335.     Return $AVARRAY[$IRESULT]
  4336. EndFunc
  4337. Func _ArrayMaxIndex(Const ByRef $AVARRAY, $ICOMPNUMERIC = 0, $ISTART = 0, $IEND = 0)
  4338.     If Not IsArray($AVARRAY) Or UBound($AVARRAY, 0) <> 1 Then Return SetError(1, 0, -1)
  4339.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, -1)
  4340.     Local $IUBOUND = UBound($AVARRAY) - 1
  4341.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  4342.     If $ISTART < 0 Then $ISTART = 0
  4343.     If $ISTART > $IEND Then Return SetError(2, 0, -1)
  4344.     Local $IMAXINDEX = $ISTART
  4345.     If $ICOMPNUMERIC Then
  4346.         For $I = $ISTART To $IEND
  4347.             If Number($AVARRAY[$IMAXINDEX]) < Number($AVARRAY[$I]) Then $IMAXINDEX = $I
  4348.         Next
  4349.     Else
  4350.         For $I = $ISTART To $IEND
  4351.             If $AVARRAY[$IMAXINDEX] < $AVARRAY[$I] Then $IMAXINDEX = $I
  4352.         Next
  4353.     EndIf
  4354.     Return $IMAXINDEX
  4355. EndFunc
  4356. Func _ArrayMin(Const ByRef $AVARRAY, $ICOMPNUMERIC = 0, $ISTART = 0, $IEND = 0)
  4357.     Local $IRESULT = _ArrayMinIndex($AVARRAY, $ICOMPNUMERIC, $ISTART, $IEND)
  4358.     If @error Then Return SetError(@error, 0, "")
  4359.     Return $AVARRAY[$IRESULT]
  4360. EndFunc
  4361. Func _ArrayMinIndex(Const ByRef $AVARRAY, $ICOMPNUMERIC = 0, $ISTART = 0, $IEND = 0)
  4362.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, -1)
  4363.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, -1)
  4364.     Local $IUBOUND = UBound($AVARRAY) - 1
  4365.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  4366.     If $ISTART < 0 Then $ISTART = 0
  4367.     If $ISTART > $IEND Then Return SetError(2, 0, -1)
  4368.     Local $IMININDEX = $ISTART
  4369.     If $ICOMPNUMERIC Then
  4370.         For $I = $ISTART To $IEND
  4371.             If Number($AVARRAY[$IMININDEX]) > Number($AVARRAY[$I]) Then $IMININDEX = $I
  4372.         Next
  4373.     Else
  4374.         For $I = $ISTART To $IEND
  4375.             If $AVARRAY[$IMININDEX] > $AVARRAY[$I] Then $IMININDEX = $I
  4376.         Next
  4377.     EndIf
  4378.     Return $IMININDEX
  4379. EndFunc
  4380. Func _ArrayPermute(ByRef $AVARRAY, $SDELIM = "")
  4381.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  4382.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
  4383.     Local $ISIZE = UBound($AVARRAY), $IFACTORIAL = 1, $AIDX[$ISIZE], $ARESULT[1], $ICOUNT = 1
  4384.     For $I = 0 To $ISIZE - 1
  4385.         $AIDX[$I] = $I
  4386.     Next
  4387.     For $I = $ISIZE To 1 Step -1
  4388.         $IFACTORIAL *= $I
  4389.     Next
  4390.     ReDim $ARESULT[$IFACTORIAL + 1]
  4391.     $ARESULT[0] = $IFACTORIAL
  4392.     __ARRAY_EXETERINTERNAL($AVARRAY, 0, $ISIZE, $SDELIM, $AIDX, $ARESULT, $ICOUNT)
  4393.     Return $ARESULT
  4394. EndFunc
  4395. Func _ArrayPop(ByRef $AVARRAY)
  4396.     If (Not IsArray($AVARRAY)) Then Return SetError(1, 0, "")
  4397.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, "")
  4398.     Local $IUBOUND = UBound($AVARRAY) - 1, $SLASTVAL = $AVARRAY[$IUBOUND]
  4399.     If Not $IUBOUND Then
  4400.         $AVARRAY = ""
  4401.     Else
  4402.         ReDim $AVARRAY[$IUBOUND]
  4403.     EndIf
  4404.     Return $SLASTVAL
  4405. EndFunc
  4406. Func _ArrayPush(ByRef $AVARRAY, $VVALUE, $IDIRECTION = 0)
  4407.     If (Not IsArray($AVARRAY)) Then Return SetError(1, 0, 0)
  4408.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, 0)
  4409.     Local $IUBOUND = UBound($AVARRAY) - 1
  4410.     If IsArray($VVALUE) Then
  4411.         Local $IUBOUNDS = UBound($VVALUE)
  4412.         If ($IUBOUNDS - 1) > $IUBOUND Then Return SetError(2, 0, 0)
  4413.         If $IDIRECTION Then
  4414.             For $I = $IUBOUND To $IUBOUNDS Step -1
  4415.                 $AVARRAY[$I] = $AVARRAY[$I - $IUBOUNDS]
  4416.             Next
  4417.             For $I = 0 To $IUBOUNDS - 1
  4418.                 $AVARRAY[$I] = $VVALUE[$I]
  4419.             Next
  4420.         Else
  4421.             For $I = 0 To $IUBOUND - $IUBOUNDS
  4422.                 $AVARRAY[$I] = $AVARRAY[$I + $IUBOUNDS]
  4423.             Next
  4424.             For $I = 0 To $IUBOUNDS - 1
  4425.                 $AVARRAY[$I + $IUBOUND - $IUBOUNDS + 1] = $VVALUE[$I]
  4426.             Next
  4427.         EndIf
  4428.     Else
  4429.         If $IDIRECTION Then
  4430.             For $I = $IUBOUND To 1 Step -1
  4431.                 $AVARRAY[$I] = $AVARRAY[$I - 1]
  4432.             Next
  4433.             $AVARRAY[0] = $VVALUE
  4434.         Else
  4435.             For $I = 0 To $IUBOUND - 1
  4436.                 $AVARRAY[$I] = $AVARRAY[$I + 1]
  4437.             Next
  4438.             $AVARRAY[$IUBOUND] = $VVALUE
  4439.         EndIf
  4440.     EndIf
  4441.     Return 1
  4442. EndFunc
  4443. Func _ArrayReverse(ByRef $AVARRAY, $ISTART = 0, $IEND = 0)
  4444.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  4445.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, 0)
  4446.     Local $VTMP, $IUBOUND = UBound($AVARRAY) - 1
  4447.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  4448.     If $ISTART < 0 Then $ISTART = 0
  4449.     If $ISTART > $IEND Then Return SetError(2, 0, 0)
  4450.     For $I = $ISTART To Int(($ISTART + $IEND - 1) / 2)
  4451.         $VTMP = $AVARRAY[$I]
  4452.         $AVARRAY[$I] = $AVARRAY[$IEND]
  4453.         $AVARRAY[$IEND] = $VTMP
  4454.         $IEND -= 1
  4455.     Next
  4456.     Return 1
  4457. EndFunc
  4458. Func _ArraySearch(Const ByRef $AVARRAY, $VVALUE, $ISTART = 0, $IEND = 0, $ICASE = 0, $ICOMPARE = 0, $IFORWARD = 1, $ISUBITEM = -1)
  4459.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, -1)
  4460.     If UBound($AVARRAY, 0) > 2 Or UBound($AVARRAY, 0) < 1 Then Return SetError(2, 0, -1)
  4461.     Local $IUBOUND = UBound($AVARRAY) - 1
  4462.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  4463.     If $ISTART < 0 Then $ISTART = 0
  4464.     If $ISTART > $IEND Then Return SetError(4, 0, -1)
  4465.     Local $ISTEP = 1
  4466.     If Not $IFORWARD Then
  4467.         Local $ITMP = $ISTART
  4468.         $ISTART = $IEND
  4469.         $IEND = $ITMP
  4470.         $ISTEP = -1
  4471.     EndIf
  4472.     Local $ICOMPTYPE = False
  4473.     If $ICOMPARE = 2 Then
  4474.         $ICOMPARE = 0
  4475.         $ICOMPTYPE = True
  4476.     EndIf
  4477.     Switch UBound($AVARRAY, 0)
  4478.         Case 1
  4479.             If Not $ICOMPARE Then
  4480.                 If Not $ICASE Then
  4481.                     For $I = $ISTART To $IEND Step $ISTEP
  4482.                         If $ICOMPTYPE And VarGetType($AVARRAY[$I]) <> VarGetType($VVALUE) Then ContinueLoop
  4483.                         If $AVARRAY[$I] = $VVALUE Then Return $I
  4484.                     Next
  4485.                 Else
  4486.                     For $I = $ISTART To $IEND Step $ISTEP
  4487.                         If $ICOMPTYPE And VarGetType($AVARRAY[$I]) <> VarGetType($VVALUE) Then ContinueLoop
  4488.                         If $AVARRAY[$I] == $VVALUE Then Return $I
  4489.                     Next
  4490.                 EndIf
  4491.             Else
  4492.                 For $I = $ISTART To $IEND Step $ISTEP
  4493.                     If StringInStr($AVARRAY[$I], $VVALUE, $ICASE) > 0 Then Return $I
  4494.                 Next
  4495.             EndIf
  4496.         Case 2
  4497.             Local $IUBOUNDSUB = UBound($AVARRAY, 2) - 1
  4498.             If $ISUBITEM > $IUBOUNDSUB Then $ISUBITEM = $IUBOUNDSUB
  4499.             If $ISUBITEM < 0 Then
  4500.                 $ISUBITEM = 0
  4501.             Else
  4502.                 $IUBOUNDSUB = $ISUBITEM
  4503.             EndIf
  4504.             For $J = $ISUBITEM To $IUBOUNDSUB
  4505.                 If Not $ICOMPARE Then
  4506.                     If Not $ICASE Then
  4507.                         For $I = $ISTART To $IEND Step $ISTEP
  4508.                             If $ICOMPTYPE And VarGetType($AVARRAY[$I][$J]) <> VarGetType($VVALUE) Then ContinueLoop
  4509.                             If $AVARRAY[$I][$J] = $VVALUE Then Return $I
  4510.                         Next
  4511.                     Else
  4512.                         For $I = $ISTART To $IEND Step $ISTEP
  4513.                             If $ICOMPTYPE And VarGetType($AVARRAY[$I][$J]) <> VarGetType($VVALUE) Then ContinueLoop
  4514.                             If $AVARRAY[$I][$J] == $VVALUE Then Return $I
  4515.                         Next
  4516.                     EndIf
  4517.                 Else
  4518.                     For $I = $ISTART To $IEND Step $ISTEP
  4519.                         If StringInStr($AVARRAY[$I][$J], $VVALUE, $ICASE) > 0 Then Return $I
  4520.                     Next
  4521.                 EndIf
  4522.             Next
  4523.         Case Else
  4524.             Return SetError(7, 0, -1)
  4525.     EndSwitch
  4526.     Return SetError(6, 0, -1)
  4527. EndFunc
  4528. Func _ArraySort(ByRef $AVARRAY, $IDESCENDING = 0, $ISTART = 0, $IEND = 0, $ISUBITEM = 0)
  4529.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  4530.     Local $IUBOUND = UBound($AVARRAY) - 1
  4531.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  4532.     If $ISTART < 0 Then $ISTART = 0
  4533.     If $ISTART > $IEND Then Return SetError(2, 0, 0)
  4534.     Switch UBound($AVARRAY, 0)
  4535.         Case 1
  4536.             __ARRAYQUICKSORT1D($AVARRAY, $ISTART, $IEND)
  4537.             If $IDESCENDING Then _ArrayReverse($AVARRAY, $ISTART, $IEND)
  4538.         Case 2
  4539.             Local $ISUBMAX = UBound($AVARRAY, 2) - 1
  4540.             If $ISUBITEM > $ISUBMAX Then Return SetError(3, 0, 0)
  4541.             If $IDESCENDING Then
  4542.                 $IDESCENDING = -1
  4543.             Else
  4544.                 $IDESCENDING = 1
  4545.             EndIf
  4546.             __ARRAYQUICKSORT2D($AVARRAY, $IDESCENDING, $ISTART, $IEND, $ISUBITEM, $ISUBMAX)
  4547.         Case Else
  4548.             Return SetError(4, 0, 0)
  4549.     EndSwitch
  4550.     Return 1
  4551. EndFunc
  4552. Func __ARRAYQUICKSORT1D(ByRef $AVARRAY, ByRef $ISTART, ByRef $IEND)
  4553.     If $IEND <= $ISTART Then Return
  4554.     Local $VTMP
  4555.     If ($IEND - $ISTART) < 15 Then
  4556.         Local $VCUR
  4557.         For $I = $ISTART + 1 To $IEND
  4558.             $VTMP = $AVARRAY[$I]
  4559.             If IsNumber($VTMP) Then
  4560.                 For $J = $I - 1 To $ISTART Step -1
  4561.                     $VCUR = $AVARRAY[$J]
  4562.                     If ($VTMP >= $VCUR And IsNumber($VCUR)) Or (Not IsNumber($VCUR) And StringCompare($VTMP, $VCUR) >= 0) Then ExitLoop
  4563.                     $AVARRAY[$J + 1] = $VCUR
  4564.                 Next
  4565.             Else
  4566.                 For $J = $I - 1 To $ISTART Step -1
  4567.                     If (StringCompare($VTMP, $AVARRAY[$J]) >= 0) Then ExitLoop
  4568.                     $AVARRAY[$J + 1] = $AVARRAY[$J]
  4569.                 Next
  4570.             EndIf
  4571.             $AVARRAY[$J + 1] = $VTMP
  4572.         Next
  4573.         Return
  4574.     EndIf
  4575.     Local $L = $ISTART, $R = $IEND, $VPIVOT = $AVARRAY[Int(($ISTART + $IEND) / 2)], $FNUM = IsNumber($VPIVOT)
  4576.     Do
  4577.         If $FNUM Then
  4578.             While ($AVARRAY[$L] < $VPIVOT And IsNumber($AVARRAY[$L])) Or (Not IsNumber($AVARRAY[$L]) And StringCompare($AVARRAY[$L], $VPIVOT) < 0)
  4579.                 $L += 1
  4580.             WEnd
  4581.             While ($AVARRAY[$R] > $VPIVOT And IsNumber($AVARRAY[$R])) Or (Not IsNumber($AVARRAY[$R]) And StringCompare($AVARRAY[$R], $VPIVOT) > 0)
  4582.                 $R -= 1
  4583.             WEnd
  4584.         Else
  4585.             While (StringCompare($AVARRAY[$L], $VPIVOT) < 0)
  4586.                 $L += 1
  4587.             WEnd
  4588.             While (StringCompare($AVARRAY[$R], $VPIVOT) > 0)
  4589.                 $R -= 1
  4590.             WEnd
  4591.         EndIf
  4592.         If $L <= $R Then
  4593.             $VTMP = $AVARRAY[$L]
  4594.             $AVARRAY[$L] = $AVARRAY[$R]
  4595.             $AVARRAY[$R] = $VTMP
  4596.             $L += 1
  4597.             $R -= 1
  4598.         EndIf
  4599.     Until $L > $R
  4600.     __ARRAYQUICKSORT1D($AVARRAY, $ISTART, $R)
  4601.     __ARRAYQUICKSORT1D($AVARRAY, $L, $IEND)
  4602. EndFunc
  4603. Func __ARRAYQUICKSORT2D(ByRef $AVARRAY, ByRef $ISTEP, ByRef $ISTART, ByRef $IEND, ByRef $ISUBITEM, ByRef $ISUBMAX)
  4604.     If $IEND <= $ISTART Then Return
  4605.     Local $VTMP, $L = $ISTART, $R = $IEND, $VPIVOT = $AVARRAY[Int(($ISTART + $IEND) / 2)][$ISUBITEM], $FNUM = IsNumber($VPIVOT)
  4606.     Do
  4607.         If $FNUM Then
  4608.             While ($ISTEP * ($AVARRAY[$L][$ISUBITEM] - $VPIVOT) < 0 And IsNumber($AVARRAY[$L][$ISUBITEM])) Or (Not IsNumber($AVARRAY[$L][$ISUBITEM]) And $ISTEP * StringCompare($AVARRAY[$L][$ISUBITEM], $VPIVOT) < 0)
  4609.                 $L += 1
  4610.             WEnd
  4611.             While ($ISTEP * ($AVARRAY[$R][$ISUBITEM] - $VPIVOT) > 0 And IsNumber($AVARRAY[$R][$ISUBITEM])) Or (Not IsNumber($AVARRAY[$R][$ISUBITEM]) And $ISTEP * StringCompare($AVARRAY[$R][$ISUBITEM], $VPIVOT) > 0)
  4612.                 $R -= 1
  4613.             WEnd
  4614.         Else
  4615.             While ($ISTEP * StringCompare($AVARRAY[$L][$ISUBITEM], $VPIVOT) < 0)
  4616.                 $L += 1
  4617.             WEnd
  4618.             While ($ISTEP * StringCompare($AVARRAY[$R][$ISUBITEM], $VPIVOT) > 0)
  4619.                 $R -= 1
  4620.             WEnd
  4621.         EndIf
  4622.         If $L <= $R Then
  4623.             For $I = 0 To $ISUBMAX
  4624.                 $VTMP = $AVARRAY[$L][$I]
  4625.                 $AVARRAY[$L][$I] = $AVARRAY[$R][$I]
  4626.                 $AVARRAY[$R][$I] = $VTMP
  4627.             Next
  4628.             $L += 1
  4629.             $R -= 1
  4630.         EndIf
  4631.     Until $L > $R
  4632.     __ARRAYQUICKSORT2D($AVARRAY, $ISTEP, $ISTART, $R, $ISUBITEM, $ISUBMAX)
  4633.     __ARRAYQUICKSORT2D($AVARRAY, $ISTEP, $L, $IEND, $ISUBITEM, $ISUBMAX)
  4634. EndFunc
  4635. Func _ArraySwap(ByRef $VITEM1, ByRef $VITEM2)
  4636.     Local $VTMP = $VITEM1
  4637.     $VITEM1 = $VITEM2
  4638.     $VITEM2 = $VTMP
  4639. EndFunc
  4640. Func _ArrayToClip(Const ByRef $AVARRAY, $ISTART = 0, $IEND = 0)
  4641.     Local $SRESULT = _ArrayToString($AVARRAY, @CR, $ISTART, $IEND)
  4642.     If @error Then Return SetError(@error, 0, 0)
  4643.     Return ClipPut($SRESULT)
  4644. EndFunc
  4645. Func _ArrayToString(Const ByRef $AVARRAY, $SDELIM = "|", $ISTART = 0, $IEND = 0)
  4646.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, "")
  4647.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(3, 0, "")
  4648.     Local $SRESULT, $IUBOUND = UBound($AVARRAY) - 1
  4649.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  4650.     If $ISTART < 0 Then $ISTART = 0
  4651.     If $ISTART > $IEND Then Return SetError(2, 0, "")
  4652.     For $I = $ISTART To $IEND
  4653.         $SRESULT &= $AVARRAY[$I] & $SDELIM
  4654.     Next
  4655.     Return StringTrimRight($SRESULT, StringLen($SDELIM))
  4656. EndFunc
  4657. Func _ArrayTrim(ByRef $AVARRAY, $ITRIMNUM, $IDIRECTION = 0, $ISTART = 0, $IEND = 0)
  4658.     If Not IsArray($AVARRAY) Then Return SetError(1, 0, 0)
  4659.     If UBound($AVARRAY, 0) <> 1 Then Return SetError(2, 0, 0)
  4660.     Local $IUBOUND = UBound($AVARRAY) - 1
  4661.     If $IEND < 1 Or $IEND > $IUBOUND Then $IEND = $IUBOUND
  4662.     If $ISTART < 0 Then $ISTART = 0
  4663.     If $ISTART > $IEND Then Return SetError(5, 0, 0)
  4664.     If $IDIRECTION Then
  4665.         For $I = $ISTART To $IEND
  4666.             $AVARRAY[$I] = StringTrimRight($AVARRAY[$I], $ITRIMNUM)
  4667.         Next
  4668.     Else
  4669.         For $I = $ISTART To $IEND
  4670.             $AVARRAY[$I] = StringTrimLeft($AVARRAY[$I], $ITRIMNUM)
  4671.         Next
  4672.     EndIf
  4673.     Return 1
  4674. EndFunc
  4675. Func _ArrayUnique($AARRAY, $IDIMENSION = 1, $IBASE = 0, $ICASE = 0, $VDELIM = "|")
  4676.     Local $IUBOUNDDIM
  4677.     If $VDELIM = "|" Then $VDELIM = Chr(1)
  4678.     If Not IsArray($AARRAY) Then Return SetError(1, 0, 0)
  4679.     If Not $IDIMENSION > 0 Then
  4680.         Return SetError(3, 0, 0)
  4681.     Else
  4682.         $IUBOUNDDIM = UBound($AARRAY, 1)
  4683.         If @error Then Return SetError(3, 0, 0)
  4684.         If $IDIMENSION > 1 Then
  4685.             Local $AARRAYTMP[1]
  4686.             For $I = 0 To $IUBOUNDDIM - 1
  4687.                 _ArrayAdd($AARRAYTMP, $AARRAY[$I][$IDIMENSION - 1])
  4688.             Next
  4689.             _ArrayDelete($AARRAYTMP, 0)
  4690.         Else
  4691.             If UBound($AARRAY, 0) = 1 Then
  4692.                 Dim $AARRAYTMP[1]
  4693.                 For $I = 0 To $IUBOUNDDIM - 1
  4694.                     _ArrayAdd($AARRAYTMP, $AARRAY[$I])
  4695.                 Next
  4696.                 _ArrayDelete($AARRAYTMP, 0)
  4697.             Else
  4698.                 Dim $AARRAYTMP[1]
  4699.                 For $I = 0 To $IUBOUNDDIM - 1
  4700.                     _ArrayAdd($AARRAYTMP, $AARRAY[$I][$IDIMENSION - 1])
  4701.                 Next
  4702.                 _ArrayDelete($AARRAYTMP, 0)
  4703.             EndIf
  4704.         EndIf
  4705.     EndIf
  4706.     Local $SHOLD
  4707.     For $ICC = $IBASE To UBound($AARRAYTMP) - 1
  4708.         If Not StringInStr($VDELIM & $SHOLD, $VDELIM & $AARRAYTMP[$ICC] & $VDELIM, $ICASE) Then $SHOLD &= $AARRAYTMP[$ICC] & $VDELIM
  4709.     Next
  4710.     If $SHOLD Then
  4711.         $AARRAYTMP = StringSplit(StringTrimRight($SHOLD, StringLen($VDELIM)), $VDELIM, 1)
  4712.         Return $AARRAYTMP
  4713.     EndIf
  4714.     Return SetError(2, 0, 0)
  4715. EndFunc
  4716. Func __ARRAY_EXETERINTERNAL(ByRef $AVARRAY, $ISTART, $ISIZE, $SDELIM, ByRef $AIDX, ByRef $ARESULT, ByRef $ICOUNT)
  4717.     If $ISTART == $ISIZE - 1 Then
  4718.         For $I = 0 To $ISIZE - 1
  4719.             $ARESULT[$ICOUNT] &= $AVARRAY[$AIDX[$I]] & $SDELIM
  4720.         Next
  4721.         If $SDELIM <> "" Then $ARESULT[$ICOUNT] = StringTrimRight($ARESULT[$ICOUNT], 1)
  4722.         $ICOUNT += 1
  4723.     Else
  4724.         Local $ITEMP
  4725.         For $I = $ISTART To $ISIZE - 1
  4726.             $ITEMP = $AIDX[$I]
  4727.             $AIDX[$I] = $AIDX[$ISTART]
  4728.             $AIDX[$ISTART] = $ITEMP
  4729.             __ARRAY_EXETERINTERNAL($AVARRAY, $ISTART + 1, $ISIZE, $SDELIM, $AIDX, $ARESULT, $ICOUNT)
  4730.             $AIDX[$ISTART] = $AIDX[$I]
  4731.             $AIDX[$I] = $ITEMP
  4732.         Next
  4733.     EndIf
  4734. EndFunc
  4735. Func __ARRAY_COMBINATIONS($IN, $IR)
  4736.     Local $I_TOTAL = 1
  4737.     For $I = $IR To 1 Step -1
  4738.         $I_TOTAL *= ($IN / $I)
  4739.         $IN -= 1
  4740.     Next
  4741.     Return Round($I_TOTAL)
  4742. EndFunc
  4743. Func __ARRAY_GETNEXT($IN, $IR, ByRef $ILEFT, $ITOTAL, ByRef $AIDX)
  4744.     If $ILEFT == $ITOTAL Then
  4745.         $ILEFT -= 1
  4746.         Return
  4747.     EndIf
  4748.     Local $I = $IR - 1
  4749.     While $AIDX[$I] == $IN - $IR + $I
  4750.         $I -= 1
  4751.     WEnd
  4752.     $AIDX[$I] += 1
  4753.     For $J = $I + 1 To $IR - 1
  4754.         $AIDX[$J] = $AIDX[$I] + $J - $I
  4755.     Next
  4756.     $ILEFT -= 1
  4757. EndFunc
  4758. Global $NAME = "PoliFix "
  4759. Global $VERSION = "2.0.7 "
  4760. Global $COMPANY = "By InfoSpyware"
  4761. Global $RUN = @ScriptFullPath
  4762. Global $ARQ = @OSArch
  4763. Global $USER = @UserName
  4764. Global $SUSER = _Security__LookupAccountName(@UserName)
  4765. Global $SIDCU = "HKU\" & $SUSER[0]
  4766. Global $SIDCU64 = "HKU64\" & $SUSER[0]
  4767. Global $REPORTEPATH = @HomeDrive & "\PoliFix.txt"
  4768. Global $JAVA32 = ""
  4769. Global $JAVA64 = ""
  4770. Select
  4771.     Case @OSVersion = "WIN_7"
  4772.         $SYSTEM = "Windows 7 "
  4773.     Case @OSVersion = "WIN_VISTA"
  4774.         $SYSTEM = "Windows Vista "
  4775.     Case @OSVersion = "WIN_XP"
  4776.         $SYSTEM = "Windows XP "
  4777.     Case Else
  4778.         MsgBox(0, "PoliFix", "El sistema actual no es compatible con la herramienta")
  4779.         Exit
  4780. EndSelect
  4781. If FileExists(@HomeDrive & "\_PoliFix") Then
  4782.     Global $CUARENTENA = @HomeDrive & "\_PoliFix"
  4783. Else
  4784.     DirCreate(@HomeDrive & "\_PoliFix")
  4785.     Global $CUARENTENA = @HomeDrive & "\_PoliFix"
  4786. EndIf
  4787. If FileExists($CUARENTENA & "\Tools") Then
  4788.     Global $TOOLS = $CUARENTENA & "\Tools"
  4789. Else
  4790.     DirCreate($CUARENTENA & "\Tools")
  4791.     Global $TOOLS = $CUARENTENA & "\Tools"
  4792. EndIf
  4793. FileInstall("smr.reg", $TOOLS & "\smr.reg", 1)
  4794. FileInstall("logo.jpg", $TOOLS & "\logo.jpg", 1)
  4795. FileInstall("help.ico", $TOOLS & "\help.ico", 1)
  4796. FileInstall("bin.ico", $TOOLS & "\bin.ico", 1)
  4797. FileInstall("search.avi", $TOOLS & "\search.avi", 1)
  4798. FileInstall("injec.ico", $TOOLS & "\injec.ico", 1)
  4799. If IsAdmin() Then
  4800.     $ADMIN = " (Administrador)"
  4801. Else
  4802.     $ADMIN = " (No Es Administrador)"
  4803. EndIf
  4804. Select
  4805.     Case _SAFEMODE() =0
  4806.         $BOOTMODE = "Modo Normal"
  4807.     Case _SAFEMODE() =1
  4808.         $BOOTMODE = "Modo Seguro"
  4809.     Case _SAFEMODE() =2
  4810.         $BOOTMODE = "Modo Seguro Con Funciones De Red"
  4811.     Case Else
  4812.         $BOOTMODE = "Modo Desconocido"
  4813. EndSelect
  4814. Func _SAFEMODE()
  4815.     $FLAG = DllCall("user32.dll", "int", "GetSystemMetrics", "long", 67)
  4816.     Return $FLAG[0]
  4817. EndFunc
  4818. JAVA()
  4819. If _REGISTRYEXIST("HKLM\SOFTWARE\PoliFix", "PoliFix") Then
  4820.     ShellExecute(RegRead("HKLM\SOFTWARE\PoliFix", "PoliFix"))
  4821.     RegDelete("HKLM\SOFTWARE\PoliFix", "PoliFix")
  4822.     Exit
  4823. EndIf
  4824. #region ### START Koda GUI section ### Form=
  4825. $FORM1 = GUICreate($NAME & $VERSION & $COMPANY, 485, 288, -1, -1)
  4826. GUISetBkColor(16777215)
  4827. $PIC1 = GUICtrlCreatePic($TOOLS & "\logo.jpg", 80, 0, 335, 89, BitOR($GUI_SS_DEFAULT_PIC, $SS_CENTERIMAGE))
  4828. GUICtrlSetTip(-1, "InfoSpyware.com")
  4829. $GROUP1 = GUICtrlCreateGroup("", 200, 192, 265, 81)
  4830. $AVI1 = GUICtrlCreateAvi($TOOLS & "\search.avi", 1, 208, 208, 80, 50)
  4831. $PROGRESS1 = GUICtrlCreateProgress(304, 208, 153, 17)
  4832. $LABEL1 = GUICtrlCreateLabel("", 304, 240, 156, 17)
  4833. GUICtrlCreateGroup("", -99, -99, 1, 1)
  4834. $GROUP2 = GUICtrlCreateGroup("Opciones", 16, 104, 169, 169)
  4835. $BUTTON1 = GUICtrlCreateButton("Analizar", 72, 128, 97, 33)
  4836. $BUTTON2 = GUICtrlCreateButton("Solicitar ayuda", 72, 176, 97, 33)
  4837. $BUTTON3 = GUICtrlCreateButton("Desinstalar", 72, 224, 97, 33)
  4838. $ICON1 = GUICtrlCreateIcon($TOOLS & "\injec.ico", -1, 32, 128, 32, 32)
  4839. $ICON2 = GUICtrlCreateIcon($TOOLS & "\help.ico", -1, 32, 180, 32, 32)
  4840. $ICON3 = GUICtrlCreateIcon($TOOLS & "\bin.ico", -1, 32, 226, 32, 32)
  4841. $GROUP3 = GUICtrlCreateGroup("Información", 200, 104, 265, 81)
  4842. $LABEL2 = GUICtrlCreateLabel($SYSTEM & $ARQ & " " & $USER & $ADMIN, 210, 125, 240, 17)
  4843. $LABEL3 = GUICtrlCreateLabel("Modo de inicio: " & $BOOTMODE, 210, 145, 156, 17)
  4844. $LABEL4 = GUICtrlCreateLabel($JAVA32 & " " & $JAVA64, 210, 165, 200, 17)
  4845. GUICtrlCreateGroup("", -99, -99, 1, 1)
  4846. If Not _REGISTRYEXIST("HKLM\SOFTWARE\PoliFix", "Install") Then
  4847.     GUI2()
  4848. EndIf
  4849. GUISetState(@SW_SHOW)
  4850. RegWrite("HKLM\SOFTWARE\PoliFix", "Install", "REG_SZ", @ScriptFullPath)
  4851. #endregion ### END Koda GUI section ###
  4852. RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "Hidden", "REG_DWORD", "0x00000001")
  4853. RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideFileExt", "REG_DWORD", "0x00000000")
  4854. RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "ShowSuperHidden", "REG_DWORD", "0x00000001")
  4855. Opt("WinTitleMatchMode", 4)
  4856. WinActivate("classname=Progman")
  4857. Send("{F5}")
  4858. While 1
  4859.     $NMSG = GUIGetMsg()
  4860.     Switch $NMSG
  4861.         Case $GUI_EVENT_CLOSE
  4862.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "Hidden", "REG_DWORD", "0x00000002")
  4863.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideFileExt", "REG_DWORD", "0x00000001")
  4864.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "ShowSuperHidden", "REG_DWORD", "0x00000000")
  4865.             Opt("WinTitleMatchMode", 4)
  4866.             WinActivate("classname=Progman")
  4867.             Send("{F5}")
  4868.             Exit
  4869.         Case $PIC1
  4870.             ShellExecute("www.InfoSpyware.com")
  4871.         Case $BUTTON2
  4872.             ShellExecute("www.ForoSpyware.com")
  4873.         Case $BUTTON3
  4874.             GUIDelete($FORM1)
  4875.             RegDelete("HKLM\SOFTWARE\PoliFix")
  4876.             If FileExists(@HomeDrive & "\_PoliFix") Then
  4877.                 DirRemove(@HomeDrive & "\_PoliFix", 1)
  4878.             EndIf
  4879.             If FileExists(@HomeDrive & "\PoliFix.txt") Then
  4880.                 FileDelete(@HomeDrive & "\PoliFix.txt")
  4881.             EndIf
  4882.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "Hidden", "REG_DWORD", "0x00000002")
  4883.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideFileExt", "REG_DWORD", "0x00000001")
  4884.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "ShowSuperHidden", "REG_DWORD", "0x00000000")
  4885.             Opt("WinTitleMatchMode", 4)
  4886.             WinActivate("classname=Progman")
  4887.             Send("{F5}")
  4888.             _BORRARME(@AutoItExe)
  4889.             MsgBox(0, $NAME & $VERSION & $COMPANY, $NAME & "Reiniciará su Ordenador")
  4890.             Shutdown(6)
  4891.         Case $BUTTON1
  4892.             GUICtrlSetData($LABEL1, "Creando Reporte")
  4893.             Sleep(200)
  4894.             $FECHA = @MDAY & "/" & @MON & "/" & @YEAR
  4895.             $HORA = @HOUR & ":" & @MIN & ":" & @SEC
  4896.             If FileExists(@HomeDrive & "\PoliFix.txt") Then
  4897.                 FileDelete(@HomeDrive & "\PoliFix.txt")
  4898.             EndIf
  4899.             Global $REPORTE = FileOpen(@HomeDrive & "\PoliFix.txt", 1)
  4900.             FileWrite($REPORTE, "//////////////////// " & $NAME & $VERSION & $COMPANY & " ////////////////////" & @CRLF & @CRLF)
  4901.             FileWrite($REPORTE, "Ejecutado Desde: " & $RUN & @CRLF)
  4902.             FileWrite($REPORTE, "Fecha: " & $FECHA & " | Hora: " & $HORA & @CRLF)
  4903.             FileWrite($REPORTE, "Sistema Operativo: " & $SYSTEM & "De " & $ARQ & " Bits" & @CRLF)
  4904.             FileWrite($REPORTE, "Modo De Arranque: " & $BOOTMODE & @CRLF)
  4905.             FileWrite($REPORTE, "Usuario: " & $USER & " |" & $ADMIN & @CRLF)
  4906.             GUICtrlSetData($LABEL1, "Version de Java")
  4907.             Select
  4908.                 Case $ARQ = "X86"
  4909.                     If $JAVA32 = "" Then
  4910.                         FileWrite($REPORTE, "Version De Java 32: No Instalado" & @CRLF)
  4911.                     Else
  4912.                         FileWrite($REPORTE, "Version De " & $JAVA32 & @CRLF)
  4913.                     EndIf
  4914.                 Case $ARQ = "X64"
  4915.                     If $JAVA32 = "" Then
  4916.                         FileWrite($REPORTE, "Version De Java 32: No Instalado" & @CRLF)
  4917.                     Else
  4918.                         FileWrite($REPORTE, "Version De " & $JAVA32 & @CRLF)
  4919.                     EndIf
  4920.                     If $JAVA64 = "" Then
  4921.                         FileWrite($REPORTE, "Version De Java 64: No Instalado" & @CRLF)
  4922.                     Else
  4923.                         FileWrite($REPORTE, "Version De " & $JAVA64 & @CRLF)
  4924.                     EndIf
  4925.             EndSelect
  4926.             GUICtrlSetData($LABEL1, "Punto de Restauracion")
  4927.             Sleep(200)
  4928.             PUNTORESTAURACION("PoliFix_" & $VERSION)
  4929.             GUICtrlSetData($LABEL1, "Permisos del Registro")
  4930.             Sleep(200)
  4931.             _INITIATEPERMISSIONRESOURCES()
  4932.             _GRANTADMINISTRATORSACCESS_1("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $SE_REGISTRY_KEY, "Administrators", 1)
  4933.             _GRANTADMINISTRATORSACCESS_1("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $SE_REGISTRY_KEY, "Administrators", 1)
  4934.             _GRANTADMINISTRATORSACCESS_1($SIDCU & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $SE_REGISTRY_KEY, "Administrators", 1)
  4935.             _GRANTADMINISTRATORSACCESS_1("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run", $SE_REGISTRY_KEY, "Administrators", 1)
  4936.             _GRANTADMINISTRATORSACCESS_1("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run", $SE_REGISTRY_KEY, "Administrators", 1)
  4937.             _GRANTADMINISTRATORSACCESS_1($SIDCU & "\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run", $SE_REGISTRY_KEY, "Administrators", 1)
  4938.             _GRANTADMINISTRATORSACCESS_1("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows", $SE_REGISTRY_KEY, "Administrators", 1)
  4939.             _GRANTADMINISTRATORSACCESS_1("HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows", $SE_REGISTRY_KEY, "Administrators", 1)
  4940.             _GRANTADMINISTRATORSACCESS_1($SIDCU & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows", $SE_REGISTRY_KEY, "Administrators", 1)
  4941.             If $ARQ = "X64" Then
  4942.                 _GRANTADMINISTRATORSACCESS_1("HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $SE_REGISTRY_KEY, "Administrators", 1)
  4943.                 _GRANTADMINISTRATORSACCESS_1("HKCU64\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $SE_REGISTRY_KEY, "Administrators", 1)
  4944.                 _GRANTADMINISTRATORSACCESS_1($SIDCU64 & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $SE_REGISTRY_KEY, "Administrators", 1)
  4945.                 _GRANTADMINISTRATORSACCESS_1("HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run", $SE_REGISTRY_KEY, "Administrators", 1)
  4946.                 _GRANTADMINISTRATORSACCESS_1("HKCU64\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run", $SE_REGISTRY_KEY, "Administrators", 1)
  4947.                 _GRANTADMINISTRATORSACCESS_1($SIDCU64 & "\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run", $SE_REGISTRY_KEY, "Administrators", 1)
  4948.                 _GRANTADMINISTRATORSACCESS_1("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows", $SE_REGISTRY_KEY, "Administrators", 1)
  4949.                 _GRANTADMINISTRATORSACCESS_1("HKCU64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows", $SE_REGISTRY_KEY, "Administrators", 1)
  4950.                 _GRANTADMINISTRATORSACCESS_1($SIDCU64 & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows", $SE_REGISTRY_KEY, "Administrators", 1)
  4951.             EndIf
  4952.             _CLOSEPERMISSIONRESOURCES()
  4953.             _KILLALL()
  4954.             GUICtrlSetData($LABEL1, "Matando Procesos")
  4955.             Sleep(200)
  4956.             GUICtrlSetData($PROGRESS1, 20)
  4957.             GUICtrlSetState($AVI1, 1)
  4958.             FileWrite($REPORTE, @CRLF & @CRLF & "=========================== Malwares Eliminados ===========================" & @CRLF & @CRLF)
  4959.             BORRARLISTACONOCIDA()
  4960.             REGRUNBORRARCONOCIDO()
  4961.             BORRAREXRUN()
  4962.             BORRARLOAD()
  4963.             BORRARCLAVE()
  4964.             GUICtrlSetData($PROGRESS1, 40)
  4965.             FileWrite($REPORTE, @CRLF & @CRLF & "============================= Poli-Heurística =============================" & @CRLF & @CRLF)
  4966.             HEURISTICA()
  4967.             HEURISTICA2()
  4968.             GUICtrlSetData($LABEL1, "Reparadores")
  4969.             GUICtrlSetData($PROGRESS1, 50)
  4970.             Sleep(200)
  4971.             FIXERS()
  4972.             CLEARTEMP()
  4973.             GUICtrlSetData($LABEL1, "Listando Startup")
  4974.             GUICtrlSetData($PROGRESS1, 70)
  4975.             Sleep(200)
  4976.             FileWrite($REPORTE, @CRLF & "================================== Startup ================================" & @CRLF & @CRLF)
  4977.             LISTARRUN()
  4978.             ACCESODIRECTOS()
  4979.             GUICtrlSetData($LABEL1, "Scan Suplementario")
  4980.             GUICtrlSetData($PROGRESS1, 80)
  4981.             Sleep(200)
  4982.             FileWrite($REPORTE, @CRLF & @CRLF & "============================ Scan Suplementario ===========================" & @CRLF & @CRLF)
  4983.             SUPLESCAN()
  4984.             FileWrite($REPORTE, @CRLF & @CRLF & "========================== " & @MDAY & "/" & @MON & "/" & @YEAR & " - " & @HOUR & ":" & @MIN & ":" & @SEC & " ==========================" & @CRLF & @CRLF)
  4985.             If @OSVersion = "WIN_XP" Then
  4986.                 _SMR()
  4987.             EndIf
  4988.             FileClose($REPORTE)
  4989.             GUICtrlSetState($AVI1, 0)
  4990.             GUICtrlSetData($PROGRESS1, 100)
  4991.             GUICtrlSetData($LABEL1, "Análisis Finalizado")
  4992.             GUICtrlSetState($BUTTON1, $GUI_ENABLE)
  4993.             If $JAVA32 <> "7.0.90.5" Then
  4994.                 MsgBox(0, "PoliFix Finalizado", "Se recomienda actualizar sus versiones de Java Runtime Environment." & @CRLF & @CRLF & " PoliFix Reiniciará su Ordenador")
  4995.             Else
  4996.                 MsgBox(0, "PoliFix", "Finalizado" & @CRLF & " PoliFix Reiniciará su Ordenador")
  4997.             EndIf
  4998.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "Hidden", "REG_DWORD", "0x00000002")
  4999.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideFileExt", "REG_DWORD", "0x00000001")
  5000.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "ShowSuperHidden", "REG_DWORD", "0x00000000")
  5001.             Opt("WinTitleMatchMode", 4)
  5002.             WinActivate("classname=Progman")
  5003.             Send("{F5}")
  5004.             RegWrite("HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", "PoliFix", "REG_SZ", @ScriptFullPath)
  5005.             RegWrite("HKLM\SOFTWARE\PoliFix", "PoliFix", "REG_SZ", $REPORTEPATH)
  5006.             Shutdown(6)
  5007.     EndSwitch
  5008. WEnd
  5009. Func _KILLALL()
  5010.     Local $WMIOBJECT
  5011.     $WMIOBJECT = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
  5012.     If @error Then Return SetError(1)
  5013.     For $I In $WMIOBJECT.ExecQuery("Select * from Win32_Process")
  5014.         Local $EXPATH
  5015.         $EXPATH = $I.ExecutablePath
  5016.         If ($EXPATH == "") Then ContinueLoop
  5017.         Switch $EXPATH
  5018.             Case @WindowsDir & "\System32\AudioDg.exe"
  5019.                 ContinueLoop
  5020.             Case @WindowsDir & "\System32\csrss.exe"
  5021.                 ContinueLoop
  5022.             Case @WindowsDir & "\System32\dwm.exe"
  5023.                 ContinueLoop
  5024.             Case @WindowsDir & "\System32\lsass.exe"
  5025.                 ContinueLoop
  5026.             Case @WindowsDir & "\System32\lsm.exe"
  5027.                 ContinueLoop
  5028.             Case @WindowsDir & "\System32\WBem\WmiPrvSE.exe"
  5029.                 ContinueLoop
  5030.             Case @WindowsDir & "\System32\WBem\unsecapp.exe"
  5031.                 ContinueLoop
  5032.             Case @WindowsDir & "\System32\wininit.exe"
  5033.                 ContinueLoop
  5034.             Case @WindowsDir & "\System32\winlogon.exe"
  5035.                 ContinueLoop
  5036.             Case @WindowsDir & "\System32\services.exe"
  5037.                 ContinueLoop
  5038.             Case @WindowsDir & "\System32\smss.exe"
  5039.                 ContinueLoop
  5040.             Case @WindowsDir & "\System32\svchost.exe"
  5041.                 ContinueLoop
  5042.             Case @ProgramFilesDir & "\AutoIT3\AutoIT3.exe"
  5043.                 ContinueLoop
  5044.             Case @HomeDrive & "\Program Files (x86)\AutoIt3\SciTE\SciTE.exe"
  5045.                 ContinueLoop
  5046.             Case @WindowsDir & "\SysWOW64\AudioDg.exe"
  5047.                 ContinueLoop
  5048.             Case @WindowsDir & "\SysWOW64\csrss.exe"
  5049.                 ContinueLoop
  5050.             Case @WindowsDir & "\SysWOW64\dwm.exe"
  5051.                 ContinueLoop
  5052.             Case @WindowsDir & "\SysWOW64\lsass.exe"
  5053.                 ContinueLoop
  5054.             Case @WindowsDir & "\SysWOW64\lsm.exe"
  5055.                 ContinueLoop
  5056.             Case @WindowsDir & "\SysWOW64\WBem\WmiPrvSE.exe"
  5057.                 ContinueLoop
  5058.             Case @WindowsDir & "\SysWOW64\WBem\unsecapp.exe"
  5059.                 ContinueLoop
  5060.             Case @WindowsDir & "\SysWOW64\wininit.exe"
  5061.                 ContinueLoop
  5062.             Case @WindowsDir & "\SysWOW64\winlogon.exe"
  5063.                 ContinueLoop
  5064.             Case @WindowsDir & "\SysWOW64\services.exe"
  5065.                 ContinueLoop
  5066.             Case @WindowsDir & "\SysWOW64\smss.exe"
  5067.                 ContinueLoop
  5068.             Case @WindowsDir & "\SysWOW64\svchost.exe"
  5069.                 ContinueLoop
  5070.             Case @AutoItExe
  5071.                 ContinueLoop
  5072.         EndSwitch
  5073.         If ($EXPATH = @ScriptFullPath) Then ContinueLoop
  5074.         Local $PROCESSID
  5075.         $PROCESSID = $I.ProcessID
  5076.         If ProcessExists($PROCESSID) Then
  5077.             ProcessClose($PROCESSID)
  5078.         EndIf
  5079.         If ProcessExists("explorer.exe") Then
  5080.             ProcessClose("explorer.exe")
  5081.         EndIf
  5082.     Next
  5083. EndFunc
  5084. Func _SMR()
  5085.     RegRead("HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot", "")
  5086.     If @error = 1 Then Run("REGEDIT /S " & $TOOLS & "\smr.reg")
  5087.     RegRead("HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal", "")
  5088.     If @error = 1 Then Run("REGEDIT /S " & $TOOLS & "\smr.reg")
  5089.     RegRead("HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network", "")
  5090.     If @error = 1 Then Run("REGEDIT /S " & $TOOLS & "\smr.reg")
  5091. EndFunc
  5092. Func BORRARLISTACONOCIDA()
  5093.     Local $ARR[140]
  5094.     $ARR[0] = @UserProfileDir & "\151751772.exe"
  5095.     $ARR[1] = @AppDataDir & "\mahmud.exe"
  5096.     $ARR[2] = @StartupDir & "\*.*.lnk"
  5097.     $ARR[3] = @StartupCommonDir & "\*.*.lnk"
  5098.     $ARR[4] = @AppDataCommonDir & "\local settings\temp\*.*"
  5099.     $ARR[5] = @UserProfileDir & "\Local Settings\temp\*.*"
  5100.     $ARR[6] = @AppDataDir & "\0.*.exe"
  5101.     $ARR[7] = @SystemDir & "\0.*.exe"
  5102.     $ARR[8] = @WindowsDir & "\sysnative\0.*.exe"
  5103.     $ARR[9] = @AppDataDir & "\cgs8h0.exe"
  5104.     $ARR[10] = @AppDataDir & "\h6s5ruij653.exe"
  5105.     $ARR[11] = @SystemDir & "\hnszs0.exe"
  5106.     $ARR[12] = @WindowsDir & "\sysnative\hnszs0.exe"
  5107.     $ARR[13] = @AppDataDir & "\EPUhelpers.exe"
  5108.     $ARR[14] = @AppDataDir & "\itunes_service01.exe"
  5109.     $ARR[15] = @AppDataDir & "\BSI.bund.exe"
  5110.     $ARR[16] = @AppDataDir & "\WINSnapshot_x86.exe"
  5111.     $ARR[17] = @AppDataDir & "\FSnapshot_x86.exe"
  5112.     $ARR[18] = @AppDataDir & "\InfoServices_a.exe"
  5113.     $ARR[19] = @AppDataDir & "\Game.exe"
  5114.     $ARR[20] = @AppDataDir & "\ksprskylabs1.exe"
  5115.     $ARR[21] = @AppDataDir & "\rx5iur6idx.exe"
  5116.     $ARR[22] = @AppDataDir & "\1*.exe"
  5117.     $ARR[23] = @AppDataDir & "\2*.exe"
  5118.     $ARR[24] = @AppDataDir & "\3*.exe"
  5119.     $ARR[25] = @AppDataDir & "\4*.exe"
  5120.     $ARR[26] = @AppDataDir & "\5*.exe"
  5121.     $ARR[27] = @AppDataDir & "\6*.exe"
  5122.     $ARR[28] = @AppDataDir & "\7*.exe"
  5123.     $ARR[29] = @AppDataDir & "\8*.exe"
  5124.     $ARR[30] = @AppDataDir & "\9*.exe"
  5125.     $ARR[31] = @AppDataDir & "\*.pad"
  5126.     $ARR[32] = @AppDataDir & "\*.tmp"
  5127.     $ARR[33] = @AppDataDir & "\*.com"
  5128.     $ARR[34] = @AppDataDir & "\*.pif"
  5129.     $ARR[35] = @AppDataDir & "\0.tmp"
  5130.     $ARR[36] = @AppDataDir & "\1*.tmp"
  5131.     $ARR[37] = @AppDataDir & "\2*.tmp"
  5132.     $ARR[38] = @AppDataDir & "\3*.tmp"
  5133.     $ARR[39] = @AppDataDir & "\4*.tmp"
  5134.     $ARR[40] = @AppDataDir & "\5*.tmp"
  5135.     $ARR[41] = @AppDataDir & "\6*.tmp"
  5136.     $ARR[42] = @AppDataDir & "\7*.tmp"
  5137.     $ARR[43] = @AppDataDir & "\8*.tmp"
  5138.     $ARR[44] = @AppDataDir & "\9*.tmp"
  5139.     $ARR[45] = @AppDataDir & "\0*.com"
  5140.     $ARR[46] = @AppDataDir & "\1*.com"
  5141.     $ARR[47] = @AppDataDir & "\2*.com"
  5142.     $ARR[48] = @AppDataDir & "\3*.com"
  5143.     $ARR[49] = @AppDataDir & "\4*.com"
  5144.     $ARR[50] = @AppDataDir & "\5*.com"
  5145.     $ARR[51] = @AppDataDir & "\regsrv14.exe"
  5146.     $ARR[52] = @AppDataDir & "\regsrv15.exe"
  5147.     $ARR[53] = @AppDataDir & "\Rjxkxb.exe"
  5148.     $ARR[54] = @AppDataDir & "\svchost.exe"
  5149.     $ARR[55] = @AppDataDir & "\glom0_og.exe"
  5150.     $ARR[56] = @AppDataDir & "\Suzgzy.exe"
  5151.     $ARR[57] = @AppDataDir & "\861107665389.exe"
  5152.     $ARR[58] = @AppDataDir & "\settery.exe"
  5153.     $ARR[59] = @AppDataDir & "\Defense.exe"
  5154.     $ARR[60] = @AppDataDir & "\DarK DDoSeR 5.2.exe"
  5155.     $ARR[61] = @AppDataDir & "\Rjxkxb.exe"
  5156.     $ARR[62] = @AppDataCommonDir & "\cvyqxgch.exe"
  5157.     $ARR[63] = @AppDataCommonDir & "\eaopyciusxfcybg"
  5158.     $ARR[64] = @AppDataCommonDir & "\cvyqxgch.exe"
  5159.     $ARR[65] = @StartupDir & "\ctfmon.lnk"
  5160.     $ARR[66] = @StartupCommonDir & "\ctfmon.lnk"
  5161.     $ARR[67] = @UserProfileDir & "\AppData\Local\Microsoft\Windows\4810\WSTPager.exe"
  5162.     $ARR[68] = @UserProfileDir & "\Configuración local\Application Data\Microsoft\Windows\4810\WSTPager.exe"
  5163.     $ARR[69] = @AppDataCommonDir & "\fbdjldah.exe"
  5164.     $ARR[70] = @AppDataCommonDir & "\cfujbggy.exe"
  5165.     $ARR[71] = @AppDataCommonDir & "\ktmmkpdghusgxvo"
  5166.     $ARR[72] = @UserProfileDir & "\0.*.exe"
  5167.     $ARR[73] = @AppDataDir & "\fest0r_ot.exe"
  5168.     $ARR[74] = @AppDataCommonDir & "\iqetbnuj.exe"
  5169.     $ARR[75] = @AppDataCommonDir & "\tqkrftpn.exe"
  5170.     $ARR[76] = @AppDataCommonDir & "\iqetbnuj.exe"
  5171.     $ARR[77] = @AppDataCommonDir & "\gvusyfewsdptyfy"
  5172.     $ARR[78] = @AppDataDir & "\0_0u_l.exe"
  5173.     $ARR[79] = @AppDataCommonDir & "\atzdyltr.exe"
  5174.     $ARR[80] = @AppDataCommonDir & "\fqvzozoh.exe"
  5175.     $ARR[81] = @AppDataCommonDir & "\vkaajtvc.exe"
  5176.     $ARR[82] = @AppDataCommonDir & "\qmvqliwr.exe"
  5177.     $ARR[83] = @AppDataCommonDir & "\dfrjwqcnztnqjxv"
  5178.     $ARR[84] = @AppDataCommonDir & "\qmvqliwr.exe"
  5179.     $ARR[85] = @AppDataCommonDir & "\briesxifjgxnmwq"
  5180.     $ARR[86] = @AppDataCommonDir & "\vjefbhil.exe"
  5181.     $ARR[87] = @AppDataCommonDir & "\icayilkhkxxepdx"
  5182.     $ARR[88] = @AppDataCommonDir & "\yubfjxmj.exe"
  5183.     $ARR[89] = @AppDataCommonDir & "\yoehkrgq.exe"
  5184.     $ARR[90] = @AppDataCommonDir & "\vjefbhil.exe"
  5185.     $ARR[91] = @AppDataCommonDir & "\nourbqmy.exe"
  5186.     $ARR[92] = @UserProfileDir & "\ms.exe"
  5187.     $ARR[93] = @AppDataCommonDir & "\lzrnepzc.exe"
  5188.     $ARR[94] = @AppDataCommonDir & "\fgmimzgh.exe"
  5189.     $ARR[95] = @AppDataDir & "\Gmkfxdbhply\31C934A8*FF50927CEB.exe"
  5190.     $ARR[96] = @AppDataCommonDir & "\nnwchacu.exe"
  5191.     $ARR[97] = @AppDataDir & "\local\microsoft\windows\827\d56a2ee3.exe"
  5192.     $ARR[98] = @AppDataDir & "\1 5\l3.lnk"
  5193.     $ARR[99] = @AppDataCommonDir & "\yjiqpytf.exe"
  5194.     $ARR[100] = @AppDataCommonDir & "\powntgik.exe"
  5195.     $ARR[101] = @AppDataCommonDir & "\yjiqpytf.exe"
  5196.     $ARR[102] = @TempDir & "\glom0_og.exe"
  5197.     $ARR[103] = @AppDataDir & "\aerga43ge4r.exe"
  5198.     $ARR[104] = @AppDataCommonDir & "\eycmeqqi.exe"
  5199.     $ARR[105] = @AppDataCommonDir & "\uglbyiqg.exe"
  5200.     $ARR[106] = @AppDataCommonDir & "\udhynjgn.exe"
  5201.     $ARR[107] = @AppDataCommonDir & "\lsotgnrt.exe"
  5202.     $ARR[108] = @AppDataCommonDir & "\fnaaqfsi.exe"
  5203.     $ARR[109] = @AppDataCommonDir & "\eycmeqqi.exe"
  5204.     $ARR[110] = @AppDataCommonDir & "\frofvmxd.exe"
  5205.     $ARR[111] = @AppDataCommonDir & "\sokygudzqglxqit"
  5206.     $ARR[112] = @AppDataCommonDir & "\yrjvuljj.exe"
  5207.     $ARR[113] = @AppDataCommonDir & "\fgnqpeaqbjvnfyl"
  5208.     $ARR[114] = @AppDataCommonDir & "\kubwxzof.exe"
  5209.     $ARR[115] = @AppDataCommonDir & "\xnxpedubiekqstg"
  5210.     $ARR[116] = @AppDataCommonDir & "\lhnezdsr.exe"
  5211.     $ARR[117] = @AppDataCommonDir & "\vkeqrngo.exe"
  5212.     $ARR[118] = @AppDataCommonDir & "\mhejcrikskwklnt"
  5213.     $ARR[119] = @AppDataCommonDir & "\vkeqrngo.exe"
  5214.     $ARR[120] = @AppDataCommonDir & "\blkplxeh.exe"
  5215.     $ARR[121] = @AppDataCommonDir & "\hlyqfinepzknpwbpomhy.exe"
  5216.     $ARR[122] = @TempDir & "\~!#5D7D.tmp"
  5217.     $ARR[123] = @AppDataCommonDir & "\kyfrijymvrfranyhlftt.exe"
  5218.     $ARR[124] = @AppDataCommonDir & "\kyfrijymvrfranyhlftt.exe"
  5219.     $ARR[125] = @AppDataCommonDir & "\bahdsher.exe"
  5220.     $ARR[126] = @AppDataCommonDir & "\oxdwdlknsznbbpq"
  5221.     $ARR[127] = @AppDataCommonDir & "\tedcurhg.exe"
  5222.     $ARR[128] = @AppDataCommonDir & "\mdhacnlg.exe"
  5223.     $ARR[129] = @AppDataCommonDir & "\bahdsher.exe"
  5224.     $ARR[130] = @TempDir & "\cs8v0k.exe"
  5225.     $ARR[131] = @AppDataCommonDir & "\fkvddwvolwwkpucspaxx.exe"
  5226.     $ARR[132] = @AppDataCommonDir & "\whrwoaxksfbahjq"
  5227.     $ARR[133] = @WindowsDir & "\fkvddwvolwwkpucspaxx.exe"
  5228.     $ARR[134] = @AppDataCommonDir & "\fkvddwvolwwkpucspaxx.exe"
  5229.     $ARR[135] = @WindowsDir & "\explorer_new.exe"
  5230.     $ARR[136] = @AppDataDir & "\WinrarArchiver.exe"
  5231.     $ARR[137] = @AppDataDir & "\Apple_Store.exe"
  5232.     $ARR[138] = @SystemDir & "\A75F75CF6C717C5C5E7F.exe"
  5233.     $ARR[139] = @WindowsDir & "\btbqpztqpsjsprxezxva.exe"
  5234.     For $I = 0 To 139
  5235.         BORRAR($ARR[$I])
  5236.     Next
  5237. EndFunc
  5238. Func BORRAR($VAR)
  5239.     Local $DIR, $SEARCH
  5240.     $DIR = DIR($VAR)
  5241.     If FileExists($VAR) Then
  5242.         $SEARCH = FileFindFirstFile($VAR)
  5243.         $MYDIR = DIR($VAR)
  5244.         While 1
  5245.             Local $FILE = FileFindNextFile($SEARCH)
  5246.             If @error Then ExitLoop
  5247.             If FileDelete($MYDIR & $FILE) = 1 Then
  5248.                 FileWrite($REPORTE, $DIR & $FILE & @CRLF)
  5249.             Else
  5250.                 FileWrite($REPORTE, $DIR & $FILE & " No se pudo Borrar" & @CRLF)
  5251.             EndIf
  5252.         WEnd
  5253.     EndIf
  5254.     FileClose($SEARCH)
  5255. EndFunc
  5256. Func DIR($PATH)
  5257.     Local $DELIMITER = "\"
  5258.     $ARRAY = StringSplit($PATH, $DELIMITER)
  5259.     $LEN = UBound($ARRAY) - 1
  5260.     $NUMERO = $LEN - 1
  5261.     $NUM = StringInStr($PATH, $DELIMITER, 0, $NUMERO)
  5262.     $DIR = StringMid($PATH, 1, $NUM)
  5263.     Return $DIR
  5264. EndFunc
  5265. Func REGRUNBORRARCONOCIDO()
  5266.     Local $AARRAY[6]
  5267.     $AARRAY[0] = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
  5268.     $AARRAY[1] = "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
  5269.     $AARRAY[2] = $SIDCU & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
  5270.     $AARRAY[3] = "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
  5271.     $AARRAY[4] = "HKCU64\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
  5272.     $AARRAY[5] = $SIDCU64 & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
  5273.     Local $ARRAY[44]
  5274.     $ARRAY[0] = "151751772"
  5275.     $ARRAY[1] = "0.728168065421346"
  5276.     $ARRAY[2] = "avupdate"
  5277.     $ARRAY[3] = "update"
  5278.     $ARRAY[4] = "VX2bt1oYNKCLnkO"
  5279.     $ARRAY[5] = "Y8VtM54wf363aAt"
  5280.     $ARRAY[6] = "ZZChw4ZycSefR9n"
  5281.     $ARRAY[7] = "bAJSbCvnhbErK13"
  5282.     $ARRAY[8] = "XWoMXqxn2va68jV"
  5283.     $ARRAY[9] = "Microsoft"
  5284.     $ARRAY[10] = "4w1IjgBXP4HGv63"
  5285.     $ARRAY[11] = "Yd92ZRE9ASh2qtG"
  5286.     $ARRAY[12] = "cvyqxgchalhcsed"
  5287.     $ARRAY[13] = "WSTPager"
  5288.     $ARRAY[14] = "fbdjldahmwzgibl"
  5289.     $ARRAY[15] = "cfujbggybbqceep"
  5290.     $ARRAY[16] = "iqetbnujavrtsmv"
  5291.     $ARRAY[17] = "atzdyltrtbixfzg"
  5292.     $ARRAY[18] = "fqvzozohydyifmg"
  5293.     $ARRAY[19] = "vkaajtvcghnekgy"
  5294.     $ARRAY[20] = "qmvqliwrskienih"
  5295.     $ARRAY[21] = "vjefbhildsssxoj"
  5296.     $ARRAY[22] = "A8FF5092"
  5297.     $ARRAY[23] = "nnwchacufhghgex"
  5298.     $ARRAY[24] = "powntgikmewcfes"
  5299.     $ARRAY[25] = "yjiqpytfsoevhfw"
  5300.     $ARRAY[26] = "XZqIqa15281iwWR"
  5301.     $ARRAY[27] = "eycmeqqicuvvagv"
  5302.     $ARRAY[28] = "kubwxzofbvfewew"
  5303.     $ARRAY[29] = "vkeqrngopbnypyj"
  5304.     $ARRAY[30] = "kyfrijymvrfrany"
  5305.     $ARRAY[31] = "fkvddwvolwwkpuc"
  5306.     $ARRAY[32] = "dlxVLNiTSbbfN8U"
  5307.     $ARRAY[33] = "btbqpztqpsjsprx"
  5308.     $ARRAY[34] = "Miuwkyk"
  5309.     $ARRAY[35] = "XWoMXqxn2va68jV"
  5310.     $ARRAY[36] = "bahdsherluilfec"
  5311.     $ARRAY[37] = "bAJSbCvnhbErK13"
  5312.     $ARRAY[38] = "wincredprovider"
  5313.     $ARRAY[39] = "qutliipsnaybrll"
  5314.     $ARRAY[40] = "wcdmyjcjzpmqmex"
  5315.     $ARRAY[41] = "cncrfrzjcczonzc"
  5316.     $ARRAY[42] = "wincredprovider"
  5317.     $ARRAY[43] = "lwlmlsinoumzcon"
  5318.     Global $REPORTE = FileOpen(@HomeDrive & "\PoliFix.txt", 1)
  5319.     For $I = 0 To 5
  5320.         For $A = 0 To 43
  5321.             If _REGISTRYEXIST($AARRAY[$I], $ARRAY[$A]) Then
  5322.                 If RegDelete($AARRAY[$I], $ARRAY[$A]) Then
  5323.                     FileWrite($REPORTE, $AARRAY[$I] & " | " & $ARRAY[$A] & @CRLF)
  5324.                 Else
  5325.                     FileWrite($REPORTE, $AARRAY[$I] & " | " & $ARRAY[$A] & " No se pudo Borrar" & @CRLF)
  5326.                 EndIf
  5327.             Else
  5328.             EndIf
  5329.         Next
  5330.     Next
  5331. EndFunc
  5332. Func _REGISTRYEXIST($SKEYNAME, $SVALUENAME)
  5333.     RegRead($SKEYNAME, $SVALUENAME)
  5334.     Return @error = 0
  5335. EndFunc
  5336. Func BORRAREXRUN()
  5337.     Local $AARRAY[6]
  5338.     $AARRAY[0] = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\explorer\Run"
  5339.     $AARRAY[1] = "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\explorer\Run"
  5340.     $AARRAY[2] = $SIDCU & "\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\explorer\Run"
  5341.     $AARRAY[3] = "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\explorer\Run"
  5342.     $AARRAY[4] = "HKCU64\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\explorer\Run"
  5343.     $AARRAY[5] = $SIDCU64 & "\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\explorer\Run"
  5344.     For $A = 0 To 5
  5345.         For $I = 1 To 100
  5346.             Local $VAR = RegEnumVal($AARRAY[$A], $I)
  5347.             If @error <> 0 Then ExitLoop
  5348.             If _REGISTRYEXIST($AARRAY[$A], $VAR) Then
  5349.                 If RegDelete($AARRAY[$A], $VAR) Then
  5350.                     FileWrite($REPORTE, $AARRAY[$A] & " | " & $VAR & @CRLF)
  5351.                 Else
  5352.                     FileWrite($REPORTE, $AARRAY[$A] & " | " & $VAR & " No se pudo Borrar" & @CRLF)
  5353.                 EndIf
  5354.             EndIf
  5355.         Next
  5356.     Next
  5357. EndFunc
  5358. Func BORRARLOAD()
  5359.     Local $AARRAY[6]
  5360.     $AARRAY[0] = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows"
  5361.     $AARRAY[1] = "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows"
  5362.     $AARRAY[2] = $SIDCU & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows"
  5363.     $AARRAY[3] = "HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows"
  5364.     $AARRAY[4] = "HKCU64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows"
  5365.     $AARRAY[5] = $SIDCU64 & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows"
  5366.     For $A = 0 To 5
  5367.         $LOAD = "load"
  5368.         If _REGISTRYEXIST($AARRAY[$A], $LOAD) Then
  5369.             If RegDelete($AARRAY[$A], $LOAD) Then
  5370.                 FileWrite($REPORTE, $AARRAY[$A] & " | " & $LOAD & @CRLF)
  5371.             Else
  5372.                 FileWrite($REPORTE, $AARRAY[$A] & " | " & $LOAD & " No se pudo Borrar" & @CRLF)
  5373.             EndIf
  5374.         EndIf
  5375.     Next
  5376. EndFunc
  5377. Func BORRARCLAVE()
  5378.     Local $AARRAY[22]
  5379.     $AARRAY[0] = "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{yMPkXDQf-f1lS-wupv-QNPd-95fViDQYngy1}"
  5380.     $AARRAY[1] = "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{zO6GMBsG-P0Lu-m6zG-Rn2O-mEvWgcvpFNqQ}"
  5381.     $AARRAY[2] = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msconfig.exe"
  5382.     $AARRAY[3] = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe"
  5383.     $AARRAY[4] = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe"
  5384.     $AARRAY[5] = "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msconfig.exe"
  5385.     $AARRAY[6] = "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe"
  5386.     $AARRAY[7] = "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe"
  5387.     $AARRAY[8] = $SIDCU & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msconfig.exe"
  5388.     $AARRAY[9] = $SIDCU & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe"
  5389.     $AARRAY[10] = $SIDCU & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe"
  5390.     $AARRAY[11] = "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{yMPkXDQf-f1lS-wupv-QNPd-95fViDQYngy1}"
  5391.     $AARRAY[12] = "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{zO6GMBsG-P0Lu-m6zG-Rn2O-mEvWgcvpFNqQ}"
  5392.     $AARRAY[13] = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msconfig.exe"
  5393.     $AARRAY[14] = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe"
  5394.     $AARRAY[15] = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe"
  5395.     $AARRAY[16] = "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msconfig.exe"
  5396.     $AARRAY[17] = "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe"
  5397.     $AARRAY[18] = "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe"
  5398.     $AARRAY[19] = $SIDCU64 & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msconfig.exe"
  5399.     $AARRAY[20] = $SIDCU64 & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\regedit.exe"
  5400.     $AARRAY[21] = $SIDCU64 & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe"
  5401.     For $A = 0 To 21
  5402.         $DELKEY = RegDelete($AARRAY[$A])
  5403.         Select
  5404.             Case $DELKEY = 1
  5405.                 FileWrite($REPORTE, $AARRAY[$A] & @CRLF)
  5406.             Case $DELKEY = 0
  5407.             Case $DELKEY = 2
  5408.                 FileWrite($REPORTE, $AARRAY[$A] & " No se pudo Borrar" & @CRLF)
  5409.         EndSelect
  5410.     Next
  5411. EndFunc
  5412. Func FIXERS()
  5413.     Select
  5414.         Case @OSArch = "X86"
  5415.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", 0)
  5416.             RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", 0)
  5417.             RegWrite("HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", 0)
  5418.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableRegistryTools", "REG_DWORD", 0)
  5419.             RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableRegistryTools", "REG_DWORD", 0)
  5420.             RegWrite("HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableRegistryTools", "REG_DWORD", 0)
  5421.             RegWrite($SIDCU & "\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\System", "DisableRegedit", "REG_DWORD", 0)
  5422.             RegWrite("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\System", "DisableRegedit", "REG_DWORD", 0)
  5423.             RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\System", "DisableRegedit", "REG_DWORD", 0)
  5424.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideIcons", "REG_DWORD", 0)
  5425.             RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideIcons", "REG_DWORD", 0)
  5426.             RegWrite("HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideIcons", "REG_DWORD", 0)
  5427.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoDesktop", "REG_DWORD", 0)
  5428.             RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoDesktop", "REG_DWORD", 0)
  5429.             RegWrite("HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoDesktop", "REG_DWORD", 0)
  5430.             RegWrite($SIDCU & "\Software\Microsoft\Windows\CurrentVersion\Explorer", "NoDesktop", "REG_DWORD", 0)
  5431.             RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer", "NoDesktop", "REG_DWORD", 0)
  5432.             RegWrite("HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer", "NoDesktop", "REG_DWORD", 0)
  5433.             RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell", "REG_SZ", "Explorer.exe")
  5434.             RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Userinit", "REG_SZ", @WindowsDir & "\system32\userinit.exe")
  5435.             RegDelete("HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell")
  5436.             RegDelete("HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Userinit")
  5437.             RegDelete($SIDCU & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell")
  5438.             RegDelete($SIDCU & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Userinit")
  5439.         Case @OSArch = "X64"
  5440.             RegWrite($SIDCU64 & "\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", 0)
  5441.             RegWrite("HKCU64\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", 0)
  5442.             RegWrite("HKLM64\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", 0)
  5443.             RegWrite($SIDCU64 & "\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableRegistryTools", "REG_DWORD", 0)
  5444.             RegWrite("HKCU64\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableRegistryTools", "REG_DWORD", 0)
  5445.             RegWrite("HKLM64\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableRegistryTools", "REG_DWORD", 0)
  5446.             RegWrite($SIDCU64 & "\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\System", "DisableRegedit", "REG_DWORD", 0)
  5447.             RegWrite("HKCU64\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\System", "DisableRegedit", "REG_DWORD", 0)
  5448.             RegWrite("HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\System", "DisableRegedit", "REG_DWORD", 0)
  5449.             RegWrite($SIDCU64 & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideIcons", "REG_DWORD", 0)
  5450.             RegWrite("HKCU64\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideIcons", "REG_DWORD", 0)
  5451.             RegWrite("HKLM64\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideIcons", "REG_DWORD", 0)
  5452.             RegWrite($SIDCU64 & "\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoDesktop", "REG_DWORD", 0)
  5453.             RegWrite("HKCU64\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoDesktop", "REG_DWORD", 0)
  5454.             RegWrite("HKLM64\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoDesktop", "REG_DWORD", 0)
  5455.             RegWrite($SIDCU64 & "\Software\Microsoft\Windows\CurrentVersion\Explorer", "NoDesktop", "REG_DWORD", 0)
  5456.             RegWrite("HKCU64\Software\Microsoft\Windows\CurrentVersion\Explorer", "NoDesktop", "REG_DWORD", 0)
  5457.             RegWrite("HKLM64\Software\Microsoft\Windows\CurrentVersion\Explorer", "NoDesktop", "REG_DWORD", 0)
  5458.             RegWrite("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell", "REG_SZ", "Explorer.exe")
  5459.             RegWrite("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Userinit", "REG_SZ", @WindowsDir & "\system32\userinit.exe")
  5460.             RegDelete("HKCU64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell")
  5461.             RegDelete("HKCU64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Userinit")
  5462.             RegDelete($SIDCU64 & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell")
  5463.             RegDelete($SIDCU64 & "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Userinit")
  5464.     EndSelect
  5465. EndFunc
  5466. Func LISTARRUN()
  5467.     Select
  5468.         Case @OSArch = "X64"
  5469.             Local $CLAVE[3]
  5470.             For $A = 0 To 2
  5471.                 $CLAVE[0] = "HKLM64\Software\Microsoft\Windows\CurrentVersion\Run"
  5472.                 $CLAVE[1] = "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
  5473.                 $CLAVE[2] = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  5474.                 $INSTANCIA = 0
  5475.                 While 1
  5476.                     $INSTANCIA += 1
  5477.                     $VALORES = RegEnumVal($CLAVE[$A], $INSTANCIA)
  5478.                     If @error <> 0 Then
  5479.                         ExitLoop
  5480.                     Else
  5481.                         $VALOR = RegRead($CLAVE[$A], $VALORES)
  5482.                         $CLAVEREG = StringSplit($CLAVE[$A], "\")
  5483.                         FileWrite($REPORTE, $CLAVEREG[1] & " - Run: " & "[" & $VALORES & "] - " & $VALOR & @CRLF)
  5484.                     EndIf
  5485.                 WEnd
  5486.             Next
  5487.         Case @OSArch = "X86"
  5488.             Local $CLAVE[2]
  5489.             For $A = 0 To 1
  5490.                 $CLAVE[0] = "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
  5491.                 $CLAVE[1] = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  5492.                 $INSTANCIA = 0
  5493.                 While 1
  5494.                     $INSTANCIA += 1
  5495.                     $VALORES = RegEnumVal($CLAVE[$A], $INSTANCIA)
  5496.                     If @error <> 0 Then
  5497.                         ExitLoop
  5498.                     Else
  5499.                         $VALOR = RegRead($CLAVE[$A], $VALORES)
  5500.                         $CLAVEREG = StringSplit($CLAVE[$A], "\")
  5501.                         FileWrite($REPORTE, $CLAVEREG[1] & " - Run: " & "[" & $VALORES & "] - " & $VALOR & @CRLF)
  5502.                     EndIf
  5503.                 WEnd
  5504.             Next
  5505.     EndSelect
  5506. EndFunc
  5507. Func ACCESODIRECTOS()
  5508.     Local $RUTA[2]
  5509.     $RUTA[0] = @StartupDir & "\*.lnk"
  5510.     $RUTA[1] = @StartupCommonDir & "\*.lnk"
  5511.     For $I = 0 To 1
  5512.         Local $SEARCH = FileFindFirstFile($RUTA[$I])
  5513.         $PATH = DIR($RUTA[$I])
  5514.         While 1
  5515.             Local $FILE = FileFindNextFile($SEARCH)
  5516.             If @error Then ExitLoop
  5517.             Local $ADETAILS = FileGetShortcut($PATH & $FILE)
  5518.             FileWrite($REPORTE, "Startup: " & $PATH & $FILE & " = " & $ADETAILS[0] & @CRLF)
  5519.         WEnd
  5520.     Next
  5521.     FileClose($SEARCH)
  5522. EndFunc
  5523. Func HEURISTICA()
  5524.     Select
  5525.         Case @OSArch = "X64"
  5526.             APPDATACOMMODIR64()
  5527.             APPDATADIR64()
  5528.         Case @OSArch = "X86"
  5529.             APPDATACOMMODIR86()
  5530.             APPDATADIR86()
  5531.     EndSelect
  5532. EndFunc
  5533. Func APPDATACOMMODIR64()
  5534.     Local $SZDRIVE, $SZDIR, $SZFNAME, $SZEXT
  5535.     Local $CLAVEREG[3]
  5536.     $CLAVEREG[0] = "HKLM64\Software\Microsoft\Windows\CurrentVersion\Run"
  5537.     $CLAVEREG[1] = "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
  5538.     $CLAVEREG[2] = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  5539.     For $A = 0 To 2
  5540.         For $I = 1 To 100
  5541.             Local $NAME = RegEnumVal($CLAVEREG[$A], $I)
  5542.             Local $READPATH = RegRead($CLAVEREG[$A], $NAME)
  5543.             If @error <> 0 Then ExitLoop
  5544.             $IFAPP = StringInStr($READPATH, @AppDataCommonDir)
  5545.             If $IFAPP > 0 Then
  5546.                 _PathSplit($READPATH, $SZDRIVE, $SZDIR, $SZFNAME, $SZEXT)
  5547.                 $FILETODEL = @AppDataCommonDir & "\" & $SZFNAME & $SZEXT
  5548.                 If FileExists($FILETODEL) Then
  5549.                     If FileMove($FILETODEL, $CUARENTENA, 1) Then
  5550.                         FileWrite($REPORTE, $FILETODEL & @CRLF)
  5551.                     Else
  5552.                         FileWrite($REPORTE, $FILETODEL & " No se pudo Mover" & @CRLF)
  5553.                     EndIf
  5554.                     If RegDelete($CLAVEREG[$A], $NAME) Then
  5555.                         FileWrite($REPORTE, $CLAVEREG[$A] & " | " & $NAME & @CRLF)
  5556.                     Else
  5557.                         FileWrite($REPORTE, $CLAVEREG[$A] & " | " & $NAME & " No se pudo Borrar" & @CRLF)
  5558.                     EndIf
  5559.                 EndIf
  5560.             EndIf
  5561.         Next
  5562.     Next
  5563. EndFunc
  5564. Func APPDATADIR64()
  5565.     Local $SZDRIVE, $SZDIR, $SZFNAME, $SZEXT
  5566.     Local $CLAVEREG[3]
  5567.     $CLAVEREG[0] = "HKLM64\Software\Microsoft\Windows\CurrentVersion\Run"
  5568.     $CLAVEREG[1] = "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
  5569.     $CLAVEREG[2] = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  5570.     For $A = 0 To 2
  5571.         For $I = 1 To 100
  5572.             Local $NAME = RegEnumVal($CLAVEREG[$A], $I)
  5573.             Local $READPATH = RegRead($CLAVEREG[$A], $NAME)
  5574.             If @error <> 0 Then ExitLoop
  5575.             $IFAPP = StringInStr($READPATH, @AppDataDir)
  5576.             If $IFAPP > 0 Then
  5577.                 _PathSplit($READPATH, $SZDRIVE, $SZDIR, $SZFNAME, $SZEXT)
  5578.                 $FILETODEL = @AppDataDir & "\" & $SZFNAME & $SZEXT
  5579.                 If FileExists($FILETODEL) Then
  5580.                     If FileMove($FILETODEL, $CUARENTENA, 1) Then
  5581.                         FileWrite($REPORTE, $FILETODEL & @CRLF)
  5582.                     Else
  5583.                         FileWrite($REPORTE, $FILETODEL & " No se pudo Mover" & @CRLF)
  5584.                     EndIf
  5585.                     If RegDelete($CLAVEREG[$A], $NAME) Then
  5586.                         FileWrite($REPORTE, $CLAVEREG[$A] & " | " & $NAME & @CRLF)
  5587.                     Else
  5588.                         FileWrite($REPORTE, $CLAVEREG[$A] & " | " & $NAME & " No se pudo Borrar" & @CRLF)
  5589.                     EndIf
  5590.                 EndIf
  5591.             EndIf
  5592.         Next
  5593.     Next
  5594. EndFunc
  5595. Func APPDATACOMMODIR86()
  5596.     Local $SZDRIVE, $SZDIR, $SZFNAME, $SZEXT
  5597.     Local $CLAVEREG[2]
  5598.     $CLAVEREG[0] = "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
  5599.     $CLAVEREG[1] = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  5600.     For $A = 0 To 1
  5601.         For $I = 1 To 100
  5602.             Local $NAME = RegEnumVal($CLAVEREG[$A], $I)
  5603.             Local $READPATH = RegRead($CLAVEREG[$A], $NAME)
  5604.             If @error <> 0 Then ExitLoop
  5605.             $IFAPP = StringInStr($READPATH, @AppDataCommonDir)
  5606.             If $IFAPP > 0 Then
  5607.                 _PathSplit($READPATH, $SZDRIVE, $SZDIR, $SZFNAME, $SZEXT)
  5608.                 $FILETODEL = @AppDataCommonDir & "\" & $SZFNAME & $SZEXT
  5609.                 If FileExists($FILETODEL) Then
  5610.                     If FileMove($FILETODEL, $CUARENTENA, 1) Then
  5611.                         FileWrite($REPORTE, $FILETODEL & @CRLF)
  5612.                     Else
  5613.                         FileWrite($REPORTE, $FILETODEL & " No se pudo Mover" & @CRLF)
  5614.                     EndIf
  5615.                     If RegDelete($CLAVEREG[$A], $NAME) Then
  5616.                         FileWrite($REPORTE, $CLAVEREG[$A] & " | " & $NAME & @CRLF)
  5617.                     Else
  5618.                         FileWrite($REPORTE, $CLAVEREG[$A] & " | " & $NAME & " No se pudo Borrar" & @CRLF)
  5619.                     EndIf
  5620.                 EndIf
  5621.             EndIf
  5622.         Next
  5623.     Next
  5624. EndFunc
  5625. Func APPDATADIR86()
  5626.     Local $SZDRIVE, $SZDIR, $SZFNAME, $SZEXT
  5627.     Local $CLAVEREG[2]
  5628.     $CLAVEREG[0] = "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
  5629.     $CLAVEREG[1] = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  5630.     For $A = 0 To 1
  5631.         For $I = 1 To 100
  5632.             Local $NAME = RegEnumVal($CLAVEREG[$A], $I)
  5633.             Local $READPATH = RegRead($CLAVEREG[$A], $NAME)
  5634.             If @error <> 0 Then ExitLoop
  5635.             $IFAPP = StringInStr($READPATH, @AppDataDir)
  5636.             If $IFAPP > 0 Then
  5637.                 _PathSplit($READPATH, $SZDRIVE, $SZDIR, $SZFNAME, $SZEXT)
  5638.                 $FILETODEL = @AppDataDir & "\" & $SZFNAME & $SZEXT
  5639.                 If FileExists($FILETODEL) Then
  5640.                     If FileMove($FILETODEL, $CUARENTENA, 1) Then
  5641.                         FileWrite($REPORTE, $FILETODEL & @CRLF)
  5642.                     Else
  5643.                         FileWrite($REPORTE, $FILETODEL & " No se pudo Mover" & @CRLF)
  5644.                     EndIf
  5645.                     If RegDelete($CLAVEREG[$A], $NAME) Then
  5646.                         FileWrite($REPORTE, $CLAVEREG[$A] & " | " & $NAME & @CRLF)
  5647.                     Else
  5648.                         FileWrite($REPORTE, $CLAVEREG[$A] & " | " & $NAME & " No se pudo Borrar" & @CRLF)
  5649.                     EndIf
  5650.                 EndIf
  5651.             EndIf
  5652.         Next
  5653.     Next
  5654. EndFunc
  5655. Func PUNTORESTAURACION($DESCRIPCION)
  5656.     If _SR_CREATERESTOREPOINT($DESCRIPCION) Then
  5657.         FileWrite($REPORTE, "Punto de Restauracion: " & $DESCRIPCION & @CRLF)
  5658.     EndIf
  5659. EndFunc
  5660. Func HEURISTICA2()
  5661.     Select
  5662.         Case @OSArch = "X64"
  5663.             HEURISTICA642()
  5664.         Case @OSArch = "X86"
  5665.             HEURISTICA862()
  5666.     EndSelect
  5667. EndFunc
  5668. FileClose($REPORTE)
  5669. Func HEURISTICA642()
  5670.     Local $CLAVEREG[3]
  5671.     $CLAVEREG[0] = "HKLM64\Software\Microsoft\Windows\CurrentVersion\Run"
  5672.     $CLAVEREG[1] = "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
  5673.     $CLAVEREG[2] = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  5674.     For $A = 0 To 2
  5675.         For $I = 1 To 100
  5676.             Local $NAME = RegEnumVal($CLAVEREG[$A], $I)
  5677.             Local $READPATH = RegRead($CLAVEREG[$A], $NAME)
  5678.             If @error <> 0 Then ExitLoop
  5679.             $IFAPP = StringInStr($READPATH, "\Microsoft\Windows\")
  5680.             If $IFAPP > 0 Then
  5681.                 $FILETODEL = StringReplace($READPATH, '"', "")
  5682.                 If FileExists($FILETODEL) Then
  5683.                     If FileMove($FILETODEL, $CUARENTENA, 1) Then
  5684.                         FileWrite($REPORTE, $FILETODEL & @CRLF)
  5685.                     Else
  5686.                         FileWrite($REPORTE, $FILETODEL & " No se pudo Mover" & @CRLF)
  5687.                     EndIf
  5688.                     If RegDelete($CLAVEREG[$A], $NAME) Then
  5689.                         FileWrite($REPORTE, $CLAVEREG[$A] & " | " & $NAME & @CRLF)
  5690.                     Else
  5691.                         FileWrite($REPORTE, $CLAVEREG[$A] & " | " & $NAME & " No se pudo Borrar" & @CRLF)
  5692.                     EndIf
  5693.                 EndIf
  5694.             EndIf
  5695.         Next
  5696.     Next
  5697. EndFunc
  5698. Func HEURISTICA862()
  5699.     Local $CLAVEREG[2]
  5700.     $CLAVEREG[0] = "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
  5701.     $CLAVEREG[1] = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  5702.     For $A = 0 To 1
  5703.         For $I = 1 To 100
  5704.             Local $NAME = RegEnumVal($CLAVEREG[$A], $I)
  5705.             Local $READPATH = RegRead($CLAVEREG[$A], $NAME)
  5706.             If @error <> 0 Then ExitLoop
  5707.             $IFAPP = StringInStr($READPATH, "\Microsoft\Windows\")
  5708.             If $IFAPP > 0 Then
  5709.                 $FILETODEL = StringReplace($READPATH, '"', "")
  5710.                 If FileExists($FILETODEL) Then
  5711.                     If FileMove($FILETODEL, $CUARENTENA, 1) Then
  5712.                         FileWrite($REPORTE, $FILETODEL & @CRLF)
  5713.                     Else
  5714.                         FileWrite($REPORTE, $FILETODEL & " No se pudo Mover" & @CRLF)
  5715.                     EndIf
  5716.                     If RegDelete($CLAVEREG[$A], $NAME) Then
  5717.                         FileWrite($REPORTE, $CLAVEREG[$A] & " | " & $NAME & @CRLF)
  5718.                     Else
  5719.                         FileWrite($REPORTE, $CLAVEREG[$A] & " | " & $NAME & " No se pudo Borrar" & @CRLF)
  5720.                     EndIf
  5721.                 EndIf
  5722.             EndIf
  5723.         Next
  5724.     Next
  5725. EndFunc
  5726. Func CLEARTEMP()
  5727.     Local $FILELIST = _FileListToArray(@TempDir)
  5728.     If @error = 1 Then
  5729.     EndIf
  5730.     If @error = 4 Then
  5731.     EndIf
  5732.     Local $LEN = UBound($FILELIST) - 1
  5733.     For $I = 1 To $LEN
  5734.         If FileDelete(@TempDir & "\" & $FILELIST[$I]) Then
  5735.         Else
  5736.             DirRemove(@TempDir & "\" & $FILELIST[$I], 1)
  5737.         EndIf
  5738.     Next
  5739. EndFunc
  5740. Func JAVACACHE()
  5741.     Select
  5742.         Case @OSVersion = "WIN_7"
  5743.             $RUTA1 = @UserProfileDir & "\AppData\LocalLow\Sun\Java\Deployment\cache\6.0"
  5744.             DirRemove($RUTA1, 1)
  5745.         Case @OSVersion = "WIN_VISTA"
  5746.             $RUTA1 = @UserProfileDir & "\AppData\LocalLow\Sun\Java\Deployment\cache\6.0"
  5747.             DirRemove($RUTA1, 1)
  5748.         Case @OSVersion = "WIN_XP"
  5749.             $RUTA1 = @AppDataDir & "\Sun\Java\Deployment\cache\6.0"
  5750.             DirRemove($RUTA1, 1)
  5751.     EndSelect
  5752. EndFunc
  5753. Func SUPLESCAN()
  5754.     Local $RUTA[3]
  5755.     $RUTA[0] = @AppDataCommonDir
  5756.     $RUTA[1] = @AppDataDir
  5757.     $RUTA[2] = @TempDir
  5758.     For $Z = 0 To 2
  5759.         Local $FILELIST = _FileListToArray($RUTA[$Z])
  5760.         If @error = 1 Then
  5761.         EndIf
  5762.         If @error = 4 Then
  5763.         EndIf
  5764.         Local $LEN = UBound($FILELIST) - 1
  5765.         For $W = 1 To $LEN
  5766.             FileWrite($REPORTE, $RUTA[$Z] & "\" & $FILELIST[$W] & @CRLF)
  5767.         Next
  5768.     Next
  5769. EndFunc
  5770. Func _AV()
  5771.     Local $AVNAME
  5772.     If @OSVersion = "WIN_XP" Then
  5773.         $OWMI = ObjGet("winmgmts:\\localhost\root\SecurityCenter")
  5774.     Else
  5775.         $OWMI = ObjGet("winmgmts:\\localhost\root\SecurityCenter2")
  5776.     EndIf
  5777.     $AVNAME = ""
  5778.     $COLITEMS = $OWMI.ExecQuery("Select * from AntiVirusProduct")
  5779.     For $OBJANTIVIRUSPRODUCT In $COLITEMS
  5780.         $AVNAME = $AVNAME & "Antivirus: " & $OBJANTIVIRUSPRODUCT.displayName & @CRLF
  5781.     Next
  5782.     $COLITEMS = $OWMI.ExecQuery("Select * from AntiSpywareProduct")
  5783.     For $OBJANTIVIRUSPRODUCT In $COLITEMS
  5784.         $AVNAME = $AVNAME & "AntiSpyware: " & $OBJANTIVIRUSPRODUCT.displayName & @CRLF
  5785.     Next
  5786.     $COLITEMS = $OWMI.ExecQuery("Select * from FirewallProduct")
  5787.     For $OBJANTIVIRUSPRODUCT In $COLITEMS
  5788.         $AVNAME = $AVNAME & "Firewall: " & $OBJANTIVIRUSPRODUCT.displayName & @CRLF
  5789.     Next
  5790.     If $AVNAME = False Then
  5791.         FileWrite($REPORTE, "Programas De Seguridad No Detectados" & @CRLF)
  5792.     Else
  5793.         FileWrite($REPORTE, $AVNAME)
  5794.     EndIf
  5795. EndFunc
  5796. Func _GRANTADMINISTRATORSACCESS_1($ONAME, $_SE_OBJECT_TYPE = $SE_FILE_OBJECT, $SETOWNER = "Administrators", $RECURSE = 1)
  5797.     Local $APERM[1][3]
  5798.     $APERM[0][0] = "Administrators"
  5799.     $APERM[0][1] = 1
  5800.     $APERM[0][2] = $GENERIC_ALL
  5801.     Return _SETOBJECTPERMISSIONS($ONAME, $APERM, $_SE_OBJECT_TYPE, $SETOWNER, 0, $RECURSE)
  5802. EndFunc
  5803. Func GUI2()
  5804.     $HGUI2 = GUICreate("Acerca de Polifix", 460, 200, -1, -1)
  5805.     GUISetBkColor(16777215)
  5806.     $LABELLINK = GUICtrlCreateLabel("www.ForoSpyware.com", 165, 130, 200, 30)
  5807.     GUICtrlSetFont(-1, 12, 100, 4, "Arial Narrow")
  5808.     GUICtrlSetColor(-1, 0)
  5809.     $LABELDISCLAIMER = GUICtrlCreateLabel('PoliFix es una herramienta propiedad de InfoSpyware.com, desarrollada para detectar y eliminar de forma automática el "Virus de la Policía" en todas sus variantes. PoliFix se distribuye "tal como está" y el equipo de InfoSpyware.com no se hace responsable de los daños o problemas causados tras su uso. Úsela bajo su propia responsabilidad y recuerde que tiene disponible nuestro foro de ayuda gratuita (www.forospyware.com) donde poder realizar su consulta o reportar un fallo.', 10, 10, 440, 120, $SS_CENTER)
  5810.     GUICtrlSetFont(-1, 10, 100, 0, "Arial")
  5811.     $HBUTTON3 = GUICtrlCreateButton("Aceptar", 190, 160, 80, 30)
  5812.     GUISetState()
  5813.     $SET_1 = False
  5814.     $SET_2 = False
  5815.     While 1
  5816.         Switch GUIGetMsg()
  5817.             Case $GUI_EVENT_CLOSE
  5818.                 GUISetState(@SW_ENABLE, $FORM1)
  5819.                 GUIDelete($HGUI2)
  5820.                 ExitLoop
  5821.             Case $HBUTTON3
  5822.                 GUISetState(@SW_ENABLE, $FORM1)
  5823.                 GUIDelete($HGUI2)
  5824.                 ExitLoop
  5825.             Case $LABELLINK
  5826.                 ShellExecute("www.Forospyware.com")
  5827.         EndSwitch
  5828.         $ARRAY = GUIGetCursorInfo($HGUI2)
  5829.         If $ARRAY[4] = $LABELLINK Then
  5830.             If Not $SET_1 Then
  5831.                 GUICtrlSetColor($LABELLINK, 255)
  5832.                 $SET_1 = True
  5833.                 $SET_2 = False
  5834.             EndIf
  5835.         Else
  5836.             If Not $SET_2 Then
  5837.                 GUICtrlSetColor($LABELLINK, 0)
  5838.                 $SET_1 = False
  5839.                 $SET_2 = True
  5840.             EndIf
  5841.         EndIf
  5842.     WEnd
  5843. EndFunc
  5844. Func GUI3()
  5845.     $FORM2 = GUICreate($NAME & $VERSION & $COMPANY & " | Script", 440, 200, -1, -1)
  5846.     GUISetBkColor(128)
  5847.     $BUTTON5 = GUICtrlCreateButton("Reparar", 180, 160, 80, 31)
  5848.     $EDIT_1 = GUICtrlCreateEdit("test", 10, 10, 420, 140)
  5849.     GUISetState(@SW_SHOW)
  5850.     GUISetState(@SW_DISABLE, $FORM1)
  5851.     While 1
  5852.         $NMSG = GUIGetMsg()
  5853.         Switch $NMSG
  5854.             Case $GUI_EVENT_CLOSE
  5855.                 GUISetState(@SW_ENABLE, $FORM1)
  5856.                 GUIDelete($FORM2)
  5857.                 ExitLoop
  5858.         EndSwitch
  5859.     WEnd
  5860. EndFunc
  5861. Func _BORRARME($SSOURCEPATH)
  5862.     $IRET = DllCall("kernel32.dll", "int", "MoveFileExA", "str", $SSOURCEPATH, "int", 0, "dword", 4)
  5863.     Return $IRET
  5864. EndFunc
  5865. Func JAVA()
  5866.     Select
  5867.         Case @CPUArch = "X86"
  5868.             If FileExists(@SystemDir & "\java.exe") Then
  5869.                 Global $JAVA32 = "Java 32: " & FileGetVersion(@SystemDir & "\java.exe")
  5870.             EndIf
  5871.         Case @CPUArch = "X64"
  5872.             If FileExists(@SystemDir & "\java.exe") Then
  5873.                 Global $JAVA32 = "Java 32: " & FileGetVersion(@SystemDir & "\java.exe")
  5874.             EndIf
  5875.             If FileExists(@WindowsDir & "\sysnative\java.exe") Then
  5876.                 Global $JAVA64 = "Java 64: " & FileGetVersion(@WindowsDir & "\sysnative\java.exe")
  5877.             EndIf
  5878.     EndSelect
  5879. EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement