Autorun

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

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

A55555
Сообщения: 72
Зарегистрирован: Вс фев 06, 2011 10:50

Сообщение A55555 »

Orion9 писал(а):
A55555 писал(а):Но через горячие клавиши для em_everything_exit, например Alt+Ctrl+Q срабатывает.
Да, похоже только в секции финализации не срабатывает. У меня не было времени проверить в кнопке, но если вставить в командную строку TC и выполнить em_everything_exit, то Everything выгружается хоть от Администратора была запущена, хоть от простого пользователя.
A55555 писал(а):поставил в Torrent.aucfg в конец кода функции
Тогда тоже используйте условие If bEverything, но лучше в секцию финализации такое вставлять. Может Loopback найдет в чем причина несрабатывания.
Orion9
Да, через командную строку, как и через горячие клавиши срабатывает

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

[em_everything_exit]
cmd=%COMMANDER_PATH%\Soft\Everything.exe
param=-exit
выгружает Everything.

Поставил If bEverything Then CommandExec em_everything_exit в этот фрагмент Torrent.aucfg
[cut]

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

Else
       g_FindTorrTask = 0
       SendMessage(h_WinFindTorr, 0x0010, 0, 0)
       If DllCall("DestroyWindow", "handle", h_WinFindTorr) Then h_WinFindTorr = 0
       If gTorrentCount = 0 Then       
          MsgBox("Найдено: " & gTorrentCount & auCRLF & auCRLF & found, "Autorun", 64)
       Else
             If BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) = 0 Then
             SetHintParam("ShowHint", "Font", 15, "Arial")
             SetHintParam("ShowHint", "BackColor", 0xFF0000)
             SetHintParam("ShowHint", "Text", 0xFFFFFF)     
             ShowHint("Автопереход к найденому", 0, 0, 1000, 1)
             WinAlign(LAST_HINT_WINDOW)
             Sleep(100)         
             SetHintParam("ShowHint", "Reload")             
             GoToPathFromMsg(aFound[0])
             Return
          EndIf
          MsgBox("Найдено: " & gTorrentCount & auCRLF & auCRLF & found & auCRLF & auCRLF & _       
                 "Сохранить в текстовый файл?", "Autorun", 3+64+0)
          If EXTENDED = 2 Then Return
          If EXTENDED = 7 Then GoToPathFromMsg(aFound[0])
          If EXTENDED = 6 Then SaveDataPathToText(sFile, found)
       EndIf
    EndIf
    #ВЫХОД ИЗ EVERYTHING
	If bEverything Then CommandExec em_everything_exit
EndFunc
[/cut]
но не срабатывает.
Уже отчаявшись методом тыка поставил "над" этим фрагментом кода
[cut]

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

Else
      #ВЫХОД ИЗ EVERYTHING
	If bEverything Then CommandExec em_everything_exit
       g_FindTorrTask = 0
       SendMessage(h_WinFindTorr, 0x0010, 0, 0)
       If DllCall("DestroyWindow", "handle", h_WinFindTorr) Then h_WinFindTorr = 0
       If gTorrentCount = 0 Then       
          MsgBox("Найдено: " & gTorrentCount & auCRLF & auCRLF & found, "Autorun", 64)
       Else
          If BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) = 0 Then
             SetHintParam("ShowHint", "Font", 15, "Arial")
             SetHintParam("ShowHint", "BackColor", 0xFF0000)
             SetHintParam("ShowHint", "Text", 0xFFFFFF)     
             ShowHint("Автопереход к найденому", 0, 0, 1000, 1)
             WinAlign(LAST_HINT_WINDOW)
             Sleep(100)         
             SetHintParam("ShowHint", "Reload")             
             GoToPathFromMsg(aFound[0])
             Return
          EndIf
          MsgBox("Найдено: " & gTorrentCount & auCRLF & auCRLF & found & auCRLF & auCRLF & _       
                 "Сохранить в текстовый файл?", "Autorun", 3+64+0)
          If EXTENDED = 2 Then Return
          If EXTENDED = 7 Then GoToPathFromMsg(aFound[0])
          If EXTENDED = 6 Then SaveDataPathToText(sFile, found)
       EndIf
    EndIf
EndFunc
[/cut]
и наконец идея фикс осуществилась :) и пока никаких проблем не нашлось, просто летает и Everything как и не было.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

A55555 писал(а):не получается выгрузить.
Значит надо искать проблемы в коде, которые не позволяют Everything выгрузиться. У меня этот код работает много лет.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):Просто на предыдущей странице я писал:
Это я пропустил... текст не был обращён ко мне непосредственно, читал по диагонали.
Orion9 писал(а):Изначально речь шла о недокументированном вызове функции напрямую из библиотеки, либо, если делать wdx-поле, то передавать в это поле адрес буфера со списком и размер этого буфера
Не, ну передавать адреса в wdx-поле это уже совсем костыли получаются. Да и лишнее поле непонятного назначения ни к чему. А вот насчёт отдельной функции (или пары-тройки), не привязанной к интерфейсам плагинов, подумать можно, это должно быть несложно и никак не затронет интерфейс плагина для обычного пользователя.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

