Что нового

Скомпилированный скрипт при запуске выдаёт ошибку в некоторых ситуациях

saavaage

Знающий
Сообщения
171
Репутация
17
Проблема:
у ряда пользователй скомпилированный скрипт вываливается с ошибкой.

Вопрос: каким образом, можно узнать к какой cтроке скрипта это имеет отношение? Как вообще расшифровывать подобные послания?

Примеры ошибок:
1. line 21332 Error: array variable has incorrent number of subscripts or subscript dimension range exceeded
2. line 21325 Error (file "C:\SmartXP.exe"): array variable has incorrent number of subscripts or subscript dimension range exceeded
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

У вас проблема с массивом. Размерность не соответствует значениям.
Запустите скрипт в SciTE и посмотрите в консоль, там ^ ERROR укажет вам с каким массивом проблема.
 
Автор
S

saavaage

Знающий
Сообщения
171
Репутация
17
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

в том-то и дело, что у меня все ОК. ошибок не видно. Может дело в иконках? Как их проверить? Когда я так запускаю (F5), то компилируется, есстественно. без них..
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

Я тоже с таким сталкивался, не всегда SciTE спасал :( . Иногда это зависит от внешних факторов и не у всех юзеров на компах стоит SciTe. Боролся с этой проблемой путем обработки абсолютно всех возможных исключений которые могут вернуться от любой строки скрипта.
 
Автор
S

saavaage

Знающий
Сообщения
171
Репутация
17
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

В любом случае, буду рыть в сторону массивов...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

saavaage
Если вы свои иконки обрабатываете через массив, то смотрите массивы, которые участвуют в этом.
Массив $A[10] имеет размерность 10, но индексы у него начинаются с 0 до 9! В принципе в этом и есть суть вашей ошибки.
То есть нужно вот так заполнять:
Код:
For $i = 0 To 9 
    $A[$i] = $i
Next

For $i = 0 To UBound($A)-1
    $A[$i] = $i
Next

For $i = 1 To UBound($A)
    $A[$i-1] = $i
Next
 
Автор
S

saavaage

Знающий
Сообщения
171
Репутация
17
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

Garrett, почему тогда у меня и большинства работает все без проблем? И только у 2-3 человек проблема с запуском? Такое может быть?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

saavaage, вставь куда-нибудь в свой код например такую строчку:

Код:
MsgBox()


Без параметров!

Затем скомпилируй его и запусти. Посмотри в какой строке будет ошибка. Ну а далее перемести MsgBox() в другое место, в соответствии с полученной информацией. Примерно через 2-5 попыток ты вычислишь ту самую строку с номером 21332 или 21335 непосредственно в своем коде.

P.S

Вряд ли здесь проблема в иконках...
 
Автор
S

saavaage

Знающий
Сообщения
171
Репутация
17
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

Yashied, все гениальное просто. Как я не додумался о таком простом способе?! :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

Belfigor [?]
Я тоже с таким сталкивался, не всегда SciTE спасал
sad.gif
. Иногда это зависит от внешних факторов и не у всех юзеров на компах стоит SciTe.
Это называется неправильное программирование.


Боролся с этой проблемой путем обработки абсолютно всех возможных исключений которые могут вернуться от любой строки скрипта.
Это не борьба, это уже как раз таки правильное программирование.

Не ленитесь писать код, и он вас не подведёт.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

Проблема в переполнении массива $aAuto. Это объясняет, почему у некоторых пользователей программа работает, а у некоторых - нет. Видимо у них в реестре в каком-то там разделе более 20 значений.

Код:
Dim $aAuto[20][2]

...

For $p = 0 To 6
	While 1
		$aAuto[$row][0] = RegEnumVal($aPath[$p], $key)
		If @error <> 0 Then ExitLoop
		$aAuto[$row][1] = RegRead($aPath[$p], $aAuto[$row][0])
		$row += 1
		$key += 1
	WEnd
	$key = 1
Next


Правильнее было бы написать так:

Код:
Dim $aAuto[20][2]

...

$row = 0
For $p = 0 To 6
    $key = 1
    While 1
		$sVal = RegEnumVal($aPath[$p], $key)
        If @error Then ExitLoop
		If $row > UBound($aAuto) - 1 Then ReDim $aAuto[$row + 100][2]
        $aAuto[$row][0] = $sVal
        $aAuto[$row][1] = RegRead($aPath[$p], $sVal)
        $row += 1
        $key += 1
    WEnd
Next
If $row Then
	ReDim $aAuto[$row][2]
EndIf
 
Автор
S

saavaage

Знающий
Сообщения
171
Репутация
17
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

Нашел проблемный массив, но не понимаю, где я накосячил...

Вот код:
Код:
#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
#include <Array.au3>

Global $Machine_Run = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' ; список программы, запускаемых при входе в систему любого пользователя
Global $User_Run = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run' ;список программы, запускаемых при входе в систему текущего пользователя
Global $User_Run_Once = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce' ; список программ, которые запускаются при входе в систему только единожды. После запуска соответствующий параметр реестра автоматически удаляется
Global $Machine_Run_Once = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce'; список программ, которые запускаются при входе в систему только единожды. После запуска соответствующий параметр реестра автоматически удаляется. Действует для всех пользователей.
Global $Machine_Run_OnceEx = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx'; Аналогично предыдущему ключу. Часто используется для запуска конфигурационных модулей программ установки ПО
Global $Machine_Run_Services  = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows\CurrentVersion\RunServices' ; список программ, которые запускаются в качестве сервисов, т.е. до момента входа пользователя
Global $Machine_Run_Services_Once  = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows\CurrentVersion\RunServicesOnce' ; список программ, которые запускаются в качестве сервисов, т.е. до момента входа пользователя? но только 1 раз

Dim $aPath[7] = [$Machine_Run, $User_Run, $User_Run_Once, $Machine_Run_Once, $Machine_Run_OnceEx, $Machine_Run_Services, $Machine_Run_Services_Once]
Dim $aAuto[20][2]

Opt("GUIOnEventMode", 1)

$hMain_GUI = GUICreate("OPPPPP", 619, 442, 189, 122)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)
$DriverErrors = GUICtrlCreateTabItem("XXXXXXXXXX")
$ListViewAuto = GUICtrlCreateListView(" Программа| Путь к ...", 16, 103, 555, 158)

