Страница 205 из 243

Добавлено: Пт сен 19, 2025 23:16
A55555
Orion9 писал(а):В Autorun нет легкого способа работать с графическим интерфейсом, поэтому приходится вызывать vbs-скрипт из autorun-скрипта. Попробуйте заменить функцию SetTorrentDrives() на новый блок, должно помочь:
[cut]

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

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
[/cut]
Orion9
Спасибо, помогло, окно выбора дисков для поиска на передний план вышло.
Orion9 писал(а):Теперь если CapsLock включен, будет автоматический переход. Если выключен, будет прежнее окно с сообщением. Как говорится "Autorun - мечты сбываются". Осталось только кнопки под это дело обновить:
Спасибо, с автопереходом прям как в мечте, особенно через Everything.
Осталось убрать сообщение перед запуском поиска
[cut]Изображение[/cut]
чтоб совсем турборежим при включенном CapsLock повесив выполнение кнопки на клавиши Alt+T (простой) и Alt+P (Everything).


[s]Но режим автоперехода у меня работает и с выключенным и с включенным CapsLock.[/s]
При ВКЛюченном CapsLock ищет с предложением сохранить в TXT файл.
При ВЫКЛюченном CapsLock ищет с Автопереходом в конце.

Для того случая когда два объекта находит для одной и той же папки:
- Автопереход + простой поиск - показывается выделенная основная папка (не заходя в неё)

-Автопереход + Everything поиск - показывается результат внутри основной папки (зайдя в неё, перед тобой папка BDMV)

Добавлено: Пт сен 19, 2025 23:40
Orion9
A55555
Точно не работает CapsLock?

Сделать "тихий" режим можно тем же образом. Поменяйте фрагмент кода с начальным сообщением на новый код с условием If Not :

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

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
Работает?

Добавлено: Пт сен 19, 2025 23:49
yozhik
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, в самом конце файла.)

Добавлено: Сб сен 20, 2025 00:37
A55555
Orion9 писал(а):A55555
Точно не работает CapsLock?
У меня клавиатура портативная и гасит лампочку, запутала.

Перепроверил.
При ВКЛюченном CapsLock ищет с предложением сохранить в TXT файл.
При ВЫКЛюченном CapsLock ищет с Автопереходом в конце.
Т.е. с точностью до наоборот.
Orion9 писал(а): Сделать "тихий" режим можно тем же образом. Поменяйте фрагмент кода с начальным сообщением на новый код с условием If Not :
[cut]

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

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
[/cut]
Работает?
Пушка! Работает!
Через Everything и Alt+P (70501) вообще сказочно. Простым вполне можно чуть подождать, тоже хорошо.

Everything может можно привязать попытку запустить это приложение по указанному пути в свернутом виде при выполнении 70501, перед тем как выскакивает cообщение "окно Everything не найдено". Может и выгружать после поиска, но это уже как-то излишне.
Или привязать это приложение к старту Autorun/TC, чтоб стартовало при запуске свернуто и, если это не целая эпопея, закрывалось вместе с Autorun/TC.
Или может

Добавлено: Сб сен 20, 2025 09:10
AkulaBig
yozhik писал(а):Я в подсветке ещё кое-чего доделал
Скачал весь архив. В mnu у вас и в старых версиях ошибка:
Изображение
Я ее исправил для себя:
Изображение
Но хотелось-бы, чтобы вы у себя исправили.
dsl, fea не тестил.

Добавлено: Сб сен 20, 2025 11:36
Loopback
yahuu

Да, есть такое. Эти функции уже начинают напоминать известный мем :?
yozhik писал(а):1. Чувствительны к регистру: имена констант, макросов, переменных в плагинах SysInfo и Process. Нечувствительны к регистру: команды условий/циклов/операторов, имена встроенных функций, свойства/методы объектов. Правильно?

2. Чувствительны ли к регистру конструкторы объектов (BinaryFile, List, WMIQuery и т.п.) ?
Нет, все имена переменных, макросов, функций (в т. ч. конструкторов), методов и свойств - не зависят от регистра. Без разницы, в основном плагине или субплагинах. Ключевые слова также не зависят.

yozhik писал(а):3. Чувствительны ли к регистру значения параметров <info> в FileGetVersion, <mode> в FinFile?
Я обычно везде делаю идентификаторы не зависящие от регистра. В тех случаях, когда регистр важен, это указывается в описании к функции. Может где и недоглядел, конечно, но в общем случае так.