A55555 писал(а):и пока никаких проблем не нашлось, просто летает и Everything как и не было.
В первый раз вы поставили строку после команды "Return", поэтому до нее не дошла очередь (Return осуществляет выход из функции, прерывая ее выполнение). Во втором варианте строка выхода для Everything стоит перед Return, поэтому успевает отрабатывать.
AkulaBig писал(а):Значит надо искать проблемы в коде, которые не позволяют Everything выгрузиться. У меня этот код работает много лет.
Проблемы в коде, конечно, могут быть, как описано выше, но команда CommandExec em_everything_exit в секции финализации не работает. В то же время подтверждаю, что ShellExec(COMMANDER_PATH & "\Everything.exe", "-exit") в этой же секции работает.

Вчера у меня не было времени тщательнее попробовать, но сейчас это сделал. Из кнопок все работает:

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

RegisterCommand 70503 "ToggleEverything"
RegisterCommand 70504 "TerminateEverything"

Func ToggleEverything()    
    If Not ProcessExist("Everything.exe") Then
       CommandExec em_everything
    Else
       CommandExec em_everything_exit
    Endif    
EndFunc 

Func TerminateEverything()
    CommandExec em_everything_exit
EndFunc
Первая команда запускает или закрывает Everything в зависимости от ее сосотояния, вторая просто закрывает. Можно создать em_команду с кодом 70503 и провесить на комбинацию клавиш. У меня сейчас в usercmd.ini такие команды:

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

[em_torrent_data_search]
cmd=70500

[em_torrent_data_everything]
cmd=70501

[em_torrent_data_goto_txt]
cmd=70502

[em_everything]
cmd=%COMMANDER_PATH%\Everything.exe
param=-startup

[em_everything_exit]
cmd=%COMMANDER_PATH%\Everything.exe
param=-exit

[em_everything_toggle]
cmd=70503
Висят на кнопках:

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

A+T=em_torrent_data_search
A+E=em_torrent_data_everything
A+P=em_torrent_data_goto_txt
CA+E=em_everything_toggle
Loopback писал(а):А вот насчёт отдельной функции (или пары-тройки), не привязанной к интерфейсам плагинов, подумать можно, это должно быть несложно и никак не затронет интерфейс плагина для обычного пользователя.
Хорошо, но можете не спешить с этим, как я писал. Если найдете время и возможность, было бы неплохо посмотреть, что из этого получится.

P.S. Пока уж залез в конфиг, решил немного пофиксить функцию подсказки. Долго это откладывал, но вчера что-то достала своим неприятным обрывом строки в неподходящем месте. Сейчас вроде все норм. Речь идет о правой боковой:
[cut="hint.txt"]
Name: Titanic (1997) BDRip-HEVC 1080p.mkv
Size: 23.22 GiB
Duration: 11694688
Duration: 3 h 14 min 54 s 688 ms
Duration: 03:14:54.688 (03:14:42:21)
General: 17.1 Mb/s, Matroska, Cover, 23.976 FPS
Video #0: 1920x1080pix, AR:1.778=~16:9, 23.976 (24000/1001) FPS, 9 566 kb/s, 0.192bpf, HEVC, en
Audio #0: 6ch, 48.0 kHz, 640 kb/s(CBR), AC-3, ru, 31.250 FPS (1536 SPF)
Audio #1: 6ch, 48.0 kHz, 448 kb/s(CBR), AC-3, ru, 31.250 FPS (1536 SPF)
Audio #2: 6ch, 48.0 kHz, 448 kb/s(CBR), AC-3, ru, 31.250 FPS (1536 SPF)
Audio #3: 6ch, 48.0 kHz, 384 kb/s(CBR), AC-3, ru, 31.250 FPS (1536 SPF)
Audio #4: 6ch, 48.0 kHz, 640 kb/s(CBR), AC-3, ru, 31.250 FPS (1536 SPF)
Audio #5: 6ch, 48.0 kHz, 448 kb/s(CBR), AC-3, ru, 31.250 FPS (1536 SPF)
Audio #6: 6ch, 48.0 kHz, 640 kb/s(CBR), AC-3, ru, 31.250 FPS (1536 SPF)
Audio #7: 6ch, 48.0 kHz, 640 kb/s(CBR), AC-3, ru, 31.250 FPS (1536 SPF)
Audio #8: 6ch, 48.0 kHz, 640 kb/s(CBR), AC-3, ru, 31.250 FPS (1536 SPF)
Audio #9: 6ch, 48.0 kHz, 640 kb/s(CBR), AC-3, ru, 31.250 FPS (1536 SPF)
Audio #10: 6ch, 48.0 kHz, 640 kb/s(CBR), AC-3, ru, 31.250 FPS (1536 SPF)
Audio #11: 2ch, 48.0 kHz, 192 kb/s(CBR), AC-3, ru, 31.250 FPS (1536 SPF)
Audio #12: 6ch, 48.0 kHz, 448 kb/s(CBR), AC-3, uk, 31.250 FPS (1536 SPF)
Audio #13: 6ch, 48.0 kHz, 640 kb/s(CBR), AC-3, en, 31.250 FPS (1536 SPF)
Text #0: UTF-8@ru, 243.0 Bytes, 0 b/s, 0.001 FPS
Text #1: UTF-8@ru, 80.27 KiB, 56 b/s, 0.162 FPS
Text #2: UTF-8@ru, 110.8 KiB, 83 b/s, 0.187 FPS
Text #3: UTF-8@uk, 256.0 Bytes, 0 b/s, 0.001 FPS
Text #4: UTF-8@uk, 95.09 KiB, 67 b/s, 0.160 FPS
Text #5: UTF-8@en, 61.37 KiB, 46 b/s, 0.194 FPS
Menu #0: [/cut]
Левая боковая:
[cut="size.txt"]
Name: Titanic (1997) BDRip-HEVC 1080p.mkv
Size: 23.22 GiB
General: 8.86 MiB (0%)
Video #0: 13.0 GiB (56%)
Audio #0: 892 MiB (4%)
Audio #1: 624 MiB (3%)
Audio #2: 624 MiB (3%)
Audio #3: 535 MiB (2%)
Audio #4: 892 MiB (4%)
Audio #5: 624 MiB (3%)
Audio #6: 892 MiB (4%)
Audio #7: 892 MiB (4%)
Audio #8: 892 MiB (4%)
Audio #9: 892 MiB (4%)
Audio #10: 892 MiB (4%)
Audio #11: 268 MiB (1%)
Audio #12: 624 MiB (3%)
Audio #13: 892 MiB (4%)[/cut]
Здесь я приложу только функцию, дополнительная информация и компоненты в этом посте.
[cut]

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

