Страница 186 из 243

Добавлено: Вт апр 29, 2025 20:01
AkulaBig
Orion9 писал(а):Вы не проверяли предложенный код?
Не проверял, так как понятно, что редрав здесь не при чем.
Orion9 писал(а):Всё работает, не выдумывайте
Мне кажется мы с вами запутались. Где я утверждаю, что что-то не работает? Работает и мой код из двух команд. Просто окно дергается, что естественно. И это отвратительно. А ваш код вообще дергается еще страшней. Ведь вы наставили задержек зачем-то. Ну и с учетом, что редрав здесь ничего не делает, еще и лишние команды. Или вы опять на ТС х32 проверяли?
Orion9 писал(а): Можно просто повесить озвучку
Ну вот у меня звук только когда я надеваю наушники слышен. И это очень редко происходит. Что мне даст озвучка? Собственно для меня приемлим единственный вариант, который мы обсудили. Это кнопка в Панели настроек. Не думаю, что эту фичу надо постоянно переключать. Так что нормальный вариант. Ну а так как пока у меня нет файла с несколькими дорожками и необходимость чтения данных из массива вызывает сомнения, пока я эту фичу не тестю дальше. Сейчас главное парсер переделать. Вроде там не трудно, но пока руки до него не дошли.
Orion9 писал(а): UTF16 без BOM он точно определяет
Если речь идет только об одной кодировке, которую плохо распознает uchardet, то может пригодится скрипт на vbs, подсмотренный мной у пользователей WinScriptsAdv?
[cut]

Код: Выделить всё

'*** CheckEncoding, van Dusen, 31.07.2009 
'*** Script for WinScriptAdv content plugin 

'*** [=script.Result]  ===> Character Encoding  •  Line Endings 
'*** [=script.Result1] ===> Character Encoding {ASCII|ANSI|Binary|Unicode: UTF-8|Unicode: UTF-8 BOM|Unicode: UTF-[16|32] [LE|BE] BOM} 
'*** [=script.Result2] ===> Line Endings       {None|CRLF (Win)|LF (Unix)|CR (Mac)} 

Dim oFSO, f 
Set oFSO = CreateObject("Scripting.FileSystemObject") 
Set f = oFSO.OpenTextFile(filename, 1, False) 
vFileContentIn = f.Read(1024) 
'vFileContentIn = f.ReadAll 
f.Close 
Set f = Nothing 
Set oFSO = Nothing 


'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
'Check Character Encoding 
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

vEncoding = "?" 

'Bytefolgen der BOM in verschiedenen Zeichenkodierungen 
'Kodierung              Bytefolge 
'UTF-8                  EF BB BF    (239 187 191) 
'UTF-16 Big Endian      FE FF       (254 255) 
'UTF-16 Little Endian   FF FE       (255 254) 
'UTF-32 Big Endian      00 00 FE FF (000 000 254 255) 
'UTF-32 Little Endian   FF FE 00 00 (255 254 000 000) 

vBOM = Left(vFileContentIn, 2) 
If vBOM = Chr(&HFF) & Chr(&HFE) Then vEncoding = "Unicode: UTF-16 LE BOM" 
If vBOM = Chr(&HFE) & Chr(&HFF) Then vEncoding = "Unicode: UTF-16 BE BOM" 

vBOM = Left(vFileContentIn, 3) 
If vBOM = Chr(&HEF) & Chr(&HBB) & Chr(&HBF) Then vEncoding = "Unicode: UTF-8 BOM" 

vBOM = Left(vFileContentIn, 4) 
If vBOM = Chr(&H00) & Chr(&H00) & Chr(&HFE) & Chr(&HFF) Then vEncoding = "Unicode: UTF-32 BE BOM" 
If vBOM = Chr(&HFF) & Chr(&HFE) & Chr(&H00) & Chr(&H00) Then vEncoding = "Unicode: UTF-32 LE BOM" 


