Autorun

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): не понятно, есть в оригинале кракозябры или нет
Для этого и нужна проверка. В скрипте на au3 так-же сделано. Результат выдается в зависимости от того, есть в строке крякозябры или нет.
Orion9 писал(а):Но я бы всё-таки оставил ручное переключение или по крайней мере сохранил такую возможность
Переписать ведь не долго.
Orion9 писал(а): код можно было свести до варианта без DllCall
Но с dll нисколько не хуже.
Orion9 писал(а):плагин устарел
Я рассчитывал на его дополнительные функции, но понял, что он совершенно не нужен.
Orion9 писал(а):посмотрите функцию GetSuperWdx в модуле Plugin.aucfg
Хорошо, посмотрю.
Orion9 писал(а):У вас нет ни одного фильма с несколькими дорожками?
Я их не коллекционирую. Посмотрел и удалил. Из имеющихся под рукой нет ни одного.
Orion9 писал(а):тогда могу продемонстрировать на своём
Я смысл-то понял. А имел ввиду, что наверняка это и так будет отображаться в подсказке. Правда 7 дорожек в подсказку не влезут. Они-же будут всю инфу для каждой дорожки отображать. Поэтому я и оставил код для раздумий. Но использование клавиши Caps может не подготовленного человека до инфаркта довести. Вдруг раз, и другие буковки появились. Поэтому это как-то по другому должно вызываться.

Добавлено спустя 38 минут:
Orion9 писал(а):посмотрите функцию GetSuperWdx
Посмотрел. По моему полная замена SuperWDX. А я понял, что мне вообще SuperWDX не нужен, так как он для другого предназначен. Он нужен для объединения информации из разных плагинов, а мне нужно вывести информацию из одного плагина, просто особым образом отформатированную, чего SuperWDX и не умеет.
В общем сейчас у меня созрел план, что просто надо в кастомных колонках делать два набора колонок. Один нормальный, пусть даже и из нескольких плагинов (я в хинтах тоже добавил инфу не только из MI). А во втором наборе типа "Аудио из MI" выводить чохом 60 полей. Или 30 сдвоенных. Надо еще посмотреть, сколько полей может вывести ТС. У него есть ограничения.
А вашу GetSuperWdx возможно надо будет задействовать в дальнейших планах. Ведь со временем надо будет прикручивать BASS-библиотеку. Возможно что-то еще. Ведь возможности MI ограничены форматами, которые она понимает.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Результат выдается в зависимости от того, есть в строке крякозябры или нет.
Это, на мой взгляд, должно быть опциональным. Я, например, хотел бы видить кракозябры, чтобы понимать, что они прежде всего там есть и что такой тэг нужно перекодировать в юникод.
AkulaBig писал(а):Переписать ведь не долго.
Конечно, не долго. Даже в таком виде подсказку рано считать законченной. Ещё будите переодически к ней возвращаться. Например, сейчас она вспылывает над каталогами, что, на мой взгляд, не требуется. Можно добавить проверку и возврат от каталогов:

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

If StrPos(FileGetAttr(FileName), "D") Then
   Return "<Dir>"