gHintClipboard = false

Func MagicHint(FileName, FieldIndex, UnitIndex)    
    If StrPos(FileGetAttr(FileName), "D") Then Return "" 
    Local bCaps = DllCall("GetKeyState", "int", 0x14, "short")
    Local b_CTRL = BitAND(bCaps, 1), b_Shift = IsPressed(0x10)
    
    If Not b_CTRL then b_CTRL = IsPressed (0x11)
    If Not b_CTRL Then Return
    
    Static sLib
    If auX64 Then
       sLib = "MediaInfo.dll"        # 64-bit
    Else
       sLib = "MediaInfo_i386.dll"   # 32-bit
    EndIf   
    
    Static Pipe, Idx = 0, bHint = 0, _
           sPath = COMMANDER_PATH & "\Ini\Tools\Libs", _
           sLang ="file://" & sPath & "ru.csv", _
           sHint ="file://" & sPath & "hint.txt", _
           sSize ="file://" & sPath & "size.txt", _
           hLib = DllCall("LoadLibrary", "Wstr",  sPath & sLib, "Ptr"), _
           pNew, pOpen, pDel, pOpt, pInfo
           
    If hLib = 0 And FieldIndex > 1 Then Return
    
    If FieldIndex = 1 Then

       If hLib = 0 Then Return "Error LoadLibrary " & sLib
       
       Idx = 0
       pNew = DllCall("GetProcAddress", "Ptr", hLib, "Str", "MediaInfo_New", "Ptr")
       pOpen = DllCall("GetProcAddress", "Ptr", hLib, "Str", "MediaInfo_Open", "Ptr")
       pDel = DllCall("GetProcAddress", "Ptr", hLib, "Str", "MediaInfo_Delete", "Ptr")
       pOpt = DllCall("GetProcAddress", "Ptr", hLib, "Str", "MediaInfo_Option", "Ptr")
       pInfo = DllCall("GetProcAddress", "Ptr", hLib, "Str", "MediaInfo_Inform", "Ptr")
              
       Local hMI = DllCall(pNew, "Ptr")
       If hMI = 0 Then Return "MediaInfo.dll couldn't create new object"
              
       If DllCall(pOpen, 'Ptr', hMI, "Wstr", FileName, "Uint") <> 1 Then
          DllCall(pDel, "Ptr", hMI)        
          Return "MediaInfo.dll couldn't open file " &  FileName
       EndIf

       bHint = 0       
       Local x, y, w
       Local hWnd = RequestInfo(ItemAtCursor("panel"))
       WinGetPos("", "", "w", "", hWnd)
       If w > 0 Then
          MouseGetPos("x","y")          
          Static buf = Buffer(8)	# POINT
          buf.Zero()
          buf.SetNum(0, "long", x, "long", y)
          DllCall("ScreenToClient", "hwnd", hWnd, "ptr", buf.ptr)
          x = buf.GetNum(0)
          Switch Round(x/w*100,0)
             Case 0 To 9
                b_Shift = 1
             Case 10 To 84
                # Pipe = ''
                # Return
             Case 85 To 100
                bHint = true                           
          EndSwitch          
       EndIf
       
       If b_Shift Then 
          DllCall(pOpt, 'Ptr', hMI, "Wstr", "Complete", "Wstr", "1", "Wstr")
       Else
          DllCall(pOpt, 'Ptr', hMI, "Wstr", "Complete", "Wstr", "0", "Wstr")       
       EndIf
       
       If bHint Then
          DllCall(pOpt, "Ptr", hMI, "Wstr", "Output", "Wstr", sHint, "Wstr")
       ElseIf b_Shift Then
          DllCall(pOpt, "Ptr", hMI, "Wstr", "Output", "Wstr", sSize, "Wstr")           
       Else
          DllCall(pOpt, "Ptr", hMI, "Wstr", "Output", "Wstr", "", "Wstr")    
       EndIf
       
       DllCall(pOpt, 'Ptr', hMI, "Wstr", "Language", "Wstr", (bHint ? "" : sLang), "Wstr")
       Pipe = DllCall(pInfo, 'Ptr', hMI, "Uint", 0, "Wstr")
       If bHint Then Pipe = StrReplace(Pipe, Chr(32), Chr(160))
       DllCall(pOpt, 'Ptr', hMI, "Wstr", "Language", "Wstr", "", "Wstr")
       DllCall(pDel, "Ptr", hMI)
       If IsPressed(0x5B) Then Idx = 50
       If gHintClipboard Then ClipPut(Pipe)
    Endif
    If bHint Then Return StrPart(Pipe, auCRLF, FieldIndex)
    Return FixSpaces(StrPart(Pipe, auCRLF, FieldIndex + Idx))