If vEncoding = "?" Then 
	Dim vRegExp 
	Set vRegExp = New RegExp 
	vRegExp.IgnoreCase = False 
	vRegExp.Global = True 
	
	vRegExp.Pattern = "[\x09-\x0D\x20-\x7E]" 
	vFileContentOt = vRegExp.Replace(vFileContentIn, "") 
	If vFileContentOt = "" Then 
		vEncoding = "ASCII" 
		
	Else 
		vEncoding = "Unicode: UTF-8" 
		For vI = 1 To Len(vFileContentIn) 
			
			vAsc = Asc(Mid(vFileContentIn, vI, 1)) 
			vSubseqBytes = 0 
			
'[\x00-\x7F] = 0xxxxxxx 
			If vAsc >= &H00 And vAsc <= &H7F Then 
				vSubseqBytes = 0 
'[\xC0-\xDF][\x80-\xBF] = 110xxxxx 10xxxxxx 
			ElseIf vAsc >= &HC0 And vAsc <= &HDF Then 
				vSubseqBytes = 1 
'[\xE0-\xEF][\x80-\xBF][\x80-\xBF] = 1110xxxx 10xxxxxx 10xxxxxx 
			ElseIf vAsc >= &HE0 And vAsc <= &HEF Then 
				vSubseqBytes = 2 
'[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF] = 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
			ElseIf vAsc >= &HF0 And vAsc <= &HF7 Then 
				vSubseqBytes = 3 
			Else 
				vSubseqBytes = 0 
				vEncoding = "?" 
			End If 
			
			If vI + vSubseqBytes > Len(vFileContentIn) Then Exit For 
			
			For vJ = 1 To vSubseqBytes 
				vI = vI + 1 
				vAsc = Asc(Mid(vFileContentIn, vI, 1)) 
				If vAsc < &H80 Or vAsc > &HBF Then 
					vEncoding = "?" 
					Exit For 
				End If 
			Next 
			
			If vEncoding = "?" Then Exit For 
			
		Next 
		
		If vEncoding = "?" Then 
			vRegExp.Pattern = "[\x00-\x08\x0E-\x1F\x7F]" 'Control Chars 
			vFileContentOt = vRegExp.Replace(vFileContentIn, "") 
			If vFileContentIn = vFileContentOt Then 
				vEncoding = "ANSI" 
			Else 
				vEncoding = "Binary" 
			End If 
		End If 
		
	End If 
	
End If 

content1 = vEncoding 


'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
'Check Line Endings 
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

vLineEndings = "" 
vCR = "" 
vLF = "" 

Select Case vEncoding 
Case "ASCII", "ANSI", "Unicode: UTF-8", "Unicode: UTF-8 BOM" '0D 0A 
	vCR = Chr(13) 
	vLF = Chr(10) 
Case "Unicode: UTF-16 BE BOM" '00 0D 00 0A 
	vCR = Chr(00) & Chr(13) 
	vLF = Chr(00) & Chr(10) 
Case "Unicode: UTF-16 LE BOM" '0D 00 0A 00 
	vCR = Chr(13) & Chr(00) 
	vLF = Chr(10) & Chr(00) 
End Select 
vCRLF = vCR & vLF 

If vCRLF <> "" Then 
	vLineEndings = "None" 
	If InStr(1, vFileContentIn, vCRLF) > 0 Then 
		vLineEndings = "CRLF (Win)" 
	Else 
		If InStr(1, vFileContentIn, vCR) > 0 Then vLineEndings = "CR (Mac)" 
		If InStr(1, vFileContentIn, vLF) > 0 Then vLineEndings = "LF (Unix)" 
	End If 
End If 

content2 = vLineEndings 


'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
'Concatenation and Output Encoding & Line Endings 
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

content = vEncoding 
If vLineEndings <> "" Then 
	content = content & "  " & ChrW(&H2022) & "  " & vLineEndings 
