| View previous topic :: View next topic |
| Author |
Message |
A55555
Joined: 06 Feb 2011 Posts: 65
|
(Separately) Posted: Sat Sep 20, 2025 00:16 Post subject: |
|
|
| Orion9 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
|
|
Orion9
Спасибо, помогло, окно выбора дисков для поиска на передний план вышло.
| Orion9 wrote: | | Теперь если CapsLock включен, будет автоматический переход. Если выключен, будет прежнее окно с сообщением. Как говорится "Autorun - мечты сбываются". Осталось только кнопки под это дело обновить: |
Спасибо, с автопереходом прям как в мечте, особенно через Everything.
Осталось убрать сообщение перед запуском поиска
 Hidden text
чтоб совсем турборежим при включенном CapsLock повесив выполнение кнопки на клавиши Alt+T (простой) и Alt+P (Everything).
Но режим автоперехода у меня работает и с выключенным и с включенным CapsLock.
При ВКЛюченном CapsLock ищет с предложением сохранить в TXT файл.
При ВЫКЛюченном CapsLock ищет с Автопереходом в конце.
Для того случая когда два объекта находит для одной и той же папки:
- Автопереход + простой поиск - показывается выделенная основная папка (не заходя в неё)
-Автопереход + Everything поиск - показывается результат внутри основной папки (зайдя в неё, перед тобой папка BDMV)
Last edited by A55555 on Sat Sep 20, 2025 01:40; edited 2 times in total |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 908
|
(Separately) Posted: Sat Sep 20, 2025 00:40 Post subject: |
|
|
A55555
Точно не работает CapsLock?
Сделать "тихий" режим можно тем же образом. Поменяйте фрагмент кода с начальным сообщением на новый код с условием If Not :
| Code: | If Not BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) = 0 Then
MsgBox("Поиск данных торрента:" & auCRLF & auCRLF & _
"Имя: " & name & auCRLF & _
"Размер: " & size & auCRLF & _
"Файлов: " & files & auCRLF & auCRLF & _
"Диски поиска: " & gDriveInclude & auCRLF & auCRLF & _
"Продолжить?", "Autorun", 3+32+0)
If EXTENDED <> 6 Then Return
Endif |
Работает? |
|
| Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 310 Location: Электросталь
|
(Separately) Posted: Sat Sep 20, 2025 00:49 Post subject: |
|
|
Loopback
В связи с настройкой подсветки синтаксиса, разъясните, пожалуйста, пару недоумений.
1. Чувствительны к регистру: имена констант, макросов, переменных в плагинах SysInfo и Process. Нечувствительны к регистру: команды условий/циклов/операторов, имена встроенных функций, свойства/методы объектов. Правильно?
2. Чувствительны ли к регистру конструкторы объектов (BinaryFile, List, WMIQuery и т.п.) ?
3. Чувствительны ли к регистру значения параметров <info> в FileGetVersion, <mode> в FinFile?
4. В объектах между методом и скобками допускаются пробелы? Т.е. вот так можно: «obj.Add (Item1, Item2, Item3)» ?
5. В объектах же после точки пробелы допускаются? Т.е. вот так можно: «obj. Clone()» ?
6. В функциях перед скобками допускаются пробелы. Правильно?
7. В параметрах DllCall звёздочка * как указатель на значение после каких имён может быть употреблена? «(ptr|dword)\*», а ещё какие?
Orion9
Я в подсветке ещё кое-чего доделал. А Вы в AkelPad'е AutoComplete'ом пользуетесь? (На всякий случай: это я про окошко, которое появляется пока набираешь, и можно выбрать уже готовый блок: в подсветке все эти автодополнения перечислены в секции Blocks, в самом конце файла.) _________________ Amo ergo sum |
|
| Back to top |
|
 |