Перечисленные функции не исключение.
yozhik писал(а):4. В объектах между методом и скобками допускаются пробелы? Т.е. вот так можно: «obj.Add (Item1, Item2, Item3)» ?
Допускаются.
yozhik писал(а):5. В объектах же после точки пробелы допускаются? Т.е. вот так можно: «obj. Clone()» ?
А вот здесь нет, нельзя.
yozhik писал(а):6. В функциях перед скобками допускаются пробелы. Правильно?
Да.
yozhik писал(а):7. В параметрах DllCall звёздочка * как указатель на значение после каких имён может быть употреблена? «(ptr|dword)\*», а ещё какие?
Может использоваться с любым типом, кроме str и wstr.

Добавлено: Сб сен 20, 2025 13:06
Orion9
yozhik писал(а):Я в подсветке ещё кое-чего доделал.
Ого! Да там прилично добавилось!
yozhik писал(а):А Вы в AkelPad'е AutoComplete'ом пользуетесь?
Пользуюсь, конечно. Очень удобно, не нужно каждый раз в справку лезть, когда забыл порядок параметров к функции или команде. Я бы и CodeFold чаще использовал, но, к сожалению, он иногда подводит. Функции в функции бывает вкладываются.
[cut]

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

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
[/cut]
Вот, вроде не сильно запутанный код, а функция JoinHint вкладывается в SetMediaInfo. Что касается подсветки, сейчас она вообще шикарно выглядит. Я немного подправил значение "AREA" в цветовой схеме и отключил жирный с курсивом в настройках, но все остальное смотрится просто класс. Можно заценить на последнем модуле, я его всё-равно собирался приложить в связи с последними изменениями:
[cut="Torrent.aucfg"]

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

#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
[/cut]
Все объекты и последние функции, всё подсвечивается.
A55555 писал(а):Через Everything и Alt+P (70501) вообще сказочно.
Согласен. Просто песня. Прошелся сейчас по каталогу "uTorrent\torrents", где у меня хранятся торрент-файлы... аж кайфанул. Не успевашь нажать, как тут же путь к данным открывается на другой панели. Удобно, черт возьми! Вы определенно знали, что хотели, я лишь немного помог воплотить это в жизнь )
Кстати, ALT+P это моя ошибка. Я сначала думал, что не успею втиснуть Everything и использовал эту комбинацию для перехода по пути из текстового файла. Но в последний момент все же добавил Everything, а комбинацию обновить забыл. Как-то не очень очевидно ALT+P для Everything, но это легко поменять.
А касаемо старта, это тоже легко. Проще всего сделать команду, к примеру:

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

[em_everything]
cmd=%COMMANDER_PATH%\Soft\Everything.exe
param=-startup
И теперь эту команду можно хоть в кнопку, хоть в хоткей, хоть в автозагрузку ставить. Я обычно не держу эту утилиту у себя в фоне, поэтому вызываю ее из меню при необходимости.
A55555 писал(а):-Автопереход + Everything поиск - показывается результат внутри основной папки (зайдя в неё, перед тобой папка BDMV)
Так возвращает результат Everything, с этим ничего не пожелаешь, если только дополнительно его не обрабатывать. Но вы не заморачивайтесь этим. Как я писал, пустые каталоги нужно видеть, потому что в них может быть ошибка. Если создать 5 каталогов внутри друг друга и положить в последний несколько файлов, то все пять каталогов будут одного размера. В этой структуре нельзя заранее определить какой именно каталог можно отнести к торрент-файлу. Важно, что все каталоги находятся, и вы сами должны принять решение, какой из них нужно ставить на раздачу.

Добавлено: Сб сен 20, 2025 23:38
A55555
Orion9 писал(а):А касаемо старта, это тоже легко. Проще всего сделать команду, к примеру:

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

[em_everything]
cmd=%COMMANDER_PATH%\Soft\Everything.exe
param=-startup
И теперь эту команду можно хоть в кнопку, хоть в хоткей, хоть в автозагрузку ставить. Я обычно не держу эту утилиту у себя в фоне, поэтому вызываю ее из меню при необходимости.
Orion9
Спасибо. Поставил запуск этой программы в ваш код Torrent.aucfg

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

CommandExec em_everything
Теперь не нужно вручную запускать Everything.exe и свернуто сразу в трей.

Но не смог понять, есть ли такое место в коде, чтоб по-хитрому указать этот запуск.
Когда пользуюсь обычным поиском, то чтоб эта команда не выполнялась, когда через Everything_поиск выполнялась команда запуска?