End If
[/cut]
Скрипт рабочий, проверял в свое время. Но не знаю, в тему-ли?
Orion9 писал(а):а там часто за сотню улетает
У нас-же всего 60 столбцов используется. Вроде хватает. У меня есть файл с очень длинным комментом, создаваемым автоматом какой-то прогой. И он вмещается. Так что на 60 отдельных 30 слитных столбцов хватает, хоть это и не так красиво.
Orion9 писал(а):Правда я не понимаю зачем вам выводить всё
Интересно-же знать всю инфу, которая хранится в тэгах. Меня больше бесят пустые поля, которые болтаются в пользовательских колонках. Поэтому я хочу сделать так - есть набор с обязательными полями, а есть набор со всеми полями. Как-то так.
Orion9 писал(а):может быть SetFieldsParam в этом поможет?
Да не. Все имеющиеся команды работают именно с полями, а я хотел работать с заголовками. Так что просто буду выводить колонками описанными выше парами и все.

Добавлено: Ср апр 30, 2025 12:47
Orion9
AkulaBig писал(а):Не проверял, так как понятно, что редрав здесь не при чем.
Вон оно чё, Михалыч.
AkulaBig писал(а):Работает и мой код из двух команд.
Это не код. Это - цепочка команд:

Код: Выделить всё

 cm_SrcNextCustomView,cm_SrcPrevCustomView 
Пусть Гислер для начала научится ставить условия между командами, прежде чем можно было называть это кодом.
AkulaBig писал(а):А ваш код вообще дергается еще страшней.
В этот раз, надеюсь, проверяли?
AkulaBig писал(а):Ведь вы наставили задержек зачем-то.
Чтобы буфера не перегревались. Но можете убрать задержки. Как говорила одна девушка, та, что из джаза: some like it hot.
AkulaBig писал(а):Что мне даст озвучка?
На вечный вопрос "что нам даст озвуча" мастер дзен уже ответил: "стена большая - места всем хватит", просветленные ученики смиренно отошли.
AkulaBig писал(а):Или вы опять на ТС х32 проверяли?
Не опять, а только на нём и делаю: TC x64 всерёз для работы не рассматриваю. Тем не менее, предложенный код работает и на x64.
AkulaBig писал(а):Если речь идет только об одной кодировке, которую плохо распознает uchardet, то может пригодится скрипт на vbs
Этот скрипт у меня есть. Он и сейчас вызывается в батнике f4.bat, позволяя делать умный выбор редактора. Но тип UTF без маркера BOM он определяет неправильно.
AkulaBig писал(а):Поэтому я хочу сделать так
Ну, как сделаете, выложите полученный результат, интересно будет посмотреть, думаю, не только мне.

Добавлено: Ср апр 30, 2025 13:20
AkulaBig
Orion9 писал(а):В этот раз, надеюсь, проверяли?
Ну конечно. Вдруг я чего-то упустил.
Orion9 писал(а):Но можете убрать задержки.
Конечно проверил. Конечно все тоже.
Orion9 писал(а):Тем не менее, предложенный код работает и на x64.
Конечно работает. Только как работает. В этом вопрос. Но вы меня заинтриговали. Обязательно проверю на х32.
Но тип UTF без маркера BOM он определяет неправильно.
Понятно. Еще есть скрипты для Акельки. Посмотрю, что там интересного.

Добавлено спустя 17 минут:

Проверил на ТС х32. Да, тут редрав похоже работает. Намного лучше, но все равно также мелькает. Но если в х64 прям свободно читаются имена следующих колонок, то на х32 я не успеваю разобрать, что там написано. Это без задержек. С задержками конечно хуже.
А представьте, это будет на каждом файле. Причем при перемещении на каждый следующий файл.
Orion9 писал(а):Ну, как сделаете, выложите полученный результат, интересно будет посмотреть, думаю, не только мне.
Конечно выложу. Но там не так просто, как я думал. Не вдаваясь глубоко в код (надеюсь у вас уже глазик не дергается от таких моих слов). я почему-то решил, что MI построчно выдает код. А оказалось, что целиком. Соответственно не так просто к полям Общие,... добавить Параметр, чтобы выровнять их по колонкам. Похоже не в одну строчку код получится.

