#NoTrayIcon #Region ;**** Directives created by AutoIt3Wrapper_GUI **** https://www.autoitscript.com/wiki/AutoIt3Wrapper_Directives #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #AutoIt3Wrapper_Icon=C:\ProgramData\StringFinder\TheRollingStones.ico #AutoIt3Wrapper_Outfile=StringFinder.exe #AutoIt3Wrapper_Compression=4 #AutoIt3Wrapper_UseUpx=y #AutoIt3Wrapper_Res_Description=StringFinder - Find String in Files. #AutoIt3Wrapper_Res_Fileversion=1.2.3 #AutoIt3Wrapper_Res_Field="Compiled with"|"AutoIt Version 3.3.14.2" #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y #AutoIt3Wrapper_Run_After=del "%scriptfile%_stripped.au3" #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Ignore_Variables=$UBOUND_COLUMNS, $UBOUND_ROWS #Au3Stripper_Parameters=/so /pe /rm #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #Region ;************ Includes ************ #Include #Include #Include #Include #EndRegion ;************ Includes ************ Opt ( 'MustDeclareVars', 1 ) Opt ( 'GUIOnEventMode', 1 ) Opt ( 'GUICloseOnESC', 0 ) Opt ( 'WinWaitDelay', 0 ) Opt ( 'TrayOnEventMode', 1 ) Opt ( 'TrayAutoPause', 0 ) Opt ( 'TrayMenuMode', 1 ) Opt ( 'GUIResizeMode', $GUI_DOCKAUTO ) #Region ------ Global Variables ------------------------------ Global $sSoftTitle = 'StringFinder v 1.2.3 by wakillon' Global $iCountTotal, $iCountFound, $iSearch, $sSearchDir, $sLastSelectDir, $iSelectDir, $hTimerInit, $iCaseSense, $iGuiWidth, $iGuiHeight, $hTimerInitSleep Global $hGui, $idComboName, $idButtonSearch, $idEditOutput, $hListView, $idComboString, $idComboDir, $idButtonDir, $idAViSearchString, $idAViSearchFile, $idCheckboxSize, $idButtonHelp, $idLabelOutput Global $idCheckboxCaseSense, $idCheckboxSubFolders, $hStatusBar, $idButtonPasteString, $idButtonPasteDir, $idButtonPasteName, $idButtonSizeMin, $idButtonSizeMax, $idInputSizeMin, $idInputSizeMax, $idDummyHotkey Global $idButtonAddDir, $idButtonAddName, $idButtonAddString, $idButtonRemoveDir, $idButtonRemoveName, $idButtonRemoveString, $idCheckboxSound, $idTrayStart, $idTrayShow, $idTrayAutoFocusCombo, $idTrayOnTop, $idTrayCpu Global $sDelimiterItems = Chr(8), $sDelimiterRows = Chr(11), $hFontStatusBar, $iSizeCheck, $iSizeMin, $iSizeMax, $iSubFolders, $hTimerInitDisplay, $iSleep, $iMaxReadableSize = 15000 ; kb Global $sFilter = '', $sSearchString = '', $sSciTEPath = _SciTEGetPath(), $sSelectedFilesPathOld, $iTrayMenuClose, $idTrayAutoFocusList, $iAutoFocusList, $idTrayTabItemToolTip, $iTabItemToolTip Global $idTab, $hTab, $aIdTabItem[1], $aIdTabListView[1], $aTipText[1] Global $iColumn = -1, $hRetListView, $iFlagEmptyLV, $hLVToSort, $iSearchType, $sTipTxt, $iTooltip = -1, $idCtrlFocusOld = -1, $iDropDown, $iAutoFocusCombo, $iCurrentTabItem, $iCurrentTabItemOld = -1 Global $aAnd, $aOr, $aNot, $hTimerProc, $aTimer, $aAccelKeys, $iCpuFlag=0 Global $sInstallDir = @HomeDrive & '\ProgramData\StringFinder' Global $sSettingsFile = $sInstallDir & '\StringFinder.Settings' Global $aComboName[1], $aComboString[1], $aComboDir[1] #EndRegion --- Global Variables ------------------------------ #Region ------ Init ------------------------------ AutoItWinSetTitle ( 'Str1ngFind3r' ) If _ScriptIsAlreadyRunning() Then Exit MsgBox ( 262144+16, 'Exiting', $sSoftTitle & ' is Already Running !', 4 ) DirCreate ( $sInstallDir ) _Gui() _TrayMenu() _SettingsLoad ( $sSettingsFile ) GUISetAccelerators ( $aAccelKeys, $hGui ) ; for remove current TabItem. ProcessSetPriority ( @AutoItPID, 0 ) #EndRegion --- Init ------------------------------ #Region ------ Main Loop ------------------------------ While 1 If $iSearch = 1 Then $sSearchDir = GUICtrlRead ( $idComboDir ) ConsoleWrite ( '>->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $sSearchDir : ' & $sSearchDir & @Crlf ) If FileExists ( $sSearchDir ) Then ; reset. $iCountFound = 0 $iCountTotal = 0 $iSizeMax = 0 $iSleep = 10 $aAnd = 0 $aOr = 0 $aNot = 0 Dim $aAnd[1], $aOr[1], $aNot[1] _GUICtrlStatusBar_SetText ( $hStatusBar, 'Match ' & $iCountFound & ' / ' & $iCountTotal, 1 ) _GUICtrlListView_DeleteAllItems ( $hListView ) _GUICtrlStatusBar_SetText ( $hStatusBar, '', 2 ) ControlSetText ( $hGui, '', $idEditOutput, '' ) $sSearchString = GUICtrlRead ( $idComboString ) $sFilter = GUICtrlRead ( $idComboName ) If $sFilter = '' Then $sFilter = '*.*' ConsoleWrite ( '+->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $sFilter : ' & $sFilter & @Crlf ) ; Save filter to combo name. $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, $sFilter ) ; check filter. $iSearchType = 0 ; $iSearchType : ; 10 ; list by extension + String Inside. ; 11 ; list by extension. ; 20 ; List file with String1 in file name + String2 Inside. ; 21 ; List file with String in file name. ; 30 ; List any files + String Inside. ; 31 ; List any files. If StringLeft ( $sFilter, 2 ) = '*.' Then $iSearchType = 10 ; list by extension + String Inside. If $sSearchString = '' Then $iSearchType = 11 ; list by extension. If StringLeft ( $sFilter, 3 ) = '*.*' Then $iSearchType = 30 ; List any files + String Inside. If $sSearchString = '' Then $iSearchType = 31 ; List any files. If $iSearchType = 30 Then $iSleep = 30 EndIf Else $iSearchType = 20 ; List file with name in file name + String Inside. If $sSearchString = '' Then $iSearchType = 21 ; List file with name in file name. If $iSearchType = 20 Then $iSleep = 30 EndIf ConsoleWrite ( '+->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $iSearchType : ' & $iSearchType & @Crlf ) ConsoleWrite ( '+->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $iSleep : ' & $iSleep & @Crlf ) If _GuiCtrlIsChecked ( $idCheckboxCaseSense ) Then $iCaseSense = 1 Else $iCaseSense = 0 EndIf ConsoleWrite ( '+->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $iCaseSense : ' & $iCaseSense & @Crlf ) If $sSearchString Then $aComboString = _GUICtrlCombo_AddItem ( $idComboString, $aComboString, $sSearchString ) ; Set animation GUICtrlSetState ( $idAViSearchString, $GUI_SHOW ) GUICtrlSetState ( $idAViSearchString, $GUI_AVISTART ) Else GUICtrlSetState ( $idAViSearchFile, $GUI_SHOW ) GUICtrlSetState ( $idAViSearchFile, $GUI_AVISTART ) EndIf ; Check if search for file size. $iSizeMin = 0 If _GuiCtrlIsChecked ( $idCheckboxSize ) Then $iSizeCheck = 1 $iSizeMin = GUICtrlRead ( $idInputSizeMin ) ; kb $iSizeMax = GUICtrlRead ( $idInputSizeMax ) ; kb If $iSizeMin = 0 And $iSizeMax = 0 Then $iSizeCheck = 0 Else $iSizeCheck = 0 EndIf If $sSearchString = '' Then If $iSizeMax = 0 Then $iSizeMax = 10^10 Else If $iSizeMax = 0 Then $iSizeMax = $iMaxReadableSize EndIf ConsoleWrite ( '+->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $iSizeMin : ' & $iSizeMin & @Crlf ) ConsoleWrite ( '+->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $iSizeMax : ' & $iSizeMax & @Crlf ) ; Check if search in subfolders. If _GuiCtrlIsChecked ( $idCheckboxSubFolders ) Then $iSubFolders = 1 Else $iSubFolders = 0 EndIf ConsoleWrite ( '+->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $iSubFolders : ' & $iSubFolders & @Crlf ) ; Find empty listview for re-use it. $iFlagEmptyLV = 0 For $i = 1 To UBound ( $aIdTabListView ) -1 If _GUICtrlListView_GetItemCount ( $aIdTabListView[$i] ) = 0 Then If $sSearchString Then GUICtrlSetData ( $aIdTabItem[$i], $sSearchString ) Else GUICtrlSetData ( $aIdTabItem[$i], '# ' & GUICtrlRead ( $idComboName ) ) EndIf _GuiCtrlTab_Activate ( $idTab, $i-1 ) $hRetListView = $aIdTabListView[$i] $iFlagEmptyLV = 1 ExitLoop EndIf Next If Not $iFlagEmptyLV Then $hRetListView = _GuiCtrlTabAdd() Else $sTipTxt = 'FileName : ' & GUICtrlRead ( $idComboName ) & @CRLF & _ 'String : ' & GUICtrlRead ( $idComboString ) & @CRLF & _ ; 'Dir : ' & GUICtrlRead ( $idComboDir ) & @CRLF & _ 'CaseSense : ' & $iCaseSense & @CRLF & _ 'Subfolders : ' & $iSubfolders & @CRLF & _ 'SizeCheck : ' & $iSizeCheck & @CRLF & _ 'SizeMin : ' & GUICtrlRead ( $idInputSizeMin ) & @CRLF & _ 'SizeMax : ' & GUICtrlRead ( $idInputSizeMax ) $aTipText[ GUICtrlRead ( $idTab ) +1 ] = $sTipTxt EndIf ; Set columns width depending of search type. If $sSearchString = '' Then _GUICtrlListView_SetColumnWidth ( $hRetListView, 1, 0 ) Else _GUICtrlListView_SetColumnWidth ( $hRetListView, 1, 50 ) EndIf StringReplace ( $sFilter, '*.', '*.' ) If @extended = 1 Then If $sFilter = '*.*' Then _GUICtrlListView_SetColumnWidth ( $hRetListView, 2, 50 ) Else _GUICtrlListView_SetColumnWidth ( $hRetListView, 2, 0 ) EndIf Else _GUICtrlListView_SetColumnWidth ( $hRetListView, 2, 50 ) EndIf ; save settings _SettingsSave ( $sSettingsFile ) ; Create array of string by operators. _CheckOperator() ; start new search. $hTimerInit = TimerInit() _FileList ( $sSearchDir ) ; Display results. _GUICtrlStatusBar_SetText ( $hStatusBar, 'in ' & _TimeToString ( TimerDiff ( $hTimerInit ) ), 2 ) _GUICtrlStatusBar_SetText ( $hStatusBar, 'Search is Finished', 0 ) _GUICtrlStatusBar_SetText ( $hStatusBar, 'Found ' & $iCountFound & ' Files / ' & $iCountTotal , 1 ) ConsoleWrite ( '!->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $iCountTotal : ' & $iCountTotal & @Crlf ) ConsoleWrite ( '!->-- [' & StringFormat ( '%03i', @ScriptLineNumber ) & '] $iCountFound : ' & $iCountFound & @Crlf ) ; free operator arrays. $aOr = 0 $aAnd = 0 $aNot = 0 ; stop animation GUICtrlSetState ( $idAViSearchString, $GUI_AVISTOP ) GUICtrlSetState ( $idAViSearchString, $GUI_HIDE ) GUICtrlSetState ( $idAViSearchFile, $GUI_AVISTOP ) GUICtrlSetState ( $idAViSearchFile, $GUI_HIDE ) If _GuiCtrlIsChecked ( $idCheckboxSound ) Then Beep ( 1000, 200 ) Beep ( 1500, 200 ) Beep ( 1200, 600 ) Else TrayTip ( $sSoftTitle, 'Search is Finished !', 5, 1+16 ) AdlibRegister ( '_TrayTipClose', 4000 ) EndIf $sLastSelectDir = $sSearchDir $hRetListView = 0 _MemoryClean() EndIf $iSearch = 0 ControlSetText ( $hGui, '', $idButtonSearch, 'Search' ) EndIf If $iSelectDir = 1 Then _GUICtrlStatusBar_SetText ( $hStatusBar, 'Selecting Dir', 2 ) $iSelectDir = 0 $sSearchDir = FileSelectFolder ( 'Choose Directory', $sLastSelectDir, 0, $sLastSelectDir, $hGui ) If Not FileExists ( $sSearchDir ) Then $sSearchDir = @WorkingDir $sLastSelectDir = $sSearchDir $aComboDir = _GUICtrlCombo_AddItem ( $idComboDir, $aComboDir, $sSearchDir ) EndIf If $iColumn <> -1 Then _GUICtrlStatusBar_SetText ( $hStatusBar, 'Please Wait While Sorting Listview', 0 ) GUIRegisterMsg ( $WM_NOTIFY, '_GuiNoEvents' ) Opt ( 'GUIOnEventMode', 0 ) If $hLVToSort Then $hTimerInit = TimerInit() _GUICtrlListView_SortItems ( $hLVToSort, $iColumn ) ConsoleWrite ( @ScriptLineNumber & ' TimerDiff _GUICtrlListView_SortItems : ' & TimerDiff ( $hTimerInit ) & @Crlf ) EndIf $iColumn = -1 $hLVToSort = 0 _GUICtrlStatusBar_SetText ( $hStatusBar, 'Listview Sorted', 0 ) GUIRegisterMsg ( $WM_NOTIFY, '_WM_NOTIFY' ) Opt ( 'GUIOnEventMode', 1 ) EndIf Sleep ( 150 ) WEnd #EndRegion --- Main Loop ------------------------------ Func _AlreadyInArray ( $aSearch, $iItem, $iStart=0, $iPartial=0 ) _ArraySearch ( $aSearch, $iItem, $iStart, 0, 0, $iPartial ) If Not @error Then Return 1 EndFunc ;==> _AlreadyInArray() Func _AutoFocusCombo() $iAutoFocusCombo = Int ( _TrayItemIsChecked ( $idTrayAutoFocusCombo ) ) ;~ _GuiShow() EndFunc ;==> _AutoFocusCombo() Func _AutoFocusList() $iAutoFocusList = Int ( _TrayItemIsChecked ( $idTrayAutoFocusList ) ) ;~ _GuiShow() EndFunc ;==> _AutoFocusList() Func _Base64Decode ( $input_string ) ; by trancexx Local $struct = DllStructCreate ( 'int' ) Local $a_Call = DllCall ( 'Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', 0, 'ptr', DllStructGetPtr ( $struct, 1 ), 'ptr', 0, 'ptr', 0 ) If @error Or Not $a_Call[0] Then Return SetError ( 1, 0, '' ) Local $a = DllStructCreate ( 'byte[' & DllStructGetData ( $struct, 1 ) & ']' ) $a_Call = DllCall ( 'Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', DllStructGetPtr ( $a ), 'ptr', DllStructGetPtr ( $struct, 1 ), 'ptr', 0, 'ptr', 0 ) If @error Or Not $a_Call[0] Then Return SetError ( 2, 0, '' ) Return DllStructGetData ( $a, 1 ) EndFunc ;==> _Base64Decode() Func _CheckOperator() Local $aSplit = StringSplit ( StringStripWS ( $sSearchString, 4+1+2 ), ' ', 1+2 ) If Not @error Then For $i = UBound ( $aSplit ) -1 To 0 Step -1 Switch $aSplit[$i] Case 'and' If $i And Not _AlreadyInArray ( $aAnd, $aSplit[$i -1], 0, 0 ) Then If $aAnd[UBound ( $aAnd ) -1] <> '' Then ReDim $aAnd[UBound ( $aAnd )+1 ] $aAnd[UBound ( $aAnd ) -1] = $aSplit[$i -1] EndIf If $i +1 <= UBound ( $aSplit ) -1 And Not _AlreadyInArray ( $aAnd, $aSplit[$i +1], 0, 0 ) Then ReDim $aAnd[UBound ( $aAnd )+1 ] $aAnd[UBound ( $aAnd ) -1] = $aSplit[$i +1] EndIf Case 'or' If $i And Not _AlreadyInArray ( $aOr, $aSplit[$i -1], 0, 0 ) Then If $aOr[UBound ( $aOr ) -1] <> '' Then ReDim $aOr[UBound ( $aOr )+1 ] $aOr[UBound ( $aOr ) -1] = $aSplit[$i -1] EndIf If $i +1 <= UBound ( $aSplit ) -1 And Not _AlreadyInArray ( $aOr, $aSplit[$i +1], 0, 0 ) Then ReDim $aOr[UBound ( $aOr )+1 ] $aOr[UBound ( $aOr ) -1] = $aSplit[$i +1] EndIf Case 'not' If $i +1 <= UBound ( $aSplit ) -1 And Not _AlreadyInArray ( $aNot, $aSplit[$i +1], 0, 0 ) Then If $aNot[UBound ( $aNot ) -1] <> '' Then ReDim $aNot[UBound ( $aNot )+1 ] $aNot[UBound ( $aNot ) -1] = $aSplit[$i +1] EndIf EndSwitch Next If $aOr[0] = '' Then $aOr = 0 If $aAnd[0] = '' Then $aAnd = 0 If $aNot[0] = '' Then $aNot = 0 Else $aAnd = 0 $aNot = 0 $aOr[UBound ( $aOr ) -1] = $sSearchString EndIf EndFunc ;==> _CheckOperator() Func _CpuLimit() If $iCpuFlag And Mod ( $iCountTotal, 50 ) = 0 Then Return Sleep ( $iSleep ) If TimerDiff ( $hTimerInitSleep ) > 300 Then ; ms Sleep ( $iSleep ) $hTimerInitSleep = TimerInit() EndIf EndFunc ;==> _CpuLimit() Func _CpuSetFlag() If _TrayItemIsChecked ( $idTrayCpu ) Then $iCpuFlag = 1 Else $iCpuFlag = 0 EndIf EndFunc ;==> _CpuSetFlag() Func _Exit() $iSearch = 0 _SettingsSave ( $sSettingsFile ) For $i = 1 To UBound ( $aIdTabListView ) -1 If $aIdTabListView[$i] Then _GUICtrlListView_UnRegisterSortCallBack ( GUICtrlGetHandle ( $aIdTabListView[$i] ) ) Next If $hFontStatusBar Then _WinAPI_DeleteObject ( $hFontStatusBar ) GUIDelete() FileDelete ( $sInstallDir & '\SearchString_48x50.avi' ) FileDelete ( $sInstallDir & '\ScanPC_48x45.avi' ) ;~ FileDelete ( $sInstallDir & '\TheRollingStones.ico' ) WinClose ( WinGetHandle ( AutoItWinGetTitle() ) ) ; Alternative to "Exit" by Closing the AutoIt Hidden Window. EndFunc ;==> _Exit() Func _FileCheckSize ( $sFilePath ) Local $iSize = Ceiling ( FileGetSize ( $sFilePath ) /1024 ) ; kb If $iSize <= $iSizeMin Or $iSize >= $iSizeMax Then Return 0 Return $iSize EndFunc ;==> _FileCheckSize() Func _FileCheckString ( $sFilePath ) Local $iEncoding = FileGetEncoding ( $sFilePath ) If $iEncoding > 512 Or $iEncoding = 16 Then Return Local $sFileRead Local $hFile = FileOpen ( $sFilePath, 0 ) ; Read mode If $hFile = -1 Then Return SetError ( -1, 0, 0 ) $sFileRead = FileRead ( $hFile ) FileClose ( $hFile ) Local $iExtended ; manage "And" operator. If $aAnd <> 0 Then For $i = 0 To UBound ( $aAnd ) -1 StringReplace ( $sFileRead, $aAnd[$i], $aAnd[$i], 0, $iCaseSense ) If Not @extended Then $iExtended = 0 ExitLoop EndIf $iExtended += @extended Next ElseIf $aOr <> 0 Then ; manage "Or" operator. For $i = 0 To UBound ( $aOr ) -1 StringReplace ( $sFileRead, $aOr[$i], $aOr[$i], 0, $iCaseSense ) $iExtended += @extended Next EndIf ; manage "Not" operator. If $aNot <> 0 Then For $i = 0 To UBound ( $aNot ) -1 StringReplace ( $sFileRead, $aNot[$i], $aNot[$i], 0, $iCaseSense ) If @extended Then $iExtended = 0 ExitLoop EndIf Next EndIf If $aAnd = 0 And $aOr = 0 And $aNot = 0 Then StringReplace ( $sFileRead, $sSearchString, $sSearchString, 0, $iCaseSense ) $iExtended = @extended EndIf $sFileRead = 0 Return $iExtended EndFunc ;==> _FileCheckString() Func _FileExtCheck ( $sExt, $sFilePath ) ; filter for avoid to read common filetype without readable "text". Switch $sExt ; http://fileinfo.com/browse/ Case '$$$', '3ds', '3gp', '3gpp', '669', '7z', '8svx', _ 'a3x', 'aac', 'ac3', 'acm', 'acs', 'aex', 'ahx', 'aiff', 'am', 'ama', 'amc', 'amv', 'ani', 'ape', 'apm', 'arc', 'as3m', 'asc', 'asf', 'asz', 'atr', 'atx', 'au', 'aux', 'avi', 'ax', 'axct', 'ay', _ 'bd', 'bgm', 'bik', 'bli', 'bmp', 'bmz', 'browser', _ 'c2m', 'ca_', 'cab', 'cache', 'cap', 'cat', 'cda', 'cdf-ms', 'cgz', 'chi', 'chm', 'cmc', 'cpa', 'cpl', 'cpt', 'csd', 'cso', 'cur', _ 'd15', 'dax', 'db', 'dd', 'dds', 'demo', 'dic', 'divx', 'dl_', 'dll', 'dlm', 'dmc', 'dmp', 'docx', 'dpb', 'dpg', 'drm', 'dts', 'dv', _ 'efi', 'enu', 'epub', 'etl', 'ev2', 'evtx', 'ex_', 'exe', _ 'f4f', 'f4p', 'f4v', 'fc', 'fc14', 'fla', 'flac', 'fls', 'flv', 'fmt', 'fnt', 'fon', 'ftc', 'fxm', _ 'g16', 'g17', 'g2d', 'g64', 'gbs', 'gex', 'gif', 'gmz', 'gsf', 'gsflib', 'gtr', 'gz', 'gzip', _ 'h264', 'h7v', 'hdmp', 'hdr', 'hip', 'hiw', _ 'icc', 'icl', 'ico', 'icon', 'ilk', 'ima', 'imd', 'img', 'iso', 'isz', 'it', 'its', 'ivr', _ 'jam', 'jar', 'jfif', 'jng', 'jpe', 'jpeg', 'jpg', 'jrs', 'jsa', _ 'kdt', 'kgb', _ 'la', 'lex', 'lha', 'lit', 'lnk', 'lxa', 'lza', _ 'm1v', 'm2v', 'm3d', 'm4a', 'm4b', 'm4p', 'm4r', 'manifest', 'mdf', 'mdl', 'med', 'mfl', 'mgt', 'mht', 'mid', 'midi', 'minigsf', 'miniusf', 'mkv', 'mmf', 'mnv', 'mo', 'mo3', 'mod', 'mov', 'movie', 'mp1', 'mp2', 'mp3', 'mp4', 'mpc', 'mpe', 'mpeg', 'mpg', 'mpt', 'msi', 'mskn', 'msp', 'msstyle', 'msstyles', 'msu', 'mt2', 'mts', 'mui', 'mus', 'mxmf', _ 'ncb', 'nds', 'nexe', 'nlp', 'nls', 'nqf', 'nra', 'nrg', 'nsf', 'nsfe', 'nup', _ 'ocx', 'odt', 'ogg', 'oma', 'otf', _ 'p7x', 'pae', 'pak', 'pch', 'pdf', 'pf', 'pfs', 'pima', 'piz', 'pls', 'pnf', 'png', 'ppm', 'pps', 'ppsx', 'pptx', 'psc', 'psd', 'psf', 'psm', 'psp', 'pt1', 'pt2', 'pt3', 'ptx', 'puf', 'pyd', _ 'qdat', 'qm', 'qt', 'qtm', 'qts', 'qtx', _ 'ra', 'rar', 'rec', 'rm', 'rmi', 'rmvb', 'rtl', 'rv', _ 's3m', 'sap', 'sc68', 'scr', 'sdf', 'sdi', 'sec', 'sfx', 'she', 'shp', 'sid', 'skf', 'skin', 'skn', 'smf', 'smp', 'snd', 'sndh', 'sng', 'so', 'soc', 'spc', 'sqt', 'ssf', 'stc', 'stp', 'str', 'svi', 'swf', 'sy_', 'sys', _ 'tga', 'tgz', 'tib', 'tif', 'tiff', 'ts', 'tsa', 'tsv', 'ttc', 'ttf', 'tts', _ 'uce', 'ufslib', 'uha', 'unt', _ 'v2m', 'vc1', 'vch', 'vdm', 'vga', 'vgm', 'vgz', 'vhd', 'vmdk', 'vob', 'vtx', 'vxd', _ 'wav', 'wave', 'wdp', 'wds', 'webm', 'webp', 'wid', 'wih', 'wim', 'winmd', 'wm', 'wma', 'wmf', 'wmv', 'wtv', _ 'xar', 'xex', 'xlsx', 'xm', 'xmf', 'xpi', 'xps', 'xsd', 'xvid', 'xz', _ 'y4m', 'ym', 'yuv', _ 'zip', 'zxs' Case Else Return _FileCheckString ( $sFilePath ) EndSwitch EndFunc ;==> _FileExtCheck() Func _FileList ( $sFolderPath ) If StringRight ( $sFolderPath, 1 ) <> '\' Then $sFolderPath &= '\' If Not StringInStr ( FileGetAttrib ( $sFolderPath ), 'D' ) Then Return SetError ( 1, 0, '' ) If $iSearch = 0 Then Return Local $hSearch = FileFindFirstFile ( $sFolderPath & '*.*' ) If $hSearch = -1 Then Return SetError ( 2, 0, '' ) Local $sFileName = '', $sExt, $iFound, $iSize While 1 $sFileName = FileFindNextFile ( $hSearch ) If @error Then ExitLoop If @extended Then ; if directory If $iSubFolders Then _GUICtrlStatusBar_SetText ( $hStatusBar, ' Searching in "' & $sFileName & '"', 0 ) _FileList ( $sFolderPath & $sFileName ) EndIf Else $iCountTotal += 1 ;~ $iSearchType : 10 ; list by extension + String Inside. ;~ : 11 ; list by extension. ;~ : 20 ; List file with name in file name + String Inside. ;~ : 21 ; List file with name in file name. ;~ : 30 ; List any files + String Inside. ;~ : 31 ; List any files. $iFound = -1 $iSize = -1 Switch $iSearchType Case 10, 11 $sExt = _GetExtByFullPath ( $sFolderPath & $sFileName ) If Not @error And StringInStr ( $sFilter & ';', '*.' & $sExt & ';' ) <> 0 Then If $iSearchType = 10 Then $iSize = _FileCheckSize ( $sFolderPath & $sFileName ) If $iSize Then $iFound = _FileExtCheck ( $sExt, $sFolderPath & $sFileName ) Else $iFound = 0 EndIf EndIf If $iFound Then If $iSize = -1 And $iSizeCheck Then $iSize = _FileCheckSize ( $sFolderPath & $sFileName ) If $iSize Then $iCountFound += 1 _GuiListView_AddItems ( $hRetListView, $sFileName, $sFolderPath, $iFound, $sExt, $iSize ) EndIf EndIf EndIf Case 20, 21 If StringInStr ( $sFileName, $sFilter, $iCaseSense ) Then If $iSearchType = 20 Then $iSize = _FileCheckSize ( $sFolderPath & $sFileName ) If $iSize Then $sExt = _GetExtByFullPath ( $sFolderPath & $sFileName ) $iFound = _FileExtCheck ( $sExt, $sFolderPath & $sFileName ) Else $iFound = 0 EndIf EndIf If $iFound Then If $iSize = -1 And $iSizeCheck Then $iSize = _FileCheckSize ( $sFolderPath & $sFileName ) If $iSize Then $iCountFound += 1 _GuiListView_AddItems ( $hRetListView, $sFileName, $sFolderPath, $iFound, _GetExtByFullPath ( $sFolderPath & $sFileName ), $iSize ) EndIf EndIf EndIf Case 30, 31 If $iSizeCheck Or $iSizeMax = $iMaxReadableSize Then $iSize = _FileCheckSize ( $sFolderPath & $sFileName ) If $iSize Then If $iSearchType = 30 Then $sExt = _GetExtByFullPath ( $sFolderPath & $sFileName ) $iFound = _FileExtCheck ( $sExt, $sFolderPath & $sFileName ) EndIf If $iFound Then $iCountFound += 1 _GuiListView_AddItems ( $hRetListView, $sFileName, $sFolderPath, $iFound, _GetExtByFullPath ( $sFolderPath & $sFileName ), $iSize ) EndIf EndIf EndSwitch EndIf If TimerDiff ( $hTimerInitDisplay ) > 200 Then _GUICtrlStatusBar_SetText ( $hStatusBar, 'Match ' & $iCountFound & ' / ' & $iCountTotal, 1 ) $hTimerInitDisplay = TimerInit() EndIf If $iSearch = 0 Then Return _CpuLimit() WEnd FileClose ( $hSearch ) EndFunc ;==> _FileList() Func _GetExtByFullPath ( $sFullPath ) Local $aFileName = StringSplit ( $sFullPath, '.' ) If Not @error And Not StringInStr ( $aFileName[$aFileName[0]], '\' ) Then Return $aFileName[$aFileName[0]] Return SetError ( 1, 0, '' ) EndFunc ;==> _GetExtByFullPath() Func _GetLines ( $sFile ) Local $sSearchString = _GUICtrlTab_GetText ( $idTab, GUICtrlRead ( $idTab ) ) Local $aOr2[1], $aAnd2[1], $aNot2[1], $aSplit Local $aFileString = FileReadToArray ( $sFile ), $sTxt = '' If Not @error Then $aSplit = StringSplit ( StringStripWS ( $sSearchString, 1+2+4 ), ' ', 1+2 ) If Not @error Then For $i = UBound ( $aSplit ) -1 To 0 Step -1 Switch $aSplit[$i] Case 'and' If $i And Not _AlreadyInArray ( $aAnd2, $aSplit[$i -1], 0, 0 ) Then If $aAnd2[UBound ( $aAnd2 ) -1] <> '' Then ReDim $aAnd2[UBound ( $aAnd2 )+1 ] $aAnd2[UBound ( $aAnd2 ) -1] = $aSplit[$i -1] EndIf If $i +1 <= UBound ( $aSplit ) -1 And Not _AlreadyInArray ( $aAnd2, $aSplit[$i +1], 0, 0 ) Then ReDim $aAnd2[UBound ( $aAnd2 )+1 ] $aAnd2[UBound ( $aAnd2 ) -1] = $aSplit[$i +1] EndIf Case 'or' If $i And Not _AlreadyInArray ( $aOr2, $aSplit[$i -1], 0, 0 ) Then If $aOr2[UBound ( $aOr2 ) -1] <> '' Then ReDim $aOr2[UBound ( $aOr2 )+1 ] $aOr2[UBound ( $aOr2 ) -1] = $aSplit[$i -1] EndIf If $i +1 <= UBound ( $aSplit ) -1 And Not _AlreadyInArray ( $aOr2, $aSplit[$i +1], 0, 0 ) Then ReDim $aOr2[UBound ( $aOr2 )+1 ] $aOr2[UBound ( $aOr2 ) -1] = $aSplit[$i +1] EndIf Case 'not' If $i +1 <= UBound ( $aSplit ) -1 And Not _AlreadyInArray ( $aNot2, $aSplit[$i +1], 0, 0 ) Then If $aNot2[UBound ( $aNot2 ) -1] <> '' Then ReDim $aNot2[UBound ( $aNot2 )+1 ] $aNot2[UBound ( $aNot2 ) -1] = $aSplit[$i +1] EndIf EndSwitch Next If $aOr2 <> 0 And $aOr2[0] = '' Then $aOr2 = 0 If $aAnd2 <> 0 And $aAnd2[0] = '' Then $aAnd2 = 0 If $aNot2 <> 0 And $aNot2[0] = '' Then $aNot2 = 0 Else $aAnd2 = 0 $aNot2 = 0 $aOr2[UBound ( $aOr2 ) -1] = $sSearchString EndIf Local $aLineNumber ; manage "And" operator. If $aAnd2 <> 0 Then For $i = 0 To UBound ( $aAnd2 ) -1 $aLineNumber = _ArrayFindAll ( $aFileString, $aAnd2[$i], 0, 0, $iCaseSense, 1 ) If Not @error Then $sTxt &= $aAnd2[$i] & ' (' & UBound ( $aLineNumber ) & ') : ' & @Crlf For $j = 0 To UBound ( $aLineNumber ) - 1 $sTxt &= 'Line N° ' & StringFormat ( '%03i', $aLineNumber[$j] + 1 ) & @TAB & StringStripWS ( $aFileString[$aLineNumber[$j]], 1+4 ) & @CRLF Next $sTxt &= @CRLF EndIf Next ElseIf $aOr2 <> 0 Then ; manage "Or" operator. For $i = 0 To UBound ( $aOr2 ) -1 $aLineNumber = _ArrayFindAll ( $aFileString, $aOr2[$i], 0, 0, $iCaseSense, 1 ) If Not @error Then $sTxt &= $aOr2[$i] & ' (' & UBound ( $aLineNumber ) & ') : ' & @Crlf For $j = 0 To UBound ( $aLineNumber ) - 1 $sTxt &= 'Line N° ' & StringFormat ( '%03i', $aLineNumber[$j] + 1 ) & @TAB & StringStripWS ( $aFileString[$aLineNumber[$j]], 1+4 ) & @CRLF Next $sTxt &= @CRLF EndIf Next EndIf If $aAnd2 = 0 And $aOr2 = 0 And $aNot2 = 0 Then $aLineNumber = _ArrayFindAll ( $aFileString, $sSearchString, 0, 0, $iCaseSense, 1 ) If Not @error Then $sTxt &= $sSearchString & ' (' & UBound ( $aLineNumber ) & ') : ' & @Crlf For $i = 0 To UBound ( $aLineNumber ) - 1 $sTxt &= 'Line N° ' & StringFormat ( '%03i', $aLineNumber[$i] + 1 ) & @TAB & StringStripWS ( $aFileString[$aLineNumber[$i]], 1+4 ) & @CRLF Next $sTxt &= @CRLF EndIf EndIf $aSplit = 0 $aOr2 = 0 $aAnd2 = 0 $aNot2 = 0 ControlSetText ( $hGui, '', $idEditOutput, $sTxt ) EndIf $aFileString = 0 $sTxt = 0 EndFunc ;==> _GetLines() Func _Gui() TheRollingStonesIcon ( 'TheRollingStones.ico', $sInstallDir, 1 ) Local $h If @DesktopHeight < 700 Then $h = 70 $hGui = GUICreate ( $sSoftTitle, 900, 710 -$h*2, -1, -1, BitOR ( $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SYSMENU, $WS_SIZEBOX ) ) GUISetOnEvent ( $GUI_EVENT_CLOSE, '_GuiEvents' ) GUISetIcon ( $sInstallDir & '\TheRollingStones.ico' ) GUICtrlCreateLabel ( 'File Name', 20, 23, 85, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) $idComboName = GUICtrlCreateCombo ( '', 100, 20, 460, 32 ) GUICtrlSetFont ( -1, 11, 600, -1, 'MS Reference Sans Serif' ) $idButtonRemoveName = GUICtrlCreateButton ( '-', 570, 19, 30, 26 ) GUICtrlSetFont ( -1, 14, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) GUICtrlSetTip ( -1, 'Remove Current Name from Combo', '', 1, 1 ) $idButtonAddName = GUICtrlCreateButton ( '+', 610, 19, 30, 26 ) GUICtrlSetFont ( -1, 14, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) GUICtrlSetTip ( -1, 'Add Current Name To Combo', '', 1, 1 ) $idButtonPasteName = GUICtrlCreateButton ( 'P', 650, 19, 30, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) GUICtrlSetTip ( -1, 'Paste Name from Clipboard and add it to Combo', '', 1, 1 ) $idButtonSearch = GUICtrlCreateButton ( 'Search', 690, 20, 60, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) $idCheckboxSound = GUICtrlCreateCheckbox ( 'Sounds', 760, 21, 80, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetTip ( -1, 'To be informed when the Search is finished', '', 1, 1 ) GUICtrlCreateLabel ( 'String', 20, 53, 85, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) $idComboString = GUICtrlCreateCombo ( '', 100, 50, 460, 32 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) $idButtonRemoveString = GUICtrlCreateButton ( '-', 570, 49, 30, 26 ) GUICtrlSetFont ( -1, 14, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) GUICtrlSetTip ( -1, 'Remove Current String from Combo', '', 1, 1 ) $idButtonAddString = GUICtrlCreateButton ( '+', 610, 49, 30, 26 ) GUICtrlSetFont ( -1, 14, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) GUICtrlSetTip ( -1, 'Add Current String To Combo', '', 1, 1 ) $idButtonPasteString = GUICtrlCreateButton ( 'P', 650, 49, 30, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) GUICtrlSetTip ( -1, 'Paste String from Clipboard and add it to Combo', '', 1, 1 ) $idButtonHelp = GUICtrlCreateButton ( 'Help', 690, 49, 60, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) SearchString_48x50Avi ( 'SearchString_48x50.avi', $sInstallDir, 1 ) $idAViSearchString = GUICtrlCreateAvi ( $sInstallDir & '\SearchString_48x50.avi', 0, 850, 5, 48, 50 ) GUICtrlSetState ( -1, $GUI_HIDE ) SearchFile_48X45Avi ( 'ScanPC_48x45.avi', $sInstallDir, 1 ) $idAViSearchFile = GUICtrlCreateAvi ( $sInstallDir & '\ScanPC_48x45.avi', 0, 850, 5, 48, 45 ) GUICtrlSetState ( -1, $GUI_HIDE ) $idCheckboxCaseSense = GUICtrlCreateCheckbox ( 'CaseSense', 760, 51, 100, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) GUICtrlCreateLabel ( 'Search in', 20, 83, 85, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) $idComboDir = GUICtrlCreateCombo ( '', 100, 80, 460, 32 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) $idButtonRemoveDir = GUICtrlCreateButton ( '-', 570, 79, 30, 26 ) GUICtrlSetFont ( -1, 14, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) GUICtrlSetTip ( -1, 'Remove Current Path from Combo', '', 1, 1 ) $idButtonAddDir = GUICtrlCreateButton ( '+', 610, 79, 30, 26 ) GUICtrlSetFont ( -1, 14, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) GUICtrlSetTip ( -1, 'Add Current Path To Combo', '', 1, 1 ) $idButtonPasteDir = GUICtrlCreateButton ( 'P', 650, 79, 30, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) GUICtrlSetTip ( -1, 'Paste Path from Clipboard and add it to Combo', '', 1, 1 ) $idButtonDir = GUICtrlCreateButton ( 'Dir', 690, 80, 60, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) $idCheckboxSubFolders = GUICtrlCreateCheckbox ( 'SubFolders', 760, 80, 100, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) $idButtonSizeMin = GUICtrlCreateButton ( '>', 570, 110, 30, 24 ) GUICtrlSetFont ( -1, 14, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetState ( $idButtonSizeMin, $GUI_DISABLE ) $idInputSizeMin = GUICtrlCreateInput ( '0', 610, 110, 30, 24, 0x2000 ) ; $ES_NUMBER GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetState ( $idInputSizeMin, $GUI_DISABLE ) $idButtonSizeMax = GUICtrlCreateButton ( '<', 650, 110, 30, 24 ) GUICtrlSetFont ( -1, 14, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetState ( $idButtonSizeMax, $GUI_DISABLE ) $idInputSizeMax = GUICtrlCreateInput ( '0', 690, 110, 60, 24, 0x2000 ) ; $ES_NUMBER GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetResizing ( -1, $GUI_DOCKHEIGHT ) GUICtrlSetState ( $idInputSizeMax, $GUI_DISABLE ) $idCheckboxSize = GUICtrlCreateCheckbox ( 'Size (kb)', 760, 110, 100, 26 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) $idLabelOutput = GUICtrlCreateLabel ( 'Lines', 20, 485, 120, 18 ) GUICtrlSetFont ( -1, 10, 600, -1, 'MS Reference Sans Serif' ) $idEditOutput = GUICtrlCreateEdit ( '', 20, 500 -$h, 860, 163 -$h, BitOR ( $WS_VSCROLL, $WS_HSCROLL, 2048 ) ) ; $ES_READONLY GUICtrlSetBkColor ( -1, 0xFFFFFF ) GUICtrlSetFont ( -1, 9, 550 ) $idDummyHotkey = GUICtrlCreateDummy() GUICtrlSetOnEvent ( -1, '_GuiEvents' ) Dim $aAccelKeys[1][2] = [['^w', $idDummyHotkey]] ; Part 1, for avoid bug when using native AutoIt GUI functions with the UDF functions. Do Until GUICtrlCreateDummy() = 10000 ; GUI_MAXCONTROLS 65532 Maximum number of controls in a GUI. $idTab = GUICtrlCreateTab ( 20, 150, 860, 330 -$h ) GUICtrlSetOnEvent ( -1, '_GuiEvents' ) $hTab = GUICtrlGetHandle ( $idTab ) $hRetListView = _GuiCtrlTabAdd() $hStatusBar = _GUICtrlStatusBar_Create ( $hGui ) $hFontStatusBar = _GUICtrlStatusBar_SetFont ( $hStatusBar, 14, 550, 0, 'MS Reference Sans Serif' ) ; "Comic Sans MS" Local $aParts[3] = [530, 700, -1] _GUICtrlStatusBar_SetParts ( $hStatusBar, $aParts ) Local $aPos = WinGetPos( $hGui ) $iGuiWidth = $aPos[2] $iGuiHeight = $aPos[3] If StringInStr ( $CmdLineRaw, '/min' ) Then GUISetState ( @SW_HIDE ) Else GUISetState() EndIf GUIRegisterMsg ( $WM_GETMINMAXINFO, '_WM_GETMINMAXINFO' ) GUIRegisterMsg ( $WM_NOTIFY, '_WM_NOTIFY' ) GUIRegisterMsg ( $WM_PAINT, '_WM_PAINT' ) GUIRegisterMsg ( $WM_COMMAND, '_WM_COMMAND' ) GUIRegisterMsg ( $WM_SETCURSOR, '_WM_MOUSEOVER' ) EndFunc ;==> _Gui() Func _GUICtrlCombo_AddItem ( $idCombo, $aCombo, $sComboString ) Local $hCombo = GUICtrlGetHandle ( $idCombo ) If Not IsArray ( $aCombo ) Then Dim $aCombo[1] _ArrayAdd ( $aCombo, $sComboString, 0, $sDelimiterItems, $sDelimiterRows ) Local $iUbound1 = UBound ( $aCombo ) -1, $iUbound2 $aCombo = _ArrayUnique ( $aCombo, 0, 1 ) ; base 1 $iUbound2 = UBound ( $aCombo ) -1 _ArraySort ( $aCombo, 0, 1 ) Local $iIndex = _ArraySearch ( $aCombo, $sComboString, 1, 0, 0, 2 ) _SendMessage ( $hCombo, 0x14B ) ; $CB_RESETCONTENT For $i = 1 To UBound ( $aCombo ) -1 _SendMessage ( $hCombo, 0x143, 0, $aCombo[$i], 0, 'wparam', 'wstr' ) ; $CB_ADDSTRING Next If $iIndex <> -1 Then _SendMessage ( $hCombo, 0x14E, $iIndex -1 ) ; $CB_SETCURSEL If $iUbound1 <> $iUbound2 Then _GUICtrlStatusBar_SetText ( $hStatusBar, ' "' & $sComboString & '" is already in the Combo List', 0 ) Else _GUICtrlStatusBar_SetText ( $hStatusBar, ' "' & $sComboString & '" was added to the Combo List', 0 ) EndIf Return $aCombo EndFunc ;==> _GUICtrlCombo_AddItem() Func _GUICtrlCombo_RemoveCurrentItem ( $idCombo, $aCombo ) If UBound ( $aCombo ) < 2 Then Return Local $sComboString = GUICtrlRead ( $idCombo ) Local $hCombo = GUICtrlGetHandle ( $idCombo ) _ArraySort ( $aCombo, 0, 1 ) _SendMessage ( $hCombo, 0x14B ) ; $CB_RESETCONTENT For $i = 1 To UBound ( $aCombo ) -1 _SendMessage ( $hCombo, 0x143, 0, $aCombo[$i], 0, 'wparam', 'wstr' ) ; $CB_ADDSTRING Next Local $iIndex = _ArraySearch ( $aCombo, $sComboString, 1, 0, 0, 2 ) If $iIndex <> -1 Then _ArrayDelete ( $aCombo, $iIndex ) _SendMessage ( $hCombo, 0x144, $iIndex -1 ) ; $CB_DELETESTRING, $iIndex zero-based index of the string to delete. If $iIndex -2 < 0 Then $iIndex = 2 _SendMessage ( $hCombo, 0x14E, $iIndex -2 ) ; $CB_SETCURSEL _GUICtrlStatusBar_SetText ( $hStatusBar, ' "' & $sComboString & '" was Removed from the Combo List', 0 ) EndIf Return $aCombo EndFunc ;==> _GUICtrlCombo_RemoveCurrentItem() Func _GuiCtrlIsChecked ( $idCtrl ) Return BitAND ( GUICtrlRead ( $idCtrl ), $GUI_CHECKED ) = $GUI_CHECKED EndFunc ;==> _GuiCtrlIsChecked() Func _GUICtrlStatusBar_SetFont ( $hWnd, $iHeight = 10, $iWeight = 400, $iFontAtrributes = 0, $sFontName = 'Arial' ) Local $hFont = _WinAPI_CreateFont ( $iHeight, 0, 0, 0, $iWeight, BitAND ( $iFontAtrributes, 2 ), BitAND ( $iFontAtrributes, 4 ), BitAND ( $iFontAtrributes, 8 ), 1, 0, 0, 0, 0, $sFontName ) _SendMessage ( $hWnd, $WM_SETFONT, $hFont, 0 ) If Not @error Then Return $hFont EndFunc ;==> _GUICtrlStatusBar_SetFont() Func _GuiCtrlTab_Activate ( $idCtrl, $iIndex ) Local $hWnd = GUICtrlGetHandle ( $idCtrl ) Local $hParent = _WinAPI_GetParent ( $hWnd ) If @error Then Return SetError ( 1, 0, -1 ) Local $tNmhdr = DllStructCreate ( $tagNMHDR ) DllStructSetData ( $tNmhdr, 1, $hWnd ) DllStructSetData ( $tNmhdr, 2, $idCtrl ) DllStructSetData ( $tNmhdr, 3, -552 ) ; $TCN_SELCHANGING _SendMessage ( $hParent, 0x004E, $idCtrl, $tNmhdr, 0, 'wparam', 'struct*' ) ; $__TABCONSTANT_WM_NOTIFY Local $iRet = _SendMessage ( $hWnd, 4876, $iIndex ) ; $TCM_SETCURSEL DllStructSetData ( $tNmhdr, 3, -551 ) ; $TCN_SELCHANGE _SendMessage ( $hParent, 0x004E, $idCtrl, $tNmhdr, 0, 'wparam', 'struct*' ) ; $__TABCONSTANT_WM_NOTIFY Return $iRet EndFunc ;==> _GuiCtrlTab_Activate() Func _GUICtrlTab_GetText ( $idCtrl, $iIndex ) Local $hWnd = GUICtrlGetHandle ( $idCtrl ) Local $iBuffer = 4096, $tagTCITEM = 'uint Mask;dword State;dword StateMask;ptr Text;int TextMax;int Image;lparam Param' Local $tagTCITEMEx = $tagTCITEM & ';ptr Filler' Local $tItem = DllStructCreate ( $tagTCITEMEx ) DllStructSetData ( $tItem, 'Mask', 0x0000001B ) ; $TCIF_ALLDATA DllStructSetData ( $tItem, 'TextMax', $iBuffer ) DllStructSetData ( $tItem, 'StateMask', BitOR ( 0x00000002, 0x00000001 ) ) ; $TCIS_HIGHLIGHTED, $TCIS_BUTTONPRESSED Local $iItem = DllStructGetSize ( $tItem ), $tBuffer $tBuffer = DllStructCreate ( 'wchar Text[' & $iBuffer & ']' ) $iBuffer *= 2 Local $tMemMap, $pMemory = _MemInit ( $hWnd, $iItem + $iBuffer, $tMemMap ) Local $pText = $pMemory + $iItem DllStructSetData ( $tItem, 'Text', $pText ) _MemWrite ( $tMemMap, $tItem, $pMemory, $iItem ) Local $iRet = _SendMessage ( $hWnd, 0x1300 + 60, $iIndex, $pMemory ) ; $TCM_GETITEMW _MemRead ( $tMemMap, $pMemory, $tItem, $iItem ) _MemRead ( $tMemMap, $pText, $tBuffer, $iBuffer ) _MemFree ( $tMemMap ) Return SetError ( $iRet = 0, 0, DllStructGetData ( $tBuffer, 'Text' ) ) EndFunc ;==> _GUICtrlTab_GetText() Func _GuiCtrlTabAdd() If $sSearchString Then _ArrayAdd ( $aIdTabItem, GUICtrlCreateTabItem ( $sSearchString ) ) Else _ArrayAdd ( $aIdTabItem, GUICtrlCreateTabItem ( '# ' & GUICtrlRead ( $idComboName ) ) ) EndIf Local $aPos = ControlGetPos ( $hGui, '', $idTab ) ; memorize the listview associated to the new created TabItem. _ArrayAdd ( $aIdTabListView, GUICtrlCreateListView ( '', $aPos[0], $aPos[1]+20, $aPos[2], $aPos[3]-20 ) ) GUICtrlSetFont ( -1, 9, 500 ) Local $hListView = GUICtrlGetHandle ( -1 ) Local $sTipTxt = 'FileName : ' & GUICtrlRead ( $idComboName ) & @CRLF & _ 'String : ' & GUICtrlRead ( $idComboString ) & @CRLF & _ ; 'Dir : ' & GUICtrlRead ( $idComboDir ) & @CRLF & _ 'CaseSense : ' & $iCaseSense & @CRLF & _ 'Subfolders : ' & $iSubfolders & @CRLF & _ 'SizeCheck : ' & $iSizeCheck & @CRLF & _ 'SizeMin : ' & GUICtrlRead ( $idInputSizeMin ) & @CRLF & _ 'SizeMax : ' & GUICtrlRead ( $idInputSizeMax ) _ArrayAdd ( $aTipText, $sTipTxt ) ; column 0 : file name _GUICtrlListView_AddColumn ( $hListView, 'File Name', 280 ) ; column 1 : string occurrences _GUICtrlListView_AddColumn ( $hListView, 'Count', 50 ) ; column 2 : Extensions _GUICtrlListView_AddColumn ( $hListView, 'Ext', 50 ) ; column 3 : file size _GUICtrlListView_AddColumn ( $hListView, 'Size', 40 ) ; column 4 : parent dir _GUICtrlListView_AddColumn ( $hListView, 'Location', 450 ) ; column 5 : Date and Time Created _GUICtrlListView_AddColumn ( $hListView, 'Created', 120 ) ; column 6 : Date and Time Modified _GUICtrlListView_AddColumn ( $hListView, 'Modified', 120 ) ; column 7 : Date and Time Accessed _GUICtrlListView_AddColumn ( $hListView, 'Accessed', 120 ) _GUICtrlListView_SetExtendedListViewStyle ( $hListView, BitOR ( $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER ) ) _GUICtrlListView_RegisterSortCallBack ( $hListView, True ) ; Treat number strings as numbers. GUICtrlCreateTabItem ( '' ) Return $hListView EndFunc ;==> _GuiCtrlTabAdd() Func _GuiCtrlTabRemove() If UBound ( $aIdTabItem ) -1 < 2 Then Return Local $iTab = GUICtrlRead ( $idTab ) Local $hCurrentListView = GUICtrlGetHandle ( $aIdTabListView[$iTab+1] ) ; disable the deletion of the current search listview. If $iSearch = 1 And $hCurrentListView = $hRetListView Then Return If UBound ( $aIdTabListView ) -1 >= $iTab +1 Then GUISetAccelerators ( 0, $hGui ) _GUICtrlListView_UnRegisterSortCallBack ( $hCurrentListView ) GUICtrlDelete ( $aIdTabListView[$iTab+1] ) _ArrayDelete ( $aIdTabListView, $iTab+1 ) GUICtrlDelete ( $aIdTabItem[$iTab+1] ) _ArrayDelete ( $aIdTabItem, $iTab+1 ) _ArrayDelete ( $aTipText, $iTab+1 ) GUISetAccelerators ( $aAccelKeys, $hGui ) EndIf EndFunc ;==> _GuiCtrlTabRemove() Func _GuiEvents() Switch @GUI_WinHandle Case $hGui ; Part 2, for avoid bug when using native AutoIt GUI functions with the UDF functions. If _MouseIsOverTab() And @GUI_CtrlId <> $idTab Then Return Switch @GUI_CtrlId Case $GUI_EVENT_CLOSE _SettingsSave ( $sSettingsFile ) GUISetState ( @SW_HIDE ) Case $GUI_EVENT_MINIMIZE _SettingsSave ( $sSettingsFile ) Case $idButtonSearch If GUICtrlRead ( @GUI_CtrlId ) = 'search' Then ControlSetText ( @GUI_WinHandle, '', @GUI_CtrlId, 'Stop' ) $iSearch = 1 Else ControlSetText ( @GUI_WinHandle, '', @GUI_CtrlId, 'Search' ) GUICtrlSetState ( $idAViSearchString, $GUI_AVISTOP ) GUICtrlSetState ( $idAViSearchString, $GUI_HIDE ) GUICtrlSetState ( $idAViSearchFile, $GUI_AVISTOP ) GUICtrlSetState ( $idAViSearchFile, $GUI_HIDE ) $iSearch = 0 EndIf Case $idButtonDir If Not $iSearch Then $iSelectDir = 1 Case $idButtonPasteName $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, ClipGet() ) Case $idButtonPasteString $aComboString = _GUICtrlCombo_AddItem ( $idComboString, $aComboString, ClipGet() ) Case $idButtonPasteDir Local $sClipGet = ClipGet() If FileExists ( $sClipGet ) Then $aComboDir = _GUICtrlCombo_AddItem ( $idComboDir, $aComboDir, $sClipGet ) Else _GUICtrlStatusBar_SetText ( $hStatusBar, ' "' & $sClipGet & '" Directory do not exists !', 0 ) EndIf Case $idButtonAddName Local $sName = GUICtrlRead ( $idComboName ) If $sName = '' Then $sName = '*.*' $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, $sName ) Case $idButtonAddString $aComboString = _GUICtrlCombo_AddItem ( $idComboString, $aComboString, GUICtrlRead ( $idComboString ) ) Case $idButtonAddDir Local $sComboPath = GUICtrlRead ( $idComboDir ) If FileExists ( $sComboPath ) Then $aComboDir = _GUICtrlCombo_AddItem ( $idComboDir, $aComboDir, $sComboPath ) Else If $sComboPath Then $sComboPath = ' "' & $sComboPath & '" ' _GUICtrlStatusBar_SetText ( $hStatusBar, $sComboPath & 'Directory do not exists !', 0 ) EndIf Case $idButtonRemoveName $aComboName = _GUICtrlCombo_RemoveCurrentItem ( $idComboName, $aComboName ) Case $idButtonRemoveString $aComboString = _GUICtrlCombo_RemoveCurrentItem ( $idComboString, $aComboString ) Case $idButtonRemoveDir $aComboDir = _GUICtrlCombo_RemoveCurrentItem ( $idComboDir, $aComboDir ) Case $idCheckboxSize Local $State = $GUI_DISABLE If _GuiCtrlIsChecked ( @GUI_CtrlId ) Then $State = $GUI_ENABLE GUICtrlSetState ( $idInputSizeMax, $State ) GUICtrlSetState ( $idInputSizeMin, $State ) GUICtrlSetState ( $idButtonSizeMax, $State ) GUICtrlSetState ( $idButtonSizeMin, $State ) Case $idTab ControlFocus ( $hGui, '', $aIdTabListView[GUICtrlRead ( @GUI_CtrlId ) +1] ) Case $idDummyHotkey _GuiCtrlTabRemove() Case $idButtonHelp Local $sHelpTxt = 'Thank to use StringFinder !' & @CRLF & @CRLF & _ 'With StringFinder you can find files' & @CRLF & _ ' - by string in name' & @CRLF & _ ' - by file extension (examples format : *.au3 or *.txt;*.nfo;*.diz or *.*)' & @CRLF & _ ' - by string inside file (Support only very simple operators ( "and" or "or" ) and "not")' & @CRLF & _ @TAB & 'examples : "String",' & @CRLF & _ @TAB & @TAB & '"string1 and string2 and string3",' & @CRLF & _ @TAB & @TAB & '"string1 or string2",' & @CRLF & _ @TAB & @TAB & '"string1 not string2",' & @CRLF & _ @TAB & @TAB & '"string1 and string2 not string3",' & @CRLF & _ @TAB & @TAB & '"string1 or string2 not string3",' & @CRLF & _ @TAB & '(warning : Do not use "and" and "or" operators at the same time, and "not" if needed must be the last operator)' & @CRLF & _ ' - or just list all files in a directory.' & @CRLF & @CRLF & _ 'For stability (Memory/CPU usage) and performances (Speed) reasons,' & @CRLF & _ 'by default files bigger than 15000 KB are not read for search string inside,' & @CRLF & _ 'but if you want read them, enter a number greater in the "Size Max" input.' & @CRLF & _ 'Only "text" files are read.' & @CRLF & @CRLF & _ 'Each search is open in a new Tab Item for permit to return on a Previous Search easily.' & @CRLF & _ 'A single click on a TabItem when holding "Left SHIFT" key will Restore Search Settings.' & @CRLF & _ 'Use "Ctrl+W" for close the current Tab Item (If not used by a running Search).' & @CRLF & _ 'A single click on a selection in the listview (if a search by string inside file was done) will display lines where string was found.' & @CRLF & _ 'A single click when holding "Left SHIFT" key will open parent directory.' & @CRLF & _ 'A double click will' & @CRLF & _ ' - open "text" files in SciTE (if not found then file is opened with his default program)' & @CRLF & _ ' - open with his default program other files type smaller or equal to 15000 KB' & @CRLF & _ ' - open parent directory for files bigger than 15000 KB.' & @CRLF & _ 'When search is running you can not Sort Listview.' & @CRLF & @CRLF & _ 'The most annoying defect of this script is the time for sort listview with thousands items, so use filter for refine your search or be patient...' & @CRLF & _ 'Settings are saved in a "StringFinder.Settings" file located to "' & @HomeDrive & '\ProgramData\StringFinder"' & @CRLF & _ 'See Tray Menu for Exit or Options as add/remove Compiled Script (Minimized to Tray) to Windows Start.' & @CRLF & _ 'Double Click on Tray Icon for Show/Restore the Gui.' & @CRLF & @CRLF & _ 'Fast and Handy to use, It will help you to find String/Files Easily !' & @CRLF & @CRLF & _ 'wakillon.' & @CRLF ControlSetText ( @GUI_WinHandle, '', $idLabelOutput, 'Help' ) ControlSetText ( @GUI_WinHandle, '', $idEditOutput, $sHelpTxt ) GUICtrlSetFont ( $idEditOutput, 9, 700 ) GUICtrlSetColor ( $idEditOutput, 0x0000FF ) EndSwitch EndSwitch EndFunc ;==> _GuiEvents() Func _GuiListView_AddItems ( $hListView, $sName, $sPath, $iCount, $sExt= -1, $iSize= -1 ) Local $iItemCount = _GUICtrlListView_GetItemCount ( $hListView ) Local $iIndex = _GUICtrlListView_AddItem ( $hListView, $sName, -1, $iItemCount ) If $iCount = -1 Then $iCount = '' _GUICtrlListView_AddSubItem ( $hListView, $iIndex, $iCount, 1 ) If $sExt <> -1 Then _GUICtrlListView_AddSubItem ( $hListView, $iIndex, StringLower ( $sExt ), 2 ) If $iSize <> -1 Then _GUICtrlListView_AddSubItem ( $hListView, $iIndex, $iSize, 3 ) Else _GUICtrlListView_AddSubItem ( $hListView, $iIndex, Ceiling ( FileGetSize ( $sPath & '\' & $sName )/1024 ), 3 ) ; kb EndIf _GUICtrlListView_AddSubItem ( $hListView, $iIndex, $sPath, 4 ) For $i = 0 To 2 _GUICtrlListView_AddSubItem ( $hListView, $iIndex, _StringInsert ( FileGetTime ( $sPath & '\' & $sName, $i, 1 ), '-', 8 ), 5+$i ) Next ; Show Items count to the first column header _GUICtrlListView_SetColumn ( $hListView, 0, 'File Name [' & $iItemCount +1 & ']' ) EndFunc ;==> _GuiListView_AddItems() Func _GuiNoEvents() ; EndFunc ;==> _GuiNoEvents() Func _GuiShow() TrayItemSetState ( $idTrayShow, 4 ) ; $TRAY_UNCHECKED GUISetState ( @SW_SHOWNOACTIVATE ) WinActivate ( $hGui ) _WinSetOnTopOnce() EndFunc ;==> _GuiShow() Func _GuIsMinimized ( $hWnd ) If BitAnd ( WinGetState ( $hWnd ), 16 ) Then Return 1 EndFunc ;==> _GuIsMinimized() Func _IsPressedEx ( $HexKey ) Local $aRet = DllCall ( 'user32.dll', 'int', 'GetAsyncKeyState', 'int', '0x' & $HexKey ) If Not @error Then Return Int ( $aRet[0] <> 0 ) EndFunc ;==> _IsPressedEx() Func _LzntDecompress ( $bBinary ); by trancexx $bBinary = Binary ( $bBinary ) Local $tInput = DllStructCreate ( 'byte[' & BinaryLen ( $bBinary ) & ']' ) DllStructSetData ( $tInput, 1, $bBinary ) Local $tBuffer = DllStructCreate ( 'byte[' & 16*DllStructGetSize ( $tInput ) & ']' ) Local $a_Call = DllCall ( 'ntdll.dll', 'int', 'RtlDecompressBuffer', 'ushort', 2, 'ptr', DllStructGetPtr ( $tBuffer ), 'dword', DllStructGetSize ( $tBuffer ), 'ptr', DllStructGetPtr ( $tInput ), 'dword', DllStructGetSize ( $tInput ), 'dword*', 0 ) If @error Or $a_Call[0] Then Return SetError ( 1, 0, '' ) Local $tOutput = DllStructCreate ( 'byte[' & $a_Call[6] & ']', DllStructGetPtr ( $tBuffer ) ) Return SetError ( 0, 0, DllStructGetData ( $tOutput, 1 ) ) EndFunc ;==> _LzntDecompress() Func _MemoryClean() DllCall ( 'psapi.dll', 'int', 'EmptyWorkingSet', 'long', -1 ) EndFunc ;==> _MemoryClean() Func _MouseIsOverTab() Local $aInfos = GUIGetCursorInfo ( $hGui ) Local $aPos = ControlGetPos ( $hGui, '', $idTab ) If _PtInRect ( $aInfos[0], $aInfos[1], $aPos[0], $aPos[1], $aPos[2], $aPos[3] ) Then $aInfos = 0 $aPos = 0 Return 1 EndIf EndFunc ;==> _MouseIsOverTab() Func _PathCompactPathEx ( $sFilePath, $iMax ) Local $aRet = DllCall ( 'shlwapi.dll', 'bool', 'PathCompactPathExW', 'wstr', '', 'wstr', $sFilePath, 'uint', $iMax +1, 'dword', 0 ) If @error Or Not $aRet[0] Then Return SetError ( @error, @extended, $sFilePath ) Return $aRet[1] EndFunc ;==> _PathCompactPathEx() Func _PtInRect ( $xPoint, $yPoint, $xRect, $yRect, $wRect, $hRect ) Local $tRECT = DllStructCreate ( $tagRECT ) DllStructSetData ( $tRECT, 1, $xRect ) DllStructSetData ( $tRECT, 2, $yRect ) DllStructSetData ( $tRECT, 3, $xRect + $wRect ) DllStructSetData ( $tRECT, 4, $yRect + $hRect ) Local $tPOINT = DllStructCreate ( $tagPOINT ) DllStructSetData ( $tPOINT, 1, $xPoint ) DllStructSetData ( $tPOINT, 2, $yPoint ) Local $aRet = DllCall ( 'user32.dll', 'bool', 'PtInRect', 'struct*', $tRECT, 'struct', $tPOINT ) If @error Then Return SetError ( @error, @extended, False ) $tRECT = 0 $tPOINT = 0 Return $aRet[0] EndFunc ;==> _PtInRect() Func _SciTEGetPath() Local $sScitePath = @ProgramFilesDir & '\AutoIt3\SciTE\SciTE.exe' If Not FileExists ( $sScitePath ) Then $sScitePath = RegRead ( 'HKLM\SOFTWARE\AutoIt v3\AutoIt', 'InstallDir' ) & '\SciTE\SciTE.exe' Return SetError ( Not FileExists ( $sScitePath ), 0, $sScitePath ) EndFunc ;==> _SciTEGetPath() Func _ScriptIsAlreadyRunning() Local $aWinList = WinList ( AutoItWinGetTitle() ) If Not @error Then Return UBound ( $aWinList ) -1 > 1 EndFunc ;==> _ScriptIsAlreadyRunning() Func _SettingsLoad ( $sSettingsFile ) Local $hFileOpen = FileOpen ( $sSettingsFile, 0 ) Local $sString = FileRead ( $hFileOpen ) FileClose ( $hFileOpen ) Local $aRet = StringRegExp ( $sString, '(?s)(?i)(\n|)(.*?)(\r)', 3 ) Local $aTemp[1], $aSettings[1] For $i = 1 To UBound ( $aRet ) -1 Step 3 Select Case $aRet[$i] = '**Combo*String**' _ArrayDelete ( $aTemp, 1 ) $aComboName = $aTemp ReDim $aTemp[1] Case $aRet[$i] = '****Combo*Dir**' _ArrayDelete ( $aTemp, 1 ) $aComboString = $aTemp ReDim $aTemp[1] Case $aRet[$i] = '**Settings**' _ArrayDelete ( $aTemp, 1 ) $aComboDir = $aTemp ReDim $aTemp[1] Case $aRet[$i] = '**End*of*File**' _ArrayDelete ( $aTemp, 1 ) $aSettings = $aTemp ReDim $aTemp[1] EndSelect _ArrayAdd ( $aTemp, $aRet[$i], 0, $sDelimiterItems, $sDelimiterRows ) Next For $i = 1 To UBound ( $aComboName ) -1 _SendMessage ( GUICtrlGetHandle ( $idComboName ), 0x143, 0, $aComboName[$i], 0, 'wparam', 'wstr' ) ; $CB_ADDSTRING Next _SendMessage ( GUICtrlGetHandle ( $idComboName ), 0x14E, UBound ( $aComboName ) -2 ) ; $CB_SETCURSEL For $i = 1 To UBound ( $aComboString ) -1 _SendMessage ( GUICtrlGetHandle ( $idComboString ), 0x143, 0, $aComboString[$i], 0, 'wparam', 'wstr' ) ; $CB_ADDSTRING Next _SendMessage ( GUICtrlGetHandle ( $idComboString ), 0x14E, UBound ( $aComboString ) -2 ) ; $CB_SETCURSEL For $i = UBound ( $aComboDir ) -1 To 1 Step -1 ; remove no existing dir. If Not FileExists ( $aComboDir[$i] ) Then _ArrayDelete ( $aComboDir, $i ) Next For $i = 1 To UBound ( $aComboDir ) -1 _SendMessage ( GUICtrlGetHandle ( $idComboDir ), 0x143, 0, $aComboDir[$i], 0, 'wparam', 'wstr' ) ; $CB_ADDSTRING Next _SendMessage ( GUICtrlGetHandle ( $idComboDir ), 0x14E, UBound ( $aComboDir ) -2 ) ; $CB_SETCURSEL ; Read settings. If UBound ( $aSettings ) -1 = 12 Then If $aSettings[1] = 'Sounds=1' Then GUICtrlSetState ( $idCheckboxSound, $GUI_CHECKED ) If $aSettings[2] = 'CaseSense=1' Then GUICtrlSetState ( $idCheckboxCaseSense, $GUI_CHECKED ) If $aSettings[3] = 'Subfolders=1' Then GUICtrlSetState ( $idCheckboxSubFolders, $GUI_CHECKED ) If $aSettings[4] = 'Size=1' Then GUICtrlSetState ( $idCheckboxSize, $GUI_CHECKED ) If $aSettings[5] Then GUICtrlSetData ( $idInputSizeMin, StringReplace ( $aSettings[5], 'SizeMin=', '' ) ) If $aSettings[6] Then GUICtrlSetData ( $idInputSizeMax, StringReplace ( $aSettings[6], 'SizeMax=', '' ) ) If $aSettings[7] = 'StartWithWindows=1' Then TrayItemSetState ( $idTrayStart, 1 ) ; $TRAY_CHECKED _StartWithWindows() If $aSettings[8] = 'AutoFocusCombo=1' Then TrayItemSetState ( $idTrayAutoFocusCombo, 1 ) ; $TRAY_CHECKED $iAutoFocusCombo = 1 EndIf If $aSettings[9] = 'AutoFocusList=1' Then TrayItemSetState ( $idTrayAutoFocusList, 1 ) ; $TRAY_CHECKED $iAutoFocusList = 1 EndIf If $aSettings[10] = 'TabItemToolTip=1' Then TrayItemSetState ( $idTrayTabItemToolTip, 1 ) ; $TRAY_CHECKED $iTabItemToolTip = 1 EndIf If $aSettings[11] = 'OnTop=1' Then TrayItemSetState ( $idTrayOnTop, 1 ) ; $TRAY_CHECKED _WinSetOnTop() EndIf If $aSettings[12] = 'CpuSlowDown=1' Then TrayItemSetState ( $idTrayCpu, 1 ) ; $TRAY_CHECKED _CpuSetFlag() EndIf If _GuiCtrlIsChecked ( $idCheckboxSize ) Then GUICtrlSetState ( $idInputSizeMax, $GUI_ENABLE ) GUICtrlSetState ( $idInputSizeMin, $GUI_ENABLE ) GUICtrlSetState ( $idButtonSizeMax, $GUI_ENABLE ) GUICtrlSetState ( $idButtonSizeMin, $GUI_ENABLE ) EndIf EndIf ; Only for the First use. If Not FileExists ( $sSettingsFile ) Then $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.*' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.ahk' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.bat;*.cmd' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.css' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.dll' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.h;*.c;*.cc;*.cpp;*.asm;*.bas;*.pas;*.py;*.pb;*.pbi;*.bi;*.frm;*.dsp' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.html;*.htm' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.ini' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.js' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.lua' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.properties' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.txt;*.nfo;*.diz' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.vbs' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.xml' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, 'constants' ) $aComboName = _GUICtrlCombo_AddItem ( $idComboName, $aComboName, '*.au3' ) $aComboString = _GUICtrlCombo_AddItem ( $idComboString, $aComboString, '' ) Local $aDrive = DriveGetDrive ( 'FIXED' ) If Not @error Then For $i = 1 To UBound ( $aDrive ) -1 $aComboDir = _GUICtrlCombo_AddItem ( $idComboDir, $aComboDir, StringUpper ( $aDrive[$i] ) & '\' ) Next EndIf If FileExists ( @ProgramFilesDir & '\AutoIt3' ) Then $aComboDir = _GUICtrlCombo_AddItem ( $idComboDir, $aComboDir, @ProgramFilesDir & '\AutoIt3' ) GUICtrlSetState ( $idCheckboxSubFolders, $GUI_CHECKED ) GUICtrlSetState ( $idCheckboxSound, $GUI_CHECKED ) TrayItemSetState ( $idTrayTabItemToolTip, 1 ) ; $TRAY_CHECKED $iTabItemToolTip = 1 TrayItemSetState ( $idTrayAutoFocusCombo, 1 ) ; $TRAY_CHECKED $iAutoFocusCombo = 1 TrayItemSetState ( $idTrayAutoFocusList, 1 ) ; $TRAY_CHECKED $iAutoFocusList = 1 TrayItemSetState ( $idTrayAutoFocusCombo, 1 ) ; $TRAY_CHECKED $iAutoFocusCombo = 1 EndIf EndFunc ;==> _SettingsLoad() Func _SettingsSave ( $sSettingsFile ) Local $hFileOpen = FileOpen ( $sSettingsFile, 2 ) Local $sString, $iIndex If Not IsArray ( $aComboName ) Then Dim $aComboName[1] Else Local $sName = GUICtrlRead ( $idComboName ) $iIndex = _ArraySearch ( $aComboName, $sName, 1, 0, 0, 0 ) If $iIndex <> -1 Then _ArrayDelete ( $aComboName, $iIndex ) _ArrayAdd ( $aComboName, $sName ) EndIf EndIf If Not IsArray ( $aComboString ) Then Dim $aComboString[1] Else Local $sString2 = GUICtrlRead ( $idComboString ) $iIndex = _ArraySearch ( $aComboString, $sString2, 1, 0, 0, 0 ) If $iIndex <> -1 Then _ArrayDelete ( $aComboString, $iIndex ) _ArrayAdd ( $aComboString, $sString2 ) EndIf EndIf If Not IsArray ( $aComboDir ) Then Dim $aComboDir[1] Else Local $sDir = GUICtrlRead ( $idComboDir ) $iIndex = _ArraySearch ( $aComboDir, $sDir, 1, 0, 0, 0 ) If $iIndex <> -1 Then _ArrayDelete ( $aComboDir, $iIndex ) _ArrayAdd ( $aComboDir, $sDir ) EndIf EndIf $sString &= '**Combo*Name**' & @CRLF For $i = 1 To UBound ( $aComboName ) -1 $sString &= $aComboName[$i] & @CRLF Next $sString &= '**Combo*String**' & @CRLF For $i = 1 To UBound ( $aComboString ) -1 $sString &= $aComboString[$i] & @CRLF Next $sString &= '****Combo*Dir**' & @CRLF For $i = 1 To UBound ( $aComboDir ) -1 $sString &= $aComboDir[$i] & @CRLF Next ; Save settings. $sString &= '**Settings**' & @CRLF $sString &= 'Sounds=' & Int ( _GuiCtrlIsChecked ( $idCheckboxSound ) ) & @CRLF $sString &= 'CaseSense=' & Int ( _GuiCtrlIsChecked ( $idCheckboxCaseSense ) ) & @CRLF $sString &= 'Subfolders=' & Int ( _GuiCtrlIsChecked ( $idCheckboxSubFolders ) ) & @CRLF $sString &= 'Size=' & Int ( _GuiCtrlIsChecked ( $idCheckboxSize ) ) & @CRLF $sString &= 'SizeMin=' & GUICtrlRead ( $idInputSizeMin ) & @CRLF $sString &= 'SizeMax=' & GUICtrlRead ( $idInputSizeMax ) & @CRLF $sString &= 'StartWithWindows=' & Int ( _TrayItemIsChecked ( $idTrayStart ) ) & @CRLF $sString &= 'AutoFocusCombo=' & Int ( _TrayItemIsChecked ( $idTrayAutoFocusCombo ) ) & @CRLF $sString &= 'AutoFocusList=' & Int ( _TrayItemIsChecked ( $idTrayAutoFocusList ) ) & @CRLF $sString &= 'TabItemToolTip=' & Int ( _TrayItemIsChecked ( $idTrayTabItemToolTip ) ) & @CRLF $sString &= 'OnTop=' & Int ( _TrayItemIsChecked ( $idTrayOnTop ) ) & @CRLF $sString &= 'CpuSlowDown=' & Int ( _TrayItemIsChecked ( $idTrayCpu ) ) & @CRLF $sString &= '**End*of*File**' & @CRLF FileWrite ( $hFileOpen, $sString ) FileClose ( $hFileOpen ) EndFunc ;==> _SettingsSave() Func _StartWithWindows() If _TrayItemIsChecked ( $idTrayStart ) Then If @Compiled Then RegWrite ( 'HKCU\Software\Microsoft\Windows\CurrentVersion\Run', 'StringFinder', 'REG_SZ', @ScriptFullPath & ' /Min' ) Else If @Compiled Then RegDelete ( 'HKCU\Software\Microsoft\Windows\CurrentVersion\Run', 'StringFinder' ) EndIf EndFunc ;==> _StartWithWindows() Func _StringInsert ( $sString, $sInsertString, $iPosition ) Local $iLength = StringLen ( $sString ) $iPosition = Int ( $iPosition ) If $iPosition < 0 Then $iPosition = $iLength + $iPosition If $iLength < $iPosition Or $iPosition < 0 Then Return SetError ( 1, 0, $sString ) Return StringLeft ( $sString, $iPosition ) & $sInsertString & StringRight ( $sString, $iLength - $iPosition ) EndFunc ;==> _StringInsert() Func _TabItemToolTip() $iTabItemToolTip = Int ( _TrayItemIsChecked ( $idTrayTabItemToolTip ) ) ;~ _GuiShow() EndFunc ;==> _TabItemToolTip() Func _TimeToString ( $iTimeMs ) Local $sRet, $iHours, $iMins, $iSecs If $iTimeMs < 1000 Then Return SetError ( 0, 0, Int ( $iTimeMs ) & ' Msec' ) If Number ( $iTimeMs ) > 0 Then $iTimeMs = Int ( $iTimeMs / 1000 ) $iHours = Int ( $iTimeMs / 3600 ) If $iHours Then $sRet = $iHours & ' hour ' $iTimeMs = Mod ( $iTimeMs, 3600 ) $iMins = Int ( $iTimeMs / 60 ) If $iMins Then $sRet &= $iMins & ' min ' $iSecs = Mod ( $iTimeMs, 60 ) If $iSecs Then $sRet &= $iSecs & ' sec' Return StringStripWS ( $sRet, 1+2+4 ) Else Return SetError ( 1, 0, '' ) EndIf EndFunc ;==> _TimeToString() Func _ToolTipClose() ToolTip ( '' ) $iTooltip = -1 AdlibUnRegister ( '_ToolTipClose' ) EndFunc ;==> _ToolTipClose() Func _TrayIconRighClicked() _TrayMenuTimerSet() EndFunc ;==> _TrayIconRighClicked() Func _TrayItemIsChecked ( $idTrayItem ) Return BitAND ( TrayItemGetState ( $idTrayItem ), 1 ) ; $TRAY_CHECKED EndFunc ;==> _TrayItemIsChecked() Func _TrayMenu() $idTrayOnTop = TrayCreateItem ( 'Always On Top' ) TrayItemSetOnEvent ( -1, '_WinSetOnTop' ) TrayCreateItem ( '' ) $idTrayCpu = TrayCreateItem ( 'CPU Slow Down' ) TrayItemSetOnEvent ( -1, '_CpuSetFlag' ) TrayCreateItem ( '' ) $idTrayShow = TrayCreateItem ( 'Show' ) TrayItemSetOnEvent ( -1, '_GuiShow' ) TrayCreateItem ( '' ) $idTrayTabItemToolTip = TrayCreateItem ( 'TabItem ToolTip' ) TrayItemSetOnEvent ( -1, '_TabItemToolTip' ) TrayCreateItem ( '' ) $idTrayAutoFocusCombo = TrayCreateItem ( 'AutoFocus Combo' ) TrayItemSetOnEvent ( -1, '_AutoFocusCombo' ) TrayCreateItem ( '' ) $idTrayAutoFocusList = TrayCreateItem ( 'AutoFocus Listview && Lines' ) TrayItemSetOnEvent ( -1, '_AutoFocusList' ) TrayCreateItem ( '' ) $idTrayStart = TrayCreateItem ( 'Start With Windows' ) TrayItemSetOnEvent ( -1, '_StartWithWindows' ) TrayCreateItem ( '' ) TrayCreateItem ( 'Exit' ) TrayItemSetOnEvent ( -1, '_Exit' ) TraySetOnEvent ( -13, '_GuiShow' ) ; $TRAY_EVENT_PRIMARYDOUBLE TraySetOnEvent ( -9, '_TrayIconRighClicked' ) ; $TRAY_EVENT_SECONDARYDOWN TraySetIcon ( $sInstallDir & '\TheRollingStones.ico' ) TraySetClick ( 16 ) TraySetState ( 1+4 ) ; $TRAY_ICONSTATE_SHOW + $TRAY_ICONSTATE_FLASH TraySetToolTip ( $sSoftTitle ) EndFunc ;==> _TrayMenu() Func _TrayMenuClose() _TrayMenuTimerKill() If Not _WindowIsActived ( $hGui ) Then WinActivate ( $hGui ) EndFunc ;==> _TrayMenuClose() Func _TrayMenuTimerKill() If UBound ( $aTimer ) = 5 Then DllCallbackFree ( $hTimerProc ) DllCall ( 'user32.dll', 'int', 'KillTimer', 'hwnd', 0, 'uint_ptr', $aTimer[0] ) $hTimerProc = 0 $aTimer = 0 EndIf EndFunc ;==> _TrayMenuTimerKill() Func _TrayMenuTimerSet() $iTrayMenuClose = 1 _TrayMenuTimerKill() $hTimerProc = DllCallbackRegister ( '_TrayMenuClose', 'int', '' ) $aTimer = DllCall ( 'user32.dll', 'uint_ptr', 'SetTimer', 'hwnd', 0, 'uint_ptr', 0, 'uint', 5000, 'ptr', DllCallbackGetPtr ( $hTimerProc ) ) EndFunc ;==> _TrayMenuTimerSet() Func _TrayTipClose() TrayTip ( '', '', 1 ) AdlibUnRegister ( '_TrayTipClose' ) EndFunc ;==> _TrayTipClose() Func _WindowIsActived ( $hWnd ) If BitAnd ( WinGetState ( $hWnd ), 8 ) Then Return 1 EndFunc ;==> _WindowIsActived() Func _WinSetOnTop() If _TrayItemIsChecked ( $idTrayOnTop ) Then WinSetOnTop ( $hGui, '', 1 ) Else WinSetOnTop ( $hGui, '', 0 ) EndIf EndFunc ;==> _WinSetOnTop() Func _WinSetOnTopOnce() WinSetOnTop ( $hGui, '', 1 ) WinActivate ( $hGui, '' ) _WinSetOnTop() EndFunc ;==> _WinSetOnTopOnce() Func _WM_COMMAND ( $hWnd, $iMsg, $wParam, $lParam ) #forceref $hWnd, $iMsg, $wParam, $lParam Local $iIDFrom, $iCode $iIDFrom = BitAND ( $wParam, 0xFFFF ) ; Low Word $iCode = BitShift ( $wParam, 16 ) ; Hi Word Switch $hWnd Case $hGui Switch $iIDFrom Case 1 ; "Enter" key. If Not $iSearch Then ControlSetText ( $hGui, '', $idButtonSearch, 'Stop' ) $iSearch = 1 EndIf Case $idComboName, $idComboString, $idComboDir Switch $iCode Case 7 ; $CBN_DROPDOWN ; Sent when the list box of a combo is about to be visible. $iDropDown = 1 Case Else $iDropDown = 0 EndSwitch EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==> _WM_COMMAND() Func _WM_GETMINMAXINFO ( $hWnd, $iMsg, $wParam, $lParam ) #forceref $hWnd, $iMsg, $wParam, $lParam Switch $hWnd Case $hGui Local $tMinMaxInfo = DllStructCreate ( 'int;int;int;int;int;int;int;int', $lParam ) DllStructSetData ( $tMinMaxInfo, 7, $iGuiWidth ) ; min width DllStructSetData ( $tMinMaxInfo, 8, $iGuiHeight ) ; min height $tMinMaxInfo = 0 ; Release resources. EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==> _WM_GETMINMAXINFO() Func _WM_MOUSEOVER ( $hWnd, $iMsg, $wParam, $lParam ) #forceref $hWnd, $iMsg, $wParam, $lParam Switch $hWnd Case $hGui If _WindowIsActived ( $hGui ) Then Local $aInfos = GUIGetCursorInfo ( $hGui ), $aPos, $idCtrlFocus If UBound ( $aInfos ) = 5 Then Switch $aInfos[4] Case 0 If $iAutoFocusCombo Then $aPos = ControlGetPos ( $hGui, '', $idComboName ) If Not @error And _PtInRect ( $aInfos[0], $aInfos[1], $aPos[0], $aPos[1], $aPos[2], $aPos[3] ) Then $idCtrlFocus = $idComboName Else $aPos = ControlGetPos ( $hGui, '', $idComboString ) If Not @error And _PtInRect ( $aInfos[0], $aInfos[1], $aPos[0], $aPos[1], $aPos[2], $aPos[3] ) Then $idCtrlFocus = $idComboString Else $aPos = ControlGetPos ( $hGui, '', $idComboDir ) If Not @error And _PtInRect ( $aInfos[0], $aInfos[1], $aPos[0], $aPos[1], $aPos[2], $aPos[3] ) Then $idCtrlFocus = $idComboDir EndIf EndIf EndIf _ToolTipClose() Case $idTab If $iTabItemToolTip Then Local $aRect[4], $tRECT $aPos = ControlGetPos ( $hGui, '', $idTab ) For $i = 1 To UBound ( $aIdTabItem ) -1 $tRECT = DllStructCreate ( $tagRECT ) _SendMessage ( $hTab, 4874, $i -1, $tRECT, 0, 'wparam', 'struct*' ) ; $TCM_GETITEMRECT $aRect[0] = DllStructGetData ( $tRECT, 'Left' ) $aRect[1] = DllStructGetData ( $tRECT, 'Top' ) $aRect[2] = DllStructGetData ( $tRECT, 'Right' ) - $aRect[0] $aRect[3] = DllStructGetData ( $tRECT, 'Bottom' ) If _PtInRect ( $aInfos[0], $aInfos[1], $aRect[0]+$aPos[0], $aRect[1]+$aPos[1], $aRect[2], $aRect[3] ) Then If $iTooltip <> $i Then If Not StringInStr ( $aTipText[$i], 'dir : ' & @CRLF ) Then ToolTip ( $aTipText[$i], MouseGetPos(0) -20, MouseGetPos(1) -155, 'Tab Item ' & $i & ' Infos ', 1, Default ) AdlibRegister ( '_ToolTipClose', 3000 ) $iTooltip = $i ExitLoop EndIf EndIf EndIf Next $aRect = 0 $tRECT = 0 EndIf Case Else If $aInfos[4] > $idTab Then If $iAutoFocusList Then $idCtrlFocus = $aIdTabListView[GUICtrlRead ( $idTab ) +1] Else If $aInfos[4] = $idEditOutput Then If $iAutoFocusList Then $idCtrlFocus = $idEditOutput Else $idCtrlFocus = $idButtonSearch EndIf EndIf _ToolTipClose() EndSwitch If $iAutoFocusList Then $aPos = ControlGetPos ( $hGui, '', $aIdTabListView[GUICtrlRead ( $idTab ) +1] ) If Not @error And _PtInRect ( $aInfos[0], $aInfos[1], $aPos[0], $aPos[1], $aPos[2], $aPos[3] ) Then $idCtrlFocus = $aIdTabListView[GUICtrlRead ( $idTab ) +1] EndIf EndIf $aPos = 0 $aInfos = 0 If ( $iAutoFocusCombo Or $iAutoFocusList ) And $idCtrlFocus And $iDropDown = 0 And $idCtrlFocus <> $idCtrlFocusOld Then $idCtrlFocusOld = $idCtrlFocus ControlFocus ( $hGui, '', $idCtrlFocus ) EndIf Else _ToolTipClose() EndIf EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==> _WM_MOUSEOVER() Func _WM_NOTIFY ( $hWnd, $iMsg, $wParam, $lParam ) #forceref $hWnd, $iMsg, $wParam, $lParam Local $hWndFrom, $iCode, $tNMHDR, $tInfo $tNMHDR = DllStructCreate ( $tagNMHDR, $lParam ) $hWndFrom = HWnd ( DllStructGetData ( $tNMHDR, 'hWndFrom' ) ) Switch $hWndFrom Case $hTab If _IsPressedEx ( '10' ) Then ; hold Left SHIFT key and click a Tab Item for restore previous Settings for a new Search. $iCurrentTabItem = GUICtrlRead ( $IdTab ) If $iCurrentTabItem <> $iCurrentTabItemOld Then Local $aSplit = StringSplit ( $aTipText[GUICtrlRead ( $IdTab )+1], @CRLF, 1+2 ) If Not @error And UBound ( $aSplit ) -1 = 7 Then $aSplit[2] = StringTrimLeft ( $aSplit[2], 6 ) If FileExists ( $aSplit[2] ) Then ; Restore Search Settings. _GUICtrlCombo_AddItem ( $idComboDir, $aComboDir, $aSplit[2] ) _GUICtrlCombo_AddItem ( $idComboName, $aComboName, StringTrimLeft ( $aSplit[0], 11 ) ) _GUICtrlCombo_AddItem ( $idComboString, $aComboString, StringTrimLeft ( $aSplit[1], 9 ) ) If StringTrimLeft ( $aSplit[3], 12 ) = 1 Then GUICtrlSetState ( $idCheckboxCaseSense, $GUI_CHECKED ) Else GUICtrlSetState ( $idCheckboxCaseSense, $GUI_UNCHECKED ) EndIf If StringTrimLeft ( $aSplit[4], 13 ) = 1 Then GUICtrlSetState ( $idCheckboxSubFolders, $GUI_CHECKED ) Else GUICtrlSetState ( $idCheckboxSubFolders, $GUI_UNCHECKED ) EndIf If StringTrimLeft ( $aSplit[5], 12 ) = 1 Then GUICtrlSetState ( $idCheckboxSize, $GUI_CHECKED ) GUICtrlSetState ( $idInputSizeMin, $GUI_ENABLE ) GUICtrlSetState ( $idInputSizeMax, $GUI_ENABLE ) Else GUICtrlSetState ( $idCheckboxSize, $GUI_UNCHECKED ) GUICtrlSetState ( $idInputSizeMin, $GUI_DISABLE ) GUICtrlSetState ( $idInputSizeMax, $GUI_DISABLE ) EndIf ControlSetText ( $hGui, '', $idInputSizeMin, StringTrimLeft ( $aSplit[6], 10 ) ) ControlSetText ( $hGui, '', $idInputSizeMax, StringTrimLeft ( $aSplit[7], 10 ) ) EndIf EndIf $iCurrentTabItemOld = $iCurrentTabItem EndIf EndIf Case GUICtrlGetHandle ( $aIdTabListView[GUICtrlRead ( $IdTab )+1] ) $iCode = DllStructGetData ( $tNMHDR, 'Code' ) $tInfo = DllStructCreate ( $tagNMLISTVIEW, $lParam ) Local $iItem, $sSelectedFilesPath $iItem = DllStructGetData ( $tInfo, 'Item' ) Switch $iCode Case $NM_DBLCLK If $iItem >= 0 And $iItem < 65537 Then If $iTrayMenuClose <> 1 Then $sSelectedFilesPath = _GUICtrlListView_GetItemText ( $hWndFrom, $iItem, 4 ) & _GUICtrlListView_GetItemText ( $hWndFrom, $iItem, 0 ) If FileExists ( $sSelectedFilesPath ) Then Local $iSize = Ceiling ( FileGetSize ( $sSelectedFilesPath )/1024 ) If $iSize > $iMaxReadableSize Then Run ( 'explorer /select,"' & $sSelectedFilesPath & '"' ) Else Local $iEncoding = FileGetEncoding ( $sSelectedFilesPath ) If $iEncoding > 512 Or $iEncoding = 16 Then ShellExecute ( '"' & $sSelectedFilesPath & '"' ) Else If FileExists ( $sSciTEPath ) Then Run ( $sSciTEPath & ' "' & $sSelectedFilesPath & '"' ) Else ShellExecute ( '"' & $sSelectedFilesPath & '"' ) EndIf EndIf EndIf EndIf EndIf EndIf Case $LVN_COLUMNCLICK If Not $iSearch Then $iColumn = DllStructGetData ( $tInfo, 'SubItem' ) $hLVToSort = $hWndFrom EndIf Case $LVN_ITEMCHANGED, $NM_CLICK ; $LVN_ITEMCHANGED in case where up or down arrow are pressed. $NM_CLICK If $iItem >= 0 And $iItem < 65537 Then $iTrayMenuClose = 0 $sSelectedFilesPath = _GUICtrlListView_GetItemText ( $hWndFrom, $iItem, 4 ) & _GUICtrlListView_GetItemText ( $hWndFrom, $iItem, 0 ) If $sSelectedFilesPath <> $sSelectedFilesPathOld Then _GUICtrlStatusBar_SetText ( $hStatusBar, ' Selection : ' & _PathCompactPathEx ( $sSelectedFilesPath, 70 ), 0 ) If Ceiling ( FileGetSize ( $sSelectedFilesPath )/1024 ) <= $iMaxReadableSize Then Local $sSearchString = _GUICtrlTab_GetText ( $idTab, GUICtrlRead ( $idTab ) ) If $sSearchString <> '' And StringLeft ( $sSearchString, 2 ) <> '# ' Then ControlSetText ( $hGui, '', $idLabelOutput, 'Lines' ) GUICtrlSetFont ( $idEditOutput, 9, 550 ) GUICtrlSetColor ( $idEditOutput, 0x000000 ) ControlSetText ( $hGui, '', $idEditOutput, '' ) _GetLines ( $sSelectedFilesPath ) EndIf EndIf $sSelectedFilesPathOld = $sSelectedFilesPath EndIf ; hold Left SHIFT key and click for open parent directory. If $iCode = $NM_CLICK And FileExists ( $sSelectedFilesPath ) And _IsPressedEx ( '10' ) Then _ToolTipClose() Run ( 'explorer /select,"' & $sSelectedFilesPath & '"' ) EndIf EndIf Case $NM_RCLICK ; may be in next version... ;~ If $iItem >= 0 And $iItem < 65537 Then $hLVRightClick = $hWndFrom EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==> _WM_NOTIFY() Func _WM_PAINT ( $hWnd, $iMsg, $wParam, $lParam ) #forceref $hWnd, $iMsg, $wParam, $lParam _GUICtrlStatusBar_Resize ( $hStatusBar ) If Not _GuIsMinimized ( $hGui ) Then Local $aPos = ControlGetPos ( $hGui, '', $idTab ) If IsArray ( $aPos ) Then For $i = 0 To UBound ( $aIdTabListView ) -1 GUICtrlSetPos ( $aIdTabListView[$i], $aPos[0], $aPos[1]+20, $aPos[2], $aPos[3]-20 ) Next EndIf EndIf Return $GUI_RUNDEFMSG EndFunc ;==> _WM_PAINT() Func SearchFile_48X45Avi ( $sFileName, $sOutputDirPath, $iOverWrite=0 ) ; Code Generated by BinaryToAu3Kompressor. Local $sFileBin = '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' $sFileBin &= '0ijMeiJ10Cggcg4JZQGhfbJNEfInciMNBHQjID+RAWB7MBSPk5OMI8IBAhb9UAMueyNUAzB8/EUTA9AEqhFrIwQUAxOQAYNrI8eXAT9GMy0SiYo/RpIBmAaOjz9GMwOQlT9GGZMBlpc/RpMBl5icw09GkQERmJye3yKSATCcnp+lP22QARCd0J+lqavcIhJwSUGgtq7pIlEBBJGdsJ8Gs5/tFBENOp+VGgvonnQYsCbWBtOesyZssiYmtEvgBN+2JtAluCawJbomGxWYGidyHgCuFAg2SzIeMAEN9ipmJ/UdGJJ2+AM0JJBy5A9GkicrKxVLcJEzJJwQTHwnkwGQDhDJDEtzkwGQEQ4giidQmXMUD/4n/EpwmfIYQBC8bbMEMAOOE30n1QyQURIqZb8nHxMbnydyAb9tkwQTMoXvfSeXL2wnVQ4QSyezFHEBppYqJ3cBmJsIJxvWOGgPnZ4GJ2VjAXIBDpifpKWXzvQYAafQzTYI1M0VQAs5zRMdA64sAAZzzDMnVDInIgMNMych+3LwIALFKLMACcwEBAAAAAIAHwAACs4RA8YQw78CBAOIHgAAQggBiMS9vMIDRBwQAAAJDARIwAAFFQJMGwAmzAQmvgAGCwUmBXK+AyIUAAAOAMzNCQkSRwpAAgIILhIAAA/OLwBPVllSKQ7NcgLHCEMQAAARTDMAVXCor7ChdWGAEnNzwby+DQRzAA8AABJJEFimALOyt7a1tKBoQE1zKysnTwOjDgAAABYyO1t+uwC5uLO3tKysoGBnMTArEwAcBjlOCKK7uwAdsraumUCskV8rKAeFGxMAPmO3s7m6urjCswANkbBxXQMpgw1ALniys7i5Axt/GKySVwMogg0EEI0At7cEswAIt7RAqox6oKxQhkQUQBB2tbW3t4BSrmSgkYAMVxuEQ4ENNABqsbGxtbSxrgCgjICar6BRIQMADoRRE1mRsKCqAKqgoIB9gZSyYHddeWwbgzaBDQsAaaysjICAkYAAlLu7o12JiIYDhA2AmBIVbqyskQB/gJqzu7pkXQiKiYUCDQIRAAAAEE1okbCwsbYAsoJeXZCPinkDANGDvk1aa3d1dgBmU12XlpWQbAGBBQACFQACnAIAnQKcAAWbmJcElWzCBBYABJ8AAAWenZyYlwAAgAEwMGRjRALBBUgiAwLCGCEARY0CCsxDcB1ARs4PcswBw2wTAAINAAIFQUEBBs4RAsXFnRoQAAALFAqeAAIZRcAEP4qeAAIYwAREh8WexARBlUpGRkbFmgIIxJQCTAANykpJhgUoDcVOEUoCocryRgShKyfFcE6hwQXADWoQjKAgwQUMQBKKnyBsHh5Ay0AGC8BnC58cMBwbGzXGBsueGhpoGRxPwgYKwINNnxwcGB3CM8EGTZ9tJB8WI8QGRZ8MRZ+GhHyGXMUNzZ+JiIiGxAaiE82fioqJ5RQS7E8okI+OJAMRq0+WlXaVYgYgIg9qT6FEIygLGyhPpS0Jpk5gSWlkeKwxgAADYEpiYFgAgR5UnAPiAWMBBqhgAY6DYE3lAT4GAABi6AGgqAgAAE7oAf6AG6pk6AFqgBBs6AHeAEH6VOgBOsBgYlkfAB8AHwAfHwAfAB8AHwAEAA==' $sFileBin = Binary ( _Base64Decode ( $sFileBin ) ) $sFileBin = Binary ( _LzntDecompress ( $sFileBin ) ) If Not FileExists ( $sOutputDirPath ) Then DirCreate ( $sOutputDirPath ) If StringRight ( $sOutputDirPath, 1 ) <> '\' Then $sOutputDirPath &= '\' Local $sFilePath = $sOutputDirPath & $sFileName If FileExists ( $sFilePath ) Then If $iOverWrite = 1 Then If Not Filedelete ( $sFilePath ) Then Return SetError ( 2, 0, $sFileBin ) Else Return SetError ( 0, 0, $sFileBin ) EndIf EndIf Local $hFile = FileOpen ( $sFilePath, 16+2 ) If $hFile = -1 Then Return SetError ( 3, 0, $sFileBin ) FileWrite ( $hFile, $sFileBin ) FileClose ( $hFile ) Return SetError ( 0, 0, $sFileBin ) EndFunc ;==> SearchFile_48X45Avi() Func SearchString_48x50Avi ( $sFileName, $sOutputDirPath, $iOverWrite=0 ) ; Code Generated by BinaryToAu3Kompressor. Local $sFileBin = '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' $sFileBin &= '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' $sFileBin &= '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' $sFileBin &= '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' $sFileBin &= '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' $sFileBin &= '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' $sFileBin &= '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' $sFileBin &= 'fCIAEgGAH4GTAQP3/xQC4woQA3QAoISDDHwAMi+REmzr/xxwXBYAYDX8AAPwBcCw0gGRAsEMMQAL0QyRDA9QBh/wACAAH/4AYBf/wEAAMP/5wCAf/8CAIAP/gGAAfzAAog8wAAMA8DAAODAAggx2BhkA6v8ZcgYEAPhgFPwMAAP+AD8AB/5/gAceAP/ADAf/wAgDAMHgGAOA4BADEABgEAIzABwEAIBgH4QAQD/8MAAA/gDAf/+AgMCA//GAgD//gEATXfQOH9QKMQDzBhjQCutk/w4QCAkAgRYgBwA1gRv/wAD/wADRHYP/UOMAAH9QAQ8wAAP90QF8lA4xAOEwDwAPAA8A/w8ADwAPAA8ADwAPAA8ADwD/DwAPAA8ADwAPAA8ADwAPAP8PAA8ADwAPAA8ADwAPAA8A/w8ADwAPAA8ADwAPAA8ADwD/DwAPAA8ADwAPAA8ADwAPAH8PAA8ADwAPAA8ADwAPAFAAUvgCPgD4AgFACCAA30b44j3uJBQwUADeRpBKBDAP0ABfAw8ACQBpZHgxA0GB8X/fsCABAAAABAAw+AdAAAAwMGRjAKAAAhAAGB4CAAByZbRjIAL4CAx8ADzcAGCvBnwAYAo+AB7oCT4YDD61AB7kCT4gDB8AD7gJH9YoDB8AD/oJHzAMHwAP2uIJHzgHHwHbEAAPCt/WQIwfgAf0iR9IjA+AB7ryiQ9QjA+BB4kPWIwPtYAHAIk/YIwPgAfwiR/WaIwPgAcciR9wjG+AB7rUiQ94jB+AB4pfgMwHW8ADym+IzAfAAwjJF5B3zAfAA8pfmMwHwAPKf6A3zAfAA8qXqMw3wAOIAx3IB7DMD8ADgCcA' $sFileBin = Binary ( _Base64Decode ( $sFileBin ) ) $sFileBin = Binary ( _LzntDecompress ( $sFileBin ) ) If Not FileExists ( $sOutputDirPath ) Then DirCreate ( $sOutputDirPath ) If StringRight ( $sOutputDirPath, 1 ) <> '\' Then $sOutputDirPath &= '\' Local $sFilePath = $sOutputDirPath & $sFileName If FileExists ( $sFilePath ) Then If $iOverWrite = 1 Then If Not Filedelete ( $sFilePath ) Then Return SetError ( 2, 0, $sFileBin ) Else Return SetError ( 0, 0, $sFileBin ) EndIf EndIf Local $hFile = FileOpen ( $sFilePath, 16+2 ) If $hFile = -1 Then Return SetError ( 3, 0, $sFileBin ) FileWrite ( $hFile, $sFileBin ) FileClose ( $hFile ) Return SetError ( 0, 0, $sFileBin ) EndFunc ;==> SearchString_48x50Avi() Func TheRollingStonesIcon ( $sFileName, $sOutputDirPath, $iOverWrite=0 ) ; Code Generated by BinaryToAu3Kompressor. Local $sFileBin = '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' $sFileBin &= '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' $sFileBin &= 'fNwA/BYRtP4tLMYA/xsZw/+us/AA/k5N0/4bFY0A+ikizv8tMM9BwJkAAC0mzcogGQAOuW1ZVtD/rQCx8fsYEZ3/LQArwP8ZFsb/awBs2/+Hiez/EgAKnPoqIrT+J4gd2KfBCyggz8YgACMewQEqKMIRAB4Zv+morfL+AFpYuv0VDpz/ACon0v8lIMj/AKaq7/47NtD+ABsTovwpItH7kCgf0yrBDSUdxxABwlYdwV86Os/+AKGm6fwvK5b/AijAcSAb0f9SUgDX/5yg8P8nIQDA+yYgrv8sJUDWyy4p0APBDDgENNPGMSwoznodABir/kE/1fxRAFDW/hoSif8nACO7/xMLw/9EAD7U/jYv3P8XABC2/Cchrf8qACPQoSof2BMpBCLPQqRBNsk/KQAivP8iFB/8FgAHOv4JAKX/PwA6pv4rITP/XgBZfv9XVrr/VgBTz/9dW9H+HAAVnfklIcT/JggizV/CjiLNAyYAI94hMTDSkh4AFXP/Niol/IcAgob+7/78/9OA3d//8v30/wAAAP7g7e3+Uk/UAPwhG87/LyvPIm9hBysnzSpiJiIA1HI9Ocz/wsQA/Puhp+j/PzwC1eAp3f2Skuf+AE5L2voZEsj+EC8szbNhBTIxzkHmJzoyygEvZAkoAB/MuB4Vyf8YAA/J+yAayv8eABfL/xcPyv8uACbP+jUyzf8ayBi+TWINJMhiKAUAACsjzgE3M9QBAB4a0ykyK83hAJ2h6vyxuO79ACIdw71MSdjvAMbH8/5ucN3fGDY2t2JhGQAIA8AASZGU5vmdougA8QcGXwQxLs4AcUJB0ecsKstR4nFXVthmF+EgkMCq3+BYL4ABB2QAC+ABOWAAAAVgAyAFYI4AgGshPWAB4GACkOEC4AT4AWAE' $sFileBin = Binary ( _Base64Decode ( $sFileBin ) ) $sFileBin = Binary ( _LzntDecompress ( $sFileBin ) ) If Not FileExists ( $sOutputDirPath ) Then DirCreate ( $sOutputDirPath ) If StringRight ( $sOutputDirPath, 1 ) <> '\' Then $sOutputDirPath &= '\' Local $sFilePath = $sOutputDirPath & $sFileName If FileExists ( $sFilePath ) Then If $iOverWrite = 1 Then If Not Filedelete ( $sFilePath ) Then Return SetError ( 2, 0, $sFileBin ) Else Return SetError ( 0, 0, $sFileBin ) EndIf EndIf Local $hFile = FileOpen ( $sFilePath, 16+2 ) If $hFile = -1 Then Return SetError ( 3, 0, $sFileBin ) FileWrite ( $hFile, $sFileBin ) FileClose ( $hFile ) Return SetError ( 0, 0, $sFileBin ) EndFunc ;==> TheRollingStonesIcon()