A55555
Joined: 06 Feb 2011 Posts: 65
|
(Separately) Posted: Sat Sep 20, 2025 01:37 Post subject: |
|
|
| Orion9 wrote: | A55555
Точно не работает CapsLock? |
У меня клавиатура портативная и гасит лампочку, запутала.
Перепроверил.
При ВКЛюченном CapsLock ищет с предложением сохранить в TXT файл.
При ВЫКЛюченном CapsLock ищет с Автопереходом в конце.
Т.е. с точностью до наоборот.
| Orion9 wrote: |
Сделать "тихий" режим можно тем же образом. Поменяйте фрагмент кода с начальным сообщением на новый код с условием If Not :
 Hidden text | Code: | If Not BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) = 0 Then
MsgBox("Поиск данных торрента:" & auCRLF & auCRLF & _
"Имя: " & name & auCRLF & _
"Размер: " & size & auCRLF & _
"Файлов: " & files & auCRLF & auCRLF & _
"Диски поиска: " & gDriveInclude & auCRLF & auCRLF & _
"Продолжить?", "Autorun", 3+32+0)
If EXTENDED <> 6 Then Return
Endif |
Работает? |
Пушка! Работает!
Через Everything и Alt+P (70501) вообще сказочно. Простым вполне можно чуть подождать, тоже хорошо.
Everything может можно привязать попытку запустить это приложение по указанному пути в свернутом виде при выполнении 70501, перед тем как выскакивает cообщение "окно Everything не найдено". Может и выгружать после поиска, но это уже как-то излишне.
Или привязать это приложение к старту Autorun/TC, чтоб стартовало при запуске свернуто и, если это не целая эпопея, закрывалось вместе с Autorun/TC.
Или может
Last edited by A55555 on Sat Sep 20, 2025 12:55; edited 2 times in total |
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 454
|
(Separately) Posted: Sat Sep 20, 2025 10:10 Post subject: |
|
|
| yozhik wrote: | | Я в подсветке ещё кое-чего доделал |
Скачал весь архив. В mnu у вас и в старых версиях ошибка:
Я ее исправил для себя:
Но хотелось-бы, чтобы вы у себя исправили.
dsl, fea не тестил. |
|
| Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1636
|
(Separately) Posted: Sat Sep 20, 2025 12:36 Post subject: |
|
|
yahuu
Да, есть такое. Эти функции уже начинают напоминать известный мем
| yozhik wrote: | 1. Чувствительны к регистру: имена констант, макросов, переменных в плагинах SysInfo и Process. Нечувствительны к регистру: команды условий/циклов/операторов, имена встроенных функций, свойства/методы объектов. Правильно?
2. Чувствительны ли к регистру конструкторы объектов (BinaryFile, List, WMIQuery и т.п.) ? |
Нет, все имена переменных, макросов, функций (в т. ч. конструкторов), методов и свойств - не зависят от регистра. Без разницы, в основном плагине или субплагинах. Ключевые слова также не зависят.
| yozhik wrote: | | 3. Чувствительны ли к регистру значения параметров <info> в FileGetVersion, <mode> в FinFile? |
Я обычно везде делаю идентификаторы не зависящие от регистра. В тех случаях, когда регистр важен, это указывается в описании к функции. Может где и недоглядел, конечно, но в общем случае так.
Перечисленные функции не исключение.
| yozhik wrote: | | 4. В объектах между методом и скобками допускаются пробелы? Т.е. вот так можно: «obj.Add (Item1, Item2, Item3)» ? |
Допускаются.
| yozhik wrote: | | 5. В объектах же после точки пробелы допускаются? Т.е. вот так можно: «obj. Clone()» ? |
А вот здесь нет, нельзя.
| yozhik wrote: | | 6. В функциях перед скобками допускаются пробелы. Правильно? |
Да.
| yozhik wrote: | | 7. В параметрах DllCall звёздочка * как указатель на значение после каких имён может быть употреблена? «(ptr|dword)\*», а ещё какие? |
Может использоваться с любым типом, кроме str и wstr. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 908
|
(Separately) Posted: Sat Sep 20, 2025 14:06 Post subject: |
|
|
| yozhik wrote: | | Я в подсветке ещё кое-чего доделал. |
Ого! Да там прилично добавилось!
| yozhik wrote: | | А Вы в AkelPad'е AutoComplete'ом пользуетесь? |
Пользуюсь, конечно. Очень удобно, не нужно каждый раз в справку лезть, когда забыл порядок параметров к функции или команде. Я бы и CodeFold чаще использовал, но, к сожалению, он иногда подводит. Функции в функции бывает вкладываются.
 Hidden text | Code: | Func SetMediaInfo()