Добавлено: Ср апр 30, 2025 19:06
Orion9
AkulaBig писал(а):Проверил на ТС х32. Да, тут редрав похоже работает. Намного лучше, но все равно также мелькает. Но если в х64 прям свободно читаются имена следующих колонок, то на х32 я не успеваю разобрать, что там написано. Это без задержек. С задержками конечно хуже.
С задержками не может быть хуже, с ними иногда может быть только лучше.

Команда SendMessage(AUTORUN_TCHANDLE, 11, 0, 0) отключает перерисовку окна, SendMessage(AUTORUN_TCHANDLE, 11, 0, 0) снова её включает. Всё, что происходит между этими командами не должно отображаться на экране. Наоборот, возможен случай, когда код, расположенный между этими командами, выполняется медленне, чем приходят возвращаемые значения. Тогда происходит выполнение последней команды SendMessage(AUTORUN_TCHANDLE, 11, 0, 0) и перерисовка экрана включается раньше, чем изменения вступили в силу. В такие моменты и нужна задержка, чтобы всё дорисовалось до конца, прежде чем окно сможет обновится командой WinRedraw.

Если у вас в х64 хуже, чем в х86, попробуйте увеличить задержку до 500мс и посмотреть, что получится, когда уже точно всё дорисовалось.

Код: Выделить всё

Func SrcTest(lParam)
    SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
    CommandExec cm_SrcNextCustomView
    CommandExec cm_SrcPrevCustomView 
    Sleep(500)
    SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
    Sleep(10)
    WinRedraw(2)
EndFunc
Есть еще вариант с TCFS2. Попробуйте его, может он вам больше подойдет:

Код: Выделить всё

TCFS2 = COMMANDER_PATH & "\Tools\TCFS2\TCFS2.exe
ShellExec %TCFS2% '/ef "msg($0B, 0, 0) tcm(5501) tcm(5502) msg($0B, 1, 0) run_item(update)"'
AkulaBig писал(а):А представьте, это будет на каждом файле. Причем при перемещении на каждый следующий файл.
Я поэтому и попросил конретный код. Что можно с этими двумя командами сделать?

Код: Выделить всё

cm_SrcNextCustomView,cm_SrcPrevCustomView 
Ну разве что посмотреть перерисовывается или не перерисовывается окно.

Добавлено: Ср апр 30, 2025 19:47
AkulaBig
Orion9 писал(а):Я поэтому и попросил конретный код.
Дак его написать надо сначала. А зачем его писать, если сразу понятно, что он не устроит.
Orion9 писал(а):Что можно с этими двумя командами сделать?
Вот это другое дело. Я так и понял, что мы с вами запутались. Давайте еще раз опишу подробно, что я хотел.
Получаем мы из MI Параметр (Длительность) : Значение (3 мин). Для текущего файла я пишу в CustomFields.ini Параметр в Заголовок колонки. Передергиваю команды и в Заголовках колонок видим Параметры из MI, а в Значении колонок, значение из MI. То-есть имитируем совершенно стандартный интерфейс пользовательских колонок.
Перешли на следующий файл, записали Параметры в Заголовки колонок. Опять передернули команды для отображения их на экране. Таким образом для текущего файла будут отображаться в качестве заголовок колонок Параметры из MI.
Orion9 писал(а):Есть еще вариант с TCFS2
Посмотрю.

Добавлено: Чт май 01, 2025 12:40
Orion9
AkulaBig писал(а):Давайте еще раз опишу подробно, что я хотел.
Вывести в колонки все данные MediaInfo в удобоваримом виде не получится, уже обсуждалось. Зачем бегать по кругу?
AkulaBig писал(а):Таким образом для текущего файла будут отображаться в качестве заголовок колонок Параметры из MI.
Не лучше ли просто нажать CTRL+Q и увидеть все данные файла в противоположной панели в нормальном виде. А если нужно предварительно узнать, есть ли у файла тэги, то можно подключить плагин AnyTag и его специальные поля:

