View previous topic :: View next topic |
Author |
Message |
Loopback
Joined: 07 Sep 2009 Posts: 1611
|
(Separately) Posted: Tue Sep 16, 2025 22:59 Post subject: |
|
|
yozhik wrote: | Такое ощущение, что мой конфиг стал быстрее обрабатываться. |
Было бы здорово, но вряд ли Не думаю, что произведённые изменения могут дать хоть сколько-нибудь заметное ускорение, пока это в основном изменение структуры кода. |
|
Back to top |
|
 |
A55555
Joined: 06 Feb 2011 Posts: 33
|
(Separately) Posted: Tue Sep 16, 2025 23:50 Post subject: |
|
|
Orion9 wrote: | A55555 wrote: | И если можно будет и это реально |
С тем функционалом, который сечас есть в Autorun, это реально. Loopback, конечно, в подробностях знает формат торрент-файлов, но если исходить из самого простого, то можно просто проверять размер содержимого (каталога или файла) торрент-файла и сверять его с тем, что есть на диске. Результат будет с большой долей вероятности точным, т.к. количество байт у крупных объемов данных вряд ли может повториться. Недостаток такого подхода лишь один: не полностью скаченные раздачи (несколько серий сезона, несколько песен альбома и т.д) таким способом найтись не смогут, т.к. реальный объем данных не совпадает с заявленным. Возможен и обратный случай, когда в каталог полностью скаченной раздачи случайно попадают лищние файлы. Такие каталоги тоже не будут находиться, но в остальных случаях проблем не должно быть. Одиночные файлы будут находиться даже переименованными, ровно как и папки.
 Hidden text Code: | RegisterCommand 70500 TorrentFindData