Global $row = 1, $p = 0, $key = 1

For $p = 0 To 6
    While 1
            $aAuto[$row][0] = RegEnumVal($aPath[$p], $key)
            if @error <> 0 Then ExitLoop
            $aAuto[$row][1] = RegRead($aPath[$p], $aAuto[$row][0])
            $row += 1
            $key += 1
    WEnd
    $key = 1
Next
;~ MsgBox()
ReDim $aAuto[$row][2]

_ArrayDelete($aAuto, 0)
_GUICtrlListView_SetColumnWidth($ListViewAuto, 0, 150)
_GUICtrlListView_SetColumnWidth($ListViewAuto, 1, 400)
_GUICtrlListView_AddArray($ListViewAuto, $aAuto)

GUICtrlCreateTabItem("")
GUISetState()

While 1
    Sleep(100)
WEnd

Func CLOSEClicked()
  Exit
EndFunc

Вроде все выполняется корректно...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

Я уже написал выше.
 
Автор
S

saavaage

Знающий
Сообщения
171
Репутация
17
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

Как хорошо, что у нас такой отзывчивый форум! Спасибо! Тема, я надеюсь закрыта!! :IL_AutoIt_1:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

saavaage сказал(а):
Тема, я надеюсь закрыта.

Не уверен.

:shifty:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: скомпилированный (exe-file) скрипт при запуске вываливается с ошибкой у части юз

Выявление ошибочной строки в скомпилированном скрипте - набросок:

Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

$sAutoItError_Info = WinGetText("[CLASS:#32770; TITLE:AutoIt Error]")
If $sAutoItError_Info == 0 Then $sAutoItError_Info = ""

$sErrorLine = StringRegExpReplace($sAutoItError_Info, "(?ism).*Line (\d+).*", "\1")
$sScriptFile = StringRegExpReplace($sAutoItError_Info, '(?ism).*\(File "(.*)\.exe"\).*', '\1.au3')

$hGUI = GUICreate("AutoIt script Error Finder", 400, 300)

$nScript_Input = GUICtrlCreateInput($sScriptFile, 20, 30, 340, 20)
$nOpenScript_Btn = GUICtrlCreateButton("...", 360, 29, 22, 22)

GUICtrlCreateLabel("Please enter Error Line (shown by compiled script):", 20, 80)
$nErrLine_Input = GUICtrlCreateInput($sErrorLine, 260, 77, 120, 20, BitOR($ES_NUMBER, $ES_CENTER))

$nErrorLine_Edit = GUICtrlCreateEdit("", 20, 120, 360, 140, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY))

$nGetErrorLine_Btn = GUICtrlCreateButton("Get Error Line", 120, 270, 160, 20)