Код: Выделить всё

%_tag% 	Available tag types in file
%_tag_read% 	Displayed tag type
%_tag_size% 	Size of all tags in bytes
%_tag_size_appended% 	Size of all appended tags in bytes
%_tag_size_prepended% 	Size of all prepended tags in bytes
Зная, что у файла есть тэги (видя это в колонках), можно получить подробную информацию в быстром просмотре или в подсказке.

Добавлено: Чт май 01, 2025 18:46
AkulaBig
Orion9 писал(а):Не лучше ли просто нажать CTRL+Q и увидеть все данные файла в противоположной панели в нормальном виде.
Да вариантов может быть много. Кому что нравится. А БП у меня файлы проигрывает, а не тэги показывает. Так что надо еще 4 нажимать.
Orion9 писал(а):Вывести в колонки все данные MediaInfo в удобоваримом виде не получится, уже обсуждалось. Зачем бегать по кругу?
Объяснение очень простое. Меня просто выбешивают пустые колонки, получаемые от ручного назначения. А тут я вижу всю инфу о файле. Да, уже сейчас меня все устраивает в хинтах. Ну и пусть будет тоже самое в колонках. Я удивлен, что вы такой конструктивный человек к этой идее так скептически отнеслись.

Добавлено: Чт май 01, 2025 22:56
Orion9
AkulaBig писал(а):к этой идее так скептически отнеслись
Даже если вы сможете всё вывести (с использованием Autorun или без использования Autorun), это не значит, что будет удобно. Табличное представление подходит, только когда информация хорошо структурирована. Но теги имеют переменный размер и количество полей. Даже если следовать всем известным стандартам, нет гарантий, что конкретный тег не будет содержать user-defined fields или user-defined frames, что недопустимо при построении таблицы, которая должна быть как-то унифицирована в любом случае.

Добавлено: Пт май 02, 2025 09:06
AkulaBig
Orion9 писал(а):это не значит, что будет удобно
Что тут неудобного?
Изображение
Понятно, что далее в колонках параметры в колонке не соответствуют друг-другу, но строка-то читается нормально.
Изображение
Вот надо форматирование правильно сделать. Либо вообще поля типа Общее убрать, но тогда в хинтах не удобно. Либо прилепить их к параметру, либо дополнить пустым столбцом (думаю это худший вариант).

Добавлено спустя 2 часа 23 минуты:
Orion9 писал(а):Есть еще вариант с TCFS2.
Вроде нормально получается. Правда окно скрывается и вновь появляется. Но строка заголовка не мелькает и список файлов не мелькает. По крайней мере есть смысл код попробовать написать.

Добавлено: Сб май 03, 2025 12:02
Orion9
AkulaBig писал(а):Что тут неудобного?
А что удобного? Но если хотите пользоваться, то, наверное, это имеет право на жизнь, никто ведь не запрещает.
AkulaBig писал(а):Вот надо форматирование правильно сделать.
Не уверен, что можно считать правильным, учитывая особенности вывода, но пара мыслей возникла. Хотя вы и сами наверняка что-нибудь придумаете со временем, если будете пользоваться таким набором.