Global gTorrentSize = 0, gTorrentCount = 0, gDriveInclude = "e:\;f:\;g:\;h:\;i:\;j:\"
Global h_WinFindTorr = 0
Global g_WinFindTorr = 0, g_FindTorrTask = 0
Global o_WinFindTorr = Callback("WinFindTorrProc", "hwnd;uint;wparam;lparam")
Func WinFindTorrProc(hWnd, uMsg, wParam, lParam)
Static WM_CLOSE = 0x0010
If uMsg = WM_CLOSE Then
If DllCall("DestroyWindow", "handle", hWnd) Then
h_WinFindTorr = 0
g_FindTorrTask = 0
EndIf
Return 0
EndIf
Return DllCall("CallWindowProcW", "ptr", g_WinFindTorr, _
"hwnd", hWnd, "uint", uMsg, "wparam", wParam, "lparam", lParam)
EndFunc
Func WinFindTorrentData()
Local hIco
h_WinFindTorr = DllCall("CreateWindowExW", _
"dword", 0, _
"wstr", "msctls_progress32", _
"wstr", "", _
"dword", 0x00C80000, _
"int", 200, "int", 100, "int", Scale(400), "int", Scale(50), _
"handle", AUTORUN_TCHANDLE, _
"handle", 0, "handle", 0, "ptr", 0, _
"handle")
If h_WinFindTorr = 0 Then Return 0
WinAlign(h_WinFindTorr, 0, DllCall("GetDesktopWindow"))
WinSetPos("", -Scale(50), "", "", 1, h_WinFindTorr)
WinSetState(5, h_WinFindTorr)
g_WinFindTorr = DllCall("SetWindowLong" & (auX64 ? "PtrW" : "W"), _
"hwnd", h_WinFindTorr, _
"int", -4, _
"long_ptr", o_WinFindTorr.Ptr, _
"ptr")
hIco = SendMessage(AUTORUN_TCHANDLE, 0x7f, 2, 0)
SendMessage(h_WinFindTorr, 0x80, 0, hIco)
WinSetStyle(PBS_MARQUEE, 2, h_WinFindTorr)
SendMessage(h_WinFindTorr, PBM_SETMARQUEE, 1, 0)
WinSetText("Searching...", h_WinFindTorr)
g_FindTorrTask = 1
While g_FindTorrTask
Sleep(50)
Wend
h_WinFindTorr = 0
EndFunc
Func TorrentFindData()
If h_WinFindTorr Then
SendMessage(h_WinFindTorr, 0x0010, 0, 0)
g_FindTorrTask = 0
Return
Endif
Static buf = Buffer(256)
buf.Zero()
Local nSymb = DllCall("GetLogicalDriveStringsW", "dword", buf.size, "ptr", buf.ptr)
If Not nSymb Then
MsgBox("Не удалось получить список логических дисков" & auCRLF "SYSERROR: " & SYSERROR, "Autorun")
Return
EndIf
Local aDrive = list(), i = 0, sz, sDrives
While 1
sDrive = buf.GetStr(i)
sz = StrLen(sDrive)
if sz = 0 THEN break
aDrive.add(sDrive)
i = i + sz*2 + 2
Wend
sDrives = aDrive.text
#MsgBox(sDrives)
Local obj = Plugin("TCTorrent")
If ERROR <> 0 Then
ShowHint("TCTorrent.wdx plugin error " & ERROR)
Return
Endif
Local lRet = false
Local sPath = RequestCopyDataInfo("SP")
Local sName = RequestCopyDataInfo("SN")
Local sFile = sPath & sName
If Not FileExist(sFile) Then
ShowHint("Файл не существует " & sFile)
lRet = true
ElseIf StrPos(FileGetAttr(sFile), "D") Then
ShowHint("Каталог " & sFile)
lRet = true
Else
obj.FileName = sFile
Local name = obj.GetValue(0)
Local size = obj.GetValue(2,0) # size -> bytes
Local files = obj.GetValue(1)
If files < 1 Then
ShowHint("Файл не является торрент-файлом " & sFile)
lRet = true
EndIf
Endif
Free(obj)
If lRet Then Return
IniRead gDriveInclude %COMMANDER_INI% "Autorun" "TorrentDrives" %"gDriveInclude"
MsgBox("Поиск данных торрента:" & auCRLF & auCRLF & _
"Имя: " & name & auCRLF & _
"Размер: " & size & auCRLF & _
"Файлов: " & files & auCRLF & auCRLF & _
"Диски поиска: " & gDriveInclude & auCRLF & auCRLF & _
"Продолжить?", "Autorun", 3+32+0)
If EXTENDED <> 6 Then Return
gTorrentSize = size
h_WinFindTorr = 0
gTorrentCount = 0
RunThread "WinFindTorrentData"
While g_FindTorrTask = 0
Sleep(50)
Wend
Local found
For i = 0 to aDrive.Count -1
If StrPos(gDriveInclude, aDrive[i]) Then
If files > 1 Then
found &= FileFind(aDrive[i], "*.*", 1, 2, "PathList", "Func:FindTorrentDir") & auCRLF
Else
found &= FileFind(aDrive[i], "*.*", 1, 1, "PathList", "Func:FindTorrentFile") & auCRLF
EndIf
Endif
Next
If g_FindTorrTask = 0 Then
MsgBox("Поиск данных отменен" & auCRLF & auCRLF & _
"Найдено: " & gTorrentCount & auCRLF & found, "", 48)
Else
g_FindTorrTask = 0
SendMessage(h_WinFindTorr, 0x0010, 0, 0)
If DllCall("DestroyWindow", "handle", h_WinFindTorr) Then h_WinFindTorr = 0
MsgBox("Найдено: " & gTorrentCount & auCRLF & found, "", 64)
EndIf
EndFunc
Func FindTorrentFile(file)
Static T1 = GetUptime()
If Not g_FindTorrTask Then Return 0
If Round(GetUptime() - T1, 0) > 200 Then
WinSetText(" [" & gTorrentCount & "] " & file.FullPath, h_WinFindTorr)
T1 = GetUptime()
Sleep(5)
EndIf
If file.size = gTorrentSize Then
gTorrentCount += 1
Return 1
EndIf
Return 2
EndFunc
Func FindTorrentDir(file)
Static T2 = GetUptime()
If Not g_FindTorrTask Then Return 0
If Round(GetUptime() - T2, 0) > 200 Then
WinSetText(" [" & gTorrentCount & "] " & file.FullPath, h_WinFindTorr)
T2 = GetUptime()
Sleep(5)
EndIf
Local sz = FileFind(file.FullPath, "*.*", 1, 0, "TotalSize")
If sz = gTorrentSize Then
gTorrentCount += 1
Return 1
EndIf
Return 2
EndFunc |
 Hidden text Code: | TOTALCMD#BAR#DATA
70500
%COMMANDER_EXE%
Команда 70500
-1
|
В wincmd.ini сохраняется ключ:
Code: | [Autorun]
TorrentDrives=e:\;f:\;g:\;i:\;j:\ |
Здесь можно указать на каких дисках искать. Желательно исключить диски с каталогом Windows, до тех пор, пока не будет сделано под Everything, иначе будут заметные торомоза.
В общем, это пока только тестовая версия, могут быть косяки и недочеты, но в целом работает.
|
Спасибо. Поиск работает.
Для случая "папка Blu-Ray диска" находит как два объекта.
 Hidden text
Такое поведение в случае, если папка BDMV одна внутри главной папки
Code: | E:\Torrent\Страна садов 2004 [GARDEN_STATE_2004_BDREMUX_HDCLUB]\BDMV\ |
Если рядом с ней есть ещё папки, типа ANY и CERTIFICATE то всё нормально, находит 1 объект.
 Hidden text
Для просто файл всё нормально
 Hidden text
Но только это сообщение, на противоположной панели TC ничего не происходит, перехода к этой папке/файлу. Code: | Страна садов 2004 [GARDEN_STATE_2004_BDREMUX_HDCLUB]\BDMV\ |
|
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 840
|
(Separately) Posted: Wed Sep 17, 2025 00:24 Post subject: |
|
|
A55555
Функционал будет развиваться со временем, всего сразу не сделаешь. Над новыми фишками надо будет еще подумать. Пока этот только тестовая версия, но она рабочая, что радует. Пути из окна сообщения в данный момент можно просто копировать по CTRL+C и вставлять в заголовок панели для перехода. Надеюсь, эта кнопка поможет вам найти все данные и поставить их на раздачу ) |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 437
|
(Separately) Posted: Wed Sep 17, 2025 21:37 Post subject: |
|
|
Loopback
Почему-то я считал, что для работы с инишниками у нас полный набор инструментов. А оказывается переименование ключа нет. Конечно через List() я уже умею править инишники. Но хотелось-бы иметь прямой инструмент IniRenameKey. Есть-ли такое в планах? |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1611
|
(Separately) Posted: Wed Sep 17, 2025 22:34 Post subject: |
|
|
AkulaBig wrote: | Есть-ли такое в планах? |
Нет, не планировал, в WinAPI нет такого понятия, как переименование ключа. Кажется, ни в одном скриптовом языке такого не встречал. Это в любом случае будет три операции, IniRead+IniWrite+IniDelete:
Code: | Func IniRenameKey(ini, section, key, newkey)
Local value = IniRead(ini, section, key, "<nokey>")
If value = "<nokey>" Then Return
IniWrite(ini, section, newkey, value)
IniDelete(ini, section, key)
EndFunc |
Если цель сохранить порядок ключей, то WinAPI функции это сделать не позволяют. В принципе, и IniRenameSection лишняя, по сути это тоже три последовательных операции, и тоже не сохраняет порядок. |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 437
|
(Separately) Posted: Wed Sep 17, 2025 22:54 Post subject: |
|
|
Loopback
Я с этим уже наловчился:
Code: | Local DriveLibBak = IniRead(COMMANDER_INI, "Configuration", "DriveLib.bak", "")
If DriveLibBak <> "" Then
Local WinCmdIni = List()
WinCmdIni.LoadFromFile(COMMANDER_INI)
For i = 0 to WinCmdIni.Count-1
If StrPos(WinCmdIni[i], "DriveLib.bak") > 0 Then
WinCmdIni[i] = 'DriveLib=' & DriveLibBak
Endif
Next
WinCmdIni.SaveToFile(COMMANDER_INI, "UTF-16")
Free(WinCmdIni)
EndIf
|
Порядок прекрасно сохраняется. Хотя он мне совершенно не важен. |
|
Back to top |
|
 |