GUISetState(@SW_SHOW, $hGUI)

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nOpenScript_Btn
			Local $sScript = FileOpenDialog("Open AutoIt Script", "", "AutoIt Script (*.au3)", 0, "", $hGUI)
			If @error Then ContinueLoop
			
			GUICtrlSetData($nScript_Input, $sScript)
		Case $nGetErrorLine_Btn
			$sScriptFile = GUICtrlRead($nScript_Input)
			$iErrLine = GUICtrlRead($nErrLine_Input)
			
			If Not FileExists($sScriptFile) Or $iErrLine = "" Then
				ContinueLoop
			EndIf
			
			$sMergedScript = _AU3_LibMergeAllUDFs($sScriptFile)
			$aMergedScript = StringSplit(_AU3_LibStripEmptyLines($sMergedScript), @LF)
			
			GUICtrlSetData($nErrorLine_Edit, $aMergedScript[$iErrLine])
	EndSwitch
WEnd

; ===============================================================
; _AU3_LibMergeAllUDFs($sScriptFile, $iIncludeComments=0, $iRemoveIncludes=1)
; ---------------------------------------------------------------
; Смешивает вложенные библиотеки в тело скрипта
;  (таким образом преобразовывая один цельный скрипт со всеми функциями и переменными)
; Использован AutoIT v3.2.12.1
;
; $sScriptFile        : AutoIT-скрипт для смешивания
; $iIncludeComments   : Определяет, нужно ли обрабатывать строки комментариев
; $iIncludeEmptyLines : Определяет, нужно ли обрабатывать пустые строки
; $iRemoveIncludes    : Определяет, нужно ли удалять строки #include'ов с исходного скрипта
;
; Автор               : G.Sandler (a.k.a CreatoR)
; ===============================================================
Func _AU3_LibMergeAllUDFs($sScriptFile, $iIncludeComments=0, $iIncludeEmptyLines=0, $iRemoveIncludes=1, $iRetData=1)
	Local $aGetAllLibs, $aScript_Content, $sRead_SrcScript, $sHeader_Content, $hFOpen, $iIsFuncBody = 0
	$sRead_SrcScript = FileRead($sScriptFile)
	
	_AU3_LibGetAllUDFs($sRead_SrcScript, $aGetAllLibs)
	
	If $iRemoveIncludes Then $sRead_SrcScript = StringRegExpReplace($sRead_SrcScript, "(?si)#include.*?[\r\n]+", "")
	
	For $i = $aGetAllLibs[0][0] To 1 Step -1
		$iIsFuncBody = 0
		$aScript_Content = StringSplit(StringStripCR(StringStripWS(FileRead($aGetAllLibs[$i][1]), 3)), @LF)
		
		For $j = 1 To $aScript_Content[0]
			If Not $iIncludeEmptyLines And $aScript_Content[$j] = "" Then
				ContinueLoop
			EndIf
			
			If Not $iIncludeComments And StringRegExp($aScript_Content[$j], "^(\s+)?;") Then
				ContinueLoop
			EndIf
			
			If StringRegExp($aScript_Content[$j], "(?i)^(\s+)?#include") Then
				ContinueLoop ;We don't need the #includes, right?
			ElseIf StringRegExp($aScript_Content[$j], "(?i)^(\s+)?Func") Then
				$sRead_SrcScript &= @CRLF
				$iIsFuncBody = 1
			ElseIf StringRegExp($aScript_Content[$j], "(?i)^(\s+)?EndFunc") Then
				$sRead_SrcScript &= $aScript_Content[$j] & @CRLF
				$iIsFuncBody = 0
				
				ContinueLoop
			EndIf
			
			If Not $iIsFuncBody Then ;Write to the Begining of file (Collecting the variables/constants Header)
				$sHeader_Content &= $aScript_Content[$j] & @CRLF
			Else ;Write to the End of file (UDF functions)
				$sRead_SrcScript &= $aScript_Content[$j] & @CRLF
			EndIf
		Next
	Next
	
	If $sHeader_Content <> "" Then $sRead_SrcScript = $sHeader_Content & @CRLF & $sRead_SrcScript
	
	If $iRetData Then
		Return $sRead_SrcScript
	Else
		$hFOpen = FileOpen(StringTrimRight($sScriptFile, 4) & "_au3lib_merged.au3", 2)
		FileWrite($hFOpen, $sRead_SrcScript)
		FileClose($hFOpen)
	EndIf
EndFunc ; ==> _AU3_LibMergeAllUDFs