EndFunc

Func FixSpaces(String)
    Local a, b
    If Not StrPos(String, ":") Then Return String    
    a = StrPart(String, ":", 1)
    b = StrPart(String, ":", 2) & StrPart(String, ":", 3)    
    Return StrTrim(a) & ":  " & FixCodePage(StrTrim(b)) 
EndFunc

Func FixCodePage(String)
   Local bUsedRepl
   # iso-8859-1 = 28591
   DllCall("WideCharToMultiByte", _
           "uint", 28591, _
           "dword", 0, _
           "wstr", String, _
           "int", -1, _
           "ptr", 0, _
           "int", 0, _
           "ptr", 0, _
           "bool*", @bUsedRepl)
    If bUsedRepl Then Return String
    Local nSize = StrLen(String)
    Local buf = Buffer(nSize)
    buf.Zero()
    DllCall("WideCharToMultiByte", _
            "uint", 28591, _
            "dword", 0, _
            "wstr", String, _
            "int", -1, _
            "ptr", buf.ptr, _
            "int", nSize, _
            "ptr", 0, _
            "ptr", 0)
    Local fixed = buf.GetStr(0, nSize, "ANSI")       
    Free(buf)
    Return fixed
EndFunc
[/cut]
Теперь путь к библиотеке немного проще прописать и добавил переменную gHintClipboard если нужно, чтобы информация в буфер попадала.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):. В то же время подтверждаю
Еще может зависеть от версии Эвресинга. Какая-то последняя версия требует премудростей при настройке. Может из-за нее проблемы?
A55555
Вообще советую попробовать чистый файл autorun.cfg и в него прописать закрытие Эвресинг. Так убедитесь, что ваш код не при чем.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback писал(а):Какая-то последняя версия требует премудростей при настройке. Может из-за нее проблемы?
Может быть. Хотя я такими вопросами не задавался, т.ч. в этом деле из меня плохой советчик. Everything у меня версии 1.4.1.1024 вроде бы. Да, версия старая, но как говорил терминатор - "старая, но не устарелая".

А вот в секции финализации не работает, наверное, потому что команда CommandExec посылает сообщение окну ТС, которого уже нет, вот сообщение и не доходит. Поэтому да - лучше использовать ShellExec. В справке правда надо уточнить, что CommandExec не будет работать в этой секции.

yozhic
Спасибо, что обновили хайлайтеры. Бар-файлы теперь намного лучше смотрятся, но с теперь cm_командами проблема осталась

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

cmd53=cm_SwitchHidSys
cmd55=cm_SetAttrib
Хотелось бы еще, чтобы ключ "cmdxx=" (именно только этот ключ до знака равенства) выделялся отдельным фоном. Но... Про бар-файлы и другие хайлайтеры здесь не хочется офтопить, поэтому вы правильно сделали, что опубликовались на github. Однако что касается хайлайтера Autorun, мне кажется, не будет большим офтопом сообщать вам в этой теме свои наблюдения.

Пока бросилось в глаза только пара моментов. Макрос ERROR выделяется и в других именах - именах переменных, например "nError", или именах функций, например "FuncError()". Это конечно не сильно мешает, но в некоторых местах немного сливается:

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

Local nError = ERROR
If nError = 1 Then MsgBox("Не найдено окно Everything.")
If nError = 2 Then MsgBox("Ошибка выполнения запроса к IPC Everything.")  
If nError > 0 Then 
А еще макрос LAST_HINT_WINDOW не подсвечивается. Остальное пока ровно.
A55555
Сообщения: 72
Зарегистрирован: Вс фев 06, 2011 10:50