MediaInfoNum += 1
If MediaInfoNum > 4 Then MediaInfoNum = 1
Switch MediaInfoNum
Case 1
MediaInfoParams = " --Language=file://ru.csv"
Case 2
MediaInfoParams = " --Complete=1 --Language=file://ru.csv"
Case 3
MediaInfoParams = " --Complete=0"
Case 4
MediaInfoParams = " --Output=file://hint.txt"
EndSwitch
ShowHint("Параметры MediaInfo: " & MediaInfoParams, "", "", 1500)
EndFunc
Static MediaInfoMode = 1
Func JoinHint(FileName, FieldIndex, UnitIndex)
...
...
EndFunc |
Вот, вроде не сильно запутанный код, а функция JoinHint вкладывается в SetMediaInfo. Что касается подсветки, сейчас она вообще шикарно выглядит. Я немного подправил значение "AREA" в цветовой схеме и отключил жирный с курсивом в настройках, но все остальное смотрится просто класс. Можно заценить на последнем модуле, я его всё-равно собирался приложить в связи с последними изменениями:
 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"
If Not BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) = 0 Then
MsgBox("Поиск данных торрента:" & auCRLF & auCRLF & _
"Имя: " & name & auCRLF & _
"Размер: " & size & auCRLF & _
"Файлов: " & files & auCRLF & auCRLF & _
"Диски поиска: " & gDriveInclude & auCRLF & auCRLF & _
"Продолжить?", "Autorun", 3+32+0)
If EXTENDED <> 6 Then Return
Endif
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
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
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)
If StrPos(FileGetAttr(Target), "D") Then SendCommand(2002)
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
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
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 |
Все объекты и последние функции, всё подсвечивается.
| A55555 wrote: | | Через Everything и Alt+P (70501) вообще сказочно. |
Согласен. Просто песня. Прошелся сейчас по каталогу "uTorrent\torrents", где у меня хранятся торрент-файлы... аж кайфанул. Не успевашь нажать, как тут же путь к данным открывается на другой панели. Удобно, черт возьми! Вы определенно знали, что хотели, я лишь немного помог воплотить это в жизнь )
Кстати, ALT+P это моя ошибка. Я сначала думал, что не успею втиснуть Everything и использовал эту комбинацию для перехода по пути из текстового файла. Но в последний момент все же добавил Everything, а комбинацию обновить забыл. Как-то не очень очевидно ALT+P для Everything, но это легко поменять.
А касаемо старта, это тоже легко. Проще всего сделать команду, к примеру:
| Code: | [em_everything]
cmd=%COMMANDER_PATH%\Soft\Everything.exe
param=-startup |
И теперь эту команду можно хоть в кнопку, хоть в хоткей, хоть в автозагрузку ставить. Я обычно не держу эту утилиту у себя в фоне, поэтому вызываю ее из меню при необходимости.
| A55555 wrote: | -Автопереход + Everything поиск - показывается результат внутри основной папки (зайдя в неё, перед тобой папка BDMV)
|
Так возвращает результат Everything, с этим ничего не пожелаешь, если только дополнительно его не обрабатывать. Но вы не заморачивайтесь этим. Как я писал, пустые каталоги нужно видеть, потому что в них может быть ошибка. Если создать 5 каталогов внутри друг друга и положить в последний несколько файлов, то все пять каталогов будут одного размера. В этой структуре нельзя заранее определить какой именно каталог можно отнести к торрент-файлу. Важно, что все каталоги находятся, и вы сами должны принять решение, какой из них нужно ставить на раздачу. |
|
| Back to top |
|
 |
A55555
Joined: 06 Feb 2011 Posts: 65
|
(Separately) Posted: Sun Sep 21, 2025 00:38 Post subject: |
|
|
| Orion9 wrote: | А касаемо старта, это тоже легко. Проще всего сделать команду, к примеру:
| Code: | [em_everything]
cmd=%COMMANDER_PATH%\Soft\Everything.exe
param=-startup |
И теперь эту команду можно хоть в кнопку, хоть в хоткей, хоть в автозагрузку ставить. Я обычно не держу эту утилиту у себя в фоне, поэтому вызываю ее из меню при необходимости. |
Orion9
Спасибо. Поставил запуск этой программы в ваш код Torrent.aucfg
| Code: | CommandExec em_everything |
Теперь не нужно вручную запускать Everything.exe и свернуто сразу в трей.
Но не смог понять, есть ли такое место в коде, чтоб по-хитрому указать этот запуск.
Когда пользуюсь обычным поиском, то чтоб эта команда не выполнялась, когда через Everything_поиск выполнялась команда запуска?
Last edited by A55555 on Sun Sep 21, 2025 01:08; edited 1 time in total |
|
| Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 310 Location: Электросталь
|
(Separately) Posted: Sun Sep 21, 2025 00:49 Post subject: |
|
|
AkulaBig
Ух, да, точно — это я в mnu забыл про свои пользовательские переменные. Заменил их на стандартные. Спасибо.
Loopback
Спасибо!!
| Loopback wrote: | | В тех случаях, когда регистр важен, это указывается в описании к функции. Может где и недоглядел |
Нет, всё там у Вас на месте, недоглядов нету. Это я для пущей уверенности спросил.
---
В общем, в подсветке по последним замечаниям всё поправил, кое-чего добавил, пару косяков выправил. Обновляйтесь, пожалуйста. Дальше будем поглядывать, может ещё что проявится.
Добавлено спустя 48 минут:
Orion9
CodeFold вроде починил (только что, чуть не забыл про него). Пример Ваш (спасибо за него) теперь корректно обрабатывается, но буду ещё присматриваться. _________________ Amo ergo sum |
|
| Back to top |
|
 |
