; ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Func _FileCountLines($sFilePath) Local $N = FileGetSize($sFilePath) - 1 If @error Or $N = -1 Then Return 0 Return StringLen(StringAddCR(FileRead($sFilePath, $N))) - $N + 1 EndFunc Func _FileCreate($sFilePath) Local $hOpenFile Local $hWriteFile $hOpenFile = FileOpen($sFilePath, 2) If $hOpenFile = -1 Then SetError(1) Return 0 EndIf $hWriteFile = FileWrite($hOpenFile, "") If $hWriteFile = -1 Then SetError(2) Return 0 EndIf FileClose($hOpenFile) Return 1 EndFunc Func _FileListToArray($sPath, $sFilter = "*", $iFlag = 0) Local $hSearch, $sFile, $asFileList[1] If Not FileExists($sPath) Then Return SetError(1, 1, "") If (StringInStr($sFilter, "\")) Or (StringInStr($sFilter, "/")) Or (StringInStr($sFilter, ":")) Or (StringInStr($sFilter, ">")) Or (StringInStr($sFilter, "<")) Or (StringInStr($sFilter, "|")) Or (StringStripWS($sFilter, 8) = "") Then Return SetError(2, 2, "") If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "") $hSearch = FileFindFirstFile($sPath & "\" & $sFilter) If $hSearch = -1 Then Return SetError(4, 4, "") While 1 $sFile = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf If $iFlag = 1 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") <> 0 Then ContinueLoop If $iFlag = 2 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") = 0 Then ContinueLoop ReDim $asFileList[UBound($asFileList) + 1] $asFileList[0] = $asFileList[0] + 1 $asFileList[UBound($asFileList) - 1] = $sFile WEnd FileClose($hSearch) Return $asFileList EndFunc Func _FilePrint($s_File, $i_Show = @SW_HIDE) Local $a_Ret = DllCall("shell32.dll", "long", "ShellExecute", _ "hwnd", 0, _ "string", "print", _ "string", $s_File, _ "string", "", _ "string", "", _ "int", $i_Show) If $a_Ret[0] > 32 And Not @error Then Return 1 Else SetError($a_Ret[0]) Return 0 EndIf EndFunc Func _FileReadToArray($sFilePath, ByRef $aArray) Local $hFile $hFile = FileOpen($sFilePath, 0) If $hFile = -1 Then SetError(1) Return 0 EndIf $aArray = StringSplit(StringStripCR(FileRead($hFile, FileGetSize($sFilePath))), @LF) FileClose($hFile) Return 1 EndFunc Func _FileWriteFromArray($sFilePath, $a_Array, $i_Base = 0, $i_UBound = 0) Local $hFile If Not IsArray($a_Array) Then SetError(2) Return 0 EndIf Local $last = UBound($a_Array) - 1 If $i_UBound < 1 Or $i_UBound > $last Then $i_UBound = $last If $i_Base < 0 Or $i_Base > $last Then $i_Base = 0 $hFile = FileOpen($sFilePath, 2) If $hFile = -1 Then SetError(1) Return 0 EndIf FileWrite($hFile, $a_Array[$i_Base]) For $x = $i_Base + 1 To $i_UBound FileWrite($hFile, @CRLF & $a_Array[$x]) Next FileClose($hFile) Return 1 EndFunc Func _FileWriteLog($sLogPath, $sLogMsg) Local $sDateNow Local $sTimeNow Local $sMsg Local $hOpenFile Local $hWriteFile $sDateNow = @YEAR & "-" & @MON & "-" & @MDAY $sTimeNow = @HOUR & ":" & @MIN & ":" & @SEC $sMsg = $sDateNow & " " & $sTimeNow & " : " & $sLogMsg $hOpenFile = FileOpen($sLogPath, 1) If $hOpenFile = -1 Then SetError(1) Return 0 EndIf $hWriteFile = FileWriteLine($hOpenFile, $sMsg) If $hWriteFile = -1 Then SetError(2) Return 0 EndIf FileClose($hOpenFile) Return 1 EndFunc Func _FileWriteToLine($sFile, $iLine, $sText, $fOverWrite = 0) If $iLine <= 0 Then SetError(4) Return 0 EndIf If Not IsString($sText) Then SetError(6) Return 0 EndIf If $fOverWrite <> 0 And $fOverWrite <> 1 Then SetError(5) Return 0 EndIf If Not FileExists($sFile) Then SetError(2) Return 0 EndIf Local $filtxt = FileRead($sFile, FileGetSize($sFile)) $filtxt = StringSplit($filtxt, @CRLF, 1) If UBound($filtxt, 1) < $iLine Then SetError(1) Return 0 EndIf Local $fil = FileOpen($sFile, 2) If $fil = -1 Then SetError(3) Return 0 EndIf For $i = 1 To UBound($filtxt) - 1 If $i = $iLine Then If $fOverWrite = 1 Then If $sText <> '' Then FileWrite($fil, $sText & @CRLF) Else FileWrite($fil, $sText) EndIf EndIf If $fOverWrite = 0 Then FileWrite($fil, $sText & @CRLF) FileWrite($fil, $filtxt[$i] & @CRLF) EndIf ElseIf $i < UBound($filtxt, 1) - 1 Then FileWrite($fil, $filtxt[$i] & @CRLF) ElseIf $i = UBound($filtxt, 1) - 1 Then FileWrite($fil, $filtxt[$i]) EndIf Next FileClose($fil) Return 1 EndFunc Func _PathFull($sRelativePath, $sBasePath = @WorkingDir) If Not $sRelativePath Or $sRelativePath = "." Then Return $sBasePath Local $sFullPath = StringReplace($sRelativePath, "/", "\") Local $sPath = StringLeft($sFullPath, 2) StringReplace($sFullPath, "\", "") If @extended = StringLen($sFullPath) Then Return StringLeft($sBasePath, 2) & "\" If StringLeft($sFullPath, 1) = "\" Then If $sPath = "\\" Then $sFullPath = StringTrimLeft($sFullPath, 2) $sPath &= StringLeft($sFullPath, StringInStr($sFullPath, "\") - 1) Else $sPath = StringLeft($sBasePath, 2) EndIf ElseIf Not StringInStr($sPath, ":") Then $sFullPath = $sBasePath & "\" & $sFullPath $sPath = StringLeft($sBasePath, 2) EndIf Local $aTemp = StringSplit($sFullPath, "\") Local $aPathParts[$aTemp[0]], $j = 0 For $i = 2 To $aTemp[0] If $aTemp[$i] = ".." Then If $j Then $j -= 1 ElseIf Not ($aTemp[$i] = "" And $i <> $aTemp[0]) And $aTemp[$i] <> "." Then $aPathParts[$j] = $aTemp[$i] $j += 1 EndIf Next $sFullPath = $sPath For $i = 0 To $j - 1 $sFullPath &= "\" & $aPathParts[$i] Next While StringInStr($sFullPath, ".\") $sFullPath = StringReplace($sFullPath, ".\", "\") WEnd Return $sFullPath EndFunc Func _PathMake($szDrive, $szDir, $szFName, $szExt) Local $szFullPath If StringLen($szDrive) Then If Not (StringLeft($szDrive, 2) = "\\") Then $szDrive = StringLeft($szDrive, 1) & ":" EndIf If StringLen($szDir) Then If Not (StringRight($szDir, 1) = "\") And Not (StringRight($szDir, 1) = "/") Then $szDir = $szDir & "\" EndIf If StringLen($szExt) Then If Not (StringLeft($szExt, 1) = ".") Then $szExt = "." & $szExt EndIf $szFullPath = $szDrive & $szDir & $szFName & $szExt Return $szFullPath EndFunc Func _PathSplit($szPath, ByRef $szDrive, ByRef $szDir, ByRef $szFName, ByRef $szExt) Local $drive = "" Local $dir = "" Local $fname = "" Local $ext = "" Local $pos Local $array[5] $array[0] = $szPath If StringMid($szPath, 2, 1) = ":" Then $drive = StringLeft($szPath, 2) $szPath = StringTrimLeft($szPath, 2) ElseIf StringLeft($szPath, 2) = "\\" Then $szPath = StringTrimLeft($szPath, 2) $pos = StringInStr($szPath, "\") If $pos = 0 Then $pos = StringInStr($szPath, "/") If $pos = 0 Then $drive = "\\" & $szPath $szPath = "" Else $drive = "\\" & StringLeft($szPath, $pos - 1) $szPath = StringTrimLeft($szPath, $pos - 1) EndIf EndIf Local $nPosForward = StringInStr($szPath, "/", 0, -1) Local $nPosBackward = StringInStr($szPath, "\", 0, -1) If $nPosForward >= $nPosBackward Then $pos = $nPosForward Else $pos = $nPosBackward EndIf $dir = StringLeft($szPath, $pos) $fname = StringRight($szPath, StringLen($szPath) - $pos) If StringLen($dir) = 0 Then $fname = $szPath $pos = StringInStr($fname, ".", 0, -1) If $pos Then $ext = StringRight($fname, StringLen($fname) - ($pos - 1)) $fname = StringLeft($fname, $pos - 1) EndIf $szDrive = $drive $szDir = $dir $szFName = $fname $szExt = $ext $array[1] = $drive $array[2] = $dir $array[3] = $fname $array[4] = $ext Return $array EndFunc Func _ReplaceStringInFile($szFileName, $szSearchString, $szReplaceString, $fCaseness = 0, $fOccurance = 1) Local $iRetVal = 0 Local $szTempFile, $hWriteHandle, $aFileLines, $nCount, $sEndsWith, $hFile If StringInstr(FileGetAttrib($szFileName),"R") then SetError(6) Return -1 EndIf $hFile = FileOpen($szFileName, 0) If $hFile = -1 Then SetError(1) Return -1 EndIf Local $s_TotFile = FileRead($hFile, FileGetSize($szFileName)) If StringRight($s_TotFile, 2) = @CRLF Then $sEndsWith = @CRLF ElseIf StringRight($s_TotFile, 1) = @CR Then $sEndsWith = @CR ElseIf StringRight($s_TotFile, 1) = @LF Then $sEndsWith = @LF Else $sEndsWith = "" EndIf $aFileLines = StringSplit(StringStripCR($s_TotFile), @LF) FileClose($hFile) $szTempFile = _TempFile() $hWriteHandle = FileOpen($szTempFile, 2) If $hWriteHandle = -1 Then SetError(2) Return -1 EndIf For $nCount = 1 To $aFileLines[0] If StringInStr($aFileLines[$nCount], $szSearchString, $fCaseness) Then $aFileLines[$nCount] = StringReplace($aFileLines[$nCount], $szSearchString, $szReplaceString, 1 - $fOccurance, $fCaseness) $iRetVal = $iRetVal + 1 If $fOccurance = 0 Then $iRetVal = 1 ExitLoop EndIf EndIf Next For $nCount = 1 To $aFileLines[0] - 1 If FileWriteLine($hWriteHandle, $aFileLines[$nCount]) = 0 Then SetError(3) FileClose($hWriteHandle) Return -1 EndIf Next If $aFileLines[$nCount] <> "" Then FileWrite($hWriteHandle, $aFileLines[$nCount] & $sEndsWith) FileClose($hWriteHandle) If FileDelete($szFileName) = 0 Then SetError(4) Return -1 EndIf If FileMove($szTempFile, $szFileName) = 0 Then SetError(5) Return -1 EndIf Return $iRetVal EndFunc Func _TempFile($s_DirectoryName = @TempDir, $s_FilePrefix = "~", $s_FileExtension = ".tmp", $i_RandomLength = 7) Local $s_TempName If Not FileExists($s_DirectoryName) Then $s_DirectoryName = @TempDir If Not FileExists($s_DirectoryName) Then $s_DirectoryName = @ScriptDir If StringRight($s_DirectoryName, 1) <> "\" Then $s_DirectoryName = $s_DirectoryName & "\" Do $s_TempName = "" While StringLen($s_TempName) < $i_RandomLength $s_TempName = $s_TempName & Chr(Random(97, 122, 1)) WEnd $s_TempName = $s_DirectoryName & $s_FilePrefix & $s_TempName & $s_FileExtension Until Not FileExists($s_TempName) Return ($s_TempName) EndFunc ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $BS_GROUPBOX = 0x0007 Global Const $BS_BOTTOM = 0x0800 Global Const $BS_CENTER = 0x0300 Global Const $BS_DEFPUSHBUTTON = 0x0001 Global Const $BS_LEFT = 0x0100 Global Const $BS_MULTILINE = 0x2000 Global Const $BS_PUSHBOX = 0x000A Global Const $BS_PUSHLIKE = 0x1000 Global Const $BS_RIGHT = 0x0200 Global Const $BS_RIGHTBUTTON = 0x0020 Global Const $BS_TOP = 0x0400 Global Const $BS_VCENTER = 0x0C00 Global Const $BS_FLAT = 0x8000 Global Const $BS_ICON = 0x0040 Global Const $BS_BITMAP = 0x0080 Global Const $BS_NOTIFY = 0x4000 Global Const $BS_3STATE = 0x0005 Global Const $BS_AUTO3STATE = 0x0006 Global Const $BS_AUTOCHECKBOX = 0x0003 Global Const $BS_CHECKBOX = 0x0002 Global Const $BS_AUTORADIOBUTTON = 0x0009 ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $ES_LEFT = 0 Global Const $ES_CENTER = 1 Global Const $ES_RIGHT = 2 Global Const $ES_MULTILINE = 4 Global Const $ES_UPPERCASE = 8 Global Const $ES_LOWERCASE = 16 Global Const $ES_PASSWORD = 32 Global Const $ES_AUTOVSCROLL = 64 Global Const $ES_AUTOHSCROLL = 128 Global Const $ES_NOHIDESEL = 256 Global Const $ES_OEMCONVERT = 1024 Global Const $ES_READONLY = 2048 Global Const $ES_WANTRETURN = 4096 Global Const $ES_NUMBER = 8192 Global Const $EC_ERR = -1 Global Const $ECM_FIRST = 0X1500 Global Const $EM_CANUNDO = 0xC6 Global Const $EM_EMPTYUNDOBUFFER = 0xCD Global Const $EM_GETFIRSTVISIBLELINE = 0xCE Global Const $EM_GETLINE = 0xC4 Global Const $EM_GETLINECOUNT = 0xBA Global Const $EM_GETMODIFY = 0xB8 Global Const $EM_GETRECT = 0xB2 Global Const $EM_GETSEL = 0xB0 Global Const $EM_LINEFROMCHAR = 0xC9 Global Const $EM_LINEINDEX = 0xBB Global Const $EM_LINELENGTH = 0xC1 Global Const $EM_LINESCROLL = 0xB6 Global Const $EM_REPLACESEL = 0xC2 Global Const $EM_SCROLL = 0xB5 Global Const $EM_SCROLLCARET = 0x00B7 Global Const $EM_SETMODIFY = 0xB9 Global Const $EM_SETSEL = 0xB1 Global Const $EM_UNDO = 0xC7 Global Const $EM_SETREADONLY = 0x00CF Global Const $EM_SETTABSTOPS = 0x00CB ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $GUI_EVENT_CLOSE = -3 Global Const $GUI_EVENT_MINIMIZE = -4 Global Const $GUI_EVENT_RESTORE = -5 Global Const $GUI_EVENT_MAXIMIZE = -6 Global Const $GUI_EVENT_PRIMARYDOWN = -7 Global Const $GUI_EVENT_PRIMARYUP = -8 Global Const $GUI_EVENT_SECONDARYDOWN = -9 Global Const $GUI_EVENT_SECONDARYUP = -10 Global Const $GUI_EVENT_MOUSEMOVE = -11 Global Const $GUI_EVENT_RESIZED = -12 Global Const $GUI_EVENT_DROPPED = -13 Global Const $GUI_RUNDEFMSG = 'GUI_RUNDEFMSG' Global Const $GUI_AVISTOP = 0 Global Const $GUI_AVISTART = 1 Global Const $GUI_AVICLOSE = 2 Global Const $GUI_CHECKED = 1 Global Const $GUI_INDETERMINATE = 2 Global Const $GUI_UNCHECKED = 4 Global Const $GUI_DROPACCEPTED = 8 Global Const $GUI_NODROPACCEPTED = 4096 Global Const $GUI_ACCEPTFILES = $GUI_DROPACCEPTED Global Const $GUI_SHOW = 16 Global Const $GUI_HIDE = 32 Global Const $GUI_ENABLE = 64 Global Const $GUI_DISABLE = 128 Global Const $GUI_FOCUS = 256 Global Const $GUI_NOFOCUS = 8192 Global Const $GUI_DEFBUTTON = 512 Global Const $GUI_EXPAND = 1024 Global Const $GUI_ONTOP = 2048 Global Const $GUI_FONTITALIC = 2 Global Const $GUI_FONTUNDER = 4 Global Const $GUI_FONTSTRIKE = 8 Global Const $GUI_DOCKAUTO = 0x0001 Global Const $GUI_DOCKLEFT = 0x0002 Global Const $GUI_DOCKRIGHT = 0x0004 Global Const $GUI_DOCKHCENTER = 0x0008 Global Const $GUI_DOCKTOP = 0x0020 Global Const $GUI_DOCKBOTTOM = 0x0040 Global Const $GUI_DOCKVCENTER = 0x0080 Global Const $GUI_DOCKWIDTH = 0x0100 Global Const $GUI_DOCKHEIGHT = 0x0200 Global Const $GUI_DOCKSIZE = 0x0300 Global Const $GUI_DOCKMENUBAR = 0x0220 Global Const $GUI_DOCKSTATEBAR = 0x0240 Global Const $GUI_DOCKALL = 0x0322 Global Const $GUI_DOCKBORDERS = 0x0066 Global Const $GUI_GR_CLOSE = 1 Global Const $GUI_GR_LINE = 2 Global Const $GUI_GR_BEZIER = 4 Global Const $GUI_GR_MOVE = 6 Global Const $GUI_GR_COLOR = 8 Global Const $GUI_GR_RECT = 10 Global Const $GUI_GR_ELLIPSE = 12 Global Const $GUI_GR_PIE = 14 Global Const $GUI_GR_DOT = 16 Global Const $GUI_GR_PIXEL = 18 Global Const $GUI_GR_HINT = 20 Global Const $GUI_GR_REFRESH = 22 Global Const $GUI_GR_PENSIZE = 24 Global Const $GUI_GR_NOBKCOLOR = -2 Global Const $GUI_BKCOLOR_DEFAULT = -1 Global Const $GUI_BKCOLOR_TRANSPARENT = -2 Global Const $GUI_BKCOLOR_LV_ALTERNATE = 0xFE000000 Global Const $GUI_WS_EX_PARENTDRAG = 0x00100000 ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $SS_LEFT = 0 Global Const $SS_CENTER = 1 Global Const $SS_RIGHT = 2 Global Const $SS_ICON = 3 Global Const $SS_BLACKRECT = 4 Global Const $SS_GRAYRECT = 5 Global Const $SS_WHITERECT = 6 Global Const $SS_BLACKFRAME = 7 Global Const $SS_GRAYFRAME = 8 Global Const $SS_WHITEFRAME = 9 Global Const $SS_SIMPLE = 11 Global Const $SS_LEFTNOWORDWRAP = 12 Global Const $SS_BITMAP = 15 Global Const $SS_ETCHEDHORZ = 16 Global Const $SS_ETCHEDVERT = 17 Global Const $SS_ETCHEDFRAME = 18 Global Const $SS_NOPREFIX = 0x0080 Global Const $SS_NOTIFY = 0x0100 Global Const $SS_CENTERIMAGE = 0x0200 Global Const $SS_RIGHTJUST = 0x0400 Global Const $SS_SUNKEN = 0x1000 ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $WS_TILED = 0 Global Const $WS_OVERLAPPED = 0 Global Const $WS_MAXIMIZEBOX = 0x00010000 Global Const $WS_MINIMIZEBOX = 0x00020000 Global Const $WS_TABSTOP = 0x00010000 Global Const $WS_GROUP = 0x00020000 Global Const $WS_SIZEBOX = 0x00040000 Global Const $WS_THICKFRAME = 0x00040000 Global Const $WS_SYSMENU = 0x00080000 Global Const $WS_HSCROLL = 0x00100000 Global Const $WS_VSCROLL = 0x00200000 Global Const $WS_DLGFRAME = 0x00400000 Global Const $WS_BORDER = 0x00800000 Global Const $WS_CAPTION = 0x00C00000 Global Const $WS_OVERLAPPEDWINDOW = 0x00CF0000 Global Const $WS_TILEDWINDOW = 0x00CF0000 Global Const $WS_MAXIMIZE = 0x01000000 Global Const $WS_CLIPCHILDREN = 0x02000000 Global Const $WS_CLIPSIBLINGS = 0x04000000 Global Const $WS_DISABLED = 0x08000000 Global Const $WS_VISIBLE = 0x10000000 Global Const $WS_MINIMIZE = 0x20000000 Global Const $WS_CHILD = 0x40000000 Global Const $WS_POPUP = 0x80000000 Global Const $WS_POPUPWINDOW = 0x80880000 Global Const $DS_MODALFRAME = 0x80 Global Const $DS_SETFOREGROUND = 0x00000200 Global Const $DS_CONTEXTHELP = 0x00002000 Global Const $WS_EX_ACCEPTFILES = 0x00000010 Global Const $WS_EX_MDICHILD = 0x00000040 Global Const $WS_EX_APPWINDOW = 0x00040000 Global Const $WS_EX_CLIENTEDGE = 0x00000200 Global Const $WS_EX_CONTEXTHELP = 0x00000400 Global Const $WS_EX_DLGMODALFRAME = 0x00000001 Global Const $WS_EX_LEFTSCROLLBAR = 0x00004000 Global Const $WS_EX_OVERLAPPEDWINDOW = 0x00000300 Global Const $WS_EX_RIGHT = 0x00001000 Global Const $WS_EX_STATICEDGE = 0x00020000 Global Const $WS_EX_TOOLWINDOW = 0x00000080 Global Const $WS_EX_TOPMOST = 0x00000008 Global Const $WS_EX_TRANSPARENT = 0x00000020 Global Const $WS_EX_WINDOWEDGE = 0x00000100 Global Const $WS_EX_LAYERED = 0x00080000 Global Const $WM_SIZE = 0x05 Global Const $WM_SIZING = 0x0214 Global Const $WM_USER = 0X400 Global Const $WM_GETTEXTLENGTH = 0x000E Global Const $WM_GETTEXT = 0x000D ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $ACS_CENTER = 1 Global Const $ACS_TRANSPARENT = 2 Global Const $ACS_AUTOPLAY = 4 Global Const $ACS_TIMER = 8 Global Const $ACS_NONTRANSPARENT = 16 ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $CBS_SIMPLE = 0x0001 Global Const $CBS_DROPDOWN = 0x0002 Global Const $CBS_DROPDOWNLIST = 0x0003 Global Const $CBS_AUTOHSCROLL = 0x0040 Global Const $CBS_OEMCONVERT = 0x0080 Global Const $CBS_SORT = 0x0100 Global Const $CBS_NOINTEGRALHEIGHT = 0x0400 Global Const $CBS_DISABLENOSCROLL = 0x0800 Global Const $CBS_UPPERCASE = 0x2000 Global Const $CBS_LOWERCASE = 0x4000 Global Const $CB_ERR = -1 Global Const $CB_ERRATTRIBUTE = -3 Global Const $CB_ERRREQUIRED = -4 Global Const $CB_ERRSPACE = -2 Global Const $CB_OKAY = 0 Global Const $CB_ADDSTRING = 0x143 Global Const $CB_DELETESTRING = 0x144 Global Const $CB_DIR = 0x145 Global Const $CB_FINDSTRING = 0x14C Global Const $CB_FINDSTRINGEXACT = 0x158 Global Const $CB_GETCOUNT = 0x146 Global Const $CB_GETCURSEL = 0x147 Global Const $CB_GETDROPPEDCONTROLRECT = 0x152 Global Const $CB_GETDROPPEDSTATE = 0x157 Global Const $CB_GETDROPPEDWIDTH = 0X15f Global Const $CB_GETEDITSEL = 0x140 Global Const $CB_GETEXTENDEDUI = 0x156 Global Const $CB_GETHORIZONTALEXTENT = 0x15d Global Const $CB_GETITEMDATA = 0x150 Global Const $CB_GETITEMHEIGHT = 0x154 Global Const $CB_GETLBTEXT = 0x148 Global Const $CB_GETLBTEXTLEN = 0x149 Global Const $CB_GETLOCALE = 0x15A Global Const $CB_GETMINVISIBLE = 0x1702 Global Const $CB_GETTOPINDEX = 0x15b Global Const $CB_INITSTORAGE = 0x161 Global Const $CB_LIMITTEXT = 0x141 Global Const $CB_RESETCONTENT = 0x14B Global Const $CB_INSERTSTRING = 0x14A Global Const $CB_SELECTSTRING = 0x14D Global Const $CB_SETCURSEL = 0x14E Global Const $CB_SETDROPPEDWIDTH = 0x160 Global Const $CB_SETEDITSEL = 0x142 Global Const $CB_SETEXTENDEDUI = 0x155 Global Const $CB_SETHORIZONTALEXTENT = 0x15e Global Const $CB_SETITEMDATA = 0x151 Global Const $CB_SETITEMHEIGHT = 0x153 Global Const $CB_SETLOCALE = 0x15 Global Const $CB_SETMINVISIBLE = 0x1701 Global Const $CB_SETTOPINDEX = 0x15c Global Const $CB_SHOWDROPDOWN = 0x14F Global Const $CB_DDL_ARCHIVE = 0x20 Global Const $CB_DDL_DIRECTORY = 0x10 Global Const $CB_DDL_DRIVES = 0x4000 Global Const $CB_DDL_EXCLUSIVE = 0x8000 Global Const $CB_DDL_HIDDEN = 0x2 Global Const $CB_DDL_READONLY = 0x1 Global Const $CB_DDL_READWRITE = 0x0 Global Const $CB_DDL_SYSTEM = 0x4 ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $DTS_SHORTDATEFORMAT = 0 Global Const $DTS_UPDOWN = 1 Global Const $DTS_SHOWNONE = 2 Global Const $DTS_LONGDATEFORMAT = 4 Global Const $DTS_TIMEFORMAT = 9 Global Const $DTS_RIGHTALIGN = 32 Global Const $MCS_NOTODAY = 16 Global Const $MCS_NOTODAYCIRCLE = 8 Global Const $MCS_WEEKNUMBERS = 4 Global Const $MCM_FIRST = 0x1000 Global Const $MCM_GETCOLOR = ($MCM_FIRST + 11) Global Const $MCM_GETFIRSTDAYOFWEEK = ($MCM_FIRST + 16) Global Const $MCM_GETMAXSELCOUNT = ($MCM_FIRST + 3) Global Const $MCM_GETMAXTODAYWIDTH = ($MCM_FIRST + 21) Global Const $MCM_GETMINREQRECT = ($MCM_FIRST + 9) Global Const $MCM_GETMONTHDELTA = ($MCM_FIRST + 19) Global Const $MCS_MULTISELECT = 0x2 Global Const $MCM_SETCOLOR = ($MCM_FIRST + 10) Global Const $MCM_SETFIRSTDAYOFWEEK = ($MCM_FIRST + 15) Global Const $MCM_SETMAXSELCOUNT = ($MCM_FIRST + 4) Global Const $MCM_SETMONTHDELTA = ($MCM_FIRST + 20) Global Const $MCSC_BACKGROUND = 0 Global Const $MCSC_MONTHBK = 4 Global Const $MCSC_TEXT = 1 Global Const $MCSC_TITLEBK = 2 Global Const $MCSC_TITLETEXT = 3 Global Const $MCSC_TRAILINGTEXT = 5 ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $LBS_NOTIFY = 0x0001 Global Const $LBS_SORT = 0x0002 Global Const $LBS_USETABSTOPS = 0x0080 Global Const $LBS_NOINTEGRALHEIGHT = 0x0100 Global Const $LBS_DISABLENOSCROLL = 0x1000 Global Const $LBS_NOSEL = 0x4000 Global Const $LBS_STANDARD = 0xA00003 Global Const $LB_ERR = -1 Global Const $LB_ERRATTRIBUTE = -3 Global Const $LB_ERRREQUIRED = -4 Global Const $LB_ERRSPACE = -2 Global Const $LB_ADDSTRING = 0x180 Global Const $LB_DELETESTRING = 0x182 Global Const $LB_DIR = 0x18D Global Const $LB_FINDSTRING = 0x18F Global Const $LB_FINDSTRINGEXACT = 0x1A2 Global Const $LB_GETANCHORINDEX = 0x019D Global Const $LB_GETCARETINDEX = 0x019F Global Const $LB_GETCOUNT = 0x18B Global Const $LB_GETCURSEL = 0x188 Global Const $LB_GETHORIZONTALEXTENT = 0x193 Global Const $LB_GETITEMRECT = 0x198 Global Const $LB_GETLISTBOXINFO = 0x01B2 Global Const $LB_GETLOCALE = 0x1A6 Global Const $LB_GETSEL = 0x0187 Global Const $LB_GETSELCOUNT = 0x0190 Global Const $LB_GETSELITEMS = 0X191 Global Const $LB_GETTEXT = 0x0189 Global Const $LB_GETTEXTLEN = 0x018A Global Const $LB_GETTOPINDEX = 0x018E Global Const $LB_INSERTSTRING = 0x181 Global Const $LB_RESETCONTENT = 0x184 Global Const $LB_SELECTSTRING = 0x18C Global Const $LB_SETITEMHEIGHT = 0x1A0 Global Const $LB_SELITEMRANGE = 0x19B Global Const $LB_SELITEMRANGEEX = 0x0183 Global Const $LB_SETANCHORINDEX = 0x19C Global Const $LB_SETCARETINDEX = 0x19E Global Const $LB_SETCURSEL = 0x186 Global Const $LB_SETHORIZONTALEXTENT = 0x194 Global Const $LB_SETLOCALE = 0x1A5 Global Const $LB_SETSEL = 0x0185 Global Const $LB_SETTOPINDEX = 0x197 Global Const $LBS_MULTIPLESEL = 0x8 Global Const $DDL_ARCHIVE = 0x20 Global Const $DDL_DIRECTORY = 0x10 Global Const $DDL_DRIVES = 0x4000 Global Const $DDL_EXCLUSIVE = 0x8000 Global Const $DDL_HIDDEN = 0x2 Global Const $DDL_READONLY = 0x1 Global Const $DDL_READWRITE = 0x0 Global Const $DDL_SYSTEM = 0x4 ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $LVS_ICON = 0x0000 Global Const $LVS_REPORT = 0x0001 Global Const $LVS_SMALLICON = 0x0002 Global Const $LVS_LIST = 0x0003 Global Const $LVS_EDITLABELS = 0x0200 Global Const $LVS_NOCOLUMNHEADER = 0x4000 Global Const $LVS_NOSORTHEADER = 0x8000 Global Const $LVS_SINGLESEL = 0x0004 Global Const $LVS_SHOWSELALWAYS = 0x0008 Global Const $LVS_SORTASCENDING = 0X0010 Global Const $LVS_SORTDESCENDING = 0x0020 Global Const $LVS_NOLABELWRAP = 0x0080 Global Const $LVS_EX_FULLROWSELECT = 0x00000020 Global Const $LVS_EX_GRIDLINES = 0x00000001 Global Const $LVS_EX_SUBITEMIMAGES = 0x00000002 Global Const $LVS_EX_CHECKBOXES = 0x00000004 Global Const $LVS_EX_TRACKSELECT = 0x00000008 Global Const $LVS_EX_HEADERDRAGDROP = 0x00000010 Global Const $LVS_EX_FLATSB = 0x00000100 Global Const $LVS_EX_BORDERSELECT = 0x00008000 Global Const $LVS_EX_HIDELABELS = 0x20000 Global Const $LVS_EX_INFOTIP = 0x400 Global Const $LVS_EX_LABELTIP = 0x4000 Global Const $LVS_EX_ONECLICKACTIVATE = 0x40 Global Const $LVS_EX_REGIONAL = 0x200 Global Const $LVS_EX_SINGLEROW = 0x40000 Global Const $LVS_EX_TWOCLICKACTIVATE = 0x80 Global Const $LVS_EX_UNDERLINEHOT = 0x800 Global Const $LVS_EX_UNDERLINECOLD = 0x1000 Global Const $LV_ERR = -1 Global Const $CCM_FIRST = 0x2000 Global Const $CCM_GETUNICODEFORMAT = ($CCM_FIRST + 6) Global Const $CCM_SETUNICODEFORMAT = ($CCM_FIRST + 5) Global Const $CLR_NONE = 0xFFFFFFFF Global Const $LVM_FIRST = 0x1000 Global Const $LV_VIEW_DETAILS = 0x1 Global Const $LV_VIEW_ICON = 0x0 Global Const $LV_VIEW_LIST = 0x3 Global Const $LV_VIEW_SMALLICON = 0x2 Global Const $LV_VIEW_TILE = 0x4 Global Const $LVCF_FMT = 0x1 Global Const $LVCF_WIDTH = 0x2 Global Const $LVCF_TEXT = 0x4 Global Const $LVCFMT_CENTER = 0x2 Global Const $LVCFMT_LEFT = 0x0 Global Const $LVCFMT_RIGHT = 0x1 Global Const $LVA_ALIGNLEFT = 0x1 Global Const $LVA_ALIGNTOP = 0x2 Global Const $LVA_DEFAULT = 0x0 Global Const $LVA_SNAPTOGRID = 0x5 Global Const $LVIF_STATE = 0x8 Global Const $LVIF_TEXT = 0x1 Global Const $LVFI_PARAM = 0x1 Global Const $LVFI_PARTIAL = 0x8 Global Const $LVFI_STRING = 0x2 Global Const $LVFI_WRAP = 0x20 Global Const $VK_LEFT = 0x25 Global Const $VK_RIGHT = 0x27 Global Const $VK_UP = 0x26 Global Const $VK_DOWN = 0x28 Global Const $VK_END = 0x23 Global Const $VK_PRIOR = 0x21 Global Const $VK_NEXT = 0x22 Global Const $LVIR_BOUNDS = 0 Global Const $LVIS_CUT = 0x4 Global Const $LVIS_DROPHILITED = 0x8 Global Const $LVIS_FOCUSED = 0x1 Global Const $LVIS_OVERLAYMASK = 0xF00 Global Const $LVIS_SELECTED = 0x2 Global Const $LVIS_STATEIMAGEMASK = 0xF000 Global Const $LVM_ARRANGE = ($LVM_FIRST + 22) Global Const $LVM_CANCELEDITLABEL = ($LVM_FIRST + 179) Global Const $LVM_DELETECOLUMN = 0x101C Global Const $LVM_DELETEITEM = 0x1008 Global Const $LVM_DELETEALLITEMS = 0x1009 Global Const $LVM_EDITLABELA = ($LVM_FIRST + 23) Global Const $LVM_EDITLABEL = $LVM_EDITLABELA Global Const $LVM_ENABLEGROUPVIEW = ($LVM_FIRST + 157) Global Const $LVM_ENSUREVISIBLE = ($LVM_FIRST + 19) Global Const $LVM_FINDITEM = ($LVM_FIRST + 13) Global Const $LVM_GETBKCOLOR = ($LVM_FIRST + 0) Global Const $LVM_GETCALLBACKMASK = ($LVM_FIRST + 10) Global Const $LVM_GETCOLUMNORDERARRAY = ($LVM_FIRST + 59) Global Const $LVM_GETCOLUMNWIDTH = ($LVM_FIRST + 29) Global Const $LVM_GETCOUNTPERPAGE = ($LVM_FIRST + 40) Global Const $LVM_GETEDITCONTROL = ($LVM_FIRST + 24) Global Const $LVM_GETEXTENDEDLISTVIEWSTYLE = ($LVM_FIRST + 55) Global Const $LVM_GETHEADER = ($LVM_FIRST + 31) Global Const $LVM_GETHOTCURSOR = ($LVM_FIRST + 63) Global Const $LVM_GETHOTITEM = ($LVM_FIRST + 61) Global Const $LVM_GETHOVERTIME = ($LVM_FIRST + 72) Global Const $LVM_GETIMAGELIST = ($LVM_FIRST + 2) Global Const $LVM_GETITEMA = ($LVM_FIRST + 5) Global Const $LVM_GETITEMCOUNT = 0x1004 Global Const $LVM_GETITEMSTATE = ($LVM_FIRST + 44) Global Const $LVM_GETITEMTEXTA = ($LVM_FIRST + 45) Global Const $LVM_GETNEXTITEM = 0x100c Global Const $LVM_GETSELECTEDCOLUMN = ($LVM_FIRST + 174) Global Const $LVM_GETSELECTEDCOUNT = ($LVM_FIRST + 50) Global Const $LVM_GETSUBITEMRECT = ($LVM_FIRST + 56) Global Const $LVM_GETTOPINDEX = ($LVM_FIRST + 39) Global Const $LVM_GETUNICODEFORMAT = $CCM_GETUNICODEFORMAT Global Const $LVM_GETVIEW = ($LVM_FIRST + 143) Global Const $LVM_GETVIEWRECT = ($LVM_FIRST + 34) Global Const $LVM_INSERTCOLUMNA = ($LVM_FIRST + 27) Global Const $LVM_INSERTITEMA = ($LVM_FIRST + 7) Global Const $LVM_REDRAWITEMS = ($LVM_FIRST + 21) Global Const $LVM_SETUNICODEFORMAT = $CCM_SETUNICODEFORMAT Global Const $LVM_SCROLL = ($LVM_FIRST + 20) Global Const $LVM_SETBKCOLOR = 0x1001 Global Const $LVM_SETCALLBACKMASK = ($LVM_FIRST + 11) Global Const $LVM_SETCOLUMNA = ($LVM_FIRST + 26) Global Const $LVM_SETCOLUMNORDERARRAY = ($LVM_FIRST + 58) Global Const $LVM_SETCOLUMNWIDTH = 0x101E Global Const $LVM_SETEXTENDEDLISTVIEWSTYLE = 0x1036 Global Const $LVM_SETHOTITEM = ($LVM_FIRST + 60) Global Const $LVM_SETHOVERTIME = ($LVM_FIRST + 71) Global Const $LVM_SETICONSPACING = ($LVM_FIRST + 53) Global Const $LVM_SETITEMCOUNT = ($LVM_FIRST + 47) Global Const $LVM_SETITEMPOSITION = ($LVM_FIRST + 15) Global Const $LVM_SETITEMSTATE = ($LVM_FIRST + 43) Global Const $LVM_SETITEMTEXTA = ($LVM_FIRST + 46) Global Const $LVM_SETSELECTEDCOLUMN = ($LVM_FIRST + 140) Global Const $LVM_SETTEXTCOLOR = ($LVM_FIRST + 36) Global Const $LVM_SETTEXTBKCOLOR = ($LVM_FIRST + 38) Global Const $LVM_SETVIEW = ($LVM_FIRST + 142) Global Const $LVM_UPDATE = ($LVM_FIRST + 42) Global Const $LVNI_ABOVE = 0x100 Global Const $LVNI_BELOW = 0x200 Global Const $LVNI_TOLEFT = 0x400 Global Const $LVNI_TORIGHT = 0x800 Global Const $LVNI_ALL = 0x0 Global Const $LVNI_CUT = 0x4 Global Const $LVNI_DROPHILITED = 0x8 Global Const $LVNI_FOCUSED = 0x1 Global Const $LVNI_SELECTED = 0x2 Global Const $LVSCW_AUTOSIZE = -1 Global Const $LVSCW_AUTOSIZE_USEHEADER = -2 Global Const $LVSICF_NOINVALIDATEALL = 0x1 Global Const $LVSICF_NOSCROLL = 0x2 Global Const $LVSIL_NORMAL = 0 Global Const $LVSIL_SMALL = 1 Global Const $LVSIL_STATE = 2 ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $TBS_AUTOTICKS = 0x0001 Global Const $TBS_VERT = 0x0002 Global Const $TBS_HORZ = 0x0000 Global Const $TBS_TOP = 0x0004 Global Const $TBS_BOTTOM = 0x0000 Global Const $TBS_LEFT = 0x0004 Global Const $TBS_RIGHT = 0x0000 Global Const $TBS_BOTH = 0x0008 Global Const $TBS_NOTICKS = 0x0010 Global Const $TBS_NOTHUMB = 0x0080 Global Const $TWM_USER = 0x400 Global Const $TBM_CLEARTICS = ($TWM_USER + 9) Global Const $TBM_GETLINESIZE = ($TWM_USER + 24) Global Const $TBM_GETPAGESIZE = ($TWM_USER + 22) Global Const $TBM_GETNUMTICS = ($TWM_USER + 16) Global Const $TBM_GETPOS = $TWM_USER Global Const $TBM_GETRANGEMAX = ($TWM_USER + 2) Global Const $TBM_GETRANGEMIN = ($TWM_USER + 1) Global Const $TBM_SETLINESIZE = ($TWM_USER + 23) Global Const $TBM_SETPAGESIZE = ($TWM_USER + 21) Global Const $TBM_SETPOS = ($TWM_USER + 5) Global Const $TBM_SETTICFREQ = ($TWM_USER + 20) ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $TVS_HASBUTTONS = 0x0001 Global Const $TVS_HASLINES = 0x0002 Global Const $TVS_LINESATROOT = 0x0004 Global Const $TVS_DISABLEDRAGDROP = 0x0010 Global Const $TVS_SHOWSELALWAYS = 0x0020 Global Const $TVS_NOTOOLTIPS = 0x0080 Global Const $TVS_CHECKBOXES = 0x0100 Global Const $TVS_TRACKSELECT = 0x0200 Global Const $TVS_SINGLEEXPAND = 0x0400 Global Const $TVS_FULLROWSELECT = 0x1000 Global Const $TVS_NOSCROLL = 0x2000 Global Const $TVS_NONEVENHEIGHT = 0x4000 Global Const $TVE_COLLAPSE = 0x0001 Global Const $TVE_EXPAND = 0x0002 Global Const $TVE_TOGGLE = 0x0003 Global Const $TVE_EXPANDPARTIAL = 0x4000 Global Const $TVE_COLLAPSERESET = 0x8000 Global Const $TVGN_ROOT = 0x0000 Global Const $TVGN_NEXT = 0x0001 Global Const $TVGN_PARENT = 0x0003 Global Const $TVGN_CHILD = 0x0004 Global Const $TVGN_CARET = 0x0009 Global Const $TVI_ROOT = 0xFFFF0000 Global Const $TVI_FIRST = 0xFFFF0001 Global Const $TVI_LAST = 0xFFFF0002 Global Const $TVI_SORT = 0xFFFF0003 Global Const $TVIF_TEXT = 0x0001 Global Const $TVIF_IMAGE = 0x0002 Global Const $TVIF_PARAM = 0x0004 Global Const $TVIF_STATE = 0x0008 Global Const $TVIF_HANDLE = 0x0010 Global Const $TVIF_SELECTEDIMAGE = 0x0020 Global Const $TVIF_CHILDREN = 0x0040 Global Const $TVIS_SELECTED = 0x0002 Global Const $TVIS_CUT = 0x0004 Global Const $TVIS_DROPHILITED = 0x0008 Global Const $TVIS_BOLD = 0x0010 Global Const $TVIS_EXPANDED = 0x0020 Global Const $TVIS_EXPANDEDONCE = 0x0040 Global Const $TVIS_EXPANDPARTIAL = 0x0080 Global Const $TVIS_OVERLAYMASK = 0x0F00 Global Const $TVIS_STATEIMAGEMASK = 0xF000 Global Const $TV_FIRST = 0x1100 Global Const $TVM_INSERTITEM = $TV_FIRST + 0 Global Const $TVM_DELETEITEM = $TV_FIRST + 1 Global Const $TVM_EXPAND = $TV_FIRST + 2 Global Const $TVM_GETCOUNT = $TV_FIRST + 5 Global Const $TVM_GETINDENT = $TV_FIRST + 6 Global Const $TVM_SETINDENT = $TV_FIRST + 7 Global Const $TVM_GETIMAGELIST = $TV_FIRST + 8 Global Const $TVM_SETIMAGELIST = $TV_FIRST + 9 Global Const $TVM_GETNEXTITEM = $TV_FIRST + 10 Global Const $TVM_SELECTITEM = $TV_FIRST + 11 Global Const $TVM_GETITEM = $TV_FIRST + 12 Global Const $TVM_SETITEM = $TV_FIRST + 13 Global Const $TVM_SORTCHILDREN = $TV_FIRST + 19 Global Const $TVM_ENSUREVISIBLE = $TV_FIRST + 20 Global Const $TVM_SETBKCOLOR = $TV_FIRST + 29 Global Const $TVM_SETTEXTCOLOR = $TV_FIRST + 30 Global Const $TVM_GETBKCOLOR = $TV_FIRST + 31 Global Const $TVM_GETTEXTCOLOR = $TV_FIRST + 32 Global Const $TVM_SETLINECOLOR = $TV_FIRST + 40 Global Const $TVM_GETLINECOLOR = $TV_FIRST + 41 ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $UDS_WRAP = 0x0001 Global Const $UDS_SETBUDDYINT = 0x0002 Global Const $UDS_ALIGNRIGHT = 0x0004 Global Const $UDS_ALIGNLEFT = 0x0008 Global Const $UDS_ARROWKEYS = 0x0020 Global Const $UDS_HORZ = 0x0040 Global Const $UDS_NOTHOUSANDS = 0x0080 ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $GUI_SS_DEFAULT_AVI = $ACS_TRANSPARENT Global Const $GUI_SS_DEFAULT_BUTTON = 0 Global Const $GUI_SS_DEFAULT_CHECKBOX = 0 Global Const $GUI_SS_DEFAULT_COMBO = BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL) Global Const $GUI_SS_DEFAULT_DATE = $DTS_LONGDATEFORMAT Global Const $GUI_SS_DEFAULT_EDIT = BitOR($ES_WANTRETURN, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL) Global Const $GUI_SS_DEFAULT_GRAPHIC = 0 Global Const $GUI_SS_DEFAULT_GROUP = 0 Global Const $GUI_SS_DEFAULT_ICON = $SS_NOTIFY Global Const $GUI_SS_DEFAULT_INPUT = BitOR($ES_LEFT, $ES_AUTOHSCROLL) Global Const $GUI_SS_DEFAULT_LABEL = 0 Global Const $GUI_SS_DEFAULT_LIST = BitOR($LBS_SORT, $WS_BORDER, $WS_VSCROLL, $LBS_NOTIFY) Global Const $GUI_SS_DEFAULT_LISTVIEW = BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL) Global Const $GUI_SS_DEFAULT_MONTHCAL = 0 Global Const $GUI_SS_DEFAULT_PIC = $SS_NOTIFY Global Const $GUI_SS_DEFAULT_PROGRESS = 0 Global Const $GUI_SS_DEFAULT_RADIO = 0 Global Const $GUI_SS_DEFAULT_SLIDER = $TBS_AUTOTICKS Global Const $GUI_SS_DEFAULT_TAB = 0 Global Const $GUI_SS_DEFAULT_TREEVIEW = BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS) Global Const $GUI_SS_DEFAULT_UPDOWN = $UDS_ALIGNRIGHT Global Const $GUI_SS_DEFAULT_GUI = BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU) ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $TCS_SCROLLOPPOSITE = 0x0001 Global Const $TCS_BOTTOM = 0x0002 Global Const $TCS_RIGHT = 0x0002 Global Const $TCS_MULTISELECT = 0x0004 Global Const $TCS_FLATBUTTONS = 0x0008 Global Const $TCS_FORCEICONLEFT = 0x0010 Global Const $TCS_FORCELABELLEFT = 0x0020 Global Const $TCS_HOTTRACK = 0x0040 Global Const $TCS_VERTICAL = 0x0080 Global Const $TCS_TABS = 0x0000 Global Const $TCS_BUTTONS = 0x0100 Global Const $TCS_SINGLELINE = 0x0000 Global Const $TCS_MULTILINE = 0x0200 Global Const $TCS_RIGHTJUSTIFY = 0x0000 Global Const $TCS_FIXEDWIDTH = 0x0400 Global Const $TCS_RAGGEDRIGHT = 0x0800 Global Const $TCS_FOCUSONBUTTONDOWN = 0x1000 Global Const $TCS_OWNERDRAWFIXED = 0x2000 Global Const $TCS_TOOLTIPS = 0x4000 Global Const $TCS_FOCUSNEVER = 0x8000 Global Const $TCS_EX_FLATSEPARATORS = 0x1 Global Const $TC_ERR = -1 Global Const $TCIS_BUTTONPRESSED = 0x1 Global Const $TCS_EX_REGISTERDROP = 0x2 Global Const $TCM_FIRST = 0x1300 Global Const $TCM_DELETEALLITEMS = ($TCM_FIRST + 9) Global Const $TCM_DELETEITEM = ($TCM_FIRST + 8) Global Const $TCM_DESELECTALL = ($TCM_FIRST + 50) Global Const $TCM_GETCURFOCUS = ($TCM_FIRST + 47) Global Const $TCM_GETCURSEL = ($TCM_FIRST + 11) Global Const $TCM_GETEXTENDEDSTYLE = ($TCM_FIRST + 53) Global Const $TCM_GETITEMCOUNT = ($TCM_FIRST + 4) Global Const $TCM_GETITEMRECT = ($TCM_FIRST + 10) Global Const $TCM_GETROWCOUNT = ($TCM_FIRST + 44) Global Const $TCM_SETITEMSIZE = $TCM_FIRST + 41 Global Const $TCCM_FIRST = 0X2000 Global Const $TCCM_GETUNICODEFORMAT = ($TCCM_FIRST + 6) Global Const $TCM_GETUNICODEFORMAT = $TCCM_GETUNICODEFORMAT Global Const $TCM_HIGHLIGHTITEM = ($TCM_FIRST + 51) Global Const $TCM_SETCURFOCUS = ($TCM_FIRST + 48) Global Const $TCM_SETCURSEL = ($TCM_FIRST + 12) Global Const $TCM_SETMINTABWIDTH = ($TCM_FIRST + 49) Global Const $TCM_SETPADDING = ($TCM_FIRST + 43) Global Const $TCCM_SETUNICODEFORMAT = ($TCCM_FIRST + 5) Global Const $TCM_SETUNICODEFORMAT = $TCCM_SETUNICODEFORMAT Global Const $TCN_FIRST = -550 Global Const $TCN_SELCHANGE = ($TCN_FIRST - 1) Global Const $TCN_SELCHANGING = ($TCN_FIRST - 2) ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $PBS_SMOOTH = 1 Global Const $PBS_VERTICAL = 4 ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $CC_ANYCOLOR = 0x100 Global Const $CC_FULLOPEN = 0x2 Global Const $CC_RGBINIT = 0x1 Global Const $CF_EFFECTS = 0x100 Global Const $CF_PRINTERFONTS = 0x2 Global Const $CF_SCREENFONTS = 0x1 Global Const $CF_NOSCRIPTSEL = 0x800000 Global Const $CF_INITTOLOGFONTSTRUCT = 0x40 Global Const $DEFAULT_PITCH = 0 Global Const $FF_DONTCARE = 0 Global Const $LOGPIXELSX = 88 Func _ChooseColor($i_ReturnType = 0, $i_colorref = 0, $i_refType = 0) Local $custcolors = "int[16]" Local $struct = "dword;int;int;int;ptr;dword;int;ptr;ptr" Local $p = DllStructCreate($struct) If @error Then SetError(-1) Return -1 EndIf Local $cc = DllStructCreate($custcolors) If @error Then SetError(-2) Return -1 EndIf If ($i_refType == 1) Then $i_colorref = Int($i_colorref) ElseIf ($i_refType == 2) Then $i_colorref = Hex(String($i_colorref), 6) $i_colorref = '0x' & StringMid($i_colorref, 5, 2) & StringMid($i_colorref, 3, 2) & StringMid($i_colorref, 1, 2) EndIf DllStructSetData($p, 1, DllStructGetSize($p)) DllStructSetData($p, 2, 0) DllStructSetData($p, 4, $i_colorref) DllStructSetData($p, 5, DllStructGetPtr($cc)) DllStructSetData($p, 6, BitOR($CC_ANYCOLOR, $CC_FULLOPEN, $CC_RGBINIT)) Local $ret = DllCall("comdlg32.dll", "long", "ChooseColor", "ptr", DllStructGetPtr($p)) If ($ret[0] == 0) Then SetError(-3) Return -1 EndIf Local $color_picked = DllStructGetData($p, 4) If ($i_ReturnType == 1) Then Return '0x' & Hex(String($color_picked), 6) ElseIf ($i_ReturnType == 2) Then $color_picked = Hex(String($color_picked), 6) Return '0x' & StringMid($color_picked, 5, 2) & StringMid($color_picked, 3, 2) & StringMid($color_picked, 1, 2) ElseIf ($i_ReturnType == 0) Then Return $color_picked Else SetError(-4) Return -1 EndIf EndFunc Func _ChooseFont($s_FontName = "Courier New", $i_size = 10, $i_colorref = 0, $i_FontWeight = 0, $i_Italic = 0, $i_Underline = 0, $i_Strikethru = 0) Local $ret = DllCall("gdi32.dll", "long", "GetDeviceCaps", "long", 0, "long", $LOGPIXELSX) If ($ret[0] == -1) Then SetError(-3) Return -1 EndIf Local $lfHeight = Round(($i_size * $ret[2]) / 72, 0) Local $logfont = "int;int;int;int;int;byte;byte;byte;byte;byte;byte;byte;byte;char[32]" Local $struct = "dword;int;int;ptr;int;dword;int;int;ptr;ptr;int;ptr;dword;int;int" Local $p = DllStructCreate($struct) If @error Then SetError(-1) Return -1 EndIf Local $lf = DllStructCreate($logfont) If @error Then SetError(-2) Return -1 EndIf DllStructSetData($p, 1, DllStructGetSize($p)) DllStructSetData($p, 2, 0) DllStructSetData($p, 4, DllStructGetPtr($lf)) DllStructSetData($p, 5, $i_size) DllStructSetData($p, 6, BitOR($CF_SCREENFONTS, $CF_PRINTERFONTS, $CF_EFFECTS, $CF_INITTOLOGFONTSTRUCT, $CF_NOSCRIPTSEL)) DllStructSetData($p, 7, $i_colorref) DllStructSetData($p, 13, 0) DllStructSetData($lf, 1, $lfHeight + 1) DllStructSetData($lf, 5, $i_FontWeight) DllStructSetData($lf, 6, $i_Italic) DllStructSetData($lf, 7, $i_Underline) DllStructSetData($lf, 8, $i_Strikethru) DllStructSetData($lf, 14, $s_FontName) $ret = DllCall("comdlg32.dll", "long", "ChooseFont", "ptr", DllStructGetPtr($p)) If ($ret[0] == 0) Then SetError(-3) Return -1 EndIf Local $fontname = DllStructGetData($lf, 14) If (StringLen($fontname) == 0 And StringLen($s_FontName) > 0) Then $fontname = $s_FontName EndIf Local $italic = 0 Local $underline = 0 Local $strikeout = 0 If (DllStructGetData($lf, 6)) Then $italic = 2 EndIf If (DllStructGetData($lf, 7)) Then $underline = 4 EndIf If (DllStructGetData($lf, 8)) Then $strikeout = 8 EndIf Local $attributes = BitOR($italic, $underline, $strikeout) Local $size = DllStructGetData($p, 5) / 10 Local $weight = DllStructGetData($lf, 5) Local $colorref = DllStructGetData($p, 7) Local $color_picked = Hex(String($colorref), 6) Return StringSplit($attributes & "," & $fontname & "," & $size & "," & $weight & "," & $colorref & "," & '0x' & $color_picked & "," & '0x' & StringMid($color_picked, 5, 2) & StringMid($color_picked, 3, 2) & StringMid($color_picked, 1, 2), ",") EndFunc Func _ClipPutFile($sFile, $sSeperator = "|") Local $vDllCallTmp, $nGlobMemSize, $hGlobal, $DROPFILES, $i, $hLock Local $GMEM_MOVEABLE = 0x0002, $CF_HDROP = 15 $sFile = $sFile & $sSeperator & $sSeperator $nGlobMemSize = StringLen($sFile) + 20 $vDllCallTmp = DllCall("user32.dll", "int", "OpenClipboard", "hwnd", 0) If @error Or $vDllCallTmp[0] = 0 Then SetError(1) Return False EndIf $vDllCallTmp = DllCall("user32.dll", "int", "EmptyClipboard") If @error Or $vDllCallTmp[0] = 0 Then SetError(2) Return False EndIf $vDllCallTmp = DllCall("kernel32.dll", "long", "GlobalAlloc", "int", $GMEM_MOVEABLE, "int", $nGlobMemSize) If @error Or $vDllCallTmp[0] < 1 Then SetError(3) Return False EndIf $hGlobal = $vDllCallTmp[0] $vDllCallTmp = DllCall("kernel32.dll", "long", "GlobalLock", "long", $hGlobal) If @error Or $vDllCallTmp[0] < 1 Then SetError(4) Return False EndIf $hLock = $vDllCallTmp[0] $DROPFILES = DllStructCreate("dword;ptr;int;int;int;char[" & StringLen($sFile) & "]", $hLock) If @error Then SetError(5) Return False EndIf DllStructSetData($DROPFILES, 1, DllStructGetSize($DROPFILES) - StringLen($sFile)) DllStructSetData($DROPFILES, 2, 0) DllStructSetData($DROPFILES, 3, 0) DllStructSetData($DROPFILES, 4, 0) DllStructSetData($DROPFILES, 5, 0) DllStructSetData($DROPFILES, 6, $sFile) For $i = 1 To StringLen($sFile) If DllStructGetData($DROPFILES, 6, $i) = Asc($sSeperator) Then DllStructSetData($DROPFILES, 6, 0, $i) Next $vDllCallTmp = DllCall("user32.dll", "long", "SetClipboardData", "int", $CF_HDROP, "long", $hGlobal) If @error Or $vDllCallTmp[0] < 1 Then SetError(6) $DROPFILES = 0 Return False EndIf $vDllCallTmp = DllCall("user32.dll", "int", "CloseClipboard") If @error Or $vDllCallTmp[0] = 0 Then SetError(7) $DROPFILES = 0 Return False EndIf $vDllCallTmp = DllCall("kernel32.dll", "int", "GlobalUnlock", "long", $hGlobal) If @error Then SetError(8) $DROPFILES = 0 Return False EndIf $vDllCallTmp = DllCall("kernel32.dll", "int", "GetLastError") If $vDllCallTmp = 0 Then $DROPFILES = 0 SetError(8) Return False Else $DROPFILES = 0 Return True EndIf EndFunc Func _Iif($f_Test, $v_TrueVal, $v_FalseVal) If $f_Test Then Return $v_TrueVal Else Return $v_FalseVal EndIf EndFunc Func _MouseTrap($i_left = 0, $i_top = 0, $i_right = 0, $i_bottom = 0) Local $av_ret If @NumParams == 0 Then $av_ret = DllCall("user32.dll", "int", "ClipCursor", "int", 0) Else If @NumParams == 2 Then $i_right = $i_left + 1 $i_bottom = $i_top + 1 EndIf Local $Rect = DllStructCreate("int;int;int;int") If @error Then Return 0 DllStructSetData($Rect, 1, $i_left) DllStructSetData($Rect, 2, $i_top) DllStructSetData($Rect, 3, $i_right) DllStructSetData($Rect, 4, $i_bottom) $av_ret = DllCall("user32.dll", "int", "ClipCursor", "ptr", DllStructGetPtr($Rect)) EndIf Return $av_ret[0] EndFunc Func _Singleton($occurenceName, $flag = 0) Local $ERROR_ALREADY_EXISTS = 183 $occurenceName = StringReplace($occurenceName, "\", "") Local $handle = DllCall("kernel32.dll", "int", "CreateMutex", "int", 0, "long", 1, "str", $occurenceName) Local $lastError = DllCall("kernel32.dll", "int", "GetLastError") If $lastError[0] = $ERROR_ALREADY_EXISTS Then If $flag = 0 Then Exit -1 Else SetError($lastError[0]) Return 0 EndIf EndIf Return $handle[0] EndFunc Func _IsPressed($s_hexKey, $v_dll = 'user32.dll') Local $a_R = DllCall($v_dll, "int", "GetAsyncKeyState", "int", '0x' & $s_hexKey) If Not @error And BitAND($a_R[0], 0x8000) = 0x8000 Then Return 1 Return 0 EndFunc Func _SendMessage($h_hWnd, $i_msg, $wParam = 0, $lParam = 0, $i_r = 0, $s_t1 = "int", $s_t2 = "int") Local $a_ret = DllCall("user32.dll", "long", "SendMessage", "hwnd", $h_hWnd, "int", $i_msg, $s_t1, $wParam, $s_t2, $lParam) If @error Then Return SetError(@error, @extended, "") If $i_r >= 0 And $i_r <= 4 Then Return $a_ret[$i_r] Return $a_ret EndFunc Func _IsClassName($h_hWnd, $s_ClassName) If Not IsHWnd($h_hWnd) Then $h_hWnd = GUICtrlGetHandle($h_hWnd) Local $aResult = DllCall("user32.dll", "int", "GetClassNameA", "hwnd", $h_hWnd, "str", "", "int", 256) If @error Then Return SetError(@error, @error, "") If IsArray($aResult) Then If StringUpper(StringMid($aResult[2], 1, StringLen($s_ClassName))) = StringUpper($s_ClassName) Then Return 1 Else Return 0 EndIf Else Return SetError(-1, -1, 0) EndIf EndFunc ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $MEM_MAP = "uint;uint;ptr" Global Const $MEM_MAP_HPROC = 1 Global Const $MEM_MAP_ISIZE = 2 Global Const $MEM_MAP_PMEM = 3 Func _MemFree(ByRef $rMemMap) Local $hProcess Local $pMemory Local $bResult Local $MEM_RELEASE = 0x00008000 $hProcess = DllStructGetData($rMemMap, $MEM_MAP_HPROC) $pMemory = DllStructGetData($rMemMap, $MEM_MAP_PMEM) Switch @OSVersion Case "WIN_ME", "WIN_98", "WIN_95" $bResult = _VirtualFree($pMemory, 0, $MEM_RELEASE) Case Else $bResult = _VirtualFreeEx($hProcess, $pMemory, 0, $MEM_RELEASE) EndSwitch _CloseHandle($hProcess) $rMemMap = 0 Return $bResult EndFunc Func _CloseHandle($hObject) Local $aResult = DllCall("Kernel32.dll", "int", "CloseHandle", "int", $hObject) If @error Or Not IsArray($aResult) Then Return SetError(-1, -1, 0) Return $aResult[0] EndFunc Func _VirtualAlloc($pAddress, $iSize, $iAllocation, $iProtect) Local $aResult = DllCall("Kernel32.dll", "ptr", "VirtualAlloc", "ptr", $pAddress, "int", $iSize, "int", $iAllocation, "int", $iProtect) If @error Or Not IsArray($aResult) Then Return SetError(-1, -1, 0) Return $aResult[0] EndFunc Func _VirtualAllocEx($hProcess, $pAddress, $iSize, $iAllocation, $iProtect) Local $aResult = DllCall("Kernel32.dll", "ptr", "VirtualAllocEx", "int", $hProcess, "ptr", $pAddress, "int", $iSize, "int", $iAllocation, "int", $iProtect) If @error Or Not IsArray($aResult) Then Return SetError(-1, -1, 0) Return $aResult[0] EndFunc Func _VirtualFree($pAddress, $iSize, $iFreeType) Local $aResult = DllCall("Kernel32.dll", "ptr", "VirtualFree", "ptr", $pAddress, "int", $iSize, "int", $iFreeType) If @error Or Not IsArray($aResult) Then Return SetError(-1, -1, 0) Return $aResult[0] EndFunc Func _VirtualFreeEx($hProcess, $pAddress, $iSize, $iFreeType) Local $aResult = DllCall("Kernel32.dll", "ptr", "VirtualFreeEx", "hwnd", $hProcess, "ptr", $pAddress, "int", $iSize, "int", $iFreeType) If @error Or Not IsArray($aResult) Then Return SetError(-1, -1, 0) Return $aResult[0] EndFunc Func _GetWindowThreadProcessId($hWnd, ByRef $iProcessID) Local $rProcessID, $aResult $rProcessID = DllStructCreate("int") $aResult = DllCall("User32.dll", "int", "GetWindowThreadProcessId", "hwnd", $hWnd, "ptr", DllStructGetPtr($rProcessID)) If @error Or Not IsArray($aResult) Then Return SetError(-1, -1, 0) $iProcessID = DllStructGetData($rProcessID, 1) Return $aResult[0] EndFunc Func _OpenProcess($iAccess, $bInherit, $iProcessID) Local $aResult = DllCall("Kernel32.Dll", "int", "OpenProcess", "int", $iAccess, "int", $bInherit, "int", $iProcessID) If @error Or Not IsArray($aResult) Then Return SetError(-1, -1, 0) Return $aResult[0] EndFunc Func _ReadProcessMemory($hProcess, $pBaseAddress, $pBuffer, $iSize, ByRef $iBytesRead) Local $rBytesRead = DllStructCreate("int") Local $aResult = DllCall("Kernel32.dll", "int", "ReadProcessMemory", "int", $hProcess, "int", $pBaseAddress, _ "ptr", $pBuffer, "int", $iSize, "ptr", DllStructGetPtr($rBytesRead)) If @error Or Not IsArray($aResult) Then Return SetError(-1, -1, 0) $iBytesRead = DllStructGetData($rBytesRead, 1) $rBytesRead = 0 Return $aResult[0] EndFunc Func _WriteProcessMemory($hProcess, $pBaseAddress, $pBuffer, $iSize, ByRef $iBytesWritten) Local $rBytesWritten = DllStructCreate("int") Local $aResult = DllCall("Kernel32.dll", "int", "WriteProcessMemory", "int", $hProcess, "int", $pBaseAddress, _ "ptr", $pBuffer, "int", $iSize, "int", DllStructGetPtr($rBytesWritten)) If @error Or Not IsArray($aResult) Then Return SetError(-1, -1, 0) $iBytesWritten = DllStructGetData($rBytesWritten, 1) $rBytesWritten = 0 Return $aResult[0] EndFunc Func _MemInit($hWnd, $iSize, ByRef $rMemMap, $pAddress = 0) Local $iAccess, $iAllocation Local $pMemory, $hProcess Local $iProcessID Local $PROCESS_VM_OPERATION = 0x00000008 Local $PROCESS_VM_READ = 0x00000010 Local $PROCESS_VM_WRITE = 0x00000020 Local $MEM_RESERVE = 0x00002000 Local $MEM_COMMIT = 0x00001000 Local $MEM_SHARED = 0x08000000 Local $PAGE_READWRITE = 0x00000004 _GetWindowThreadProcessId($hWnd, $iProcessID) $iAccess = BitOR($PROCESS_VM_OPERATION, $PROCESS_VM_READ, $PROCESS_VM_WRITE) $hProcess = _OpenProcess($iAccess, False, $iProcessID) Switch @OSVersion Case "WIN_ME", "WIN_98", "WIN_95" $iAllocation = BitOR($MEM_RESERVE, $MEM_COMMIT, $MEM_SHARED) $pMemory = _VirtualAlloc($pAddress, $iSize, $iAllocation, $PAGE_READWRITE) Case Else $iAllocation = BitOR($MEM_RESERVE, $MEM_COMMIT) $pMemory = _VirtualAllocEx($hProcess, $pAddress, $iSize, $iAllocation, $PAGE_READWRITE) EndSwitch If @error Then Return SetError(-1, -1, 0) $rMemMap = DllStructCreate($MEM_MAP) DllStructSetData($rMemMap, $MEM_MAP_HPROC, $hProcess) DllStructSetData($rMemMap, $MEM_MAP_ISIZE, $iSize) DllStructSetData($rMemMap, $MEM_MAP_PMEM, $pMemory) Return $pMemory EndFunc Func _MemRead($rMemMap, $pSrce, $pDest, $iSize) Local $hProcess Local $iWritten $hProcess = DllStructGetData($rMemMap, $MEM_MAP_HPROC) Return _ReadProcessMemory($hProcess, $pSrce, $pDest, $iSize, $iWritten) EndFunc Func _MemWrite($rMemMap, $pSrce, $pDest = 0, $iSize = 0) Local $hProcess Local $iWritten If $pDest = 0 Then $pDest = DllStructGetData($rMemMap, $MEM_MAP_PMEM) EndIf If $iSize = 0 Then $iSize = DllStructGetData($rMemMap, $MEM_MAP_ISIZE) EndIf $hProcess = DllStructGetData($rMemMap, $MEM_MAP_HPROC) Return _WriteProcessMemory($hProcess, $pDest, $pSrce, $iSize, $iWritten) EndFunc Func _MultiByteToWideChar($s_Text, $i_CodePage = 0, $i_Flags = 1) Local $iBuffLen = StringLen($s_Text) Local $rUnicode = DllStructCreate("byte[" & ($iBuffLen * 2) & "]") Local $pUnicode = DllStructGetPtr($rUnicode) DllCall("Kernel32.dll", "int", "MultiByteToWideChar", "int", $i_CodePage, "int", $i_Flags, _ "str", $s_Text, "int", $iBuffLen, "ptr", $pUnicode, "int", $iBuffLen * 2) If @error Then Return SetError(-1, -1, 0) Return DllStructGetData($rUnicode, 1) EndFunc ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $LVITEM = "int;int;int;int;int;ptr;int;int;int;int" Global Enum $LVI_MASK = 1, $LVI_IITEM, $LVI_ISUBITEM, $LVI_STATE, $LVI_STATEMASK, $LVI_PSZTEXT, _ $LVI_CCHTEXTMAX, $LVI_IIMAGE, $LVI_LPARAM, $LVI_IINDENT Global $LVCOLUMN = "uint;int;int;ptr;int;int;int;int" Global Enum $LVC_MASK = 1, $LVC_FMT, $LVC_CX, $LVC_PSZTEXT, $LVC_CCHTEXTMAX, $LVC_ISUBITEM, $LVC_IIMAGE, $LVC_IORDER Func _GUICtrlListViewCopyItems($h_Source_listview, $h_Destination_listview, $i_DelFlag = 0) If Not _IsClassName ($h_Source_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, 0) If Not _IsClassName ($h_Destination_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, 0) Local $a_indices, $i, $s_item, $items $items = _GUICtrlListViewGetItemCount($h_Source_listview) If BitAND(_GUICtrlListViewGetExtendedListViewStyle($h_Source_listview), $LVS_EX_CHECKBOXES) == $LVS_EX_CHECKBOXES Then For $i = 0 To $items - 1 If (_GUICtrlListViewGetCheckedState($h_Source_listview, $i)) Then If IsArray($a_indices) Then ReDim $a_indices[UBound($a_indices) + 1] Else Local $a_indices[2] EndIf $a_indices[0] = $a_indices[0] + 1 $a_indices[UBound($a_indices) - 1] = $i EndIf Next If (IsArray($a_indices)) Then For $i = 1 To $a_indices[0] $s_item = _GUICtrlListViewGetItemText($h_Source_listview, $a_indices[$i]) _GUICtrlListViewSetCheckState($h_Source_listview, $a_indices[$i], 0) _GUICtrlListViewInsertItem($h_Destination_listview, _GUICtrlListViewGetItemCount($h_Destination_listview), $s_item) Next If $i_DelFlag Then For $i = $a_indices[0] To 1 Step - 1 _GUICtrlListViewSetItemSelState($h_Source_listview, $a_indices[$i]) _GUICtrlListViewDeleteItem($h_Source_listview, $a_indices[$i]) Next EndIf EndIf EndIf If (_GUICtrlListViewGetSelectedCount($h_Source_listview)) Then $a_indices = _GUICtrlListViewGetSelectedIndices($h_Source_listview, 1) For $i = 1 To $a_indices[0] $s_item = _GUICtrlListViewGetItemText($h_Source_listview, $a_indices[$i]) _GUICtrlListViewInsertItem($h_Destination_listview, _GUICtrlListViewGetItemCount($h_Destination_listview), $s_item) Next _GUICtrlListViewSetItemSelState($h_Source_listview, -1, 0) If $i_DelFlag Then For $i = $a_indices[0] To 1 Step - 1 _GUICtrlListViewSetItemSelState($h_Source_listview, $a_indices[$i]) _GUICtrlListViewDeleteItem($h_Source_listview, $a_indices[$i]) Next EndIf EndIf EndFunc Func _GUICtrlListViewDeleteAllItems($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) Local $i_index, $control_ID If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_DELETEALLITEMS) Else For $i_index = _GUICtrlListViewGetItemCount($h_listview) - 1 To 0 Step - 1 _GUICtrlListViewSetItemSelState($h_listview, $i_index, 1) $control_ID = GUICtrlRead($h_listview) If $control_ID Then GUICtrlDelete($control_ID) Next If _GUICtrlListViewGetItemCount($h_listview) == 0 Then Return 1 Else Return GUICtrlSendMsg($h_listview, $LVM_DELETEALLITEMS, 0, 0) EndIf EndIf EndFunc Func _GUICtrlListViewDeleteColumn($h_listview, $i_col) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_DELETECOLUMN, $i_col) Else Return GUICtrlSendMsg($h_listview, $LVM_DELETECOLUMN, $i_col, 0) EndIf EndFunc Func _GUICtrlListViewDeleteItem($h_listview, $i_index) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) Local $control_ID, $ID_Check If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_DELETEITEM, $i_index) Else _GUICtrlListViewSetItemSelState($h_listview, -1, 0) _GUICtrlListViewSetItemSelState($h_listview, $i_index) $control_ID = GUICtrlRead($h_listview) If $control_ID Then GUICtrlDelete($control_ID) _GUICtrlListViewSetItemSelState($h_listview, $i_index) $ID_Check = GUICtrlRead($h_listview) _GUICtrlListViewSetItemSelState($h_listview, $i_index, 0) If $control_ID <> $ID_Check Then Return 1 Else Return GUICtrlSendMsg($h_listview, $LVM_DELETEITEM, $i_index, 0) EndIf Else If Not GUICtrlSendMsg($h_listview, $LVM_DELETEITEM, $i_index, 0) Then Return _SendMessage($h_listview, $LVM_DELETEITEM, $i_index) Else Return 1 EndIf EndIf EndIf EndFunc Func _GUICtrlListViewDeleteItemsSelected($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, 0) Local $i, $ItemCount $ItemCount = _GUICtrlListViewGetItemCount($h_listview) If (_GUICtrlListViewGetSelectedCount($h_listview) == $ItemCount) Then _GUICtrlListViewDeleteAllItems($h_listview) Else Local $items = _GUICtrlListViewGetSelectedIndices($h_listview, 1) If Not IsArray($items) Then Return SetError($LV_ERR, $LV_ERR, 0) _GUICtrlListViewSetItemSelState($h_listview, -1, 0) For $i = $items[0] To 1 Step - 1 _GUICtrlListViewDeleteItem($h_listview, $items[$i]) Next EndIf EndFunc Func _GUICtrlListViewEnsureVisible($h_listview, $i_index, $i_bool) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_ENSUREVISIBLE, $i_index, $i_bool) Else Return GUICtrlSendMsg($h_listview, $LVM_ENSUREVISIBLE, $i_index, $i_bool) EndIf EndFunc Func _GUICtrlListViewFindItem($h_listview, $v_find, $i_Start = -1, $v_SearchType = 0x8, $v_direction = 0x28) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $struct_String, $struct_LVFINDINFO, $iResult Local $i_Size, $struct_LVFINDINFO_pointer, $struct_MemMap, $Memory_pointer, $string_Memory_pointer, $sBuffer_pointer $struct_LVFINDINFO = DllStructCreate("uint;ptr;int;int[2];int") If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) DllStructSetData($struct_LVFINDINFO, 1, $v_SearchType) If BitAND($v_SearchType, $LVFI_PARAM) = $LVFI_PARAM Then DllStructSetData($struct_LVFINDINFO, 3, $v_find) Else If StringLen($v_find) = 0 Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) $struct_String = DllStructCreate("char[" & StringLen($v_find) + 1 & "]") $sBuffer_pointer = DllStructGetPtr($struct_String) DllStructSetData($struct_String, 1, $v_find) EndIf DllStructSetData($struct_LVFINDINFO, 6, $v_direction) If IsHWnd($h_listview) Then $i_Size = DllStructGetSize($struct_LVFINDINFO) $struct_LVFINDINFO_pointer = DllStructGetPtr($struct_LVFINDINFO) If BitAND($v_SearchType, $LVFI_PARAM) = $LVFI_PARAM Then $Memory_pointer = _MemInit ($h_listview, $i_Size, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, 0) EndIf _MemWrite ($struct_MemMap, $struct_LVFINDINFO_pointer) Else $Memory_pointer = _MemInit ($h_listview, $i_Size + StringLen($v_find) + 1, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, 0) EndIf $string_Memory_pointer = $Memory_pointer + $i_Size DllStructSetData($struct_LVFINDINFO, 2, $string_Memory_pointer) _MemWrite ($struct_MemMap, $struct_LVFINDINFO_pointer) _MemWrite ($struct_MemMap, $sBuffer_pointer, $string_Memory_pointer, 4096) EndIf $iResult = _SendMessage($h_listview, $LVM_FINDITEM, $i_Start, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, 0) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($LV_ERR, $LV_ERR, 0) Return $iResult Else If BitAND($v_SearchType, $LVFI_PARAM) <> $LVFI_PARAM Then DllStructSetData($struct_LVFINDINFO, 2, DllStructGetPtr($struct_String)) EndIf Return GUICtrlSendMsg($h_listview, $LVM_FINDITEM, $i_Start, DllStructGetPtr($struct_LVFINDINFO)) EndIf EndFunc Func _GUICtrlListViewGetBackColor($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $v_color If IsHWnd($h_listview) Then $v_color = _SendMessage($h_listview, $LVM_GETBKCOLOR) Else $v_color = GUICtrlSendMsg($h_listview, $LVM_GETBKCOLOR, 0, 0) EndIf Return _ReverseColorOrder($v_color) EndFunc Func _GUICtrlListViewGetCallBackMask($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETCALLBACKMASK) Else Return GUICtrlSendMsg($h_listview, $LVM_GETCALLBACKMASK, 0, 0) EndIf EndFunc Func _GUICtrlListViewGetCheckedState($h_listview, $i_index) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $isChecked = 0, $ret If IsHWnd($h_listview) Then $ret = _SendMessage($h_listview, $LVM_GETITEMSTATE, $i_index, $LVIS_STATEIMAGEMASK) Else $ret = GUICtrlSendMsg($h_listview, $LVM_GETITEMSTATE, $i_index, $LVIS_STATEIMAGEMASK) EndIf If (Not $ret) Then $ret = _SendMessage($h_listview, $LVM_GETITEMSTATE, $i_index, $LVIS_STATEIMAGEMASK) If ($ret == -1) Then Return $LV_ERR Else If (BitAND($ret, 0x3000) == 0x3000) Then $isChecked = 0 Else $isChecked = 1 EndIf EndIf Else If (BitAND($ret, 0x2000) == 0x2000) Then $isChecked = 1 EndIf Return $isChecked EndFunc Func _GUICtrlListViewGetColumnOrder($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $i_cols = _GUICtrlListViewGetSubItemsCount($h_listview) Local $i, $ret Local $struct = "" For $i = 1 To $i_cols $struct &= "int;" Next $struct = StringTrimRight($struct, 1) Local $column_struct = DllStructCreate($struct) If @error Then Return $LV_ERR If IsHWnd($h_listview) Then Local $struct_MemMap, $sBuffer_pointer $sBuffer_pointer = DllStructGetPtr($column_struct) Local $i_Size = DllStructGetSize($column_struct) Local $Memory_pointer = _MemInit ($h_listview, $i_Size, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, 0) EndIf $ret = _SendMessage($h_listview, $LVM_GETCOLUMNORDERARRAY, $i_cols, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, 0) EndIf _MemRead ($struct_MemMap, $Memory_pointer, $sBuffer_pointer, $i_Size) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, 0) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($LV_ERR, $LV_ERR, 0) Else $ret = GUICtrlSendMsg($h_listview, $LVM_GETCOLUMNORDERARRAY, $i_cols, DllStructGetPtr($column_struct)) EndIf If (Not $ret) Then Return $LV_ERR Local $s_cols For $i = 1 To $i_cols $s_cols &= DllStructGetData($column_struct, $i) & "|" Next $s_cols = StringTrimRight($s_cols, 1) Return $s_cols EndFunc Func _GUICtrlListViewGetColumnWidth($h_listview, $i_col) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, 0) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETCOLUMNWIDTH, $i_col) Else Return GUICtrlSendMsg($h_listview, $LVM_GETCOLUMNWIDTH, $i_col, 0) EndIf EndFunc Func _GUICtrlListViewGetCounterPage($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETCOUNTPERPAGE) Else Return GUICtrlSendMsg($h_listview, $LVM_GETCOUNTPERPAGE, 0, 0) EndIf EndFunc Func _GUICtrlListViewGetCurSel($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If _GUICtrlListViewGetSelectedCount($h_listview) > 0 Then Return Int(_GUICtrlListViewGetSelectedIndices($h_listview)) Else Return $LV_ERR EndIf EndFunc Func _GUICtrlListViewGetExtendedListViewStyle($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETEXTENDEDLISTVIEWSTYLE) Else Return GUICtrlSendMsg($h_listview, $LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0) EndIf EndFunc Func _GUICtrlListViewGetHeader($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETHEADER) Else Return GUICtrlSendMsg($h_listview, $LVM_GETHEADER, 0, 0) EndIf EndFunc Func _GUICtrlListViewGetHotCursor($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETHOTCURSOR) Else Return GUICtrlSendMsg($h_listview, $LVM_GETHOTCURSOR, 0, 0) EndIf EndFunc Func _GUICtrlListViewGetHotItem($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETHOTITEM) Else Return GUICtrlSendMsg($h_listview, $LVM_GETHOTITEM, 0, 0) EndIf EndFunc Func _GUICtrlListViewGetHoverTime($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETHOVERTIME) Else Return GUICtrlSendMsg($h_listview, $LVM_GETHOVERTIME, 0, 0) EndIf EndFunc Func _GUICtrlListViewGetItemCount($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETITEMCOUNT) Else Return GUICtrlSendMsg($h_listview, $LVM_GETITEMCOUNT, 0, 0) EndIf EndFunc Func _GUICtrlListViewGetItemText($h_listview, $i_Item = -1, $i_SubItem = -1) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $sBuffer_pointer Local $LVITEM_pointer Local $Memory_pointer, $struct_MemMap Local $i_Size, $string_Memory_pointer Local $struct_LVITEM, $struct_String $struct_LVITEM = DllStructCreate($LVITEM) If @error Then Return SetError($LV_ERR, $LV_ERR, "") $struct_String = DllStructCreate("char[4096]") If @error Then Return SetError($LV_ERR, $LV_ERR, "") If $i_Item = -1 Then $i_Item = Int(_GUICtrlListViewGetSelectedIndices($h_listview)) If $i_Item = -1 Then Return SetError($LV_ERR, $LV_ERR, "") DllStructSetData($struct_LVITEM, $LVI_MASK, $LVIF_TEXT) DllStructSetData($struct_LVITEM, $LVI_CCHTEXTMAX, 4096) Local $x_indice, $count, $str = "" $count = _GUICtrlListViewGetSubItemsCount($h_listview) If Not $count Then $count = 1 DllStructSetData($struct_LVITEM, $LVI_IITEM, $i_Item) If ($i_SubItem == -1) Then For $x_indice = 0 To $count - 1 Step 1 If IsHWnd($h_listview) Then $sBuffer_pointer = DllStructGetPtr($struct_String) $LVITEM_pointer = DllStructGetPtr($struct_LVITEM) $i_Size = DllStructGetSize($struct_LVITEM) $Memory_pointer = _MemInit ($h_listview, $i_Size + 4096, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, "") EndIf $string_Memory_pointer = $Memory_pointer + 4096 DllStructSetData($struct_LVITEM, $LVI_ISUBITEM, $x_indice) DllStructSetData($struct_LVITEM, $LVI_PSZTEXT, $string_Memory_pointer) _MemWrite ($struct_MemMap, $LVITEM_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, "") EndIf _SendMessage($h_listview, $LVM_GETITEMA, 0, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, "") EndIf _MemRead ($struct_MemMap, $string_Memory_pointer, $sBuffer_pointer, 4096) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, "") EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($LV_ERR, $LV_ERR, "") Else DllStructSetData($struct_LVITEM, $LVI_PSZTEXT, DllStructGetPtr($struct_String)) DllStructSetData($struct_LVITEM, $LVI_ISUBITEM, $x_indice) If Not GUICtrlSendMsg($h_listview, $LVM_GETITEMA, 0, DllStructGetPtr($struct_LVITEM)) Then SetError($LV_ERR) EndIf EndIf If Not @error Then If $x_indice Then $str = $str & "|" & DllStructGetData($struct_String, 1) Else $str = DllStructGetData($struct_String, 1) EndIf Else If StringLen($str) Then $str = $str & "|" EndIf EndIf Next Return $str ElseIf ($i_SubItem < $count) Then If IsHWnd($h_listview) Then $sBuffer_pointer = DllStructGetPtr($struct_String) $LVITEM_pointer = DllStructGetPtr($struct_LVITEM) $i_Size = DllStructGetSize($struct_LVITEM) $Memory_pointer = _MemInit ($h_listview, $i_Size + 4096, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, "") EndIf $string_Memory_pointer = $Memory_pointer + 4096 DllStructSetData($struct_LVITEM, $LVI_ISUBITEM, $i_SubItem) DllStructSetData($struct_LVITEM, $LVI_PSZTEXT, $string_Memory_pointer) _MemWrite ($struct_MemMap, $LVITEM_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, "") EndIf _SendMessage($h_listview, $LVM_GETITEMA, 0, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, "") EndIf _MemRead ($struct_MemMap, $string_Memory_pointer, $sBuffer_pointer, 4096) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, "") EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($LV_ERR, $LV_ERR, "") Else DllStructSetData($struct_LVITEM, $LVI_PSZTEXT, DllStructGetPtr($struct_String)) DllStructSetData($struct_LVITEM, $LVI_ISUBITEM, $i_SubItem) If Not GUICtrlSendMsg($h_listview, $LVM_GETITEMA, 0, DllStructGetPtr($struct_LVITEM)) Then Return SetError($LV_ERR, $LV_ERR, "") EndIf Return DllStructGetData($struct_String, 1) Else Return SetError($LV_ERR, $LV_ERR, "") EndIf EndFunc Func _GUICtrlListViewGetItemTextArray($h_listview, $i_Item = -1) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $v_ret = _GUICtrlListViewGetItemText($h_listview, $i_Item) If @error Or $v_ret = "" Then Return SetError($LV_ERR, $LV_ERR, "") Return StringSplit($v_ret, "|") EndFunc Func _GUICtrlListViewGetNextItem($h_GUI, $h_listview, $i_index = -1, $i_direction = 0x0) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $h_lv If IsHWnd($h_listview) Then $h_lv = $h_listview Else $h_lv = ControlGetHandle($h_GUI, "", $h_listview) EndIf If ($i_direction == $LVNI_ALL Or $i_direction == $LVNI_ABOVE Or _ $i_direction == $LVNI_BELOW Or $i_direction == $LVNI_TOLEFT Or _ $i_direction == $LVNI_TORIGHT) Then Return _SendMessage($h_lv, $LVM_GETNEXTITEM, $i_index, $i_direction) Else Return $LV_ERR EndIf EndFunc Func _GUICtrlListViewGetSelectedCount($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETSELECTEDCOUNT) Else Return GUICtrlSendMsg($h_listview, $LVM_GETSELECTEDCOUNT, 0, 0) EndIf EndFunc Func _GUICtrlListViewGetSelectedIndices($h_listview, $i_ReturnType = 0) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $v_indices Local $x_indice, $v_ret For $x_indice = 0 To _GUICtrlListViewGetItemCount($h_listview) If IsHWnd($h_listview) Then $v_ret = _SendMessage($h_listview, $LVM_GETITEMSTATE, $x_indice, $LVIS_SELECTED) If $v_ret Then If (Not $i_ReturnType) Then If StringLen($v_indices) Then $v_indices = $v_indices & "|" & $x_indice Else $v_indices = $x_indice EndIf Else If Not IsArray($v_indices) Then Dim $v_indices[2] Else ReDim $v_indices[UBound($v_indices) + 1] EndIf $v_indices[0] = UBound($v_indices) - 1 $v_indices[UBound($v_indices) - 1] = $x_indice EndIf EndIf Else $v_ret = GUICtrlSendMsg($h_listview, $LVM_GETITEMSTATE, $x_indice, $LVIS_SELECTED) If $v_ret Then If (Not $i_ReturnType) Then If StringLen($v_indices) Then $v_indices = $v_indices & "|" & $x_indice Else $v_indices = $x_indice EndIf Else If Not IsArray($v_indices) Then Dim $v_indices[2] Else ReDim $v_indices[UBound($v_indices) + 1] EndIf $v_indices[0] = UBound($v_indices) - 1 $v_indices[UBound($v_indices) - 1] = $x_indice EndIf EndIf EndIf Next If (StringLen($v_indices) > 0 Or IsArray($v_indices)) Then Return $v_indices Else Return $LV_ERR EndIf EndFunc Func _GUICtrlListViewGetSubItemsCount($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Return _SendMessage(_GUICtrlListViewGetHeader($h_listview), 0x1200, 0, 0) EndFunc Func _GUICtrlListViewGetTopIndex($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETTOPINDEX) Else Return GUICtrlSendMsg($h_listview, $LVM_GETTOPINDEX, 0, 0) EndIf EndFunc Func _GUICtrlListViewGetUnicodeFormat($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, 0) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETUNICODEFORMAT) Else Return GUICtrlSendMsg($h_listview, $LVM_GETUNICODEFORMAT, 0, 0) EndIf EndFunc Func _GUICtrlListViewGetView($h_listview) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_GETVIEW) Else Return GUICtrlSendMsg($h_listview, $LVM_GETVIEW, 0, 0) EndIf EndFunc Func _GUICtrlListViewHideColumn($h_listview, $i_col) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_SETCOLUMNWIDTH, $i_col) Else Return GUICtrlSendMsg($h_listview, $LVM_SETCOLUMNWIDTH, $i_col, 0) EndIf EndFunc Func _GUICtrlListViewInsertColumn($h_listview, $i_col, $s_text, $i_justification = 0, $i_width = 25) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) Local $struct_LVCOLUMN, $struct_String, $ret $struct_LVCOLUMN = DllStructCreate($LVCOLUMN) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) $struct_String = DllStructCreate("char[" & StringLen($s_text) + 1 & "]") If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) DllStructSetData($struct_String, 1, $s_text) DllStructSetData($struct_LVCOLUMN, $LVC_MASK, BitOR($LVCF_WIDTH, $LVCF_FMT, $LVCF_TEXT)) If ($i_justification == 1) Then DllStructSetData($struct_LVCOLUMN, $LVC_FMT, $LVCFMT_RIGHT) ElseIf ($i_justification == 2) Then DllStructSetData($struct_LVCOLUMN, $LVC_FMT, $LVCFMT_CENTER) Else DllStructSetData($struct_LVCOLUMN, $LVC_FMT, $LVCFMT_LEFT) EndIf DllStructSetData($struct_LVCOLUMN, $LVC_CX, $i_width) If IsHWnd($h_listview) Then Local $sBuffer_pointer = DllStructGetPtr($struct_String) Local $column_struct_pointer = DllStructGetPtr($struct_LVCOLUMN) Local $i_Size = DllStructGetSize($struct_LVCOLUMN) Local $struct_MemMap Local $Memory_pointer = _MemInit ($h_listview, $i_Size + StringLen($s_text) + 1, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf Local $string_Memory_pointer = $Memory_pointer + $i_Size DllStructSetData($struct_LVCOLUMN, $LVC_PSZTEXT, $string_Memory_pointer) _MemWrite ($struct_MemMap, $column_struct_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemWrite ($struct_MemMap, $sBuffer_pointer, $string_Memory_pointer, StringLen($s_text) + 1) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf $ret = _SendMessage($h_listview, $LVM_INSERTCOLUMNA, $i_col, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Return $ret Else DllStructSetData($struct_LVCOLUMN, $LVC_PSZTEXT, DllStructGetPtr($struct_String)) $ret = GUICtrlSendMsg($h_listview, $LVM_INSERTCOLUMNA, $i_col, DllStructGetPtr($struct_LVCOLUMN)) EndIf Return $ret EndFunc Func _GUICtrlListViewInsertItem($h_listview, $i_index, $s_text) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $struct_LVITEM, $struct_String, $ret, $a_text $struct_LVITEM = DllStructCreate($LVITEM) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) $struct_String = DllStructCreate("char[" & StringLen($s_text) + 1 & "]") If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) $a_text = StringSplit($s_text, "|") DllStructSetData($struct_String, 1, $a_text[1]) If $i_index = -1 Then $i_index = _GUICtrlListViewGetItemCount($h_listview) DllStructSetData($struct_LVITEM, $LVI_MASK, $LVIF_TEXT) DllStructSetData($struct_LVITEM, $LVI_IITEM, $i_index) DllStructSetData($struct_LVITEM, $LVI_CCHTEXTMAX, StringLen($s_text) + 1) If IsHWnd($h_listview) Then Local $sBuffer_pointer = DllStructGetPtr($struct_String) Local $LVITEM_pointer = DllStructGetPtr($struct_LVITEM) Local $i_Size = DllStructGetSize($struct_LVITEM) Local $struct_MemMap Local $Memory_pointer = _MemInit ($h_listview, $i_Size + StringLen($s_text) + 1, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf Local $string_Memory_pointer = $Memory_pointer + $i_Size DllStructSetData($struct_LVITEM, $LVI_PSZTEXT, $string_Memory_pointer) _MemWrite ($struct_MemMap, $LVITEM_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemWrite ($struct_MemMap, $sBuffer_pointer, $string_Memory_pointer, StringLen($s_text) + 1) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf $ret = _SendMessage($h_listview, $LVM_INSERTITEMA, 0, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Else DllStructSetData($struct_LVITEM, $LVI_PSZTEXT, DllStructGetPtr($struct_String)) $ret = GUICtrlSendMsg($h_listview, $LVM_INSERTITEMA, 0, DllStructGetPtr($struct_LVITEM)) EndIf Local $i For $i = 2 To $a_text[0] _GUICtrlListViewSetItemText($h_listview, $i_index, $i - 1, $a_text[$i]) Next Return $ret EndFunc Func _GUICtrlListViewJustifyColumn($h_listview, $i_col, $i_justification = 0) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) Local $struct_LVCOLUMN, $ret $struct_LVCOLUMN = DllStructCreate($LVCOLUMN) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) DllStructSetData($struct_LVCOLUMN, $LVC_MASK, $LVCF_FMT) If ($i_justification == 1) Then DllStructSetData($struct_LVCOLUMN, $LVC_FMT, $LVCFMT_RIGHT) ElseIf ($i_justification == 2) Then DllStructSetData($struct_LVCOLUMN, $LVC_FMT, $LVCFMT_CENTER) Else DllStructSetData($struct_LVCOLUMN, $LVC_FMT, $LVCFMT_LEFT) EndIf If IsHWnd($h_listview) Then Local $column_struct_pointer = DllStructGetPtr($struct_LVCOLUMN) Local $i_Size = DllStructGetSize($struct_LVCOLUMN) Local $struct_MemMap Local $Memory_pointer = _MemInit ($h_listview, $i_Size, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemWrite ($struct_MemMap, $column_struct_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf $ret = _SendMessage($h_listview, $LVM_SETCOLUMNA, $i_col, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Else $ret = GUICtrlSendMsg($h_listview, $LVM_SETCOLUMNA, $i_col, DllStructGetPtr($struct_LVCOLUMN)) EndIf Return $ret EndFunc Func _GUICtrlListViewScroll($h_listview, $i_dx, $i_dy) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_SCROLL, $i_dx, $i_dy) Else Return GUICtrlSendMsg($h_listview, $LVM_SCROLL, $i_dx, $i_dy) EndIf EndFunc Func _GUICtrlListViewSetCheckState($h_listview, $i_index, $i_check = 1) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) Local $ret Local $struct_LVITEM = DllStructCreate($LVITEM) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) DllStructSetData($struct_LVITEM, $LVI_MASK, $LVIF_STATE) DllStructSetData($struct_LVITEM, $LVI_IITEM, $i_index) If ($i_check) Then DllStructSetData($struct_LVITEM, $LVI_STATE, 0x2000) Else DllStructSetData($struct_LVITEM, $LVI_STATE, 0x1000) EndIf DllStructSetData($struct_LVITEM, $LVI_STATEMASK, $LVIS_STATEIMAGEMASK) If IsHWnd($h_listview) Then Local $LVITEM_pointer = DllStructGetPtr($struct_LVITEM) Local $i_Size = DllStructGetSize($struct_LVITEM) Local $struct_MemMap Local $Memory_pointer = _MemInit ($h_listview, $i_Size + 4096, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemWrite ($struct_MemMap, $LVITEM_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf $ret = _SendMessage($h_listview, $LVM_SETITEMSTATE, $i_index, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Else $ret = GUICtrlSendMsg($h_listview, $LVM_SETITEMSTATE, $i_index, DllStructGetPtr($struct_LVITEM)) EndIf Return $ret EndFunc Func _GUICtrlListViewSetColumnHeaderText($h_listview, $i_col, $s_text) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) Local $struct_LVCOLUMN, $ret, $struct_String $struct_String = DllStructCreate("char[" & StringLen($s_text) + 1 & "]") If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) DllStructSetData($struct_String, 1, $s_text) $struct_LVCOLUMN = DllStructCreate($LVCOLUMN) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) DllStructSetData($struct_LVCOLUMN, $LVC_MASK, $LVCF_TEXT) If IsHWnd($h_listview) Then Local $sBuffer_pointer = DllStructGetPtr($struct_String) Local $column_struct_pointer = DllStructGetPtr($struct_LVCOLUMN) Local $i_Size = DllStructGetSize($struct_LVCOLUMN) Local $struct_MemMap Local $Memory_pointer = _MemInit ($h_listview, $i_Size + StringLen($s_text) + 1, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf Local $string_Memory_pointer = $Memory_pointer + $i_Size DllStructSetData($struct_LVCOLUMN, $LVC_PSZTEXT, $string_Memory_pointer) _MemWrite ($struct_MemMap, $column_struct_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemWrite ($struct_MemMap, $sBuffer_pointer, $string_Memory_pointer, StringLen($s_text) + 1) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf $ret = _SendMessage($h_listview, $LVM_SETCOLUMNA, $i_col, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Else DllStructSetData($struct_LVCOLUMN, $LVC_PSZTEXT, DllStructGetPtr($struct_String)) $ret = GUICtrlSendMsg($h_listview, $LVM_SETCOLUMNA, $i_col, DllStructGetPtr($struct_LVCOLUMN)) EndIf Return $ret EndFunc Func _GUICtrlListViewSetColumnOrder($h_listview, $s_order) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $i, $ret Local $struct = "" Local $a_order = StringSplit($s_order, "|") If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) For $i = 1 To $a_order[0] $struct &= "int;" Next $struct = StringTrimRight($struct, 1) Local $struct_LVCOLUMN = DllStructCreate($struct) For $i = 1 To $a_order[0] DllStructSetData($struct_LVCOLUMN, $i, $a_order[$i]) Next If IsHWnd($h_listview) Then Local $sBuffer_pointer = DllStructGetPtr($struct_LVCOLUMN) Local $i_Size = DllStructGetSize($struct_LVCOLUMN) Local $struct_MemMap Local $Memory_pointer = _MemInit ($h_listview, $i_Size, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemWrite ($struct_MemMap, $sBuffer_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf $ret = _SendMessage($h_listview, $LVM_SETCOLUMNORDERARRAY, $a_order[0], $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Else $ret = GUICtrlSendMsg($h_listview, $LVM_SETCOLUMNORDERARRAY, $a_order[0], DllStructGetPtr($struct_LVCOLUMN)) EndIf If (Not $ret) Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Return $ret EndFunc Func _GUICtrlListViewSetColumnWidth($h_listview, $i_col, $i_width) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_SETCOLUMNWIDTH, $i_col, $i_width) Else Return GUICtrlSendMsg($h_listview, $LVM_SETCOLUMNWIDTH, $i_col, $i_width) EndIf EndFunc Func _GUICtrlListViewSetHotItem($h_listview, $i_index) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_SETHOTITEM, $i_index) Else Return GUICtrlSendMsg($h_listview, $LVM_SETHOTITEM, $i_index, 0) EndIf EndFunc Func _GUICtrlListViewSetHoverTime($h_listview, $i_time) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_SETHOVERTIME, 0, $i_time) Else Return GUICtrlSendMsg($h_listview, $LVM_SETHOVERTIME, 0, $i_time) EndIf EndFunc Func _GUICtrlListViewSetItemCount($h_listview, $i_items) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, 0) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_SETITEMCOUNT, $i_items, BitOR($LVSICF_NOINVALIDATEALL, $LVSICF_NOSCROLL)) Else Return GUICtrlSendMsg($h_listview, $LVM_SETITEMCOUNT, $i_items, BitOR($LVSICF_NOINVALIDATEALL, $LVSICF_NOSCROLL)) EndIf EndFunc Func _GUICtrlListViewSetItemSelState($h_listview, $i_index, $i_selected = 1, $i_focused = 0) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $ret Local $struct_LVITEM = DllStructCreate($LVITEM) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If ($i_selected == 1) Then $i_selected = $LVNI_SELECTED Else $i_selected = 0 EndIf If ($i_focused == 1) Then $i_focused = $LVNI_FOCUSED Else $i_focused = 0 EndIf DllStructSetData($struct_LVITEM, $LVI_MASK, $LVIF_STATE) DllStructSetData($struct_LVITEM, $LVI_IITEM, $i_index) DllStructSetData($struct_LVITEM, $LVI_STATE, BitOR($i_selected, $i_focused)) DllStructSetData($struct_LVITEM, $LVI_STATEMASK, BitOR($LVIS_SELECTED, $i_focused)) If IsHWnd($h_listview) Then Local $sBuffer_pointer = DllStructGetPtr($struct_LVITEM) Local $i_Size = DllStructGetSize($struct_LVITEM) Local $struct_MemMap Local $Memory_pointer = _MemInit ($h_listview, $i_Size, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemWrite ($struct_MemMap, $sBuffer_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf $ret = _SendMessage($h_listview, $LVM_SETITEMSTATE, $i_index, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Else $ret = GUICtrlSendMsg($h_listview, $LVM_SETITEMSTATE, $i_index, DllStructGetPtr($struct_LVITEM)) EndIf Return $ret EndFunc Func _GUICtrlListViewSetItemText($h_listview, $i_index, $i_SubItem, $s_text) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $ret Local $struct_LVITEM = DllStructCreate($LVITEM) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Local $struct_String = DllStructCreate("char[" & StringLen($s_text) + 1 & "]") If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) DllStructSetData($struct_String, 1, $s_text) DllStructSetData($struct_LVITEM, $LVI_MASK, $LVIF_TEXT) DllStructSetData($struct_LVITEM, $LVI_IITEM, $i_index) DllStructSetData($struct_LVITEM, $LVI_ISUBITEM, $i_SubItem) If IsHWnd($h_listview) Then Local $sBuffer_pointer = DllStructGetPtr($struct_String) Local $LVITEM_pointer = DllStructGetPtr($struct_LVITEM) Local $i_Size = DllStructGetSize($struct_LVITEM) Local $struct_MemMap Local $Memory_pointer = _MemInit ($h_listview, $i_Size + StringLen($s_text) + 1, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf Local $string_Memory_pointer = $Memory_pointer + $i_Size DllStructSetData($struct_LVITEM, $LVI_PSZTEXT, $string_Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemWrite ($struct_MemMap, $LVITEM_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemWrite ($struct_MemMap, $sBuffer_pointer, $string_Memory_pointer, StringLen($s_text) + 1) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf $ret = _SendMessage($h_listview, $LVM_SETITEMTEXTA, 0, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($LV_ERR, $LV_ERR, $LV_ERR) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) Else DllStructSetData($struct_LVITEM, $LVI_PSZTEXT, DllStructGetPtr($struct_String)) $ret = GUICtrlSendMsg($h_listview, $LVM_SETITEMTEXTA, $i_index, DllStructGetPtr($struct_LVITEM)) EndIf Return $ret EndFunc Func _GUICtrlListViewSetSelectedColumn($h_listview, $i_col) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_SETSELECTEDCOLUMN, $i_col) Else Return GUICtrlSendMsg($h_listview, $LVM_SETSELECTEDCOLUMN, $i_col, 0) EndIf EndFunc Func _GUICtrlListViewSort($h_listview, ByRef $v_descending, $i_sortcol) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, 0) Local $X, $Y, $Z, $b_desc, $columns, $items, $v_item, $temp_item If _GUICtrlListViewGetItemCount($h_listview) Then If (IsArray($v_descending)) Then $b_desc = $v_descending[$i_sortcol] Else $b_desc = $v_descending EndIf $columns = _GUICtrlListViewGetSubItemsCount($h_listview) $items = _GUICtrlListViewGetItemCount($h_listview) For $X = 1 To $columns $temp_item = $temp_item & " |" Next $temp_item = StringTrimRight($temp_item, 1) Local $a_lv[$items][$columns + 1], $i_selected $i_selected = StringSplit(_GUICtrlListViewGetSelectedIndices($h_listview), "|") For $X = 0 To UBound($a_lv) - 1 Step 1 For $Y = 0 To UBound($a_lv, 2) - 2 Step 1 $v_item = StringStripWS(_GUICtrlListViewGetItemText($h_listview, $X, $Y), 2) If (StringIsFloat($v_item) Or StringIsInt($v_item)) Then $a_lv[$X][$Y] = Number($v_item) Else $a_lv[$X][$Y] = $v_item EndIf Next $a_lv[$X][$Y] = $X Next _ArraySort($a_lv, $b_desc, 0, 0, $columns + 1, $i_sortcol) _GUICtrlListViewSetItemSelState($h_listview, -1, 0) For $X = 0 To UBound($a_lv) - 1 Step 1 For $Y = 0 To UBound($a_lv, 2) - 2 Step 1 _GUICtrlListViewSetItemText($h_listview, $X, $Y, $a_lv[$X][$Y]) Next For $Z = 1 To $i_selected[0] If $a_lv[$X][UBound($a_lv, 2) - 1] = $i_selected[$Z]Then _GUICtrlListViewSetItemSelState($h_listview, $X, 1, 1) ExitLoop EndIf Next Next If (IsArray($v_descending)) Then $v_descending[$i_sortcol] = Not $b_desc Else $v_descending = Not $b_desc EndIf EndIf EndFunc Func _ReverseColorOrder($v_color) Local $tc = Hex(String($v_color), 6) Return '0x' & StringMid($tc, 5, 2) & StringMid($tc, 3, 2) & StringMid($tc, 1, 2) EndFunc Func _GUICtrlListViewArrange($h_listview, $i_arrange) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) If $i_arrange <> $LVA_ALIGNLEFT And $i_arrange <> $LVA_ALIGNTOP And _ $i_arrange <> $LVA_DEFAULT And $i_arrange <> $LVA_SNAPTOGRID Then Return SetError(-1, -1, 0) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_ARRANGE, $i_arrange) Else Return GUICtrlSendMsg($h_listview, $LVM_ARRANGE, $i_arrange, 0) EndIf EndFunc Func _GUICtrlListViewSetIconSpacing($h_listview, $i_cx, $i_cy) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, $LV_ERR) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_SETICONSPACING, 0, BitOR(BitShift($i_cy, -16), BitAND($i_cx, 0xFFFF))) Else Return GUICtrlSendMsg($h_listview, $LVM_SETICONSPACING, 0, BitOR(BitShift($i_cy, -16), BitAND($i_cx, 0xFFFF))) EndIf EndFunc Func _GUICtrlListViewSetItemPosition($h_listview, $i_index, $i_x, $i_y) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, False) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_SETITEMPOSITION, $i_index, BitOR(BitShift($i_y, -16), BitAND($i_x, 0xFFFF))) Else Return GUICtrlSendMsg($h_listview, $LVM_SETITEMPOSITION, $i_index, BitOR(BitShift($i_y, -16), BitAND($i_x, 0xFFFF))) EndIf EndFunc Func _GUICtrlListViewSetView($h_listview, $i_View) If Not _IsClassName ($h_listview, "SysListView32") Then Return SetError($LV_ERR, $LV_ERR, 0) If $i_View <> $LV_VIEW_DETAILS And $i_View <> $LV_VIEW_ICON And $i_View <> $LV_VIEW_LIST And _ $i_View <> $LV_VIEW_SMALLICON And $i_View <> $LV_VIEW_TILE Then Return SetError($LV_ERR, $LV_ERR, 0) If IsHWnd($h_listview) Then Return _SendMessage($h_listview, $LVM_SETVIEW, $i_View) Else Return GUICtrlSendMsg($h_listview, $LVM_SETVIEW, $i_View, 0) EndIf EndFunc ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Func _ArrayAdd(ByRef $avArray, $sValue) If IsArray($avArray) Then ReDim $avArray[UBound($avArray) + 1] $avArray[UBound($avArray) - 1] = $sValue SetError(0) Return 1 Else SetError(1) Return 0 EndIf EndFunc Func _ArrayBinarySearch(ByRef $avArray, $sKey, $i_Base = 0) Local $iLwrLimit = $i_Base Local $iUprLimit Local $iMidElement If (Not IsArray($avArray)) Then SetError(1) Return "" EndIf $iUprLimit = UBound($avArray) - 1 $iMidElement = Int(($iUprLimit + $iLwrLimit) / 2) If $avArray[$iLwrLimit] > $sKey Or $avArray[$iUprLimit] < $sKey Then SetError(2) Return "" EndIf While $iLwrLimit <= $iMidElement And $sKey <> $avArray[$iMidElement] If $sKey < $avArray[$iMidElement] Then $iUprLimit = $iMidElement - 1 Else $iLwrLimit = $iMidElement + 1 EndIf $iMidElement = Int(($iUprLimit + $iLwrLimit) / 2) WEnd If $iLwrLimit > $iUprLimit Then SetError(3) Return "" Else SetError(0) Return $iMidElement EndIf EndFunc Func _ArrayCreate($v_0, $v_1 = 0, $v_2 = 0, $v_3 = 0, $v_4 = 0, $v_5 = 0, $v_6 = 0, $v_7 = 0, $v_8 = 0, $v_9 = 0, $v_10 = 0, $v_11 = 0, $v_12 = 0, $v_13 = 0, $v_14 = 0, $v_15 = 0, $v_16 = 0, $v_17 = 0, $v_18 = 0, $v_19 = 0, $v_20 = 0) Local $av_Array[21] = [$v_0, $v_1, $v_2, $v_3, $v_4, $v_5, $v_6, $v_7, $v_8, $v_9, $v_10, $v_11, $v_12, $v_13, $v_14, $v_15, $v_16, $v_17, $v_18, $v_19, $v_20] ReDim $av_Array[@NumParams] Return $av_Array EndFunc Func _ArrayDelete(ByRef $avArray, $iElement) Local $iCntr = 0, $iUpper = 0 If (Not IsArray($avArray)) Then SetError(1) Return "" EndIf $iUpper = UBound($avArray) If $iUpper = 1 Then SetError(2) Return "" EndIf Local $avNewArray[$iUpper - 1] If $iElement < 0 Then $iElement = 0 EndIf If $iElement > ($iUpper - 1) Then $iElement = ($iUpper - 1) EndIf If $iElement > 0 Then For $iCntr = 0 To $iElement - 1 $avNewArray[$iCntr] = $avArray[$iCntr] Next EndIf If $iElement < ($iUpper - 1) Then For $iCntr = ($iElement + 1) To ($iUpper - 1) $avNewArray[$iCntr - 1] = $avArray[$iCntr] Next EndIf $avArray = $avNewArray SetError(0) Return 1 EndFunc Func _ArrayDisplay($ar_2DArray, $sTitle = "ListView array 1D and 2D Display", $i_ShowOver4000 = 1, $i_Transpose = 0, $GUIDataSeparatorChar = "|", $GUIDataReplace = "~") Local $searchlistView, $hndButton_Close, $sTempHeader = 'Row', $i_Pos, $size, $ar_ExcelValueTrans[1][1], $s_NotDoneLine, $ret Local $ar_TempSingle[1], $msg, $hndButton_Array1Box_TextSelect, $searchGUI, $ar_2dCurrent[1][1], $GUICtrlCreateListViewItem If Not IsArray($ar_2DArray) Then Return SetError(1, 0, 0) $searchGUI = GUICreate($sTitle, 810, 623, (@DesktopWidth - 800) / 2, (@DesktopHeight - 600) / 2, $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX) $hndButton_Array1Box_TextSelect = GUICtrlCreateButton('&Text' & 'Selected', 10, 550, 70, 24) GUICtrlSetResizing($hndButton_Array1Box_TextSelect, BitOR($GUI_DockRight, $GUI_DockBottom, $GUI_DockSize)) $hndButton_Close = GUICtrlCreateButton('&Close', 190, 550, 70, 24) GUICtrlSetResizing($hndButton_Close, BitOR($GUI_DockRight, $GUI_DockBottom, $GUI_DockSize)) GUICtrlSetState($hndButton_Array1Box_TextSelect, ($GUI_DefButton)) If UBound($ar_2DArray, 0) = 1 Then ReDim $ar_2dCurrent[UBound($ar_2DArray) ][1] For $i = 0 To UBound($ar_2DArray) - 1 $ar_2dCurrent[$i][0] = $ar_2DArray[$i] Next $ar_2DArray = $ar_2dCurrent EndIf If $i_Transpose And IsArray($ar_2DArray) And UBound($ar_2DArray, 0) = 2 Then ReDim $ar_ExcelValueTrans[UBound($ar_2DArray, 2) ][UBound($ar_2DArray, 1) ] For $j = 0 To UBound($ar_2DArray, 2) - 1 For $numb = 0 To UBound($ar_2DArray, 1) - 1 If $numb > 250 Then ExitLoop $ar_ExcelValueTrans[$j][$numb] = $ar_2DArray[$numb][$j] Next Next $ar_2DArray = $ar_ExcelValueTrans EndIf Opt("GUIDataSeparatorChar", $GUIDataSeparatorChar) For $x = 0 To UBound($ar_2DArray) - 1 Step 1 For $y = 0 To UBound($ar_2DArray, 2) - 1 Step 1 $ar_2DArray[$x][$y] = StringReplace($ar_2DArray[$x][$y], $GUIDataSeparatorChar, $GUIDataReplace) Next Next For $i = 1 To UBound($ar_2DArray, 2) $sTempHeader &= $GUIDataSeparatorChar & 'Col ' & $i - 1 Next StringReplace($sTempHeader, $GUIDataSeparatorChar, "<") If @extended > 252 Then $i_Pos = StringInStr($sTempHeader, $GUIDataSeparatorChar, 0, 252) $sTempHeader = StringLeft($sTempHeader, $i_Pos - 1) EndIf $s_NotDoneLine = StringReplace($sTempHeader, "Col", "ND") If UBound($ar_2DArray, 0) = 2 Then ReDim $ar_TempSingle[UBound($ar_2DArray) ] For $i = 0 To UBound($ar_2DArray) - 1 $ar_TempSingle[$i] = "[" & $i & "]" For $c = 0 To UBound($ar_2DArray, 2) - 1 If $c < 251 Then $ar_TempSingle[$i] &= $GUIDataSeparatorChar & $ar_2DArray[$i][$c] Else ExitLoop EndIf Next $ar_TempSingle[$i] = StringMid($ar_TempSingle[$i], 1, StringLen($ar_TempSingle) - 1) Next Else $ar_TempSingle = $ar_2DArray EndIf $size = WinGetClientSize($sTitle) GUICtrlDelete($searchlistView) $searchlistView = GUICtrlCreateListView($sTempHeader, 0, 16, $size[0] - 10, $size[1] - 90, BitOR($LVS_SHOWSELALWAYS, $LVS_EDITLABELS), BitOR($LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP, $LVS_EX_FULLROWSELECT, $LVS_EX_REGIONAL)) GUICtrlSetResizing($searchlistView, BitOR($GUI_DockLeft, $GUI_DockTop, $GUI_DockRight, $GUI_DockBottom)) For $c = 0 To UBound($ar_TempSingle) - 1 If ($c < 3999) Or $i_ShowOver4000 Then If $c < 3999 Then $GUICtrlCreateListViewItem = GUICtrlCreateListViewItem($ar_TempSingle[$c], $searchlistView) If Not $GUICtrlCreateListViewItem Then GUICtrlCreateListViewItem($s_NotDoneLine, $searchlistView) Else $ret = _GUICtrlListViewInsertItem($searchlistView, -1, $ar_TempSingle[$c]) If ($ret = $LV_ERR) Then _GUICtrlListViewInsertItem($searchlistView, -1, $s_NotDoneLine) EndIf ElseIf ($c >= 3999) Then ExitLoop EndIf Next _GUICtrlListViewSetColumnWidth($searchlistView, 2, $LVSCW_AUTOSIZE) If UBound($ar_2DArray, 2) = 1 Then _GUICtrlListViewSetColumnWidth($searchlistView, 1, $LVSCW_AUTOSIZE) GUISetState() Local $SaveEventMode = Opt("GUIOnEventMode",0) Do $msg = GUIGetMsg(1) Select Case $msg[0] = $hndButton_Array1Box_TextSelect Local $a_indices[1], $s_CopyLines = "" If _GUICtrlListViewGetItemCount($searchlistView) Then $a_indices = _GUICtrlListViewGetSelectedIndices($searchlistView, 1) If (IsArray($a_indices)) Then ClipPut("") For $i = 1 To $a_indices[0] $s_CopyLines &= $ar_TempSingle[ $a_indices[$i]] & @LF Next Else For $i = 0 To UBound($ar_TempSingle) - 1 $s_CopyLines &= $ar_TempSingle[$i] & @LF Next EndIf ClipPut($s_CopyLines) EndSelect Until $msg[0] = $GUI_EVENT_CLOSE Or $msg[0] = $hndButton_Close GUIDelete($searchGUI) Opt("GUIOnEventMode",$SaveEventMode) Return SetError(0, 0, 1) EndFunc Func _ArrayInsert(ByRef $avArray, $iElement, $sValue = "") Local $iCntr = 0 If Not IsArray($avArray) Then SetError(1) Return 0 EndIf ReDim $avArray[UBound($avArray) + 1] For $iCntr = UBound($avArray) - 1 To $iElement + 1 Step - 1 $avArray[$iCntr] = $avArray[$iCntr - 1] Next $avArray[$iCntr] = $sValue Return 1 EndFunc Func _ArrayMax(Const ByRef $avArray, $iCompNumeric = 0, $i_Base = 0) If IsArray($avArray) Then Return $avArray[_ArrayMaxIndex($avArray, $iCompNumeric, $i_Base) ] Else SetError(1) Return "" EndIf EndFunc Func _ArrayMaxIndex(Const ByRef $avArray, $iCompNumeric = 0, $i_Base = 0) Local $iCntr, $iMaxIndex = $i_Base If Not IsArray($avArray) Then SetError(1) Return "" EndIf Local $iUpper = UBound($avArray) For $iCntr = $i_Base To ($iUpper - 1) If $iCompNumeric = 1 Then If Number($avArray[$iMaxIndex]) < Number($avArray[$iCntr]) Then $iMaxIndex = $iCntr EndIf Else If $avArray[$iMaxIndex] < $avArray[$iCntr] Then $iMaxIndex = $iCntr EndIf EndIf Next SetError(0) Return $iMaxIndex EndFunc Func _ArrayMin(Const ByRef $avArray, $iCompNumeric = 0, $i_Base = 0) If IsArray($avArray) Then Return $avArray[_ArrayMinIndex($avArray, $iCompNumeric, $i_Base) ] Else SetError(1) Return "" EndIf EndFunc Func _ArrayMinIndex(Const ByRef $avArray, $iCompNumeric = 0, $i_Base = 0) Local $iCntr = 0, $iMinIndex = $i_Base If Not IsArray($avArray) Then SetError(1) Return "" EndIf Local $iUpper = UBound($avArray) For $iCntr = $i_Base To ($iUpper - 1) If $iCompNumeric = 1 Then If Number($avArray[$iMinIndex]) > Number($avArray[$iCntr]) Then $iMinIndex = $iCntr EndIf Else If $avArray[$iMinIndex] > $avArray[$iCntr] Then $iMinIndex = $iCntr EndIf EndIf Next SetError(0) Return $iMinIndex EndFunc Func _ArrayPop(ByRef $avArray) Local $sLastVal If (Not IsArray($avArray)) Then SetError(1) Return "" EndIf $sLastVal = $avArray[UBound($avArray) - 1] If UBound($avArray) = 1 Then $avArray = "" Else ReDim $avArray[UBound($avArray) - 1] EndIf Return $sLastVal EndFunc Func _ArrayPush(ByRef $avArray, $sValue, $i_Direction = 0) Local $i, $j If (Not IsArray($avArray)) Then SetError(1) Return 0 EndIf If (Not IsArray($sValue)) Then If $i_Direction = 1 Then For $i = (UBound($avArray) - 1) To 1 Step - 1 $avArray[$i] = $avArray[$i - 1] Next $avArray[0] = $sValue Else For $i = 0 To (UBound($avArray) - 2) $avArray[$i] = $avArray[$i + 1] Next $i = (UBound($avArray) - 1) $avArray[$i] = $sValue EndIf SetError(0) Return 1 Else If UBound($sValue) > UBound($avArray) Then SetError(1) Return -1 Else For $j = 0 To (UBound($sValue) - 1) If $i_Direction = 1 Then For $i = (UBound($avArray) - 1) To 1 $avArray[$i] = $avArray[$i - 1] Next $avArray[$j] = $sValue[$j] Else For $i = 0 To (UBound($avArray) - 2) $avArray[$i] = $avArray[$i + 1] Next $i = (UBound($avArray) - 1) $avArray[$i] = $sValue[$j] EndIf Next EndIf EndIf SetError(0) Return 1 EndFunc Func _ArrayReverse(ByRef $avArray, $i_Base = 0, $i_UBound = 0) If Not IsArray($avArray) Then SetError(1) Return 0 EndIf Local $tmp, $last = UBound($avArray) - 1 If $i_UBound < 1 Or $i_UBound > $last Then $i_UBound = $last For $i = $i_Base To $i_Base + Int(($i_UBound - $i_Base - 1) / 2) $tmp = $avArray[$i] $avArray[$i] = $avArray[$i_UBound] $avArray[$i_UBound] = $tmp $i_UBound = $i_UBound - 1 Next Return 1 EndFunc Func _ArraySearch(Const ByRef $avArray, $vWhat2Find, $iStart = 0, $iEnd = 0, $iCaseSense = 0, $fPartialSearch = False) Local $iCurrentPos, $iUBound, $iResult If Not IsArray($avArray) Then SetError(1) Return -1 EndIf $iUBound = UBound($avArray) - 1 If $iEnd = 0 Then $iEnd = $iUBound If $iStart > $iUBound Then SetError(2) Return -1 EndIf If $iEnd > $iUBound Then SetError(3) Return -1 EndIf If $iStart > $iEnd Then SetError(4) Return -1 EndIf If Not ($iCaseSense = 0 Or $iCaseSense = 1) Then SetError(5) Return -1 EndIf For $iCurrentPos = $iStart To $iEnd Select Case $iCaseSense = 0 If $fPartialSearch = False Then If $avArray[$iCurrentPos] = $vWhat2Find Then SetError(0) Return $iCurrentPos EndIf Else $iResult = StringInStr($avArray[$iCurrentPos], $vWhat2Find, $iCaseSense) If $iResult > 0 Then SetError(0) Return $iCurrentPos EndIf EndIf Case $iCaseSense = 1 If $fPartialSearch = False Then If $avArray[$iCurrentPos] == $vWhat2Find Then SetError(0) Return $iCurrentPos EndIf Else $iResult = StringInStr($avArray[$iCurrentPos], $vWhat2Find, $iCaseSense) If $iResult > 0 Then SetError(0) Return $iCurrentPos EndIf EndIf EndSelect Next SetError(6) Return -1 EndFunc Func _ArraySort(ByRef $a_Array, $i_Decending = 0, $i_Base = 0, $i_UBound = 0, $i_Dim = 1, $i_SortIndex = 0) If Not IsArray($a_Array) Then SetError(1) Return 0 EndIf Local $last = UBound($a_Array) - 1 If $i_UBound < 1 Or $i_UBound > $last Then $i_UBound = $last If $i_Dim = 1 Then __ArrayQSort1($a_Array, $i_Base, $i_UBound) If $i_Decending Then _ArrayReverse($a_Array, $i_Base, $i_UBound) Else __ArrayQSort2($a_Array, $i_Base, $i_UBound, $i_Dim, $i_SortIndex, $i_Decending) EndIf Return 1 EndFunc Func __ArrayQSort1(ByRef $array, ByRef $left, ByRef $right) Local $i, $j, $t If $right - $left < 10 Then For $i = $left + 1 To $right $t = $array[$i] $j = $i While $j > $left _ And ((IsNumber($array[$j - 1]) = IsNumber($t) And $array[$j - 1] > $t) _ Or (IsNumber($array[$j - 1]) <> IsNumber($t) And String($array[$j - 1]) > String($t))) $array[$j] = $array[$j - 1] $j = $j - 1 WEnd $array[$j] = $t Next Return EndIf Local $pivot = $array[Int(($left + $right) / 2) ] Local $L = $left Local $R = $right Do While ((IsNumber($array[$L]) = IsNumber($pivot) And $array[$L] < $pivot) _ Or (IsNumber($array[$L]) <> IsNumber($pivot) And String($array[$L]) < String($pivot))) $L = $L + 1 WEnd While ((IsNumber($array[$R]) = IsNumber($pivot) And $array[$R] > $pivot) _ Or (IsNumber($array[$R]) <> IsNumber($pivot) And String($array[$R]) > String($pivot))) $R = $R - 1 WEnd If $L <= $R Then $t = $array[$L] $array[$L] = $array[$R] $array[$R] = $t $L = $L + 1 $R = $R - 1 EndIf Until $L > $R __ArrayQSort1($array, $left, $R) __ArrayQSort1($array, $L, $right) EndFunc Func __ArrayQSort2(ByRef $array, ByRef $left, ByRef $right, ByRef $dim2, ByRef $sortIdx, ByRef $decend) If $left >= $right Then Return Local $t, $d2 = $dim2 - 1 Local $pivot = $array[Int(($left + $right) / 2) ][$sortIdx] Local $L = $left Local $R = $right Do If $decend Then While ((IsNumber($array[$L][$sortIdx]) = IsNumber($pivot) And $array[$L][$sortIdx] > $pivot) _ Or (IsNumber($array[$L][$sortIdx]) <> IsNumber($pivot) And String($array[$L][$sortIdx]) > String($pivot))) $L = $L + 1 WEnd While ((IsNumber($array[$R][$sortIdx]) = IsNumber($pivot) And $array[$R][$sortIdx] < $pivot) _ Or (IsNumber($array[$R][$sortIdx]) <> IsNumber($pivot) And String($array[$R][$sortIdx]) < String($pivot))) $R = $R - 1 WEnd Else While ((IsNumber($array[$L][$sortIdx]) = IsNumber($pivot) And $array[$L][$sortIdx] < $pivot) _ Or (IsNumber($array[$L][$sortIdx]) <> IsNumber($pivot) And String($array[$L][$sortIdx]) < String($pivot))) $L = $L + 1 WEnd While ((IsNumber($array[$R][$sortIdx]) = IsNumber($pivot) And $array[$R][$sortIdx] > $pivot) _ Or (IsNumber($array[$R][$sortIdx]) <> IsNumber($pivot) And String($array[$R][$sortIdx]) > String($pivot))) $R = $R - 1 WEnd EndIf If $L <= $R Then For $x = 0 To $d2 $t = $array[$L][$x] $array[$L][$x] = $array[$R][$x] $array[$R][$x] = $t Next $L = $L + 1 $R = $R - 1 EndIf Until $L > $R __ArrayQSort2($array, $left, $R, $dim2, $sortIdx, $decend) __ArrayQSort2($array, $L, $right, $dim2, $sortIdx, $decend) EndFunc Func _ArraySwap(ByRef $svector1, ByRef $svector2) Local $sTemp = $svector1 $svector1 = $svector2 $svector2 = $sTemp SetError(0) EndFunc Func _ArrayToClip(Const ByRef $avArray, $i_Base = 0) Local $iCntr, $iRetVal = 0, $sCr = "", $sText = "" If (IsArray($avArray)) Then For $iCntr = $i_Base To (UBound($avArray) - 1) $iRetVal = 1 If $iCntr > $i_Base Then $sCr = @CR EndIf $sText = $sText & $sCr & $avArray[$iCntr] Next EndIf ClipPut($sText) Return $iRetVal EndFunc Func _ArrayToString(Const ByRef $avArray, $sDelim, $iStart = Default, $iEnd = Default) Local $iUBound = UBound($avArray) - 1 If ($iUBound + 1) < 2 Or UBound($avArray, 0) > 1 Then Return SetError(1, 0, "") If $iStart = Default Or $iStart = -1 Then $iStart = 0 If $iEnd = Default Or $iEnd = -1 Then $iEnd = $iUBound If ($iStart < 0) Or ($iEnd < 0) Or ($iStart > $iEnd) Then Return SetError(2, 0, "") If ($iEnd > $iUBound) Then $iEnd = $iUBound EndIf Local $sResult For $i = $iStart To $iEnd $sResult &= $avArray[$i] & $sDelim Next Return StringTrimRight($sResult, StringLen($sDelim)) EndFunc Func _ArrayTrim($aArray, $iTrimNum, $iTrimDirection = 0, $iBase = 0, $iUBound = 0) Local $i If UBound($aArray) = 0 Then SetError(1) Return $aArray EndIf If $iBase < 0 Or Not IsNumber($iBase) Then SetError(2) Return $aArray EndIf If UBound($aArray) <= $iUBound Or Not IsNumber($iUBound) Then SetError(3) Return $aArray EndIf If $iUBound < 1 Then $iUBound = UBound($aArray) - 1 If $iTrimDirection < 0 Or $iTrimDirection > 1 Then SetError(4) Return EndIf For $i = $iBase To $iUBound If $iTrimDirection = 0 Then $aArray[$i] = StringTrimLeft($aArray[$i], $iTrimNum) Else $aArray[$i] = StringTrimRight($aArray[$i], $iTrimNum) EndIf Next Return $aArray EndFunc ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global Const $CCS_TOP = 0x1 Global Const $CCS_NOMOVEY = 0x2 Global Const $CCS_BOTTOM = 0x3 Global Const $CCS_NORESIZE = 0x4 Global Const $CCS_NOPARENTALIGN = 0x8 Global Const $CCS_NOHILITE = 0x10 Global Const $CCS_ADJUSTABLE = 0x20 Global Const $CCS_NODIVIDER = 0x40 Global Const $SBARS_SIZEGRIP = 0x100 Global Const $SBT_TOOLTIPS = 0x800 Global Const $SBT_SUNKEN = 0x0 Global Const $SBT_NOBORDERS = 0x100 Global Const $SBT_POPOUT = 0x200 Global Const $SBT_RTLREADING = 0x400 Global Const $SBT_OWNERDRAW = 0x1000 Global Const $SB_GETPARTS = 0x406 Global Const $SB_GETBORDERS = (0x400 + 7) Global Const $SB_GETICON = (0x400 + 20) Global Const $SB_GETRECT = (0x400 + 10) Global Const $SB_GETTEXT = 0x402 Global Const $SB_GETTEXTLENGTH = 0x403 Global Const $SB_GETTIPTEXT = (0x400 + 18) Global Const $SB_GETUNICODEFORMAT = (0x2000 + 6) Global Const $SB_SETBKCOLOR = (0x2000 + 1) Global Const $SB_SETICON = (0x400 + 15) Global Const $SB_SETMINHEIGHT = 0x408 Global Const $SB_SETPARTS = 0x404 Global Const $SB_SETTEXT = 0x401 Global Const $SB_SETTIPTEXT = (0x400 + 16) Global Const $SB_SETUNICODEFORMAT = (0x2000 + 5) Global Const $SB_SIMPLE = 0x409 Global Const $SB_SIMPLEID = 0xff Global Const $SB_ISSIMPLE = 0x40E Global Const $SB_LINEDOWN = 1 Global Const $SB_LINEUP = 0 Global Const $SB_PAGEDOWN = 3 Global Const $SB_PAGEUP = 2 Global Const $SB_SCROLLCARET = 4 ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Global $debug = True Global Const $LowOrder = 0xFFFF Func _GUICtrlStatusBarCreate($h_Gui, $a_PartWidth, $s_PartText, $v_styles = "") Local $a_PW[1], $a_PT[1] If IsArray($a_PartWidth) Then $a_PW = $a_PartWidth Else $a_PW[0] = $a_PartWidth EndIf If IsArray($s_PartText) Then $a_PT = $s_PartText Else $a_PT[0] = $s_PartText EndIf If UBound($a_PW) <> UBound($a_PT) Then Return SetError(-1, -1, 0) If Not IsHWnd($h_Gui) Then $h_Gui = HWnd($h_Gui) Local $hwnd_Bar1, $x Local $style = BitOR($WS_CHILD, $WS_VISIBLE) If @NumParams = 4 Then $style = BitOR($style, $v_styles) $hwnd_Bar1 = DllCall("user32.dll", "long", "CreateWindowEx", "long", 0, _ "str", "msctls_statusbar32", "str", "", _ "long", $style, "long", 0, "long", 0, "long", 0, "long", 0, _ "hwnd", $h_Gui, "long", 0, "hwnd", $h_Gui, "long", 0) If @error Then Return SetError(1, 1, 0) _GUICtrlStatusBarSetParts($h_Gui, $hwnd_Bar1[0], UBound($a_PW), $a_PW) For $x = 0 To UBound($s_PartText) - 1 _GUICtrlStatusBarSetText($hwnd_Bar1[0], $a_PT[$x], $x) Next Return HWnd($hwnd_Bar1[0]) EndFunc Func _GUICtrlStatusBarCreateProgress($h_StatusBar, $i_Part, $v_styles = "") If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, -1) Local $i_pad = 2, $a_box[4], $v_ret If _GUICtrlStatusBarIsSimple($h_StatusBar) Then Local $i_parts = _GUICtrlStatusBarGetParts($h_StatusBar) _GUICtrlStatusBarSetSimple($h_StatusBar, False) $v_ret = _GUICtrlStatusBarGetRect($h_StatusBar, 0) $a_box[0] = $v_ret[0] $a_box[1] = $v_ret[1] $a_box[3] = $v_ret[3] $v_ret = _GUICtrlStatusBarGetRect($h_StatusBar, $i_parts - 1) $a_box[2] = $v_ret[2] _GUICtrlStatusBarSetSimple($h_StatusBar, True) Else If _GUICtrlStatusBarGetParts($h_StatusBar) - 1 < $i_Part Or $i_Part < 0 Then Return SetError(-1, -1, -1) $a_box = _GUICtrlStatusBarGetRect($h_StatusBar, $i_Part) EndIf $a_box[0] = $a_box[0] + $i_pad $a_box[1] = $a_box[1] + $i_pad $a_box[2] = $a_box[2] - $a_box[0] - $i_pad $a_box[3] = $a_box[3] - $a_box[1] - $i_pad Local $Progress1 = GUICtrlCreateProgress($a_box[0], $a_box[1], $a_box[2], $a_box[3], $v_styles) GUICtrlSetResizing($Progress1, 802) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) Local $h_Progress = GUICtrlGetHandle($Progress1) $v_ret = DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $h_Progress, "hwnd", $h_StatusBar) If Not IsHWnd($v_ret[0]) Then Return SetError(-1, -1, -1) Return $Progress1 EndFunc Func _GUICtrlStatusBarDelete($h_StatusBar) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) Local $v_ret = DllCall("user32.dll", "int", "DestroyWindow", "hwnd", HWnd($h_StatusBar)) If Not @error And IsArray($v_ret) Then Return $v_ret[0] Return SetError(1, 1, 0) EndFunc Func _GUICtrlStatusBarGetBorders($h_StatusBar) Local $ret Local $borders_struct = DllStructCreate("int;int;int") Local $borders_struct_pointer = DllStructGetPtr($borders_struct) If @error Then Return SetError(@error, @error, 0) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) Local $struct_MemMap Local $i_Size = DllStructGetSize($borders_struct) Local $Memory_pointer = _MemInit ($h_StatusBar, $i_Size, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf $ret = _SendMessage($h_StatusBar, $SB_GETBORDERS, 0, $Memory_pointer, 0, "int", "ptr") If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf _MemRead ($struct_MemMap, $Memory_pointer, $borders_struct_pointer, $i_Size) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError(-1, -1, 0) If (Not $ret) Then Return SetError(-1, -1, 0) Else Local $a_borders[3], $x For $x = 0 To 2 $a_borders[$x] = DllStructGetData($borders_struct, $x + 1) Next Return $a_borders EndIf EndFunc Func _GUICtrlStatusBarGetIcon($h_StatusBar, $i_Part = 0) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) Return _SendMessage($h_StatusBar, $SB_GETICON, $i_Part) EndFunc Func _GUICtrlStatusBarGetParts($h_StatusBar) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) Return _SendMessage($h_StatusBar, $SB_GETPARTS) EndFunc Func _GUICtrlStatusBarGetRect($h_StatusBar, $i_Part = 0) Local $ret If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, -1) Local $RECT_struct = DllStructCreate("int;int;int;int") If @error Then Return SetError(-1, -1, 0) Local $RECT_struct_pointer = DllStructGetPtr($RECT_struct) If @error Then Return SetError(@error, @error, 0) Local $struct_MemMap Local $i_Size = DllStructGetSize($RECT_struct) Local $Memory_pointer = _MemInit ($h_StatusBar, $i_Size, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf $ret = _SendMessage($h_StatusBar, $SB_GETRECT, $i_Part, $Memory_pointer, 0, "int", "ptr") If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf _MemRead ($struct_MemMap, $Memory_pointer, $RECT_struct_pointer, $i_Size) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError(-1, -1, 0) If Not $ret Then Return SetError(-1, -1, 0) Else Local $a_rect[4], $x For $x = 0 To 3 $a_rect[$x] = DllStructGetData($RECT_struct, $x + 1) Next Return $a_rect EndIf EndFunc Func _GUICtrlStatusBarGetText($h_StatusBar, $i_Part = 0) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, "") Local $struct_String = DllStructCreate("char[4096]") Local $sBuffer_pointer = DllStructGetPtr($struct_String) Local $i_Size = DllStructGetSize($struct_String) Local $struct_MemMap Local $Memory_pointer = _MemInit ($h_StatusBar, $i_Size + 4096, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, "") EndIf _SendMessage($h_StatusBar, $SB_GETTEXT, $i_Part, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, "") EndIf _MemRead ($struct_MemMap, $Memory_pointer, $sBuffer_pointer, 4096) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, "") EndIf _MemFree ($struct_MemMap) If @error Then Return SetError(-1, -1, "") Return DllStructGetData($struct_String, 1) EndFunc Func _GUICtrlStatusBarGetTextLength($h_StatusBar, $i_Part = 0) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, -1) Return _SendMessage($h_StatusBar, $SB_GETTEXTLENGTH, $i_Part) EndFunc Func _GUICtrlStatusBarGetTip($h_StatusBar, $i_Part = 0) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, -1) Local $struct_String = DllStructCreate("char[255]") Local $sBuffer_pointer = DllStructGetPtr($struct_String) Local $i_Size = DllStructGetSize($struct_String) Local $wParam = (($i_Size * 0x10000) + $i_Part) Local $struct_MemMap Local $Memory_pointer = _MemInit ($h_StatusBar, $i_Size + 255, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, "") EndIf _SendMessage($h_StatusBar, $SB_GETTIPTEXT, $wParam, $Memory_pointer, 0, "long", "ptr") If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, "") EndIf _MemRead ($struct_MemMap, $Memory_pointer, $sBuffer_pointer, 255) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, "") EndIf _MemFree ($struct_MemMap) If @error Then Return SetError(-1, -1, "") Return StringStripWS(DllStructGetData($struct_String, 1), 7) EndFunc Func _GUICtrlStatusBarGetUnicode($h_StatusBar) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) Return _SendMessage($h_StatusBar, $SB_GETUNICODEFORMAT) EndFunc Func _GUICtrlStatusBarIsSimple($h_StatusBar) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) Return _SendMessage($h_StatusBar, $SB_ISSIMPLE) EndFunc Func _GUICtrlStatusBarResize($h_StatusBar) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) Local $ret = DllCall("user32.dll", "int", "MoveWindow", "hwnd", $h_StatusBar, "int", 0, "int", 0, "int", 0, "int", 0, "int", 1) If IsArray($ret) Then Return $ret[0] Else Return SetError(-1, -1, 0) EndIf EndFunc Func _GUICtrlStatusBarSetBKColor($h_StatusBar, $v_HexRGB) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) Local Const $CLR_DEFAULT = 0xFF000000 Local $tc, $ret If $v_HexRGB = $CLR_DEFAULT Then $ret = _SendMessage($h_StatusBar, $SB_SETBKCOLOR, 0, $CLR_DEFAULT) Else $tc = Hex(String($v_HexRGB), 6) $ret = _SendMessage($h_StatusBar, $SB_SETBKCOLOR, 0, '0x' & StringMid($tc, 5, 2) & StringMid($tc, 3, 2) & StringMid($tc, 1, 2)) EndIf If @error Then Return SetError(-1, -1, 0) If $ret = $CLR_DEFAULT Then Return $CLR_DEFAULT $tc = Hex(String($ret), 6) Return '0x' & StringMid($tc, 5, 2) & StringMid($tc, 3, 2) & StringMid($tc, 1, 2) EndFunc Func _GUICtrlStatusBarSetIcon($h_StatusBar, $i_Part, $s_IconFile = "", $i_iconID = -1) Local $hIcon, $result If $i_Part = 255 Then $i_Part = -1 If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) If $i_iconID = -1 Then Return _SendMessage($h_StatusBar, $SB_SETICON, $i_Part, $i_iconID, 0, "int", "hwnd") Else $hIcon = DllStructCreate("int") $result = DllCall("shell32.dll", "int", "ExtractIconEx", "str", $s_IconFile, "int", $i_iconID, "hwnd", 0, "ptr", DllStructGetPtr($hIcon), "int", 1) $result = $result[0] If $result > 0 Then $result = _SendMessage($h_StatusBar, $SB_SETICON, $i_Part, DllStructGetData($hIcon, 1), 0, "int", "hwnd") DllCall("user32.dll", "int", "DestroyIcon", "hwnd", DllStructGetPtr($hIcon, 1)) $hIcon = 0 Return $result EndIf EndFunc Func _GUICtrlStatusBarSetMinHeight($h_StatusBar, $i_MinHeight) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) _SendMessage($h_StatusBar, $SB_SETMINHEIGHT, $i_MinHeight) _GUICtrlStatusBarResize($h_StatusBar) EndFunc Func _GUICtrlStatusBarSetSimple($h_StatusBar, $b_Simple = True) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) _SendMessage($h_StatusBar, $SB_SIMPLE, $b_Simple) EndFunc Func _GUICtrlStatusBarSetText($h_StatusBar, $s_Data = "", $i_Part = 0) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, False) Local $struct_String = DllStructCreate("char[" & StringLen($s_Data) + 1 & "]") Local $sBuffer_pointer = DllStructGetPtr($struct_String) Local $struct_MemMap Local $Memory_pointer = _MemInit ($h_StatusBar, StringLen($s_Data) + 1, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf DllStructSetData($struct_String, 1, $s_Data) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf _MemWrite ($struct_MemMap, $sBuffer_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf Local $ret = _SendMessage($h_StatusBar, $SB_SETTEXT, $i_Part, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf _MemFree ($struct_MemMap) Return $ret EndFunc Func _GUICtrlStatusBarSetTip($h_StatusBar, $i_Part, $s_ToolTip) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) Local $struct_String = DllStructCreate("char[" & StringLen($s_ToolTip) + 1 & "]") Local $sBuffer_pointer = DllStructGetPtr($struct_String) Local $struct_MemMap Local $Memory_pointer = _MemInit ($h_StatusBar, StringLen($s_ToolTip) + 1, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf DllStructSetData($struct_String, 1, $s_ToolTip) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf _MemWrite ($struct_MemMap, $sBuffer_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf _SendMessage($h_StatusBar, $SB_SETTIPTEXT, $i_Part, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError(-1, -1, 0) EndIf _MemFree ($struct_MemMap) EndFunc Func _GUICtrlStatusBarSetUnicode($h_StatusBar, $b_Unicode = True) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, False) Return _SendMessage($h_StatusBar, $SB_SETUNICODEFORMAT, $b_Unicode) EndFunc Func _GUICtrlStatusBarShowHide($h_StatusBar, $i_state) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) If $i_state <> @SW_HIDE And $i_state <> @SW_SHOW Then Return SetError(1, 1, 0) Local $v_ret = DllCall("user32.dll", "int", "ShowWindow", "hwnd", HWnd($h_StatusBar), "int", $i_state) If Not @error And IsArray($v_ret) Then Return $v_ret[0] Return SetError(2, 2, 0) EndFunc Func _GUICtrlStatusBarSetParts($h_Gui, $h_StatusBar, $i_parts, $v_PartWidth = 100) Local $struct_parts If IsArray($i_parts) Then Return SetError(1, 1, 0) If $i_parts < 1 Then $i_parts = 1 If IsArray($v_PartWidth) Then $i_parts = UBound($v_PartWidth) If Not IsHWnd($h_StatusBar) Then $h_StatusBar = HWnd($h_StatusBar) If Not _IsClassName ($h_StatusBar, "msctls_statusbar32") Then Return SetError(-1, -1, 0) If Not IsArray($v_PartWidth) Then Local $a_tPartWidth[$i_parts], $part, $size $size = WinGetClientSize($h_Gui) For $part = 1 To $i_parts $a_tPartWidth[$part - 1] = Int(($size[0] / $i_parts) * $part + 1) Next $a_tPartWidth[$i_parts - 1] = -1 $struct_parts = _CreateStuctFromArray($a_tPartWidth, "int") If @error Then Return SetError(1, 1, 0) Else $struct_parts = _CreateStuctFromArray($v_PartWidth, "int") If @error Then Return SetError(1, 1, 0) EndIf Local $struct_parts_pointer = DllStructGetPtr($struct_parts) Local $struct_MemMap Local $i_Size = DllStructGetSize($struct_parts) Local $Memory_pointer = _MemInit ($h_StatusBar, $i_Size, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError(1, 1, 0) EndIf _MemWrite ($struct_MemMap, $struct_parts_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError(1, 1, 0) EndIf _SendMessage($h_StatusBar, $SB_SETPARTS, $i_parts, $Memory_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError(1, 1, 0) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError(1, 1, 0) _GUICtrlStatusBarResize($h_StatusBar) Return 1 EndFunc Func _CreateStuctFromArray($a_Variable, $structType) If Not IsArray($a_Variable) Then Return SetError(1, 1, 0) Local $a_ctr, $strVar, $struct For $a_ctr = 0 To UBound($a_Variable) - 1 $strVar &= $structType & ";" Next $strVar = StringTrimRight($strVar, 1) $struct = DllStructCreate($strVar) If @error Then Return SetError(1, 1, 0) For $a_ctr = 0 To UBound($a_Variable) - 1 DllStructSetData($struct, ($a_ctr) + 1, $a_Variable[$a_ctr]) If @error Then Return SetError(1, 1, 0) Next Return $struct EndFunc ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Func _GUICtrlEditCanUndo($h_Edit) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, 0) If IsHWnd($h_Edit) Then Return _SendMessage($h_Edit, $EM_CANUNDO) Else Return GUICtrlSendMsg($h_Edit, $EM_CANUNDO, 0, 0) EndIf EndFunc Func _GUICtrlEditEmptyUndoBuffer($h_Edit) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, 0) If IsHWnd($h_Edit) Then _SendMessage($h_Edit, $EM_EMPTYUNDOBUFFER) Else GUICtrlSendMsg($h_Edit, $EM_EMPTYUNDOBUFFER, 0, 0) EndIf EndFunc Func _GuiCtrlEditFind(ByRef $h_gui, ByRef $h_Edit, $b_replace = False, $s_WinTitle = "", $s_WinText = "") If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, 0) Local $gui_Search, $Input_Search, $Input_Replace, $lbl_replace, $msg_find Local $pos = 0, $case, $occurance = 0, $Replacements = 0 Local $chk_wholeonly, $chk_matchcase, $btn_FindNext, $btn_replace, $btn_close, $StatusBar1 Local $s_text, $a_sel Local $a_PartsRightEdge[3] = [125, 225, -1] Local $a_PartsText[3] = ["", "", ""], $t_pos If $s_WinTitle <> "" Then $s_text = ControlGetText($s_WinTitle, $s_WinText, $h_Edit) $a_sel = _GUICtrlEditGetSel($h_Edit) Else $s_text = GUICtrlRead($h_Edit) $a_sel = _GUICtrlEditGetSel($h_Edit) EndIf $gui_Search = GUICreate("Find", 349, 177, -1, -1, BitOR($WS_CHILD, $WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU), -1, $h_gui) $StatusBar1 = _GUICtrlStatusBarCreate($gui_Search, $a_PartsRightEdge, $a_PartsText) _GUICtrlStatusBarSetText($StatusBar1, "Find: ", 0) GUISetIcon(@SystemDir & "\shell32.dll", 22, $gui_Search) GUICtrlCreateLabel("Find what:", 9, 10, 53, 16, $SS_CENTER) $Input_Search = GUICtrlCreateInput("", 80, 8, 257, 21) If (IsArray($a_sel) And $a_sel <> $EC_ERR) Then GUICtrlSetData($Input_Search, StringMid($s_text, $a_sel[1] + 1, $a_sel[2] - $a_sel[1])) If $a_sel[1] <> $a_sel[2] Then $pos = $a_sel[1] If BitAND(GUICtrlRead($chk_matchcase), $GUI_CHECKED) = $GUI_CHECKED Then $case = 1 $occurance = 1 While 1 $t_pos = StringInStr($s_text, GUICtrlRead($Input_Search), $case, $occurance) If Not $t_pos Then $occurance = 0 ExitLoop ElseIf $t_pos = $pos + 1 Then ExitLoop EndIf $occurance += 1 WEnd EndIf _GUICtrlStatusBarSetText($StatusBar1, "Find: " & GUICtrlRead($Input_Search), 0) EndIf $lbl_replace = GUICtrlCreateLabel("Replace with:", 9, 42, 69, 17, $SS_CENTER) $Input_Replace = GUICtrlCreateInput("", 80, 40, 257, 21) $chk_wholeonly = GUICtrlCreateCheckbox("Match whole word only", 9, 72, 145, 17) $chk_matchcase = GUICtrlCreateCheckbox("Match case", 9, 96, 145, 17) $btn_FindNext = GUICtrlCreateButton("Find Next", 168, 72, 161, 21, 0) $btn_replace = GUICtrlCreateButton("Replace", 168, 96, 161, 21, 0) $btn_close = GUICtrlCreateButton("Close", 104, 130, 161, 21, 0) If $b_replace = False Then GUICtrlSetState($lbl_replace, $GUI_HIDE) GUICtrlSetState($Input_Replace, $GUI_HIDE) GUICtrlSetState($btn_replace, $GUI_HIDE) Else _GUICtrlStatusBarSetText($StatusBar1, "Replacements: " & $Replacements, 1) _GUICtrlStatusBarSetText($StatusBar1, "With: ", 2) EndIf GUISetState(@SW_SHOW) While 1 $msg_find = GUIGetMsg() Select Case $msg_find = $GUI_EVENT_CLOSE Or $msg_find = $btn_close ExitLoop Case $msg_find = $btn_FindNext GUICtrlSetState($btn_FindNext, $GUI_DISABLE) GUICtrlSetCursor($btn_FindNext, 15) Sleep(100) _GUICtrlStatusBarSetText($StatusBar1, "Find: " & GUICtrlRead($Input_Search), 0) If $b_replace = True Then _GUICtrlStatusBarSetText($StatusBar1, "Find: " & GUICtrlRead($Input_Search), 0) _GUICtrlStatusBarSetText($StatusBar1, "With: " & GUICtrlRead($Input_Replace), 2) EndIf _GuiCtrlEditFindText($h_Edit, $Input_Search, $chk_matchcase, $chk_wholeonly, $pos, $occurance, $Replacements, $s_WinTitle, $s_WinText) Sleep(100) GUICtrlSetState($btn_FindNext, $GUI_ENABLE) GUICtrlSetCursor($btn_FindNext, 2) Case $msg_find = $btn_replace GUICtrlSetState($btn_replace, $GUI_DISABLE) GUICtrlSetCursor($btn_replace, 15) Sleep(100) _GUICtrlStatusBarSetText($StatusBar1, "Find: " & GUICtrlRead($Input_Search), 0) _GUICtrlStatusBarSetText($StatusBar1, "With: " & GUICtrlRead($Input_Replace), 2) If $pos Then _GUICtrlEditReplaceSel($h_Edit, True, GUICtrlRead($Input_Replace)) $Replacements += 1 $occurance -= 1 _GUICtrlStatusBarSetText($StatusBar1, "Replacements: " & $Replacements, 1) EndIf _GuiCtrlEditFindText($h_Edit, $Input_Search, $chk_matchcase, $chk_wholeonly, $pos, $occurance, $Replacements, $s_WinTitle, $s_WinText) Sleep(100) GUICtrlSetState($btn_replace, $GUI_ENABLE) GUICtrlSetCursor($btn_replace, 2) EndSelect WEnd GUIDelete($gui_Search) EndFunc Func _GuiCtrlEditFindText(ByRef $h_Edit, ByRef $Input_Search, ByRef $chk_matchcase, ByRef $chk_wholeonly, ByRef $pos, ByRef $occurance, ByRef $Replacements, $s_WinTitle = "", $s_WinText = "") If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, 0) Local $case = 0, $whole = 0 Local $s_text, $exact = False Local $s_find = GUICtrlRead($Input_Search) If $s_WinTitle <> "" Then $s_text = ControlGetText($s_WinTitle, $s_WinText, $h_Edit) Else $s_text = GUICtrlRead($h_Edit) EndIf If BitAND(GUICtrlRead($chk_matchcase), $GUI_CHECKED) = $GUI_CHECKED Then $case = 1 If BitAND(GUICtrlRead($chk_wholeonly), $GUI_CHECKED) = $GUI_CHECKED Then $whole = 1 If $s_find <> "" Then $occurance += 1 $pos = StringInStr($s_text, $s_find, $case, $occurance) If $whole And $pos Then Local $c_compare2 = StringMid($s_text, $pos + StringLen($s_find), 1) If $pos = 1 Then If ($pos + StringLen($s_find)) - 1 = StringLen($s_text) Or _ ($c_compare2 = " " Or $c_compare2 = @LF Or $c_compare2 = @CR Or _ $c_compare2 = @CRLF Or $c_compare2 = @TAB) Then $exact = True Else Local $c_compare1 = StringMid($s_text, $pos - 1, 1) If ($pos + StringLen($s_find)) - 1 = StringLen($s_text) Then If ($c_compare1 = " " Or $c_compare1 = @LF Or $c_compare1 = @CR Or _ $c_compare1 = @CRLF Or $c_compare1 = @TAB) Then $exact = True Else If ($c_compare1 = " " Or $c_compare1 = @LF Or $c_compare1 = @CR Or _ $c_compare1 = @CRLF Or $c_compare1 = @TAB) And _ ($c_compare2 = " " Or $c_compare2 = @LF Or $c_compare2 = @CR Or _ $c_compare2 = @CRLF Or $c_compare2 = @TAB) Then $exact = True EndIf EndIf If $exact = False Then _GuiCtrlEditFindText($h_Edit, $Input_Search, $chk_matchcase, $chk_wholeonly, $pos, $occurance, $Replacements, $s_WinTitle, $s_WinText) Else _GUICtrlEditSetSel($h_Edit, $pos - 1, ($pos + StringLen($s_find)) - 1) _GUICtrlEditScroll($h_Edit, $SB_SCROLLCARET) EndIf ElseIf $whole And Not $pos Then $occurance = 0 MsgBox(48, "Find", "Reached End of document, Can not find the string '" & $s_find & "'") ElseIf Not $whole Then If Not $pos Then $occurance = 1 _GUICtrlEditSetSel($h_Edit, -1, 0) _GUICtrlEditScroll($h_Edit, $SB_SCROLLCARET) $pos = StringInStr($s_text, $s_find, $case, $occurance) If Not $pos Then $occurance = 0 MsgBox(48, "Find", "Reached End of document, Can not find the string '" & $s_find & "'") Else _GUICtrlEditSetSel($h_Edit, $pos - 1, ($pos + StringLen($s_find)) - 1) _GUICtrlEditScroll($h_Edit, $SB_SCROLLCARET) EndIf Else _GUICtrlEditSetSel($h_Edit, $pos - 1, ($pos + StringLen($s_find)) - 1) _GUICtrlEditScroll($h_Edit, $SB_SCROLLCARET) EndIf EndIf EndIf EndFunc Func _GUICtrlEditGetFirstVisibleLine($h_Edit) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) If IsHWnd($h_Edit) Then Return _SendMessage($h_Edit, $EM_GETFIRSTVISIBLELINE) Else Return GUICtrlSendMsg($h_Edit, $EM_GETFIRSTVISIBLELINE, 0, 0) EndIf EndFunc Func _GUICtrlEditGetLine(ByRef $h_Edit, $i_line) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, "") Local $i_index = _GUICtrlEditLineIndex($h_Edit, $i_line) If @error Then Return SetError($EC_ERR, $EC_ERR, "") Local $length = _GUICtrlEditLineLength($h_Edit, $i_index) If @error Then Return SetError($EC_ERR, $EC_ERR, "") Local $struct_Buffer = DllStructCreate("short;char[" & $length + 2 & "]") If @error Then Return SetError($EC_ERR, $EC_ERR, "") DllStructSetData($struct_Buffer, 1, $length, 1) If Not IsHWnd($h_Edit) Then $h_Edit = GUICtrlGetHandle($h_Edit) Local $v_ret = DllCall("user32.dll", "int", "SendMessageA", "hwnd", $h_Edit, "int", $EM_GETLINE, "int", $i_line - 1, "ptr", DllStructGetPtr($struct_Buffer)) If $v_ret[0] = $EC_ERR Then Return SetError($EC_ERR, $EC_ERR, "") Local $struct_String = DllStructCreate("char[" & $length & "]", DllStructGetPtr($struct_Buffer)) If @error Then Return SetError($EC_ERR, $EC_ERR, "") Return DllStructGetData($struct_String, 1) EndFunc Func _GUICtrlEditGetLineCount($h_Edit) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) If IsHWnd($h_Edit) Then Return _SendMessage($h_Edit, $EM_GETLINECOUNT) Else Return GUICtrlSendMsg($h_Edit, $EM_GETLINECOUNT, 0, 0) EndIf EndFunc Func _GUICtrlEditGetModify($h_Edit) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, 0) If IsHWnd($h_Edit) Then Return _SendMessage($h_Edit, $EM_GETMODIFY) Else Return GUICtrlSendMsg($h_Edit, $EM_GETMODIFY, 0, 0) EndIf EndFunc Func _GUICtrlEditGetRECT($h_Edit) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) #cs typedef struct _RECT { LONG left LONG top LONG right LONG bottom } RECT, *PRECT #ce Local $left = 1, $top = 2, $right = 3, $bottom = 4 Local $struct_Rect = DllStructCreate("int;int;int;int") If @error Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) If IsHWnd($h_Edit) Then _SendMessage($h_Edit, $EM_GETRECT, 0, DllStructGetPtr($struct_Rect)) If @error Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) Else GUICtrlSendMsg($h_Edit, $EM_GETRECT, 0, DllStructGetPtr($struct_Rect)) If @error Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) EndIf Return StringSplit(DllStructGetData($struct_Rect, $left) & "," & _ DllStructGetData($struct_Rect, $top) & "," & _ DllStructGetData($struct_Rect, $right) & "," & _ DllStructGetData($struct_Rect, $bottom), ",") EndFunc Func _GUICtrlEditGetSel($h_Edit) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) Local $ptr1 = "int", $ptr2 = "int", $i_ret Local $wparam = DllStructCreate($ptr1) Local $a_sel If @error Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) Local $lparam = DllStructCreate($ptr2) If @error Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) If IsHWnd($h_Edit) Then $i_ret = _SendMessage($h_Edit, $EM_GETSEL, DllStructGetPtr($wparam), DllStructGetPtr($lparam)) Else $i_ret = GUICtrlSendMsg($h_Edit, $EM_GETSEL, DllStructGetPtr($wparam), DllStructGetPtr($lparam)) EndIf If ($i_ret == -1) Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) $a_sel = StringSplit(DllStructGetData($wparam, 1) & "," & DllStructGetData($lparam, 1), ",") Return $a_sel EndFunc Func _GUICtrlEditLineFromChar($h_Edit, $i_index = -1) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) If IsHWnd($h_Edit) Then Return _SendMessage($h_Edit, $EM_LINEFROMCHAR, $i_index) Else Return GUICtrlSendMsg($h_Edit, $EM_LINEFROMCHAR, $i_index, 0) EndIf EndFunc Func _GUICtrlEditLineIndex($h_Edit, $i_line = -1) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) If IsHWnd($h_Edit) Then Return _SendMessage($h_Edit, $EM_LINEINDEX, $i_line) Else Return GUICtrlSendMsg($h_Edit, $EM_LINEINDEX, $i_line, 0) EndIf EndFunc Func _GUICtrlEditLineLength($h_Edit, $i_index = -1) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, $EC_ERR) If IsHWnd($h_Edit) Then Return _SendMessage($h_Edit, $EM_LINELENGTH, $i_index) Else Return GUICtrlSendMsg($h_Edit, $EM_LINELENGTH, $i_index, 0) EndIf EndFunc Func _GUICtrlEditLineScroll($h_Edit, $i_horiz, $i_vert) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, False) If IsHWnd($h_Edit) Then Return _SendMessage($h_Edit, $EM_LINESCROLL, $i_horiz, $i_vert) Else Return GUICtrlSendMsg($h_Edit, $EM_LINESCROLL, $i_horiz, $i_vert) EndIf EndFunc Func _GUICtrlEditReplaceSel($h_Edit, $i_bool, $s_text) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, 0) If IsHWnd($h_Edit) Then Local $struct_MemMap Local $struct_String = DllStructCreate("char[" & StringLen($s_text) + 1 & "]") If @error Then Return SetError($EC_ERR, $EC_ERR, 0) Local $sBuffer_pointer = DllStructGetPtr($struct_String) DllStructSetData($struct_String, 1, $s_text) _MemInit ($h_Edit, StringLen($s_text) + 1, $struct_MemMap) If @error Then _MemFree ($struct_MemMap) Return SetError($EC_ERR, $EC_ERR, 0) EndIf _MemWrite ($struct_MemMap, $sBuffer_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($EC_ERR, $EC_ERR, 0) EndIf _SendMessage($h_Edit, $EM_REPLACESEL, $i_bool, $sBuffer_pointer) If @error Then _MemFree ($struct_MemMap) Return SetError($EC_ERR, $EC_ERR, 0) EndIf _MemFree ($struct_MemMap) If @error Then Return SetError($EC_ERR, $EC_ERR, 0) Else GUICtrlSendMsg($h_Edit, $EM_REPLACESEL, $i_bool, $s_text) EndIf EndFunc Func _GUICtrlEditScroll($h_Edit, $i_direct) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, False) If IsHWnd($h_Edit) Then If $i_direct == $SB_SCROLLCARET Then Return _SendMessage($h_Edit, $EM_SCROLLCARET) Else Return _SendMessage($h_Edit, $EM_SCROLL, $i_direct) EndIf Else If $i_direct == $SB_SCROLLCARET Then Return GUICtrlSendMsg($h_Edit, $EM_SCROLLCARET, 0, 0) Else Return GUICtrlSendMsg($h_Edit, $EM_SCROLL, $i_direct, 0) EndIf EndIf EndFunc Func _GUICtrlEditSetModify($h_Edit, $i_bool) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, False) If IsHWnd($h_Edit) Then _SendMessage($h_Edit, $EM_SETMODIFY, $i_bool) Else GUICtrlSendMsg($h_Edit, $EM_SETMODIFY, $i_bool, 0) EndIf EndFunc Func _GUICtrlEditSetRECT(ByRef $h_Edit, $left, $top, $right, $bottom) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, 0) Local Const $EM_SETRECT = 0xB3 Local $struct = DllStructCreate("int;int;int;int") DllStructSetData($struct, 1, $left) DllStructSetData($struct, 2, $top) DllStructSetData($struct, 3, $right + 1) DllStructSetData($struct, 4, $bottom + 10) If IsHWnd($h_Edit) Then _SendMessage($h_Edit, $EM_SETRECT, 0, DllStructGetPtr($struct)) Else GUICtrlSendMsg($h_Edit, $EM_SETRECT, 0, DllStructGetPtr($struct)) EndIf EndFunc Func _GUICtrlEditSetSel($h_Edit, $i_start, $i_end) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, 0) If IsHWnd($h_Edit) Then _SendMessage($h_Edit, $EM_SETSEL, $i_start, $i_end) Else GUICtrlSendMsg($h_Edit, $EM_SETSEL, $i_start, $i_end) EndIf EndFunc Func _GUICtrlEditUndo($h_Edit) If Not _IsClassName ($h_Edit, "Edit") Then Return SetError($EC_ERR, $EC_ERR, False) If IsHWnd($h_Edit) Then Return _SendMessage($h_Edit, $EM_UNDO) Else Return GUICtrlSendMsg($h_Edit, $EM_UNDO, 0, 0) EndIf EndFunc ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- Func _DateAdd($sType, $iValToAdd, $sDate) Local $asTimePart[4] Local $asDatePart[4] Local $iJulianDate Local $iTimeVal Local $iNumDays Local $Day2Add $sType = StringLeft($sType, 1) If StringInStr("D,M,Y,w,h,n,s", $sType) = 0 Or $sType = "" Then SetError(1) Return (0) EndIf If Not StringIsInt($iValToAdd) Then SetError(2) Return (0) EndIf If Not _DateIsValid($sDate) Then SetError(3) Return (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 $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 $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 $iNumDays = StringSplit('31,28,31,30,31,30,31,31,30,31,30,31', ',') If _DateIsLeapYear($asDatePart[1]) Then $iNumDays[2] = 29 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 $aDayOfWeek[8] $aDayOfWeek[1] = "Sunday" $aDayOfWeek[2] = "Monday" $aDayOfWeek[3] = "Tuesday" $aDayOfWeek[4] = "Wednesday" $aDayOfWeek[5] = "Thursday" $aDayOfWeek[6] = "Friday" $aDayOfWeek[7] = "Saturday" Select Case Not StringIsInt($iDayNum) Or Not StringIsInt($iShort) SetError(1) Return "" Case $iDayNum < 1 Or $iDayNum > 7 SetError(1) Return "" Case Else Select Case $iShort = 0 Return $aDayOfWeek[$iDayNum] Case $iShort = 1 Return StringLeft($aDayOfWeek[$iDayNum], 3) Case Else SetError(1) Return "" EndSelect EndSelect EndFunc Func _DateDaysInMonth($iYear, $iMonthNum) Local $aiNumDays $aiNumDays = "31,28,31,30,31,30,31,31,30,31,30,31" $aiNumDays = StringSplit($aiNumDays, ",") If _DateIsMonth($iMonthNum) And _DateIsYear($iYear) Then If _DateIsLeapYear($iYear) Then $aiNumDays[2] = $aiNumDays[2] + 1 SetError(0) Return $aiNumDays[$iMonthNum] Else SetError(1) Return 0 EndIf EndFunc Func _DateDiff($sType, $sStartDate, $sEndDate) Local $asStartDatePart[4] Local $asStartTimePart[4] Local $asEndDatePart[4] Local $asEndTimePart[4] Local $iTimeDiff Local $iYearDiff Local $iMonthDiff Local $iStartTimeInSecs Local $iEndTimeInSecs Local $aDaysDiff $sType = StringLeft($sType, 1) If StringInStr("d,m,y,w,h,n,s", $sType) = 0 Or $sType = "" Then SetError(1) Return (0) EndIf If Not _DateIsValid($sStartDate) Then SetError(2) Return (0) EndIf If Not _DateIsValid($sEndDate) Then SetError(3) Return (0) EndIf _DateTimeSplit($sStartDate, $asStartDatePart, $asStartTimePart) _DateTimeSplit($sEndDate, $asEndDatePart, $asEndTimePart) $aDaysDiff = _DateToDayValue($asEndDatePart[1], $asEndDatePart[2], $asEndDatePart[3]) - _DateToDayValue($asStartDatePart[1], $asStartDatePart[2], $asStartDatePart[3]) 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] $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 Else SetError(1) Return 0 EndIf EndFunc Func _DateIsMonth($iNumber) If StringIsInt($iNumber) Then If $iNumber >= 1 And $iNumber <= 12 Then Return 1 Else Return 0 EndIf Else Return 0 EndIf EndFunc Func _DateIsValid($sDate) Local $asDatePart[4] Local $asTimePart[4] Local $iNumDays Local $sDateTime $iNumDays = "31,28,31,30,31,30,31,31,30,31,30,31" $iNumDays = StringSplit($iNumDays, ",") $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]) If _DateIsLeapYear($asDatePart[1]) Then $iNumDays[2] = 29 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 Else Return 0 EndIf EndFunc Func _DateLastWeekdayNum($iWeekdayNum) Local $iLastWeekdayNum Select Case Not StringIsInt($iWeekdayNum) SetError(1) Return 0 Case $iWeekdayNum < 1 Or $iWeekdayNum > 7 SetError(1) Return 0 Case Else If $iWeekdayNum = 1 Then $iLastWeekdayNum = 7 Else $iLastWeekdayNum = $iWeekdayNum - 1 EndIf Return $iLastWeekdayNum EndSelect EndFunc Func _DateLastMonthNum($iMonthNum) Local $iLastMonthNum Select Case Not StringIsInt($iMonthNum) SetError(1) Return 0 Case $iMonthNum < 1 Or $iMonthNum > 12 SetError(1) Return 0 Case Else If $iMonthNum = 1 Then $iLastMonthNum = 12 Else $iLastMonthNum = $iMonthNum - 1 EndIf $iLastMonthNum = StringFormat("%02d", $iLastMonthNum) Return $iLastMonthNum EndSelect EndFunc Func _DateLastMonthYear($iMonthNum, $iYear) Local $iLastYear Select Case Not StringIsInt($iMonthNum) Or Not StringIsInt($iYear) SetError(1) Return 0 Case $iMonthNum < 1 Or $iMonthNum > 12 SetError(1) Return 0 Case Else If $iMonthNum = 1 Then $iLastYear = $iYear - 1 Else $iLastYear = $iYear EndIf $iLastYear = StringFormat("%04d", $iLastYear) Return $iLastYear EndSelect EndFunc Func _DateMonthOfYear($iMonthNum, $iShort) Local $aMonthOfYear[13] $aMonthOfYear[1] = "January" $aMonthOfYear[2] = "February" $aMonthOfYear[3] = "March" $aMonthOfYear[4] = "April" $aMonthOfYear[5] = "May" $aMonthOfYear[6] = "June" $aMonthOfYear[7] = "July" $aMonthOfYear[8] = "August" $aMonthOfYear[9] = "September" $aMonthOfYear[10] = "October" $aMonthOfYear[11] = "November" $aMonthOfYear[12] = "December" Select Case Not StringIsInt($iMonthNum) Or Not StringIsInt($iShort) SetError(1) Return "" Case $iMonthNum < 1 Or $iMonthNum > 12 SetError(1) Return "" Case Else Select Case $iShort = 0 Return $aMonthOfYear[$iMonthNum] Case $iShort = 1 Return StringLeft($aMonthOfYear[$iMonthNum], 3) Case Else SetError(1) Return "" EndSelect EndSelect EndFunc Func _DateNextWeekdayNum($iWeekdayNum) Local $iNextWeekdayNum Select Case Not StringIsInt($iWeekdayNum) SetError(1) Return 0 Case $iWeekdayNum < 1 Or $iWeekdayNum > 7 SetError(1) Return 0 Case Else If $iWeekdayNum = 7 Then $iNextWeekdayNum = 1 Else $iNextWeekdayNum = $iWeekdayNum + 1 EndIf Return $iNextWeekdayNum EndSelect EndFunc Func _DateNextMonthNum($iMonthNum) Local $iNextMonthNum Select Case Not StringIsInt($iMonthNum) SetError(1) Return 0 Case $iMonthNum < 1 Or $iMonthNum > 12 SetError(1) Return 0 Case Else If $iMonthNum = 12 Then $iNextMonthNum = 1 Else $iNextMonthNum = $iMonthNum + 1 EndIf $iNextMonthNum = StringFormat("%02d", $iNextMonthNum) Return $iNextMonthNum EndSelect EndFunc Func _DateNextMonthYear($iMonthNum, $iYear) Local $iNextYear Select Case Not StringIsInt($iMonthNum) Or Not StringIsInt($iYear) SetError(1) Return 0 Case $iMonthNum < 1 Or $iMonthNum > 12 SetError(1) Return 0 Case Else If $iMonthNum = 12 Then $iNextYear = $iYear + 1 Else $iNextYear = $iYear EndIf $iNextYear = StringFormat("%04d", $iNextYear) Return $iNextYear EndSelect EndFunc Func _DateTimeSplit($sDate, ByRef $asDatePart, ByRef $iTimePart) Local $sDateTime Local $x $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] = -1 EndIf Next Return (1) EndFunc Func _DateToDayValue($iYear, $iMonth, $iDay) Local $i_aFactor Local $i_bFactor Local $i_cFactor Local $i_eFactor Local $i_fFactor Local $iJulianDate If Not _DateIsValid(StringFormat("%04d/%02d/%02d", $iYear, $iMonth, $iDay)) Then SetError(1) Return ("") EndIf If $iMonth < 3 Then $iMonth = $iMonth + 12 $iYear = $iYear - 1 EndIf $i_aFactor = Int($iYear / 100) $i_bFactor = Int($i_aFactor / 4) $i_cFactor = 2 - $i_aFactor + $i_bFactor $i_eFactor = Int(1461 * ($iYear + 4716) / 4) $i_fFactor = Int(153 * ($iMonth + 1) / 5) $iJulianDate = $i_cFactor + $iDay + $i_eFactor + $i_fFactor - 1524.5 Return ($iJulianDate) EndFunc Func _DateToDayOfWeek($iYear, $iMonth, $iDay) Local $i_aFactor Local $i_yFactor Local $i_mFactor Local $i_dFactor If Not _DateIsValid($iYear & "/" & $iMonth & "/" & $iDay) Then SetError(1) Return ("") EndIf $i_aFactor = Int((14 - $iMonth) / 12) $i_yFactor = $iYear - $i_aFactor $i_mFactor = $iMonth + (12 * $i_aFactor) - 2 $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 SetError(1) Return "" EndIf If $idow >= 2 Then Return $idow - 2 Return 6 EndFunc Func _DayValueToDate($iJulianDate, ByRef $iYear, ByRef $iMonth, ByRef $iDay) Local $i_zFactor Local $i_wFactor Local $i_aFactor Local $i_bFactor Local $i_xFactor Local $i_cFactor Local $i_dFactor Local $i_eFactor Local $i_fFactor If $iJulianDate < 0 Or Not IsNumber($iJulianDate) Then SetError(1) Return 0 EndIf $i_zFactor = Int($iJulianDate + 0.5) $i_wFactor = Int(($i_zFactor - 1867216.25) / 36524.25) $i_xFactor = Int($i_wFactor / 4) $i_aFactor = $i_zFactor + 1 + $i_wFactor - $i_xFactor $i_bFactor = $i_aFactor + 1524 $i_cFactor = Int(($i_bFactor - 122.1) / 365.25) $i_dFactor = Int(365.25 * $i_cFactor) $i_eFactor = Int(($i_bFactor - $i_dFactor) / 30.6001) $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 _DateTimeFormat($sDate, $sType) Local $asDatePart[4] Local $asTimePart[4] Local $sTempDate = "" Local $sTempTime = "" Local $sAM Local $sPM Local $iWday Local $lngX If Not _DateIsValid($sDate) Then SetError(1) Return ("") EndIf If $sType < 0 Or $sType > 5 Or Not IsInt($sType) Then SetError(2) Return ("") EndIf _DateTimeSplit($sDate, $asDatePart, $asTimePart) Switch $sType Case 0 $lngX = DllCall("kernel32.dll", "long", "GetLocaleInfo", "long", 0x400, "long", 0x1F, "str", "", "long", 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", "long", "GetLocaleInfo", "long", 0x400, "long", 0x1003, "str", "", "long", 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", "long", "GetLocaleInfo", "long", 0x400, "long", 0x20, "str", "", "long", 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", "long", "GetLocaleInfo", "long", 0x400, "long", 0x1F, "str", "", "long", 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", "long", "GetLocaleInfo", "long", 0x400, "long", 0x1003, "str", "", "long", 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", "long", "GetLocaleInfo", "long", 0x400, "long", 0x1D, "str", "", "long", 255) If Not @error And $lngX[0] <> 0 Then $sTempTime = StringReplace($sTempTime, "/", $lngX[3]) EndIf $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, "####", _DateMonthOfYear($asDatePart[2], 0)) $sTempDate = StringReplace($sTempDate, "###", _DateMonthOfYear($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", "long", "GetLocaleInfo", "long", 0x400, "long", 0x28, "str", "", "long", 255) If Not @error And $lngX[0] <> 0 Then $sAM = $lngX[3] Else $sAM = "AM" EndIf $lngX = DllCall("kernel32.dll", "long", "GetLocaleInfo", "long", 0x400, "long", 0x29, "str", "", "long", 255) If Not @error And $lngX[0] <> 0 Then $sPM = $lngX[3] Else $sPM = "PM" EndIf $lngX = DllCall("kernel32.dll", "long", "GetLocaleInfo", "long", 0x400, "long", 0x1E, "str", "", "long", 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 _DateJulianDayNo($iYear, $iMonth, $iDay) Local $sFullDate Local $aiDaysInMonth Local $iJDay Local $iCntr $sFullDate = StringFormat("%04d/%02d/%02d", $iYear, $iMonth, $iDay) If Not _DateIsValid($sFullDate) Then SetError(1) Return "" EndIf $iJDay = 0 $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 $aiDaysInMonth Local $iYear Local $iMonth Local $iDay Local $iDays Local $iMaxDays $iYear = Int($iJDay / 1000) $iDays = Mod($iJDay, 1000) $iMaxDays = 365 If _DateIsLeapYear($iYear) Then $iMaxDays = 366 If $iDays > $iMaxDays Then SetError(1) Return "" EndIf $aiDaysInMonth = __DaysInMonth($iYear) $iMonth = 1 While $iDays > $aiDaysInMonth[ $iMonth ] $iDays = $iDays - $aiDaysInMonth[ $iMonth ] $iMonth = $iMonth + 1 WEnd $iDay = $iDays Return StringFormat("%04d%s%02d%s%02d", $iYear, $sSep, $iMonth, $sSep, $iDay) 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) Local $iRetval, $SYSTEMTIME, $lpSystemTime If $iYear = 0 Then $iYear = @YEAR If $iMonth = 0 Then $iMonth = @MON If Not _DateIsValid($iYear & "/" & $iMonth & "/" & $iDay) Then Return 1 $SYSTEMTIME = DllStructCreate("ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort") $lpSystemTime = DllStructGetPtr($SYSTEMTIME) $iRetval = DllCall("kernel32.dll", "long", "GetLocalTime", "ptr", $lpSystemTime) DllStructSetData($SYSTEMTIME, 4, $iDay) If $iMonth > 0 Then DllStructSetData($SYSTEMTIME, 2, $iMonth) If $iYear > 0 Then DllStructSetData($SYSTEMTIME, 1, $iYear) $iRetval = DllCall("kernel32.dll", "long", "SetLocalTime", "ptr", $lpSystemTime) If @error = 0 Then If $iRetval[0] = 0 Then Local $lastError = DllCall("kernel32.dll", "int", "GetLastError") SetExtended($lastError[0]) SetError(1) Return 0 Else Return 1 EndIf Else SetError(1) Return 0 EndIf EndFunc Func _SetTime($iHour, $iMinute, $iSecond = 0) Local $iRetval, $SYSTEMTIME, $lpSystemTime 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 $SYSTEMTIME = DllStructCreate("ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort") $lpSystemTime = DllStructGetPtr($SYSTEMTIME) $iRetval = DllCall("kernel32.dll", "long", "GetLocalTime", "ptr", $lpSystemTime) DllStructSetData($SYSTEMTIME, 5, $iHour) DllStructSetData($SYSTEMTIME, 6, $iMinute) If $iSecond > 0 Then DllStructSetData($SYSTEMTIME, 7, $iSecond) $iRetval = DllCall("kernel32.dll", "long", "SetLocalTime", "ptr", $lpSystemTime) If @error = 0 Then If $iRetval[0] = 0 Then Local $lastError = DllCall("kernel32.dll", "int", "GetLastError") SetExtended($lastError[0]) SetError(1) Return 0 Else Return 1 EndIf Else SetError(1) Return 0 EndIf EndFunc Func _TicksToTime($iTicks, ByRef $iHours, ByRef $iMins, ByRef $iSecs) If Number($iTicks) > 0 Then $iTicks = Round($iTicks / 1000) $iHours = Int($iTicks / 3600) $iTicks = Mod($iTicks, 3600) $iMins = Int($iTicks / 60) $iSecs = Round(Mod($iTicks, 60)) Return 1 ElseIf Number($iTicks) = 0 Then $iHours = 0 $iTicks = 0 $iMins = 0 $iSecs = 0 Return 1 Else SetError(1) Return 0 EndIf EndFunc Func _TimeToTicks($iHours = @HOUR, $iMins = @MIN, $iSecs = @SEC) Local $iTicks If StringIsInt($iHours) And StringIsInt($iMins) And StringIsInt($iSecs) Then $iTicks = 1000 * ((3600 * $iHours) + (60 * $iMins) + $iSecs) Return $iTicks Else SetError(1) Return 0 EndIf EndFunc Func _WeekNumberISO($iYear = @YEAR, $iMonth = @MON, $iDay = @MDAY) Local $idow, $iDow0101 If $iDay > 31 Or $iDay < 1 Then SetError(1) Return -1 ElseIf $iMonth > 12 Or $iMonth < 1 Then SetError(1) Return -1 ElseIf $iYear < 1 Or $iYear > 2999 Then SetError(1) Return -1 EndIf $idow = _DateToDayOfWeekISO($iYear, $iMonth, $iDay) $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) Local $iDow0101, $iDow0101ny Local $iDate, $iStartWeek1, $iEndWeek1, $iEndWeek1Date, $iStartWeek1ny, $iStartWeek1Dateny Local $iCurrDateDiff, $iCurrDateDiffny If $iDay > 31 Or $iDay < 1 Then SetError(1) Return -1 ElseIf $iMonth > 12 Or $iMonth < 1 Then SetError(1) Return -1 ElseIf $iYear < 1 Or $iYear > 2999 Then SetError(1) Return -1 ElseIf $iWeekStart < 1 Or $iWeekStart > 2 Then SetError(2) Return -1 EndIf $iDow0101 = _DateToDayOfWeekISO($iYear, 1, 1) $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 $iEndWeek1Date = _DateAdd('d', $iEndWeek1, $iYear & '/01/01') $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 $iStartWeek1Dateny = _DateAdd('d', $iStartWeek1ny, $iYear + 1 & '/01/01') $iCurrDateDiff = _DateDiff('d', $iEndWeek1Date, $iDate) - 1 $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 $aiDays = StringSplit("31,28,31,30,31,30,31,31,30,31,30,31", ",") If _DateIsLeapYear($iYear) Then $aiDays[2] = 29 Return $aiDays EndFunc ; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- AutoItSetOption("MouseCoordMode", 2) AutoItSetOption("WinTitleMatchMode", 2) $VERSION = "AGK Batcher 1.02" $AUTHOR = "Written by Dave Larsen" Dim $InputFolder, $OutputFolder Dim $nLoop[255] $InputFolder = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AGK_Batcher", "InFold") $OutputFolder = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AGK_Batcher", "OutFold") $Form1 = GUICreate($VERSION & " - " & $AUTHOR, 379, 531, 352, 211, -1, 0x00000018) GUICtrlCreateGroup("", 8, 12, 361, 86) $Label1 = GUICtrlCreateLabel("Scanning Method", 120, 8, 144, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $Auto = GUICtrlCreateRadio("Auto", 16, 40, 113, 17) GUICtrlSetState(-1, $GUI_CHECKED) GUICtrlSetTip(-1,"Assumes DVD file structure." & @CRLF & "Uses VTS_01_0.IFO for all entries.") $Best = GUICtrlCreateRadio("Best Guess", 16, 64, 113, 17) GUICtrlSetTip(-1,"Assumes DVD file structure." & @CRLF & "Uses largest .IFO for all entries.") $Manual = GUICtrlCreateRadio("Manual", 200, 40, 113, 17) GUICtrlSetTip(-1,"Cycles through each folder and" & @CRLF & "Allows user to pick each file manually.") $wild = GUICtrlCreateRadio("Wild Card", 200, 64, 89, 17) GUICtrlSetTip(-1,"Scans input folder for matching entries.") $wcInput = GUICtrlCreateInput("*.mpg", 296, 64, 65, 21) GUICtrlSetState(-1, $GUI_DISABLE) GUICtrlCreateGroup("", -99, -99, 1, 1) $scanfolder = GUICtrlCreateInput($InputFolder, 8, 128, 321, 25) GUICtrlSetState(-1,$GUI_DROPACCEPTED) $scandialog = GUICtrlCreateButton("...", 344, 128, 25, 25, 0) $Scanbutton = GUICtrlCreateButton("Scan", 8, 499, 60, 25, 0) $Resetbutton = GUICtrlCreateButton("Reset", 320, 499, 49, 25, 0) $Label2 = GUICtrlCreateLabel("Folder to Scan:", 8, 104, 91, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $Edit = GUICtrlCreateEdit("", 8, 224, 361, 233) GUICtrlSetState(-1,$GUI_DROPACCEPTED) $outfolder = GUICtrlCreateInput($OutputFolder, 8, 184, 321, 25) GUICtrlSetState(-1,$GUI_DROPACCEPTED) $Output = GUICtrlCreateLabel("Output Folder:", 8, 160, 85, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $outdialog = GUICtrlCreateButton("...", 344, 184, 25, 25, 0) $Exportbutton = GUICtrlCreateButton("Export", 184, 499, 60, 25, 0) $Clearbutton = GUICtrlCreateButton("Clear", 80, 499, 60, 25, 0) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE $InputFolder = (GUICtrlRead($scanfolder)) $OutputFolder = (GUICtrlRead($outfolder)) If ($InputFolder) Then RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\AGK_Batcher", "InFold", "REG_SZ", $InputFolder) If ($OutputFolder) Then RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\AGK_Batcher", "OutFold", "REG_SZ", $OutputFolder) Exit Case $Auto GUICtrlSetState($wcinput, $GUI_DISABLE) Case $Best GUICtrlSetState($wcinput, $GUI_DISABLE) Case $Manual GUICtrlSetState($wcinput, $GUI_DISABLE) Case $wild GUICtrlSetState($wcinput, $GUI_ENABLE) Case $scandialog $InputFolder = FileSelectFolder("Select Folder to scan...", "", 2, $InputFolder) If Not @error Then GUICtrlSetData($scanfolder, $InputFolder) Case $outdialog $OutputFolder = FileSelectFolder("Select output folder...", "", 1, $OutputFolder) If Not @error Then GUICtrlSetData($outfolder, $OutputFolder) Case $Clearbutton GUICtrlSetData($Edit, "") Case $Resetbutton GUICtrlSetData($scanfolder, "") GUICtrlSetData($outfolder, "") GUICtrlSetData($Edit, "") Case $Scanbutton $InputFolder = (GUICtrlRead($scanfolder)) If Not (FileExists($InputFolder)) Then MsgBox(0, "ERROR", "Input folder does not exist!") Else If (GUICtrlRead($wild) = $GUI_CHECKED) Then $nLoop = _FileListToArray($InputFolder, (GUICtrlRead($wcInput)), 1) Else $nLoop = _FileListToArray($InputFolder,"*", 2) EndIf If Not @error Then For $count = 1 To $nLoop[0] If (GUICtrlRead($auto) = $GUI_CHECKED) Then GUICtrlSetData($Edit, $InputFolder & "\" & $nLoop[$count] & "\VIDEO_TS\VTS_01_0.IFO" & @CRLF, 1) ElseIf (GUICtrlRead($Best) = $GUI_CHECKED) Then $Search = FileFindFirstFile($InputFolder & "\" & $nLoop[$count] & "\VIDEO_TS\VTS*.IFO") Dim $IFOfile = "", $IFOsize = 0, $nIFOfile = "", $nIFOsize = 0 While 1 $nIFOfile = FileFindNextFile($Search) If @error Then ExitLoop Else $nIFOsize = FileGetSize($InputFolder & "\" & $nLoop[$count] & "\VIDEO_TS\" & $nIFOfile) EndIf If ($nIFOsize > $IFOsize) Then $IFOfile = $nIFOfile $IFOsize = $nIFOsize EndIf WEnd FileClose($Search) GUICtrlSetData($Edit, $InputFolder & "\" & $nLoop[$count] & "\VIDEO_TS\" & $IFOfile & @CRLF, 1) ElseIf (GUICtrlRead($Manual) = $GUI_CHECKED) Then $IFOfile = FileOpenDialog("Select file...", $InputFolder, "All (*.*)|IFO's (*.IFO)|MPEG's (*.mpg;*.mpeg)",3) If Not @error Then GUICtrlSetData($Edit, $IFOfile & @CRLF, 1) EndIf Else GUICtrlSetData($Edit, $InputFolder & "\" & $nLoop[$count] & @CRLF, 1) EndIf Next EndIf EndIf Case $Exportbutton $InputFolder = (GUICtrlRead($scanfolder)) $OutputFolder = (GUICtrlRead($outfolder)) $Export_count = 0 If Not (WinExists("Auto Gordian Knot")) Then MsgBox(0, $VERSION, "AGK Not Found") Else $Numoflines = _GUICtrlEditGetLineCount($Edit) For $count = 1 to $Numoflines $Editline = (ControlCommand($VERSION, "", "[CLASS:Edit;INSTANCE:3]", "GetLine", $count)) If Not @error Then WinActivate("Auto Gordian Knot") If NOT (Winactive("Auto Gordian Knot")) Then MsgBox(0, $VERSION, "AGK Not Found") ExitLoop Else Sleep(200) Send("^o") If NOT (WinWait("Open", "", 3)) Then Send("^o") If NOT (WinWait("Open", "", 3)) Then MsgBox(0, $VERSION, "Cannot Open File Dialog, Aborting...") ExitLoop Else ControlSetText("Open", "", "[CLASS:Edit;INSTANCE:1]", $Editline) ControlClick("Open", "Open", "[CLASS:Button;INSTANCE:2]") Sleep(500) If WinExists("Select PGC", "OK") Then WinActivate("Select PGC") ControlClick("Select PGC", "OK", "[CLASS:TButton; INSTANCE:1]") WinWaitClose("Select PGC", "OK") EndIf WinActivate("Auto Gordian Knot") Send("^s") If NOT (WinWait("Save As", "", 3)) Then Send("^s") If NOT (WinWait("Save As", "", 3)) Then MsgBox(0, $VERSION, "Cannot Open Save File Dialog, Aborting...") ExitLoop Else If ($OutputFolder) Then Send("^x") Send($OutputFolder & "\" & "^v") EndIf ControlClick("Save As", "Save", "[CLASS:Button;INSTANCE:2]") WinActivate("Auto Gordian Knot") Send("^a") Sleep(200) $Export_count += 1 EndIf EndIf EndIf EndIf Next MsgBox(0,$VERSION, "Export process complete." & @CRLF & "Added " & $Export_count & " items to AGK's process queue.", 10) EndIf Case Else If WinExists("Field Order Transition Detected") Then WinActivate("Field Order Transition Detected") ControlClick("Field Order Transition Detected", "OK", "[CLASS:Button;INSTANCE:1]") _FileWriteLog(@DesktopDir & "\AGKBatcher.log","Field Order Transition Detected") EndIf EndSwitch WEnd ; ---------------------------------------------------------------------------- ; ; ----------------------------------------------------------------------------