Сообщение A55555 »

AkulaBig писал(а):A55555
Вообще советую попробовать чистый файл autorun.cfg и в него прописать закрытие Эвресинг. Так убедитесь, что ваш код не при чем.
AkulaBig
Спасибо. На данный момент выгружается Everything в нужный мне момент
через код выполнения ранее созданной команды

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

#ВЫХОД ИЗ EVERYTHING
If bEverything Then CommandExec em_everything_exit 
Но на чистом файле autorun.cfg я попробовал и нет, не выгружает например вот этим

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

Pragma AutorunFinalizeSection
ShellExec(COMMANDER_PATH & "Everything.exe", "-exit")
Orion9 писал(а):Можно просто войти в Настройки -> Содержимое панелей -> Пользовательские и добавить там два шаблона *.*

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

[=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]\n[=autorun.C21]\n[=autorun.C22]\n[=autorun.C23]\n[=autorun.C24]\n[=autorun.C25]\n[=autorun.C26]\n[=autorun.C27]\n[=autorun.C28]\n[=autorun.C29]\n[=autorun.C30]

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

[=autorun.C31]\n[=autorun.C32]\n[=autorun.C33]\n[=autorun.C34]\n[=autorun.C35]\n[=autorun.C36]\n[=autorun.C37]\n[=autorun.C38]\n[=autorun.C39]\n[=autorun.C40]\n[=autorun.C41]\n[=autorun.C42]\n[=autorun.C43]\n[=autorun.C44]\n[=autorun.C45]\n[=autorun.C46]\n[=autorun.C47]\n[=autorun.C48]\n[=autorun.C49]\n[=autorun.C50]\n[=autorun.C51]\n[=autorun.C52]\n[=autorun.C53]\n[=autorun.C54]\n[=autorun.C55]\n[=autorun.C56]\n[=autorun.C57]\n[=autorun.C58]\n[=autorun.C59]\n[=autorun.C60]
Там же нужно поставить галочку "Объединять все подсказки, подходящие по типу файлов".
Orion9
Подскажите пожалуйста, что я делаю не так.
Первый шаблон я сохраняю с именем *.*, но когда пытаюсь сохранить второй с этим же именем, оно спрашивает "Заменить?".
Как два шаблона с одинаковым именем сохранить?

[cut]Изображение[/cut]
[cut]Изображение[/cut]

Я правильно понял, что это имеется ввиду подсказка, которая появляется, если подвести курсор к медиафайлу, она станет более информативной?
Сейчас у меня там только 4 строки, имя, размер, продолжительность и еще что-то.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

A55555
Шаблоны сохранять необязательно, но в диалоговом окне и с простой маской могут возникнуть проблемы. Проще сразу в wincmd.ini всё добавить, тем более что у вас секциях подсказок судя по всему пустая. Найдите у себя эту секцию, и если там нет никаких других расширений, то просто замените на готовый вариант:

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

[HintsCustomField]
0exts=*.*
0fields=[=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]\n[=autorun.C21]\n[=autorun.C22]\n[=autorun.C23]\n[=autorun.C24]\n[=autorun.C25]\n[=autorun.C26]\n[=autorun.C27]\n[=autorun.C28]\n[=autorun.C29]\n[=autorun.C30]
1exts=*.*
1fields=[=autorun.C31]\n[=autorun.C32]\n[=autorun.C33]\n[=autorun.C34]\n[=autorun.C35]\n[=autorun.C36]\n[=autorun.C37]\n[=autorun.C38]\n[=autorun.C39]\n[=autorun.C40]\n[=autorun.C41]\n[=autorun.C42]\n[=autorun.C43]\n[=autorun.C44]\n[=autorun.C45]\n[=autorun.C46]\n[=autorun.C47]\n[=autorun.C48]\n[=autorun.C49]\n[=autorun.C50]\n[=autorun.C51]\n[=autorun.C52]\n[=autorun.C53]\n[=autorun.C54]\n[=autorun.C55]\n[=autorun.C56]\n[=autorun.C57]\n[=autorun.C58]\n[=autorun.C59]\n[=autorun.C60]
Если записи в секции есть (другие шаблоны и маски), то нужно добавить по последнему номеру, например:

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

[HintsCustomField]
0exts=>NTFS Ссылка
0fields=[=ntlinks.Obj_Type]\n[=ntlinks.Obj_RealPath.Natural]
1exts=*.apk
1fields=Название: [=apk.Application Name ru]\nВерсия: [=apk.Version] ([=apk.Version Code])\nПакет: [=apk.Package]\nAndroid: [=apk.Min SDK Name]
2exts=*.aucfg; autorun.cfg;*.ini;*.ahk; ;*.au3; *.vbs; *.bat; *.ps1
2fields=Число строк: [=linebreakinfo.CRLF Count]\nБайт прочитано: [=linebreakinfo.Bytes Read]
В примере записи заканчиваются вторым номером (0ext-2ext). Значит нужно добавлять с третьего:

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