Для примера взял 20 колонок, но можно и 30, если это максимальное число:
[cut]Widths27=80,30,40,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80
Headers27=C1\nC2\nC3\nC4\nC5\nC6\nC7\nC8\nC9\nC10\nC11\nC12\nC13\nC14\nC15\nC16\nC17\nC18\nC19\nC20
Contents27=[=autorun.C1]\n[=autorun.C2]\n[=autorun.C3]\n[=autorun.C4]\n[=autorun.C5]\n[=autorun.C6]\n[=autorun.C7]\n[=autorun.C8]\n[=autorun.C9]\n[=autorun.C10]\n[=autorun.C11]\n[=autorun.C12]\n[=autorun.C13]\n[=autorun.C14]\n[=autorun.C15]\n[=autorun.C16]\n[=autorun.C17]\n[=autorun.C18]\n[=autorun.C19]\n[=autorun.C20]
Options27=-1|1|96[/cut]
Так как есть ограничение, то можно попробовать двигать окно данных, вернее сдвигать его построчно или от источника к источнику.
[cut]TOTALCMD#BAR#DATA
60021

%COMMANDER_EXE%
Сброс колонок|Alt - сдвиг строк|Ctrl - сдвиг источника|Shift - Тип шаблона / Реверс


-1
[/cut]
Кнопка будет управлять движением. Alt - сдвиг на 20 строк. Alt+Shift - сдвиг назад на 20 строк. Ctrl - сдвиг на следующий источник. Ctrl+Shift - сдвиг на предыдущий источник. Простое нажатие на кнопку сбрасывает номер строки и номер источника в 0. Вызов с Shift меняет тип подсказки.

Глобальные переменные желательно объявить сразу после Pragma AutorunPluginFields "C1:::JoinHint" в файле autorun.cfg, иначе при старте ТС могут появляться сообщения об ошибках (если пользовательские колонки уже загружены, а функция JoinHint начинает выполняться раньше, чем переменные были инициализированы):

Код: Выделить всё

Global MI_LINE = 0, MI_SOURCE = 0, MI_HINT = 1
Остальной код может быть в отдельном модуле:
[cut]

Код: Выделить всё

RegisterCommand 60021 "MediaInfoFields"

Func MediaInfoFields(lParam)
    Local b_SHIFT = IsPressed (0x10), b_CTRL = IsPressed (0x11), b_ALT = IsPressed (0x12)
    IF b_SHIFT And Not (b_ALT Or b_CTRL) Then
       MI_HINT += 1
       If MI_HINT > 2 Then MI_HINT = 1
       If MI_HINT = 1 Then
          ShowHint("MediaInfo: ru.csv")   
       Else
          ShowHint("MediaInfo: hint.txt")          
       Endif           
       Return
    EndIf
    Local nMode = 0
    If b_CTRL Then 
       nMode = 2
       If b_SHIFT Then
          MI_SOURCE -= 1
          If MI_SOURCE = 0 Then MI_LINE = 0    
       Else
          MI_SOURCE += 1
       EndIf
    ElseIf b_ALT Then
       If MI_SOURCE > 0 Then
          ShowHint("Сдвиг невозможен: источник > 0")
          Return
       EndIf
       nMode = 1
       If b_SHIFT Then
          MI_LINE -= 20
       Else
          MI_LINE += 20
       EndIf
    Else
       MI_LINE = 0
       MI_SOURCE = 0
    EndIf
    If MI_LINE < 0 Then MI_LINE = 0
    If MI_SOURCE < 0 Then MI_SOURCE = 0
    CommandExec cm_RereadSource
    If nMode < 2 Then
       ShowHint("Lines: " & MI_LINE)
    Else
       ShowHint("Source: " & MI_SOURCE)    
    EndIf   
EndFunc
    