Endif
Или просто возвращать пустое значение.
AkulaBig писал(а):Но с dll нисколько не хуже.
Я бы сказал, даже лучше. Но хотелось бы, чтобы методы объекта Buffer работали как положено. Надеюсь, Loopback это поправит.
AkulaBig писал(а):Поэтому я и оставил код для раздумий.
Как я писал, шаблон hint.txt пока только тестовый и больше для примера. Я к нему еще вернусь, т.к. мне не нравится, что в нём разрывается строка Video #0. Можно сделать несколько разных шаблонов, для разных целей и нужд. Поле для фантазий тут огромное.
AkulaBig писал(а):Но использование клавиши Caps может не подготовленного человека до инфаркта довести. Вдруг раз, и другие буковки появились. Поэтому это как-то по другому должно вызываться.
У меня сейчас вызывается комбинацией CapsLocK с модификаторами Ctrl, Shift и Alt. Но можно не ограничиваться одними клавишами и продублировать функционал тумблерами, кнопками и индикаторами на панели инструментов. Ну и чтобы пользователь не чертыхался лишний раз, всё должно быть соответственным образом документировано.
AkulaBig писал(а):а мне нужно вывести информацию из одного плагина, просто особым образом отформатированную, чего SuperWDX и не умеет.
Зато это умеет Autorun, и очень хорошо. Как я понимаю, вам нужен объект "Plugin" и "Дополнительные поля". В справке хорошо про них расписано.
AkulaBig писал(а):Надо еще посмотреть, сколько полей может вывести ТС. У него есть ограничения.
Есть. Loopback о них как-то писал, но я, если честно, забыл. Вероятно, 60 полей - и есть те самые ограничения.
AkulaBig писал(а):Ведь со временем надо будет прикручивать BASS-библиотеку. Возможно что-то еще.
Думаю, прикрутить проблем не будет: два последних примера с uchardet.dll и MediaInfo.dll это показывают. Но, может быть, вы захотите сделать отдельный wdx-плагин и пополнить свою коллекцию плагинов? )
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Я, например, хотел бы видить кракозябры
Как вы глубоко копаете
Orion9 писал(а): Например, сейчас она вспылывает над каталогами, что, на мой взгляд, не требуется.
Это-же стандартное поведение подсказки. Всплывает дата создания каталога.
Orion9 писал(а): чтобы методы объекта Buffer работали как положено
Это несомненно.
Orion9 писал(а):кнопками и индикаторами на панели инструментов
Для разных вариантов это единственный выход. Но такие вещи надо делать под чьи-то нужды. Свои или пользователей. А на ровном месте выдумывать варианты не так уж и просто.
Orion9 писал(а):Как я понимаю, вам нужен объект "Plugin" и "Дополнительные поля".
Скорей всего мне достаточно просто перечислить все поля в колонках, но посмотрю.
Orion9 писал(а): может быть, вы захотите сделать отдельный wdx-плагин и пополнить свою коллекцию плагинов?
Кто его знает, что мне в голову взбредет. Сейчас висит недоделанным плагин для просмотра электронных книг. Автор программы не хочет сам реализовать крайне необходимую для плагина опцию, а предлагает сделать это мне. Если он все-же решится скинуть мне исходники, это опять на неопределенное время придется забросить Autorun.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Как вы глубоко копаете
Ну, это вообще-то необязательно, хотя опция не помешала бы, тем более сделать её не так сложно. Создать в ini-файле ключ, например HintFixCodepage=1, который будет считываться при запуске и меняться во время работы отдельной кнопкой-переключателем желательно с индикацией текущего статуса в иконке на главной панели инструментов - это будет круто.
AkulaBig писал(а):Это-же стандартное поведение подсказки. Всплывает дата создания каталога.
У меня всплывает "MediaInfo_Open failed to open file", а после наведения на любой файл, над каталогами начинает всплывать подсказка от последнего файла.
AkulaBig писал(а):А на ровном месте выдумывать варианты не так уж и просто.
Зато Autorun позволяет воплотить любую хотелку. Если по какой-то причине не подходят комбинации клавиш, то можно использовать кнопоки-переключатели, лучше которых, на мой взгяд, ничего нет. Но и ими можно себя не ограничивать: есть бар-файлы, контекстное меню и клики мыши с модификаторами. Можно так нарядить свой Total Commander, как Гислер не наряжает свою рождественскую ёлку :lol:
AkulaBig писал(а):Скорей всего мне достаточно просто перечислить все поля в колонках, но посмотрю.
Да, собственно, примеры отформатированного вывода информации из плагинов есть, всё в той же GetSuperWdx:
[cut]

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

Func GetPicsInfo(FileName)
Local s
obj = Plugin("wdx4i")
If ERROR = 0 then
   obj.FileName = FileName
   # wdx4i.pixw, wdx4i.pixh, wdx4i.orient, wdx4i.depth
   s = obj.GetValue(5)  & " x " & obj.GetValue(6) & " , " & obj.GetValue(7) & " , " & obj.GetValue(13)
   Free(obj)
Else
   s = "Plugin error " & ERROR