[HintsCustomField]
0exts=>NTFS Ссылка
0fields=[=ntlinks.Obj_Type]\n[=ntlinks.Obj_RealPath.Natural]
1exts=*.apk
1fields=Название: [=apk.Application Name ru]\nВерсия: [=apk.Version] ([=apk.Version Code])\nПакет: [=apk.Package]\nAndroid: [=apk.Min SDK Name]
2exts=*.aucfg; autorun.cfg;*.ini;*.ahk; ;*.au3; *.vbs; *.bat; *.ps1
2fields=Число строк: [=linebreakinfo.CRLF Count]\nБайт прочитано: [=linebreakinfo.Bytes Read]
3exts=*.*
3fields=[=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]\n[=autorun.C21]\n[=autorun.C22]\n[=autorun.C23]\n[=autorun.C24]\n[=autorun.C25]\n[=autorun.C26]\n[=autorun.C27]\n[=autorun.C28]\n[=autorun.C29]\n[=autorun.C30]
4exts=*.*
4fields=[=autorun.C31]\n[=autorun.C32]\n[=autorun.C33]\n[=autorun.C34]\n[=autorun.C35]\n[=autorun.C36]\n[=autorun.C37]\n[=autorun.C38]\n[=autorun.C39]\n[=autorun.C40]\n[=autorun.C41]\n[=autorun.C42]\n[=autorun.C43]\n[=autorun.C44]\n[=autorun.C45]\n[=autorun.C46]\n[=autorun.C47]\n[=autorun.C48]\n[=autorun.C49]\n[=autorun.C50]\n[=autorun.C51]\n[=autorun.C52]\n[=autorun.C53]\n[=autorun.C54]\n[=autorun.C55]\n[=autorun.C56]\n[=autorun.C57]\n[=autorun.C58]\n[=autorun.C59]\n[=autorun.C60]
Если подказка заработает, можете потом по мере необходимости внести изменения в шаблон "hint.txt". Он так и остался в эксперементальном виде, но для просмотра аудио-дорожек вполне подходит.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

A55555 писал(а):Я правильно понял, что это имеется ввиду подсказка, которая появляется, если подвести курсор к медиафайлу, она станет более информативной?
Вчера вы добавили этот вопрос к сообщению, я не успел на него отреагирровать.

Да, будет вызываться альтернативная подсказка на панелях при наведении курсора мыши. Срабатывать эта подсказка будет при зажатом CTRL или при включеном CapsLock. Однако CTRL работает только в 32-битной версии ТС из-за некоторых ограничений.

Я согласен, что инструкция по установке подсказки написана плохо, это мое упущение. Но думаю, у вас получится ее установить.

Про шаблоны я написал, потому что вы интересовались, можно ли такое сделать. Да, можно. Поправьте шаблон hint.txt, убрав из него все лишее, или исправьте шаблон size.txt, добавив новые поля. Можете исправить как сочтете нужным и удобным для себя. Возможно, для этого придется обратиться к документации MediaInfo, но простого перечня полей должно хватить. Или включите в плагине TCMediaInfo режим просмотра "Вывод без обрабоки" (Ctrl+5), так тоже можно увидеть все поля и их значения.

yozhic
Взял последний aucfg.coder, пока все нормально. Только почему-то в заголовке дата по-прежнему от 20.09.2025, хотя актуальная версия на 2-3 дня новее.

Еще одно небольшое наблюдение. Сейчас свойства и методы объектов выделяются вместе с ссылкой-переменной на них. В некоторых случаях это смотрится очень хорошо, как например в этом вызове buf.size и buf.ptr:

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

    Static buf = Buffer(256)
    buf.Zero()
    Local nSymb = DllCall("GetLogicalDriveStringsW", "dword", buf.size, "ptr", buf.ptr)    
    If Not nSymb Then
Хотя уже здесь видно, что "buf =" выделяется одним цветом, а "buf." другим. Но если взять более длинные названия переменных, то их свойства и методы, указанные после точки, начинают еще больше сливаться и различаться с тем, что рядом:

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

       For i = 0 To aFiles.Count - 1
           If aSnap.IndexOf(aFiles[i]) = -1 Then 
              aNewFiles.Add(aFiles[i])

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

aSnap = aFiles.Clone()
    aSnap.SaveToFile(TEMP & "\tc_dir_snap.lst")
Может стоит попробовать выделять только то, что после точки? Не уверен, что так будет хорошо, но вы попробуйте. Если понравится, оставьте в будущих версиях.
Аватара пользователя
yozhik
Сообщения: 353
Зарегистрирован: Вс май 04, 2014 20:34
Откуда: Электросталь

Сообщение yozhik »

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

Сообщение Orion9 »

yozhik
Эстафету принял. Теперь будем бежать по правильному треку и без препятствий )
A55555
Сообщения: 72
Зарегистрирован: Вс фев 06, 2011 10:50

Сообщение A55555 »