; ===============================================================
; _AU3_LibGetAllUDFs($sScript_Content, $aIncludes_Arr)
; ---------------------------------------------------------------
; Возвращает массив всех загруженных UDF и библиотечных файлов
; Использован AutoIT v3.2.12.0
;
; $sScript_Content       : текст AutoIT-скрипта
; $aIncludes_Arr         : ссылка на переменную для выходного массива,
;                 по выходу содержит двумерный массив:
;                   $aIncludes_Arr[0][0]  - количество элементов в массиве
;                   $aIncludes_Arr[$i][0] - тип библиотечного файла
;                   $aIncludes_Arr[$i][1] - Полный путь библиотечного файла
;                   $aIncludes_Arr[$i][2] - Только имя библиотечного файла
;                   $aIncludes_Arr[$i][3] - массив UDF, определенных в файле
;
; Функция рекурсивная, поэтому выход по ошибке не предусмотрен
;
; Автор                  : amel27
; ===============================================================
Func _AU3_LibGetAllUDFs($sScript_Content, ByRef $aIncludes_Arr)
    Local Const $rFile = '(?i)(?:^|[\n\r])[ \t]*#include[ \t]+((?:\<|")[^\n\r\"\>]+(?:\>|"))'
    Local Const $rUDFs = '(?i)(?:^|[\n\r])[ \t]*Func[ \t]+([\w\d]+)'
    
	; Инициализация массива при первом входе / сохранение списка UDF
    If UBound($aIncludes_Arr, 2) <> 4 Then Dim $aIncludes_Arr[2][4] = [[1, 0, 0], [0, "", 0]]
    $aIncludes_Arr[$aIncludes_Arr[0][0]][3] = StringRegExp($sScript_Content, $rUDFs, 3)
   
	; Инициализация переменных / Получение списка библиотечных файлов
    Local $sPath, $iType, $sName, $sText
    Local $aFile = StringRegExp($sScript_Content, $rFile, 3)
   
	; Пофайловая обработка списка библиотек
	If IsArray($aFile) Then
        For $i = 0 To UBound($aFile)-1
            $sPath = _AU3_LibIncludeToPath($aFile[$i])                  ; полное имя файла
            If @error Then ContinueLoop                                 ; файл не найден
           
			$iType = @extended                                          ; тип библиотеки
            $sName = StringRegExpReplace($sPath, "(?:[^\\]+\\)+", "")   ; краткое имя файла
            
			; Исключение повторной обработки / Чтение файла
            For $j = 1 To $aIncludes_Arr[0][0]
                If $aIncludes_Arr[$j][0] == $iType And $aIncludes_Arr[$j][2] == $sName Then ContinueLoop 2
            Next
            
			$sText = FileRead($sPath)
            If @error Then ContinueLoop
            
			; При успешном чтении добавляем файл в выходной массив
            $aIncludes_Arr[0][0] += 1
            ReDim $aIncludes_Arr[$aIncludes_Arr[0][0]+1][4]
           
			$aIncludes_Arr[$aIncludes_Arr[0][0]][0] = $iType
			$aIncludes_Arr[$aIncludes_Arr[0][0]][1] = $sPath
			$aIncludes_Arr[$aIncludes_Arr[0][0]][2] = $sName
			
            ; Рекурсивный вызов на обработку текста библиотеки
            _AU3_LibGetAllUDFs($sText, $aIncludes_Arr)
        Next
    EndIf
EndFunc ; ==> _AU3_LibGetAllUDFs