Endif
Return s
EndFunc
[/cut]
С Autorun можно вывести что угодно и куда угодно, главное придумать "что" и "куда" )
AkulaBig писал(а):Автор программы не хочет сам реализовать крайне необходимую для плагина опцию, а предлагает сделать это мне.
Это же хорошо. Станете не только автором плагинов, но и соразработчиком софта. Если оно вам, конечно, надо.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):У меня всплывает "MediaInfo_Open failed to open file", а после наведения на любой файл, над каталогами начинает всплывать подсказка от последнего файла.
Изображение
У меня стандартная подсказка, которая не зависит от наличия Autorun.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig
Не знаю. Значит, есть какие-то причины. Разбираться с этим сейчас не хочется. Но если у меня такое появилось, значит и вас рано или поздно тоже может появиться при определенных условиях. Лучше всё-таки поставить проверку на каталог и обрабатывать для него вывод отдельно. Сделал пока так:

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

Func JoinHint(FileName, FieldIndex, UnitIndex)
    If StrPos(FileGetAttr(FileName), "D") Then Return "" 
Помогло вроде.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Но если у меня такое появилось, значит и вас рано или поздно тоже может появиться при определенных условиях.
Это из серии лучше сразу соломки подстелить? Я предпочитаю устранять проблемы по мере их появления.
Я наконец-то понял, чего мне хочется. Вот-бы названия пользовательских колонок брать из Autorun. Получится C1 в название, C2 в значение. На первый взгляд такое возможно.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9
Дошли руки потестить uchardet. У меня на Вин 11 с последними обновлениями, ТС последний - не работает. Не работает и в вашей сборке. Через библиотеку (в вашей сборке ф-я CharDetect) если уже находишься в папке с тестовыми файлами, показывает кодировку и при попытке перейти в другую папку намертво зависает. Через exe (EncDetect) работает, но очень-очень медленно. Не вывод инфы, хотя и он не быстр. А именно попытка перейти в другую папку. Использовать в реальной сборке не получится.
Может быть посмотрите, в чем проблема.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Это из серии лучше сразу соломки подстелить?
Можно и так сказать. Считайте, что это был первый баг-репорт.) И конечно же, имхо, лучше подстелить соломку.
AkulaBig писал(а):Вот-бы названия пользовательских колонок брать из Autorun.
Одно из немногих, чем я не пользовался в Autorun, функция "SetFieldsParam". Посмотрите. Может она вам пригодится. Хотя не до конца понял, что именно вам требуется сделать.
AkulaBig писал(а):Не работает и в вашей сборке.
Кажется, в сборке дополнительного поля "autorun.CharSet" не было ни в секции CustomFields, ни в HintsCustomField, хотя сама функция "CharDetect" есть в модуле Plugin.aucfg, и в рабочем ТС я ей регулярно пользуюсь, главным образом, в хинте к текстовым файлам. Но сейчас проверил: на Win11 и ТС 11.51 проблемы не обнаружил. Это плохо. Без повторения проблемы, как вы понимаете, исправить будет сложно.

Можно попробовать поставить несколько OutputDebugString и посмотреть на каком шаге зависает в окне отладчика:

[cut]

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

Func CharDetect(FileName, FieldIndex, UnitIndex)
    OutputDebugString("CharDetect: Step=1 FileName=" & FileName)
    
    Static GENERIC_READ = 0x80000000, _
           OPEN_EXISTING = 3, _    
           FILE_SHARE_READ = 1, _
           FILE_ATTRIBUTE_NORMAL = 128
           
    Static buf = Buffer(10240)           
    Static sLib = "uchardet" & (auX64 ? "" : "_x86") & ".dll", _
           hLib = DllCall("LoadLibrary", "wstr", COMMANDER_PATH & "\Ini\Tools\Libs" & sLib, "ptr")
           
    If StrPos(FileGetAttr(FileName), "D") Then Return "<Dir>"    
    If hLib = 0 Then Return "Error LoadLibrary " & sLib
    
    OutputDebugString("CharDetect: Step=2")
    
    Static hUC = DllCall(sLib & '\uchardet_new', 'ptr:cdecl')
    If hUC = 0 Then 
       Return "uchardet_new returned 0"
    Endif
    DllCall(sLib & '\uchardet_reset', 'ptr', hUC, 'cdecl')

    OutputDebugString("CharDetect: Step=3")
            
    Local bytes = 0
    Local fs = FileGetSize(FileName)   
    buf.Zero()
    If fs > buf.Size Then fs = buf.Size    
    Local hFile = DllCall("CreateFileW", "wstr",  FileName, _
                                         "dword", GENERIC_READ, _
                                         "dword", FILE_SHARE_READ, _
                                         "ptr",   0, _
                                         "dword", OPEN_EXISTING, _
                                         "dword", FILE_ATTRIBUTE_NORMAL, _
                                         "ptr",   0, _
                                         "handle")
    OutputDebugString("CharDetect: Step=4")                                         
    If hFile > 0 Then
       Local bRead = DllCall("ReadFile", "handle", hFile, _
                                         "ptr",    buf.ptr, _
                                         "dword",  fs, _
                                         "dword*", @bytes, _
                                         "ptr",    0, _
                                         "bool")
       DllCall("CloseHandle", "handle", hFile)
       If Not bRead Then Return "ReadFile failed"
       If bytes = 0 Then Return "ReadFile fetched 0 bytes"       
    Else
       Return "CreateFileW failed"
    Endif
    OutputDebugString("CharDetect: Step=5")    
    Local Res = DllCall(sLib & '\uchardet_handle_data', 'ptr', hUC, 'ptr', buf.ptr, 'uint', bytes, 'int:cdecl')
    If Res > 0 Then 
       Return "uchardet_handle_data returned " & Res
    Endif
    OutputDebugString("CharDetect: Step=6")    
    DllCall(sLib & '\uchardet_data_end', 'ptr', hUC, 'cdecl')
    #DllCall('uchardet\uchardet_delete', 'ptr', hUC, 'cdecl')
    OutputDebugString("CharDetect: Step=7")    
    Res = DllCall(sLib & '\uchardet_get_charset', 'ptr', hUC, 'str:cdecl')
    # Ctrl - отобразить количество прочитанных байт 
    Res = (IsPressed (0x11) ? "read: " & bytes : "") & ' ' & Res
    OutputDebugString("CharDetect: Step=8")    
    Return Res
EndFunc
[/cut]
На выходе должно быть что-то вроде:

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

[9624] CharDetect: Step=1 FileName=C:\Portable\TC 11.50\LANGUAGE\WCMD_RUS.LNG
[9624] CharDetect: Step=2
[9624] CharDetect: Step=3
[9624] CharDetect: Step=4
[9624] CharDetect: Step=5
[9624] CharDetect: Step=6
[9624] CharDetect: Step=7
[9624] CharDetect: Step=8
[9624] CharDetect: Step=1 FileName=C:\Portable\TC 11.50\LANGUAGE\WCMD_RUS.MNU
[9624] CharDetect: Step=2
[9624] CharDetect: Step=3
[9624] CharDetect: Step=4
[9624] CharDetect: Step=5
[9624] CharDetect: Step=6
[9624] CharDetect: Step=7
[9624] CharDetect: Step=8
Если зависнет, будет интересно посмотреть на каком шаге.
AkulaBig писал(а):Через exe (EncDetect) работает, но очень-очень медленно.
Да это вообще не вариант. Я его оставил только, чтобы позже использовать как готовую наработку, если вдруг понадобится вывести что-нибудь из консольной утилиты в поля Autorun. Есть подозрение, что виснет на DllCall файловых функций Windows. По идее, надо переделать CharDetect, задействовав новую функцию плагина "FileRead".

P.S. По поводу ограничений, кажется, вспомнил: 60 - ограничение на количество строк в подсказке, кастомных полей может быть больше.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Хотя не до конца понял, что именно вам требуется сделать
Сейчас для пользовательских колонок мы можем вывести информацию MI только в виде 60 колонок. То-есть и название параметра и его значение будут в одной строке. Было-бы клево значение С1 писать в заголовок, а C2 в значение. Но не получится, уже попробовал. Заголовки колонок, в отличии от оглавления обновляются без проблем. Но только командой Следующий набор колонок. Получается надо ее ввести, а потом вернуться назад. Конечно такое мелькание не пойдет.
Orion9 писал(а):Кажется, в сборке дополнительного поля "autorun.CharSet" не было ни в секции CustomFields
Черт, полнейший провал. Теперь вы мне помогать перестанете. Ну да, я сам создал новый набор и добавил в него нужные поля.
Orion9 писал(а):Можно попробовать поставить несколько OutputDebugString и посмотреть на каком шаге зависает в окне отладчика
Конечно буду пробовать отладить. Хотя опять-же не самая лучшая утилита. Есть плагин Штирлица для NPP. Интересно, можно-ли его подключить. Хотя опять-же прожка старая. Возможно тоже не выход.
Orion9 писал(а):Есть подозрение, что виснет на DllCall файловых функций Windows.
У вас там странные типы переменных. Может из-за этого? Но тогда exe-шник летал-бы.
Orion9 писал(а):60 - ограничение на количество строк в подсказке, кастомных полей может быть больше.
Я посмотрел. На количество наборов колонок есть ограничения. А на количество колонок не нашел. Если наступит надобность, уточню на ру-борде.

