View previous topic :: View next topic |
Author |
Message |
Loopback
Joined: 07 Sep 2009 Posts: 1614
|
(Separately) Posted: Tue Sep 16, 2025 22:59 Post subject: |
|
|
yozhik wrote: | Такое ощущение, что мой конфиг стал быстрее обрабатываться. |
Было бы здорово, но вряд ли Не думаю, что произведённые изменения могут дать хоть сколько-нибудь заметное ускорение, пока это в основном изменение структуры кода. |
|
Back to top |
|
 |
A55555
Joined: 06 Feb 2011 Posts: 49
|
(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: 860
|
(Separately) Posted: Wed Sep 17, 2025 00:24 Post subject: |
|
|
A55555
Функционал будет развиваться со временем, всего сразу не сделаешь. Над новыми фишками надо будет еще подумать. Пока этот только тестовая версия, но она рабочая, что радует. Пути из окна сообщения в данный момент можно просто копировать по CTRL+C и вставлять в заголовок панели для перехода. Надеюсь, эта кнопка поможет вам найти все данные и поставить их на раздачу ) |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 443
|
(Separately) Posted: Wed Sep 17, 2025 21:37 Post subject: |
|
|
Loopback
Почему-то я считал, что для работы с инишниками у нас полный набор инструментов. А оказывается переименование ключа нет. Конечно через List() я уже умею править инишники. Но хотелось-бы иметь прямой инструмент IniRenameKey. Есть-ли такое в планах? |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1614
|
(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: 443
|
(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: 49
|
(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: 860
|
(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: 288 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: 860
|
(Separately) Posted: Thu Sep 18, 2025 20:27 Post subject: |
|
|
yozhik
Круто. Очень круто. Большое вам спасибо. Теперь все последние изменения заиграли новыми красками, включая довольно старые буферные и оконные функции, чего так не хватало.
Без подсветки - как без рук. Думаю, неплохо на официальную страницу плагина добавить ссылки на хайлатеры Autorun. Иначе где еще пользователь может о них узнать, не проводя собственных исследований. |
|
Back to top |
|
 |
A55555
Joined: 06 Feb 2011 Posts: 49
|
(Separately) Posted: Fri Sep 19, 2025 00:37 Post subject: |
|
|
Orion9 wrote: | Теперь все, что касается торрент-файлов вынесено в отдельный модуль. Подключение к основной конфигурации стандартное, т.е. через строку:
Code: | Pragma Include %COMMANDER_PATH%\Scripts\Torrent.aucfg |
|
С этим я не знаю куда его, тем не менее всё заработало.
Orion9 wrote: | Также добавлена возможность редактирования дисков при вызове кнопки 70500 с SHIFT. Ключ сохраняется в wincmd.ini:
Code: | [Autorun]
TorrentDrives=e:\;f:\;g:\;i:\;j:\ |
|
Работает, но окно не выходит на передний план при своем появлении.
 Hidden text
Orion9 wrote: | Добавлена поддержка поиска через утилиту "Everything", теперь поиск происходит мгновенно. Реализовано отдельной кнопкой. Для работы необходимо в настройках утилиты указать, чтобы она индексировала размеры файлов и папок (Сервис->Настройки->Индексирование). Ищет по всем индексированным дискам. |
Работает быстро, но получается эта программа всегда должна быть запущена?
Иначе пишет, что окно программы Everything не найдено.
Этот момент остался.
Quote: | Eсли папка BDMV одна внутри главной папки BDRemux
Code: | E:\Torrent\Страна садов 2004 [GARDEN_STATE_2004_BDREMUX_HDCLUB]\BDMV\ |
Находит как два объекта.
 Hidden text |
При нажатии "НЕТ" в окне с предложением сохранить в TXT, переход на противоположной панели происходить по 2му более длинному пути.
Не полностью скачанные по-прежнему, если я правильно понимаю, ни первым, ни вторым способом не находит.
Если это будет возможно, добавьте пожалуйста вариант поиска в чистом виде, если нашло просто на противоположной панели курсор установлен на найденной папке/файле не заходя в папку без дополнительных сообщений и запросов. (не найдено, сообщение "Ничего не найдено"). |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 860
|
(Separately) Posted: Fri Sep 19, 2025 13:56 Post subject: |
|
|
A55555 wrote: | С этим я не знаю куда его, тем не менее всё заработало. |
Со временем кода становится много и хранить его весь в файле autorun.cfg становится не удобно. Тогда код разделяется на логические блоки и сохраняется в разные файлы. Далее эти файлы подключаются к основой конфигурации директивой Pragma Include с указанием пути к файлу, но вам не стоит пока забивать этим голову.
A55555 wrote: | Работает, но окно не выходит на передний план при своем появлении. |
Поэтому я и написал, что это костыль. В Autorun нет легкого способа работать с графическим интерфейсом, поэтому приходится вызывать vbs-скрипт из autorun-скрипта. Попробуйте заменить функцию SetTorrentDrives() на новый блок, должно помочь:
 Hidden text Code: | Global gVbsInputBox
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%
gVbsInputBox = 1
RunThread("WinVbsInputBoxActivate")
ProcessExecGetOutput /OEM out "cscript.exe" "/nologo ~auto_0001.vbs" %TEMP%
gVbsInputBox = 0
out = StrTrim(out)
If out = "" Then Return
IniWrite %COMMANDER_INI% "Autorun" "TorrentDrives" %out%
Sleep(50)
MsgBox("Ключ сохранен.", "Autorun", 64)
EndFunc
Func WinVbsInputBoxActivate()
Local hVbs
While gVbsInputBox
hVbs = WinFind(0, "#32770", "Autorun")
If hVbs > 0 Then
WinSetState(23, hVbs)
Break
EndIf
Sleep(50)
Wend
EndFunc
|
A55555 wrote: | Работает быстро, но получается эта программа всегда должна быть запущена? |
Получается, так. Можно запускать Everything только на время поиска торрент-данных, если вы не пользуетесь этой утилитой, но поиск без Everything тоже быстро работает, особенно если не искать на разделах, где стоит операционная система.
A55555 wrote: | Этот момент остался. |
Я пока не решил, что с этим делать. На мой взгляд, неправильно скрывать избыточную вложенность каталогов. Вы сами, например, по неосторожности можете поместить раздачу в пустой каталог или раздающие могут допустить эту оплошность. Нельзя с уверенностью сказать, какой уровень вложенности считается легитимным для конкретного торрент-файла только по его размеру. Отфильтровать, конечно, можно. Но нужен дополнительный алгоритм, хотя стоит ли он того, пока не ясно. В окне сообщения сейчас видно, что это одна раздача. Пользователь только должен принять решение, какой уровень каталога считается правильным для работы в клиенте.
A55555 wrote: | При нажатии "НЕТ" в окне с предложением сохранить в TXT, переход на противоположной панели происходить по 2му более длинному пути. |
На самом деле переход происходит по первому пути, просто этот путь открывается в противоположной панели и становится текущим. Насколько мне известно, в ТС нет специальной команды для выделения каталога в противоположной панели установкой на него фокуса или курсора. Если такая команда есть, то поправьте меня (обращение ко всем).
A55555 wrote: | Не полностью скачанные по-прежнему, если я правильно понимаю, ни первым, ни вторым способом не находит. |
Да, я об этом писал. Недокаченные раздачи так находиться не будут. Здесь нужен более глубокий анализ содержимого торрент-файла и более продвинутый алгоритм для сверки данных на диске. Сейчас код опирается на плагин TCTorrent (превосходный плагин от Loopback), но wdx-часть плагина не выдает список содержимого торрента, только wlx-часть. Может, автор сделает какой-нибудь недокументированный вызов к библиотеке для получения такого списка? Тогда можно будет подумать. А так, есть еще вариант с консольной утилитой torrentcheck, но тогда с бубном чуть выше прыгать придется.
A55555 wrote: | Если это будет возможно, добавьте пожалуйста вариант поиска в чистом виде, если нашло просто на противоположной панели курсор установлен на найденной папке/файле не заходя в папку без дополнительных сообщений и запросов. |
А если будут дубликаты? Во время я тестов специально копировал данные на несколько дисков, чтобы посмотреть, как они будут находиться. Нельзя полностью скидывать со счетов, что могут найтись дубликаты, а значит, нужно их видеть и знать, что они существуют. Но я понял, что вы имеете в виду. Да, можно сделать для этого отдельный режим, который будет вызываться либо по CTRL, либо отдельной командой. К сожалению, сейчас уже не успеваю это сделать, но взял на заметку для будущих версий. |
|
Back to top |
|
 |
yahuu
Joined: 22 Jun 2023 Posts: 36
|
(Separately) Posted: Fri Sep 19, 2025 15:46 Post subject: |
|
|
Code: |
msgbox(Date('yyyy-MM-dd',now() + 864000000000))
|
wdx_autorun_2.2.19_beta -- 2025-09-20
wdx_autorun_2.2.20_beta -- 2025-09-19 |
|
Back to top |
|
 |
A55555
Joined: 06 Feb 2011 Posts: 49
|
(Separately) Posted: Fri Sep 19, 2025 16:08 Post subject: |
|
|
Orion9 wrote: | На самом деле переход происходит по первому пути, просто этот путь открывается в противоположной панели и становится текущим. Насколько мне известно, в ТС нет специальной команды для выделения каталога в противоположной панели установкой на него фокуса или курсора. Если такая команда есть, то поправьте меня (обращение ко всем). |
Orion9
Заходит внутрь найденной папки и один шаг вверх по дереву каталога.
Может такая функция есть в TC. Опять же, если даже такой костыль реален, будет ли курсор стоять на этой папке после этого маневра. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 860
|
(Separately) Posted: Fri Sep 19, 2025 19:19 Post subject: |
|
|
A55555 wrote: | Заходит внутрь найденной папки и один шаг вверх по дереву каталога. |
Вы абсолютно правы. Почему-то эта мысль не пришла ко мне сразу. Видимо, мысли уже другим заняты. Замените функцию GoToPathFromMsg, тут всего одна строчка добавилась:
 Hidden text Code: | Func GoToPathFromMsg(Target)
If FileExist(Target) Then
If RequestInfo(1000) = 2 Then
CommandExec /CD %'Target'
Else
CommandExec /CD '' %'Target'
Endif
SendCommand(4006)
If StrPos(FileGetAttr(Target), "D") Then SendCommand(2002)
Else
ShowHint("Путь не существует " & Target)
EndIf
EndFunc |
Работает действительно лучше. На крайний случай можно опцию потом добавить, переходить или не переходить внутрь каталога.
А теперь жирный бонус. Сделал автопереход к данным при включеном CapsLock. Поменяйте старый фрагмент кода на новый:
 Старый Code: |
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 |
 Новый Code: |
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 |
Теперь если CapsLock включен, будет автоматический переход. Если выключен, будет прежнее окно с сообщением. Как говорится "Autorun - мечты сбываются". Осталось только кнопки под это дело обновить:
 Hidden text TOTALCMD#BAR#DATA
70500
%COMMANDER_EXE%
Поиск данных торрент-файла|Shift - Выбор дисков для поиска|CapsLock - Автопереход к найденому
-1
 Hidden text TOTALCMD#BAR#DATA
70501
%COMMANDER_EXE%
Поиск торрент-данных c Everything|CapsLock - Автопереход к найденому
-1 |
|
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
|