Добавлено: Вс сен 21, 2025 00:37
yozhik
AkulaBig
Ух, да, точно — это я в mnu забыл про свои пользовательские переменные. Заменил их на стандартные. Спасибо.

Loopback
Спасибо!!
Loopback писал(а):В тех случаях, когда регистр важен, это указывается в описании к функции. Может где и недоглядел
Нет, всё там у Вас на месте, недоглядов нету. Это я для пущей уверенности спросил.

---

В общем, в подсветке по последним замечаниям всё поправил, кое-чего добавил, пару косяков выправил. Обновляйтесь, пожалуйста. Дальше будем поглядывать, может ещё что проявится.

Добавлено спустя 48 минут:

Orion9
CodeFold вроде починил (только что, чуть не забыл про него). Пример Ваш (спасибо за него) теперь корректно обрабатывается, но буду ещё присматриваться.

Добавлено: Вс сен 21, 2025 00:58
A55555
Loopback
подскажите пожалуйста, что не так с этой записью, Everything не закрывается

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

# 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
Так тоже не сработало :(

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

Pragma AutorunFinalizeSection
ShellExec %commander_path%\everything.exe -exit

Добавлено: Вс сен 21, 2025 10:43
AkulaBig
A55555 писал(а):Так тоже не сработало

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

# After this line all actions are performed when TC closing
Pragma AutorunFinalizeSection
ShellExec(COMMANDER_PATH & "\Utils\Everything\Everything.exe", "-exit")

Добавлено: Вс сен 21, 2025 12:33
Orion9
A55555 писал(а):Но не смог понять, есть ли такое место в коде, чтоб по-хитрому указать этот запуск.
Да, есть такое место. Правда не знаю, будет ли это удобно, но можете попробовать.

Кнопки две, но функция вызывается одна, только с разными параметрами:

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

RegisterCommand 70500 "TorrentFindData" 0
RegisterCommand 70501 "TorrentFindData" 1
Параметр "1" означает, что вход со второй кнопки. Этот код передается переменной bEverything:

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

Local bEverything = nMode
Теперь если bEverything = 1 (или логическое "true"), то в функции можно предусматривать код, который будет выполняться только для ветки с Everything. Т.е. можно сделать так:

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

If bEverything Then CommandExec em_everything
Эту строку можно вставить сразу после Local bEverything = nMode или дальше по коду, например после сообщения с подтверждением о поиске. Но вероятно потребуются дополнительные проверки, запущена Everything или нет, чтобы не выполнять команду запуска каждый раз.

Кстати, для выхода можете сделать еще одну команду и вызывать ее, когда нужно:

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

[em_everything_exit]
cmd=%COMMANDER_PATH%\Soft\Everything.exe
param=-exit
yozhik писал(а):В общем, в подсветке по последним замечаниям всё поправил, кое-чего добавил, пару косяков выправил. Обновляйтесь, пожалуйста.
Вот это я понимаю Commits так Commits, не то, что у ленивого финна (думаю, вы поняли о чем речь).

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

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

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

cmd8=em_everything
Индекс 220:

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

button8=%COMMANDER_PATH%\Wcmicons.dll,220
Loopback
Чтобы не затерялось. У вас нет планов добавить к плагину TCTorrent возможность возврата списка содержимого торрент-файлов через wdx-поле? Можно через указатель на буфер сделать, или еще что-то придумаете. Хотелось бы через Autorun вытягивать такой списочек. И кстати, не срочно. В ближайший месяц-два все-равно больше не смогу такими ударными темпами развивать функционал, хотя идея находить недокаченные раздачи довольно заманчива.

Добавлено: Вс сен 21, 2025 22:02
A55555
AkulaBig писал(а):
A55555 писал(а):Так тоже не сработало

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

# After this line all actions are performed when TC closing
Pragma AutorunFinalizeSection
ShellExec(COMMANDER_PATH & "\Utils\Everything\Everything.exe", "-exit")
AkulaBig
Спасибо.
Но тоже не получается выгрузить. Путь на свой я менял.
И командой
Orion9 писал(а):Кстати, для выхода можете сделать еще одну команду и вызывать ее, когда нужно:

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

[em_everything_exit]
cmd=%COMMANDER_PATH%\Soft\Everything.exe
param=-exit
тоже не хочет выгружаться.
Но через горячие клавиши для em_everything_exit, например Ctrl+Alt+Q срабатывает.
Ставлю после

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

# After this line all actions are performed when TC closing
Pragma AutorunFinalizeSection
CommandExec em_everything_exit
не закрывает.
Orion9 писал(а):Да, есть такое место. Правда не знаю, будет ли это удобно, но можете попробовать.

Кнопки две, но функция вызывается одна, только с разными параметрами:

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

RegisterCommand 70500 "TorrentFindData" 0
RegisterCommand 70501 "TorrentFindData" 1
Параметр "1" означает, что вход со второй кнопки. Этот код передается переменной bEverything:

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

Local bEverything = nMode
Теперь если bEverything = 1 (или логическое "true"), то в функции можно предусматривать код, который будет выполняться только для ветки с Everything. Т.е. можно сделать так:

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

If bEverything Then CommandExec em_everything
Эту строку можно вставить сразу после Local bEverything = nMode или дальше по коду, например после сообщения с подтверждением о поиске. Но вероятно потребуются дополнительные проверки, запущена Everything или нет, чтобы не выполнять команду запуска каждый раз.
Orion9
Спасибо, работает.
В настройках самой Everything галочка на опции "разрешить несколько копий программы" снята и вроде всё нормально.
Команду для выгрузки Everything

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

CommandExec em_everything_exit
поставил в Torrent.aucfg в конец кода функции

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

Func TorrentFindData(lParam, nMode)
но как и другие способы выгрузки Everything не срабатывает, но и не мешает ничего не ломает.
Пробовал и в сам Autorun.cfg

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

# После этой строки все действия выполняются при закрытии TC
Pragma AutorunFinalizeSection
CommandExec em_everything_exit
не получается.
Orion9 писал(а):В ближайший месяц-два все-равно больше не смогу такими ударными темпами развивать функционал, хотя идея находить недокаченные раздачи довольно заманчива.
Спасибо. Уже очень хорошо, но буду надеяться на продолжение по недокачанным.

Добавлено: Вс сен 21, 2025 22:42
Loopback
A55555 писал(а):Так тоже не сработало
В общем-то это и есть правильный вариант. У меня так срабатывает. Так что вряд ли тут Autorun при делах.

Могу только добавить, что если процесс everything запущен от имени администратора, а тотал от пользователя, то ProcessTerminate, естественно, не сработает. Но вариант с -exit в этом случае должен открыть диалог повышения привилегий, и если согласиться, то everything успешно закрывается.
Orion9 писал(а):У вас нет планов добавить к плагину TCTorrent возможность возврата списка содержимого торрент-файлов через wdx-поле?
Интересно, с чего бы им вдруг быть? :)

