Advertisement
AZJIO

Test

Mar 6th, 2013
372
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 131.93 KB | None | 0 0
  1. #region ;**** Directives created by AutoIt3Wrapper_GUI ****
  2. #AutoIt3Wrapper_Outfile=TextReplace.exe
  3. #AutoIt3Wrapper_Icon=icons\TextReplace.ico
  4. #AutoIt3Wrapper_Compression=n
  5. #AutoIt3Wrapper_UseUpx=n
  6. ; #AutoIt3Wrapper_UseAnsi=y
  7. #AutoIt3Wrapper_Res_Comment=-
  8. #AutoIt3Wrapper_Res_Description=TextReplace.exe
  9. #AutoIt3Wrapper_Res_Fileversion=1.1.0.0
  10. #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n
  11. #AutoIt3Wrapper_Res_LegalCopyright=AZJIO
  12. #AutoIt3Wrapper_Res_Language=1049
  13. #AutoIt3Wrapper_Run_Au3check=n
  14. #AutoIt3Wrapper_Res_Icon_Add=icons\1.ico
  15. #AutoIt3Wrapper_Res_Icon_Add=icons\2.ico
  16. #AutoIt3Wrapper_Res_Icon_Add=icons\3.ico
  17. #AutoIt3Wrapper_Res_Icon_Add=icons\4.ico
  18. #AutoIt3Wrapper_Res_Icon_Add=icons\5.ico
  19. #AutoIt3Wrapper_Res_Icon_Add=icons\6.ico
  20. #AutoIt3Wrapper_Res_Icon_Add=icons\7.ico
  21. #AutoIt3Wrapper_Res_Icon_Add=icons\8.ico
  22. #AutoIt3Wrapper_Res_Icon_Add=icons\9.ico
  23. #AutoIt3Wrapper_Res_Icon_Add=icons\10.ico
  24. #AutoIt3Wrapper_Res_Icon_Add=icons\11.ico
  25. #AutoIt3Wrapper_Res_Icon_Add=icons\12.ico
  26. #AutoIt3Wrapper_Res_Icon_Add=icons\13.ico
  27. #AutoIt3Wrapper_Res_Icon_Add=icons\14.ico
  28. #AutoIt3Wrapper_Res_Icon_Add=icons\15.ico
  29. #AutoIt3Wrapper_Res_Icon_Add=icons\16.ico
  30. #AutoIt3Wrapper_Res_Icon_Add=icons\17.ico
  31. #AutoIt3Wrapper_Res_Icon_Add=icons\18.ico
  32. #AutoIt3Wrapper_Res_Field=Version|1.1.0.0
  33. #AutoIt3Wrapper_Res_Field=Build|2013.04.12
  34. #AutoIt3Wrapper_Res_Field=Coded by|AZJIO
  35. #AutoIt3Wrapper_Res_Field=CompanyName|AZJIO_Soft
  36. #AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time%
  37. #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
  38. #AutoIt3Wrapper_Run_Obfuscator=y
  39. #Obfuscator_Parameters=/SOI
  40. ; #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"
  41. #AutoIt3Wrapper_Run_After=%autoitdir%\SciTE\upx\upx.exe -7 --compress-icons=0 "%out%"
  42. #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
  43.  
  44. ;  @AZJIO 2013.04.12 (AutoIt3_v3.3.6.1)
  45.  
  46. #NoAutoIt3Execute
  47. #NoTrayIcon
  48. #include <WindowsConstants.au3>
  49. #include <GUIConstantsEx.au3>
  50. #include <ButtonConstants.au3>
  51. #include <Array.au3>
  52. #include <ListBoxConstants.au3>
  53. #include <StaticConstants.au3>
  54. #include <GuiComboBox.au3>
  55. #include <GuiRichEdit.au3>
  56. #include "FileOperations.au3"
  57. #include "ForTextReplace.au3"
  58.  
  59. Local $sLocale = 0
  60. If $CmdLine[0] > 2 Then _RunCMD()
  61. FileChangeDir(@ScriptDir)
  62.  
  63. Opt("GUIOnEventMode", 1)
  64. Opt("GUICloseOnESC", 0)
  65. Opt("GUIResizeMode", 0x0322) ; 802
  66. Local $sep = Chr(1)
  67. Opt("GUIDataSeparatorChar", $sep)
  68. ; Scenario
  69. Local $ScrStart, $ScrPath, $aTextScr = '', $aScenario = ''
  70. Local $aTypInp0[1], $iniAa = 0, $inisub = 0, $iniOutRes = 0, $sOutList = '', $SeaInp0, $RepInp0, $TypInp0, $PatInp0, $Out0, $WHXY[5], $RichPos[5], $lng, $iniSep = '}—•—{'
  71. Local $TrEx = 0, $MinSizeH, $MaxSizeH ; , $TrScr = 0
  72. ; ini
  73. Local $iniSea, $iniRep, $iniMask, $iniDef = '*' & $sep & '*.inf' & $sep & '*.bat|*.cmd' & $sep & '*.htm*' & $sep & '*.reg' & $sep & '*.txt' & $sep & '*.au3', $iniPath, $iniAa = 0, $inisub = 0, $iniBAK = 0, $iniREx = 0, $iniExc = 0, $ReData = 0, $ChData
  74. Local $Ini = @ScriptDir & '\TextReplace.ini', $BackUpPath = ''
  75. ; Setting
  76. Local $LangPath, $ComboLang, $iniLimitFile, $iniLimitSize, $InpLimitFile, $InpLimitSize, $InpErrSize, $iniErrSize = 180 * 1024 * 1024, $iniPathBackup, $InpPathBackup, $LbPathBackup, $LbLimitFile, $LbLimitSize, $InpHst, $LbHst, $KolStr, $atrR, $atrA, $atrH, $atrS, $ExcldAttrib = '', $IgnGr, $CharSet, $CharSetAuto, $ComboChar, $LbChS, $LbErrSize
  77. Local $aSearch[1][2] = [[0]], $Tr_ViewT = -1, $Tr_View = True, $Tr_Sea = 0
  78. Local $EditBoxSea, $EditBoxRep
  79. ; GUI...RichEdit
  80. Local $Btn_Next, $Btn_Back, $Combo_Jump, $hRichEdit, $g_iTrPathDir = 1
  81. ; GUI, триггеры
  82. Local $hGui, $Gui1, $TrStop = 0
  83. ; About
  84. Local $iScroll_Pos, $nLAbt, $hAbt, $wAbtBt, $TrAbt1, $TrAbt2, $tabAbt1, $StopPlay, $vk1, $BkCol2, $tabAbt0, $BkCol1
  85.  
  86. Switch RegRead("HKCU\Keyboard Layout\Preload", '1')
  87.     Case 419
  88.         $hf = 'а'
  89.     Case 409
  90.         $hf = 'f'
  91.     Case Else
  92.         $hf = ''
  93. EndSwitch
  94.  
  95. If Not FileExists($Ini) Then
  96.     $file = FileOpen($Ini, 2)
  97.     FileWrite($file, _
  98.             '[Set]' & @CRLF & _
  99.             'Search=Text1' & $iniSep & 'Text2' & @CRLF & _
  100.             'Replace=Text11' & $iniSep & 'Text22' & @CRLF & _
  101.             'Mask=' & StringReplace($iniDef, $sep, $iniSep) & @CRLF & _
  102.             'DefaultMask=' & StringReplace($iniDef, $sep, $iniSep) & @CRLF & _
  103.             'Path=C:\WINDOWS\inf' & $iniSep & 'C:\Program Files\Notepad++' & @CRLF & _
  104.             'Aa=0' & @CRLF & _
  105.             'sub=1' & @CRLF & _
  106.             'REx=0' & @CRLF & _
  107.             'BAK=0' & @CRLF & _
  108.             'OutRes=0' & @CRLF & _
  109.             'ExceptMask=0' & @CRLF & _
  110.             'LimitFile=20000' & @CRLF & _
  111.             'LimitSize=100' & @CRLF & _
  112.             'ErrSize=' & $iniErrSize & @CRLF & _
  113.             'History=10' & @CRLF & _
  114.             'PathBackup=' & @CRLF & _
  115.             'CharSet=Auto' & @CRLF & _
  116.             'PosL=30' & @CRLF & _
  117.             'PosT=30' & @CRLF & _
  118.             'PosW=361' & @CRLF & _
  119.             'PosH=480' & @CRLF & _
  120.             'PosMax=0' & @CRLF & _
  121.             'RichW=790' & @CRLF & _
  122.             'RichH=500' & @CRLF & _
  123.             'RichL=' & @CRLF & _
  124.             'RichT=' & @CRLF & _
  125.             'RichMax=0' & @CRLF & _
  126.             'Lang=')
  127.     FileClose($file)
  128. EndIf
  129.  
  130. ; En
  131. $LngScrollAbt = 'The tool is designed' & @CRLF & _
  132.         'to find and replace text in any files. The program supports scenarios replace, regular expressions, command line.' & @CRLF & @CRLF & _
  133.         'All parameters of the script commands are unique and do not depend on the current program settings. ' & _
  134.         'The button is designed to create backup copies of changed files in the specified directory or the default program directory. ' & @CRLF & @CRLF & _
  135.         'The utility is written in AutoIt3' & @CRLF & _
  136.         'autoitscript.com'
  137.  
  138. Global $aLng0[103][2] = [[ _
  139.         102, 0],[ _
  140.         'Title', 'TextReplace'],[ _
  141.         'About', 'About'],[ _
  142.         'Ver', 'Version'],[ _
  143.         'Site', 'Site'],[ _
  144.         'Copy', 'Copy'],[ _
  145.         'Sb1', 'StatusBar       ( drag-and-drop )'],[ _
  146.         'AaH1', 'Current:' & @CRLF & 'not case sensitive'],[ _
  147.         'AaH2', 'Current:' & @CRLF & 'case sensitive'],[ _
  148.         'RExH1', 'Current:' & @CRLF & 'Do not use regular expression'],[ _
  149.         'RExH2', 'Current:' & @CRLF & 'Use regular expression'],[ _
  150.         'SubH1', 'Current:' & @CRLF & 'Search only in the root directory'],[ _
  151.         'SubH2', 'Current:' & @CRLF & 'Search in subfolders'],[ _
  152.         'BAKH1', 'Current:' & @CRLF & 'Do not backup'],[ _
  153.         'BAKH2', 'Current:' & @CRLF & 'Do backup'],[ _
  154.         'OutRH1', 'Current:' & @CRLF & 'Results not show'],[ _
  155.         'OutRH2', 'Current:' & @CRLF & 'Results show of searching for'],[ _
  156.         'RBrH', 'Viewing search results'],[ _
  157.         'CRLF', 'Symbol CRLF'],[ _
  158.         'CRLFH', 'Select symbol CRLF'],[ _
  159.         'PSmb', 'Add'],[ _
  160.         'Sea', 'Find'],[ _
  161.         'Rep', 'Replace'],[ _
  162.         'OScr', 'Open *.srt'],[ _
  163.         'AScr', 'Add in *.srt'],[ _
  164.         'Cr', 'Clear'],[ _
  165.         'Msk', 'Mask'],[ _
  166.         'Def', 'Default'],[ _
  167.         'Pth', 'Path'],[ _
  168.         'Ed', 'Editor'],[ _
  169.         'EdH', 'Open in editor (txt)'],[ _
  170.         'St', 'Execute'],[ _
  171.         'StH', 'Start'],[ _
  172.         'Sp', 'Esc - Stop'],[ _
  173.         'Err', 'Error'],[ _
  174.         'MB1', 'Path is not specified or does not exist'],[ _
  175.         'MB2', 'Not a text of searching'],[ _
  176.         'MB3', 'Lines of searching for and change alike or not a text of searching'],[ _
  177.         'MB4', 'It Is Required open *.srt'],[ _
  178.         'MB5', 'no data'],[ _
  179.         'MB6', 'Such already there is in list'],[ _
  180.         'Sb2', 'Searching / count of the files ...'],[ _
  181.         'Sb3', 'Nothing be not found, for'],[ _
  182.         'Sb4', '(total | checked | found | all), for'],[ _
  183.         'SbS', 'sec'],[ _
  184.         'Sb5', 'Searching / Replace ...'],[ _
  185.         'SVD', 'Select/Create file'],[ _
  186.         'SVD1', 'file'],[ _
  187.         'OD', 'Select'],[ _
  188.         'OD1', 'Any'],[ _
  189.         'OF', 'Select'],[ _
  190.         'G1T', 'List'],[ _
  191.         'LV1', 'Find'],[ _
  192.         'LV2', 'Replace'],[ _
  193.         'US', 'Use'],[ _
  194.         'USH', 'Use all'],[ _
  195.         'Sl', 'Choose file'],[ _
  196.         'Rest', 'Restart TextReplace'],[ _
  197.         'EdF', 'Editor+F'],[ _
  198.         'EdFH', 'Open in editor (txt) and find'],[ _
  199.         'Epr', 'Explorer'],[ _
  200.         'MLineSH', 'Searching for multiline text'],[ _
  201.         'MLineRH', 'Searching and replace for multiline text'],[ _
  202.         'bSet', 'Setting'],[ _
  203.         'SzFl', 'Warn volume files over, MB'],[ _
  204.         'MFile', 'Warn if number of files over'],[ _
  205.         'SzEr', 'Maximum file size, KB' & @CRLF & 'with more than ~190 MB get the error memory'],[ _
  206.         'BakPh', 'The path to the backup folder'],[ _
  207.         'Hst', 'Number of items in the ComboBox'],[ _
  208.         'MB7', 'The number of files ('],[ _
  209.         'MB8', ') exceeds the limit specified in the settings ('],[ _
  210.         'MB9', '). Continue processing?'],[ _
  211.         'MB10', 'Volume occupied by the file ('],[ _
  212.         'MB11', 'MB) exceeds the limit specified in the settings ('],[ _
  213.         'MB12', 'MB). Continue processing?'],[ _
  214.         'MB13', 'The specified volume occupied by the file is not a positive number '],[ _
  215.         'MB14', 'Specified number of files is not a positive integer'],[ _
  216.         'MB15', 'Specified number of points of history is not a number from 1 to 50'],[ _
  217.         'MB16', 'The specified path is invalid for the backup and can not be created. Enter the correct path otherwise the backups will be created in the program folder.'],[ _
  218.         'ExcH1', 'Current:' & @CRLF & 'The mask specifies the files'],[ _
  219.         'ExcH2', 'Current:' & @CRLF & 'No files specified in the mask'],[ _
  220.         'MB17', 'Disk backup is not available for copying or path is not valid. Want to continue without backup?'],[ _
  221.         'MB18', 'Cancel operation. Specified in the script path does not exist'],[ _
  222.         'MB19', 'Number of characters in a string search and replace must be an even'],[ _
  223.         'MB20', 'Turn on the display of detailed results and next do a search.'],[ _
  224.         'IgnGr', 'Ignore files with attributes'],[ _
  225.         'AtrR', 'read-only'],[ _
  226.         'AtrA', 'archival'],[ _
  227.         'AtrH', 'hidden'],[ _
  228.         'AtrS', 'System'],[ _
  229.         'Data', 'Do not change the modification date of files'],[ _
  230.         'ChS', 'CharSet'],[ _
  231.         'Nxt', 'Next'],[ _
  232.         'Bck', 'Back'],[ _
  233.         'TTp', 'Close'],[ _
  234.         'Lst', 'To clipboard'],[ _
  235.         'ERg', 'Error in regular expression'],[ _
  236.         'LbCb1', 'Name without extension'],[ _
  237.         'LbCb2', 'Name + extension'],[ _
  238.         'LbCb3', 'Relative path'],[ _
  239.         'LbCb4', 'Full path'],[ _
  240.         'LbCb5', 'Save to File'],[ _
  241.         'Cnl', 'Cancel']]
  242.  
  243. ; Ru
  244. ; если русская локализация, то русский язык
  245. If @OSLang = 0419 Then
  246.     $sLocale = 'А-яЁё'
  247.     $LngScrollAbt = 'Утилита предназначена' & @CRLF & _
  248.             'для поиска и замены текста в любых файлах. Поддержка сценариев замены, регулярных выражений, ком-строки.' & @CRLF & @CRLF & _
  249.             'Символ переноса строк - простой способ выполнить поиск и замену многострочного текста. В качестве переноса строк выбирается подстановочный символ, которого нет в тексте поиска и замены, и используем этот символ в полях ввода поиска и замены. ' & _
  250.             'Сценарий замены можно создать средствами TextReplace, или открыть в блокноте и вручную править и добавлять комментарии. ' & _
  251.             'Все параметры команды сценария являются индивидуальными и не зависят от текущих настроек программы. ' & _
  252.             'Кнопка резервирования включает операцию создания копий изменяемых файлов в указанном каталоге или по умолчанию в каталоге программы. ' & @CRLF & @CRLF & _
  253.             'Утилита написана на AutoIt3' & @CRLF & _
  254.             'autoitscript.com'
  255.    
  256.     Dim $aLng0[103][2] = [[ _
  257.             102, 0],[ _
  258.             'Title', 'TextReplace'],[ _
  259.             'About', 'О программе'],[ _
  260.             'Ver', 'Версия'],[ _
  261.             'Site', 'Сайт'],[ _
  262.             'Copy', 'Копировать'],[ _
  263.             'Sb1', 'Строка состояния     ( используйте drag-and-drop )'],[ _
  264.             'AaH1', 'Текущее состояние:\r\nне учитывать регистр букв'],[ _
  265.             'AaH2', 'Текущее состояние:\r\nучитывать регистр букв'],[ _
  266.             'RExH1', 'Текущее состояние:\r\nНе использовать регулярное выражение\r\nРекомендуется'],[ _
  267.             'RExH2', 'Текущее состояние:\r\nИспользовать регулярное выражение\r\nНе рекомендуется'],[ _
  268.             'SubH1', 'Текущее состояние:\r\nпоиск только в корневой папке'],[ _
  269.             'SubH2', 'Текущее состояние:\r\nпоиск во вложенных папках'],[ _
  270.             'BAKH1', 'Текущее состояние:\r\nНе бэкапировать изменяемые файлы'],[ _
  271.             'BAKH2', 'Текущее состояние:\r\nБэкапировать изменяемые файлы'],[ _
  272.             'OutRH1', 'Текущее состояние:\r\nНе выводить результаты поиска'],[ _
  273.             'OutRH2', 'Текущее состояние:\r\nВыводить результаты поиска'],[ _
  274.             'RBrH', 'Просмотр результатов поиска'],[ _
  275.             'CRLF', 'Символ переноса строк'],[ _
  276.             'CRLFH', 'Выберите подстановочный знак для переноса строки\r\nи используйте его в полях ввода поиска и замены'],[ _
  277.             'PSmb', 'Добавить'],[ _
  278.             'Sea', 'Найти текст'],[ _
  279.             'Rep', 'Заменить текст на ...'],[ _
  280.             'OScr', 'Открыть сценарий замены'],[ _
  281.             'AScr', 'Добавить образцы в сценарий'],[ _
  282.             'Cr', 'Очистить поле ввода'],[ _
  283.             'Msk', 'Маска'],[ _
  284.             'Def', 'Сброс раскрывающегося списка\r\nмаски по умолчанию'],[ _
  285.             'Pth', 'Путь, где искать'],[ _
  286.             'Ed', 'Редактор'],[ _
  287.             'EdH', 'Открыть в редакторе' & @CRLF & 'ассоциированным с txt'],[ _
  288.             'St', 'Выполнить'],[ _
  289.             'StH', 'Запуск в ассоциированной программе'],[ _
  290.             'Sp', 'Esc - Отмена'],[ _
  291.             'Err', 'Сообщение'],[ _
  292.             'MB1', 'Путь не указан или не существует'],[ _
  293.             'MB2', 'Не указан текст поиска'],[ _
  294.             'MB3', 'Строки поиска и замены одинаковы или не указан текст поиска'],[ _
  295.             'MB4', 'Требуется открыть сценарий'],[ _
  296.             'MB5', 'нет данных'],[ _
  297.             'MB6', 'Такой уже есть в списке'],[ _
  298.             'Sb2', 'Поиск / подсчёт файлов и объёма ...'],[ _
  299.             'Sb3', 'Ничего не найдено, за'],[ _
  300.             'Sb4', '(всего | проверено | найдено | общее), за'],[ _
  301.             'SbS', 'сек'],[ _
  302.             'Sb5', 'Поиск и замена ...'],[ _
  303.             'SVD', 'Указать/Создать файл'],[ _
  304.             'SVD1', 'Сценарий'],[ _
  305.             'OD', 'Указать файл'],[ _
  306.             'OD1', 'Любой'],[ _
  307.             'OF', 'Указать папку'],[ _
  308.             'G1T', 'Список замен'],[ _
  309.             'LV1', 'найти'],[ _
  310.             'LV2', 'заменить'],[ _
  311.             'US', 'Использовать сценарий'],[ _
  312.             'USH', 'Для последовательной замены по текущему списку'],[ _
  313.             'Sl', 'Выбрать файл'],[ _
  314.             'Rest', 'Перезапуск утилиты'],[ _
  315.             'EdF', 'Редактор+F'],[ _
  316.             'EdFH', 'Открыть в редакторе ассоциированным' & @CRLF & 'с txt-файлами и выполнить поиск'],[ _
  317.             'Epr', 'В проводнике'],[ _
  318.             'MLineSH', 'Поиск многострочного текста'],[ _
  319.             'MLineRH', 'Поиск и замена для многострочного текста'],[ _
  320.             'bSet', 'Настройки'],[ _
  321.             'SzFl', 'Предупреждать, если объём файлов более, МБ'],[ _
  322.             'MFile', 'Предупреждать, если количество файлов более'],[ _
  323.             'SzEr', 'Максимальный размер файлов, КБ' & @CRLF & 'при более ~190 МБ получим ошибку памяти'],[ _
  324.             'BakPh', 'Путь к резервной папке'],[ _
  325.             'Hst', 'Количество пунктов в раскрывающемся списке'],[ _
  326.             'MB7', 'Количество файлов ('],[ _
  327.             'MB8', ') превышает указанный в настройках лимит ('],[ _
  328.             'MB9', '). Продолжить обработку?'],[ _
  329.             'MB10', 'Объём файлов ('],[ _
  330.             'MB11', 'МБ) превышает указанный в настройках лимит ('],[ _
  331.             'MB12', 'МБ). Продолжить обработку?'],[ _
  332.             'MB13', 'Указанный объём файлов не является положительным числом'],[ _
  333.             'MB14', 'Указанное количество файлов не является положительным целым числом'],[ _
  334.             'MB15', 'Указанное количество пунктов истории не является числом от 1 до 50'],[ _
  335.             'MB16', 'Указанный путь для резервных копий невалидный и не может быть создан. Укажите правильно путь иначе резервные копии будут созданы в папке программы.'],[ _
  336.             'ExcH1', 'Текущее состояние:' & @CRLF & 'Файлы определяемые маской'],[ _
  337.             'ExcH2', 'Текущее состояние:' & @CRLF & 'Кроме файлов определяемых маской'],[ _
  338.             'MB17', 'Диск резервирования не доступен для копирования' & @CRLF & 'или неверно указан путь. Хотите продолжить без  резервирования?'],[ _
  339.             'MB18', 'Отмена операции. Указанные в сценарии пути не существуют'],[ _
  340.             'MB19', 'Количество символов в строке поиска и замены должно быть чётное'],[ _
  341.             'MB20', 'Включите режим вывода подробных результатов и далее сделайте поиск.'],[ _
  342.             'IgnGr', 'Игнорировать файлы с атрибутами'],[ _
  343.             'AtrR', 'Только чтение'],[ _
  344.             'AtrA', 'Архивный'],[ _
  345.             'AtrH', 'Скрытый'],[ _
  346.             'AtrS', 'Системный'],[ _
  347.             'Data', 'Дату изменения файлов отставлять прежней'],[ _
  348.             'ChS', 'Кодировка'],[ _
  349.             'Nxt', 'Далее'],[ _
  350.             'Bck', 'Назад'],[ _
  351.             'TTp', 'Закрыть'],[ _
  352.             'Lst', 'В буфер обмена'],[ _
  353.             'ERg', 'Ошибка в регулярном выражении'],[ _
  354.             'LbCb1', 'Имя без расширение'],[ _
  355.             'LbCb2', 'Имя + расширение'],[ _
  356.             'LbCb3', 'Относительный путь'],[ _
  357.             'LbCb4', 'Полный путь'],[ _
  358.             'LbCb5', 'Сохранить в файл'],[ _
  359.             'Cnl', 'Отмена']]
  360. EndIf
  361.  
  362. For $i = 1 To $aLng0[0][0]
  363.     If StringInStr($aLng0[$i][1], '\r\n') Then $aLng0[$i][1] = StringReplace($aLng0[$i][1], '\r\n', @CRLF)
  364.     Assign('Lng' & $aLng0[$i][0], $aLng0[$i][1])
  365. Next
  366.  
  367. $LangPath = IniRead($Ini, 'Set', 'Lang', 'none')
  368. If $LangPath <> 'none' And FileExists(@ScriptDir & '\Lang\' & $LangPath) Then
  369.     $aLng = IniReadSection(@ScriptDir & '\Lang\' & $LangPath, 'lng')
  370.     If Not @error Then
  371.         For $i = 1 To $aLng[0][0]
  372.             If StringInStr($aLng[$i][1], '\r\n') Then $aLng[$i][1] = StringReplace($aLng[$i][1], '\r\n', @CRLF)
  373.             If IsDeclared('Lng' & $aLng[$i][0]) Then Assign('Lng' & $aLng[$i][0], $aLng[$i][1])
  374.         Next
  375.     EndIf
  376. EndIf
  377.  
  378. $iniSea = StringReplace(IniRead($Ini, 'Set', 'Search', ''), $iniSep, $sep)
  379. $iniRep = StringReplace(IniRead($Ini, 'Set', 'Replace', ''), $iniSep, $sep)
  380. $iniDef = StringReplace(IniRead($Ini, 'Set', 'DefaultMask', $iniDef), $iniSep, $sep)
  381. $iniMask = StringReplace(IniRead($Ini, 'Set', 'Mask', $iniDef), $iniSep, $sep)
  382. $iniPath = StringReplace(IniRead($Ini, 'Set', 'Path', ''), $iniSep, $sep)
  383. $iniAa = Number(IniRead($Ini, 'Set', 'Aa', '0'))
  384. $inisub = Number(IniRead($Ini, 'Set', 'sub', '0'))
  385. $iniREx = Number(IniRead($Ini, 'Set', 'REx', '0'))
  386. $iniBAK = Number(IniRead($Ini, 'Set', 'BAK', '0'))
  387. $iniOutRes = Number(IniRead($Ini, 'Set', 'OutRes', '0'))
  388. $iniExc = Number(IniRead($Ini, 'Set', 'ExceptMask', '0'))
  389. $WHXY[0] = Number(IniRead($Ini, 'Set', 'PosW', '361'))
  390. $WHXY[1] = Number(IniRead($Ini, 'Set', 'PosH', '480'))
  391. $WHXY[2] = IniRead($Ini, 'Set', 'PosL', '30')
  392. $WHXY[3] = IniRead($Ini, 'Set', 'PosT', '30')
  393. $WHXY[4] = Number(IniRead($Ini, 'Set', 'PosMax', ''))
  394. $iniPathBackup = IniRead($Ini, 'Set', 'PathBackup', '')
  395. $iniLimitFile = Int(IniRead($Ini, 'Set', 'LimitFile', '20000'))
  396. If $iniLimitFile < 1 Then $iniLimitFile = 20000
  397. $iniLimitSize = Number(IniRead($Ini, 'Set', 'LimitSize', '100'))
  398. If $iniLimitSize <= 0 Then $iniLimitSize = 100
  399. $iniErrSize = Number(IniRead($Ini, 'Set', 'ErrSize', 188000000))
  400. If $iniErrSize <= 0 Then $iniErrSize = 180 * 1024 * 1024
  401. $KolStr = Int(IniRead($Ini, 'Set', 'History', '10'))
  402. If $KolStr < 1 Or $KolStr > 50 Then $KolStr = 10
  403. $CharSet = _CharNameToNum(IniRead($Ini, 'Set', 'CharSet', 'Auto'))
  404.  
  405. If $WHXY[0] < 361 Then $WHXY[0] = 361 ; ограничение ширины
  406. If $WHXY[1] < 360 Then $WHXY[1] = 360 ; ограничение высоты
  407. _SetCoor($WHXY, 35)
  408.  
  409. $Editor = _FileAssociation('.txt') ; получаем путь к редактору
  410. If @error Then $Editor = @SystemDir & '\notepad.exe'
  411.  
  412. $hGui = GUICreate($LngTitle, $WHXY[0], 250, $WHXY[2], $WHXY[3], BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN), $WS_EX_ACCEPTFILES)
  413. Global $aPosH2 = WinGetPos($hGui)
  414. $MinSizeH = $aPosH2[3]
  415. $MaxSizeH = $aPosH2[3]
  416. GUISetOnEvent($GUI_EVENT_CLOSE, "_Quit")
  417. ; GUISetOnEvent($GUI_EVENT_DROPPED, "_Dropped")
  418. GUISetOnEvent($GUI_EVENT_RESIZED, "_Resized")
  419. GUISetOnEvent($GUI_EVENT_MAXIMIZE, "_Maximize")
  420. GUISetOnEvent($GUI_EVENT_RESTORE, "_Restore")
  421. If @Compiled Then
  422.     $AutoItExe = @AutoItExe
  423. Else
  424.     $AutoItExe = @ScriptDir & '\TextReplace.dll'
  425.     GUISetIcon($AutoItExe, 1)
  426.     If Not FileExists($AutoItExe) Then GUISetIcon("shell32.dll", -23)
  427. EndIf
  428.  
  429. $StatusBar = GUICtrlCreateLabel($LngSb1, 5, 233, $WHXY[0] - 10, 15, 0xC)
  430. GUICtrlSetResizing(-1, 2 + 4 + 32 + 512)
  431.  
  432. $About = GUICtrlCreateButton("@", $WHXY[0] - 235, 2, 18, 20)
  433. GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  434. GUICtrlSetTip(-1, $LngAbout)
  435. GUICtrlSetOnEvent(-1, "_About")
  436.  
  437. $restart = GUICtrlCreateButton("R", $WHXY[0] - 215, 2, 18, 20)
  438. GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  439. GUICtrlSetTip(-1, $LngRest)
  440. GUICtrlSetOnEvent(-1, "_restart")
  441.  
  442. $AaBut = GUICtrlCreateCheckbox("--", 5, 5, 24, 24, $BS_PUSHLIKE + $BS_ICON)
  443. GUICtrlSetImage(-1, $AutoItExe, 206, 0)
  444. GUICtrlSetOnEvent(-1, "_AaBut")
  445. If $iniAa Then
  446.     GUICtrlSetTip(-1, $LngAaH2)
  447.     GUICtrlSetState(-1, 1)
  448. Else
  449.     GUICtrlSetTip(-1, $LngAaH1)
  450. EndIf
  451.  
  452. $RExBut = GUICtrlCreateCheckbox("--", 35, 5, 24, 24, $BS_PUSHLIKE + $BS_ICON)
  453. GUICtrlSetImage(-1, $AutoItExe, 207, 0)
  454. GUICtrlSetOnEvent(-1, "_RExBut")
  455. If $iniREx Then
  456.     GUICtrlSetTip($RExBut, $LngRExH2)
  457.     GUICtrlSetState(-1, 1)
  458.     GUICtrlSetState($AaBut, $GUI_DISABLE)
  459. Else
  460.     GUICtrlSetTip($RExBut, $LngRExH1)
  461.     GUICtrlSetState($AaBut, $GUI_ENABLE)
  462. EndIf
  463.  
  464. $BAKBut = GUICtrlCreateCheckbox("--", 65, 5, 24, 24, $BS_PUSHLIKE + $BS_ICON)
  465. GUICtrlSetImage(-1, $AutoItExe, 209, 0)
  466. GUICtrlSetOnEvent(-1, "_BAKBut")
  467. If $iniBAK Then
  468.     GUICtrlSetTip($BAKBut, $LngBAKH2)
  469.     GUICtrlSetState(-1, 1)
  470. Else
  471.     GUICtrlSetTip($BAKBut, $LngBAKH1)
  472. EndIf
  473.  
  474. GUICtrlCreateButton('Set', 95, 5, 24, 24, $BS_PUSHLIKE + $BS_ICON)
  475. GUICtrlSetImage(-1, $AutoItExe, 210, 0)
  476. ; GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  477. GUICtrlSetTip(-1, $LngbSet)
  478. GUICtrlSetOnEvent(-1, "_Setting")
  479.  
  480. $SubBut = GUICtrlCreateCheckbox("--", 120, 180, 24, 24, $BS_PUSHLIKE + $BS_ICON)
  481. GUICtrlSetImage(-1, $AutoItExe, 208, 0)
  482. GUICtrlSetOnEvent(-1, "_SubBut")
  483. If $inisub Then
  484.     GUICtrlSetTip(-1, $LngSubH2)
  485.     GUICtrlSetState(-1, 1)
  486. Else
  487.     GUICtrlSetTip(-1, $LngSubH1)
  488. EndIf
  489.  
  490. #region ; ряд 3 кнопки маска
  491. $TypClear = GUICtrlCreateButton("X", 120, 130, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  492. GUICtrlSetTip(-1, $LngCr)
  493. GUICtrlSetImage(-1, $AutoItExe, 203, 0)
  494. GUICtrlSetOnEvent(-1, "_Clear")
  495.  
  496. $ExcBut = GUICtrlCreateCheckbox("--", 150, 130, 24, 24, $BS_PUSHLIKE + $BS_ICON)
  497. GUICtrlSetImage(-1, $AutoItExe, 211, 0)
  498. GUICtrlSetOnEvent(-1, "_ExcBut")
  499. If $iniExc Then
  500.     GUICtrlSetTip($ExcBut, $LngExcH2)
  501.     GUICtrlSetState(-1, 1)
  502. Else
  503.     GUICtrlSetTip($ExcBut, $LngExcH1)
  504. EndIf
  505.  
  506. $TypDef = GUICtrlCreateButton("Def", 180, 130, 26, 24)
  507. GUICtrlSetTip(-1, $LngDef)
  508. GUICtrlSetOnEvent(-1, "_DefaultMask")
  509. #endregion ; ряд 3 кнопки маска
  510.  
  511. #region ; ряд 4 кнопок поиска
  512. $SeaClear = GUICtrlCreateButton("X", 120, 30, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  513. GUICtrlSetTip(-1, $LngCr)
  514. GUICtrlSetImage(-1, $AutoItExe, 203, 0)
  515. GUICtrlSetOnEvent(-1, "_Clear")
  516.  
  517. $MLineS = GUICtrlCreateButton("SM", 150, 30, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  518. GUICtrlSetTip(-1, $LngMLineSH)
  519. GUICtrlSetImage(-1, $AutoItExe, 217, 0)
  520. GUICtrlSetOnEvent(-1, "_EditBox")
  521.  
  522. $OutRBut = GUICtrlCreateCheckbox("swr", 180, 30, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  523. GUICtrlSetImage(-1, $AutoItExe, 212, 0)
  524. GUICtrlSetOnEvent(-1, "_OutRBut")
  525. If $iniOutRes Then
  526.     GUICtrlSetTip(-1, $LngOutRH2)
  527.     GUICtrlSetState(-1, 1)
  528. Else
  529.     GUICtrlSetTip(-1, $LngOutRH1)
  530. EndIf
  531.  
  532. $RBrBut = GUICtrlCreateButton("--", 210, 30, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  533. GUICtrlSetImage(-1, $AutoItExe, 213, 0)
  534. GUICtrlSetOnEvent(-1, "_Res_Byfer")
  535. GUICtrlSetTip(-1, $LngRBrH)
  536. #endregion ; ряд 4 кнопок поиска
  537.  
  538. #region ; ряд 4 кнопок замены
  539. $RepClear = GUICtrlCreateButton("X", 120, 80, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  540. GUICtrlSetTip(-1, $LngCr)
  541. GUICtrlSetImage(-1, $AutoItExe, 203, 0)
  542. GUICtrlSetOnEvent(-1, "_Clear")
  543.  
  544. $MLineR = GUICtrlCreateButton("RM", 150, 80, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  545. GUICtrlSetTip(-1, $LngMLineRH)
  546. GUICtrlSetImage(-1, $AutoItExe, 217, 0)
  547. GUICtrlSetOnEvent(-1, "_EditBoxM")
  548.  
  549. $ScrRep = GUICtrlCreateButton("Scr", 180, 80, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  550. GUICtrlSetTip(-1, $LngOScr)
  551. GUICtrlSetImage(-1, $AutoItExe, 205, 0)
  552. GUICtrlSetOnEvent(-1, "_ScrRep")
  553.  
  554. $AddRep = GUICtrlCreateButton("Add", 210, 80, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  555. GUICtrlSetTip(-1, $LngAScr)
  556. GUICtrlSetImage(-1, $AutoItExe, 204, 0)
  557. GUICtrlSetOnEvent(-1, "_AddRep")
  558. #endregion ; ряд 4 кнопок замены
  559.  
  560. $specsymbol = $sep & ChrW(0x00A9) & $sep & ChrW(0x00AE) & $sep & ChrW(0x00AB) & $sep & ChrW(0x00BB) & $sep & ChrW(0x2030) & $sep & ChrW(0x00A7) & $sep & ChrW(0x00B5) & $sep & ChrW(0x20AC) & $sep & ChrW(0x2122)
  561.  
  562. $CRLF = GUICtrlCreateCombo("", $WHXY[0] - 65, 2, 54)
  563. GUICtrlSetData(-1, $sep & $sep & '~' & $sep & '@' & $sep & '%' & $sep & '&' & $sep & '*' & $sep & '^' & $sep & '#' & $sep & '\' & $sep & '/' & $sep & '+' & $sep & '-' & $sep & '_' & $sep & '{' & $sep & '}' & $sep & '[' & $sep & ']' & $sep & '`' & $sep & '<' & $sep & '>' & $specsymbol, '')
  564. GUICtrlSetTip(-1, $LngCRLFH)
  565. GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  566. $CRLFLab = GUICtrlCreateLabel($LngCRLF, $WHXY[0] - 192, 5, 125, 15, $SS_RIGHT)
  567. GUICtrlSetTip(-1, $LngCRLFH)
  568. GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  569.  
  570. ; $spec = GUICtrlCreateCombo("", 294, 25, 44)
  571. $spec = GUICtrlCreateCombo("", $WHXY[0] - 55, 28, 44, 23, $CBS_DROPDOWNLIST + $WS_VSCROLL)
  572. GUICtrlSetData(-1, $sep & $sep & ChrW(0x9) & $specsymbol, '')
  573. GUICtrlSetTip(-1, $LngPSmb)
  574. GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  575. GUICtrlSetOnEvent(-1, "_Spec")
  576. $specLab = GUICtrlCreateLabel($LngPSmb, $WHXY[0] - 122, 32, 65, 15, $SS_RIGHT)
  577. GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  578.  
  579. $SeaBtn = GUICtrlCreateButton("S", $WHXY[0] - 34, 53, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  580. GUICtrlSetTip(-1, $LngSea)
  581. GUICtrlSetImage(-1, $AutoItExe, 99, 0)
  582. GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  583. GUICtrlSetOnEvent(-1, "_Search")
  584. $SeaLab = GUICtrlCreateLabel($LngSea, 7, 40, 86, 15)
  585. $SeaInp = GUICtrlCreateCombo("", 5, 55, $WHXY[0] - 45)
  586. GUICtrlSetData(-1, $iniSea, StringRegExpReplace($iniSea, '(^.*?)(?:' & $sep & '.*)$', '\1'))
  587. GUICtrlSetResizing(-1, 7 + 32 + 512)
  588.  
  589. $RepBtn = GUICtrlCreateButton("R", $WHXY[0] - 34, 103, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  590. GUICtrlSetTip(-1, $LngRep)
  591. GUICtrlSetImage(-1, $AutoItExe, 201, 0)
  592. GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  593. GUICtrlSetOnEvent(-1, "_ReplaceOnce")
  594. $RepLab = GUICtrlCreateLabel($LngRep, 7, 90, 110, 15)
  595. $RepInp = GUICtrlCreateCombo("", 5, 105, $WHXY[0] - 45)
  596. GUICtrlSetData(-1, $iniRep, StringRegExpReplace($iniRep, '(^.*?)(?:' & $sep & '.*)$', '\1'))
  597. GUICtrlSetResizing(-1, 7 + 32 + 512)
  598.  
  599. $TypLab = GUICtrlCreateLabel($LngMsk, 7, 140, 110, 15)
  600. $TypInp = GUICtrlCreateCombo("", 5, 155, $WHXY[0] - 45)
  601. GUICtrlSetData(-1, $iniMask, StringRegExpReplace($iniMask, '(^.*?)(?:' & $sep & '.*)$', '\1'))
  602. GUICtrlSetResizing(-1, 7 + 32 + 512)
  603. $Folder1 = GUICtrlCreateButton("...", $WHXY[0] - 34, 153, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  604. GUICtrlSetImage(-1, $AutoItExe, 202, 0)
  605. GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  606. GUICtrlSetOnEvent(-1, "_Folder1")
  607.  
  608. $PatLab = GUICtrlCreateLabel($LngPth, 7, 190, 110, 15)
  609. $PatInp = GUICtrlCreateCombo("", 5, 205, $WHXY[0] - 45)
  610. GUICtrlSetData(-1, $iniPath, StringRegExpReplace($iniPath, '(^.*?)(?:' & $sep & '.*)$', '\1'))
  611. GUICtrlSetResizing(-1, 7 + 32 + 512)
  612. $Folder2 = GUICtrlCreateButton("...", $WHXY[0] - 34, 203, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  613. GUICtrlSetImage(-1, $AutoItExe, 202, 0)
  614. GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  615. GUICtrlSetOnEvent(-1, "_Folder2")
  616.  
  617. $Out = GUICtrlCreateList("", 5, 250, $WHXY[0] - 10, 10, BitOR($WS_BORDER, $WS_VSCROLL, $LBS_USETABSTOPS, $LBS_NOINTEGRALHEIGHT))
  618. GUICtrlSetOnEvent(-1, "_ListBox")
  619. GUICtrlSetResizing(-1, 2 + 4 + 32 + 64)
  620. GUICtrlSetState(-1, $GUI_HIDE)
  621.  
  622. $EditBut = GUICtrlCreateButton($LngEd, 10, 250 - 28, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  623. GUICtrlSetTip(-1, $LngEdH)
  624. GUICtrlSetResizing(-1, 512 + 256 + 64 + 2)
  625. GUICtrlSetState(-1, $GUI_HIDE)
  626. GUICtrlSetOnEvent(-1, "_EditorOpen")
  627. GUICtrlSetImage(-1, $AutoItExe, 214, 0)
  628. $EditFBut = GUICtrlCreateButton($LngEdF, 40, 250 - 28, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  629. GUICtrlSetTip(-1, $LngEdFH)
  630. GUICtrlSetResizing(-1, 512 + 256 + 64 + 2)
  631. GUICtrlSetState(-1, $GUI_HIDE)
  632. GUICtrlSetOnEvent(-1, "_EditorTextFound")
  633. GUICtrlSetImage(-1, $AutoItExe, 215, 0)
  634. $StrBut = GUICtrlCreateButton($LngSt, 70, 250 - 28, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  635. GUICtrlSetTip(-1, $LngStH)
  636. GUICtrlSetResizing(-1, 512 + 256 + 64 + 2)
  637. GUICtrlSetState(-1, $GUI_HIDE)
  638. GUICtrlSetOnEvent(-1, "_StartFile")
  639. GUICtrlSetImage(-1, $AutoItExe, 216, 0)
  640. $EprBut = GUICtrlCreateButton('-', 100, 250 - 28, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  641. GUICtrlSetTip(-1, $LngEpr)
  642. GUICtrlSetResizing(-1, 512 + 256 + 64 + 2)
  643. GUICtrlSetState(-1, $GUI_HIDE)
  644. GUICtrlSetOnEvent(-1, "_ExplorerOpen")
  645. GUICtrlSetImage(-1, $AutoItExe, 202, 0)
  646. $LstBut = GUICtrlCreateButton('-', 130, 250 - 28, 26, 24, $BS_PUSHLIKE + $BS_ICON)
  647. GUICtrlSetTip(-1, $LngLst)
  648. GUICtrlSetResizing(-1, 512 + 256 + 64 + 2)
  649. GUICtrlSetState(-1, $GUI_HIDE)
  650. GUICtrlSetOnEvent(-1, "_ListBox_GetText")
  651. GUICtrlSetImage(-1, $AutoItExe, 218, 0)
  652.  
  653. $StopBut = GUICtrlCreateLabel($LngSp, -20, -20, 1, 1, 0xC)
  654. GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  655. GUICtrlSetOnEvent(-1, "_StopBut")
  656. GUICtrlSetFont(-1, Default, 700)
  657. GUICtrlSetColor(-1, 0xff0000)
  658.  
  659. $OutContext = GUICtrlCreateContextMenu($Out)
  660. $Cont1 = GUICtrlCreateMenuItem($LngEd, $OutContext)
  661. GUICtrlSetOnEvent(-1, "_EditorOpen")
  662. $Cont3 = GUICtrlCreateMenuItem($LngEdF, $OutContext)
  663. GUICtrlSetOnEvent(-1, "_EditorTextFound")
  664. $Cont2 = GUICtrlCreateMenuItem($LngSt, $OutContext)
  665. GUICtrlSetOnEvent(-1, "_StartFile")
  666. $Cont4 = GUICtrlCreateMenuItem($LngEpr, $OutContext)
  667. GUICtrlSetOnEvent(-1, "_ExplorerOpen")
  668. ; $Cont5= GUICtrlCreateMenuitem('View',$OutContext)
  669. ; GUICtrlSetOnEvent(-1, "_View")
  670.  
  671. $HelpCHM = GUICtrlCreateDummy()
  672. GUICtrlSetOnEvent(-1, "_HelpCHM")
  673.  
  674. $insCRLF = GUICtrlCreateDummy()
  675. GUICtrlSetOnEvent(-1, "_CRLFins")
  676.  
  677. $ClearTTip = GUICtrlCreateDummy()
  678. GUICtrlSetOnEvent(-1, "_ClearTTip")
  679.  
  680. ; $CtrlA=GUICtrlCreateDummy()
  681. ; GUICtrlSetOnEvent(-1, "_CtrlA")
  682.  
  683. Dim $AccelKeys[5][2] = [["{F1}", $HelpCHM],["!e", $EprBut],["!s", $SeaBtn],["^{Enter}", $insCRLF],["{F4}", $ClearTTip]] ; , ["^a", $CtrlA]
  684.  
  685. ; если раскладка не совпадает с англ. яз. то временно переключаем в неё, чтобы зарегистрировать горячие клавиши
  686. $tmp = 0
  687. $KeyLayout = RegRead("HKCU\Keyboard Layout\Preload", 1)
  688. If Not @error And $KeyLayout <> 00000409 Then
  689.     _WinAPI_LoadKeyboardLayout(0x0409)
  690.     $tmp = 1
  691. EndIf
  692.  
  693. GUISetAccelerators($AccelKeys)
  694. If $tmp = 1 Then _WinAPI_LoadKeyboardLayout(Dec($KeyLayout)) ; восстанавливаем раскладку по умолчанию
  695.  
  696. GUIRegisterMsg(0x0024, "WM_GETMINMAXINFO")
  697. GUIRegisterMsg(0x0216, "WM_MOVING")
  698. GUIRegisterMsg(0x0233, "WM_DROPFILES")
  699. OnAutoItExitRegister('_Exit')
  700.  
  701. GUISetState(@SW_SHOW, $hGui)
  702. If $WHXY[4] Then GUISetState(@SW_MAXIMIZE, $hGui)
  703.  
  704. While 1
  705.     Sleep(1000000)
  706. WEnd
  707.  
  708. Func _ClearTTip()
  709.     $Tr_View = False
  710.     ToolTip('')
  711. EndFunc   ;==>_ClearTTip
  712.  
  713. ; Func _CtrlA()
  714. ; $handle = ControlGetFocus("[ACTIVE]")
  715. ; $handle = ControlGetHandle("[ACTIVE]", '', "[CLASSNN:"&$handle&"]")
  716. ; GUICtrlSendMsg($handle, $EM_SETSEL, 0, -1)
  717. ; EndFunc
  718.  
  719. Func _HelpCHM()
  720.     If FileExists(@ScriptDir & '\TextReplace.chm') Then
  721.         ShellExecute('"' & @ScriptDir & '\TextReplace.chm"')
  722.         ; Run('hh.exe "'&@ScriptDir&'\TextReplace.chm')
  723.     Else
  724.         Return _About()
  725.     EndIf
  726. EndFunc   ;==>_HelpCHM
  727.  
  728. ; авто-вставка переноса строки по Ctrl+Enter
  729. Func _CRLFins()
  730.     $CRLF0 = GUICtrlRead($CRLF)
  731.     $SeaInp0 = GUICtrlRead($SeaInp)
  732.     If Not $CRLF0 Then
  733.         $CRLF0 = _CRLF_Define($SeaInp0)
  734.         If @error Then Return
  735.         GUICtrlSetData($CRLF, $CRLF0)
  736.     EndIf
  737.     _GUICtrlComboBox_SetEditText($SeaInp, $SeaInp0 & $CRLF0)
  738. EndFunc   ;==>_CRLFins
  739.  
  740. Func WM_DROPFILES($hwnd, $msg, $wParam, $lParam)
  741.     Local $aRet = DllCall("shell32.dll", "int", "DragQueryFile", "int", $wParam, "int", -1, "ptr", 0, "int", 0)
  742.     If @error Then Return SetError(1, 0, 0)
  743.     Local $sDroppedFiles, $tBuffer = DllStructCreate("char[256]")
  744.     DllCall("shell32.dll", "int", "DragQueryFile", "int", $wParam, "int", 0, "ptr", DllStructGetPtr($tBuffer), "int", DllStructGetSize($tBuffer))
  745.     $sDroppedFiles = DllStructGetData($tBuffer, 1)
  746.     DllCall("shell32.dll", "none", "DragFinish", "int", $wParam)
  747.     $tBuffer = 0
  748.     ; WinActivate($гуи) ; активирует окно, в которое брошены файлы
  749.     If _FO_IsDir($sDroppedFiles) Then
  750.         ; _GUICtrlComboBox_InsertString($PatInp, $sDroppedFiles, 0)
  751.         ; GUICtrlSetData($PatInp, $sDroppedFiles)
  752.         _ComboBox_InsertPath($sDroppedFiles, $iniPath, $PatInp)
  753.     Else
  754.         If StringRight($sDroppedFiles, 4) = '.srt' Then
  755.             $ScrPath = $sDroppedFiles
  756.             _ScenarioView()
  757.         Else
  758.             Local $aCursorInfo = GUIGetCursorInfo($hGui)
  759.             If Not @error And $aCursorInfo[4] = $PatInp Then
  760.                 _ComboBox_InsertPath($sDroppedFiles, $iniPath, $PatInp)
  761.             Else
  762.                 _mask($sDroppedFiles)
  763.             EndIf
  764.         EndIf
  765.     EndIf
  766.     Return "GUI_RUNDEFMSG"
  767. EndFunc   ;==>WM_DROPFILES
  768.  
  769. Func _AaBut()
  770.     If GUICtrlRead($AaBut) = 4 Then
  771.         $iniAa = 0
  772.         GUICtrlSetTip($AaBut, $LngAaH1)
  773.     Else
  774.         $iniAa = 1
  775.         GUICtrlSetTip($AaBut, $LngAaH2)
  776.         ; GUICtrlSetState(-1, 1)
  777.     EndIf
  778. EndFunc   ;==>_AaBut
  779.  
  780. Func _SubBut()
  781.     If GUICtrlRead($SubBut) = 4 Then
  782.         $inisub = 0
  783.         GUICtrlSetTip($SubBut, $LngSubH1)
  784.     Else
  785.         $inisub = 1
  786.         GUICtrlSetTip($SubBut, $LngSubH2)
  787.         ; GUICtrlSetState(-1, 1)
  788.     EndIf
  789. EndFunc   ;==>_SubBut
  790.  
  791. Func _OutRBut()
  792.     If GUICtrlRead($OutRBut) = 4 Then
  793.         $iniOutRes = 0
  794.         GUICtrlSetTip($OutRBut, $LngOutRH1)
  795.         ToolTip('')
  796.     Else
  797.         $iniOutRes = 1
  798.         GUICtrlSetTip($OutRBut, $LngOutRH2)
  799.         ; GUICtrlSetState(-1, 1)
  800.     EndIf
  801. EndFunc   ;==>_OutRBut
  802.  
  803. Func _RExBut()
  804.     If GUICtrlRead($RExBut) = 4 Then
  805.         $iniREx = 0
  806.         GUICtrlSetTip($RExBut, $LngRExH1)
  807.         GUICtrlSetState($AaBut, $GUI_ENABLE)
  808.     Else
  809.         $iniREx = 1
  810.         GUICtrlSetTip($RExBut, $LngRExH2)
  811.         ; GUICtrlSetState(-1, 1)
  812.         GUICtrlSetState($AaBut, $GUI_DISABLE)
  813.     EndIf
  814. EndFunc   ;==>_RExBut
  815.  
  816. Func _BAKBut()
  817.     If GUICtrlRead($BAKBut) = 4 Then
  818.         $iniBAK = 0
  819.         GUICtrlSetTip($BAKBut, $LngBAKH1)
  820.     Else
  821.         $iniBAK = 1
  822.         GUICtrlSetTip($BAKBut, $LngBAKH2)
  823.         ; GUICtrlSetState(-1, 1)
  824.     EndIf
  825. EndFunc   ;==>_BAKBut
  826.  
  827. Func _ExcBut()
  828.     If GUICtrlRead($ExcBut) = 4 Then
  829.         $iniExc = 0
  830.         GUICtrlSetTip($ExcBut, $LngExcH1)
  831.     Else
  832.         $iniExc = 1
  833.         GUICtrlSetTip($ExcBut, $LngExcH2)
  834.         ; GUICtrlSetState(-1, 1)
  835.     EndIf
  836. EndFunc   ;==>_ExcBut
  837.  
  838. Func _Spec()
  839.     Local $spec0 = GUICtrlRead($spec), $SeaInp0 = GUICtrlRead($SeaInp)
  840.     _GUICtrlComboBox_SetEditText($SeaInp, $SeaInp0 & $spec0)
  841. EndFunc   ;==>_Spec
  842.  
  843. Func _Clear()
  844.     Switch @GUI_CtrlId
  845.         Case $SeaClear
  846.             GUICtrlSetData($SeaInp, '')
  847.             GUICtrlSetData($SeaInp, $iniSea, '')
  848.             GUICtrlSetState($SeaInp, $GUI_FOCUS)
  849.         Case $RepClear
  850.             GUICtrlSetData($RepInp, '')
  851.             GUICtrlSetData($RepInp, $iniRep, '')
  852.             GUICtrlSetState($RepInp, $GUI_FOCUS)
  853.         Case $TypClear
  854.             GUICtrlSetData($TypInp, '')
  855.             GUICtrlSetData($TypInp, $iniMask, '')
  856.             GUICtrlSetState($TypInp, $GUI_FOCUS)
  857.     EndSwitch
  858. EndFunc   ;==>_Clear
  859.  
  860. Func _DefaultMask()
  861.     GUICtrlSetData($TypInp, '')
  862.     $iniMask = $iniDef
  863.     GUICtrlSetData($TypInp, $iniMask, '') ; исправить
  864. EndFunc   ;==>_DefaultMask
  865.  
  866. Func _StopBut()
  867.     $TrStop = 1
  868. EndFunc   ;==>_StopBut
  869.  
  870. Func _GetFileList($sPath)
  871.     Local $j, $tmp, $vFileList
  872.     $vFileList = FileRead($sPath)
  873.     $tmp = StringRegExp($vFileList, '(?mi)^(.+?)\r?$', 3)
  874.     $tmp = UBound($tmp) ; количество строк с данными в файле
  875.     $vFileList = StringRegExp($vFileList, '(?mi)^([a-z]:\\.+?)\r?$', 3)
  876.     If @error Then
  877.         Return SetError(1) ; список пуст
  878.     Else
  879.         Local $aFileList[UBound($vFileList) + 1]
  880.         $j = 0
  881.         For $i = 0 To UBound($vFileList) - 1
  882.             If FileExists($vFileList[$i]) Then
  883.                 $j += 1
  884.                 $aFileList[$j] = $vFileList[$i]
  885.             EndIf
  886.         Next
  887.         If $j = 0 Then Return SetError(2) ; нет существующих файлов
  888.         $aFileList[0] = $j
  889.         ReDim $aFileList[$j + 1]
  890.         Return SetError(0, $tmp, $aFileList) ; Возвращаем список файлов
  891.     EndIf
  892. EndFunc   ;==>_GetFileList
  893.  
  894. ;!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i
  895. Func _Search()
  896.     Local $aExcAttrib, $file, $seatext, $tmp, $timer, $iTotalRep
  897.     $sOutList = ''
  898.     ToolTip('')
  899.     GUICtrlSetState($SeaBtn, $GUI_DISABLE)
  900.     GUICtrlSetState($RepBtn, $GUI_DISABLE)
  901.     GUICtrlSetData($StatusBar, '')
  902.     $SeaInp0 = GUICtrlRead($SeaInp)
  903.     $TypInp0 = GUICtrlRead($TypInp)
  904.     $PatInp0 = GUICtrlRead($PatInp)
  905.     $CRLF0 = GUICtrlRead($CRLF)
  906.     If $CharSet = -1 Then
  907.         $CharSetAuto = 1
  908.     Else
  909.         $CharSetAuto = 0
  910.     EndIf
  911.  
  912.     $tmp = _FO_IsDir($PatInp0)
  913.     If Not (@error Or $tmp) Then ; проверка, что указан список файлов или папка
  914.         $FileList = _GetFileList($PatInp0)
  915.         If @error Then
  916.             MsgBox(0, $LngErr, $LngMB1, 0, $hGui)
  917.             _Enable()
  918.             Return
  919.         EndIf
  920.         $g_iTrPathDir = 0 ; это файл
  921.     ElseIf $tmp Then
  922.         $g_iTrPathDir = 1 ; это папка
  923.     Else
  924.         MsgBox(0, $LngErr, $LngMB1, 0, $hGui) ; путь не верный
  925.         _Enable()
  926.         Return
  927.     EndIf
  928.  
  929.     If $SeaInp0 = '' Then ; проверка существования строки поиска
  930.         MsgBox(0, $LngErr, $LngMB2, 0, $hGui)
  931.         _Enable()
  932.         Return
  933.     EndIf
  934.     _saveini(0)
  935.     _ComboBox_InsertPath($PatInp0, $iniPath, $PatInp) ; вставка строки поиска в комбо при удачной проверке
  936.     ; Обработка переносов строк в поисковом запросе
  937.     If $CRLF0 Then
  938.         If StringLen($CRLF0) = 2 Then
  939.             $CRLF0 = StringSplit($CRLF0, '')
  940.             If $CRLF0[1] = $CRLF0[2] Then
  941.                 $SeaInp0 = StringReplace($SeaInp0, $CRLF0[1], @CRLF)
  942.             Else
  943.                 $SeaInp0 = StringReplace($SeaInp0, $CRLF0[1], @CR)
  944.                 $SeaInp0 = StringReplace($SeaInp0, $CRLF0[2], @LF)
  945.             EndIf
  946.         Else
  947.             $SeaInp0 = StringReplace($SeaInp0, $CRLF0, @CRLF)
  948.         EndIf
  949.     EndIf
  950.  
  951.     If $iniREx Then ; проверка валидности рег.выр.
  952.         StringRegExp('a', $SeaInp0)
  953.         If @error = 2 Then
  954.             MsgBox(0, $LngErr, $LngERg, 0, $hGui)
  955.             _Enable()
  956.             Return
  957.         EndIf
  958.     EndIf
  959.     GUICtrlSetData($StatusBar, $LngSb2)
  960.    
  961.     $timer = TimerInit() ; засекаем время
  962.     If $g_iTrPathDir Then
  963.         $Depth = 0
  964.         If $inisub = 1 Then $Depth = 125
  965.         If $iniExc Then
  966.             $Include = False
  967.         Else
  968.             $Include = True
  969.         EndIf
  970.         $FileList = _FO_FileSearch($PatInp0, _FO_CorrectMask($TypInp0), $Include, $Depth, 1, 1, 1, $sLocale) ; получаем список файлов
  971.         If @error Then
  972.             $timer = TimerDiff($timer)
  973.             If $timer < 9500 Then
  974.                 $timer = Round($timer / 1000, 1)
  975.             Else
  976.                 $timer = Ceiling($timer / 1000)
  977.             EndIf
  978.             GUICtrlSetData($StatusBar, $LngSb3 & ' ' & $timer & ' ' & $LngSbS)
  979.             _stat(0)
  980.             _Enable()
  981.             Return
  982.         EndIf
  983.     EndIf
  984.     If $FileList[0] > $iniLimitFile And MsgBox(4, $LngErr, $LngMB7 & $FileList[0] & $LngMB8 & $iniLimitFile & $LngMB9, 0, $hGui) = 7 Then
  985.         GUICtrlSetData($StatusBar, $LngCnl)
  986.         _stat(0)
  987.         _Enable()
  988.         Return
  989.     EndIf
  990.    
  991.     ; выполняем подсчёт объёма
  992.     Local $FileSize[$FileList[0] + 1] = [$FileList[0]] ; массив размеров файлов
  993.     $Size = 0
  994.     For $i = 1 To $FileList[0]
  995.         $FileSize[$i] = FileGetSize($FileList[$i])
  996.         $Size += $FileSize[$i]
  997.     Next
  998.     If $Size > $iniLimitSize * 1048576 And MsgBox(4, $LngErr, $LngMB10 & Round($Size / 1048576, 2) & $LngMB11 & $iniLimitSize & $LngMB12, 0, $hGui) = 7 Then
  999.         GUICtrlSetData($StatusBar, $LngCnl)
  1000.         _stat(0)
  1001.         _Enable()
  1002.         Return
  1003.     EndIf
  1004.     $SizeText = _ConvertFileSize($Size)
  1005.    
  1006.     $GuiPos = WinGetPos($hGui)
  1007.     ; выполнение с прогресс-баром
  1008.     $ProgressBar = GUICtrlCreateProgress($GuiPos[2] - 110, 233, 100, 16)
  1009.     GUICtrlSetColor(-1, 32250); цвет для классической темы
  1010.     GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  1011.    
  1012.     GUICtrlSetPos($StopBut, $GuiPos[2] - 90, 185, 80, 17)
  1013.     GUICtrlSetPos($StatusBar, 5, 233, $GuiPos[2] - 120, 15)
  1014.    
  1015.     If StringRight($PatInp0, 1) <> '\' Then $PatInp0 &= '\'
  1016.     ; выполняем поиск в цикле для всех типов файлов
  1017.     $LenPath = StringLen($PatInp0)
  1018.     $Size1 = 0
  1019.     $kol = 0
  1020.     $ExcldAttrib = StringRegExpReplace($ExcldAttrib, '(?i)[^RASHNOT]', '') ; удаление из набора атрибутов "левых" символов
  1021.     $aExcAttrib = StringSplit($ExcldAttrib, '')
  1022.     HotKeySet("{ESC}", "_StopBut")
  1023.     Dim $aSearch[1][2] = [[$PatInp0]]
  1024.     If $iniOutRes Then
  1025.         $p = ' *'
  1026.     Else
  1027.         $p = ' *p'
  1028.     EndIf
  1029.     For $i = 1 To $FileList[0]
  1030.         If $TrStop Then
  1031.             GUICtrlSetData($StatusBar, $LngCnl)
  1032.             GUICtrlDelete($ProgressBar)
  1033.             GUICtrlSetPos($StatusBar, 5, 233, $GuiPos[2] - 10, 15)
  1034.             GUICtrlSetPos($StopBut, -20, -20, 1, 1)
  1035.             _stat(0)
  1036.             $TrStop = 0
  1037.             _Enable()
  1038.             Return
  1039.         EndIf
  1040.         $Size1 += $FileSize[$i]
  1041.         If $FileSize[$i] > $iniErrSize Then ContinueLoop
  1042.         If $g_iTrPathDir Then
  1043.             $seafile = StringTrimLeft($FileList[$i], $LenPath)
  1044.         Else
  1045.             $seafile = $FileList[$i]
  1046.         EndIf
  1047.        
  1048.         GUICtrlSetData($StatusBar, '(' & $SizeText & ') ' & $FileList[0] & ' | ' & $i & ' | ' & $kol & ' | ' & $iTotalRep & ' | ' & $seafile)
  1049.        
  1050.         $FileAttrib = FileGetAttrib($FileList[$i])
  1051.         For $j = 1 To $aExcAttrib[0]
  1052.             If StringInStr($FileAttrib, $aExcAttrib[$j]) Then ContinueLoop 2 ; если хоть один из исключаемых атрибутов в наличии, то пропускаем файл
  1053.         Next
  1054.         If $CharSetAuto Then
  1055.             $CharSet = FileGetEncoding($FileList[$i])
  1056.         Else
  1057.             If $CharSet <> 16 And $CharSet <> FileGetEncoding($FileList[$i]) Then ContinueLoop
  1058.         EndIf
  1059.  
  1060.         $file = FileOpen($FileList[$i], $CharSet)
  1061.         If $file = -1 Then ContinueLoop
  1062.         $seatext = FileRead($file)
  1063.         FileClose($file)
  1064.        
  1065.         If $iniOutRes Then
  1066.             If $iniREx Then
  1067.                 $s0 = _StringInStrMultiR($seatext, $SeaInp0, $seafile)
  1068.             Else
  1069.                 $s0 = _StringInStrMulti($seatext, $SeaInp0, $iniAa, $seafile)
  1070.             EndIf
  1071.             $iTotalRep += $s0
  1072.         Else
  1073.             If $iniREx Then
  1074.                 $s0 = StringRegExp($seatext, $SeaInp0)
  1075.             Else
  1076.                 $s0 = StringInStr($seatext, $SeaInp0, $iniAa)
  1077.             EndIf
  1078.         EndIf
  1079.        
  1080.         If $s0 Then
  1081.             $kol += 1
  1082.             $sOutList &= $seafile & $p & $s0 & $sep
  1083.         EndIf
  1084.         GUICtrlSetData($ProgressBar, Ceiling($Size1 / $Size * 100))
  1085.     Next
  1086.     HotKeySet("{ESC}")
  1087.    
  1088.     GUICtrlDelete($ProgressBar)
  1089.     GUICtrlSetPos($StatusBar, 5, 233, $GuiPos[2] - 10, 15)
  1090.  
  1091.     $timer = TimerDiff($timer)
  1092.     If $timer < 9500 Then
  1093.         $timer = Round($timer / 1000, 1)
  1094.     Else
  1095.         $timer = Ceiling($timer / 1000)
  1096.     EndIf
  1097.  
  1098.     If $sOutList = '' Then
  1099.         GUICtrlSetData($StatusBar, '(' & $SizeText & ') ' & $FileList[0] & ' | ' & $FileList[0] & ' | ' & $kol & ' | ' & $iTotalRep & '   ' & $LngSb3 & ' ' & $timer & ' ' & $LngSbS)
  1100.         GUICtrlSetData($Out, '')
  1101.         _stat(0)
  1102.     Else
  1103.         GUICtrlSetData($StatusBar, '(' & $SizeText & ') ' & $FileList[0] & ' | ' & $FileList[0] & ' | ' & $kol & ' | ' & $iTotalRep & '   ' & $LngSb4 & ' ' & $timer & ' ' & $LngSbS)
  1104.         GUICtrlSetData($Out, '')
  1105.         GUICtrlSetData($Out, $sOutList)
  1106.         _stat(1)
  1107.         ControlFocus($hGui, '', $Out)
  1108.        
  1109.         ; автоматически выделить
  1110.         $Tr_View = False
  1111.         ControlCommand($hGui, "", $Out, "SetCurrentSelection", 0)
  1112.         ; If GUICtrlSendMsg($Out, $LB_GETCOUNT, 0, 0) = 1 Then GUICtrlSendMsg($Out, $LB_SETCURSEL, 0, 0) ; автоматически выделить если один пункт
  1113.     EndIf
  1114.     If $CharSetAuto Then $CharSet = -1
  1115.     $Tr_Sea = 1
  1116.     $Tr_ViewT = 1000 ; любое число не совпадающее с выбором индекса в лисбокс
  1117.     GUICtrlSetPos($StopBut, -20, -20, 1, 1)
  1118.     _Enable()
  1119. EndFunc   ;==>_Search
  1120.  
  1121. ; Func _View()
  1122. ; If $Tr_Sea  Then
  1123. ; Local $i=GUICtrlSendMsg($Out, $LB_GETCURSEL, 0, 0)
  1124. ; If $i <> -1 Then MsgBox(0, 'Найденное в ' &$aSearch[$i+1][0], $aSearch[$i+1][1])
  1125. ; EndIf
  1126. ; EndFunc
  1127.  
  1128. Func _StringInStrMulti($seatext, $SeaInp0, $iniAa, $file)
  1129.     Local $end, $end2, $FindBlok, $long, $pos, $re, $str, $str2
  1130.     Local $s0 = 0, $sep = Chr(0) & Chr(1) & Chr(0)
  1131.     $long = StringLen($SeaInp0)
  1132.     $pos = 1 - $long
  1133.     While 1
  1134.         $pos = StringInStr($seatext, $SeaInp0, $iniAa, 1, $pos + $long)
  1135.         If $pos = 0 Then ExitLoop
  1136.         $s0 += 1
  1137.         $str = StringInStr($seatext, @LF, 0, -1, $pos) ; поиск ближайших символов переноса строки
  1138.         $str2 = StringInStr($seatext, @CR, 0, -1, $pos)
  1139.         If $str < $str2 Then $str = $str2
  1140.         $end = StringInStr($seatext, @CR, 0, 1, $pos + $long)
  1141.         $end2 = StringInStr($seatext, @LF, 0, 1, $pos + $long)
  1142.         If $end = 0 Then $end = $end2 ; корректировки при отсутствии символов
  1143.         If $end2 = 0 Then $end2 = $end
  1144.         If $end > $end2 Then $end = $end2
  1145.         If $end < $pos Or $end - $pos - $long > 40 Then $end = $pos + $long + 40
  1146.         If $pos - $str > 40 Then $str = $pos - 40
  1147.         $FindBlok = StringMid($seatext, $str + 1, $end - $str - 1)
  1148.         ; If $long > 30 Then $FindBlok=StringReplace($FindBlok, $SeaInp0, '|-pattern-|')
  1149.         ; $line=UBound(StringRegExp(StringLeft($seatext, $str), '(\r\n|\r|\n)', 3))+1 ; дорого обходится номер строки
  1150.         ; StringReplace(StringLeft($seatext, $str), @CRLF, '') ; дорого обходится номер строки, но в 3 раза быстрее регулярки
  1151.         ; $re[$s0][0]=$pos
  1152.         $re &= $FindBlok & $sep
  1153.     WEnd
  1154.     If $s0 Then
  1155.         $i = UBound($aSearch)
  1156.         ReDim $aSearch[$i + 1][2]
  1157.         $aSearch[$i][0] = $file & ' - ' & $s0
  1158.         $aSearch[$i][1] = StringTrimRight($re, 3)
  1159.     EndIf
  1160.     Return $s0
  1161. EndFunc   ;==>_StringInStrMulti
  1162.  
  1163. Func _StringInStrMultiR($seatext, $SeaInp0, $file)
  1164.     Local $aR, $end, $end2, $FindBlok, $long, $pos, $str, $str2, $tmp
  1165.     Local $s0 = 0
  1166.     $aR = StringRegExp($seatext, $SeaInp0, 4)
  1167.     If @error Then Return 0
  1168.     $s0 = UBound($aR)
  1169.     Local $re[$s0][3]
  1170.     $pos = 0
  1171.     For $i = 0 To $s0 - 1
  1172.         $tmp = $aR[$i]
  1173.         $aR[$i] = $tmp[0]
  1174.         $pos = StringInStr($seatext, $aR[$i], 1, 1, $pos + 1)
  1175.         If $pos = 0 Then ContinueLoop
  1176.         $long = StringLen($aR[$i])
  1177.         $str = StringInStr($seatext, @LF, 0, -1, $pos)
  1178.         $str2 = StringInStr($seatext, @CR, 0, -1, $pos)
  1179.         If $str < $str2 Then $str = $str2
  1180.         $end = StringInStr($seatext, @CR, 0, 1, $pos + $long)
  1181.         $end2 = StringInStr($seatext, @LF, 0, 1, $pos + $long)
  1182.         If $end = 0 Then $end = $end2
  1183.         If $end2 = 0 Then $end2 = $end
  1184.         If $end > $end2 Then $end = $end2
  1185.         If $end < $pos Or $end - $pos - $long > 40 Then $end = $pos + $long + 40
  1186.         If $pos - $str > 40 Then $str = $pos - 40
  1187.         $FindBlok = StringMid($seatext, $str + 1, $end - $str - 1)
  1188.         If $long > 30 Then
  1189.             $re[$i][0] = $pos
  1190.             $re[$i][1] = $aR[$i]
  1191.         Else
  1192.             $re[$i][0] = $pos
  1193.             $re[$i][1] = $aR[$i]
  1194.             $re[$i][2] = $FindBlok
  1195.         EndIf
  1196.     Next
  1197.     If $s0 Then
  1198.         $i = UBound($aSearch)
  1199.         ReDim $aSearch[$i + 1][2]
  1200.         $aSearch[$i][0] = $file & ' - ' & $s0
  1201.         $aSearch[$i][1] = $re
  1202.     EndIf
  1203.     Return $s0
  1204. EndFunc   ;==>_StringInStrMultiR
  1205.  
  1206. Func _ListBox()
  1207.     Local $i, $j, $kol, $sep, $txtres, $re
  1208.     If $Tr_Sea And $iniOutRes And UBound($aSearch) > 1 Then
  1209.         $i = GUICtrlSendMsg($Out, $LB_GETCURSEL, 0, 0)
  1210.         If $Tr_ViewT = $i And $i <> -1 Then
  1211.             If $Tr_View = True Then
  1212.                 $Tr_View = False
  1213.                 ToolTip('')
  1214.             Else
  1215.                 $Tr_View = True
  1216.             EndIf
  1217.         EndIf
  1218.         If $Tr_View = True And $i <> -1 Then
  1219.            
  1220.             $sep = Chr(0) & Chr(1) & Chr(0)
  1221.             $kol = 0
  1222.             If $iniREx Then
  1223.                 $txtres &= $aSearch[$i + 1][0] & @CRLF & @CRLF
  1224.                 $kol += 1
  1225.                 $re = $aSearch[$i + 1][1]
  1226.                 For $j = 0 To UBound($re) - 1
  1227.                     If $re[$j][2] Then
  1228.                         $txtres &= $j + 1 & ' ---| ' & $re[$j][1] & @CRLF & ' -->| ' & $re[$j][2] & @CRLF
  1229.                     Else
  1230.                         $txtres &= $j + 1 & ' -->| ' & $re[$j][1] & @CRLF
  1231.                     EndIf
  1232.                     $kol += 1
  1233.                     If $kol > 70 Then ExitLoop
  1234.                 Next
  1235.             Else
  1236.                 $txtres &= $aSearch[$i + 1][0] & @CRLF & @CRLF
  1237.                 $kol += 1
  1238.                 $re = StringSplit($aSearch[$i + 1][1], $sep, 1)
  1239.                 For $j = 1 To $re[0]
  1240.                     $txtres &= $j & ' -->| ' & $re[$j] & @CRLF
  1241.                     $kol += 1
  1242.                     If $kol > 70 Then ExitLoop ; обрезка если строк более 70 (на экран более не поместится, а подсказка глючит)
  1243.                 Next
  1244.             EndIf
  1245.             $kol = Number(StringTrimLeft($aSearch[$i + 1][0], StringInStr($aSearch[$i + 1][0], ' - ') + 2))
  1246.             ; MsgBox(0, '1', $kol)
  1247.             If $kol > 70 Then $txtres = StringLeft($txtres, StringInStr($txtres, @CRLF, 0, 70) - 1) & @CRLF & '...'
  1248.             $kol = StringLen($txtres)
  1249.             If $kol > 10000 Then $txtres = StringLeft($txtres, 10000) ; обрезка если символов более 10000
  1250.             ; Заменяет нечитаемые символы квадратами (без них вывод обрезается по первому нечитаемому символу)
  1251.             $txtres = StringRegExpReplace($txtres, '[\000-\007\010\016\017\020-\027\030-\037\177]', ChrW('0x25A1'))
  1252.             ToolTip($txtres, -1, -1, StringTrimLeft($aSearch[$i + 1][0], StringInStr($aSearch[$i + 1][0], '\', 0, -1)) & '   (F4 - ' & $LngTTp & ')')
  1253.         EndIf
  1254.         $Tr_ViewT = $i
  1255.     EndIf
  1256. EndFunc   ;==>_ListBox
  1257.  
  1258. ; Обработка старого формата массива в буфер обмена (восстановить и переделать в случае проблем с RichEdit)
  1259. ; Func _Res_Byfer_Old()
  1260. ; If $Tr_Sea And UBound($aSearch)>1 Then
  1261. ; Local $tmp=''
  1262. ; For $i = 0 to UBound($aSearch)-1
  1263. ; $tmp&=$aSearch[$i][0]&@CRLF&$aSearch[$i][1]&@CRLF&@CRLF
  1264. ; Next
  1265. ; ClipPut($tmp)
  1266. ; EndIf
  1267. ; EndFunc
  1268.  
  1269. Func _Res_Byfer()
  1270.     Local $aRicheditTags, $Combo_Jump0, $ComboData, $EditBut, $Find, $i, $j, $msg, $pos = 0, $re, $Rsep, $sRTFCode = '', $StrBut, $tmp, $pos
  1271.     If Not ($Tr_Sea And UBound($aSearch) > 1) Then
  1272.         MsgBox(0, $LngErr, $LngMB20)
  1273.         Return
  1274.     EndIf
  1275.     $Rsep = Chr(0) & Chr(1) & Chr(0)
  1276.     Opt("GUIOnEventMode", 0)
  1277.    
  1278.     GUISetState(@SW_DISABLE, $hGui)
  1279.     If Not $RichPos[0] Then
  1280.         $RichPos[4] = Number(IniRead($Ini, 'Set', 'RichMax', ''))
  1281.         $RichPos[0] = Number(IniRead($Ini, 'Set', 'RichW', '790'))
  1282.         $RichPos[1] = Number(IniRead($Ini, 'Set', 'RichH', '500'))
  1283.         $RichPos[2] = IniRead($Ini, 'Set', 'RichL', '')
  1284.         $RichPos[3] = IniRead($Ini, 'Set', 'RichT', '')
  1285.         If $RichPos[0] < 200 Then $RichPos[0] = 200
  1286.         If $RichPos[1] < 200 Then $RichPos[1] = 200
  1287.         _SetCoor($RichPos)
  1288.     EndIf
  1289.    
  1290.     $Gui1 = GUICreate($aSearch[0][0], $RichPos[0], $RichPos[1], $RichPos[2], $RichPos[3], BitOR($WS_OVERLAPPEDWINDOW, $WS_POPUP, $WS_CLIPCHILDREN), -1, $hGui)
  1291.     If Not @Compiled Then GUISetIcon($AutoItExe, 1)
  1292.     $hRichEdit = _GUICtrlRichEdit_Create($Gui1, "", 5, 5, $RichPos[0] - 10, $RichPos[1] - 40, BitOR($ES_MULTILINE, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL))
  1293.     _GUICtrlRichEdit_PauseRedraw($hRichEdit) ; приостановить перерисовку
  1294.  
  1295.     ; ================================
  1296.     ; изменяет любые теги RichEdit, которые находятся в коде.
  1297.     $aRicheditTags = StringRegExp($sRTFCode, '\\+par|\\+tab|\\+cf\d+', 3)
  1298.     If Not @error Then
  1299.         $aRicheditTags = _ArrayRemoveDuplicates($aRicheditTags)
  1300.         For $i = 0 To UBound($aRicheditTags) - 1
  1301.             $sRTFCode = StringReplace($sRTFCode, $aRicheditTags[$i], StringReplace($aRicheditTags[$i], '\', '#', 0, 2), 0, 2)
  1302.         Next
  1303.     EndIf
  1304.     ; =================================
  1305.  
  1306.     ; Формирование кода RTF из результатов поиска находящихся в массиве
  1307.     If $Tr_Sea And UBound($aSearch) > 1 Then
  1308.         If $iniREx Then ; если регулярное выражение
  1309.             For $i = 1 To UBound($aSearch) - 1
  1310.                 $ComboData &= $sep & $i & '. ' & $aSearch[$i][0] ; для комбо
  1311.                 $sRTFCode &= @CRLF & Chr(1) & 'cf2 ' & $i & '. ' & $aSearch[$i][0] & Chr(1) & 'cf0 ' & @CRLF
  1312.                 $re = $aSearch[$i][1]
  1313.                 For $j = 0 To UBound($re) - 1
  1314.                     If $re[$j][2] Then
  1315.                         $sRTFCode &= Chr(1) & 'cf3 ' & $j + 1 & ' -->| ' & Chr(1) & 'cf0 ' & StringReplace($re[$j][2], $re[$j][1], Chr(1) & 'cf1 ' & $re[$j][1] & Chr(1) & 'cf0 ') & @CRLF
  1316.                     Else
  1317.                         $sRTFCode &= Chr(1) & 'cf3 ' & $j + 1 & ' -->| ' & Chr(1) & 'cf0 ' & Chr(1) & 'cf1 ' & $re[$j][1] & Chr(1) & 'cf0 ' & @CRLF
  1318.                     EndIf
  1319.                 Next
  1320.             Next
  1321.         Else ; иначе текст
  1322.             For $i = 1 To UBound($aSearch) - 1
  1323.                 $ComboData &= $sep & $i & '. ' & $aSearch[$i][0]
  1324.                 $sRTFCode &= @CRLF & Chr(1) & 'cf2 ' & $i & '. ' & $aSearch[$i][0] & Chr(1) & 'cf0 ' & @CRLF
  1325.                 $re = StringReplace($aSearch[$i][1], $SeaInp0, Chr(1) & 'cf1 ' & $SeaInp0 & Chr(1) & 'cf0 ')
  1326.                 $re = StringSplit($re, $Rsep, 1)
  1327.                 For $j = 1 To $re[0]
  1328.                     $sRTFCode &= Chr(1) & 'cf3 ' & $j & ' -->| ' & Chr(1) & 'cf0 ' & $re[$j] & @CRLF
  1329.                 Next
  1330.             Next
  1331.         EndIf
  1332.     EndIf
  1333.     $sRTFCode = StringTrimRight($sRTFCode, 2)
  1334.  
  1335.     ; escape-символы для  RTF кода. Экранируем все спецсимволы, делая их литеральными (как есть)
  1336.     $sRTFCode = StringReplace($sRTFCode, '\', '\\', 0, 2)
  1337.     $sRTFCode = StringReplace($sRTFCode, '{', '\{', 0, 2)
  1338.     $sRTFCode = StringReplace($sRTFCode, '}', '\}', 0, 2)
  1339.     $sRTFCode = StringReplace($sRTFCode, @CR, '\par ' & @CRLF, 0, 2)
  1340.     $sRTFCode = StringReplace($sRTFCode, @TAB, '\tab ', 0, 2)
  1341.  
  1342.     $sRTFCode = StringReplace($sRTFCode, Chr(1), '\', 0, 2)
  1343.     ; замена нечитаемых символов вопросами, иначе текст не вставляется в RichEdit после первого попавшегося нечитаемого символа
  1344.     $sRTFCode = StringRegExpReplace($sRTFCode, '[\000-\007\010\016\017\020-\027\030-\037\177]', ChrW('0x25A1'))
  1345.  
  1346.     __RESH_HeaderFooter($sRTFCode) ; Создать/присоединить шапку RichEdit. Текст будет форматированный
  1347.  
  1348.     ; ================================
  1349.     ; $Tmp=''
  1350.     ; For $i = 1 To StringLen($sRTFCode)
  1351.     ; $Tmp &=' '
  1352.     ; Next
  1353.     ; _GUICtrlRichEdit_SetText($hRichEdit, $Tmp) ; Вставляет пустой текст, чтобы расширить вмещаемость RichEdit
  1354.     ; ================================
  1355.     _GUICtrlRichEdit_SetLimitOnText($hRichEdit, StringLen($sRTFCode)) ; увеличивает лимит, чтобы вместить весь текст
  1356.  
  1357.     _GUICtrlRichEdit_SetText($hRichEdit, $sRTFCode) ; Вставляет форматированный текст
  1358.     ; _GUICtrlRichEdit_GotoCharPos($hRichEdit, 0) ; Перейти к началу
  1359.     _GUICtrlRichEdit_ResumeRedraw($hRichEdit) ; Возобновить перерисовку
  1360.    
  1361.     $Find = _GUICtrlRichEdit_FindText($hRichEdit, @CR & '1 -->| ')
  1362.     If Not @error And $Find <> -1 Then _GUICtrlRichEdit_GotoCharPos($hRichEdit, $Find + 3) ; перемещает курсор в найденную позицию
  1363.    
  1364.     $Btn_Back = GUICtrlCreateButton($LngBck, 10, $RichPos[1] - 30, 120, 24)
  1365.     $Btn_Next = GUICtrlCreateButton($LngNxt, 140, $RichPos[1] - 30, 120, 24)
  1366.     $Combo_Jump = GUICtrlCreateCombo('', 270, $RichPos[1] - 28, 510, -1, $CBS_DROPDOWNLIST + $WS_VSCROLL) ; $CBS_OEMCONVERT
  1367.     GUICtrlSetData($Combo_Jump, $ComboData, '')
  1368.  
  1369.     GUISetState(@SW_SHOW, $Gui1)
  1370.     GUIRegisterMsg(0x05, "_WM_SIZE_RichEdit")
  1371.     If $RichPos[4] Then GUISetState(@SW_MAXIMIZE, $Gui1)
  1372.     While 1
  1373.         Switch GUIGetMsg()
  1374.             Case $GUI_EVENT_MAXIMIZE
  1375.                 $RichPos[4] = 1
  1376.             Case $GUI_EVENT_RESTORE
  1377.                 $RichPos[4] = 0
  1378.                 ; Case $GUI_EVENT_RESIZED
  1379.                 ; $ClientSz = WinGetClientSize($hGui)
  1380.                 ; $RichPos[0] = $ClientSz[0]
  1381.                 ; $RichPos[1] = $ClientSz[1]
  1382.             Case $Combo_Jump
  1383.                 $Combo_Jump0 = GUICtrlRead($Combo_Jump)
  1384.                 If $Combo_Jump0 Then
  1385.                     _GUICtrlRichEdit_GotoCharPos($hRichEdit, -1)
  1386.                     $Find = _GUICtrlRichEdit_FindText($hRichEdit, $Combo_Jump0, False)
  1387.                     If Not @error And $Find <> -1 Then
  1388.                         _GUICtrlRichEdit_GotoCharPos($hRichEdit, $Find)
  1389.                         $Find = _GUICtrlRichEdit_FindText($hRichEdit, @CR & '1 -->| ')
  1390.                         If Not @error And $Find <> -1 Then
  1391.                             _GUICtrlRichEdit_GotoCharPos($hRichEdit, $Find + 3)
  1392.                             _GUICtrlRichEdit_ScrollToCaret($hRichEdit)
  1393.                         EndIf
  1394.                     EndIf
  1395.                 EndIf
  1396.             Case $Btn_Next
  1397.                 $Find = _GUICtrlRichEdit_FindText($hRichEdit, @CR & '1 -->| ')
  1398.                 If Not @error And $Find <> -1 Then
  1399.                     _GUICtrlRichEdit_GotoCharPos($hRichEdit, $Find + 3) ; перемещает курсор в найденную позицию
  1400.                     _GUICtrlRichEdit_ScrollToCaret($hRichEdit) ; прокручивает к курсору
  1401.                 ElseIf $Find = -1 Then
  1402.                     _GUICtrlRichEdit_GotoCharPos($hRichEdit, 0) ; перемещает курсор в найденную позицию
  1403.                     $Find = _GUICtrlRichEdit_FindText($hRichEdit, @CR & '1 -->| ')
  1404.                     If Not @error And $Find <> -1 Then
  1405.                         _GUICtrlRichEdit_GotoCharPos($hRichEdit, $Find + 3)
  1406.                         _GUICtrlRichEdit_ScrollToCaret($hRichEdit) ; прокручивает к курсору
  1407.                     EndIf
  1408.                 EndIf
  1409.             Case $Btn_Back
  1410.                 $Find = _GUICtrlRichEdit_FindText($hRichEdit, @CR & '1 -->| ', False)
  1411.                 If Not @error And $Find <> -1 Then
  1412.                     _GUICtrlRichEdit_GotoCharPos($hRichEdit, $Find + 3) ; перемещает курсор в найденную позицию
  1413.                     _GUICtrlRichEdit_ScrollToCaret($hRichEdit) ; прокручивает к курсору
  1414.                     _GUICtrlRichEdit_ScrollLines($hRichEdit, -3)
  1415.                 ElseIf $Find = -1 Then
  1416.                     _GUICtrlRichEdit_GotoCharPos($hRichEdit, -1) ; перемещает курсор в найденную позицию
  1417.                     $Find = _GUICtrlRichEdit_FindText($hRichEdit, @CR & '1 -->| ', False)
  1418.                     If Not @error And $Find <> -1 Then
  1419.                         _GUICtrlRichEdit_GotoCharPos($hRichEdit, $Find + 3)
  1420.                         _GUICtrlRichEdit_ScrollToCaret($hRichEdit) ; прокручивает к курсору
  1421.                     EndIf
  1422.                 EndIf
  1423.                 ; Case $GUI_EVENT_MINIMIZE
  1424.                 ; GUISetState(@SW_MINIMIZE, $hGui)
  1425.                 ; ExitLoop
  1426.             Case -3
  1427.                 ExitLoop
  1428.         EndSwitch
  1429.     WEnd
  1430.     _GUICtrlRichEdit_Destroy($hRichEdit)
  1431.     GUIRegisterMsg(0x05, '')
  1432.     If Not $RichPos[4] Then
  1433.         $ClientSz = WinGetClientSize($Gui1)
  1434.         If $ClientSz[0] > 180 And $ClientSz[1] > 150 Then
  1435.             $RichPos[0] = $ClientSz[0]
  1436.             $RichPos[1] = $ClientSz[1]
  1437.             $aGuiPos = WinGetPos($Gui1)
  1438.             $RichPos[2] = $aGuiPos[0]
  1439.             $RichPos[3] = $aGuiPos[1]
  1440.         EndIf
  1441.         ; MsgBox(0, 'Сообщение', $RichPos[0] &@CRLF&$RichPos[1] &@CRLF&$RichPos[2] &@CRLF&$RichPos[3])
  1442.     EndIf
  1443.     GUISetState(@SW_ENABLE, $hGui)
  1444.     GUIDelete($Gui1)
  1445.     Opt("GUIOnEventMode", 1)
  1446. EndFunc   ;==>_Res_Byfer
  1447.  
  1448. Func _WM_SIZE_RichEdit($hwnd, $msg, $wParam, $lParam)
  1449.     $w = BitAND($lParam, 0xFFFF) ; _WinAPI_LoWord
  1450.     $h = BitShift($lParam, 16) ; _WinAPI_HiWord
  1451.     _WinAPI_MoveWindow($hRichEdit, 5, 5, $w - 10, $h - 40)
  1452.     GUICtrlSetPos($Btn_Back, 10, $h - 30)
  1453.     GUICtrlSetPos($Btn_Next, 140, $h - 30)
  1454.     GUICtrlSetPos($Combo_Jump, 270, $h - 28, $w - 280)
  1455.     Return 0
  1456. EndFunc   ;==>_WM_SIZE_RichEdit
  1457.  
  1458. ; Присоединение шапки RTF к тексту-коду
  1459. Func __RESH_HeaderFooter(ByRef $sCode)
  1460.     Local $g_RESH_sColorTable = _
  1461.             '\red255\green0\blue0;' & _ ; красный
  1462.             '\red0\green0\blue255;' & _ ; синий
  1463.             '\red99\green99\blue99;' ; серый
  1464.     $sCode = "{\rtf\ansi\ansicpg1251\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Arial;}}" & _ ; шрифт Ариал
  1465.             "{\colortbl;" & $g_RESH_sColorTable & "}{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\f0\fs18" & _ ; размер шрифта 18
  1466.             StringStripWS($sCode, 2) & '}'
  1467. EndFunc   ;==>__RESH_HeaderFooter
  1468.  
  1469. Func _ArrayRemoveDuplicates(Const ByRef $aArray)
  1470.     If Not IsArray($aArray) Then Return SetError(1, 0, 0)
  1471.     Local $oSD = ObjCreate("Scripting.Dictionary")
  1472.     For $i In $aArray
  1473.         $oSD.Item($i); shown by wraithdu
  1474.     Next
  1475.     Return $oSD.Keys()
  1476. EndFunc   ;==>_ArrayRemoveDuplicates
  1477. ; ============================
  1478.  
  1479. ;!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i
  1480. ; Однократное выполнение операции (не сценарий)
  1481. Func _ReplaceOnce()
  1482.     Local $tmpData, $TrR, $TrH, $TrS, $aExcAttrib, $i, $j, $file, $Size2, $iTotalRep
  1483.     $sOutList = ''
  1484.     ToolTip('')
  1485.     GUICtrlSetState($SeaBtn, $GUI_DISABLE)
  1486.     GUICtrlSetState($RepBtn, $GUI_DISABLE)
  1487.     GUICtrlSetData($StatusBar, '')
  1488.     $SeaInp0 = GUICtrlRead($SeaInp)
  1489.     $RepInp0 = GUICtrlRead($RepInp)
  1490.     $TypInp0 = GUICtrlRead($TypInp)
  1491.     $PatInp0 = GUICtrlRead($PatInp)
  1492.     $CRLF0 = GUICtrlRead($CRLF)
  1493.     If $CharSet = -1 Then
  1494.         $CharSetAuto = 1
  1495.     Else
  1496.         $CharSetAuto = 0
  1497.     EndIf
  1498.  
  1499.     ; проверки-защиты
  1500.     If $SeaInp0 == $RepInp0 And (StringRight($RepInp0, 4) <> '.srt' Or Not FileExists($RepInp0)) Then ; ошибка входных данных
  1501.         MsgBox(0, $LngErr, $LngMB3, 0, $hGui)
  1502.         _Enable()
  1503.         Return
  1504.     EndIf
  1505.     If $SeaInp0 = $RepInp0 And StringRight($RepInp0, 4) = '.srt' And FileExists($RepInp0) Then ; если сценарий, то
  1506.         If $aTextScr Then ; если сценарий не пустой
  1507.             Return _ReplaceLoop($RepInp0) ; вызов обработки сценария
  1508.         Else
  1509.             ; $TrScr = 0
  1510.             MsgBox(0, $LngErr, $LngMB4, 0, $hGui)
  1511.             _Enable()
  1512.             Return
  1513.         EndIf
  1514.     EndIf
  1515.  
  1516.     $tmp = _FO_IsDir($PatInp0)
  1517.     If Not (@error Or $tmp) Then ; проверка, что указан список файлов или папка
  1518.         $FileList = _GetFileList($PatInp0)
  1519.         If @error Then
  1520.             MsgBox(0, $LngErr, $LngMB1, 0, $hGui)
  1521.             _Enable()
  1522.             Return
  1523.         EndIf
  1524.         $g_iTrPathDir = 0 ; это файл
  1525.     ElseIf $tmp Then
  1526.         $g_iTrPathDir = 1 ; это папка
  1527.     Else
  1528.         MsgBox(0, $LngErr, $LngMB1, 0, $hGui) ; путь не верный
  1529.         _Enable()
  1530.         Return
  1531.     EndIf
  1532.  
  1533.     If $SeaInp0 = '' Then
  1534.         MsgBox(0, $LngErr, $LngMB2, 0, $hGui)
  1535.         _Enable()
  1536.         Return
  1537.     EndIf
  1538.     If $CharSet = 16 And Not $iniREx Then
  1539.         $SeaInp0 = StringUpper($SeaInp0)
  1540.         If Mod(StringLen($SeaInp0), 2) <> Mod(StringLen($RepInp0), 2) Then
  1541.             MsgBox(0, $LngErr, $LngMB19, 0, $hGui)
  1542.             _Enable()
  1543.             Return
  1544.         EndIf
  1545.     EndIf
  1546.  
  1547.     GUICtrlSetData($StatusBar, $LngSb5)
  1548.     _saveini(0)
  1549.     _ComboBox_InsertPath($PatInp0, $iniPath, $PatInp)
  1550.     ; Выполняем функции, которые не ресурсоёмкие и на раннем этапе могут возвратить ошибку без ожидания поиска файлов
  1551.     ; Обработка переносов строк в поисковом запросе
  1552.     If $CRLF0 Then _CRLF($CRLF0, $SeaInp0, $RepInp0)
  1553.  
  1554.     If $iniREx Then ; проверка валидности рег.выр.
  1555.         StringRegExp('a', $SeaInp0)
  1556.         If @error = 2 Then
  1557.             MsgBox(0, $LngErr, $LngERg, 0, $hGui)
  1558.             _Enable()
  1559.             Return
  1560.         EndIf
  1561.     EndIf
  1562.  
  1563.     ; делаем резервные копии
  1564.     ; If $iniBAK Then
  1565.     ; $BackUpPath=_BackUp($iniBAK)&StringRegExpReplace($Path, '^(.*\\)(.*?\\)$', '\2')
  1566.     ; If @error Then Return
  1567.     ; EndIf
  1568.    
  1569.     If StringRight($PatInp0, 1) <> '\' Then $PatInp0 &= '\'
  1570.     ; делаем резервные копии... определяем путь и возможность резервирования
  1571.     If $iniBAK = 1 Then
  1572.         If $iniPathBackup = '' Then
  1573.             $tmp = @ScriptDir & '\Backup\'
  1574.         Else
  1575.             $tmp = $iniPathBackup
  1576.         EndIf
  1577.         If StringRegExp($tmp, '(?i)^[a-z]:[^/:*?"<>|]*$') And StringInStr('|Removable|Fixed|', '|' & DriveGetType(StringLeft($tmp, 1) & ':\') & '|') And Not StringInStr($tmp, '\\') Then
  1578.             If $iniPathBackup And StringRight($iniPathBackup, 1) <> '\' Then $iniPathBackup &= '\'
  1579.             $BackUpPath = $tmp
  1580.         Else
  1581.             If MsgBox(4, $LngErr, $LngMB17, 0, $hGui) = 7 Then
  1582.                 _Enable()
  1583.                 Return
  1584.             EndIf
  1585.         EndIf
  1586.         $BackUpPath &= @YEAR & "." & @MON & "." & @MDAY & "_" & @HOUR & "." & @MIN & "." & @SEC & "_" & StringRegExpReplace($PatInp0, '^(.*\\)(.*?\\)$', '\2')
  1587.     EndIf
  1588.  
  1589.     ; засекаем время
  1590.     $timer = TimerInit()
  1591.     If $g_iTrPathDir Then
  1592.         $Depth = 0
  1593.         If $inisub = 1 Then $Depth = 125
  1594.         If $iniExc Then
  1595.             $Include = False
  1596.         Else
  1597.             $Include = True
  1598.         EndIf
  1599.         $FileList = _FO_FileSearch($PatInp0, _FO_CorrectMask($TypInp0), $Include, $Depth, 1, 1, 1, $sLocale) ; получаем список файлов
  1600.         If @error Then
  1601.             GUICtrlSetData($StatusBar, $LngSb3 & ' ' & Ceiling(TimerDiff($timer) / 1000) & ' ' & $LngSbS)
  1602.             _stat(0)
  1603.             _Enable()
  1604.             Return
  1605.         EndIf
  1606.     EndIf
  1607.     If $FileList[0] > $iniLimitFile And MsgBox(4, $LngErr, $LngMB7 & $FileList[0] & $LngMB8 & $iniLimitFile & $LngMB9, 0, $hGui) = 7 Then
  1608.         GUICtrlSetData($StatusBar, $LngCnl)
  1609.         _stat(0)
  1610.         _Enable()
  1611.         Return
  1612.     EndIf
  1613.    
  1614.     ; выполняем подсчёт объёма
  1615.     Local $FileSize[$FileList[0] + 1] = [$FileList[0]] ; массив размеров файлов
  1616.     $Size = 0
  1617.     For $i = 1 To $FileList[0]
  1618.         $FileSize[$i] = FileGetSize($FileList[$i])
  1619.         $Size += $FileSize[$i]
  1620.     Next
  1621.     If $Size > $iniLimitSize * 1048576 And MsgBox(4, $LngErr, $LngMB10 & Round($Size / 1048576, 2) & $LngMB11 & $iniLimitSize & $LngMB12, 0, $hGui) = 7 Then
  1622.         GUICtrlSetData($StatusBar, $LngCnl)
  1623.         _stat(0)
  1624.         _Enable()
  1625.         Return
  1626.     EndIf
  1627.     $SizeText = _ConvertFileSize($Size)
  1628.    
  1629.     $GuiPos = WinGetPos($hGui)
  1630.     ; выполнение с прогресс-баром
  1631.     $ProgressBar = GUICtrlCreateProgress($GuiPos[2] - 110, 233, 100, 16)
  1632.     GUICtrlSetColor(-1, 32250); цвет для классической темы
  1633.     GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  1634.    
  1635.     GUICtrlSetPos($StopBut, $GuiPos[2] - 90, 185, 80, 17)
  1636.     GUICtrlSetPos($StatusBar, 5, 233, $GuiPos[2] - 120, 15)
  1637.    
  1638.     $LenPath = StringLen($PatInp0)
  1639.    
  1640.     ; выполняем поиск в цикле для всех типов файлов
  1641.     $Size1 = 0
  1642.     $kol = 0
  1643.     $ExcldAttrib = StringRegExpReplace($ExcldAttrib, '(?i)[^RASHNOT]', '') ; удаление из набора атрибутов "левых" символов
  1644.     $aExcAttrib = StringSplit($ExcldAttrib, '')
  1645.     HotKeySet("{ESC}", "_StopBut")
  1646.     For $i = 1 To $FileList[0]
  1647.         If $TrStop Then
  1648.             GUICtrlSetData($StatusBar, $LngCnl)
  1649.             GUICtrlDelete($ProgressBar)
  1650.             GUICtrlSetPos($StatusBar, 5, 233, $GuiPos[2] - 10, 15)
  1651.             GUICtrlSetPos($StopBut, -20, -20, 1, 1)
  1652.             _stat(0)
  1653.             $TrStop = 0
  1654.             _Enable()
  1655.             Return
  1656.         EndIf
  1657.         $Size1 += $FileSize[$i]
  1658.         If $FileSize[$i] > $iniErrSize Then ContinueLoop
  1659.         If $g_iTrPathDir Then
  1660.             $seafile = StringTrimLeft($FileList[$i], $LenPath)
  1661.         Else
  1662.             $seafile = $FileList[$i]
  1663.         EndIf
  1664.        
  1665.         GUICtrlSetData($StatusBar, '(' & $SizeText & ') ' & $FileList[0] & ' | ' & $i & ' | ' & $kol & ' | ' & $iTotalRep & ' | ' & $seafile)
  1666.        
  1667.         $FileAttrib = FileGetAttrib($FileList[$i])
  1668.         For $j = 1 To $aExcAttrib[0]
  1669.             If StringInStr($FileAttrib, $aExcAttrib[$j]) Then ContinueLoop 2
  1670.         Next
  1671.        
  1672.         If $CharSetAuto Then
  1673.             $CharSet = FileGetEncoding($FileList[$i])
  1674.         Else
  1675.             If $CharSet <> 16 And $CharSet <> FileGetEncoding($FileList[$i]) Then ContinueLoop
  1676.         EndIf
  1677.  
  1678.         $file = FileOpen($FileList[$i], $CharSet)
  1679.         If $file = -1 Then ContinueLoop
  1680.         $seatext = FileRead($file)
  1681.         FileClose($file)
  1682.        
  1683.         ; If $TrScr = 0 Then
  1684.         If $iniREx Then
  1685.             $seatext = StringRegExpReplace($seatext, $SeaInp0, $RepInp0)
  1686.             $s0 = @extended
  1687.         Else
  1688.             $seatext = StringReplace($seatext, $SeaInp0, $RepInp0, 0, $iniAa)
  1689.             $s0 = @extended
  1690.         EndIf
  1691.         ; Else ; Бывший обработчик сценария
  1692.             ; $s0 = 0
  1693.             ; For $m = 1 To $aTextScr[0]
  1694.                 ; $aTmp = StringSplit($aTextScr[$m], $iniSep, 1)
  1695.                 ; If $aTmp[0] > 3 Then ContinueLoop
  1696.                 ; If $iniREx Then
  1697.                     ; $seatext = StringRegExpReplace($seatext, $aTmp[1], $aTmp[2])
  1698.                     ; $s0 += @extended
  1699.                 ; Else
  1700.                     ; $seatext = StringReplace($seatext, $aTmp[1], $aTmp[2], 0, $iniAa)
  1701.                     ; $s0 += @extended
  1702.                 ; EndIf
  1703.             ; Next
  1704.         ; EndIf
  1705.  
  1706.         If $s0 <> 0 Then
  1707.             $kol += 1
  1708.             If $iniBAK = 1 Then FileCopy($FileList[$i], $BackUpPath & StringReplace($seafile, ':', ''), 8) ; добавлена замена ":" в пути
  1709.             If $ReData Then $tmpData = FileGetTime($FileList[$i], 0, 1)
  1710.             $TrR = StringInStr($FileAttrib, 'R')
  1711.             $TrH = StringInStr($FileAttrib, 'H')
  1712.             $TrS = StringInStr($FileAttrib, 'S')
  1713.             If $TrR Then FileSetAttrib($FileList[$i], '-R')
  1714.             If $TrH Then FileSetAttrib($FileList[$i], '-H')
  1715.             If $TrS Then FileSetAttrib($FileList[$i], '-S')
  1716.             $file = FileOpen($FileList[$i], $CharSet + 2)
  1717.             If Not FileWrite($file, $seatext) Then $s0 = 0
  1718.             FileClose($file)
  1719.             If $TrR Then FileSetAttrib($FileList[$i], '+R')
  1720.             If $TrH Then FileSetAttrib($FileList[$i], '+H')
  1721.             If $TrS Then FileSetAttrib($FileList[$i], '+S')
  1722.             If $ReData Then FileSetTime($FileList[$i], $tmpData)
  1723.             $sOutList &= $seafile & ' *' & $s0 & $sep
  1724.             $iTotalRep += $s0
  1725.         EndIf
  1726.         GUICtrlSetData($ProgressBar, Ceiling($Size1 / $Size * 100))
  1727.     Next
  1728.     HotKeySet("{ESC}")
  1729.     GUICtrlDelete($ProgressBar)
  1730.     If $sOutList = '' Then
  1731.         GUICtrlSetData($StatusBar, '(' & $SizeText & ') ' & $FileList[0] & ' | ' & $FileList[0] & ' | ' & $kol & ' | ' & $iTotalRep & '   ' & $LngSb3 & ' ' & Ceiling(TimerDiff($timer) / 1000) & ' ' & $LngSbS)
  1732.         GUICtrlSetData($Out, '')
  1733.         _stat(0)
  1734.     Else
  1735.         GUICtrlSetData($StatusBar, '(' & $SizeText & ') ' & $FileList[0] & ' | ' & $FileList[0] & ' | ' & $kol & ' | ' & $iTotalRep & '   ' & $LngSb4 & ' ' & Ceiling(TimerDiff($timer) / 1000) & ' ' & $LngSbS)
  1736.         GUICtrlSetData($Out, '')
  1737.         GUICtrlSetData($Out, $sOutList)
  1738.         _stat(1)
  1739.         ControlFocus($hGui, '', $Out)
  1740.        
  1741.         ; автоматически выделить
  1742.         $Tr_View = False
  1743.         ControlCommand($hGui, "", $Out, "SetCurrentSelection", 0)
  1744.     EndIf
  1745.     If $CharSetAuto Then $CharSet = -1
  1746.     $aTextScr = ''
  1747.     ; $TrScr = 0
  1748.     $Tr_Sea = 0
  1749.     GUICtrlSetPos($StopBut, -20, -20, 1, 1)
  1750.     _Enable()
  1751. EndFunc   ;==>_ReplaceOnce
  1752.  
  1753. ; $BackUp имеет 3 варианта:
  1754. ; 0 - не резервировать
  1755. ; 1 - резервировать в дефолтный каталог, в папку программы
  1756. ; путь - резервировать в указанный путь, если он соответствует валидности и диск существует и доступен для записи.
  1757. Func _BackUp(ByRef $BackUp)
  1758.     Local $BackUpPath
  1759.     If StringRegExp($BackUp, '(?i)^[a-z]:[^/:*?"<>|]*$') And Not StringInStr($BackUp, '\\') Then
  1760.         If StringRight($BackUp, 1) <> '\' Then $BackUp &= '\'
  1761.         $BackUpPath = $BackUp
  1762.     Else
  1763.         $BackUpPath = @ScriptDir & '\Backup\'
  1764.     EndIf
  1765.    
  1766.     If Not StringInStr('|Removable|Fixed|', '|' & DriveGetType(StringLeft($BackUpPath, 1) & ':\') & '|') Then Return SetError(1, 0, '')
  1767.     $BackUp = 1
  1768.     $BackUpPath &= @YEAR & "." & @MON & "." & @MDAY & "_" & @HOUR & "." & @MIN & "." & @SEC & "_"
  1769.     Return $BackUpPath
  1770. EndFunc   ;==>_BackUp
  1771.  
  1772. ; Это только для обработки сценария замены
  1773. Func _ReplaceLoop($RepInp0)
  1774.     Local $PathListErr, $s
  1775.     ToolTip('')
  1776.     _ReadScenario($RepInp0)
  1777.     $s = UBound($aScenario)
  1778.     ; Проверка существования путей и валидность бинарного шаблона
  1779.     $PathListErr = ''
  1780.     For $i = 0 To $s - 1
  1781.         If Not FileExists($aScenario[$i][6]) Then $PathListErr &= $aScenario[$i][6] & @CRLF
  1782.         If $aScenario[$i][12] = 'Bin' And $aScenario[$i][3] = '0' Then
  1783.             $aScenario[$i][0] = StringUpper($aScenario[$i][0])
  1784.             If Mod(StringLen($aScenario[$i][0]), 2) <> Mod(StringLen($aScenario[$i][1]), 2) Then
  1785.                 MsgBox(0, $LngErr, $LngMB19 & @CRLF & $aScenario[$i][0] & @CRLF & $aScenario[$i][1], 0, $hGui)
  1786.                 _Enable()
  1787.                 Return
  1788.             EndIf
  1789.         EndIf
  1790.     Next
  1791.     If $PathListErr <> '' Then
  1792.         MsgBox(0, $LngErr, $LngMB18 & @CRLF & $PathListErr)
  1793.         _stat(0)
  1794.         _Enable()
  1795.         Return
  1796.     EndIf
  1797.     Local $ch[$s]
  1798.     For $i = 0 To $s - 1
  1799.         $ch[$i] = $aScenario[$i][6] & $aScenario[$i][7] & $aScenario[$i][8] & $aScenario[$i][9] & $aScenario[$i][11] & $aScenario[$i][12]
  1800.     Next
  1801.     $aUni = _ArrayUnique($ch)
  1802.     If Not @error And $aUni[0] = 1 Then
  1803.         ; Здесь вставить проверку одинаковости некоторых параметров, чтобы переключится на экономичную функцию, которая единожды откроет файл и сделает многократные замены, вместо многократного открытия файла для разовой замены.
  1804.         For $i = 0 To $s - 1
  1805.             If $aScenario[$i][5] Then
  1806.                 $aScenario[0][5] = $aScenario[$i][5] ; бэкапирование в эконом-функции включается, если хотя бы одна команда сценария этого потребует
  1807.                 ExitLoop
  1808.             EndIf
  1809.         Next
  1810.         _ReplaceEconom($aScenario)
  1811.     Else
  1812.         For $i = 0 To $s - 1
  1813.             _ReplaceFull($aScenario[$i][0], $aScenario[$i][1], $aScenario[$i][2], $aScenario[$i][3], $aScenario[$i][4], $aScenario[$i][5], $aScenario[$i][6], $aScenario[$i][7], $aScenario[$i][8], $aScenario[$i][9], $aScenario[$i][10], $aScenario[$i][11], _CharNameToNum($aScenario[$i][12]), '(' & $s & ' \ ' & $i & ')')
  1814.             If @error Then Return
  1815.         Next
  1816.     EndIf
  1817. EndFunc   ;==>_ReplaceLoop
  1818.  
  1819. ; Func _ReplaceEconom($Search, $Replace, $Casesense, $RegExp, $CRLF)
  1820. Func _ReplaceEconom($aScenario)
  1821.     $sOutList = ''
  1822.     Local $BackUpPath, $file, $FileList, $j, $LenPath, $seatext, $tmpData, $TrR, $TrH, $TrS, $aExcAttrib, $Size2, $iTotalRep
  1823.     Local $BackUp, $Path, $Mask, $Include, $Depth, $ReData, $ExcldAttrib, $CharSet
  1824.     $BackUp = $aScenario[0][5]
  1825.     $Path = $aScenario[0][6]
  1826.     $Mask = $aScenario[0][7]
  1827.     $Include = $aScenario[0][8]
  1828.     $Depth = $aScenario[0][9]
  1829.     $ReData = $aScenario[0][10]
  1830.     $ExcldAttrib = $aScenario[0][11]
  1831.     $CharSet = _CharNameToNum($aScenario[0][12])
  1832.     If $CharSet = -1 Then
  1833.         $CharSetAuto = 1
  1834.     Else
  1835.         $CharSetAuto = 0
  1836.     EndIf
  1837.     ; Выполняем функции, которые не ресурсоёмкие и на раннем этапе могут возвратить ошибку без ожидания поиска файлов
  1838.    
  1839.     If StringRight($Path, 1) <> '\' Then $Path &= '\'
  1840.     ; делаем резервные копии... получаем путь и возможность резервирования
  1841.     If $BackUp Then
  1842.         $BackUpPath = _BackUp($BackUp) & StringRegExpReplace($Path, '^(.*\\)(.*?\\)$', '\2')
  1843.         If @error Then Return SetError(1, 0, '')
  1844.     EndIf
  1845.    
  1846.     ; засекаем время
  1847.     $timer = TimerInit()
  1848.     $Depth = 0
  1849.     If $inisub = 1 Then $Depth = 125
  1850.     If $Include Then
  1851.         $Include = True
  1852.     Else
  1853.         $Include = False
  1854.     EndIf
  1855.     $FileList = _FO_FileSearch($Path, _FO_CorrectMask($Mask), $Include, $Depth, 1, 1, 1, $sLocale) ; получаем список файлов
  1856.     If @error Then
  1857.  
  1858.         $timer = TimerDiff($timer)
  1859.         If $timer < 9500 Then
  1860.             $timer = Round($timer / 1000, 1)
  1861.         Else
  1862.             $timer = Ceiling($timer / 1000)
  1863.         EndIf
  1864.  
  1865.         GUICtrlSetData($StatusBar, $LngSb3 & ' ' & $timer & ' ' & $LngSbS)
  1866.         _stat(0)
  1867.         _Enable()
  1868.         Return SetError(1, 0, '')
  1869.     EndIf
  1870.     If $FileList[0] > $iniLimitFile And MsgBox(4, $LngErr, $LngMB7 & $FileList[0] & $LngMB8 & $iniLimitFile & $LngMB9, 0, $hGui) = 7 Then
  1871.         GUICtrlSetData($StatusBar, $LngCnl)
  1872.         _stat(0)
  1873.         _Enable()
  1874.         Return SetError(1, 0, '')
  1875.     EndIf
  1876.    
  1877.     ; выполняем подсчёт объёма
  1878.     Local $FileSize[$FileList[0] + 1] = [$FileList[0]] ; массив размеров файлов
  1879.     $Size = 0
  1880.     For $i = 1 To $FileList[0]
  1881.         $FileSize[$i] = FileGetSize($FileList[$i])
  1882.         $Size += $FileSize[$i]
  1883.     Next
  1884.     If $Size > $iniLimitSize * 1048576 And MsgBox(4, $LngErr, $LngMB10 & Round($Size / 1048576, 2) & $LngMB11 & $iniLimitSize & $LngMB12, 0, $hGui) = 7 Then
  1885.         GUICtrlSetData($StatusBar, $LngCnl)
  1886.         _stat(0)
  1887.         _Enable()
  1888.         Return SetError(1, 0, '')
  1889.     EndIf
  1890.     $SizeText = _ConvertFileSize($Size)
  1891.    
  1892.     $GuiPos = WinGetPos($hGui)
  1893.     ; выполнение с прогресс-баром
  1894.     $ProgressBar = GUICtrlCreateProgress($GuiPos[2] - 110, 233, 100, 16)
  1895.     GUICtrlSetColor(-1, 32250); цвет для классической темы
  1896.     GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  1897.    
  1898.     GUICtrlSetPos($StopBut, $GuiPos[2] - 90, 185, 80, 17)
  1899.     GUICtrlSetPos($StatusBar, 5, 233, $GuiPos[2] - 120, 15)
  1900.    
  1901.     $LenPath = StringLen($Path)
  1902.    
  1903.     ; выполняем поиск в цикле для всех типов файлов
  1904.     $Size1 = 0
  1905.     $kol = 0
  1906.     $ExcldAttrib = StringRegExpReplace($ExcldAttrib, '(?i)[^RASHNOT]', '') ; удаление из набора атрибутов "левых" символов
  1907.     $aExcAttrib = StringSplit($ExcldAttrib, '')
  1908.     HotKeySet("{ESC}", "_StopBut")
  1909.     For $i = 1 To $FileList[0]
  1910.         If $TrStop Then
  1911.             GUICtrlSetData($StatusBar, $LngCnl)
  1912.             GUICtrlDelete($ProgressBar)
  1913.             GUICtrlSetPos($StatusBar, 5, 233, $GuiPos[2] - 10, 15)
  1914.             GUICtrlSetPos($StopBut, -20, -20, 1, 1)
  1915.             _stat(0)
  1916.             $TrStop = 0
  1917.             _Enable()
  1918.             Return SetError(1, 0, '')
  1919.         EndIf
  1920.         $Size1 += $FileSize[$i]
  1921.         If $FileSize[$i] > $iniErrSize Then ContinueLoop
  1922.         $seafile = StringTrimLeft($FileList[$i], $LenPath)
  1923.        
  1924.         GUICtrlSetData($StatusBar, 'Econ (' & $SizeText & ') ' & $FileList[0] & ' | ' & $i & ' | ' & $kol & ' | ' & $iTotalRep & ' | ' & $seafile)
  1925.        
  1926.         $FileAttrib = FileGetAttrib($FileList[$i])
  1927.         For $j = 1 To $aExcAttrib[0]
  1928.             If StringInStr($FileAttrib, $aExcAttrib[$j]) Then ContinueLoop 2
  1929.         Next
  1930.        
  1931.         ; $Search=$aScenario[$m][0]
  1932.         ; $Replace=$aScenario[$m][1]
  1933.         ; $Casesense=$aScenario[$m][2]
  1934.         ; $RegExp=$aScenario[$m][3]
  1935.         ; $CRLF=$aScenario[$m][4]
  1936.         If $CharSetAuto Then
  1937.             $CharSet = FileGetEncoding($FileList[$i])
  1938.         Else
  1939.             If $CharSet <> 16 And $CharSet <> FileGetEncoding($FileList[$i]) Then ContinueLoop
  1940.         EndIf
  1941.  
  1942.         $file = FileOpen($FileList[$i], $CharSet)
  1943.         If $file = -1 Then ContinueLoop
  1944.         $seatext = FileRead($file)
  1945.         FileClose($file)
  1946.        
  1947.         $s0 = 0
  1948.         For $m = 0 To UBound($aScenario) - 1
  1949.             If $aScenario[$m][4] Then _CRLF($aScenario[$m][4], $aScenario[$m][0], $aScenario[$m][1])
  1950.             If $aScenario[$m][3] Then
  1951.                 $seatext = StringRegExpReplace($seatext, $aScenario[$m][0], $aScenario[$m][1])
  1952.                 $s0 += @extended
  1953.             Else
  1954.                 $seatext = StringReplace($seatext, $aScenario[$m][0], $aScenario[$m][1], 0, $aScenario[$m][2])
  1955.                 $s0 += @extended
  1956.             EndIf
  1957.         Next
  1958.  
  1959.         If $s0 <> 0 Then
  1960.             $kol += 1
  1961.             If $BackUp = 1 Then FileCopy($FileList[$i], $BackUpPath & $seafile, 8)
  1962.             If $ReData = 1 Then $tmpData = FileGetTime($FileList[$i], 0, 1)
  1963.             $TrR = StringInStr($FileAttrib, 'R')
  1964.             $TrH = StringInStr($FileAttrib, 'H')
  1965.             $TrS = StringInStr($FileAttrib, 'S')
  1966.             If $TrR Then FileSetAttrib($FileList[$i], '-R')
  1967.             If $TrH Then FileSetAttrib($FileList[$i], '-H')
  1968.             If $TrS Then FileSetAttrib($FileList[$i], '-S')
  1969.             $file = FileOpen($FileList[$i], $CharSet + 2)
  1970.             If Not FileWrite($file, $seatext) Then $s0 = 0
  1971.             FileClose($file)
  1972.             If $TrR Then FileSetAttrib($FileList[$i], '+R')
  1973.             If $TrH Then FileSetAttrib($FileList[$i], '+H')
  1974.             If $TrS Then FileSetAttrib($FileList[$i], '+S')
  1975.             If $ReData = 1 Then FileSetTime($FileList[$i], $tmpData)
  1976.             $sOutList &= $seafile & ' *' & $s0 & $sep
  1977.             $iTotalRep += $s0
  1978.         EndIf
  1979.         GUICtrlSetData($ProgressBar, Ceiling($Size1 / $Size * 100))
  1980.     Next
  1981.     HotKeySet("{ESC}")
  1982.     GUICtrlDelete($ProgressBar)
  1983.  
  1984.     $timer = TimerDiff($timer)
  1985.     If $timer < 9500 Then
  1986.         $timer = Round($timer / 1000, 1)
  1987.     Else
  1988.         $timer = Ceiling($timer / 1000)
  1989.     EndIf
  1990.  
  1991.     If $sOutList = '' Then
  1992.         GUICtrlSetData($StatusBar, 'Econ (' & $SizeText & ') ' & $FileList[0] & ' | ' & $FileList[0] & ' | ' & $kol & ' | ' & $iTotalRep & '   ' & $LngSb3 & ' ' & $timer & ' ' & $LngSbS)
  1993.         GUICtrlSetData($Out, '')
  1994.         _stat(0)
  1995.     Else
  1996.         GUICtrlSetData($StatusBar, 'Econ (' & $SizeText & ') ' & $FileList[0] & ' | ' & $FileList[0] & ' | ' & $kol & ' | ' & $iTotalRep & '   ' & $LngSb4 & ' ' & $timer & ' ' & $LngSbS)
  1997.         GUICtrlSetData($Out, '')
  1998.         GUICtrlSetData($Out, $sOutList)
  1999.         _stat(1)
  2000.         ControlFocus($hGui, '', $Out)
  2001.        
  2002.         ; автоматически выделить
  2003.         $Tr_View = False
  2004.         ControlCommand($hGui, "", $Out, "SetCurrentSelection", 0)
  2005.     EndIf
  2006.     If $CharSetAuto Then $CharSet = -1
  2007.     $aTextScr = ''
  2008.     ; $TrScr = 0
  2009.     $Tr_Sea = 0
  2010.     GUICtrlSetPos($StopBut, -20, -20, 1, 1)
  2011.     _Enable()
  2012. EndFunc   ;==>_ReplaceEconom
  2013.  
  2014. Func _ReplaceFull($Search, $Replace, $Casesense, $RegExp, $CRLF, $BackUp, $Path, $Mask, $Include, $Depth, $ReData, $ExcldAttrib, $CharSet, $stat)
  2015.     $sOutList = ''
  2016.     Local $BackUpPath, $file, $FileList, $i, $j, $LenPath, $seatext, $tmpData, $TrR, $TrH, $TrS, $aExcAttrib, $Size2, $iTotalRep
  2017.     If $CharSet = -1 Then
  2018.         $CharSetAuto = 1
  2019.     Else
  2020.         $CharSetAuto = 0
  2021.     EndIf
  2022.     ; Выполняем функции, которые не ресурсоёмкие и на раннем этапе могут возвратить ошибку без ожидания поиска файлов
  2023.     ; Обработка переносов строк в поисковом запросе
  2024.     If $CRLF Then _CRLF($CRLF, $Search, $Replace)
  2025.    
  2026.     If StringRight($Path, 1) <> '\' Then $Path &= '\'
  2027.     ; делаем резервные копии... получаем путь и возможность резервирования
  2028.     If $BackUp Then
  2029.         $BackUpPath = _BackUp($BackUp) & StringRegExpReplace($Path, '^(.*\\)(.*?\\)$', '\2')
  2030.         If @error Then Return SetError(1, 0, '')
  2031.     EndIf
  2032.    
  2033.     ; делаем резервные копии
  2034.     ; If $BackUp = 1 Then
  2035.     ; If StringRegExp($iniPathBackup, '(?i)^[a-z]:[^/:*?"<>|]*$') And StringInStr('|Removable|Fixed|', '|'&DriveGetType(StringLeft($iniPathBackup, 1)&':\' )&'|') And Not StringInStr($iniPathBackup, '\\') Then
  2036.     ; If $iniPathBackup And StringRight($iniPathBackup, 1) <> '\' Then $iniPathBackup &= '\'
  2037.     ; $BackUpPath=$iniPathBackup
  2038.     ; Else
  2039.     ; $BackUpPath=@ScriptDir&'\Backup\'
  2040.     ; EndIf
  2041.     ; $BackUpPath&=@YEAR&"."&@MON&"."&@MDAY&"_"&@HOUR&"."&@MIN&"."&@SEC&"_"&StringRegExpReplace($Path, '^(.*\\)(.*?\\)$', '\2')
  2042.     ; EndIf
  2043.    
  2044.     ; засекаем время
  2045.     $timer = TimerInit()
  2046.     $Depth = 0
  2047.     If $inisub = 1 Then $Depth = 125
  2048.     If $Include Then
  2049.         $Include = True
  2050.     Else
  2051.         $Include = False
  2052.     EndIf
  2053.     $FileList = _FO_FileSearch($Path, _FO_CorrectMask($Mask), $Include, $Depth, 1, 1, 1, $sLocale) ; получаем список файлов
  2054.     If @error Then
  2055.  
  2056.         $timer = TimerDiff($timer)
  2057.         If $timer < 9500 Then
  2058.             $timer = Round($timer / 1000, 1)
  2059.         Else
  2060.             $timer = Ceiling($timer / 1000)
  2061.         EndIf
  2062.  
  2063.         GUICtrlSetData($StatusBar, $LngSb3 & ' ' & $timer & ' ' & $LngSbS)
  2064.         _stat(0)
  2065.         _Enable()
  2066.         Return SetError(1, 0, '')
  2067.     EndIf
  2068.     If $FileList[0] > $iniLimitFile And MsgBox(4, $LngErr, $LngMB7 & $FileList[0] & $LngMB8 & $iniLimitFile & $LngMB9, 0, $hGui) = 7 Then
  2069.         GUICtrlSetData($StatusBar, $LngCnl)
  2070.         _stat(0)
  2071.         _Enable()
  2072.         Return SetError(1, 0, '')
  2073.     EndIf
  2074.    
  2075.     ; выполняем подсчёт объёма
  2076.     Local $FileSize[$FileList[0] + 1] = [$FileList[0]] ; массив размеров файлов
  2077.     $Size = 0
  2078.     For $i = 1 To $FileList[0]
  2079.         $FileSize[$i] = FileGetSize($FileList[$i])
  2080.         $Size += $FileSize[$i]
  2081.     Next
  2082.     If $Size > $iniLimitSize * 1048576 And MsgBox(4, $LngErr, $LngMB10 & Round($Size / 1048576, 2) & $LngMB11 & $iniLimitSize & $LngMB12, 0, $hGui) = 7 Then
  2083.         GUICtrlSetData($StatusBar, $LngCnl)
  2084.         _stat(0)
  2085.         _Enable()
  2086.         Return SetError(1, 0, '')
  2087.     EndIf
  2088.     $SizeText = _ConvertFileSize($Size)
  2089.    
  2090.     $GuiPos = WinGetPos($hGui)
  2091.     ; выполнение с прогресс-баром
  2092.     $ProgressBar = GUICtrlCreateProgress($GuiPos[2] - 110, 233, 100, 16)
  2093.     GUICtrlSetColor(-1, 32250); цвет для классической темы
  2094.     GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  2095.    
  2096.     GUICtrlSetPos($StopBut, $GuiPos[2] - 90, 185, 80, 17)
  2097.     GUICtrlSetPos($StatusBar, 5, 233, $GuiPos[2] - 120, 15)
  2098.    
  2099.     $LenPath = StringLen($Path)
  2100.    
  2101.     ; выполняем поиск в цикле для всех типов файлов
  2102.     $Size1 = 0
  2103.     $kol = 0
  2104.     $ExcldAttrib = StringRegExpReplace($ExcldAttrib, '(?i)[^RASHNOT]', '') ; удаление из набора атрибутов "левых" символов
  2105.     $aExcAttrib = StringSplit($ExcldAttrib, '')
  2106.     HotKeySet("{ESC}", "_StopBut")
  2107.     For $i = 1 To $FileList[0]
  2108.         If $TrStop Then
  2109.             GUICtrlSetData($StatusBar, $LngCnl)
  2110.             GUICtrlDelete($ProgressBar)
  2111.             GUICtrlSetPos($StatusBar, 5, 233, $GuiPos[2] - 10, 15)
  2112.             GUICtrlSetPos($StopBut, -20, -20, 1, 1)
  2113.             _stat(0)
  2114.             $TrStop = 0
  2115.             _Enable()
  2116.             Return SetError(1, 0, '')
  2117.         EndIf
  2118.         $Size1 += $FileSize[$i]
  2119.         If $FileSize[$i] > $iniErrSize Then ContinueLoop
  2120.         $seafile = StringTrimLeft($FileList[$i], $LenPath)
  2121.        
  2122.         GUICtrlSetData($StatusBar, $stat & ' (' & $SizeText & ') ' & $FileList[0] & ' | ' & $i & ' | ' & $kol & ' | ' & $iTotalRep & ' | ' & $seafile)
  2123.        
  2124.         $FileAttrib = FileGetAttrib($FileList[$i])
  2125.         For $j = 1 To $aExcAttrib[0]
  2126.             If StringInStr($FileAttrib, $aExcAttrib[$j]) Then ContinueLoop 2
  2127.         Next
  2128.        
  2129.         If $CharSetAuto Then
  2130.             $CharSet = FileGetEncoding($FileList[$i])
  2131.         Else
  2132.             If $CharSet <> 16 And $CharSet <> FileGetEncoding($FileList[$i]) Then ContinueLoop
  2133.         EndIf
  2134.  
  2135.         $file = FileOpen($FileList[$i], $CharSet)
  2136.         If $file = -1 Then ContinueLoop
  2137.         $seatext = FileRead($file)
  2138.         FileClose($file)
  2139.        
  2140.         If $RegExp Then
  2141.             $seatext = StringRegExpReplace($seatext, $Search, $Replace)
  2142.             $s0 = @extended
  2143.         Else
  2144.             $seatext = StringReplace($seatext, $Search, $Replace, 0, $Casesense)
  2145.             $s0 = @extended
  2146.         EndIf
  2147.  
  2148.         If $s0 <> 0 Then
  2149.             $kol += 1
  2150.             If $BackUp = 1 Then FileCopy($FileList[$i], $BackUpPath & $seafile, 8)
  2151.             If $ReData = 1 Then $tmpData = FileGetTime($FileList[$i], 0, 1)
  2152.             $TrR = StringInStr($FileAttrib, 'R')
  2153.             $TrH = StringInStr($FileAttrib, 'H')
  2154.             $TrS = StringInStr($FileAttrib, 'S')
  2155.             If $TrR Then FileSetAttrib($FileList[$i], '-R')
  2156.             If $TrH Then FileSetAttrib($FileList[$i], '-H')
  2157.             If $TrS Then FileSetAttrib($FileList[$i], '-S')
  2158.             $file = FileOpen($FileList[$i], $CharSet + 2)
  2159.             If Not FileWrite($file, $seatext) Then $s0 = 0
  2160.             FileClose($file)
  2161.             If $TrR Then FileSetAttrib($FileList[$i], '+R')
  2162.             If $TrH Then FileSetAttrib($FileList[$i], '+H')
  2163.             If $TrS Then FileSetAttrib($FileList[$i], '+S')
  2164.             If $ReData = 1 Then FileSetTime($FileList[$i], $tmpData)
  2165.             $sOutList &= $seafile & ' *' & $s0 & $sep
  2166.             $iTotalRep += $s0
  2167.         EndIf
  2168.         GUICtrlSetData($ProgressBar, Ceiling($Size1 / $Size * 100))
  2169.     Next
  2170.     HotKeySet("{ESC}")
  2171.     GUICtrlDelete($ProgressBar)
  2172.  
  2173.     $timer = TimerDiff($timer)
  2174.     If $timer < 9500 Then
  2175.         $timer = Round($timer / 1000, 1)
  2176.     Else
  2177.         $timer = Ceiling($timer / 1000)
  2178.     EndIf
  2179.  
  2180.     If $sOutList = '' Then
  2181.         GUICtrlSetData($StatusBar, '(' & $SizeText & ') ' & $FileList[0] & ' | ' & $FileList[0] & ' | ' & $kol & ' | ' & $iTotalRep & '   ' & $LngSb3 & ' ' & $timer & ' ' & $LngSbS)
  2182.         GUICtrlSetData($Out, '')
  2183.         _stat(0)
  2184.     Else
  2185.         GUICtrlSetData($StatusBar, '(' & $SizeText & ') ' & $FileList[0] & ' | ' & $FileList[0] & ' | ' & $kol & ' | ' & $iTotalRep & '   ' & $LngSb4 & ' ' & $timer & ' ' & $LngSbS)
  2186.         GUICtrlSetData($Out, '')
  2187.         GUICtrlSetData($Out, $sOutList)
  2188.         _stat(1)
  2189.         ControlFocus($hGui, '', $Out)
  2190.        
  2191.         ; автоматически выделить
  2192.         $Tr_View = False
  2193.         ControlCommand($hGui, "", $Out, "SetCurrentSelection", 0)
  2194.     EndIf
  2195.     If $CharSetAuto Then $CharSet = -1
  2196.     $aTextScr = ''
  2197.     ; $TrScr = 0
  2198.     $Tr_Sea = 0
  2199.     GUICtrlSetPos($StopBut, -20, -20, 1, 1)
  2200.     _Enable()
  2201. EndFunc   ;==>_ReplaceFull
  2202.  
  2203. Func _AddRep()
  2204.     $tmpPath = FileSaveDialog($LngSVD, @WorkingDir, $LngSVD1 & " (*.srt)", 0, '', $hGui)
  2205.     If @error Then Return
  2206.     If StringRight($tmpPath, 4) <> '.srt' Then $tmpPath &= '.srt'
  2207.     $SeaInp0 = GUICtrlRead($SeaInp)
  2208.     $RepInp0 = GUICtrlRead($RepInp)
  2209.     $ReData = 0
  2210.     $ExcldAttrib = 0
  2211.     If $iniBAK Then
  2212.         If $iniPathBackup Then
  2213.             $tmpPathBackup = $iniPathBackup
  2214.         Else
  2215.             $tmpPathBackup = 1
  2216.         EndIf
  2217.     Else
  2218.         $tmpPathBackup = 0
  2219.     EndIf
  2220.     If Not ($SeaInp0 == $RepInp0) And $SeaInp0 <> '' Then
  2221.         $text = '-->|' & $SeaInp0 & $iniSep & $RepInp0 & $iniSep & $iniAa & $iniSep & $iniREx & $iniSep & GUICtrlRead($CRLF) & $iniSep & $tmpPathBackup & $iniSep & GUICtrlRead($PatInp) & $iniSep & GUICtrlRead($TypInp) & $iniSep & $iniExc & $iniSep & $inisub & $iniSep & $ReData & $iniSep & $ExcldAttrib & $iniSep & _CharNumToName($CharSet) & '|<--'
  2222.         Local $hFile = FileOpen($tmpPath, 1 + 8)
  2223.         If FileGetSize($tmpPath) = 0 Then
  2224.             FileWrite($hFile, $text)
  2225.         Else
  2226.             FileWrite($hFile, @CRLF & $text)
  2227.         EndIf
  2228.         FileClose($hFile)
  2229.     Else
  2230.         MsgBox(0, $LngErr, $LngMB3, 0, $hGui)
  2231.         Return
  2232.     EndIf
  2233. EndFunc   ;==>_AddRep
  2234.  
  2235. Func _Enable()
  2236.     GUICtrlSetState($SeaBtn, $GUI_ENABLE)
  2237.     GUICtrlSetState($RepBtn, $GUI_ENABLE)
  2238. EndFunc   ;==>_Enable
  2239.  
  2240. Func _ScrRep()
  2241.     $tmpPath = FileOpenDialog($LngOD, @WorkingDir & "", $LngSVD1 & " (*.srt)", 1 + 4, '', $hGui)
  2242.     If @error Then Return
  2243.     $ScrPath = $tmpPath
  2244.     _ScenarioView()
  2245. EndFunc   ;==>_ScrRep
  2246.  
  2247. Func _EditorOpen()
  2248.     $Out0 = GUICtrlRead($Out)
  2249.     If Not $Out0 Then Return ; выделите файл
  2250.     $Out0 = StringLeft($Out0, StringInStr($Out0, '*') - 2)
  2251.     ; $Out0=StringRegExpReplace($Out0, '(^.*)( \*\d+)$', '\1')
  2252.     If StringInStr($Out0, ':') Then $PatInp0 = ''
  2253.     Run($Editor & ' ' & $PatInp0 & $Out0)
  2254. EndFunc   ;==>_EditorOpen
  2255.  
  2256. Func _ExplorerOpen()
  2257.     $Out0 = GUICtrlRead($Out)
  2258.     If Not $Out0 Then Return ; выделите файл
  2259.     $Out0 = StringLeft($Out0, StringInStr($Out0, '*') - 2)
  2260.     ; $Out0=StringRegExpReplace($Out0, '(^.*)( \*\d+)$', '\1')
  2261.     If StringInStr($Out0, ':') Then $PatInp0 = ''
  2262.     Run('Explorer.exe /select,"' & $PatInp0 & $Out0 & '"')
  2263. EndFunc   ;==>_ExplorerOpen
  2264.  
  2265. ; Func _ListBox_GetText()
  2266. ; Local $tmp = StringTrimRight(StringRegExpReplace($sOutList, '\s+\*[p\d]+' & $sep, @CRLF), 2)
  2267. ; Switch MsgBox(3, 'List to clipboard', 'Select:' & @Tab & '|' & '  Format' &@LF& '-----------------------------------' &@LF& 'Yes' & @Tab & '|' & '  name' &@LF&  'No' & @Tab & '|' & '  name.ext' &@LF&  'Cancel' & @Tab & '|' & '  folder\name.ext' )
  2268. ; Case 6 ; Yes
  2269. ; $tmp = StringRegExpReplace($tmp, '(?m)^(?:.*\\)?([^\\]*?)(?:\.[^.]+)?$', '\1' & @CR)
  2270. ; $tmp = StringTrimRight($tmp, 1)
  2271. ; Case 7 ; No
  2272. ; $tmp = StringRegExpReplace($tmp, '(?m)^(?:.*\\)?(.*)$', '\1')
  2273. ; EndSwitch
  2274. ; ClipPut($tmp)
  2275. ; EndFunc
  2276.  
  2277. Func _ListBox_GetText() ; выбор экспорта списка в буфер
  2278.     Opt("GUIOnEventMode", 0)
  2279.     $GP = _ChildCoor($hGui, 240, 170)
  2280.     GUISetState(@SW_DISABLE, $hGui)
  2281.     ; 'List to clipboard'
  2282.     $Gui1 = GUICreate($LngLst, $GP[2], $GP[3], $GP[0], $GP[1], BitOR($WS_CAPTION, $WS_SYSMENU, $WS_POPUP), -1, $hGui)
  2283.     If Not @Compiled Then GUISetIcon($AutoItExe, 99)
  2284.  
  2285.     Local $radio[6]
  2286.     $radio[1] = GUICtrlCreateRadio($LngLbCb1, 20, 20, -1, 20)
  2287.     $radio[2] = GUICtrlCreateRadio($LngLbCb2, 20, 40, -1, 20)
  2288.     $radio[3] = GUICtrlCreateRadio($LngLbCb3, 20, 60, -1, 20)
  2289.     $radio[4] = GUICtrlCreateRadio($LngLbCb4, 20, 80, -1, 20)
  2290.     $radio[5] = GUICtrlCreateRadio($LngLbCb5, 20, 100, -1, 20)
  2291.     If $g_iTrPathDir Then
  2292.         GUICtrlSetState($radio[3], $GUI_CHECKED)
  2293.     Else
  2294.         GUICtrlSetState($radio[4], $GUI_CHECKED)
  2295.         GUICtrlSetState($radio[3], $GUI_DISABLE)
  2296.     EndIf
  2297.    
  2298.     $OK = GUICtrlCreateButton("OK", 90, $GP[3] - 35, 60, 30)
  2299.     GUISetState(@SW_SHOW, $Gui1)
  2300.     Local $tmp = StringTrimRight(StringRegExpReplace($sOutList, '\s+\*[p\d]+' & $sep, @CRLF), 2)
  2301.     While 1
  2302.         Switch GUIGetMsg()
  2303.             Case $OK
  2304.                 For $i = 1 To 5
  2305.                     If BitAND(GUICtrlRead($radio[$i]), $GUI_CHECKED) Then
  2306.                         $idx = $i
  2307.                         ExitLoop
  2308.                     EndIf
  2309.                 Next
  2310.                 Switch $idx
  2311.                     Case 1
  2312.                         $tmp = StringRegExpReplace($tmp, '(?m)^(?:.*\\)?([^\\]*?)(?:\.[^.]+)?$', '\1' & @CR)
  2313.                         $tmp = StringTrimRight($tmp, 1)
  2314.                     Case 2
  2315.                         $tmp = StringRegExpReplace($tmp, '(?m)^(?:.*\\)?(.*)$', '\1')
  2316.                     Case 4
  2317.                         If Not StringInStr($sOutList, ':') Then $tmp = $PatInp0 & StringReplace($tmp, @CRLF, @CRLF & $PatInp0)
  2318.                     Case 5
  2319.                         If Not StringInStr($sOutList, ':') Then $tmp = $PatInp0 & StringReplace($tmp, @CRLF, @CRLF & $PatInp0)
  2320.                         $tmpPath = FileSaveDialog('Save', @WorkingDir, "File (*.txt)", 0, '', $Gui1)
  2321.                         If @error Then ContinueLoop
  2322.                         If StringRight($tmpPath, 4) <> '.txt' Then $tmpPath &= '.txt'
  2323.                        
  2324.                         $hFile = FileOpen($tmpPath, 2)
  2325.                         FileWrite($hFile, $tmp)
  2326.                         FileClose($hFile)
  2327.                 EndSwitch
  2328.                 If $idx <> 5 Then ClipPut($tmp)
  2329.                 ContinueCase
  2330.             Case -3
  2331.                 GUISetState(@SW_ENABLE, $hGui)
  2332.                 GUIDelete($Gui1)
  2333.                 ExitLoop
  2334.         EndSwitch
  2335.     WEnd
  2336.     Opt("GUIOnEventMode", 1)
  2337. EndFunc   ;==>_ListBox_GetText
  2338.  
  2339. ; Func _ListBox_GetText_OK()
  2340.  
  2341. ; _Exit1()
  2342. ; EndFunc   ;==>_ListBox_GetText_OK
  2343.  
  2344. ; Func _ListBox_GetALLItemsText()
  2345. ; Local $sText, $iCount = GUICtrlSendMsg($Out, $LB_GETCOUNT, 0, 0)
  2346. ; If $iCount > 0 Then
  2347. ; For $i = 0 To $iCount
  2348. ; $sText[$i] &= _GUICtrlListBox_GetText($hWnd, $i) & @CRLF
  2349. ; Next
  2350. ; EndIf
  2351. ; Return $aText
  2352. ; EndFunc
  2353.  
  2354. Func _StartFile()
  2355.     $Out0 = GUICtrlRead($Out)
  2356.     If Not $Out0 Then Return ; выделите файл
  2357.     $Out0 = StringLeft($Out0, StringInStr($Out0, '*') - 2)
  2358.     ; $Out0=StringRegExpReplace($Out0, '(^.*)( \*\d+)$', '\1')
  2359.     If StringInStr($Out0, ':') Then $PatInp0 = ''
  2360.     ShellExecute($PatInp0 & $Out0)
  2361. EndFunc   ;==>_StartFile
  2362.  
  2363. Func _EditorTextFound()
  2364.     $Out0 = GUICtrlRead($Out)
  2365.     If Not $Out0 Then Return ; выделите файл
  2366.     $Out0 = StringLeft($Out0, StringInStr($Out0, '*') - 2)
  2367.     ; $Out0=StringRegExpReplace($Out0, '(^.*)( \*\d+)$', '\1')
  2368.     If StringInStr($Out0, ':') Then $PatInp0 = ''
  2369.     Run($Editor & ' ' & $PatInp0 & $Out0)
  2370.    
  2371.     If $hf <> '' And Not $iniREx Then
  2372.         Sleep(100)
  2373.         $nameEditor = StringRegExpReplace($Editor, '(^.*)\\(.*)$', '\2')
  2374.         $AllWindows = WinList()
  2375.         For $i = 1 To $AllWindows[0][0]
  2376.             ; если окно имеет текст заголовка, видимое и путь окна совпадает с путём редактора
  2377.             If $AllWindows[$i][0] And BitAND(WinGetState($AllWindows[$i][1]), 2) And StringRight(_ProcessGetPath(WinGetProcess($AllWindows[$i][1])), StringLen($nameEditor) + 1) = '\' & $nameEditor Then
  2378.                 WinActivate($AllWindows[$i][1])
  2379.                 If WinWaitActive($AllWindows[$i][1], '', 3) Then ; ожидаем 3 сек активность окна
  2380.                     Sleep(30)
  2381.                     Send('^{' & $hf & '}')
  2382.                     Sleep(30)
  2383.                     ClipPut($SeaInp0)
  2384.                     Sleep(30)
  2385.                     If WinWaitNotActive($AllWindows[$i][1], "", 1) And StringRight(_ProcessGetPath(WinGetProcess('[ACTIVE]')), StringLen($nameEditor) + 1) = '\' & $nameEditor Then ; если активен диалог поиска, а не окно редактора, то делаем вставку
  2386.                         Send('+{INS}')
  2387.                         Sleep(30)
  2388.                         Send('{Enter}')
  2389.                     EndIf
  2390.                     ExitLoop
  2391.                 EndIf
  2392.             EndIf
  2393.         Next
  2394.     EndIf
  2395. EndFunc   ;==>_EditorTextFound
  2396.  
  2397. Func _Folder1()
  2398.     $tmpPath = FileOpenDialog($LngOD, @WorkingDir, $LngOD1 & " (*.*)", 1 + 4, "", $hGui)
  2399.     If @error Then Return
  2400.     _mask($tmpPath)
  2401. EndFunc   ;==>_Folder1
  2402.  
  2403. Func _Folder2()
  2404.     $PatInp0 = GUICtrlRead($PatInp)
  2405.     $sTmp = FileGetAttrib($PatInp0)
  2406.     If Not (@error Or StringInStr($sTmp, 'D', 2)) Then $PatInp0 = StringRegExpReplace($PatInp0, '(^.*)\\.*$', '\1') ; если файл, то обрезаем последний элемент
  2407.  
  2408.     While Not FileExists($PatInp0)
  2409.         $PatInp0 = StringRegExpReplace($PatInp0, '(^.*)\\.*$', '\1')
  2410.         If Not @extended Then ExitLoop
  2411.     WEnd
  2412.     If Not FileExists($PatInp0) Then $PatInp0 = @WorkingDir
  2413.     $tmpPath = FileSelectFolder($LngOF, '', 2, $PatInp0, $hGui)
  2414.     If @error Then Return
  2415.     _ComboBox_InsertPath($tmpPath, $iniPath, $PatInp)
  2416. EndFunc   ;==>_Folder2
  2417. ; конец функций обработки кнопок
  2418.  
  2419. Func _ComboBox_InsertPath($item, ByRef $iniList, $ctrlID)
  2420.     $iniList = StringReplace($sep & $iniList & $sep, $sep & $item & $sep, $sep)
  2421.     $iniList = StringReplace($iniList, $sep & $item & '\' & $sep, $sep)
  2422.     $iniList = $item & StringTrimRight($iniList, 1)
  2423.     $tmp = StringInStr($iniList, $sep, 0, $KolStr)
  2424.     If $tmp Then $iniList = StringLeft($iniList, $tmp - 1)
  2425.     GUICtrlSetData($ctrlID, $sep & $iniList, $item)
  2426. EndFunc   ;==>_ComboBox_InsertPath
  2427.  
  2428. Func _mask($tmp) ; добавление к маске расширение кинутого файла
  2429.     $tmp = _FO_PathSplit($tmp)
  2430.     $tmp = $tmp[2]
  2431.     If $tmp Then
  2432.         $tmp = '*' & $tmp
  2433.     Else
  2434.         Return
  2435.     EndIf
  2436.     $TypInp0 = GUICtrlRead($TypInp)
  2437.     If StringInStr('|' & $TypInp0 & '|', '|' & $tmp & '|') Then
  2438.         MsgBox(0, $LngErr, $LngMB6, 0, $hGui)
  2439.         Return
  2440.     EndIf
  2441.     If $TypInp0 = '' Or $TypInp0 = '*' Then
  2442.         GUICtrlSetData($TypInp, $tmp)
  2443.         GUICtrlSetData($TypInp, $tmp)
  2444.     Else
  2445.         GUICtrlSetData($TypInp, $TypInp0 & '|' & $tmp)
  2446.         GUICtrlSetData($TypInp, $TypInp0 & '|' & $tmp)
  2447.     EndIf
  2448. EndFunc   ;==>_mask
  2449.  
  2450. Func _EditBox() ; окно поиска многострочного текста
  2451.     $GP = _ChildCoor($hGui, 540, 330)
  2452.     GUISetState(@SW_DISABLE, $hGui)
  2453.     $Gui1 = GUICreate($LngMLineSH, $GP[2], $GP[3], $GP[0], $GP[1], BitOR($WS_OVERLAPPEDWINDOW, $WS_POPUP), -1, $hGui)
  2454.     If Not @Compiled Then GUISetIcon($AutoItExe, 99)
  2455.     GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit1")
  2456.  
  2457.     $EditBoxSea = GUICtrlCreateEdit('', 5, 5, 530, 285, $ES_AUTOVSCROLL + $WS_VSCROLL + $ES_NOHIDESEL + $ES_WANTRETURN)
  2458.     GUICtrlSetResizing(-1, 2 + 4 + 32 + 64)
  2459.     $CRLF0 = GUICtrlRead($CRLF)
  2460.     $SeaInp0 = GUICtrlRead($SeaInp)
  2461.     If $CRLF0 Then _CRLF($CRLF0, $SeaInp0, '')
  2462.     GUICtrlSetData($EditBoxSea, $SeaInp0)
  2463.    
  2464.     $OK = GUICtrlCreateButton("OK", 240, $GP[3] - 35, 60, 30)
  2465.     GUICtrlSetOnEvent(-1, "_EditBox_OK")
  2466.     GUICtrlSetResizing(-1, 256 + 512 + 64 + 128)
  2467.  
  2468.     GUISetState(@SW_SHOW, $Gui1)
  2469. EndFunc   ;==>_EditBox
  2470.  
  2471. Func _EditBox_OK()
  2472.     $EditBoxSea0 = GUICtrlRead($EditBoxSea)
  2473.     $CRLF0 = GUICtrlRead($CRLF)
  2474.     ; если нет переносов, то вставляем и текст в инпут и выходим из функции
  2475.     If Not (StringInStr($EditBoxSea0, @CR) Or StringInStr($EditBoxSea0, @LF)) Then
  2476.         _GUICtrlComboBox_SetEditText($CRLF, '')
  2477.         _GUICtrlComboBox_SetEditText($SeaInp, $EditBoxSea0)
  2478.         Return _Exit1()
  2479.     EndIf
  2480.  
  2481.     $tmp = StringReplace($EditBoxSea0, @CRLF, '')
  2482.     If Not (StringInStr($tmp, @CR) Or StringInStr($tmp, @LF)) Then ; если в тексте только цельные @CRLF
  2483.         $CRLF0 = _CRLF_Define($EditBoxSea0) ; определяем символ подмены
  2484.         If @error Then Return _Exit1()
  2485.     Else
  2486.         $CRLF0 = _CRLF_Define($EditBoxSea0)
  2487.         If @error Then Return _Exit1()
  2488.         $CRLF0 &= _CRLF_Define($EditBoxSea0 & $CRLF0)
  2489.         If @error Then Return _Exit1()
  2490.     EndIf
  2491.     _GUICtrlComboBox_SetEditText($CRLF, $CRLF0)
  2492.     $tmp = StringLen($CRLF0)
  2493.     If $tmp = 1 Then
  2494.         _GUICtrlComboBox_SetEditText($SeaInp, StringReplace($EditBoxSea0, @CRLF, $CRLF0))
  2495.     ElseIf $tmp = 2 Then
  2496.         _GUICtrlComboBox_SetEditText($SeaInp, StringReplace(StringReplace($EditBoxSea0, @CR, StringLeft($CRLF0, 1)), @LF, StringRight($CRLF0, 1)))
  2497.     EndIf
  2498.     _Exit1()
  2499. EndFunc   ;==>_EditBox_OK
  2500.  
  2501. Func _EditBoxM() ; окно поиска и замены многострочного текста
  2502.     $GP = _ChildCoor($hGui, 540, 330)
  2503.     GUISetState(@SW_DISABLE, $hGui)
  2504.     $Gui1 = GUICreate($LngMLineRH, $GP[2], $GP[3], $GP[0], $GP[1], BitOR($WS_OVERLAPPEDWINDOW, $WS_POPUP), -1, $hGui)
  2505.     If Not @Compiled Then GUISetIcon($AutoItExe, 99)
  2506.     GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit1")
  2507.    
  2508.     $CRLF0 = GUICtrlRead($CRLF)
  2509.     $SeaInp0 = GUICtrlRead($SeaInp)
  2510.     $RepInp0 = GUICtrlRead($RepInp)
  2511.     If $CRLF0 Then _CRLF($CRLF0, $SeaInp0, $RepInp0)
  2512.  
  2513.     $EditBoxSea = GUICtrlCreateEdit('', 5, 5, 530, 140, $ES_AUTOVSCROLL + $WS_VSCROLL + $ES_NOHIDESEL + $ES_WANTRETURN)
  2514.     GUICtrlSetData($EditBoxSea, $SeaInp0)
  2515.     ; GUICtrlSetResizing(-1, 2 + 4 + 32 + 128 + 8)
  2516.     GUICtrlSetResizing(-1, 1)
  2517.  
  2518.     $EditBoxRep = GUICtrlCreateEdit('', 5, 150, 530, 140, $ES_AUTOVSCROLL + $WS_VSCROLL + $ES_NOHIDESEL + $ES_WANTRETURN)
  2519.     GUICtrlSetData($EditBoxRep, $RepInp0)
  2520.     ; GUICtrlSetResizing(-1, 2 + 4 + 64 + 128 + 8)
  2521.     GUICtrlSetResizing(-1, 1)
  2522.    
  2523.     $OK = GUICtrlCreateButton("OK", 240, $GP[3] - 35, 60, 30)
  2524.     GUICtrlSetOnEvent(-1, "_EditBoxM_OK")
  2525.     ; GUICtrlSetResizing(-1, 256 + 512 + 64 + 128)
  2526.     GUICtrlSetResizing(-1, 1)
  2527.  
  2528.     GUISetState(@SW_SHOW, $Gui1)
  2529. EndFunc   ;==>_EditBoxM
  2530.  
  2531. Func _EditBoxM_OK()
  2532.     $EditBoxSea0 = GUICtrlRead($EditBoxSea)
  2533.     $EditBoxRep0 = GUICtrlRead($EditBoxRep)
  2534.     $CRLF0 = GUICtrlRead($CRLF)
  2535.     ; если нет переносов, то вставляем и текст в инпут и выходим из функции
  2536.     $total = $EditBoxSea0 & $EditBoxRep0
  2537.     If Not (StringInStr($total, @CR) Or StringInStr($total, @LF)) Then
  2538.         _GUICtrlComboBox_SetEditText($CRLF, '')
  2539.         _GUICtrlComboBox_SetEditText($SeaInp, $EditBoxSea0)
  2540.         _GUICtrlComboBox_SetEditText($RepInp, $EditBoxRep0)
  2541.         Return _Exit1()
  2542.     EndIf
  2543.    
  2544.     $tmp = StringReplace($total, @CRLF, '')
  2545.     If Not (StringInStr($tmp, @CR) Or StringInStr($tmp, @LF)) Then ; если в тексте только цельные @CRLF
  2546.         $CRLF0 = _CRLF_Define($total) ; определяем символ подмены
  2547.         If @error Then Return _Exit1()
  2548.     Else
  2549.         $CRLF0 = _CRLF_Define($total)
  2550.         If @error Then Return _Exit1()
  2551.         $CRLF0 &= _CRLF_Define($total & $CRLF0)
  2552.         If @error Then Return _Exit1()
  2553.     EndIf
  2554.     _GUICtrlComboBox_SetEditText($CRLF, $CRLF0)
  2555.     $tmp = StringLen($CRLF0)
  2556.     If $tmp = 1 Then
  2557.         _GUICtrlComboBox_SetEditText($SeaInp, StringReplace($EditBoxSea0, @CRLF, $CRLF0))
  2558.         _GUICtrlComboBox_SetEditText($RepInp, StringReplace($EditBoxRep0, @CRLF, $CRLF0))
  2559.     ElseIf $tmp = 2 Then
  2560.         _GUICtrlComboBox_SetEditText($SeaInp, StringReplace(StringReplace($EditBoxSea0, @CR, StringLeft($CRLF0, 1)), @LF, StringRight($CRLF0, 1)))
  2561.         _GUICtrlComboBox_SetEditText($RepInp, StringReplace(StringReplace($EditBoxRep0, @CR, StringLeft($CRLF0, 1)), @LF, StringRight($CRLF0, 1)))
  2562.     EndIf
  2563.     _Exit1()
  2564. EndFunc   ;==>_EditBoxM_OK
  2565.  
  2566. Func _CRLF_Define($text)
  2567.     Local $i, $a = ChrW(0x00A9) & ChrW(0x00AE) & ChrW(0x00AB) & ChrW(0x00BB) & ChrW(0x2030) & ChrW(0x00A7) & ChrW(0x00B5) & ChrW(0x20AC) & ChrW(0x2122)
  2568.     $a = StringSplit('~@%&*^#\/+-_{}[]`<>' & $a, '')
  2569.     For $i = 1 To $a[0]
  2570.         If Not StringInStr($text, $a[$i]) Then Return $a[$i]
  2571.     Next
  2572.     Return SetError(1, 0, '')
  2573. EndFunc   ;==>_CRLF_Define
  2574.  
  2575. Func _Setting()
  2576.     $GP = _ChildCoor($hGui, 340, 360)
  2577.     GUISetState(@SW_DISABLE, $hGui)
  2578.     $Gui1 = GUICreate($LngbSet, $GP[2], $GP[3], $GP[0], $GP[1], BitOR($WS_CAPTION, $WS_SYSMENU, $WS_POPUP), -1, $hGui)
  2579.     If Not @Compiled Then GUISetIcon($AutoItExe, 99)
  2580.     GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit1")
  2581.  
  2582.     $LbLimitSize = GUICtrlCreateLabel($LngSzFl, 10, 10, 245, 17)
  2583.     $InpLimitSize = GUICtrlCreateInput($iniLimitSize, 260, 6, 50, 22)
  2584.  
  2585.     $LbLimitFile = GUICtrlCreateLabel($LngMFile, 10, 32, 245, 17)
  2586.     $InpLimitFile = GUICtrlCreateInput($iniLimitFile, 260, 30, 50, 22)
  2587.  
  2588.     $LbPathBackup = GUICtrlCreateLabel($LngBakPh, 10, 53, 260, 17)
  2589.     $InpPathBackup = GUICtrlCreateInput($iniPathBackup, 10, 70, 320, 22)
  2590.  
  2591.     $Search = FileFindFirstFile(@ScriptDir & '\Lang\*.lng')
  2592.     If $Search <> -1 Then
  2593.         $LangList = 'none'
  2594.         While 1
  2595.             $file = FileFindNextFile($Search)
  2596.             If @error Then ExitLoop
  2597.             $LangList &= $sep & $file
  2598.         WEnd
  2599.         GUICtrlCreateLabel('Language', 10, 103, 65, 17)
  2600.         $ComboLang = GUICtrlCreateCombo('', 75, 100, 80, 22, $CBS_DROPDOWNLIST + $WS_VSCROLL)
  2601.         GUICtrlSetData(-1, $LangList, $LangPath)
  2602.         GUICtrlSetOnEvent(-1, "_SetLang")
  2603.     EndIf
  2604.     FileClose($Search)
  2605.  
  2606.     $LbHst = GUICtrlCreateLabel($LngHst, 10, 130, 250, 17)
  2607.     $InpHst = GUICtrlCreateInput($KolStr, 260, 127, 50, 22)
  2608.    
  2609.     $IgnGr = GUICtrlCreateGroup($LngIgnGr, 10, 155, 320, 56)
  2610.     $atrR = GUICtrlCreateCheckbox($LngAtrR & ' (R)', 20, 170, 130, 17)
  2611.     If StringInStr($ExcldAttrib, 'R') Then GUICtrlSetState(-1, 1)
  2612.     $atrA = GUICtrlCreateCheckbox($LngAtrA & ' (A)', 20, 190, 130, 17)
  2613.     If StringInStr($ExcldAttrib, 'A') Then GUICtrlSetState(-1, 1)
  2614.     $atrH = GUICtrlCreateCheckbox($LngAtrH & ' (H)', 150, 170, 130, 17)
  2615.     If StringInStr($ExcldAttrib, 'H') Then GUICtrlSetState(-1, 1)
  2616.     $atrS = GUICtrlCreateCheckbox($LngAtrS & ' (S)', 150, 190, 130, 17)
  2617.     If StringInStr($ExcldAttrib, 'S') Then GUICtrlSetState(-1, 1)
  2618.    
  2619.     $ChData = GUICtrlCreateCheckbox($LngData, 10, 220, 300, 17)
  2620.     If $ReData = 1 Then GUICtrlSetState(-1, 1)
  2621.    
  2622.     $LbChS = GUICtrlCreateLabel($LngChS, 10, 247, 65, 17)
  2623.     $ComboChar = GUICtrlCreateCombo('', 75, 245, 140, 22, $CBS_DROPDOWNLIST + $WS_VSCROLL)
  2624.     GUICtrlSetData($ComboChar, 'Auto' & $sep & 'ANSI' & $sep & 'Bin' & $sep & 'UTF16 Little Endian' & $sep & 'UTF16 Big Endian' & $sep & 'UTF8 (+ BOM)' & $sep & 'UTF8 (- BOM)', _CharNumToName($CharSet))
  2625.  
  2626.     $LbErrSize = GUICtrlCreateLabel($LngSzEr, 10, 273, 245, 34)
  2627.     $InpErrSize = GUICtrlCreateInput(Int($iniErrSize / 1024), 260, 276, 50, 22)
  2628.  
  2629.     $OK = GUICtrlCreateButton("OK", 140, $GP[3] - 48, 60, 30)
  2630.     GUICtrlSetOnEvent(-1, "_Setting_OK")
  2631.  
  2632.     GUISetState(@SW_SHOW, $Gui1)
  2633. EndFunc   ;==>_Setting
  2634.  
  2635. Func _Setting_OK()
  2636.     $CharSet = _CharNameToNum(GUICtrlRead($ComboChar))
  2637.    
  2638.     $tmp = StringReplace(GUICtrlRead($InpLimitSize), ',', '.')
  2639.     If StringRegExp($tmp, '^\d+(.\d+)?$') And $tmp <> '0' Then
  2640.         $iniLimitSize = Number($tmp)
  2641.     Else
  2642.         MsgBox(0, $LngErr, $LngMB13)
  2643.     EndIf
  2644.    
  2645.     $tmp = GUICtrlRead($InpErrSize)
  2646.     If Not StringIsDigit($tmp) Or $tmp = '0' Then
  2647.         MsgBox(0, $LngErr, $LngMB13)
  2648.     Else
  2649.         $iniErrSize = Number($tmp) * 1024
  2650.     EndIf
  2651.    
  2652.     $tmp = GUICtrlRead($InpLimitFile)
  2653.     If Not StringIsDigit($tmp) Or $tmp = '0' Then
  2654.         MsgBox(0, $LngErr, $LngMB14)
  2655.     Else
  2656.         $iniLimitFile = Number($tmp)
  2657.     EndIf
  2658.    
  2659.     $tmp = Int(GUICtrlRead($InpHst))
  2660.     If $tmp < 1 Or $tmp > 50 Then
  2661.         MsgBox(0, $LngErr, $LngMB15)
  2662.     Else
  2663.         $KolStr = $tmp
  2664.     EndIf
  2665.    
  2666.     $ExcldAttrib = ''
  2667.     If GUICtrlRead($atrR) = 1 Then $ExcldAttrib &= 'R'
  2668.     If GUICtrlRead($atrA) = 1 Then $ExcldAttrib &= 'A'
  2669.     If GUICtrlRead($atrH) = 1 Then $ExcldAttrib &= 'H'
  2670.     If GUICtrlRead($atrS) = 1 Then $ExcldAttrib &= 'S'
  2671.    
  2672.     If GUICtrlRead($ChData) = 1 Then
  2673.         $ReData = 1
  2674.     Else
  2675.         $ReData = 0
  2676.     EndIf
  2677.    
  2678.     $iniPathBackup = GUICtrlRead($InpPathBackup)
  2679.  
  2680.     If $iniPathBackup And Not (StringRegExp($iniPathBackup, '(?i)^[a-z]:[^/:*?"<>|]*$') And StringInStr('|Removable|Fixed|', '|' & DriveGetType(StringLeft($iniPathBackup, 1) & ':\') & '|') And Not StringInStr($iniPathBackup, '\\')) Then
  2681.         MsgBox(0, $LngErr, $LngMB16)
  2682.         $iniPathBackup = ''
  2683.     EndIf
  2684.     _Exit1()
  2685. EndFunc   ;==>_Setting_OK
  2686.  
  2687. Func _CharNumToName($i)
  2688.     If $CharSetAuto Then Return 'Auto'
  2689.     Switch $i
  2690.         Case 0
  2691.             $i = 'ANSI'
  2692.         Case 16
  2693.             $i = 'Bin'
  2694.         Case 32
  2695.             $i = 'UTF16 Little Endian'
  2696.         Case 64
  2697.             $i = 'UTF16 Big Endian'
  2698.         Case 128
  2699.             $i = 'UTF8 (+ BOM)'
  2700.         Case 256
  2701.             $i = 'UTF8 (- BOM)'
  2702.         Case Else
  2703.             $i = 'Auto'
  2704.     EndSwitch
  2705.     Return $i
  2706. EndFunc   ;==>_CharNumToName
  2707.  
  2708. Func _CharNameToNum($i)
  2709.     If $i = 'Auto' Then
  2710.         $CharSetAuto = 1
  2711.     Else
  2712.         $CharSetAuto = 0
  2713.     EndIf
  2714.     Switch $i
  2715.         Case 'Auto'
  2716.             $i = -1
  2717.         Case 'ANSI'
  2718.             $i = 0
  2719.         Case 'Bin'
  2720.             $i = 16
  2721.         Case 'UTF16 Little Endian'
  2722.             $i = 32
  2723.         Case 'UTF16 Big Endian'
  2724.             $i = 64
  2725.         Case 'UTF8 (+ BOM)'
  2726.             $i = 128
  2727.         Case 'UTF8 (- BOM)'
  2728.             $i = 256
  2729.         Case Else
  2730.             $i = -1
  2731.     EndSwitch
  2732.     Return $i
  2733. EndFunc   ;==>_CharNameToNum
  2734.  
  2735. Func _SetLang()
  2736.     Local $aLng
  2737.     $LangPath = GUICtrlRead($ComboLang)
  2738.     If $LangPath <> 'none' And FileExists(@ScriptDir & '\Lang\' & $LangPath) Then
  2739.         $aLng = IniReadSection(@ScriptDir & '\Lang\' & $LangPath, 'lng')
  2740.         If Not @error Then
  2741.             For $i = 1 To $aLng[0][0]
  2742.                 If StringInStr($aLng[$i][1], '\r\n') Then $aLng[$i][1] = StringReplace($aLng[$i][1], '\r\n', @CRLF)
  2743.                 If IsDeclared('Lng' & $aLng[$i][0]) Then Assign('Lng' & $aLng[$i][0], $aLng[$i][1])
  2744.             Next
  2745.             _SetLang2()
  2746.             IniWrite($Ini, 'Set', 'Lang', $LangPath)
  2747.         EndIf
  2748.     Else
  2749.         For $i = 1 To $aLng0[0][0]
  2750.             If StringInStr($aLng0[$i][1], '\r\n') Then $aLng0[$i][1] = StringReplace($aLng0[$i][1], '\r\n', @CRLF)
  2751.             Assign('Lng' & $aLng0[$i][0], $aLng0[$i][1])
  2752.         Next
  2753.         _SetLang2()
  2754.         IniWrite($Ini, 'Set', 'Lang', 'none')
  2755.     EndIf
  2756. EndFunc   ;==>_SetLang
  2757.  
  2758. Func _SetLang2()
  2759.     WinSetTitle($Gui1, '', $LngbSet)
  2760.     GUICtrlSetTip($About, $LngAbout)
  2761.     GUICtrlSetTip($restart, $LngRest)
  2762.    
  2763.     If $iniBAK Then
  2764.         GUICtrlSetTip($BAKBut, $LngBAKH2)
  2765.     Else
  2766.         GUICtrlSetTip($BAKBut, $LngBAKH1)
  2767.     EndIf
  2768.  
  2769.     If $iniREx Then
  2770.         GUICtrlSetTip($RExBut, $LngRExH2)
  2771.     Else
  2772.         GUICtrlSetTip($RExBut, $LngRExH1)
  2773.     EndIf
  2774.  
  2775.     If $iniAa Then
  2776.         GUICtrlSetTip($AaBut, $LngAaH2)
  2777.     Else
  2778.         GUICtrlSetTip($AaBut, $LngAaH1)
  2779.     EndIf
  2780.  
  2781.     If $iniOutRes Then
  2782.         GUICtrlSetTip($OutRBut, $LngOutRH2)
  2783.     Else
  2784.         GUICtrlSetTip($OutRBut, $LngOutRH1)
  2785.     EndIf
  2786.  
  2787.     If $inisub Then
  2788.         GUICtrlSetTip($SubBut, $LngSubH2)
  2789.     Else
  2790.         GUICtrlSetTip($SubBut, $LngSubH1)
  2791.     EndIf
  2792.  
  2793.     If $iniExc Then
  2794.         GUICtrlSetTip($ExcBut, $LngExcH2)
  2795.     Else
  2796.         GUICtrlSetTip($ExcBut, $LngExcH1)
  2797.     EndIf
  2798.  
  2799.     GUICtrlSetTip($CRLF, $LngCRLFH)
  2800.     GUICtrlSetTip($CRLFLab, $LngCRLFH)
  2801.     GUICtrlSetTip($spec, $LngPSmb)
  2802.     GUICtrlSetTip($SeaBtn, $LngSea)
  2803.     GUICtrlSetTip($SeaClear, $LngCr)
  2804.     GUICtrlSetTip($RepBtn, $LngRep)
  2805.     GUICtrlSetTip($RepClear, $LngCr)
  2806.     GUICtrlSetTip($ScrRep, $LngOScr)
  2807.     GUICtrlSetTip($AddRep, $LngAScr)
  2808.     GUICtrlSetTip($TypClear, $LngCr)
  2809.     GUICtrlSetTip($TypDef, $LngDef)
  2810.     GUICtrlSetTip($EditBut, $LngEdH)
  2811.     GUICtrlSetTip($EditFBut, $LngEdFH)
  2812.     GUICtrlSetTip($StrBut, $LngStH)
  2813.     GUICtrlSetTip($RBrBut, $LngRBrH)
  2814.     GUICtrlSetTip($EprBut, $LngEpr)
  2815.     GUICtrlSetTip($LstBut, $LngLst)
  2816.     GUICtrlSetTip($MLineS, $LngMLineSH)
  2817.     GUICtrlSetTip($MLineR, $LngMLineRH)
  2818.     ; GUICtrlSetTip($StopBut, $LngSpH)
  2819.     ; GUICtrlSetTip($OpenLng, $LngType)
  2820.     ; GUICtrlSetTip($WbMn, $LngCopy)
  2821.  
  2822.     GUICtrlSetData($CRLFLab, $LngCRLF)
  2823.     GUICtrlSetData($specLab, $LngPSmb)
  2824.     GUICtrlSetData($SeaLab, $LngSea)
  2825.     GUICtrlSetData($RepLab, $LngRep)
  2826.     GUICtrlSetData($TypLab, $LngMsk)
  2827.     GUICtrlSetData($PatLab, $LngPth)
  2828.     GUICtrlSetData($StatusBar, $LngSb1)
  2829.     GUICtrlSetData($EditBut, $LngEd)
  2830.     GUICtrlSetData($EditFBut, $LngEdF)
  2831.     GUICtrlSetData($StrBut, $LngSt)
  2832.     GUICtrlSetData($StopBut, $LngSp)
  2833.     GUICtrlSetData($Cont1, $LngEd)
  2834.     GUICtrlSetData($Cont3, $LngEdF)
  2835.     GUICtrlSetData($Cont2, $LngSt)
  2836.     GUICtrlSetData($Cont4, $LngEpr)
  2837.     GUICtrlSetData($LbLimitSize, $LngSzFl)
  2838.     GUICtrlSetData($LbLimitFile, $LngMFile)
  2839.     GUICtrlSetData($LbPathBackup, $LngBakPh)
  2840.     GUICtrlSetData($LbHst, $LngHst)
  2841.     GUICtrlSetData($IgnGr, $LngIgnGr)
  2842.     GUICtrlSetData($atrR, $LngAtrR)
  2843.     GUICtrlSetData($atrA, $LngAtrA)
  2844.     GUICtrlSetData($atrH, $LngAtrH)
  2845.     GUICtrlSetData($atrS, $LngAtrS)
  2846.     GUICtrlSetData($ChData, $LngData)
  2847.     GUICtrlSetData($LbChS, $LngChS)
  2848.     GUICtrlSetData($LbErrSize, $LngSzEr)
  2849.     ; GUICtrlSetData($Btn_Back, $LngBck) ; не возможно выбрать просмотр и настройки
  2850.     ; GUICtrlSetData($Btn_Next, $LngNxt)
  2851. EndFunc   ;==>_SetLang2
  2852.  
  2853. Func _ReadScenario($ScrPath)
  2854.     Local $m, $sTmp, $tmp, $i
  2855.     ; Читаем файл в массив
  2856.     $tmp = StringReplace(FileRead($ScrPath), $iniSep, $sep)
  2857.     $tmp = StringRegExp($tmp, '(?m)^-->\|(.*?)' & $sep & '(.*?)' & $sep & '(.*?)' & $sep & '(.*?)' & $sep & '(.*?)' & $sep & '(.*?)' & $sep & '(.*?)' & $sep & '(.*?)' & $sep & '(.*?)' & $sep & '(.*?)' & $sep & '(.*?)' & $sep & '(.*?)' & $sep & '(.*?)\|<--', 3)
  2858.     If @error Then Return SetError(1)
  2859.     $sTmp = UBound($tmp)
  2860.     Dim $aScenario[$sTmp / 13][13]
  2861.     $m = 0
  2862.     For $i = 0 To $sTmp - 1 Step 13
  2863.         $aScenario[$m][0] = $tmp[$i]
  2864.         $aScenario[$m][1] = $tmp[$i + 1]
  2865.         $aScenario[$m][2] = $tmp[$i + 2]
  2866.         $aScenario[$m][3] = $tmp[$i + 3]
  2867.         $aScenario[$m][4] = $tmp[$i + 4]
  2868.         $aScenario[$m][5] = $tmp[$i + 5]
  2869.         $aScenario[$m][6] = $tmp[$i + 6]
  2870.         $aScenario[$m][7] = $tmp[$i + 7]
  2871.         $aScenario[$m][8] = $tmp[$i + 8]
  2872.         $aScenario[$m][9] = $tmp[$i + 9]
  2873.         $aScenario[$m][10] = $tmp[$i + 10]
  2874.         $aScenario[$m][11] = $tmp[$i + 11]
  2875.         $aScenario[$m][12] = $tmp[$i + 12]
  2876.         $m += 1
  2877.     Next
  2878. EndFunc   ;==>_ReadScenario
  2879.  
  2880. ; Просмотр сценария перед использовнием
  2881. Func _ScenarioView()
  2882.     Local $GP, $i, $LVSR, $x
  2883.     _ReadScenario($ScrPath)
  2884.     If @error Then Return
  2885.     $x = @DesktopWidth - 20
  2886.     If $x > 1120 Then $x = 1100
  2887.     $GP = _ChildCoor($hGui, $x, 420)
  2888.     GUISetState(@SW_DISABLE, $hGui)
  2889.    
  2890.     $Gui1 = GUICreate($LngG1T, $GP[2], $GP[3], $GP[0], $GP[1], BitOR($WS_OVERLAPPEDWINDOW, $WS_POPUP), -1, $hGui)
  2891.     If Not @Compiled Then GUISetIcon($AutoItExe, 205)
  2892.     GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit1")
  2893.    
  2894.     $LVSR = GUICtrlCreateListView($LngLV1 & $sep & $LngLV2 & $sep & 'Aa' & $sep & 'REx' & $sep & 'CRLF' & $sep & 'BAK' & $sep & 'Path' & $sep & 'Mask' & $sep & 'Exc' & $sep & 'Sub' & $sep & 'Data' & $sep & 'Attrib' & $sep & 'Char', 5, 5, $x - 10, 380, -1, 0x00000001)
  2895.     GUICtrlSetResizing(-1, 2 + 4 + 32 + 64)
  2896.     GUICtrlSendMsg(-1, 0x1000 + 30, 0, 203) ; установка ширина столбца
  2897.     GUICtrlSendMsg(-1, 0x1000 + 30, 1, 203)
  2898.     For $i = 0 To UBound($aScenario) - 1
  2899.         GUICtrlCreateListViewItem($aScenario[$i][0] & $sep & $aScenario[$i][1] & $sep & $aScenario[$i][2] & $sep & $aScenario[$i][3] & $sep & $aScenario[$i][4] & $sep & $aScenario[$i][5] & $sep & $aScenario[$i][6] & $sep & $aScenario[$i][7] & $sep & $aScenario[$i][8] & $sep & $aScenario[$i][9] & $sep & $aScenario[$i][10] & $sep & $aScenario[$i][11] & $sep & $aScenario[$i][12], $LVSR)
  2900.     Next
  2901.     $ScrStart = GUICtrlCreateButton($LngUS, $x / 2 - 70, 390, 140, 25)
  2902.     GUICtrlSetTip(-1, $LngUSH)
  2903.     GUICtrlSetResizing(-1, 8 + 64 + 256 + 512)
  2904.     GUICtrlSetOnEvent(-1, "_UseScenario")
  2905.  
  2906.     GUISetState(@SW_SHOW, $Gui1)
  2907. EndFunc   ;==>_ScenarioView
  2908.  
  2909. Func _UseScenario()
  2910.     ; $TrScr = 1
  2911.     _Exit1()
  2912.     $aTextScr = $aScenario
  2913.     GUICtrlSetData($SeaInp, $ScrPath)
  2914.     GUICtrlSetData($SeaInp, $ScrPath)
  2915.     GUICtrlSetData($RepInp, $ScrPath)
  2916.     GUICtrlSetData($RepInp, $ScrPath)
  2917. EndFunc   ;==>_UseScenario
  2918.  
  2919. Func _Exit()
  2920.     _saveini(1)
  2921.     GUIDelete($hGui)
  2922.     GUIDelete($Gui1)
  2923. EndFunc   ;==>_Exit
  2924.  
  2925. Func _Quit()
  2926.     Exit
  2927. EndFunc   ;==>_Quit
  2928.  
  2929. Func _saveini($ty = 1)
  2930.     Local $iState
  2931.     $SeaInp0 = GUICtrlRead($SeaInp)
  2932.     $RepInp0 = GUICtrlRead($RepInp)
  2933.     $TypInp0 = GUICtrlRead($TypInp)
  2934.  
  2935.     If Not ($SeaInp0 = $RepInp0 And StringRight($RepInp0, 4) = '.srt' And FileExists($RepInp0)) Then
  2936.         $iniSea = StringReplace($sep & $iniSea & $sep, $sep & $SeaInp0 & $sep, $sep)
  2937.         $iniSea = $SeaInp0 & StringTrimRight($iniSea, 1)
  2938.         $tmp = StringInStr($iniSea, $sep, 0, $KolStr)
  2939.         If $tmp Then $iniSea = StringLeft($iniSea, $tmp - 1)
  2940.         GUICtrlSetData($SeaInp, $sep & $iniSea, $SeaInp0)
  2941.        
  2942.         $iniRep = StringReplace($sep & $iniRep & $sep, $sep & $RepInp0 & $sep, $sep)
  2943.         $iniRep = $RepInp0 & StringTrimRight($iniRep, 1)
  2944.         $tmp = StringInStr($iniRep, $sep, 0, $KolStr)
  2945.         If $tmp Then $iniRep = StringLeft($iniRep, $tmp - 1)
  2946.         GUICtrlSetData($RepInp, $sep & $iniRep, $RepInp0)
  2947.     EndIf
  2948.    
  2949.     If $TypInp0 Then
  2950.         $iniMask = StringReplace($sep & $iniMask & $sep, $sep & $TypInp0 & $sep, $sep)
  2951.         $iniMask = $TypInp0 & StringTrimRight($iniMask, 1)
  2952.         $tmp = StringInStr($iniMask, $sep, 0, $KolStr)
  2953.         If $tmp Then $iniMask = StringLeft($iniMask, $tmp - 1)
  2954.         GUICtrlSetData($TypInp, $sep & $iniMask, $TypInp0)
  2955.     EndIf
  2956.    
  2957.     If $ty = 1 Then
  2958.         IniWrite($Ini, 'Set', 'Search', StringReplace(StringReplace('"' & $iniSea & '"', $sep & $sep, $sep), $sep, $iniSep))
  2959.         IniWrite($Ini, 'Set', 'Replace', StringReplace(StringReplace('"' & $iniRep & '"', $sep & $sep, $sep), $sep, $iniSep))
  2960.         IniWrite($Ini, 'Set', 'Mask', StringReplace('"' & $iniMask & '"', $sep, $iniSep))
  2961.         IniWrite($Ini, 'Set', 'Path', StringReplace($iniPath, $sep, $iniSep))
  2962.         IniWrite($Ini, 'Set', 'Aa', $iniAa)
  2963.         IniWrite($Ini, 'Set', 'sub', $inisub)
  2964.         IniWrite($Ini, 'Set', 'REx', $iniREx)
  2965.         IniWrite($Ini, 'Set', 'BAK', $iniBAK)
  2966.         IniWrite($Ini, 'Set', 'OutRes', $iniOutRes)
  2967.         IniWrite($Ini, 'Set', 'ExceptMask', $iniExc)
  2968.         IniWrite($Ini, 'Set', 'Lang', $LangPath)
  2969.         IniWrite($Ini, 'Set', 'PathBackup', $iniPathBackup)
  2970.         IniWrite($Ini, 'Set', 'LimitSize', $iniLimitSize)
  2971.         IniWrite($Ini, 'Set', 'LimitFile', $iniLimitFile)
  2972.         IniWrite($Ini, 'Set', 'ErrSize', $iniErrSize)
  2973.         IniWrite($Ini, 'Set', 'History', $KolStr)
  2974.         Switch $CharSet
  2975.             Case 0
  2976.                 $tmp = 'ANSI'
  2977.             Case 16
  2978.                 $tmp = 'Bin'
  2979.             Case 32
  2980.                 $tmp = 'UTF16 Little Endian'
  2981.             Case 64
  2982.                 $tmp = 'UTF16 Big Endian'
  2983.             Case 128
  2984.                 $tmp = 'UTF8 (+ BOM)'
  2985.             Case 256
  2986.                 $tmp = 'UTF8 (- BOM)'
  2987.             Case Else
  2988.                 $tmp = 'Auto'
  2989.         EndSwitch
  2990.         IniWrite($Ini, 'Set', 'CharSet', $tmp)
  2991.         IniWrite($Ini, 'Set', 'PosW', $WHXY[0])
  2992.         IniWrite($Ini, 'Set', 'PosL', $WHXY[2])
  2993.         IniWrite($Ini, 'Set', 'PosT', $WHXY[3])
  2994.         IniWrite($Ini, 'Set', 'PosH', $WHXY[1])
  2995.         IniWrite($Ini, 'Set', 'PosMax', $WHXY[4]) ; сохранение развёрнутость окна
  2996.         If $RichPos[0] Then ; если окно открывалось, то сохраняем новые координаты
  2997.             IniWrite($Ini, 'Set', 'RichW', $RichPos[0])
  2998.             IniWrite($Ini, 'Set', 'RichH', $RichPos[1])
  2999.             IniWrite($Ini, 'Set', 'RichL', $RichPos[2])
  3000.             IniWrite($Ini, 'Set', 'RichT', $RichPos[3])
  3001.             IniWrite($Ini, 'Set', 'RichMax', $RichPos[4])
  3002.         EndIf
  3003.     EndIf
  3004. EndFunc   ;==>_saveini
  3005.  
  3006. Func _stat($stat)
  3007.     Switch $TrEx & $stat
  3008.         Case 01
  3009.             $MinSizeH = 360
  3010.             $MaxSizeH = @DesktopHeight
  3011.             WinMove($hGui, "", Default, Default, Default, $WHXY[1])
  3012.             $ClientSz = WinGetClientSize($hGui) ; для ширины
  3013.             $TrEx = 1 ; триггер, если включился режим 1, то второй раз не повторяется
  3014.             GUICtrlSetPos($Out, 5, 250, $ClientSz[0] - 10, $ClientSz[1] - 283)
  3015.             GUICtrlSetState($Out, $GUI_SHOW)
  3016.             GUICtrlSetState($EditBut, $GUI_SHOW)
  3017.             GUICtrlSetState($EditFBut, $GUI_SHOW)
  3018.             GUICtrlSetState($StrBut, $GUI_SHOW)
  3019.             GUICtrlSetState($EprBut, $GUI_SHOW)
  3020.             GUICtrlSetState($LstBut, $GUI_SHOW)
  3021.         Case 10
  3022.             $MinSizeH = $aPosH2[3]
  3023.             $MaxSizeH = $aPosH2[3]
  3024.             WinMove($hGui, "", Default, Default, Default, 250)
  3025.             $TrEx = 0
  3026.             GUICtrlSetState($Out, $GUI_HIDE)
  3027.             GUICtrlSetState($EditBut, $GUI_HIDE)
  3028.             GUICtrlSetState($EditFBut, $GUI_HIDE)
  3029.             GUICtrlSetState($StrBut, $GUI_HIDE)
  3030.             GUICtrlSetState($EprBut, $GUI_HIDE)
  3031.             GUICtrlSetState($LstBut, $GUI_HIDE)
  3032.     EndSwitch
  3033. EndFunc   ;==>_stat
  3034.  
  3035. Func _Resized() ; срабатывает при изменении размера окна, но не при "Развернуть на весь экран", "Восстановить"
  3036.     $GuiPos = WinGetPos($hGui)
  3037.     $WHXY[2] = $GuiPos[0]
  3038.     $WHXY[3] = $GuiPos[1]
  3039.     $ClientSz = WinGetClientSize($hGui) ; сохраняется размер клиентской области
  3040.     $WHXY[0] = $ClientSz[0]
  3041.     If $TrEx And $ClientSz[1] > 270 Then $WHXY[1] = $GuiPos[3]
  3042.     ; Сохраняем размеры и позицию окна только при закрытии программы !!!
  3043. EndFunc   ;==>_Resized
  3044.  
  3045. Func _Maximize() ; срабатывает при изменении размера окна, но не при "Развернуть на весь экран", "Восстановить"
  3046.     $WHXY[4] = 1
  3047. EndFunc   ;==>_Maximize
  3048.  
  3049. Func _Restore() ; срабатывает при изменении размера окна, но не при "Развернуть на весь экран", "Восстановить"
  3050.     $WHXY[4] = 0
  3051. EndFunc   ;==>_Restore
  3052.  
  3053. Func WM_MOVING($hwnd, $msg, $wParam, $lParam)
  3054.     Local $sRect = DllStructCreate("Int[4]", $lParam)
  3055.     Switch $hwnd ; проверка хендла позволяет не отключать функцию в диалоговых окнах
  3056.         Case $hGui
  3057.             ; получаем координаты окна. Это нужно при закрытии свёрнутого скрипта
  3058.             $WHXY[2] = DllStructGetData($sRect, 1, 1)
  3059.             $WHXY[3] = DllStructGetData($sRect, 1, 2)
  3060.             ; Case $Gui1
  3061.             ; $RichPos[2] = DllStructGetData($sRect, 1, 1)
  3062.             ; $RichPos[3] = DllStructGetData($sRect, 1, 2)
  3063.     EndSwitch
  3064.     Return $GUI_RUNDEFMSG
  3065. EndFunc   ;==>WM_MOVING
  3066.  
  3067. Func WM_GETMINMAXINFO($hwnd, $iMsg, $wParam, $lParam)
  3068.     #forceref $iMsg, $wParam
  3069.     Switch $hwnd ; проверка хендла позволяет не отключать функцию в диалоговых окнах
  3070.         Case $hGui
  3071.             Local $tMINMAXINFO = DllStructCreate("int;int;" & _
  3072.                     "int MaximSizeW; int MaximSizeH;" & _
  3073.                     "int MaxPositionX;int MaxPositionY;" & _
  3074.                     "int MinSizeW; int MinSizeH;" & _
  3075.                     "int MaxSizeW; int MaxSizeH", _
  3076.                     $lParam)
  3077.             DllStructSetData($tMINMAXINFO, "MinSizeW", 367) ; минимальные размеры окна по ширине
  3078.             DllStructSetData($tMINMAXINFO, "MinSizeH", $MinSizeH) ; минимальные размеры окна по высоте
  3079.             If Not $TrEx Then DllStructSetData($tMINMAXINFO, "MaxSizeH", $MaxSizeH) ; Если режим без вывода результатов, то запрет на увелич. окна по вертикали
  3080.         Case $Gui1
  3081.             Local $tMINMAXINFO = DllStructCreate("int;int;" & _
  3082.                     "int MaximSizeW; int MaximSizeH;" & _
  3083.                     "int MaxPositionX;int MaxPositionY;" & _
  3084.                     "int MinSizeW; int MinSizeH;" & _
  3085.                     "int MaxSizeW; int MaxSizeH", _
  3086.                     $lParam)
  3087.             DllStructSetData($tMINMAXINFO, "MinSizeW", 200) ; минимальные размеры окна по ширине
  3088.             DllStructSetData($tMINMAXINFO, "MinSizeH", 200) ; минимальные размеры окна по высоте
  3089.     EndSwitch
  3090. EndFunc   ;==>WM_GETMINMAXINFO
  3091.  
  3092. Func _RunCMD()
  3093.     Local $aTmp, $BackUp, $Casesense, $CRLF, $Include, $Depth, $Mask, $ParamLine, $Path, $RegExp, $Replace, $Search, $spr, $ReData, $ExcldAttrib
  3094.     $spr = Chr(6) & Chr(1) & Chr(6) ; разделитель параметров
  3095.  
  3096.     $ParamLine = $spr & _ArrayToString($CmdLine, $spr, 1) & $spr
  3097.     ; проверка ключей:
  3098.    
  3099.     ; /s"Search" - строка поиска
  3100.     $aTmp = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]s(.+?)' & $spr, 3)
  3101.     If Not @error And UBound($aTmp) = 1 Then
  3102.         $Search = $aTmp[0]
  3103.     Else
  3104.         Exit 1
  3105.     EndIf
  3106.     ; MsgBox(0, '2', $ParamLine)
  3107.    
  3108.     ; /r"Replace" - строка замены
  3109.     $aTmp = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]r(.+?)' & $spr, 3)
  3110.     If Not @error And UBound($aTmp) = 1 Then
  3111.         $Replace = $aTmp[0]
  3112.     Else
  3113.         Exit 2
  3114.     EndIf
  3115.    
  3116.     If $Search == $Replace Then Exit 6
  3117.    
  3118.     ; /a - независимо от регистра
  3119.     $Casesense = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]a' & $spr)
  3120.    
  3121.     ; /e - регулярное выражение
  3122.     $RegExp = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]e' & $spr)
  3123.    
  3124.     ; /w"~|" - символы заменяющие перенос строки @CRLF.
  3125.     ; Если один или два одинаковых символа, то аналогично @CRLF, а если два разных символа, то первый символ заменяет CR, второй LF
  3126.     $aTmp = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]w(.{1,2}?)' & $spr, 3)
  3127.     If Not @error And UBound($aTmp) = 1 Then
  3128.         $CRLF = $aTmp[0]
  3129.     Else
  3130.         $CRLF = ''
  3131.     EndIf
  3132.    
  3133.     ; /b - делать бэкап изменяемых файлов
  3134.     $BackUp = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]b' & $spr)
  3135.    
  3136.     ; /b"PathBackUp" - ключ или ключ с путём
  3137.     $aTmp = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]b(.*?)' & $spr, 3)
  3138.     If Not @error And UBound($aTmp) > 0 Then
  3139.         $BackUp = $aTmp[0]
  3140.         If $BackUp = '' Then $BackUp = 1
  3141.     Else
  3142.         $BackUp = 0
  3143.     EndIf
  3144.    
  3145.     ; /p"Path" - путь поиска
  3146.     $aTmp = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]p(.+?)' & $spr, 3)
  3147.     If Not @error And UBound($aTmp) = 1 Then
  3148.         $Path = $aTmp[0]
  3149.     Else
  3150.         Exit 3
  3151.     EndIf
  3152.    
  3153.     ; /m"Mask" - маска
  3154.     $aTmp = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]m(.*?)' & $spr, 3)
  3155.     If Not @error And UBound($aTmp) = 1 Then
  3156.         $Mask = $aTmp[0]
  3157.         If $Mask = '' Then $Mask = '*'
  3158.     Else
  3159.         $Mask = '*'
  3160.     EndIf
  3161.    
  3162.     ; /i - исключение
  3163.     If StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]i' & $spr) Then
  3164.         $Include = False
  3165.     Else
  3166.         $Include = True
  3167.     EndIf
  3168.    
  3169.     ; /l"Depth" - уровень вложения
  3170.     $aTmp = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]l(\d+?)' & $spr, 3)
  3171.     If Not @error And UBound($aTmp) = 1 Then
  3172.         $Depth = $aTmp[0]
  3173.     Else
  3174.         $Depth = 125
  3175.     EndIf
  3176.    
  3177.     ; /d - восстанавливать прежнюю дату
  3178.     $ReData = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]d' & $spr)
  3179.    
  3180.     ; /t"RAHS" - атрибуты, файла которые содержат хотя бы обин из них не участвуют в операции замены.
  3181.     $aTmp = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]t(.+?)' & $spr, 3)
  3182.     If Not @error And UBound($aTmp) = 1 Then
  3183.         $ExcldAttrib = $aTmp[0]
  3184.     Else
  3185.         $ExcldAttrib = ''
  3186.     EndIf
  3187.    
  3188.     ; /f"U8" - кодировка по умолчанию Auto, иначе указанная ANSI, U8, U8-B, U16L, U16B, Bin.
  3189.     $aTmp = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]f(.{2,4}?)' & $spr, 3)
  3190.     If Not @error And UBound($aTmp) = 1 Then
  3191.         Select
  3192.             Case $aTmp[0] = 'ANSI'
  3193.                 $CharSet = 0
  3194.             Case $aTmp[0] = 'Bin'
  3195.                 $CharSet = 16
  3196.             Case $aTmp[0] = 'U16L'
  3197.                 $CharSet = 32
  3198.             Case $aTmp[0] = 'U16B'
  3199.                 $CharSet = 64
  3200.             Case $aTmp[0] = 'U8'
  3201.                 $CharSet = 128
  3202.             Case $aTmp[0] = 'U8-B'
  3203.                 $CharSet = 256
  3204.             Case Else
  3205.                 $CharSet = -1 ; Auto
  3206.         EndSelect
  3207.     Else
  3208.         $CharSet = 0
  3209.     EndIf
  3210.    
  3211.     ; /z"MaxFileSize" - максимальный размер файла
  3212.     $aTmp = StringRegExp($ParamLine, '(?i)' & $spr & '[\\/\-]z(\d+?)' & $spr, 3)
  3213.     If Not @error And UBound($aTmp) = 1 Then
  3214.         $ErrSize = $aTmp[0]
  3215.     Else
  3216.         $ErrSize = 180 * 1024 * 1024
  3217.     EndIf
  3218.    
  3219.     ; 5 параметров поиска: Текст поиска; Текст замены; Чуствительность к регистру; Регулярное выражение; Бэкап
  3220.     ; 4 параметров файлового поиска:
  3221.     _ReplaceCMD($Search, $Replace, $Casesense, $RegExp, $CRLF, $BackUp, $Path, $Mask, $Include, $Depth, $ReData, $ExcldAttrib, $CharSet, $ErrSize)
  3222.     Exit
  3223. EndFunc   ;==>_RunCMD
  3224.  
  3225. Func _ReplaceCMD($Search, $Replace, $Casesense, $RegExp, $CRLF, $BackUp, $Path, $Mask, $Include, $Depth, $ReData, $ExcldAttrib, $CharSet, $ErrSize)
  3226.     Local $BackUpPath, $file, $FileList, $i, $j, $LenPath, $TextReplace, $tmpData, $TrR, $TrH, $TrS, $aExcAttrib, $CharSetAuto
  3227.     If StringRight($Path, 1) <> '\' Then $Path &= '\'
  3228.    
  3229.     If $CharSet = -1 Then
  3230.         $CharSetAuto = 1
  3231.     Else
  3232.         $CharSetAuto = 0
  3233.     EndIf
  3234.    
  3235.     ; Выполняем функции, которые не ресурсоёмкие и на раннем этапе могут возвратить ошибку без ожидания поиска файлов
  3236.     ; Обработка переносов строк в поисковом запросе
  3237.     If $CRLF Then _CRLF($CRLF, $Search, $Replace)
  3238.    
  3239.     ; делаем резервные копии
  3240.     If $BackUp Then
  3241.         $BackUpPath = _BackUp($BackUp) & StringRegExpReplace($Path, '^(.*\\)(.*?\\)$', '\2')
  3242.         If @error Then Exit 4
  3243.     EndIf
  3244.    
  3245.     ; Выполняем поиск файлов по параметрам поиска файлов с выводом полных путей массивом по принудительной маске
  3246.     $FileList = _FO_FileSearch($Path, _FO_CorrectMask($Mask), $Include, $Depth, 1, 1, 1, $sLocale)
  3247.     If @error Then Exit 5
  3248.    
  3249.     ; Выполняем замены
  3250.     $LenPath = StringLen($Path)
  3251.     $ExcldAttrib = StringRegExpReplace($ExcldAttrib, '(?i)[^RASHNOT]', '') ; удаление из набора атрибутов "левых" символов
  3252.     $aExcAttrib = StringSplit($ExcldAttrib, '')
  3253.     For $i = 1 To $FileList[0]
  3254.         If FileGetSize($FileList[$i]) > $ErrSize Then ContinueLoop
  3255.        
  3256.         $FileAttrib = FileGetAttrib($FileList[$i])
  3257.         For $j = 1 To $aExcAttrib[0]
  3258.             If StringInStr($FileAttrib, $aExcAttrib[$j]) Then ContinueLoop 2
  3259.         Next
  3260.         If $CharSetAuto Then
  3261.             $CharSet = FileGetEncoding($FileList[$i])
  3262.         Else
  3263.             If $CharSet <> 16 And $CharSet <> FileGetEncoding($FileList[$i]) Then ContinueLoop
  3264.         EndIf
  3265.  
  3266.         $file = FileOpen($FileList[$i], $CharSet)
  3267.         If $file = -1 Then ContinueLoop
  3268.         $TextReplace = FileRead($file)
  3269.         FileClose($file)
  3270.         If $RegExp Then
  3271.             $TextReplace = StringRegExpReplace($TextReplace, $Search, $Replace)
  3272.         Else
  3273.             $TextReplace = StringReplace($TextReplace, $Search, $Replace, 0, $Casesense)
  3274.         EndIf
  3275.         If @extended Then ; если изменения произошли, то выполняем перезапись файла и бэкапирование
  3276.             If $BackUp Then FileCopy($FileList[$i], $BackUpPath & StringTrimLeft($FileList[$i], $LenPath), 8)
  3277.             If $ReData = 1 Then $tmpData = FileGetTime($FileList[$i], 0, 1)
  3278.             $TrR = StringInStr($FileAttrib, 'R')
  3279.             $TrH = StringInStr($FileAttrib, 'H')
  3280.             $TrS = StringInStr($FileAttrib, 'S')
  3281.             If $TrR Then FileSetAttrib($FileList[$i], '-R')
  3282.             If $TrH Then FileSetAttrib($FileList[$i], '-H')
  3283.             If $TrS Then FileSetAttrib($FileList[$i], '-S')
  3284.             $file = FileOpen($FileList[$i], $CharSet + 2)
  3285.             FileWrite($file, $TextReplace)
  3286.             FileClose($file)
  3287.             If $TrR Then FileSetAttrib($FileList[$i], '+R')
  3288.             If $TrH Then FileSetAttrib($FileList[$i], '+H')
  3289.             If $TrS Then FileSetAttrib($FileList[$i], '+S')
  3290.             If $ReData = 1 Then FileSetTime($FileList[$i], $tmpData)
  3291.         EndIf
  3292.     Next
  3293. EndFunc   ;==>_ReplaceCMD
  3294.  
  3295. Func _About()
  3296.     $wAbt = 270
  3297.     $hAbt = 180
  3298.     $GP = _ChildCoor($hGui, $wAbt, $hAbt)
  3299.     $wAbtBt = 20
  3300.     $wA = $wAbt / 2 - 80
  3301.     $wB = $hAbt / 3 * 2
  3302.     $iScroll_Pos = -$hAbt
  3303.     $TrAbt1 = 0
  3304.     $TrAbt2 = 0
  3305.     $BkCol1 = 0xE1E3E7
  3306.     $BkCol2 = 0
  3307.     $GuiPos = WinGetPos($hGui)
  3308.     GUISetState(@SW_DISABLE, $hGui)
  3309.     $font = "Arial"
  3310.  
  3311.     $Gui1 = GUICreate($LngAbout, $GP[2], $GP[3], $GP[0], $GP[1], BitOR($WS_CAPTION, $WS_SYSMENU, $WS_POPUP), -1, $hGui)
  3312.     GUISetBkColor($BkCol1)
  3313.     If Not @Compiled Then GUISetIcon($AutoItExe, 1)
  3314.     GUISetFont(-1, -1, -1, $font)
  3315.     GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit1")
  3316.    
  3317.     $vk1 = GUICtrlCreateButton(ChrW('0x25BC'), 0, $hAbt - 20, $wAbtBt, 20)
  3318.     GUICtrlSetOnEvent(-1, "_About_vk1")
  3319.  
  3320.     GUICtrlCreateTab($wAbtBt, 0, $wAbt - $wAbtBt, $hAbt + 35, 0x0100 + 0x0004 + 0x0002)
  3321.     $tabAbt0 = GUICtrlCreateTabItem("0")
  3322.  
  3323.     GUICtrlCreateLabel('', $wAbtBt, 0, $wAbt - $wAbtBt, $hAbt)
  3324.     GUICtrlSetState(-1, 128)
  3325.     GUICtrlSetBkColor(-1, $BkCol1)
  3326.  
  3327.     GUICtrlCreateLabel($LngTitle, 0, 0, $wAbt, $hAbt / 3, 0x01 + 0x0200)
  3328.     GUICtrlSetFont(-1, 15, 600, -1, $font)
  3329.     GUICtrlSetColor(-1, 0x3a6a7e)
  3330.     GUICtrlSetBkColor(-1, 0xF1F1EF)
  3331.     GUICtrlCreateLabel("-", 1, $hAbt / 3, $wAbt - 2, 1, 0x10)
  3332.  
  3333.     GUISetFont(9, 600, -1, $font)
  3334.     GUICtrlCreateLabel($LngVer & ' 1.1  12.04.2013', $wA, $wB - 36, 210, 17)
  3335.     GUICtrlCreateLabel($LngSite & ':', $wA, $wB - 17, 40, 17)
  3336.     $url = GUICtrlCreateLabel('http://azjio.ucoz.ru', $wA + 39, $wB - 17, 170, 17)
  3337.     GUICtrlSetCursor(-1, 0)
  3338.     GUICtrlSetColor(-1, 0x0000ff)
  3339.     GUICtrlSetOnEvent(-1, "_About_url")
  3340.     GUICtrlCreateLabel('WebMoney:', $wA, $wB + 2, 85, 17)
  3341.     $WbMn = GUICtrlCreateLabel('R939163939152', $wA + 75, $wB + 2, 125, 17)
  3342.     GUICtrlSetColor(-1, 0x3a6a7e)
  3343.     GUICtrlSetTip(-1, $LngCopy)
  3344.     GUICtrlSetCursor(-1, 0)
  3345.     GUICtrlSetOnEvent(-1, "_About_WbMn")
  3346.     GUICtrlCreateLabel('Copyright AZJIO © 2010-2013', $wA, $wB + 21, 210, 17)
  3347.  
  3348.     $tabAbt1 = GUICtrlCreateTabItem("1")
  3349.  
  3350.     GUICtrlCreateLabel('', $wAbtBt, 0, $wAbt - $wAbtBt, $hAbt)
  3351.     GUICtrlSetState(-1, 128)
  3352.     GUICtrlSetBkColor(-1, 0x000000)
  3353.  
  3354.     $StopPlay = GUICtrlCreateButton(ChrW('0x25A0'), 0, $hAbt - 41, $wAbtBt, 20)
  3355.     GUICtrlSetState(-1, 32)
  3356.     GUICtrlSetOnEvent(-1, "_About_StopPlay")
  3357.  
  3358.     $nLAbt = GUICtrlCreateLabel($LngScrollAbt, $wAbtBt, $hAbt, $wAbt - $wAbtBt, 360, 0x1) ; центр
  3359.     GUICtrlSetFont(-1, 9, 400, 2, $font)
  3360.     GUICtrlSetColor(-1, 0x99A1C0)
  3361.     GUICtrlSetBkColor(-1, -2) ; прозрачный
  3362.     GUICtrlCreateTabItem('')
  3363.     GUISetState(@SW_SHOW, $Gui1)
  3364. EndFunc   ;==>_About
  3365.  
  3366. Func _Exit1()
  3367.     AdlibUnRegister('_ScrollAbtText')
  3368.     GUISetState(@SW_ENABLE, $hGui)
  3369.     GUIDelete($Gui1)
  3370.     GUISetOnEvent($GUI_EVENT_CLOSE, "_Quit")
  3371. EndFunc   ;==>_Exit1
  3372.  
  3373. Func _About_url()
  3374.     ShellExecute('http://azjio.ucoz.ru')
  3375. EndFunc   ;==>_About_url
  3376.  
  3377. Func _About_WbMn()
  3378.     ClipPut('R939163939152')
  3379. EndFunc   ;==>_About_WbMn
  3380.  
  3381. Func _About_StopPlay()
  3382.     If $TrAbt2 = 0 Then
  3383.         AdlibUnRegister('_ScrollAbtText')
  3384.         GUICtrlSetData($StopPlay, ChrW('0x25BA'))
  3385.         $TrAbt2 = 1
  3386.     Else
  3387.         AdlibRegister('_ScrollAbtText', 40)
  3388.         GUICtrlSetData($StopPlay, ChrW('0x25A0'))
  3389.         $TrAbt2 = 0
  3390.     EndIf
  3391. EndFunc   ;==>_About_StopPlay
  3392.  
  3393. Func _About_vk1()
  3394.     If $TrAbt1 = 0 Then
  3395.         GUICtrlSetState($tabAbt1, 16)
  3396.         GUICtrlSetState($nLAbt, 16)
  3397.         GUICtrlSetState($StopPlay, 16)
  3398.         GUICtrlSetData($vk1, ChrW('0x25B2'))
  3399.         GUISetBkColor($BkCol2)
  3400.         If $TrAbt2 = 0 Then AdlibRegister('_ScrollAbtText', 40)
  3401.         $TrAbt1 = 1
  3402.     Else
  3403.         GUICtrlSetState($tabAbt0, 16)
  3404.         GUICtrlSetState($nLAbt, 32)
  3405.         GUICtrlSetState($StopPlay, 32)
  3406.         GUICtrlSetData($vk1, ChrW('0x25BC'))
  3407.         GUISetBkColor($BkCol1)
  3408.         AdlibUnRegister('_ScrollAbtText')
  3409.         $TrAbt1 = 0
  3410.     EndIf
  3411. EndFunc   ;==>_About_vk1
  3412.  
  3413. Func _ScrollAbtText()
  3414.     $iScroll_Pos += 1
  3415.     ControlMove($Gui1, "", $nLAbt, $wAbtBt, -$iScroll_Pos)
  3416.     If $iScroll_Pos > 360 Then $iScroll_Pos = -$hAbt
  3417. EndFunc   ;==>_ScrollAbtText
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement