Что нового

IncludesHelper - менеджер включаемых файлов для SciTE

asdf8

Скриптер
Сообщения
564
Репутация
152
AutoIt: 3.
Версия: 3.3.6.1-3.3.8.0

Категория: Инструменты и помощь по AutoIt

Описание:

Скрипт был сделан как аналог "Organize Includes" и имеет следующие важные отличия:


  • Более корректные результаты работы.

  • Includes Helper подбирает минимальное количество необходимых включаемых файлов.

  • Отсутствует графический интерфейс - результаты работы выводятся в консоль SciTE.

  • При вставке результатов в исходный код сохраняется история изменений файла (в редакторе), а также закладки и фолдинг.

Пример подключения к SciTE (файл "au3.properties")
Код:
command.37.*.au3="$(autoit3dir)\autoit3.exe" "$(SciteDefaultHome)\IncludesHelper\IncludesHelper.au3" "$(FilePath)" 
command.name.37.*.au3=Includes Helper 
command.save.before.37.*.au3=1 
command.is.filter.37.*.au3=1
command.shortcut.37.*.au3=Ctrl+Enter

Настройки (файл "IncludesHelper.ini")
Код:
ShowOptimInfo=1
	:показывать минимальное количество необходимых включаемых файлов (1 по умолчанию)
ShowDetals=0
	:показывать все значения и соответствующие им внешние файлы (0 по умолчанию)
ResultToSource=1
	:вставить результат в исходный код (1 по умолчанию)

Горячие клавиши:
Ctrl+Enter - запуск
Esc - выход

Примечание:
Значения указанные как строка в функциях GUIRegisterMsg, AdlibRegister и т. д. - обрабатываются только для явно заданных значений, без использования переменных и выражений.
В противном случае выводится предупреждение в консоль.

История версий:
1.4:
- Существенно увеличено быстродействие для 32-битных операционных систем.
1.3:
- Увеличена скорость обработки данных.
1.2.3:
- Добавлена обработка значений, указанных как строка в функциях GUIRegisterMsg, AdlibRegister и т. д. (только для явно заданных значений, без использования переменных и выражений)
- Добавлено сжатие базы данных (только для NTFS)
- Незначительные изменения
1.2.1:
- Исправлено: не производился поиск для некоторых данных (спасибо wakillon).
1.2:
- Исправлена ошибка вставки данных в файлы не требующих внешних файлов.
1.1.2:
- Исправлена ошибка вставки данных в некоторые файлы.
1.1.1:
- Исправлена ошибка обновления базы данных при наличии в папке "Include" файлов без функций, глобальных констант и переменных (спасибо madmasles).
- Добавлены горячие клавиши.
- Изменение окна прогресса.
1.1:
- Добавлена возможность вставки реультата в исходный код.
- Настройки выведены в ini-файл.
- Мелкие исправления.