Но это скорее всего не получится даже чисто технически. Чтобы уместить большой список нужно передавать плагину большой буфер, чтобы в него этот список мог уместиться. А тотал (и соответственно Autorun) предоставляет буфер размером 4096 байт, т. е. всего 2 Кб для юникодной строки.

И даже если бы это было возможно, непросто найти объяснение целесообразности вывода в одно поле списка файлов (потенциально огромного) для обычного пользователя. А TCTorrent, как и TCMediaInfo, предполагался простым и понятным обычному пользователю.

Добавлено: Вс сен 21, 2025 23:41
Orion9
A55555 писал(а):Но через горячие клавиши для em_everything_exit, например Alt+Ctrl+Q срабатывает.
Да, похоже только в секции финализации не срабатывает. У меня не было времени проверить в кнопке, но если вставить в командную строку TC и выполнить em_everything_exit, то Everything выгружается хоть от Администратора была запущена, хоть от простого пользователя.
A55555 писал(а):поставил в Torrent.aucfg в конец кода функции
Тогда тоже используйте условие If bEverything, но лучше в секцию финализации такое вставлять. Может Loopback найдет в чем причина несрабатывания.
Loopback писал(а):Интересно, с чего бы им вдруг быть?
Просто на предыдущей странице я писал:
[cut]Сейчас код опирается на плагин TCTorrent (превосходный плагин от Loopback), но wdx-часть плагина не выдает список содержимого торрента, только wlx-часть. Может, автор сделает какой-нибудь недокументированный вызов к библиотеке для получения такого списка? Тогда можно будет подумать[/cut]
Loopback писал(а):И даже если бы это было возможно, непросто найти объяснение целесообразности вывода в одно поле списка файлов (потенциально огромного) для обычного пользователя.
Об этом речи не было. Изначально речь шла о недокументированном вызове функции напрямую из библиотеки, либо, если делать wdx-поле, то передавать в это поле адрес буфера со списком и размер этого буфера (размер можно и во второе поле, например). В Autorun принимать этот буфер через BaseAddress:

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

obj = Buffer(<InitialSize>[, <BaseAddress>])