A55555
Joined: 06 Feb 2011 Posts: 33
|
(Separately) Posted: Wed Sep 17, 2025 23:48 Post subject: |
|
|
Orion9 wrote: | A55555
Функционал будет развиваться со временем, всего сразу не сделаешь. Над новыми фишками надо будет еще подумать. Пока этот только тестовая версия, но она рабочая, что радует. Пути из окна сообщения в данный момент можно просто копировать по CTRL+C и вставлять в заголовок панели для перехода. Надеюсь, эта кнопка поможет вам найти все данные и поставить их на раздачу ) |
Спасибо, буду ждать.
Копируется по CTRL+C вообще всё что есть в окне сообщения, не только путь , чтоб сразу вставить в заголовок TC, пока так задумано я понимаю. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 840
|
(Separately) Posted: Thu Sep 18, 2025 00:40 Post subject: |
|
|
A55555
Ждать пришлось не долго, удачно сошлись звезды )
Улучшенная и доработанная версия функционала:
 Torrent.aucfg Code: | #Pragma IncludeOnce
# 70500-70599
RegisterCommand 70500 "TorrentFindData" 0
RegisterCommand 70501 "TorrentFindData" 1
RegisterCommand 70502 "GoToPathFromTextFile"
RegisterCommand 70505 "TorrentSize"
Global gTorrentSize = 0, gTorrentCount = 0, gDriveInclude = "e:\;f:\;g:\;h:\;i:\;j:\"
Global h_WinFindTorr = 0
Global g_WinFindTorr = 0, g_FindTorrTask = 0
Global o_WinFindTorr = Callback("WinFindTorrProc", "hwnd;uint;wparam;lparam")
Func WinFindTorrProc(hWnd, uMsg, wParam, lParam)
Static WM_CLOSE = 0x0010
If uMsg = WM_CLOSE Then
If DllCall("DestroyWindow", "handle", hWnd) Then
h_WinFindTorr = 0
g_FindTorrTask = 0
EndIf
Return 0
EndIf
Return DllCall("CallWindowProcW", "ptr", g_WinFindTorr, _
"hwnd", hWnd, "uint", uMsg, "wparam", wParam, "lparam", lParam)
EndFunc
Func WinFindTorrentData()
Local hIco
h_WinFindTorr = DllCall("CreateWindowExW", _
"dword", 0, _
"wstr", "msctls_progress32", _
"wstr", "", _
"dword", 0x00C80000, _
"int", 200, "int", 100, "int", Scale(400), "int", Scale(50), _
"handle", AUTORUN_TCHANDLE, _
"handle", 0, "handle", 0, "ptr", 0, "handle")
If h_WinFindTorr = 0 Then Return 0
WinAlign(h_WinFindTorr, 0, DllCall("GetDesktopWindow"))
WinSetPos("", -Scale(50), "", "", 1, h_WinFindTorr)
WinSetState(5, h_WinFindTorr)
g_WinFindTorr = DllCall("SetWindowLong" & (auX64 ? "PtrW" : "W"), _
"hwnd", h_WinFindTorr, _
"int", -4, _
"long_ptr", o_WinFindTorr.Ptr, "ptr")
Static PBS_MARQUEE = 0x08, _
PBM_SETMARQUEE = 1034, _
WM_GETICON = 0x7f, _
WM_SETICON = 0x80
hIco = SendMessage(AUTORUN_TCHANDLE, WM_GETICON, 2, 0)
SendMessage(h_WinFindTorr, WM_SETICON, 0, hIco)
WinSetStyle(PBS_MARQUEE, 2, h_WinFindTorr)
SendMessage(h_WinFindTorr, PBM_SETMARQUEE, 1, 0)
WinSetText("Searching...", h_WinFindTorr)
g_FindTorrTask = 1
While g_FindTorrTask
Sleep(50)
Wend
h_WinFindTorr = 0
EndFunc
Func TorrentFindData(lParam, nMode)
If IsPressed(0x10) And Not nMode Then
SetTorrentDrives()
Return
EndIf
Local bEverything = nMode
If h_WinFindTorr Then
SendMessage(h_WinFindTorr, 0x0010, 0, 0)
g_FindTorrTask = 0
Return
Endif
Static buf = Buffer(256)
buf.Zero()
Local nSymb = DllCall("GetLogicalDriveStringsW", "dword", buf.size, "ptr", buf.ptr)
If Not nSymb Then
MsgBox("Не удалось получить список логических дисков" & auCRLF "SYSERROR: " & SYSERROR, "Autorun")
Return
EndIf
Static aDrive = list(), aFound = List()
Local i = 0, sz, sDrives
aDrive.Count = 0
While 1
sDrive = buf.GetStr(i)
sz = StrLen(sDrive)
If sz = 0 Then break
aDrive.add(sDrive)
i = i + sz*2 + 2
Wend
sDrives = aDrive.text
#MsgBox(sDrives)
Local obj = Plugin("TCTorrent")
If ERROR <> 0 Then
ShowHint("TCTorrent.wdx plugin error " & ERROR)
Return
Endif
Local lRet = false
Local sPath = RequestCopyDataInfo("SP")
Local sName = RequestCopyDataInfo("SN")
Local sFile = sPath & sName
If Not FileExist(sFile) Then
ShowHint("Файл не существует " & sFile)
lRet = true
ElseIf StrPos(FileGetAttr(sFile), "D") Then
ShowHint("Каталог " & sFile)
lRet = true
Else
obj.FileName = sFile
Local name = obj.GetValue(0)
Local size = obj.GetValue(2,0) # size -> bytes
Local files = obj.GetValue(1)
If files < 1 Then
ShowHint("Файл не является торрент-файлом " & sFile)
lRet = true
EndIf
Endif
Free(obj)
If lRet Then Return
IniRead gDriveInclude %COMMANDER_INI% "Autorun" "TorrentDrives" %"gDriveInclude"
MsgBox("Поиск данных торрента:" & auCRLF & auCRLF & _
"Имя: " & name & auCRLF & _
"Размер: " & size & auCRLF & _
"Файлов: " & files & auCRLF & auCRLF & _
"Диски поиска: " & gDriveInclude & auCRLF & auCRLF & _
"Продолжить?", "Autorun", 3+32+0)
If EXTENDED <> 6 Then Return
aFound.Count = 0
gTorrentSize = size
h_WinFindTorr = 0
gTorrentCount = 0
RunThread "WinFindTorrentData"
While g_FindTorrTask = 0
Sleep(50)
Wend
Local found
If bEverything Then
found = FileFindEv("size:" & gTorrentSize, "", "")
Local nError = ERROR
If nError = 1 Then MsgBox("Не найдено окно Everything.")
If nError = 2 Then MsgBox("Ошибка выполнения запроса к IPC Everything.")
If nError > 0 Then
g_FindTorrTask = 0
Return
EndIf
Else
For i = 0 to aDrive.Count -1
If StrPos(gDriveInclude, aDrive[i]) Then
If files > 1 Then
found &= FileFind(aDrive[i], "*.*", 1, 2, "PathList", "Func:FindTorrentDir") & auCRLF
Else
found &= FileFind(aDrive[i], "*.*", 1, 1, "PathList", "Func:FindTorrentFile") & auCRLF
EndIf
Endif
Next
EndIf
found = StrTrim(found)
aFound.Text = found
If bEverything Then gTorrentCount = aFound.Count
If g_FindTorrTask = 0 Then
If gTorrentCount = 0 Then
MsgBox("Поиск отменен" & auCRLF & auCRLF & _
"Найдено: " & gTorrentCount & auCRLF & auCRLF & found, "Autorun", 48)
Else
MsgBox("Поиск отменен" & auCRLF & auCRLF & _
"Найдено: " & gTorrentCount & auCRLF & auCRLF & found & auCRLF & auCRLF & _
"Сохранить в текстовый файл?", "Autorun", 3+48+0)
If EXTENDED = 2 Then Return
If EXTENDED = 7 Then GoToPathFromMsg(aFound[0])
If EXTENDED = 6 Then SaveDataPathToText(sFile, found)
EndIf
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
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
Func SaveDataPathToText(Filename, DataPath)
Local file = FileChangeExt(Filename, "txt"), bGoto = false
If FileExist(file) Then
MsgBox("Файл существует" & auCRLF & auCRLF & _
file & auCRLF & auCRLF & "Перезаписать?", "Autorun", 3+32+0)
If EXTENDED <> 6 Then Return
EndIf
FileWrite(file, DataPath)
#MsgBox("Файл сохранен " & auCRLF & auCRLF & file, "Autorun", 64)
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")
If bGoto Then
If RequestInfo(1000) = 1 Then
CommandExec /CD %'file'
Else
CommandExec /CD '' %'file'
Endif
Endif
EndFunc
Func GoToPathFromTextFile()
Local sPath = RequestCopyDataInfo("SP")
Local sName = RequestCopyDataInfo("SN")
Local sFile = sPath & sName
If Not FileExist(sFile) Then
ShowHint("Файл не существует " & sFile)
Return
ElseIf StrPos(FileGetAttr(sFile), "D") Then
ShowHint("Файл является каталогом " & sFile)
Return
ElseIf FileGetExt(sFile) <> "TXT" Then
ShowHint("Расширение файла не .txt " & sFile)
Return
ElseIf FileGetSize(sFile) > 1024*2 Then
ShowHint("Размер файла больше 2 Кб " & sFile)
Return
EndIf
Local txt = FileRead(sFile)
Local target = StrPart(txt, auCRLF, 1)
If target <> "" Then
GoToPathFromMsg(target)
Else
ShowHint("Пустой путь" & target)
EndIf
EndFunc
Func GoToPathFromMsg(Target)
If FileExist(Target) Then
If RequestInfo(1000) = 2 Then
CommandExec /CD %'Target'
Else
CommandExec /CD '' %'Target'
Endif
SendCommand(4006)
Else
ShowHint("Путь не существует " & Target)
EndIf
EndFunc
Func FindTorrentFile(file)
Static T1 = GetUptime()
If Not g_FindTorrTask Then Return 0
If Round(GetUptime() - T1, 0) > 200 Then
WinSetText(" [" & gTorrentCount & "] " & file.FullPath, h_WinFindTorr)
T1 = GetUptime()
Sleep(5)
EndIf
If file.size = gTorrentSize Then
gTorrentCount += 1
Return 1
EndIf
Return 2
EndFunc
Func FindTorrentDir(file)
Static T2 = GetUptime()
If Not g_FindTorrTask Then Return 0
If Round(GetUptime() - T2, 0) > 200 Then
WinSetText(" [" & gTorrentCount & "] " & file.FullPath, h_WinFindTorr)
T2 = GetUptime()
Sleep(5)
EndIf
Local sz = FileFind(file.FullPath, "*.*", 1, 0, "TotalSize")
If sz = gTorrentSize Then
gTorrentCount += 1
Return 1
EndIf
Return 2
EndFunc
Func SetTorrentDrives()
Local out, drives, vbs
IniRead drives %COMMANDER_INI% "Autorun" "TorrentDrives" %"gDriveInclude"
vbs = '/c ECHO Wscript.Echo Inputbox("Search on these disks:","Autorun","' & drives & '")>%TEMP%\~auto_0001.vbs'
ProcessExecGetOutput out %COMSPEC% %vbs%
ProcessExecGetOutput /OEM out "cscript.exe" "/nologo ~auto_0001.vbs" %TEMP%
out = StrTrim(out)
If out = "" Then Return
IniWrite %COMMANDER_INI% "Autorun" "TorrentDrives" %out%
Sleep(50)
MsgBox("Ключ сохранен.", "Autorun", 64)
EndFunc
Func TorrentSize(lParam)
Local T1 = GetUptime()
Local obj = Plugin("TCTorrent")
If ERROR <> 0 Then
ShowHint("TCTorrent.wdx plugin error " & ERROR)
Return
Endif
Local size = 0, files = 0
Local aSel = List()
aSel.Text = GetSelectedItems(3, 0)
Local sPath = RequestCopyDataInfo("SP")
Local sName = RequestCopyDataInfo("SN")
Local sFile = sPath & sName
Local lRet = false
If aSel.Count = 0 Then
If Not FileExist(sFile) Then
ShowHint("Файл не существует " & sFile)
lRet = true
ElseIf StrPos(FileGetAttr(sFile), "D") Then
ShowHint("Каталог " & sFile)
lRet = true
Else
obj.FileName = sFile
files = obj.GetValue(1)
size = obj.GetValue(2,0) # size -> bytes
Free(obj)
Endif
EndIf
If lRet Then
Free(obj, aSel)
Return
EndIf
If aSel.Count > 10 Then
ShowHint("Выделено: " & aSel.Count & auCRLF & "Подсчёт времени...")
EndIf
Local j, k = 0, dirs = 0, torrs = 0
If aSel.Count > 0 Then
For j = 0 To aSel.Count - 1
sFile = sPath & aSel[j]
If FileExist(sFile) Then
k += 1
If Not StrPos(FileGetAttr(sFile), "D") Then
obj.FileName = sFile
s = obj.GetValue(2,0)
If s > 0 Then
size += s
files += obj.GetValue(1)
torrs += 1
Endif
Else
dirs += 1
Endif
EndIf
Next
sName = "S/A: " & aSel.Count & "/" & k # Selected / Available
Else
SetHintParam("ShowHint", "Font", 10, "")
ShowHint("" & sName & auCRLF & _
"Размер: " & SizeFormat(size, 1, 'G', 2, 1) & auCRLF & _
"Файлов: " & files)
Sleep(100)
SetHintParam("ShowHint", "Reload")
Free(aSel)
Return
EndIf
Local tl = Round(GetUptime() - T1, 0) / 1000
SetHintParam("ShowHint", "Font", 10, "")
ShowHint((k = aSel.Count ? "" : "Файл " & sName & auCRLF) & _
"Элементов: " & aSel.Count & auCRLF & _
"Обработано: " & torrs & auCRLF & _
"Каталогов: " & dirs & auCRLF & _
"Размер: " & SizeFormat(size, 0, 'M', 2) & auCRLF & _
"Размер: " & SizeFormat(size, 0, 'G', 2) & auCRLF & _
"Размер: " & SizeFormat(size, 0, 'T', 4) & auCRLF & _
"Файлов: " & files & auCRLF & _
"Powered by TCTorrent.wdx" & auCRLF & _
"Время операции: " & StrFormat("%.3f", tl) & " sec")
Sleep(100)
SetHintParam("ShowHint", "Reload")
Free(obj, aSel)
EndFunc |
Теперь все, что касается торрент-файлов вынесено в отдельный модуль. Подключение к основной конфигурации стандартное, т.е. через строку:
Code: | Pragma Include %COMMANDER_PATH%\Scripts\Torrent.aucfg |
После подключения можно раскомментировать "#Pragma IncludeOnce", но это не обязательно. A55555, можете не подключать как отдельный модуль, но удалите весь старый код, связанный с торрентами, включая функцию подсчета. Важно отметить, что я заменил номер функции "TorrentSize" на 70505 (раньше это был 62014). Соответственно, номер в кнопке тоже придется заменить на новый.
Код использует две дополнительные функции от Loopback для масштабирования окна:
Code: | Func GetDPI()
Local DC = DllCall("GetDC", "int", 0)
Local lpy = DllCall("GetDeviceCaps", "handle", DC, "int", 88) # LOGPIXELSX
DllCall("ReleaseDC", "int", 0, "handle", DC)
Return lpy
EndFunc
Func Scale(nValue)
Static dpi = GetDPI()
Return DllCall("MulDiv", "int", nValue, "int", dpi, "int", 96)
EndFunc |
Если эти функции ранее не использовались, необходимо их добавить. Желательно сделать отдельный модуль для хранения этих и других универсальных функций.
Что касается функционала. Добавлена поддержка поиска через утилиту "Everything", теперь поиск происходит мгновенно. Реализовано отдельной кнопкой. Для работы необходимо в настройках утилиты указать, чтобы она индексировала размеры файлов и папок (Сервис->Настройки->Индексирование). Ищет по всем индексированным дискам.
Добавлена возможность сохранения найденных путей в текстовый файл и перехода к найденным данным при нажатии "Нет" в окне результата. Текстовый файл сохраняется с тем же именем, что и торрент-файл рядом с ним. Если стоя на этом текстовом файле выполнить команду с кодои 70501, то первый в этом файле путь откроется в противоположной панели. Для ускорения работы можно создать em_команды и посадить и на горячии клавиши:
Code: | [em_torrent_data_search]
cmd=70500
[em_torrent_data_goto]
cmd=70501 |
Code: |
[Shortcuts]
A+T=em_torrent_data_search
A+P=em_torrent_data_goto |
Также добавлена возможность редактирования дисков при вызове кнопки 70500 с SHIFT. Ключ сохраняется в wincmd.ini:
Code: | [Autorun]
TorrentDrives=e:\;f:\;g:\;i:\;j:\ |
Пока это только костыль, но уже удобнее.
Code: | TOTALCMD#BAR#DATA
70500
%COMMANDER_EXE%
Поиск данных торрет-файла|Shift - Выбор дисков
-1
|
Code: | TOTALCMD#BAR#DATA
70501
%COMMANDER_EXE%
Поиск данных торрет-файла c Everything
-1 |
Code: | TTOTALCMD#BAR#DATA
70502
%COMMANDER_EXE%
Переход к данным из текстового файла
-1 |
В общем, потестируйте пока, а там видно будет где и что улучшить. |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 283 Location: Электросталь
|
(Separately) Posted: Thu Sep 18, 2025 17:00 Post subject: |
|
|
Orion9
https://github.com/yozhic/AkelPad-coders/blob/main/aucfg.coder
Вроде нескромно с такими поделками, да в калашный ряд. С другой стороны, пущай — «дабы дурь каждого видна была». Ну, и так взаимодействовать легче... А с третьей стороны, может GitHub не такой уж и калашный, а так себе, толкучка )) _________________ Amo ergo sum |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 840
|
(Separately) Posted: Thu Sep 18, 2025 20:27 Post subject: |
|
|
yozhik
Круто. Очень круто. Большое вам спасибо. Теперь все последние изменения заиграли новыми красками, включая довольно старые буферные и оконные функции, чего так не хватало.
Без подсветки - как без рук. Думаю, неплохо на официальную страницу плагина добавить ссылки на хайлатеры Autorun. Иначе где еще пользователь может о них узнать, не проводя собственных исследований. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|