Источник: Includes Helper
Автор(ы): asdf8
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Только у меня база данных создается при каждом запуске? :(
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
Только у меня база данных создается при каждом запуске?

По идее база должна создаваться при первом запуске или при изменениях в папке "Include" (добавление/удаление/изменение файлов).
Может быть что-то меняет атрибуты времени последнего редактирования файлов в папке "Include"?

Или, может быть, нет прав для записи файлов в папке скрипта.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
asdf8 [?]
Может быть что-то меняет атрибуты времени последнего редактирования файлов в папке "Include"?
Или, может быть, нет прав для записи файлов в папке скрипта.
Время последнего доступа ничего не меняет. Права все есть.
Подряд запускаю на проверку один и тот же файл дважды и каждый раз довольно долго создается база данных. В папке "..\SciTE\IncludesHelper" файл IncludesHelper.dat уже есть. :wacko:
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
madmasles

Попробуй пожалуйста временно заменить одну функцию в скрипте

Код:
Func _LoadDB()
	Local $aTmp, $tmp, $i, $str, $file, $var, $flag = 1
	$aTmp = _FileList($AutoItPath & '\Include', '*.au3')
	If IsArray($aTmp) And $aTmp[0] > 0 Then
		If FileExists($fDat) Then
			$str = FileRead($fDat)
			$tmp = StringRegExp($str, '([^\a]+)', 3)
			If IsArray($tmp) And UBound($tmp) = $aTmp[0] Then
				Dim $aIncl[UBound($aTmp)][4]
				$aIncl[0][0] = $aTmp[0]
				For $i = 1 To $aTmp[0]
					$var = StringReplace($aTmp[$i], $inclDir, '') & FileGetTime($aTmp[$i], 0, 1)
					If $var = StringLeft($tmp[$i - 1], StringLen($var)) Then
						$aIncl[$i][0] = $aTmp[$i]
						$var = StringRegExp($tmp[$i - 1], '([^\r\n]+)', 3)
						If IsArray($var) And UBound($var) > 1 Then
							$aIncl[$i][1] = $var[1]
							If UBound($var) > 2 Then
								$aIncl[$i][2] = StringReplace($var[2], Chr(28), $inclDir)
							EndIf
						Else
							MsgBox(262144, 'INCLUDES HELPER', 'Причина обновления :' & @LF & 'неправильная запись в базе (отсутствуют символы перевода строки) : ' & @LF & $tmp[$i - 1])
							$flag = 0
							ExitLoop
						EndIf
					Else
						MsgBox(262144, 'INCLUDES HELPER', 'Причина обновления : (+ время последнего изменения)' & @LF & 'файл в базе : ' & StringLeft($tmp[$i - 1], StringLen($var)) & @LF & 'файл в папке "Include" : ' & $var)
						$flag = 0
						ExitLoop
					EndIf
				Next
				If $flag Then
					Return
				EndIf
			Else
				MsgBox(262144, 'INCLUDES HELPER', 'Причина обновления :' & @LF & 'файлов в базе : ' & UBound($tmp) & @LF & 'файлов *.au3 в папке "Include" : ' & $aTmp[0])
			EndIf
		Else
			MsgBox(262144, 'INCLUDES HELPER', 'Причина обновления :' & @LF & 'отсутствует файл : ' & @LF & $fDat)
		EndIf
		_ProgressSet(1, 'Создание базы данных ...')
		$str = ''
		Dim $aIncl[UBound($aTmp)][4]
		$aIncl[0][0] = $aTmp[0]
		For $i = 1 To $aIncl[0][0]
			$aIncl[$i][0] = $aTmp[$i]
			$tmp = _GetInfo($aTmp[$i])
			If $tmp[1] Then $tmp[1] = _AllIncl($aTmp[$i])
			$aIncl[$i][1] = $tmp[0]
			$aIncl[$i][2] = $tmp[1]
			$aIncl[$i][3] = FileGetTime($aTmp[$i], 0, 1)
			$str &= Chr(7) & StringReplace($aIncl[$i][0], $inclDir, '') & $aIncl[$i][3] & @CRLF & $aIncl[$i][1] & @CRLF & StringReplace($aIncl[$i][2], $inclDir, Chr(28)) & @CRLF
			_ProgressSet(100 * $i/$aTmp[0])
		Next
		If $str Then
			$file = FileOpen($fDat, 2)
			FileWrite($file, $str)
			FileClose($file)
		EndIf
	Else
		_ConsoleWrite('! НЕ НАЙДЕНЫ ФАЙЛЫ В ПАПКЕ "INCLUDE"' & @CRLF)
		Exit
	EndIf
EndFunc

должно показать причину обновления
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
asdf8,
Измененная функция выдала:
Причина обновления :
неправильная запись в базе (отсутствуют символы перевода строки) :
vkArray.au320100921152318

На всякий случай прикрепляю IncludesHelper.dat.

Разобрался, все работает как надо. У меня в папке Include остался старый файл vkArray.au3. Я его удалил (он не нужен) и все заработало как надо. :smile:

Хотелки: :smile:
1. Горячие клавиши на запуск и прекращение обработки.
2. Убрать стиль поверх всех окон.ИМХО, не надо убирать.
3. Возможность передвигать окно.
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
Спасибо madmasles

Поправил, чтоб работало и с тем файлом, хотел перезалить файл в первом посте, но чет не нашел, как там удалить предыдущий файл.
Хотелки вроде здравые - перезалью, когда сделаю.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
asdf8 [?]
хотел перезалить файл в первом посте, но чет не нашел, как там удалить предыдущий файл.
Просто выберите новый файл, который вы хотите добавить в attach, а напротив старого (для удаления) снимите галочку.
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
madmasles
Я его удалил (он не нужен) и все заработало как надо.
Аналогично, тоже парился, не мог понять. Думаю надо это программно решить, а то не каждый догадается.
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
AZJIO так решил уже :smile:
В первом посте версия 1.1.1
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
asdf8,
ИМХО, очень полезная утилита. Проверил свои скрипты, нашел в них кучу ненужных включенных библиотек, закомментировал их, размер файлов уменьшился. Из всех обработчиков Include, которыми я пользовался, для меня Ваш самый удобный и корректный. Всем советую использовать.
Спасибо. :thanks:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
madmasles [?]
нашел в них кучу ненужных включенных библиотек, закомментировал их, размер файлов уменьшился
Речь про скомпилированный результат?
Для этого есть обфускатор:
Код:
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/striponly


А для добавления недостающих библиотек (из стандартных естественно), можно использовать директиву
Код:
#AutoIt3Wrapper_Add_Constants=y
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
Я тоже, постоянно пользуюсь обфускатором (код из поста CreatoR), если в коде используются несколько функций, скажем из UDF WinAPIEx - без обфускатора, при компиляции, в скрипт попадет весь файл WinAPIEx.au3, плюс файлы APIConstants.au3 и WinAPI.au3 (в сумме больше 1,5 Мб).
А эту утилиту начал делать, после того, как несколько раз после Organize Includes пришлось искать недостающие константы для скрипта, например:

Код:
;Только при установленной библиотеке "WinAPIEx"

$var = BitOR($PROCESS_VM_OPERATION, $PROCESS_VM_READ)

;Результат  Includes Helper  :#Include <ProcessConstants.au3>
;Результат  Organize Includes:#Include <APIConstants.au3> - хотя в APIConstants.au3 эти константы закомментированы
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Не совсем по теме, но после использования
Код:
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/striponly
Обфускатор мне выдал в консоль
-### StripOnly Error: Found DllCallbackRegister() statement using unsolvable Func, which will/could lead to removal of Funcs that are used by the Call() statement.
>### current Func: _Timer_SetTimer
C:\Program Files\AutoIt3\include\Timers.au3(275,1) Warning for line:$hCallBack = DllCallbackRegister($sTimerFunc, "none", "hwnd;int;uint_ptr;dword")

-#############################################################################################
-#### Obfuscator Found 1 Error(s)!!!! This means your script could have problems running properly. ####
-#############################################################################################
- Iteration 1 Strip Functions result: Output 9917 lines and stripped 15393 lines
- Iteration 2 Strip Variables result: Output 5768 lines and stripped 4096 lines
- Iteration 3 Strip Variables result: Output 5694 lines and stripped 74 lines
- Iteration 4 Strip Variables result: Output 5693 lines and stripped 1 lines
+> Source 64379 lines 3203176 Characters.
+> Stripped 19564 Func/Var lines and 38965 comment lines, Total 2982652 Characters.
+> Saved 90% lines 93% Characters.
И, соответственно, нерабочий скомпилированный вариант.
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
Для обфускатора есть команды:
Код:
#Obfuscator_Ignore_Funcs= MyFync_1, MyFync_2
#Obfuscator_Ignore_Variables= $var_1, $var_2


можно указать, какие функции и переменные не удалять из скрипта
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
asdf8 [?]
А эту утилиту начал делать, после того, как несколько раз после Organize Includes пришлось искать недостающие константы для скрипта
Ну так это делает #AutoIt3Wrapper_Add_Constants, правда добавляет сразу весь файл с нужной константой. Но как писалось выше, обфускатор это исправляет на стадий компилляций. Поэтому если честно не вижу особого смысла в данной утилите, хотя конечно могу ошибаться.
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
madmasles
Последний варинат который мне понравился
Код:
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
#AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"

Его отличие тем, что он даёт рандомные короткие имена переменных и функций, а это тоже делает скрипт компактным. И строка на удаление временного обфуцированного файла.

asdf8
Organize Includes не проверяет вложенные Include в Include, а вообще утилита с полезными регулярками. Я её не мог запустить потому что не знал что она требует в обязательном порядке SciTE, поэтому сделал свой вариант, независимый от SciTE.

CreatoR
Поэтому если честно не вижу особого смысла в данной утилите, хотя конечно могу ошибаться.
Лично я не всегда компилирую файлы, и тестирую до компиляции и старые скрипты обычно не содержат нужных Include, поэтому тестить их нескомпилированными проблематично.
 
Верх