Orion9

|
Posted: Mon Sep 22, 2025 14:15 Post subject: |
|
|
| A55555 wrote: | | и пока никаких проблем не нашлось, просто летает и Everything как и не было. |
В первый раз вы поставили строку после команды "Return", поэтому до нее не дошла очередь (Return осуществляет выход из функции, прерывая ее выполнение). Во втором варианте строка выхода для Everything стоит перед Return, поэтому успевает отрабатывать.
| AkulaBig wrote: | | Значит надо искать проблемы в коде, которые не позволяют Everything выгрузиться. У меня этот код работает много лет. |
Проблемы в коде, конечно, могут быть, как описано выше, но команда CommandExec em_everything_exit в секции финализации не работает. В то же время подтверждаю, что ShellExec(COMMANDER_PATH & "\Everything.exe", "-exit") в этой же секции работает.
Вчера у меня не было времени тщательнее попробовать, но сейчас это сделал. Из кнопок все работает:
| Code: | 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 такие команды:
| Code: | [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 |
Висят на кнопках:
| Code: | 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 wrote: | | А вот насчёт отдельной функции (или пары-тройки), не привязанной к интерфейсам плагинов, подумать можно, это должно быть несложно и никак не затронет интерфейс плагина для обычного пользователя. |
Хорошо, но можете не спешить с этим, как я писал. Если найдете время и возможность, было бы неплохо посмотреть, что из этого получится.
P.S. Пока уж залез в конфиг, решил немного пофиксить функцию подсказки. Долго это откладывал, но вчера что-то достала своим неприятным обрывом строки в неподходящем месте. Сейчас вроде все норм. Речь идет о правой боковой:
 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:
Левая боковая:
 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%)
Здесь я приложу только функцию, дополнительная информация и компоненты в этом посте.
 Hidden text | Code: | 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
|
Теперь путь к библиотеке немного проще прописать и добавил переменную gHintClipboard если нужно, чтобы информация в буфер попадала. |
|