Добавлено спустя 2 часа 28 минут:
Orion9 писал(а):Если зависнет, будет интересно посмотреть на каком шаге.
С пол тычка все отлично заработало. Спасибо за очередной шедевр. Значит дело было в коде все-же.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Сейчас для пользовательских колонок мы можем вывести информацию MI только в виде 60 колонок.
Кажется, я понял. Да, это надо проверять и смотреть, что из этого получится. Но если проблема только в мелькании, то стоит попробовать делать блокировку перерисовки окна на время операции, вдруг поможет. Как раз об этом было пару страниц назад.

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

SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
<переключение наборов колонок>
<переключение наборов колонок>
Sleep(50)
SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
Sleep(10)
WinRedraw(2)
AkulaBig писал(а):Черт, полнейший провал. Теперь вы мне помогать перестанете. Ну да, я сам создал новый набор и добавил в него нужные поля.
Черт, а ведь смешно у вас получилось) Я просто хотел уточнить, как говорится, на всякий.
AkulaBig писал(а): Хотя опять-же не самая лучшая утилита.
Да нормальо вроде, мне нравится. Раньше и такого не было, приходилось мучиться с MsgBox для отладки.
AkulaBig писал(а):Я посмотрел. На количество наборов колонок есть ограничения. А на количество колонок не нашел. Если наступит надобность, уточню на ру-борде.
Я просто не стал суетиться и искать старый пост. Думал, Loopback вот-вот появится и даст пояснения по спецификациям, но он опять куда-то пропал.
AkulaBig писал(а):Спасибо за очередной шедевр.
Шедевр - это синоним Autorun, а я всего лишь его пользователь. Но учитывая, что у Гислера давно уже авторский блок и безыдейная стагнация, будущее видится только за Autorun. Как говорится, каждый кузнец своего счастья, а Autorun даёт возможность самим его ковать)
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Да, это надо проверять и смотреть, что из этого получится.
Уже точно ничего не получится. Это ведь не перерисовка окна, а смена набора колонок для каждой строки. То-есть я должен в инишник CustomFields.ini прописать новый заголовок, применить команду Следующий набор и Предыдущий набор. И так для каждой строки. Я проверил кнопкой. Очень сильное мелькание.
Orion9 писал(а):Раньше и такого не было
Я про uchardet. Есть и у нее ошибки в распознавании кодировок. С другой стороны она относительно свежая, так что есть надежда, что знает и современные кодировки.

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