A55555
Joined: 06 Feb 2011 Posts: 65
|
(Separately) Posted: Sun Sep 21, 2025 01:58 Post subject: |
|
|
Loopback
подскажите пожалуйста, что не так с этой записью, Everything не закрывается
| Code: | # After this line all actions are performed when TC closing
# После этой строки все действия выполняются при закрытии TC
Pragma AutorunFinalizeSection
If ProcessExist /F '%commander_path%\Everything.exe' Then
ProcessTerminate /F /TT /A /W '%commander_path%\Everything.exe'
EndIf |
Так тоже не сработало
| Code: | Pragma AutorunFinalizeSection
ShellExec %commander_path%\everything.exe -exit |
|
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 454
|
(Separately) Posted: Sun Sep 21, 2025 11:43 Post subject: |
|
|
| A55555 wrote: | | Так тоже не сработало |
| Code: | # After this line all actions are performed when TC closing
Pragma AutorunFinalizeSection
ShellExec(COMMANDER_PATH & "\Utils\Everything\Everything.exe", "-exit") |
|
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 908
|
(Separately) Posted: Sun Sep 21, 2025 13:33 Post subject: |
|
|
| A55555 wrote: | | Но не смог понять, есть ли такое место в коде, чтоб по-хитрому указать этот запуск. |
Да, есть такое место. Правда не знаю, будет ли это удобно, но можете попробовать.
Кнопки две, но функция вызывается одна, только с разными параметрами:
| Code: | RegisterCommand 70500 "TorrentFindData" 0
RegisterCommand 70501 "TorrentFindData" 1 |
Параметр "1" означает, что вход со второй кнопки. Этот код передается переменной bEverything:
| Code: | Local bEverything = nMode |
Теперь если bEverything = 1 (или логическое "true"), то в функции можно предусматривать код, который будет выполняться только для ветки с Everything. Т.е. можно сделать так:
| Code: | If bEverything Then CommandExec em_everything |
Эту строку можно вставить сразу после Local bEverything = nMode или дальше по коду, например после сообщения с подтверждением о поиске. Но вероятно потребуются дополнительные проверки, запущена Everything или нет, чтобы не выполнять команду запуска каждый раз.
Кстати, для выхода можете сделать еще одну команду и вызывать ее, когда нужно:
| Code: | [em_everything_exit]
cmd=%COMMANDER_PATH%\Soft\Everything.exe
param=-exit |
| yozhik wrote: | | В общем, в подсветке по последним замечаниям всё поправил, кое-чего добавил, пару косяков выправил. Обновляйтесь, пожалуйста. |
Вот это я понимаю Commits так Commits, не то, что у ленивого финна (думаю, вы поняли о чем речь).
Если бы я знал, что вы так серьезно возьметесь за дело, я бы более тщательно подошел к этому вопросу, поскольку у меня накопилось немало кода на Autorun, который стоит проверить на вашем хайлайтере. Но первые впечатления очень приятные. CodeFold вроде работает, про подсветку я уже писал. Теперь остается только внимательно всё пройти, изучить и зафиксировать. Со временем так и сделаю.
Это, конечно, не имеет отношения к топику, но можно ли в хайлайтере к бар-файлам сделать, чтобы индексы иконок отдельно подсвечивались, а команды выделялись другим цветом, т.е. отличным от имени ключа? Иначе такая запись сливается в одну строку:
Индекс 220:
| Code: | button8=%COMMANDER_PATH%\Wcmicons.dll,220 |
Loopback
Чтобы не затерялось. У вас нет планов добавить к плагину TCTorrent возможность возврата списка содержимого торрент-файлов через wdx-поле? Можно через указатель на буфер сделать, или еще что-то придумаете. Хотелось бы через Autorun вытягивать такой списочек. И кстати, не срочно. В ближайший месяц-два все-равно больше не смогу такими ударными темпами развивать функционал, хотя идея находить недокаченные раздачи довольно заманчива. |
|
| Back to top |
|
 |
