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 $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 $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 $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 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 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 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 Func _dateadd($stype, $ivaltoadd, $sdate) Local $astimepart[4] Local $asdatepart[4] Local $ijuliandate $stype = StringLeft($stype, 1) If StringInStr("D,M,Y,w,h,n,s", $stype) = 0 OR $stype = "" Then Return SetError(1, 0, 0) EndIf If NOT StringIsInt($ivaltoadd) Then Return SetError(2, 0, 0) EndIf If NOT _dateisvalid($sdate) Then Return SetError(3, 0, 0) EndIf _datetimesplit($sdate, $asdatepart, $astimepart) If $stype = "d" OR $stype = "w" Then If $stype = "w" Then $ivaltoadd = $ivaltoadd * 7 $ijuliandate = _datetodayvalue($asdatepart[1], $asdatepart[2], $asdatepart[3]) + $ivaltoadd _dayvaluetodate($ijuliandate, $asdatepart[1], $asdatepart[2], $asdatepart[3]) EndIf If $stype = "m" Then $asdatepart[2] = $asdatepart[2] + $ivaltoadd While $asdatepart[2] > 12 $asdatepart[2] = $asdatepart[2] - 12 $asdatepart[1] = $asdatepart[1] + 1 WEnd While $asdatepart[2] < 1 $asdatepart[2] = $asdatepart[2] + 12 $asdatepart[1] = $asdatepart[1] - 1 WEnd EndIf If $stype = "y" Then $asdatepart[1] = $asdatepart[1] + $ivaltoadd EndIf If $stype = "h" OR $stype = "n" OR $stype = "s" Then Local $itimeval = _timetoticks($astimepart[1], $astimepart[2], $astimepart[3]) / 1000 If $stype = "h" Then $itimeval = $itimeval + $ivaltoadd * 3600 If $stype = "n" Then $itimeval = $itimeval + $ivaltoadd * 60 If $stype = "s" Then $itimeval = $itimeval + $ivaltoadd Local $day2add = Int($itimeval / (24 * 60 * 60)) $itimeval = $itimeval - $day2add * 24 * 60 * 60 If $itimeval < 0 Then $day2add = $day2add - 1 $itimeval = $itimeval + 24 * 60 * 60 EndIf $ijuliandate = _datetodayvalue($asdatepart[1], $asdatepart[2], $asdatepart[3]) + $day2add _dayvaluetodate($ijuliandate, $asdatepart[1], $asdatepart[2], $asdatepart[3]) _tickstotime($itimeval * 1000, $astimepart[1], $astimepart[2], $astimepart[3]) EndIf Local $inumdays = _daysinmonth($asdatepart[1]) If $inumdays[$asdatepart[2]] < $asdatepart[3] Then $asdatepart[3] = $inumdays[$asdatepart[2]] $sdate = $asdatepart[1] & "/" & StringRight("0" & $asdatepart[2], 2) & "/" & StringRight("0" & $asdatepart[3], 2) If $astimepart[0] > 0 Then If $astimepart[0] > 2 Then $sdate = $sdate & " " & StringRight("0" & $astimepart[1], 2) & ":" & StringRight("0" & $astimepart[2], 2) & ":" & StringRight("0" & $astimepart[3], 2) Else $sdate = $sdate & " " & StringRight("0" & $astimepart[1], 2) & ":" & StringRight("0" & $astimepart[2], 2) EndIf EndIf Return ($sdate) EndFunc Func _datedayofweek($idaynum, $ishort = 0) Local Const $adayofweek[8] = ["", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] Select Case NOT StringIsInt($idaynum) OR NOT StringIsInt($ishort) Return SetError(1, 0, "") Case $idaynum < 1 OR $idaynum > 7 Return SetError(1, 0, "") Case Else Select Case $ishort = 0 Return $adayofweek[$idaynum] Case $ishort = 1 Return StringLeft($adayofweek[$idaynum], 3) Case Else Return SetError(1, 0, "") EndSelect EndSelect EndFunc Func _datedaysinmonth($iyear, $imonthnum) If __dateismonth($imonthnum) AND __dateisyear($iyear) Then Local $ainumdays = _daysinmonth($iyear) Return $ainumdays[$imonthnum] EndIf Return SetError(1, 0, 0) EndFunc Func _datediff($stype, $sstartdate, $senddate) $stype = StringLeft($stype, 1) If StringInStr("d,m,y,w,h,n,s", $stype) = 0 OR $stype = "" Then Return SetError(1, 0, 0) EndIf If NOT _dateisvalid($sstartdate) Then Return SetError(2, 0, 0) EndIf If NOT _dateisvalid($senddate) Then Return SetError(3, 0, 0) EndIf Local $asstartdatepart[4], $asstarttimepart[4], $asenddatepart[4], $asendtimepart[4] _datetimesplit($sstartdate, $asstartdatepart, $asstarttimepart) _datetimesplit($senddate, $asenddatepart, $asendtimepart) Local $adaysdiff = _datetodayvalue($asenddatepart[1], $asenddatepart[2], $asenddatepart[3]) - _datetodayvalue($asstartdatepart[1], $asstartdatepart[2], $asstartdatepart[3]) Local $itimediff, $iyeardiff, $istarttimeinsecs, $iendtimeinsecs If $asstarttimepart[0] > 1 AND $asendtimepart[0] > 1 Then $istarttimeinsecs = $asstarttimepart[1] * 3600 + $asstarttimepart[2] * 60 + $asstarttimepart[3] $iendtimeinsecs = $asendtimepart[1] * 3600 + $asendtimepart[2] * 60 + $asendtimepart[3] $itimediff = $iendtimeinsecs - $istarttimeinsecs If $itimediff < 0 Then $adaysdiff = $adaysdiff - 1 $itimediff = $itimediff + 24 * 60 * 60 EndIf Else $itimediff = 0 EndIf Select Case $stype = "d" Return ($adaysdiff) Case $stype = "m" $iyeardiff = $asenddatepart[1] - $asstartdatepart[1] Local $imonthdiff = $asenddatepart[2] - $asstartdatepart[2] + $iyeardiff * 12 If $asenddatepart[3] < $asstartdatepart[3] Then $imonthdiff = $imonthdiff - 1 $istarttimeinsecs = $asstarttimepart[1] * 3600 + $asstarttimepart[2] * 60 + $asstarttimepart[3] $iendtimeinsecs = $asendtimepart[1] * 3600 + $asendtimepart[2] * 60 + $asendtimepart[3] $itimediff = $iendtimeinsecs - $istarttimeinsecs If $asenddatepart[3] = $asstartdatepart[3] AND $itimediff < 0 Then $imonthdiff = $imonthdiff - 1 Return ($imonthdiff) Case $stype = "y" $iyeardiff = $asenddatepart[1] - $asstartdatepart[1] If $asenddatepart[2] < $asstartdatepart[2] Then $iyeardiff = $iyeardiff - 1 If $asenddatepart[2] = $asstartdatepart[2] AND $asenddatepart[3] < $asstartdatepart[3] Then $iyeardiff = $iyeardiff - 1 $istarttimeinsecs = $asstarttimepart[1] * 3600 + $asstarttimepart[2] * 60 + $asstarttimepart[3] $iendtimeinsecs = $asendtimepart[1] * 3600 + $asendtimepart[2] * 60 + $asendtimepart[3] $itimediff = $iendtimeinsecs - $istarttimeinsecs If $asenddatepart[2] = $asstartdatepart[2] AND $asenddatepart[3] = $asstartdatepart[3] AND $itimediff < 0 Then $iyeardiff = $iyeardiff - 1 Return ($iyeardiff) Case $stype = "w" Return (Int($adaysdiff / 7)) Case $stype = "h" Return ($adaysdiff * 24 + Int($itimediff / 3600)) Case $stype = "n" Return ($adaysdiff * 24 * 60 + Int($itimediff / 60)) Case $stype = "s" Return ($adaysdiff * 24 * 60 * 60 + $itimediff) EndSelect EndFunc Func _dateisleapyear($iyear) If StringIsInt($iyear) Then Select Case Mod($iyear, 4) = 0 AND Mod($iyear, 100) <> 0 Return 1 Case Mod($iyear, 400) = 0 Return 1 Case Else Return 0 EndSelect EndIf Return SetError(1, 0, 0) EndFunc Func __dateismonth($inumber) If StringIsInt($inumber) Then If $inumber >= 1 AND $inumber <= 12 Then Return 1 Else Return 0 EndIf EndIf Return 0 EndFunc Func _dateisvalid($sdate) Local $asdatepart[4], $astimepart[4] Local $sdatetime = StringSplit($sdate, " T") If $sdatetime[0] > 0 Then $asdatepart = StringSplit($sdatetime[1], "/-.") If UBound($asdatepart) <> 4 Then Return (0) If $asdatepart[0] <> 3 Then Return (0) If NOT StringIsInt($asdatepart[1]) Then Return (0) If NOT StringIsInt($asdatepart[2]) Then Return (0) If NOT StringIsInt($asdatepart[3]) Then Return (0) $asdatepart[1] = Number($asdatepart[1]) $asdatepart[2] = Number($asdatepart[2]) $asdatepart[3] = Number($asdatepart[3]) Local $inumdays = _daysinmonth($asdatepart[1]) If $asdatepart[1] < 1000 OR $asdatepart[1] > 2999 Then Return (0) If $asdatepart[2] < 1 OR $asdatepart[2] > 12 Then Return (0) If $asdatepart[3] < 1 OR $asdatepart[3] > $inumdays[$asdatepart[2]] Then Return (0) If $sdatetime[0] > 1 Then $astimepart = StringSplit($sdatetime[2], ":") If UBound($astimepart) < 4 Then ReDim $astimepart[4] Else Dim $astimepart[4] EndIf If $astimepart[0] < 1 Then Return (1) If $astimepart[0] < 2 Then Return (0) If $astimepart[0] = 2 Then $astimepart[3] = "00" If NOT StringIsInt($astimepart[1]) Then Return (0) If NOT StringIsInt($astimepart[2]) Then Return (0) If NOT StringIsInt($astimepart[3]) Then Return (0) $astimepart[1] = Number($astimepart[1]) $astimepart[2] = Number($astimepart[2]) $astimepart[3] = Number($astimepart[3]) If $astimepart[1] < 0 OR $astimepart[1] > 23 Then Return (0) If $astimepart[2] < 0 OR $astimepart[2] > 59 Then Return (0) If $astimepart[3] < 0 OR $astimepart[3] > 59 Then Return (0) Return 1 EndFunc Func __dateisyear($inumber) If StringIsInt($inumber) Then If StringLen($inumber) = 4 Then Return 1 Else Return 0 EndIf EndIf Return 0 EndFunc Func _datelastweekdaynum($iweekdaynum) Select Case NOT StringIsInt($iweekdaynum) Return SetError(1, 0, 0) Case $iweekdaynum < 1 OR $iweekdaynum > 7 Return SetError(1, 0, 0) Case Else Local $ilastweekdaynum If $iweekdaynum = 1 Then $ilastweekdaynum = 7 Else $ilastweekdaynum = $iweekdaynum - 1 EndIf Return $ilastweekdaynum EndSelect EndFunc Func _datelastmonthnum($imonthnum) Select Case NOT StringIsInt($imonthnum) Return SetError(1, 0, 0) Case $imonthnum < 1 OR $imonthnum > 12 Return SetError(1, 0, 0) Case Else Local $ilastmonthnum If $imonthnum = 1 Then $ilastmonthnum = 12 Else $ilastmonthnum = $imonthnum - 1 EndIf $ilastmonthnum = StringFormat("%02d", $ilastmonthnum) Return $ilastmonthnum EndSelect EndFunc Func _datelastmonthyear($imonthnum, $iyear) Select Case NOT StringIsInt($imonthnum) OR NOT StringIsInt($iyear) Return SetError(1, 0, 0) Case $imonthnum < 1 OR $imonthnum > 12 Return SetError(1, 0, 0) Case Else Local $ilastyear If $imonthnum = 1 Then $ilastyear = $iyear - 1 Else $ilastyear = $iyear EndIf $ilastyear = StringFormat("%04d", $ilastyear) Return $ilastyear EndSelect EndFunc Func _datenextweekdaynum($iweekdaynum) Select Case NOT StringIsInt($iweekdaynum) Return SetError(1, 0, 0) Case $iweekdaynum < 1 OR $iweekdaynum > 7 Return SetError(1, 0, 0) Case Else Local $inextweekdaynum If $iweekdaynum = 7 Then $inextweekdaynum = 1 Else $inextweekdaynum = $iweekdaynum + 1 EndIf Return $inextweekdaynum EndSelect EndFunc Func _datenextmonthnum($imonthnum) Select Case NOT StringIsInt($imonthnum) Return SetError(1, 0, 0) Case $imonthnum < 1 OR $imonthnum > 12 Return SetError(1, 0, 0) Case Else Local $inextmonthnum If $imonthnum = 12 Then $inextmonthnum = 1 Else $inextmonthnum = $imonthnum + 1 EndIf $inextmonthnum = StringFormat("%02d", $inextmonthnum) Return $inextmonthnum EndSelect EndFunc Func _datenextmonthyear($imonthnum, $iyear) Select Case NOT StringIsInt($imonthnum) OR NOT StringIsInt($iyear) Return SetError(1, 0, 0) Case $imonthnum < 1 OR $imonthnum > 12 Return SetError(1, 0, 0) Case Else Local $inextyear If $imonthnum = 12 Then $inextyear = $iyear + 1 Else $inextyear = $iyear EndIf $inextyear = StringFormat("%04d", $inextyear) Return $inextyear EndSelect EndFunc Func _datetimeformat($sdate, $stype) Local $asdatepart[4], $astimepart[4] Local $stempdate = "", $stemptime = "" Local $sam, $spm, $lngx If NOT _dateisvalid($sdate) Then Return SetError(1, 0, "") EndIf If $stype < 0 OR $stype > 5 OR NOT IsInt($stype) Then Return SetError(2, 0, "") EndIf _datetimesplit($sdate, $asdatepart, $astimepart) Switch $stype Case 0 $lngx = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 31, "wstr", "", "int", 255) If NOT @error AND $lngx[0] <> 0 Then $stempdate = $lngx[3] Else $stempdate = "M/d/yyyy" EndIf If $astimepart[0] > 1 Then $lngx = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 4099, "wstr", "", "int", 255) If NOT @error AND $lngx[0] <> 0 Then $stemptime = $lngx[3] Else $stemptime = "h:mm:ss tt" EndIf EndIf Case 1 $lngx = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 32, "wstr", "", "int", 255) If NOT @error AND $lngx[0] <> 0 Then $stempdate = $lngx[3] Else $stempdate = "dddd, MMMM dd, yyyy" EndIf Case 2 $lngx = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 31, "wstr", "", "int", 255) If NOT @error AND $lngx[0] <> 0 Then $stempdate = $lngx[3] Else $stempdate = "M/d/yyyy" EndIf Case 3 If $astimepart[0] > 1 Then $lngx = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 4099, "wstr", "", "int", 255) If NOT @error AND $lngx[0] <> 0 Then $stemptime = $lngx[3] Else $stemptime = "h:mm:ss tt" EndIf EndIf Case 4 If $astimepart[0] > 1 Then $stemptime = "hh:mm" EndIf Case 5 If $astimepart[0] > 1 Then $stemptime = "hh:mm:ss" EndIf EndSwitch If $stempdate <> "" Then $lngx = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 29, "wstr", "", "int", 255) If NOT @error AND $lngx[0] <> 0 Then $stempdate = StringReplace($stempdate, "/", $lngx[3]) EndIf Local $iwday = _datetodayofweek($asdatepart[1], $asdatepart[2], $asdatepart[3]) $asdatepart[3] = StringRight("0" & $asdatepart[3], 2) $asdatepart[2] = StringRight("0" & $asdatepart[2], 2) $stempdate = StringReplace($stempdate, "d", "@") $stempdate = StringReplace($stempdate, "m", "#") $stempdate = StringReplace($stempdate, "y", "&") $stempdate = StringReplace($stempdate, "@@@@", _datedayofweek($iwday, 0)) $stempdate = StringReplace($stempdate, "@@@", _datedayofweek($iwday, 1)) $stempdate = StringReplace($stempdate, "@@", $asdatepart[3]) $stempdate = StringReplace($stempdate, "@", StringReplace(StringLeft($asdatepart[3], 1), "0", "") & StringRight($asdatepart[3], 1)) $stempdate = StringReplace($stempdate, "####", _datetomonth($asdatepart[2], 0)) $stempdate = StringReplace($stempdate, "###", _datetomonth($asdatepart[2], 1)) $stempdate = StringReplace($stempdate, "##", $asdatepart[2]) $stempdate = StringReplace($stempdate, "#", StringReplace(StringLeft($asdatepart[2], 1), "0", "") & StringRight($asdatepart[2], 1)) $stempdate = StringReplace($stempdate, "&&&&", $asdatepart[1]) $stempdate = StringReplace($stempdate, "&&", StringRight($asdatepart[1], 2)) EndIf If $stemptime <> "" Then $lngx = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 40, "wstr", "", "int", 255) If NOT @error AND $lngx[0] <> 0 Then $sam = $lngx[3] Else $sam = "AM" EndIf $lngx = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 41, "wstr", "", "int", 255) If NOT @error AND $lngx[0] <> 0 Then $spm = $lngx[3] Else $spm = "PM" EndIf $lngx = DllCall("kernel32.dll", "int", "GetLocaleInfoW", "dword", 1024, "dword", 30, "wstr", "", "int", 255) If NOT @error AND $lngx[0] <> 0 Then $stemptime = StringReplace($stemptime, ":", $lngx[3]) EndIf If StringInStr($stemptime, "tt") Then If $astimepart[1] < 12 Then $stemptime = StringReplace($stemptime, "tt", $sam) If $astimepart[1] = 0 Then $astimepart[1] = 12 Else $stemptime = StringReplace($stemptime, "tt", $spm) If $astimepart[1] > 12 Then $astimepart[1] = $astimepart[1] - 12 EndIf EndIf $astimepart[1] = StringRight("0" & $astimepart[1], 2) $astimepart[2] = StringRight("0" & $astimepart[2], 2) $astimepart[3] = StringRight("0" & $astimepart[3], 2) $stemptime = StringReplace($stemptime, "hh", StringFormat("%02d", $astimepart[1])) $stemptime = StringReplace($stemptime, "h", StringReplace(StringLeft($astimepart[1], 1), "0", "") & StringRight($astimepart[1], 1)) $stemptime = StringReplace($stemptime, "mm", StringFormat("%02d", $astimepart[2])) $stemptime = StringReplace($stemptime, "ss", StringFormat("%02d", $astimepart[3])) $stempdate = StringStripWS($stempdate & " " & $stemptime, 3) EndIf Return $stempdate EndFunc Func _datetimesplit($sdate, ByRef $asdatepart, ByRef $itimepart) Local $sdatetime = StringSplit($sdate, " T") If $sdatetime[0] > 0 Then $asdatepart = StringSplit($sdatetime[1], "/-.") If $sdatetime[0] > 1 Then $itimepart = StringSplit($sdatetime[2], ":") If UBound($itimepart) < 4 Then ReDim $itimepart[4] Else Dim $itimepart[4] EndIf If UBound($asdatepart) < 4 Then ReDim $asdatepart[4] For $x = 1 To 3 If StringIsInt($asdatepart[$x]) Then $asdatepart[$x] = Number($asdatepart[$x]) Else $asdatepart[$x] = -1 EndIf If StringIsInt($itimepart[$x]) Then $itimepart[$x] = Number($itimepart[$x]) Else $itimepart[$x] = 0 EndIf Next Return 1 EndFunc Func _datetodayofweek($iyear, $imonth, $iday) If NOT _dateisvalid($iyear & "/" & $imonth & "/" & $iday) Then Return SetError(1, 0, "") EndIf Local $i_afactor = Int((14 - $imonth) / 12) Local $i_yfactor = $iyear - $i_afactor Local $i_mfactor = $imonth + (12 * $i_afactor) - 2 Local $i_dfactor = Mod($iday + $i_yfactor + Int($i_yfactor / 4) - Int($i_yfactor / 100) + Int($i_yfactor / 400) + Int((31 * $i_mfactor) / 12), 7) Return ($i_dfactor + 1) EndFunc Func _datetodayofweekiso($iyear, $imonth, $iday) Local $idow = _datetodayofweek($iyear, $imonth, $iday) If @error Then Return SetError(1, 0, "") EndIf If $idow >= 2 Then Return $idow - 1 Return 7 EndFunc Func _datetodayvalue($iyear, $imonth, $iday) If NOT _dateisvalid(StringFormat("%04d/%02d/%02d", $iyear, $imonth, $iday)) Then Return SetError(1, 0, "") EndIf If $imonth < 3 Then $imonth = $imonth + 12 $iyear = $iyear - 1 EndIf Local $i_afactor = Int($iyear / 100) Local $i_bfactor = Int($i_afactor / 4) Local $i_cfactor = 2 - $i_afactor + $i_bfactor Local $i_efactor = Int(1461 * ($iyear + 4716) / 4) Local $i_ffactor = Int(153 * ($imonth + 1) / 5) Local $ijuliandate = $i_cfactor + $iday + $i_efactor + $i_ffactor - 1524.5 Return ($ijuliandate) EndFunc Func _datetomonth($imonth, $ishort = 0) Local $amonthnumber[13] = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] Local $amonthnumberabbrev[13] = ["", "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"] Select Case NOT StringIsInt($imonth) Return SetError(1, 0, "") Case $imonth < 1 OR $imonth > 12 Return SetError(1, 0, "") Case Else Select Case $ishort = 0 Return $amonthnumber[$imonth] Case $ishort = 1 Return $amonthnumberabbrev[$imonth] Case Else Return SetError(1, 0, "") EndSelect EndSelect EndFunc Func _dayvaluetodate($ijuliandate, ByRef $iyear, ByRef $imonth, ByRef $iday) If $ijuliandate < 0 OR NOT IsNumber($ijuliandate) Then Return SetError(1, 0, 0) EndIf Local $i_zfactor = Int($ijuliandate + 0.5) Local $i_wfactor = Int(($i_zfactor - 1867216.25) / 36524.25) Local $i_xfactor = Int($i_wfactor / 4) Local $i_afactor = $i_zfactor + 1 + $i_wfactor - $i_xfactor Local $i_bfactor = $i_afactor + 1524 Local $i_cfactor = Int(($i_bfactor - 122.1) / 365.25) Local $i_dfactor = Int(365.25 * $i_cfactor) Local $i_efactor = Int(($i_bfactor - $i_dfactor) / 30.6001) Local $i_ffactor = Int(30.6001 * $i_efactor) $iday = $i_bfactor - $i_dfactor - $i_ffactor If $i_efactor - 1 < 13 Then $imonth = $i_efactor - 1 Else $imonth = $i_efactor - 13 EndIf If $imonth < 3 Then $iyear = $i_cfactor - 4715 Else $iyear = $i_cfactor - 4716 EndIf $iyear = StringFormat("%04d", $iyear) $imonth = StringFormat("%02d", $imonth) $iday = StringFormat("%02d", $iday) Return $iyear & "/" & $imonth & "/" & $iday EndFunc Func _date_juliandayno($iyear, $imonth, $iday) Local $sfulldate = StringFormat("%04d/%02d/%02d", $iyear, $imonth, $iday) If NOT _dateisvalid($sfulldate) Then Return SetError(1, 0, "") EndIf Local $ijday = 0 Local $aidaysinmonth = _daysinmonth($iyear) For $icntr = 1 To $imonth - 1 $ijday = $ijday + $aidaysinmonth[$icntr] Next $ijday = ($iyear * 1000) + ($ijday + $iday) Return $ijday EndFunc Func _juliantodate($ijday, $ssep = "/") Local $iyear = Int($ijday / 1000) Local $idays = Mod($ijday, 1000) Local $imaxdays = 365 If _dateisleapyear($iyear) Then $imaxdays = 366 If $idays > $imaxdays Then Return SetError(1, 0, "") EndIf Local $aidaysinmonth = _daysinmonth($iyear) Local $imonth = 1 While $idays > $aidaysinmonth[$imonth] $idays = $idays - $aidaysinmonth[$imonth] $imonth = $imonth + 1 WEnd Return StringFormat("%04d%s%02d%s%02d", $iyear, $ssep, $imonth, $ssep, $idays) EndFunc Func _now() Return (_datetimeformat(@YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC, 0)) EndFunc Func _nowcalc() Return (@YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC) EndFunc Func _nowcalcdate() Return (@YEAR & "/" & @MON & "/" & @MDAY) EndFunc Func _nowdate() Return (_datetimeformat(@YEAR & "/" & @MON & "/" & @MDAY, 0)) EndFunc Func _nowtime($stype = 3) If $stype < 3 OR $stype > 5 Then $stype = 3 Return (_datetimeformat(@YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC, $stype)) EndFunc Func _setdate($iday, $imonth = 0, $iyear = 0) If $iyear = 0 Then $iyear = @YEAR If $imonth = 0 Then $imonth = @MON If NOT _dateisvalid($iyear & "/" & $imonth & "/" & $iday) Then Return 1 Local $tsystemtime = DllStructCreate($tagsystemtime) Local $lpsystemtime = DllStructGetPtr($tsystemtime) DllCall("kernel32.dll", "none", "GetLocalTime", "ptr", $lpsystemtime) If @error Then Return SetError(@error, @extended, 0) DllStructSetData($tsystemtime, 4, $iday) If $imonth > 0 Then DllStructSetData($tsystemtime, 2, $imonth) If $iyear > 0 Then DllStructSetData($tsystemtime, 1, $iyear) Local $iretval = _date_time_setlocaltime($lpsystemtime) If @error Then Return SetError(@error, @extended, 0) Return Int($iretval) EndFunc Func _settime($ihour, $iminute, $isecond = 0) If $ihour < 0 OR $ihour > 23 Then Return 1 If $iminute < 0 OR $iminute > 59 Then Return 1 If $isecond < 0 OR $isecond > 59 Then Return 1 Local $tsystemtime = DllStructCreate($tagsystemtime) Local $lpsystemtime = DllStructGetPtr($tsystemtime) DllCall("kernel32.dll", "none", "GetLocalTime", "ptr", $lpsystemtime) If @error Then Return SetError(@error, @extended, 0) DllStructSetData($tsystemtime, 5, $ihour) DllStructSetData($tsystemtime, 6, $iminute) If $isecond > 0 Then DllStructSetData($tsystemtime, 7, $isecond) Local $iretval = _date_time_setlocaltime($lpsystemtime) If @error Then Return SetError(@error, @extended, 0) Return Int($iretval) EndFunc Func _tickstotime($iticks, ByRef $ihours, ByRef $imins, ByRef $isecs) If Number($iticks) > 0 Then $iticks = Int($iticks / 1000) $ihours = Int($iticks / 3600) $iticks = Mod($iticks, 3600) $imins = Int($iticks / 60) $isecs = Mod($iticks, 60) Return 1 ElseIf Number($iticks) = 0 Then $ihours = 0 $iticks = 0 $imins = 0 $isecs = 0 Return 1 Else Return SetError(1, 0, 0) EndIf EndFunc Func _timetoticks($ihours = @HOUR, $imins = @MIN, $isecs = @SEC) If StringIsInt($ihours) AND StringIsInt($imins) AND StringIsInt($isecs) Then Local $iticks = 1000 * ((3600 * $ihours) + (60 * $imins) + $isecs) Return $iticks Else Return SetError(1, 0, 0) EndIf EndFunc Func _weeknumberiso($iyear = @YEAR, $imonth = @MON, $iday = @MDAY) If $iday > 31 OR $iday < 1 Then Return SetError(1, 0, -1) ElseIf $imonth > 12 OR $imonth < 1 Then Return SetError(1, 0, -1) ElseIf $iyear < 1 OR $iyear > 2999 Then Return SetError(1, 0, -1) EndIf Local $idow = _datetodayofweekiso($iyear, $imonth, $iday) Local $idow0101 = _datetodayofweekiso($iyear, 1, 1) If ($imonth = 1 AND 3 < $idow0101 AND $idow0101 < 7 - ($iday - 1)) Then $idow = $idow0101 - 1 $idow0101 = _datetodayofweekiso($iyear - 1, 1, 1) $imonth = 12 $iday = 31 $iyear = $iyear - 1 ElseIf ($imonth = 12 AND 30 - ($iday - 1) < _datetodayofweekiso($iyear + 1, 1, 1) AND _datetodayofweekiso($iyear + 1, 1, 1) < 4) Then Return 1 EndIf Return Int((_datetodayofweekiso($iyear, 1, 1) < 4) + 4 * ($imonth - 1) + (2 * ($imonth - 1) + ($iday - 1) + $idow0101 - $idow + 6) * 36 / 256) EndFunc Func _weeknumber($iyear = @YEAR, $imonth = @MON, $iday = @MDAY, $iweekstart = 1) If $iday > 31 OR $iday < 1 Then Return SetError(1, 0, -1) ElseIf $imonth > 12 OR $imonth < 1 Then Return SetError(1, 0, -1) ElseIf $iyear < 1 OR $iyear > 2999 Then Return SetError(1, 0, -1) ElseIf $iweekstart < 1 OR $iweekstart > 2 Then Return SetError(2, 0, -1) EndIf Local $istartweek1, $iendweek1 Local $idow0101 = _datetodayofweekiso($iyear, 1, 1) Local $idate = $iyear & "/" & $imonth & "/" & $iday If $iweekstart = 1 Then If $idow0101 = 6 Then $istartweek1 = 0 Else $istartweek1 = -1 * $idow0101 - 1 EndIf $iendweek1 = $istartweek1 + 6 Else $istartweek1 = $idow0101 * -1 $iendweek1 = $istartweek1 + 6 EndIf Local $istartweek1ny Local $iendweek1date = _dateadd("d", $iendweek1, $iyear & "/01/01") Local $idow0101ny = _datetodayofweekiso($iyear + 1, 1, 1) If $iweekstart = 1 Then If $idow0101ny = 6 Then $istartweek1ny = 0 Else $istartweek1ny = -1 * $idow0101ny - 1 EndIf Else $istartweek1ny = $idow0101ny * -1 EndIf Local $istartweek1dateny = _dateadd("d", $istartweek1ny, $iyear + 1 & "/01/01") Local $icurrdatediff = _datediff("d", $iendweek1date, $idate) - 1 Local $icurrdatediffny = _datediff("d", $istartweek1dateny, $idate) If $icurrdatediff >= 0 AND $icurrdatediffny < 0 Then Return 2 + Int($icurrdatediff / 7) If $icurrdatediff < 0 OR $icurrdatediffny >= 0 Then Return 1 EndFunc Func _daysinmonth($iyear) Local $aidays[13] = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] If _dateisleapyear($iyear) Then $aidays[2] = 29 Return $aidays EndFunc Func __date_time_clonesystemtime($psystemtime) Local $tsystemtime1 = DllStructCreate($tagsystemtime, $psystemtime) Local $tsystemtime2 = DllStructCreate($tagsystemtime) DllStructSetData($tsystemtime2, "Month", DllStructGetData($tsystemtime1, "Month")) DllStructSetData($tsystemtime2, "Day", DllStructGetData($tsystemtime1, "Day")) DllStructSetData($tsystemtime2, "Year", DllStructGetData($tsystemtime1, "Year")) DllStructSetData($tsystemtime2, "Hour", DllStructGetData($tsystemtime1, "Hour")) DllStructSetData($tsystemtime2, "Minute", DllStructGetData($tsystemtime1, "Minute")) DllStructSetData($tsystemtime2, "Second", DllStructGetData($tsystemtime1, "Second")) DllStructSetData($tsystemtime2, "MSeconds", DllStructGetData($tsystemtime1, "MSeconds")) DllStructSetData($tsystemtime2, "DOW", DllStructGetData($tsystemtime1, "DOW")) Return $tsystemtime2 EndFunc Func _date_time_comparefiletime($pfiletime1, $pfiletime2) Local $aresult = DllCall("kernel32.dll", "long", "CompareFileTime", "ptr", $pfiletime1, "ptr", $pfiletime2) If @error Then Return SetError(@error, @extended, 0) Return $aresult[0] EndFunc Func _date_time_dosdatetimetofiletime($ifatdate, $ifattime) Local $ttime = DllStructCreate($tagfiletime) Local $ptime = DllStructGetPtr($ttime) Local $aresult = DllCall("kernel32.dll", "bool", "DosDateTimeToFileTime", "word", $ifatdate, "word", $ifattime, "ptr", $ptime) If @error Then Return SetError(@error, @extended, 0) Return SetExtended($aresult[0], $ttime) EndFunc Func _date_time_dosdatetoarray($idosdate) Local $adate[3] $adate[0] = BitAND($idosdate, 31) $adate[1] = BitAND(BitShift($idosdate, 5), 15) $adate[2] = BitAND(BitShift($idosdate, 9), 63) + 1980 Return $adate EndFunc Func _date_time_dosdatetimetoarray($idosdate, $idostime) Local $adate[6] $adate[0] = BitAND($idosdate, 31) $adate[1] = BitAND(BitShift($idosdate, 5), 15) $adate[2] = BitAND(BitShift($idosdate, 9), 63) + 1980 $adate[5] = BitAND($idostime, 31) * 2 $adate[4] = BitAND(BitShift($idostime, 5), 63) $adate[3] = BitAND(BitShift($idostime, 11), 31) Return $adate EndFunc Func _date_time_dosdatetimetostr($idosdate, $idostime) Local $adate = _date_time_dosdatetimetoarray($idosdate, $idostime) Return StringFormat("%02d/%02d/%04d %02d:%02d:%02d", $adate[0], $adate[1], $adate[2], $adate[3], $adate[4], $adate[5]) EndFunc Func _date_time_dosdatetostr($idosdate) Local $adate = _date_time_dosdatetoarray($idosdate) Return StringFormat("%02d/%02d/%04d", $adate[0], $adate[1], $adate[2]) EndFunc Func _date_time_dostimetoarray($idostime) Local $atime[3] $atime[2] = BitAND($idostime, 31) * 2 $atime[1] = BitAND(BitShift($idostime, 5), 63) $atime[0] = BitAND(BitShift($idostime, 11), 31) Return $atime EndFunc Func _date_time_dostimetostr($idostime) Local $atime = _date_time_dostimetoarray($idostime) Return StringFormat("%02d:%02d:%02d", $atime[0], $atime[1], $atime[2]) EndFunc Func _date_time_encodefiletime($imonth, $iday, $iyear, $ihour = 0, $iminute = 0, $isecond = 0, $imseconds = 0) Local $tsystemtime = _date_time_encodesystemtime($imonth, $iday, $iyear, $ihour, $iminute, $isecond, $imseconds) Return _date_time_systemtimetofiletime(DllStructGetPtr($tsystemtime)) EndFunc Func _date_time_encodesystemtime($imonth, $iday, $iyear, $ihour = 0, $iminute = 0, $isecond = 0, $imseconds = 0) Local $tsystemtime = DllStructCreate($tagsystemtime) DllStructSetData($tsystemtime, "Month", $imonth) DllStructSetData($tsystemtime, "Day", $iday) DllStructSetData($tsystemtime, "Year", $iyear) DllStructSetData($tsystemtime, "Hour", $ihour) DllStructSetData($tsystemtime, "Minute", $iminute) DllStructSetData($tsystemtime, "Second", $isecond) DllStructSetData($tsystemtime, "MSeconds", $imseconds) Return $tsystemtime EndFunc Func _date_time_filetimetoarray(ByRef $tfiletime) If ((DllStructGetData($tfiletime, 1) + DllStructGetData($tfiletime, 2)) = 0) Then Return SetError(1, 0, 0) Local $tsystemtime = _date_time_filetimetosystemtime(DllStructGetPtr($tfiletime)) If @error Then Return SetError(@error, @extended, 0) Return _date_time_systemtimetoarray($tsystemtime) EndFunc Func _date_time_filetimetostr(ByRef $tfiletime, $bfmt = 0) Local $adate = _date_time_filetimetoarray($tfiletime) If @error Then Return SetError(@error, @extended, "") If $bfmt Then Return StringFormat("%04d/%02d/%02d %02d:%02d:%02d", $adate[2], $adate[1], $adate[0], $adate[3], $adate[4], $adate[5]) Else Return StringFormat("%02d/%02d/%04d %02d:%02d:%02d", $adate[0], $adate[1], $adate[2], $adate[3], $adate[4], $adate[5]) EndIf EndFunc Func _date_time_filetimetodosdatetime($pfiletime) Local $adate[2] Local $aresult = DllCall("kernel32.dll", "bool", "FileTimeToDosDateTime", "ptr", $pfiletime, "word*", 0, "word*", 0) If @error Then Return SetError(@error, @extended, $adate) $adate[0] = $aresult[2] $adate[1] = $aresult[3] Return SetExtended($aresult[0], $adate) EndFunc Func _date_time_filetimetolocalfiletime($pfiletime) Local $tlocal = DllStructCreate($tagfiletime) Local $aresult = DllCall("kernel32.dll", "bool", "FileTimeToLocalFileTime", "ptr", $pfiletime, "ptr", DllStructGetPtr($tlocal)) If @error Then Return SetError(@error, @extended, 0) Return SetExtended($aresult[0], $tlocal) EndFunc Func _date_time_filetimetosystemtime($pfiletime) Local $tsysttime = DllStructCreate($tagsystemtime) Local $aresult = DllCall("kernel32.dll", "bool", "FileTimeToSystemTime", "ptr", $pfiletime, "ptr", DllStructGetPtr($tsysttime)) If @error Then Return SetError(@error, @extended, 0) Return SetExtended($aresult[0], $tsysttime) EndFunc Func _date_time_getfiletime($hfile) Local $adate[3] $adate[0] = DllStructCreate($tagfiletime) $adate[1] = DllStructCreate($tagfiletime) $adate[2] = DllStructCreate($tagfiletime) Local $pct = DllStructGetPtr($adate[0]) Local $pla = DllStructGetPtr($adate[1]) Local $plm = DllStructGetPtr($adate[2]) Local $aresult = DllCall("Kernel32.dll", "bool", "GetFileTime", "handle", $hfile, "ptr", $pct, "ptr", $pla, "ptr", $plm) If @error Then Return SetError(@error, @extended, 0) Return SetExtended($aresult[0], $adate) EndFunc Func _date_time_getlocaltime() Local $tsysttime = DllStructCreate($tagsystemtime) DllCall("kernel32.dll", "none", "GetLocalTime", "ptr", DllStructGetPtr($tsysttime)) If @error Then Return SetError(@error, @extended, 0) Return $tsysttime EndFunc Func _date_time_getsystemtime() Local $tsysttime = DllStructCreate($tagsystemtime) DllCall("kernel32.dll", "none", "GetSystemTime", "ptr", DllStructGetPtr($tsysttime)) If @error Then Return SetError(@error, @extended, 0) Return $tsysttime EndFunc Func _date_time_getsystemtimeadjustment() Local $ainfo[3] Local $aresult = DllCall("kernel32.dll", "bool", "GetSystemTimeAdjustment", "dword*", 0, "dword*", 0, "bool*", 0) If @error Then Return SetError(@error, @extended, 0) $ainfo[0] = $aresult[1] $ainfo[1] = $aresult[2] $ainfo[2] = $aresult[3] <> 0 Return SetExtended($aresult[0], $ainfo) EndFunc Func _date_time_getsystemtimeasfiletime() Local $tfiletime = DllStructCreate($tagfiletime) DllCall("kernel32.dll", "none", "GetSystemTimeAsFileTime", "ptr", DllStructGetPtr($tfiletime)) If @error Then Return SetError(@error, @extended, 0) Return $tfiletime EndFunc Func _date_time_getsystemtimes() Local $ainfo[3] $ainfo[0] = DllStructCreate($tagfiletime) $ainfo[1] = DllStructCreate($tagfiletime) $ainfo[2] = DllStructCreate($tagfiletime) Local $pidle = DllStructGetPtr($ainfo[0]) Local $pkernel = DllStructGetPtr($ainfo[1]) Local $puser = DllStructGetPtr($ainfo[2]) Local $aresult = DllCall("kernel32.dll", "bool", "GetSystemTimes", "ptr", $pidle, "ptr", $pkernel, "ptr", $puser) If @error Then Return SetError(@error, @extended, 0) Return SetExtended($aresult[0], $ainfo) EndFunc Func _date_time_gettickcount() Local $aresult = DllCall("kernel32.dll", "dword", "GetTickCount") If @error Then Return SetError(@error, @extended, 0) Return $aresult[0] EndFunc Func _date_time_gettimezoneinformation() Local $ttimezone = DllStructCreate($tagtime_zone_information) Local $aresult = DllCall("kernel32.dll", "dword", "GetTimeZoneInformation", "ptr", DllStructGetPtr($ttimezone)) If @error OR $aresult[0] = -1 Then Return SetError(@error, @extended, 0) Local $ainfo[8] $ainfo[0] = $aresult[0] $ainfo[1] = DllStructGetData($ttimezone, "Bias") $ainfo[2] = _winapi_widechartomultibyte(DllStructGetPtr($ttimezone, "StdName")) $ainfo[3] = __date_time_clonesystemtime(DllStructGetPtr($ttimezone, "StdDate")) $ainfo[4] = DllStructGetData($ttimezone, "StdBias") $ainfo[5] = _winapi_widechartomultibyte(DllStructGetPtr($ttimezone, "DayName")) $ainfo[6] = __date_time_clonesystemtime(DllStructGetPtr($ttimezone, "DayDate")) $ainfo[7] = DllStructGetData($ttimezone, "DayBias") Return $ainfo EndFunc Func _date_time_localfiletimetofiletime($plocaltime) Local $tfiletime = DllStructCreate($tagfiletime) Local $aresult = DllCall("kernel32.dll", "bool", "LocalFileTimeToFileTime", "ptr", $plocaltime, "ptr", DllStructGetPtr($tfiletime)) If @error Then Return SetError(@error, @extended, 0) Return SetExtended($aresult[0], $tfiletime) EndFunc Func _date_time_setfiletime($hfile, $pcreatetime, $plastaccess, $plastwrite) Local $aresult = DllCall("kernel32.dll", "bool", "SetFileTime", "handle", $hfile, "ptr", $pcreatetime, "ptr", $plastaccess, "ptr", $plastwrite) If @error Then Return SetError(@error, @extended, False) Return $aresult[0] EndFunc Func _date_time_setlocaltime($psystemtime) Local $aresult = DllCall("kernel32.dll", "bool", "SetLocalTime", "ptr", $psystemtime) If @error OR NOT $aresult[0] Then Return SetError(@error, @extended, False) $aresult = DllCall("kernel32.dll", "bool", "SetLocalTime", "ptr", $psystemtime) If @error Then Return SetError(@error, @extended, False) Return $aresult[0] EndFunc Func _date_time_setsystemtime($psystemtime) Local $aresult = DllCall("kernel32.dll", "bool", "SetSystemTime", "ptr", $psystemtime) If @error Then Return SetError(@error, @extended, False) Return $aresult[0] EndFunc Func _date_time_setsystemtimeadjustment($iadjustment, $fdisabled) Local $htoken = _security__openthreadtokenex(BitOR($token_adjust_privileges, $token_query)) If @error Then Return SetError(@error, @extended, False) _security__setprivilege($htoken, "SeSystemtimePrivilege", True) Local $ierror = @error Local $ilasterror = @extended Local $iret = False If NOT @error Then Local $aresult = DllCall("kernel32.dll", "bool", "SetSystemTimeAdjustment", "dword", $iadjustment, "bool", $fdisabled) If @error Then $ierror = @error $ilasterror = @extended ElseIf $aresult[0] Then $iret = True Else $ierror = 1 $ilasterror = _winapi_getlasterror() EndIf _security__setprivilege($htoken, "SeSystemtimePrivilege", False) If @error Then $ierror = 2 EndIf _winapi_closehandle($htoken) Return SetError($ierror, $ilasterror, $iret) EndFunc Func _date_time_settimezoneinformation($ibias, $sstdname, $tstddate, $istdbias, $sdayname, $tdaydate, $idaybias) Local $tstdname = _winapi_multibytetowidechar($sstdname) Local $tdayname = _winapi_multibytetowidechar($sdayname) Local $tzoneinfo = DllStructCreate($tagtime_zone_information) DllStructSetData($tzoneinfo, "Bias", $ibias) DllStructSetData($tzoneinfo, "StdName", DllStructGetData($tstdname, 1)) _memmovememory(DllStructGetPtr($tstddate), DllStructGetPtr($tzoneinfo, "StdDate"), DllStructGetSize($tstddate)) DllStructSetData($tzoneinfo, "StdBias", $istdbias) DllStructSetData($tzoneinfo, "DayName", DllStructGetData($tdayname, 1)) _memmovememory(DllStructGetPtr($tdaydate), DllStructGetPtr($tzoneinfo, "DayDate"), DllStructGetSize($tdaydate)) DllStructSetData($tzoneinfo, "DayBias", $idaybias) Local $htoken = _security__openthreadtokenex(BitOR($token_adjust_privileges, $token_query)) If @error Then Return SetError(@error, @extended, False) _security__setprivilege($htoken, "SeSystemtimePrivilege", True) Local $ierror = @error Local $ilasterror = @extended Local $iret = False If NOT @error Then Local $aresult = DllCall("kernel32.dll", "bool", "SetTimeZoneInformation", "ptr", DllStructGetPtr($tzoneinfo)) If @error Then $ierror = @error $ilasterror = @extended ElseIf $aresult[0] Then $ilasterror = 0 $iret = True Else $ierror = 1 $ilasterror = _winapi_getlasterror() EndIf _security__setprivilege($htoken, "SeSystemtimePrivilege", False) If @error Then $ierror = 2 EndIf _winapi_closehandle($htoken) Return SetError($ierror, $ilasterror, $iret) EndFunc Func _date_time_systemtimetoarray(ByRef $tsystemtime) Local $ainfo[8] $ainfo[0] = DllStructGetData($tsystemtime, "Month") $ainfo[1] = DllStructGetData($tsystemtime, "Day") $ainfo[2] = DllStructGetData($tsystemtime, "Year") $ainfo[3] = DllStructGetData($tsystemtime, "Hour") $ainfo[4] = DllStructGetData($tsystemtime, "Minute") $ainfo[5] = DllStructGetData($tsystemtime, "Second") $ainfo[6] = DllStructGetData($tsystemtime, "MSeconds") $ainfo[7] = DllStructGetData($tsystemtime, "DOW") Return $ainfo EndFunc Func _date_time_systemtimetodatestr(ByRef $tsystemtime, $bfmt = 0) Local $ainfo = _date_time_systemtimetoarray($tsystemtime) If @error Then Return SetError(@error, @extended, "") If $bfmt Then Return StringFormat("%04d/%02d/%02d", $ainfo[2], $ainfo[0], $ainfo[1]) Else Return StringFormat("%02d/%02d/%04d", $ainfo[0], $ainfo[1], $ainfo[2]) EndIf EndFunc Func _date_time_systemtimetodatetimestr(ByRef $tsystemtime, $bfmt = 0) Local $ainfo = _date_time_systemtimetoarray($tsystemtime) If @error Then Return SetError(@error, @extended, "") If $bfmt Then Return StringFormat("%04d/%02d/%02d %02d:%02d:%02d", $ainfo[2], $ainfo[0], $ainfo[1], $ainfo[3], $ainfo[4], $ainfo[5]) Else Return StringFormat("%02d/%02d/%04d %02d:%02d:%02d", $ainfo[0], $ainfo[1], $ainfo[2], $ainfo[3], $ainfo[4], $ainfo[5]) EndIf EndFunc Func _date_time_systemtimetofiletime($psystemtime) Local $tfiletime = DllStructCreate($tagfiletime) Local $aresult = DllCall("kernel32.dll", "bool", "SystemTimeToFileTime", "ptr", $psystemtime, "ptr", DllStructGetPtr($tfiletime)) If @error Then Return SetError(@error, @extended, 0) Return SetExtended($aresult[0], $tfiletime) EndFunc Func _date_time_systemtimetotimestr(ByRef $tsystemtime) Local $ainfo = _date_time_systemtimetoarray($tsystemtime) Return StringFormat("%02d:%02d:%02d", $ainfo[3], $ainfo[4], $ainfo[5]) EndFunc Func _date_time_systemtimetotzspecificlocaltime($putc, $ptimezone = 0) Local $tlocaltime = DllStructCreate($tagsystemtime) Local $aresult = DllCall("kernel32.dll", "bool", "SystemTimeToTzSpecificLocalTime", "ptr", $ptimezone, "ptr", $putc, "ptr", DllStructGetPtr($tlocaltime)) If @error Then Return SetError(@error, @extended, 0) Return SetExtended($aresult[0], $tlocaltime) EndFunc Func _date_time_tzspecificlocaltimetosystemtime($plocaltime, $ptimezone = 0) Local $tutc = DllStructCreate($tagsystemtime) Local $aresult = DllCall("kernel32.dll", "ptr", "TzSpecificLocalTimeToSystemTime", "ptr", $ptimezone, "ptr", $plocaltime, "ptr", DllStructGetPtr($tutc)) If @error Then Return SetError(@error, @extended, 0) Return SetExtended($aresult[0], $tutc) EndFunc #Region #AutoIt3Wrapper_Change2CUI=y #EndRegion If NOT @Compiled Then MsgBox(0, "", "This script must be compiled in order to properly demonstrate it's functionality.") Exit - 1 EndIf Local $data = "", $message_number = 0, $str, $request, $request_size, $response $inputfn = @ScriptDir & "\input.txt" $outputfn = @ScriptDir & "\output.txt" $output2fn = @ScriptDir & "\output2.txt" While True If ProcessExists("chrome.exe") = False Then Exit EndIf If FileExists($inputfn) = True Then $request = FileRead($inputfn) FileDelete($inputfn) $message_number = $message_number + 1 $request = '{"id": 0, "echo": {"text": "' & $request & '"}}' $dllstruct1_integer = DllStructCreate("int") $dllstruct1_binary = DllStructCreate("byte[4]", DllStructGetPtr($dllstruct1_integer)) DllStructSetData($dllstruct1_integer, 1, StringLen($request)) $request_size = DllStructGetData($dllstruct1_binary, 1) ConsoleWrite($request_size) ConsoleWrite($request) $wait_start = _nowcalc() $data = "" While True If _datediff("s", $wait_start, _nowcalc()) > 20 Then ExitLoop EndIf $data = ConsoleRead(False, True) If BinaryLen($data) > 0 Then ExitLoop EndIf Sleep(25) WEnd If BinaryLen($data) > 0 Then $dllstruct2_integer = DllStructCreate("int") $dllstruct2_binary = DllStructCreate("byte[4]", DllStructGetPtr($dllstruct2_integer)) DllStructSetData($dllstruct2_binary, 1, BinaryMid($data, 1, 4)) $b = DllStructGetData($dllstruct2_integer, 1) $response = BinaryToString(BinaryMid($data, 5)) FileDelete($outputfn) FileWrite($outputfn, $response) EndIf EndIf Sleep(25) WEnd