Orion9 писал(а):A55555
Шаблоны сохранять необязательно, но в диалоговом окне и с простой маской могут возникнуть проблемы. Проще сразу в wincmd.ini всё добавить, тем более что у вас секциях подсказок судя по всему пустая. Найдите у себя эту секцию, и если там нет никаких других расширений, то просто замените на готовый вариант:
[cut]

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

[HintsCustomField]
0exts=*.*
0fields=[=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]\n[=autorun.C21]\n[=autorun.C22]\n[=autorun.C23]\n[=autorun.C24]\n[=autorun.C25]\n[=autorun.C26]\n[=autorun.C27]\n[=autorun.C28]\n[=autorun.C29]\n[=autorun.C30]
1exts=*.*
1fields=[=autorun.C31]\n[=autorun.C32]\n[=autorun.C33]\n[=autorun.C34]\n[=autorun.C35]\n[=autorun.C36]\n[=autorun.C37]\n[=autorun.C38]\n[=autorun.C39]\n[=autorun.C40]\n[=autorun.C41]\n[=autorun.C42]\n[=autorun.C43]\n[=autorun.C44]\n[=autorun.C45]\n[=autorun.C46]\n[=autorun.C47]\n[=autorun.C48]\n[=autorun.C49]\n[=autorun.C50]\n[=autorun.C51]\n[=autorun.C52]\n[=autorun.C53]\n[=autorun.C54]\n[=autorun.C55]\n[=autorun.C56]\n[=autorun.C57]\n[=autorun.C58]\n[=autorun.C59]\n[=autorun.C60]
[/cut]
Если подказка заработает, можете потом по мере необходимости внести изменения в шаблон "hint.txt". Он так и остался в эксперементальном виде, но для просмотра аудио-дорожек вполне подходит.
Orion9
спасибо, заработало.
Можно как-то перенастроить, чтоб центральную по полной программе подсказку перенести на те 10% справа, где сейчас аккуратная подсказка напоминающая режим "Видео (компактный)", чтоб она стала главной и заняла 80% территории?

И скорость появления подсказки. Войдя в этот режим показа подсказки, при переходе мышки на следующий медиафайл мгновенно для него выстреливается приличных габаритов подсказка, можно ли добавить какую-то задержку при переходе на другой медиафайл, чтоб можно было перевести спокойно мышку на например 5 позиций ниже по списку к нужному файлу не получая мелькающую очередь подсказок для файлов, которые в данный момент тебя не интересует в плане отчета MediaInfo?

Левая 10% и центральная 80% части поддаются настройке через hint.txt и size.txt, а правые 10% берутся из текущего установленного режима в настройках самого TCMediaInfo?
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

A55555 писал(а):Можно как-то перенастроить, чтоб центральную по полной программе подсказку перенести на те 10% справа
Можно, конечно. Разделение панели на области происходит в блоке Switch, в нём можно поменять и размеры области, и то, что в этой области будет отображаться. Если делать в соответствии с вашим запросом, то:

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

Switch Round(x/w*100,0)
   Case 0 To 9
      b_Shift = 1              
   Case 10 To 84
      bHint = true                         
   Case 85 To 100
      Sleep(500)
      # Pipe = ''
      # Return                                 
EndSwitch
bHint - это hint.txt, b_Shift - size.txt, пустая секция - выводит стандартный отчет MediaInfo, соответствующий режиму "Стандартный Inform" (Ctrl+M) плагина TCMediaInfo. Всё это, конечно, нужно вывести в интерфейс или хотя бы в настройки ini-файла, чтобы легче было управлять, но пока это только прототип подсказки. На нее еще много чего можно навесить, например ExifTool или поля из плагинов ТС. Кстати, если нужно, чтобы одна и трех секций выводила стандартную подсказку в нетронутом виде, то нужно добавить к этой секции закомментированные строки "Pipe = ''" и "Return". Именно для этой цели они там пока и оставлены.
A55555 писал(а):при переходе мышки на следующий медиафайл мгновенно для него выстреливается приличных габаритов подсказка
Это и есть одна из причин, почему я предпочитаю вызывать альтернативную подсказку нажатием CTRL. Так мне проще. Если нужна подсказка, зажал CTRL и все. Однако в TCx64 так не сделаешь. И, кстати, не по вине Autorun.
A55555 писал(а):можно ли добавить какую-то задержку при переходе на другой медиафайл, чтоб можно было перевести спокойно мышку на например 5 позиций ниже по списку к нужному файлу не получая мелькающую очередь подсказок для файлов
В примере выше я уже добавил. Sleep(500) - это 500 млс. Можете подстроить под себя. Если нужна задержка перед всеми тремя подсказками, а не только габаритной, то лучше вставить задержку сюда:

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