Func JoinHint(FileName, FieldIndex, UnitIndex)
    If StrPos(FileGetAttr(FileName), "D") Then Return "" 
    Static pipe, line = 0
    Static sLib = "MediaInfo" & (auX64 ? "" : "_i386") & ".dll"
    Static hLib = DllCall("LoadLibrary", _
          "wstr", COMMANDER_PATH & "\Utilities\MediaInfo" & sLib, _
          "ptr")
    If hLib = 0 Then
       Return "Error LoadLibrary " & sLib
    EndIf
 
    If FieldIndex = 1 Then
       Local hMI = DllCall(sLib & "\MediaInfo_New", "ptr")
       If hMI = 0 Then
          Return "MediaInfo_New returned 0"
       Endif
 
       Local lng_MI ="file://" & COMMANDER_PATH & "\Utilities\MediaInfo\ru.csv"
       DllCall(sLib & "\MediaInfo_Option", _
          "ptr", hMI, "wstr", "Language", "wstr", lng_MI, _
          "wstr")
    
       If DllCall(sLib & "\MediaInfo_Open", _
          "ptr", hMI, "wstr", FileName, _
          "uint") <> 1 Then
          DllCall(sLib & "\MediaInfo_Delete", "ptr", hMI)
          Return "MediaInfo_Open failed to open file " &  FileName
       EndIf
 
       DllCall(sLib & "\MediaInfo_Option", _
          "ptr", hMI, "wstr", "Complete", "wstr", "0", _
          "wstr")
          
       If MI_HINT = 2 Then
          DllCall(sLib & "\MediaInfo_Option", _
              "ptr", hMI, _
              "wstr", "Output", _
              "wstr", "file://" & COMMANDER_PATH & "\Utilities\MediaInfo\hint.txt", _
              "wstr")
       Else 
          DllCall(sLib & "\MediaInfo_Option", "ptr", hMI, "wstr", "Output", "wstr", "", "wstr")
       Endif
         
       pipe = DllCall(sLib & "\MediaInfo_Inform", "ptr", hMI, "uint", 0, "wstr")
   
       DllCall(sLib & "\MediaInfo_Delete", "ptr", hMI)
       
       If MI_SOURCE > 0 Then
          Local aPipe = List(), j, s = 0
          aPipe.Text = pipe
          For j = 0 To aPipe.Count - 1
              If aPipe[j] = "" Then s += 1
              If s = MI_SOURCE Then 
                 MI_LINE = j + 1
                 Break
              EndIf
          Next
          Free(aPipe)   
       Endif
       
    Endif    
    Return TrimSpacesFix(StrPart(pipe, auLF, FieldIndex + MI_LINE))
EndFunc
[/cut]
Вряд ли это можно считать готовым решением, но как рабочий пример вдруг наведёт на какие-то другие мысли и идеи использования.

Добавлено: Сб май 03, 2025 13:29
AkulaBig
Orion9 писал(а):рабочий пример вдруг наведёт на какие-то другие мысли и идеи использования.
Да, интересное решение, как уместить 60 столбцов в 20. Тогда не надо мучиться с форматированием. Я-то пошел по пути размещения 60 в 30. Но для этого надо как-то названия секций отделить в отдельный непарный столбец. При этом чтобы в хинтах названия секций присутствовали.

Добавлено: Вс май 04, 2025 11:53
Orion9
AkulaBig писал(а):Я-то пошел по пути размещения 60 в 30
Да можно и 30 сделать, не проблема. Но я не уверен, что от этого лучше станет: вывод больше похож на изучение дампа, со всеми вытекающими. Наверняка можно что-то ещё придумать, что облегчит работу с таким набором. Сделать, например, кнопку разворота на весь экран и обратно, чтобы видеть больше информации:

Код: Выделить всё

[em_toggle_panel_size]
cmd=%COMMANDER_PATH%\Tools\TCFS2\TCFS2.exe
param=/ef "tcm(if(sepPos < 45, 909, if(sepPos > 55, 909, 910)))"
Но я всё же придерживаюсь, что отображение такого объёма излише. Попробуйте лучше плагин AnyTag и такой набор колонок:

Код: Выделить всё