; ===============================================================
; _AU3_LibIncludeToPath($sInclude)
; ---------------------------------------------------------------
; Возвращает полный путь к библиотечному файлу по строке загрузки
; Использован AutoIT v3.2.12.0
;
; $sInclude   : строка загрузки в формате #include, примеры:
;               '<array.au3>'
;               '"array.au3"'
;               '"c:\Program Files\AutoIT3\Include\array.au3"'
;
; При успехе  : возвращает полное имя файла, содержащее путь,
;               макрос @extended указывает на тип библиотеки:
;               1 - системная библиотека (каталог установки)
;               2 - текущая библиотека (каталог скрипта)
;               3 - пользовательская библиотека (путь из реестра)
;               4 - путь к библиотеке явно указан при загрузке
;
; При неудаче : возвращает пустую строку и устанавливает @error:
;               1 - ошибка формата строки
;               2 - файл не найден
;
; Автор       : amel27
; ===============================================================
Func _AU3_LibIncludeToPath($sInclude)
    Local $aRegExp = StringRegExp($sInclude, '^(<|"|'')([^>"]+)(?:>|"|'')$', 3)
    
	; Проверка на корректность формата строки
    If Not IsArray($aRegExp) Then Return SetError(1, 0, "")
    $sInclude = $aRegExp[1]

    If StringInStr($sInclude, "\") = 0 Then
        Local $sSYS, $sUDL, $aUDL, $sAU3 = @ScriptDir & "\" & $sInclude
        
		; Определение каталога системных библиотек
        $sSYS = StringRegExpReplace(@AutoItExe, "\\[^\\]+$", "")
        $sSYS &= "\Include\"& $sInclude
        
		; Чтение списка каталогов пользовательских библиотек
        $sUDL = RegRead("HKCU\Software\AutoIt v3\AutoIt", "Include")
        $aUDL = StringRegExp($sUDL, "([^;]+)(?:;|$)", 3)
        
		; Проверка типов 1 и 2 (до пользовательских библиотек)
        If $aRegExp[0] == '<' Then
            If FileExists($sSYS) Then Return SetError(0, 1, $sSYS)
        ElseIf $aRegExp[0] == '"' Then
            If FileExists($sAU3) Then Return SetError(0, 2, $sAU3)
        EndIf
        
		; Проверка типа 3 (поиск среди пользовательских библиотек)
        If IsArray($aUDL) Then
            For $i = 0 To UBound($aUDL)-1
                $aUDL[$i] &= "\" & $sInclude
                If FileExists($aUDL[$i]) Then Return SetError(0, 3, $aUDL[$i])
            Next
        EndIf
        
		; Проверка типов 1 и 2 (после пользовательских библиотек)
        If $aRegExp[0] == '<' Then
            If FileExists($sAU3) Then Return SetError(0, 2, $sAU3)
        ElseIf $aRegExp[0] == '"' Then
            If FileExists($sSYS) Then Return SetError(0, 1, $sSYS)
        EndIf
    Else
        ; Проверка типа 4 (файл с указанием полного пути)
        If FileExists($sInclude) Then Return SetError(0, 4, $sInclude)
	EndIf
	
    ; ОШИБКА: файл не найден
    Return SetError(2, 0, "")
EndFunc ; ==>  _AU3_LibIncludeToPath

Func _AU3_LibStripEmptyLines($sFileContent)
	If FileExists($sFileContent) Then
		$sFileContent = FileRead($sFileContent)
	EndIf
	
	$sFileContent = StringRegExpReplace($sFileContent, "(?i)#include-once", "")
	$sFileContent = StringRegExpReplace($sFileContent, "[\r?\n]{2,}", @CRLF)
	$sFileContent = StringRegExpReplace($sFileContent, "\r?\n\s*;.*?", "")
	
	Return $sFileContent
EndFunc


В первое поле вводите путь к скрипту (тот который был скомпилирован, естественно без изменений после компиляции), во второе вводите номер ошибочной строки которую выдаёт скомпилированный скрипт.

P.S
Блоки коментариев пока не предусмотрены, поэтому если они иммеются в скрипте или во вложенных библиотеках, то результат будет неправильным.
 
Автор
S

saavaage

Знающий
Сообщения
171
Репутация
17
CreatoR, я правильно понимаю, что сначала необходимо удалить все коменты из скрипта и только потом проверять?

Если скрипт довольно большой по кол-ву строк и вложенных бибилотек, то это, имхо, нереально. Быстрее ручками найдешь (по способу, который предложил Yashied). + Изменение порядка строк может быть значителльным ...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
saavaage [?]
сначала необходимо удалить все коменты из скрипта и только потом проверять?
Блоки коментариев, отдельные строчки коменов не нужно трогать, они и так удаляются.

Если скрипт довольно большой по кол-ву строк и вложенных бибилотек, то это, имхо, нереально.
Почему?

Быстрее ручками найдешь
Я да, быстрее найду руками, но в своём скрипте. Хотя у меня такое может встретиться только в старых скриптах, которые я писал не зная “грамоты” и основ.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
saavaage, может быть ты выложишь свою утилиту на наш форум в этот раздел? А то как-то нехорошо получается, мы здесь помогаем, а результата не видим...

:smile:
 
Автор
S

saavaage

Знающий
Сообщения
171
Репутация
17
Я планировал это сделать, как только будет финальный релиз. Сделаю на этой неделе (надеюсь основные, глупые баги будут прибиты сегодня -завтра)

Насчет своей - себя автором не считаю. Идея/концепция - да, моя была (давно хотел такое себе). Список авторов = списку особой благодарности в той ветке, которую Вы указали. Я только ее "склеил" с небольшими/средними изменениями из скриптов участников форумов.
 
Верх