Sleep(500)
Local hWnd = RequestInfo(ItemAtCursor("panel"))
WinGetPos("", "", "w", "", hWnd)
A55555 писал(а):Левая 10% и центральная 80% части поддаются настройке через hint.txt и size.txt, а правые 10% берутся из текущего установленного режима в настройках самого TCMediaInfo?
Ну, с настройками TCMediaInfo это, на мой взгляд, перебор. Сейчас в этом нет необходимости. Большая подсказка уже соответствует режиму "Стандартный Inform" в TCMediaInfo. При желании можно сделать, чтобы дополнительно вызывался полный режим показа полей, но для подсказки это бессмысленно и не удобно. Даже сейчас эта подсказка не очень хорошо смотрится на видео-файлах, хотя в нее попадает все важное. А если нужно сделать что-то наподобие "Аудио (компактный)" и "Видео (компактный)", то для этого и есть два шаблона, которые можно подправить на свое усмотрение.
A55555
Сообщения: 72
Зарегистрирован: Вс фев 06, 2011 10:50

Сообщение A55555 »

Orion9 писал(а):
A55555 писал(а):Можно как-то перенастроить, чтоб центральную по полной программе подсказку перенести на те 10% справа
Можно, конечно. Разделение панели на области происходит в блоке Switch, в нём можно поменять и размеры области, и то, что в этой области будет отображаться. Если делать в соответствии с вашим запросом, то:

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

Switch Round(x/w*100,0)
   Case 0 To 9
      b_Shift = 1              
   Case 10 To 84
      bHint = true                         
   Case 85 To 100
      Sleep(500)
      # Pipe = ''
      # Return                                 
EndSwitch
bHint - это hint.txt, b_Shift - size.txt, пустая секция - выводит стандартный отчет MediaInfo, соответствующий режиму "Стандартный Inform" (Ctrl+M) плагина TCMediaInfo. Всё это, конечно, нужно вывести в интерфейс или хотя бы в настройки ini-файла, чтобы легче было управлять, но пока это только прототип подсказки. На нее еще много чего можно навесить, например ExifTool или поля из плагинов ТС. Кстати, если нужно, чтобы одна и трех секций выводила стандартную подсказку в нетронутом виде, то нужно добавить к этой секции закомментированные строки "Pipe = ''" и "Return". Именно для этой цели они там пока и оставлены.
Orion9
Спасибо, всё как хотелось, работает.

Не смог сам разобраться при редактировании на свой вкус Hint.txt, можно ли указать каким-то синтаксисом пропуск строки при показе подсказки, чтоб разделить визуально General от Видео, Видео от Аудио и т.д.?
При показе подсказки по полной программе оно как-то блоки пустой строкой отделяет.

Есть ли способ указания квадратных скобок "[" или "]", чтоб они воспринимались не как синтаксис, а как символы, которыми я хочу например оградить обозначения языка аудио "[ru]" или нужно альтернативные скобочки использовать, например фигурные "{}"?
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

A55555
Автор вроде не против, чтобы в этом топике обсуждались некоторые решения на Autorun, хотя к самому плагину это не имеет отношения. Но, имхо, обсуждать шаблоны MediaInfo будет как-то слишком. Возможно, следует создасть отдельную тему, как это сделал yozhic, где можно будет спокойно обсужать решения на Autorun, которых, кстати, накопилось немало, но многие просто затерялись десятками страниц назад.

Надо подумать над этим, ведь Autorun давно уже вырос из коротких штанишек автозапуска. Да было время, когда это создавало ему репутацию, и даже сейчас от некоторых конфигов, которые писались 10 лет назад, может отвиснуть челюсть, как, например, в сборке TechAdmin, но это было давно, и много воды с тех пор утекло.

Сейчас Autorun, как уже не раз говорилось, больше походит на полноценный скриптовый язык, способный решить любую задачу в ТС, но сам автор нигде это не афиширует, поэтому немногие об этом знают. Так что да. Топик с готовыми и интересными решениями, собранными в виде списка, думаю, пригодился бы.

MediaInfo
Я выше писал, что возможно придется обратиться к документации MediaInfo, поскольку это отдельный вопрос, требующий отдельного изучения. С синтаксисом шаблонов я плохо знаком, т.к. глубоко в него не вникал, поэтому подсказка hint.txt так и осталась недоделанной. Перевод строки делается через "\r\n", а скобка экранируется символом обратной косой черты "\", т.е. Как я понял, все, что находится в квадратных скобках, не будет отображаться в случае отсутствия значий у полей, которые находятся внутри этих скобок.

В качестве примера могу привести еще один шаблон, который как-то делал для кнопки.
[cut="duration.txt"]General;Name: %FileName%.%FileExtension%\r\nSize: %FileSize/String4%\r\nGeneral:\r\n [Duration: %Duration%]\r\n [Duration: %Duration/String1%]\r\n [Duration: %Duration/String5%]\r\n

Video;Video #%StreamKindID%: \r\n [Duration: %Duration%]\r\n [Duration: %Duration/String1%]\r\n [Duration: %Duration/String5%]\r\n
Audio;Audio #%StreamKindID%: \r\n [Duration: %Duration%]\r\n [Duration: %Duration/String1%]\r\n [Duration: %Duration/String5%]\r\n[/cut]
Показывает как отличаются дорожки друг от друга по продолжительности.
Ответить