Headers29=Tags\nTag Read\nTags Size\nBOF\nEOF\nArt\nID3v2\nUnknown
Contents29=[=anytag.Tag]\n[=anytag.Tag Read]\n[=anytag.Tag Size]\n[=anytag.Prepended]\n[=anytag.Appended]\n[=anytag.Covers]\n[=anytag.ID3v2 Encoding]\n[=anytag.ID3v2 Unknown]
Размеры колонок и опции на усмотрение, файл шаблона anytag.any такого содержания:
[cut="anytag.any"]0=8|Tag|%_tag%
1=8|Tag Read|%_tag_read%
2=8|Tag Size|%_tag_size%
3=8|Album|%album%
4=8|Artist|%artist%
5=8|Album Artist|%albumartist%
6=8|Comment|%comment%
7=8|Genre|%genre%
8=8|Title|%title%
9=8|Track|%track%
9=8|Track (leading zeros)|[$num(%track%,2)]
10=8|Year|%year%
11=8|Composer|%composer%
12=8|Covers|%_covers%
13=8|Bitrate|%_bitrate%
14=8|Codec|%_codec%
15=8|Length|%_length%
16=8|Length (in seconds)|%_length_seconds%
17=8|Mode|%_mode%
18=8|Samplerate|%_samplerate%
19=8|Extra information|%_extra%
20=8|Appended|%_tag_size_appended%
21=8|Prepended|%_tag_size_prepended%
22=8|ID3v2 Encoding|%_id3v2_character_encoding%
23=8|ID3v2 Unknown|%_id3v2_unknown_frames%
24=8|Tags|$list($char(10),: ,)[/cut]
Это только пробная версия, т.к. плагин ещё нужно изучить, но информацию о тегах он показывает интересно. Всё сразу видно: какие тэги, сколько байт они занимают, сколько байт в начале файла, сколько в конце, сколько обложек в тэгах, какая кодировка ID3v2, есть ли неизвестные фремы ID3v2. В общем, имхо, больше и не нужно. Единственное, к чему можно привлечь Autorun, использовать функцию SizeFormat(), чтобы отформатировать байты. Хотя у плагина есть и свои скриптовые функции, но их может не хватить.

Добавлено: Вс май 04, 2025 13:18
AkulaBig
Orion9 писал(а):Попробуйте лучше плагин AnyTag и такой набор колонок
Я все никак не могу понять. Зачем мне AnyTag, если и сейчас у меня через TCMediaInfa выводится заданный набор колонок? Вся соль-то в том, чтобы вывести все заполненные поля, а не заданные. Из которых многие будут пустыми.

Добавлено: Пн май 05, 2025 17:20
AkulaBig
Orion9
Наконец-то я алгоритм понял для создания пользовательских колонок, как хотелось мне. И понял, что технически это возможно, но визуально не годится. Если для активной строки будет отображаться заголовок, не соответствующий другим строкам, ни один пользователь этого не поймет.
Поэтому я пошел по самому простому пути. Просто вывожу в колонку два поля из Autorun и все. Конечно намного было-бы лучше, когда каждая колонка из Autorun выводится в свою пользовательскую колонку. Но раз более 30 колонок не может быть. Придется смириться.
Можете конечно посмотреть, раз вы хотели, но там ничего интересного нет. Чисто визуально оценить. Ну и я пока не переработал остальные наборы. Они будут соответствовать информации в хинтах.

Добавлено: Сб май 10, 2025 11:47
Orion9
AkulaBig писал(а):Поэтому я пошел по самому простому пути. Просто вывожу в колонку два поля из Autorun и все.
Большой погоды это не сделало. Вывод по-прежнему не смотрится и остаётся тяжёлым для восприятия: если просматривать список, который содержит одинаковые параметры кодирования и похожие по струкруре теги (например, дискография отдельных исполнителей или студийные сборники песен), какую-то пользу ещё можно извлечь, в остальных случаях найти применение такому набору очень трудно.
AkulaBig писал(а):Можете конечно посмотреть, раз вы хотели, но там ничего интересного нет. Чисто визуально оценить.
Скачал и посмотрел всю сборку. Останавливаться на достигнутом, конечно, не нужно. Нужно и дальше навешивать фич при помощи Autorun и выводить сборку в топ. И всё же для начала, будь я на вашем месте, я сделал бы верхнее меню.