A55555
Joined: 06 Feb 2011 Posts: 65
|
(Separately) Posted: Sun Sep 21, 2025 23:02 Post subject: |
|
|
| AkulaBig wrote: | | A55555 wrote: | | Так тоже не сработало |
| Code: | # After this line all actions are performed when TC closing
Pragma AutorunFinalizeSection
ShellExec(COMMANDER_PATH & "\Utils\Everything\Everything.exe", "-exit") |
|
AkulaBig
Спасибо.
Но тоже не получается выгрузить. Путь на свой я менял.
И командой
| Orion9 wrote: | Кстати, для выхода можете сделать еще одну команду и вызывать ее, когда нужно:
| Code: | [em_everything_exit]
cmd=%COMMANDER_PATH%\Soft\Everything.exe
param=-exit |
|
тоже не хочет выгружаться.
Но через горячие клавиши для em_everything_exit, например Ctrl+Alt+Q срабатывает.
Ставлю после
| Code: | # After this line all actions are performed when TC closing
Pragma AutorunFinalizeSection
CommandExec em_everything_exit |
не закрывает.
| Orion9 wrote: | Да, есть такое место. Правда не знаю, будет ли это удобно, но можете попробовать.
Кнопки две, но функция вызывается одна, только с разными параметрами:
| Code: | RegisterCommand 70500 "TorrentFindData" 0
RegisterCommand 70501 "TorrentFindData" 1 |
Параметр "1" означает, что вход со второй кнопки. Этот код передается переменной bEverything:
| Code: | Local bEverything = nMode |
Теперь если bEverything = 1 (или логическое "true"), то в функции можно предусматривать код, который будет выполняться только для ветки с Everything. Т.е. можно сделать так:
| Code: | If bEverything Then CommandExec em_everything |
Эту строку можно вставить сразу после Local bEverything = nMode или дальше по коду, например после сообщения с подтверждением о поиске. Но вероятно потребуются дополнительные проверки, запущена Everything или нет, чтобы не выполнять команду запуска каждый раз. |
Orion9
Спасибо, работает.
В настройках самой Everything галочка на опции "разрешить несколько копий программы" снята и вроде всё нормально.
Команду для выгрузки Everything
| Code: | CommandExec em_everything_exit |
поставил в Torrent.aucfg в конец кода функции
| Code: | Func TorrentFindData(lParam, nMode) |
но как и другие способы выгрузки Everything не срабатывает, но и не мешает ничего не ломает.
Пробовал и в сам Autorun.cfg
| Code: | # После этой строки все действия выполняются при закрытии TC
Pragma AutorunFinalizeSection
CommandExec em_everything_exit |
не получается.
| Orion9 wrote: | | В ближайший месяц-два все-равно больше не смогу такими ударными темпами развивать функционал, хотя идея находить недокаченные раздачи довольно заманчива. |
Спасибо. Уже очень хорошо, но буду надеяться на продолжение по недокачанным.
Last edited by A55555 on Mon Sep 22, 2025 00:48; edited 2 times in total |
|
| Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1636
|
(Separately) Posted: Sun Sep 21, 2025 23:42 Post subject: |
|
|
| A55555 wrote: | | Так тоже не сработало |
В общем-то это и есть правильный вариант. У меня так срабатывает. Так что вряд ли тут Autorun при делах.
Могу только добавить, что если процесс everything запущен от имени администратора, а тотал от пользователя, то ProcessTerminate, естественно, не сработает. Но вариант с -exit в этом случае должен открыть диалог повышения привилегий, и если согласиться, то everything успешно закрывается.
| Orion9 wrote: | | У вас нет планов добавить к плагину TCTorrent возможность возврата списка содержимого торрент-файлов через wdx-поле? |
Интересно, с чего бы им вдруг быть?
Но это скорее всего не получится даже чисто технически. Чтобы уместить большой список нужно передавать плагину большой буфер, чтобы в него этот список мог уместиться. А тотал (и соответственно Autorun) предоставляет буфер размером 4096 байт, т. е. всего 2 Кб для юникодной строки.
И даже если бы это было возможно, непросто найти объяснение целесообразности вывода в одно поле списка файлов (потенциально огромного) для обычного пользователя. А TCTorrent, как и TCMediaInfo, предполагался простым и понятным обычному пользователю. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 908
|
(Separately) Posted: Mon Sep 22, 2025 00:41 Post subject: |
|
|
| A55555 wrote: | | Но через горячие клавиши для em_everything_exit, например Alt+Ctrl+Q срабатывает. |
Да, похоже только в секции финализации не срабатывает. У меня не было времени проверить в кнопке, но если вставить в командную строку TC и выполнить em_everything_exit, то Everything выгружается хоть от Администратора была запущена, хоть от простого пользователя.
| A55555 wrote: | | поставил в Torrent.aucfg в конец кода функции |
Тогда тоже используйте условие If bEverything, но лучше в секцию финализации такое вставлять. Может Loopback найдет в чем причина несрабатывания.
| Loopback wrote: | | Интересно, с чего бы им вдруг быть? |
Просто на предыдущей странице я писал:
 Hidden text Сейчас код опирается на плагин TCTorrent (превосходный плагин от Loopback), но wdx-часть плагина не выдает список содержимого торрента, только wlx-часть. Может, автор сделает какой-нибудь недокументированный вызов к библиотеке для получения такого списка? Тогда можно будет подумать
| Loopback wrote: | | И даже если бы это было возможно, непросто найти объяснение целесообразности вывода в одно поле списка файлов (потенциально огромного) для обычного пользователя. |
Об этом речи не было. Изначально речь шла о недокументированном вызове функции напрямую из библиотеки, либо, если делать wdx-поле, то передавать в это поле адрес буфера со списком и размер этого буфера (размер можно и во второе поле, например). В Autorun принимать этот буфер через BaseAddress:
| Code: | obj = Buffer(<InitialSize>[, <BaseAddress>]) |
|
|
| 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
|