Оказывается ТС позволяет создать только 31 пользовательскую колонку. Остальные просто не видит. Посмотрим, что на ру-борде еще скажут. Видимо придется делать пары.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Я проверил кнопкой. Очень сильное мелькание.
Самостоятельно что-то делать сейчас нет возможности. Если у вас есть готовый код, скиньте: посмотрю, потестирую.
AkulaBig писал(а):Я про uchardet. Есть и у нее ошибки в распознавании кодировок.
К сожалению, не без этого. Что еще хуже, она лагает на файлах UTF-16, у которых нет BOM, хотя поддержка этой кодировки заявлена чуть ли не первой строкой.
Q: UTF-16BE/UTF-16LE without BOM not supported (?)
A: I'd need to check the code again, but it is indeed possible that for these encoding, the BOM might be the only detection used. And if so, it definitely sucks and should be improved. I'm not sure how much time I can make to do this change, so I would gladly accept patches!
Короче, всё, как у Маэстро, с его "многоязычной" поддержкой на титульной странице сайта.
AkulaBig писал(а):С другой стороны она относительно свежая, так что есть надежда, что знает и современные кодировки.
Статус проекта не понятен. Обновлений не было 2,5 года, будут ли они ещё, тоже не понятно. Я тут подсмотрел у китайского товарища, надо будет сделать что-то подобное, когда руки доберуться, т.е. возврат кодовой страницы в формате CP:nnn, вместо iconv-совместимых имен.
AkulaBig писал(а):Посмотрим, что на ру-борде еще скажут.
Да есть же наверняка у Гислера на сайте информация для разработчиков со всеми спецификациями для плагинов, или нету? :shock:
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Если у вас есть готовый код, скиньте: посмотрю, потестирую.
Простейшая команда для кнопки: cm_SrcNextCustomView,cm_SrcPrevCustomView
Orion9 писал(а):Обновлений не было 2,5 года
Ну а Штирлицам и т.д. 10-15 лет.
Orion9 писал(а):Да есть же наверняка у Гислера на сайте информация для разработчиков
Уже проверил руками и получил подтверждение - 32 столбца.
Это тоже не беда. Сделал я в одном столбце Параметр : Значение. Но вот беда. Парсер надо переделывать. Заголовки Общие, Аудио, Видео,... из MI у нас сейчас идут отдельным столбцом. Получается Столбец1, Столбец2 : Столбец3. А надо чтобы Общие и к нему пустой столбец приклеивался. Чтобы было Столбец1 : Столбец2, Столбец3 : Столбец4. Где Столбец1 - Общие, Аудио, Видео,... Столбец2 пустая строка. А далее Параметр : Значение.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Простейшая команда для кнопки: cm_SrcNextCustomView,cm_SrcPrevCustomView
Вы не проверяли предложенный код? Всё работает, не выдумывайте :)

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

RegisterCommand 60021 "SrcTest"

Func SrcTest(lParam)
    SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
    CommandExec cm_SrcNextCustomView
    CommandExec cm_SrcPrevCustomView 
    Sleep(50)
    SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
    Sleep(10)
    WinRedraw(2)
EndFunc
Пока залез, вспомнил, о чём в прошлый раз забыл написать и о чём давно мысль мелькала. Можно просто повесить озвучку на CapsLock для более понятного переключения:

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

SetHotkeyAction /S /V:20   JoinHintLock 1
SetHotkeyAction /V:20 /K:S JoinHintLock 2
SetHotkeyAction /V:20 /K:C JoinHintLock 3
SetHotkeyAction /V:20 /K:A JoinHintLock 4

Func JoinHintLock(lParam)
    Local file = COMMANDER_PATH & "\Ini\Sounds\R2D2\r2d2-01.wav"
    If MediaInfoLock > 0 Then 
       MediaInfoLock = 0
       file = COMMANDER_PATH & "\Ini\Sounds\R2D2\r2d2-02.wav"       
    Else
       MediaInfoLock = 1
    Endif  
    If lParam = 2 Then MediaInfoLock = 2
    If lParam = 3 Then MediaInfoLock = 3 
    If lParam = 4 Then MediaInfoLock = 4
    DllCall("Winmm.dll\PlaySoundW", "wstr", file,  "ptr", 0, "dword", 131072 + 1)    
    Return -1
EndFunc
Еще давно хотел это сделать, но вылетело из головы. Звучит шикарно. Танцев никаких. Глобальная переменная MediaInfoLock должна, конечно, называться CapsLock. Значение этой переменной обрабатывается в JoinHint, в зависимости от чего меняться подсказка.
AkulaBig писал(а):Ну а Штирлицам и т.д. 10-15 лет.
Возможно есть и другие библиотеки. Как вы знаете, тот же AkelPad довольно неплохо определяет некоторые кодировки, UTF16 без BOM он точно определяет. Если бы автор редактора сделал отдельный ключ командной строки, который возвращал бы в stdout кодировку файла без запуска самого AkelPad, это было бы круто. А если бы оформил алгоритмы детекта в отдельную библиотеку, было бы ещё круче.
AkulaBig писал(а):Уже проверил руками и получил подтверждение - 32 столбца.
Не густо, учитывая то, что вы хотите вывести всё, а там часто за сотню улетает. Правда я не понимаю зачем вам выводить всё, но может быть SetFieldsParam в этом поможет?
Ответить