View previous topic :: View next topic |
Author |
Message |
A55555
Joined: 06 Feb 2011 Posts: 30
|
(Separately) Posted: Sat Sep 13, 2025 00:55 Post subject: |
|
|
Orion9 wrote: | A55555 wrote: | Я скопировал те строки из мониторинга выключения, по логике, в TorrentSize, но оно не заработало, подсазка возле курсора осталась по умолчанию крошечной. |
Вы правильно сделали, но в теле функции подсказка вызывается два раза, если не считать подсказки об ошибках (Файл не существует, Каталог и т.д.). Возможно, вы вставили строки перед одной подсказкой, но вызывалась другая. Первая подсказка вызывается для одиночных файлов, вторая - для выделенных. По сути, нужно и перед той, и перед другой сделать. Но не забудьте после каждого ShowHint() добавить строку сброса параметров SetHintParam("ShowHint", "Reload"), поскольку изменение параметров происходить глобально и затрагивает все подсказки в плагине.
|
Спасибо, подсказки в TorrentSize и Duration настроил.
Orion9 wrote: | Что же касается монитора выключения, то вот какие идеи у меня были на этот счет. Скорее всего помешать процессу копирования смогут только два диалога - ExtMsgForm и TOverWriteForm. Это две формы, которые объединяют в себе все, что вы перечислили выше. Можно было бы просто искать эти окна и следить за ними, но мне не понравился этот подход. Кроме того нужно учитывать, что окна могут быть открыты в других процессах ТС, поэтому нужно что-то более универсальное. Если допустить, что перекрывающее окно диалога будет иметь владельцем окно копирования (а судя по всему так оно и есть), то достаточно просто проверять окна первого уровня на наличие такого владельца. Пример такого перечисления окон первого уровня есть в справке к объекту Callback, его я и взял. Остальное, как говорится, дело техники. Полный код всего: |
Находясь в TC в момент, когда после окончания копирования появляется окно счетчика, поверх всех окон не срабатывает для окна счетчика.
При этом, если находиться в момент появления окна счетчика в другом окне, например браузере, то поверх всех окон для этого окна счетчика срабатывает.
Добавлено спустя 32 минуты:
Orion9 wrote: | A55555
А что касается подсказки MediaInfo на панелях (если вы её имеете в виду), то ее нужно собирать из нескольких частей. Помимо кода Autorun, должны быть созданы 60 полей, т.е. в секции [HintsCustomField] должны быть два щаблона *.* по 30 полей каждый, которые должны ее замыкать. Т.е. цифры у 22exts и 22fields должны быть своими, как и у 23exts и 23fields.
Можно просто войти в Настройки -> Содержимое панелей -> Пользовательские и добавить там два шаблона *.*
Code: | [=autorun.C1]\n[=autorun.C2]\n[=autorun.C3]\n[=autorun.C4]\n[=autorun.C5]\n[=autorun.C6]\n[=autorun.C7]\n[=autorun.C8]\n[=autorun.C9]\n[=autorun.C10]\n[=autorun.C11]\n[=autorun.C12]\n[=autorun.C13]\n[=autorun.C14]\n[=autorun.C15]\n[=autorun.C16]\n[=autorun.C17]\n[=autorun.C18]\n[=autorun.C19]\n[=autorun.C20]\n[=autorun.C21]\n[=autorun.C22]\n[=autorun.C23]\n[=autorun.C24]\n[=autorun.C25]\n[=autorun.C26]\n[=autorun.C27]\n[=autorun.C28]\n[=autorun.C29]\n[=autorun.C30] |
Code: | [=autorun.C31]\n[=autorun.C32]\n[=autorun.C33]\n[=autorun.C34]\n[=autorun.C35]\n[=autorun.C36]\n[=autorun.C37]\n[=autorun.C38]\n[=autorun.C39]\n[=autorun.C40]\n[=autorun.C41]\n[=autorun.C42]\n[=autorun.C43]\n[=autorun.C44]\n[=autorun.C45]\n[=autorun.C46]\n[=autorun.C47]\n[=autorun.C48]\n[=autorun.C49]\n[=autorun.C50]\n[=autorun.C51]\n[=autorun.C52]\n[=autorun.C53]\n[=autorun.C54]\n[=autorun.C55]\n[=autorun.C56]\n[=autorun.C57]\n[=autorun.C58]\n[=autorun.C59]\n[=autorun.C60] |
Там же нужно поставить галочку "Объединять все подсказки, подходящие по типу файлов". |
При создании, эти шаблоны можно назвать как угодно или фиксированные имена какие-то дать необходимо?
Orion9 wrote: | После перезагрузки ТС у плагина Autorun должно появится 60 дополнительных полей. Проверить это можно в WDX Guide. |
Для проверки, этой утилите необходимо указать на файл autorun.cfg? |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 431
|
(Separately) Posted: Sat Sep 13, 2025 11:33 Post subject: |
|
|
Orion9 wrote: | Вариантов, наверное, есть несколько, но если так? |
Спасибо:
Добавлено спустя 2 минуты:
A55555 wrote: | Для проверки, этой утилите необходимо указать на файл autorun.cfg? |
Просто зайдите в пользовательские колонки и посмотрите, появились у autorun эти поля. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 836
|
(Separately) Posted: Sat Sep 13, 2025 13:41 Post subject: |
|
|
Loopback wrote: | до сих пор такие вещи всплывают... |
Сталкивался с чем-то подобным, но тогда не придал значения, поскольку, вероятно, удалось найти какой-то обходной путь, но это не отменяет того факта, что уже тысячи и тысячи строк были успешно написаны на Autorun и продолжают писаться. Вы сделали отличное ядро, практически полноценный скриптовый язык для работы с Total Commander, который по содержанию приближается к таким гигантам, как Autohotkey. А что, если отбросить GUI, COM и прочие плюшки, так оно и получается. Поэтому считаю, что в описании плагина должно быть указано, что это именно скриптовый язык для работы с ТС, не иначе! Autorun давно уже перерос свой статус обычного выполнения действий при запуске:
 Hidden text Code: | Это псевдоконтентный плагин, предназначенный для выполнения некоторых задач при запуске Total Commander. Можно запустить файл, выполнить команду (cm_ и em_), установить переменную окружения, записать значение в ini-файл, задать задержку между выполнением команд, загрузить библиотеку или плагин. Команды читаются из текстового файла конфигурации. |
Loopback wrote: | На самом деле свет в конце туннеля виден. |
Это радует. Ещё полгода назад всё не так было радужно )
A55555 wrote: | Находясь в TC в момент, когда после окончания копирования появляется окно счетчика, поверх всех окон не срабатывает для окна счетчика. |
Не вижу у себя этой проблемы. Состояние окна счётчика "Поверх всех окон" устанавливается командой WinSetState(30, h_WinShutdown) после его создания. По идее не должно быть важно, где в этот момент находится пользователь, окно все-равно должно показываться поверх остальных. Кстати, я об этом упоминал, но вызвать только окно с отсчетом можно отдельной командой 80800:
Code: | TOTALCMD#BAR#DATA
808000
%COMMANDER_EXE%
808000
-1
|
Работает у вас так? Висит окно поверх всех?
A55555 wrote: | При создании, эти шаблоны можно назвать как угодно или фиксированные имена какие-то дать необходимо? |
Имена шаблонам можно не давать, только маску нужно указать *.* Можно выбрать и другую маску, например *.mp3, но тогда подсказка будет срабатывать только на mp3-файлах.
A55555 wrote: | Для проверки, этой утилите необходимо указать на файл autorun.cfg? |
Эта утилита показывает, какие поля есть у wdx-плагина. Их еще можно посмотреть из окна настройки пользовательских колонок, как написал AkulaBig. Autorun сам не создает пользовательские поля, пока не будет использована директива Pragma AutorunPluginFields. Почему полей так много? Потому что Гислер при отображении полей в подсказке игнорирует символы перевода строки, поэтому приходится разбивать текст, полученный от MediaInfo.dll, на отдельные строки и построчно выводить в свои поля. Т.о. 60 полей = 60 строк от MediaInfo. Видео файлы могут содержать гораздо больше строк, но на аудио файлы этого количества, как правило, хватает. Если бы не было этого ограничения от Гислера, то, конечно же, лучше было сделать одно поле, но такое количество мешает разве что визуально. Если нужно добавить к Autorun еще полей для других целей и задач, то никаких проблем не будет:
Code: | Pragma AutorunPluginFields "C1:::MagicHint" "C2:::MagicHint" "C3:::MagicHint"
...
"C58:::MagicHint" "C59:::MagicHint" "C60:::MagicHint" "Frag:::FileVCN" "FragNum::ft_numeric_32:NumVCN" "FragEntry::ft_numeric_32:EntryVCN" |
Добавятся еще три поля для отображения информации о фрагментах файла из недавнего примера. |
|
Back to top |
|
 |
A55555
Joined: 06 Feb 2011 Posts: 30
|
(Separately) Posted: Sat Sep 13, 2025 23:33 Post subject: |
|
|
Orion9 wrote: | Не вижу у себя этой проблемы. Состояние окна счётчика "Поверх всех окон" устанавливается командой WinSetState(30, h_WinShutdown) после его создания. По идее не должно быть важно, где в этот момент находится пользователь, окно все-равно должно показываться поверх остальных. Кстати, я об этом упоминал, но вызвать только окно с отсчетом можно отдельной командой 80800:
Code: | TOTALCMD#BAR#DATA
808000
%COMMANDER_EXE%
808000
-1
|
Работает у вас так? Висит окно поверх всех?
|
При нажатии этой кнопки у меня закрывается окно счетчика (как будто я нажал на крестик этого окна) и соответственно далее выскакивает сообщение "Выключение ПК отменено".
Я понял в чем проблема, не выходит на передний план окно счетчика, потому что у меня автостарт по F11 стоит для полноэкранного режима TC
 Hidden text Code: | LoadLibrary Plugins\TCFS2Tools.dll
LoadLibrary Plugins\Autorun_Tweaks.dll
LoadLibrary Plugins\Autorun_Runtime.dll
LoadLibrary Plugins\Autorun_Sysinfo.dll
SetHotKeyAction /H:F11 ToggleFullScreen
WinGetPos('cX', 'cY', 'cW', 'cH')
If Not FileExist(AUTORUN_PATH & '\Layout.ini') Then
ShellExec /SW_HIDE /WAIT %ComSpec% '/q/c echo [Layout]>%AUTORUN_PATH%\Layout.ini'
Local sLayout = IniReadSection('~/R', COMMANDER_INI, 'Layout')
If StrPos(sLayout, '=') Then _
IniWriteSection(AUTORUN_PATH & '\Layout.ini', 'Layout', sLayout)
Else
Local sLayout = IniReadSection(AUTORUN_PATH & '\Layout.ini', 'Layout')
If StrPos(sLayout, '=') Then _
IniWriteSection('~/R', COMMANDER_INI, 'Layout', sLayout)
EndIf
### переход в полноэкранный режим при старте. НАЧАЛО
ToggleFullScreen()
Func ToggleFullScreen(WinChange=1)
Static HasTabHeader, HasStatusBar, HasDriveList, HasKeyButtons, HasCmdLine, _
HasDriveBar, HasButtonBar, HasButtonBar2, HasMainHeader
### переход в полноэкранный режим при старте КОНЕЦ (закомментировав не будет сразу в полноєкранном режиме)
IniRead /R HasCurDir %COMMANDER_INI% 'Layout' 'CurDir'
If HasCurDir Then SendMessage(AUTORUN_TCHANDLE, 11, 0)
If WinChange Then
# SPI_GETWORKAREA - desktop area without taskbar
Static wAreaX1 = SystemParametersInfo(48, 1), _
wAreaY1 = SystemParametersInfo(48, 2), _
wAreaX2 = SystemParametersInfo(48, 3), _
wAreaY2 = SystemParametersInfo(48, 4)
If HasCurDir Then
Static wX = wAreaX1 ? wAreaX1 + 1 : 0, _
wY = wAreaY1 ? wAreaY1 + 1 : 0, _
wW = wAreaX2 = SYSINFO_DESKTOPWIDTH ? wAreaX2 - wAreaX1 - 1 : wAreaX2 - wAreaX1, _
wH = wAreaY2 = SYSINFO_DESKTOPHEIGHT ? wAreaY2 - wAreaY1 - 1 : wAreaY2 - wAreaY1
If WinGetState(6) Then WinSetState(9)
WinSetPos(wX, wY, wW, wH)
Else
If WinGetState(6) Then WinSetState(9)
If cX <> '' Then WinSetPos(cX, cY, cW, cH)
EndIf
EndIf
If HasCurDir Then
HasMainHeader = WinHasStyle(12582912)
PostMessage(AUTORUN_TCHANDLE, 1075, 65538)
IniRead /R HasTabHeader %COMMANDER_INI% 'Layout' 'TabHeader' 1
IniRead /R HasStatusBar %COMMANDER_INI% 'Layout' 'StatusBar' 1
IniRead /R HasDriveList %COMMANDER_INI% 'Layout' 'DriveCombo' 1
IniRead /R HasKeyButtons %COMMANDER_INI% 'Layout' 'KeyButtons' 1
IniRead /R HasCmdLine %COMMANDER_INI% 'Layout' 'CmdLine' 1
IniRead /R HasDriveBar %COMMANDER_INI% 'Layout' 'DriveBar1' 0
IniRead /R HasButtonBar %COMMANDER_INI% 'Layout' 'ButtonBar' 1
IniRead /R HasButtonBar2 %COMMANDER_INI% 'Layout' 'ButtonBarVertical' 1
#SendCommand 2902 2
SendCommand 2906 2
SendCommand 2907 2
SendCommand 2908 2
SendCommand 2909 2
SendCommand 2910 2
SendCommand 2911 2
SendCommand 2944 2
SendCommand 2901 2
WinSetStyle 12582912 4
Else
PostMessage(AUTORUN_TCHANDLE, 1075, 65537)
If HasButtonBar Then SendCommand 2901 1
#If HasDriveBar Then SendCommand 2902 1
If HasDriveList Then SendCommand 2906 1
SendCommand 2907 1
If HasTabHeader Then SendCommand 2908 1
If HasStatusBar Then SendCommand 2909 1
If HasCmdLine Then SendCommand 2910 1
If HasKeyButtons Then SendCommand 2911 1
If HasButtonBar2 Then SendCommand 2944 1
If HasMainHeader Then WinSetStyle 12582912 2
EndIf
SendCommand 2918
If HasCurDir Then SendMessage(AUTORUN_TCHANDLE, 11, 1)
WinRedRaw 2
EndFunc |
не получается у окна счетчика поверх вот этого полноэкранного режима выйти.
Поверх нормального окна TC всё нормально, выходит на передний план окно счетчика.
Orion9
всё стесняюсь спросить. Мониторинг выключения. Окно прогресса.
Меняю со 100 секунд на 50 например в нужных местах, работает.
Но с полосой прогресса (зеленая полоса в окне счетчика) ничего сделать не получается, она под 100 секунд заточена, т.е. при установленных мной 50 секунд, эта полоса только до половины доходит.
Если это целое дело, то не нужно, это уже такое.
Loopback
подскажите пожалуйста, можно в этом коде поправить, чтоб при выходе по F11 из поноэкранного режима окно было развернуло на весь экран.
 Hidden text Code: | LoadLibrary Plugins\TCFS2Tools.dll
LoadLibrary Plugins\Autorun_Tweaks.dll
LoadLibrary Plugins\Autorun_Runtime.dll
LoadLibrary Plugins\Autorun_Sysinfo.dll
SetHotKeyAction /H:F11 ToggleFullScreen
WinGetPos('cX', 'cY', 'cW', 'cH')
If Not FileExist(AUTORUN_PATH & '\Layout.ini') Then
ShellExec /SW_HIDE /WAIT %ComSpec% '/q/c echo [Layout]>%AUTORUN_PATH%\Layout.ini'
Local sLayout = IniReadSection('~/R', COMMANDER_INI, 'Layout')
If StrPos(sLayout, '=') Then _
IniWriteSection(AUTORUN_PATH & '\Layout.ini', 'Layout', sLayout)
Else
Local sLayout = IniReadSection(AUTORUN_PATH & '\Layout.ini', 'Layout')
If StrPos(sLayout, '=') Then _
IniWriteSection('~/R', COMMANDER_INI, 'Layout', sLayout)
EndIf
### переход в полноэкранный режим при старте. НАЧАЛО
ToggleFullScreen()
Func ToggleFullScreen(WinChange=1)
Static HasTabHeader, HasStatusBar, HasDriveList, HasKeyButtons, HasCmdLine, _
HasDriveBar, HasButtonBar, HasButtonBar2, HasMainHeader
### переход в полноэкранный режим при старте КОНЕЦ (закомментировав не будет сразу в полноєкранном режиме)
IniRead /R HasCurDir %COMMANDER_INI% 'Layout' 'CurDir'
If HasCurDir Then SendMessage(AUTORUN_TCHANDLE, 11, 0)
If WinChange Then
# SPI_GETWORKAREA - desktop area without taskbar
Static wAreaX1 = SystemParametersInfo(48, 1), _
wAreaY1 = SystemParametersInfo(48, 2), _
wAreaX2 = SystemParametersInfo(48, 3), _
wAreaY2 = SystemParametersInfo(48, 4)
If HasCurDir Then
Static wX = wAreaX1 ? wAreaX1 + 1 : 0, _
wY = wAreaY1 ? wAreaY1 + 1 : 0, _
wW = wAreaX2 = SYSINFO_DESKTOPWIDTH ? wAreaX2 - wAreaX1 - 1 : wAreaX2 - wAreaX1, _
wH = wAreaY2 = SYSINFO_DESKTOPHEIGHT ? wAreaY2 - wAreaY1 - 1 : wAreaY2 - wAreaY1
If WinGetState(6) Then WinSetState(9)
WinSetPos(wX, wY, wW, wH)
Else
If WinGetState(6) Then WinSetState(9)
If cX <> '' Then WinSetPos(cX, cY, cW, cH)
EndIf
EndIf
If HasCurDir Then
HasMainHeader = WinHasStyle(12582912)
PostMessage(AUTORUN_TCHANDLE, 1075, 65538)
IniRead /R HasTabHeader %COMMANDER_INI% 'Layout' 'TabHeader' 1
IniRead /R HasStatusBar %COMMANDER_INI% 'Layout' 'StatusBar' 1
IniRead /R HasDriveList %COMMANDER_INI% 'Layout' 'DriveCombo' 1
IniRead /R HasKeyButtons %COMMANDER_INI% 'Layout' 'KeyButtons' 1
IniRead /R HasCmdLine %COMMANDER_INI% 'Layout' 'CmdLine' 1
IniRead /R HasDriveBar %COMMANDER_INI% 'Layout' 'DriveBar1' 0
IniRead /R HasButtonBar %COMMANDER_INI% 'Layout' 'ButtonBar' 1
IniRead /R HasButtonBar2 %COMMANDER_INI% 'Layout' 'ButtonBarVertical' 1
#SendCommand 2902 2
SendCommand 2906 2
SendCommand 2907 2
SendCommand 2908 2
SendCommand 2909 2
SendCommand 2910 2
SendCommand 2911 2
SendCommand 2944 2
SendCommand 2901 2
WinSetStyle 12582912 4
Else
PostMessage(AUTORUN_TCHANDLE, 1075, 65537)
If HasButtonBar Then SendCommand 2901 1
#If HasDriveBar Then SendCommand 2902 1
If HasDriveList Then SendCommand 2906 1
SendCommand 2907 1
If HasTabHeader Then SendCommand 2908 1
If HasStatusBar Then SendCommand 2909 1
If HasCmdLine Then SendCommand 2910 1
If HasKeyButtons Then SendCommand 2911 1
If HasButtonBar2 Then SendCommand 2944 1
If HasMainHeader Then WinSetStyle 12582912 2
EndIf
SendCommand 2918
If HasCurDir Then SendMessage(AUTORUN_TCHANDLE, 11, 1)
WinRedRaw 2
EndFunc |
Автозагрузка полноэкранно происходит.
Потом когда мне нужно перейти в оконный режим нажимаю F11, оно переходит в оконный режим, но окно не развернуло на весь экран.
Можно код подправить, чтоб оконный режим был развернутое на весь экран окно (не считая нижней панели Windows)? |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1610
|
(Separately) Posted: Sun Sep 14, 2025 12:41 Post subject: |
|
|
A55555 wrote: | чтоб при выходе по F11 из поноэкранного режима окно было развернуло на весь экран |
В коде не предусмотрен учёт развернутого состояния окна. Если делать правильно (= универсально), надо читать ключ maximized из соответствующей разрешению секции, или из секции AllResolutions, в зависимости от настроек. Но честно говоря мне не хочется тратить на это время, поэтому просто добавьте функцию разворачивания здесь:
Code: |
Else
PostMessage(AUTORUN_TCHANDLE, 1075, 65537)
If HasButtonBar Then SendCommand 2901 1
If HasDriveBar Then SendCommand 2902 1
If HasDriveList Then SendCommand 2906 1
SendCommand 2907 1
If HasTabHeader Then SendCommand 2908 1
If HasStatusBar Then SendCommand 2909 1
If HasCmdLine Then SendCommand 2910 1
If HasKeyButtons Then SendCommand 2911 1
If HasButtonBar2 Then SendCommand 2944 1
If HasMainHeader Then WinSetStyle 12582912 2
# Разворачивает окно на весь экран
WinSetState(3)
EndIf
|
|
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 836
|
(Separately) Posted: Sun Sep 14, 2025 13:02 Post subject: |
|
|
A55555 wrote: | При нажатии этой кнопки у меня закрывается окно счетчика |
Так и задумано. Первое нажатие на кнопку создает окно, второе закрывает. Кнопка только для тестов, чтобы не запускать каждый раз процесс копирования ради того, чтобы увидеть окна отсчета.
A55555 wrote: | не получается у окна счетчика поверх вот этого полноэкранного режима выйти. |
Установил код от Flasher, но проблему воспроизвести не удалось. Пока не знаю, что сказать. И так и этак пробовал, но у меня всё нормально работает. А вообще, полноэкранный режим от Flasher довольно "сурово" выглядит. Оно, конечно, прикольно, но, на мой взгляд, слишком аскетично. Я обычно оставляю заголовок окна, меню и строку состояния. Не вижу большой пользы от скрытия этих элементов. Чай не век 800x600 разрешения живем, чтобы за каждый пиксель бороться.
A55555 wrote: | Если это целое дело, то не нужно, это уже такое. |
Да нет, это не сложно, хотя уделять время Autorun и ТС в ближайшее дни-недели действительно больше не смогу. Однако то, что вы предлагаете, по хорошему, надо было сделать сразу. Замените с этой строки:
Code: | SendMessage(h_WinShutdown, PBM_SETPOS, 0, 0)
Local seconds = 15
For i = 1 to seconds
SendMessage(h_WinShutdown, PBM_SETPOS, Round(i/seconds*100,0), 0)
WinSetText("Выключение через " & seconds-i & " сек.", h_WinShutdown)
Sleep(900)
If g_Shutdown = 0 Then Break
Next
|
Через значение "seconds =" можно указывать количество секунд отсчета.
Loopback wrote: | Но честно говоря мне не хочется тратить на это время, поэтому просто добавьте функцию разворачивания здесь: |
Я когда освобожусь, первым делом скорее всего возьмусь за этот код от Flasher - давно хотел заменить функционал TCFS2 на Autorun. И базу неплохую он для этого сделал, нужно только подстроить под себя. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1610
|
(Separately) Posted: Sun Sep 14, 2025 20:01 Post subject: |
|
|
Версия от 14.09.2025
Code: |
* внутренние изменения и оптимизации нового окна сообщений об ошибках
* убрана поддержка раннего метода возврата длинного текста, использовавшегося в GetSelectedItems с 2.2.15 по 2.2.19
- исправлено обрезание текста параметра при использовании вычисляемых строк в командной записи функций плагинов
|
Довольно существенные пришлось делать изменения для исправления, надеюсь ничего не сломал. |
|
Back to top |
|
 |
A55555
Joined: 06 Feb 2011 Posts: 30
|
(Separately) Posted: Sun Sep 14, 2025 23:07 Post subject: |
|
|
Loopback wrote: | A55555 wrote: | чтоб при выходе по F11 из поноэкранного режима окно было развернуло на весь экран |
В коде не предусмотрен учёт развернутого состояния окна. Если делать правильно (= универсально), надо читать ключ maximized из соответствующей разрешению секции, или из секции AllResolutions, в зависимости от настроек. Но честно говоря мне не хочется тратить на это время, поэтому просто добавьте функцию разворачивания здесь: |
Спасибо, то что и хотелось.
Orion9 wrote: | A55555 wrote: | не получается у окна счетчика поверх вот этого полноэкранного режима выйти. |
Установил код от Flasher, но проблему воспроизвести не удалось. Пока не знаю, что сказать. И так и этак пробовал, но у меня всё нормально работает. |
У меня тоже всё нормально уже.
Я использовал код для смещения окна, который Loopback мне недавно написал
Code: | WinAlign(h_WinShutdown, 0, DllCall("GetDesktopWindow"), 0, 600, -320) |
в перемешку с вашим.
Перейдя только на ваш вариант кода Поверх всех окон, смещения и т.д. у меня тоже стало всё нормально с выходом окна счетчика поверх всех окон.
Orion9 wrote: | Да нет, это не сложно, хотя уделять время Autorun и ТС в ближайшее дни-недели действительно больше не смогу. Однако то, что вы предлагаете, по хорошему, надо было сделать сразу. Замените с этой строки:
Code: | SendMessage(h_WinShutdown, PBM_SETPOS, 0, 0)
Local seconds = 15
For i = 1 to seconds
SendMessage(h_WinShutdown, PBM_SETPOS, Round(i/seconds*100,0), 0)
WinSetText("Выключение через " & seconds-i & " сек.", h_WinShutdown)
Sleep(900)
If g_Shutdown = 0 Then Break
Next
|
Через значение "seconds =" можно указывать количество секунд отсчета.
|
Спасибо, теперь намного проще количество секунд устанавливать.
Но я имел ввиду, что вот эта зеленая полоса прогресса не синхронизируется под отличные от 100 секунд варианты, например под 15 секунд.
 Hidden text
Уже и синхронизация полосы прогресса с количество секунд нормально заработала, сначала вроде не работало Спасибо.
Orion9 wrote: | Я когда освобожусь, первым делом скорее всего возьмусь за этот код от Flasher - давно хотел заменить функционал TCFS2 на Autorun. И базу неплохую он для этого сделал, нужно только подстроить под себя. |
И если можно будет и это реально, если будет вдохновение на такое, сделайте пожалуйста кнопку на тему .torrent файлов.
Чтоб выделяешь .torrent файл, нажимаешь кнопку и оно на противоположной панели показывает файл/папку относящиеся к этому торрент файлу (скачанные через этот торрент файл) или пишет ничего не найдено (проводит поиск по всем дискам).
У меня на нескольких дисках много всякого и так получается, что всё оно сейчас не раздается (контент и сами .torrent файлы у меня на дисках), я собираюсь поштучно вносить через .torrent файлы это всё в клиент и было бы удобно быстро находить относящиеся к .torrent файлу папку/файл. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 836
|
(Separately) Posted: Tue Sep 16, 2025 00:41 Post subject: |
|
|
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, иначе будут заметные торомоза.
В общем, это пока только тестовая версия, могут быть косяки и недочеты, но в целом работает.
Loopback wrote: | надеюсь ничего не сломал |
А где именно могло сломаться? Поклацал по последним кнопкам, ничего не заметил. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1610
|
(Separately) Posted: Tue Sep 16, 2025 12:32 Post subject: |
|
|
Orion9 wrote: | А где именно могло сломаться? |
Только если что-то в обработке параметров в командной записи. Остальное не затрагивалось. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 836
|
(Separately) Posted: Tue Sep 16, 2025 13:08 Post subject: |
|
|
Перенесено из другой темы:
Loopback wrote: | Orion9 wrote: | А вообще, посылка нажатий клавиш - одна из немногих фишек, которой до сих пор нет в Autorun. Я просил Loopback как-то добавить, но с этим есть сложности. |
Не то чтобы сложности, просто много нюансов, соответственно есть ожидание, что времени придется потратить очень прилично. Учитывая, что есть многочисленные варианты - TCFS2, Autoit (в т. ч. AutoItX, который можно вызывать с DllCall), AHK - реализация постоянно откладывается куда-то в конец списка. Так оно и лежит в todo уже несколько лет. |
Если можно, хотелось бы в справке видеть такой пример использования библиотеки AutoItX, можно сразу в статье к DllCall.
Loopback wrote: | Только если что-то в обработке параметров в командной записи. Остальное не затрагивалось. |
Ясно. Я командной записью редко пользовался, в основном для чтения и записи в ini-файл, пока никаких проблем не заметил. Надеюсь, дальше все будет оставаться в порядке.
P.S.
Для тех, кто будет пользоваться кодом выше для поиска торрент-данных, если при выполнении возникнет ошибка "Переменная не определена: PBS_MARQUEE", необходимо добавить эти константы:
 Hidden text Code: | Const PBM_SETPOS = 1026, _
PBM_SETRANGE = 1025, _
PBS_MARQUEE = 0x08, _
PBM_SETMARQUEE = 1034
|
Нет, в этот раз я про них не забыл, просто их повторное появление в коде (а этот код был ранее) тоже приводит к ошибке. В общем, зря я с ними вообще связался, надо было их через static внутри функций делать, а не выносить отдельно в шапку. В будущем переделается. |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 282 Location: Электросталь
|
(Separately) Posted: Tue Sep 16, 2025 19:22 Post subject: |
|
|
Loopback
Прошу прощения за тормоза в ответах. После правки у меня вот такое перестало работать:
Code: | ControlSetMouseAction /R /B:2 17 ShowPopupMenu /A:80 "%COMMANDER_PATH%\Profile\menus\F4Menu.mnu"
ControlSetMouseAction /R /B:2 17 ShowPopupMenu /A:80 %"COMMANDER_PATH" & "\Profile\menus\F4Menu.mnu"
ControlSetMouseAction /R /B:2 17 ShowPopupMenu /A:80 "c:\totalcmd\Profile\menus\F4Menu.mnu" |
Т.е. ни одна из этих строк не работает. До последнего исправления был первый вариант (1), и он работал. После исправления я переписал эту строку с вычисляемой строкой (2), и с путём литерально (3) — не работает, меню по ПКМ не показывает. Пока откатился на прежнюю версию.
А вот эта работает:
Code: | ControlSetMouseAction /R /B:2 17 MsgBox "OK" |
_________________ Amo ergo sum |
|
Back to top |
|
 |
jentoso

Joined: 20 Dec 2007 Posts: 403
|
(Separately) Posted: Tue Sep 16, 2025 19:31 Post subject: |
|
|
yozhik
Действительно, после обновления , перестали работать действия к событиям мыши на панели функциональных клавиш.
Code: | ControlSetMouseAction /M:U /B:1 17 ShowPopupMenu /A:16 %COMMANDER_PATH%\Help\HINTS.MNU
ControlSetMouseAction /M:U /B:7 17 ShowPopupMenu /A:16 %COMMANDER_PATH%\Help\RESTART.MNU |
_________________ TC 11.56 combo, Windows 10 x64 |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1610
|
(Separately) Posted: Tue Sep 16, 2025 21:04 Post subject: |
|
|
Orion9 wrote: | хотелось бы в справке видеть такой пример использования библиотеки AutoItX |
Да я только вчера про него вспомнил, даже не тестировал, но думаю должно работать без проблем. Пример добавить можно. Во всяком случае до появления своего Send.
yozhik
jentoso
Ох уж эта ControlSetMouseAction, как я мог тогда додуматься до использования переключателей в параметрах функций обратного вызова... До сих пор отголоски этого сомнительного решения.
Забыл сделать исключение и обрабатывал переключатели как параметры, разумеется, перестало работать. Исправил. Помимо этого, на волне больших изменений, успел сделать еще кое-какой давно задуманный рефакторинг, так что возможны и другие косяки. Но надеюсь, что всё же нет.
Версия от 16.09.2025 |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 282 Location: Электросталь
|
(Separately) Posted: Tue Sep 16, 2025 22:23 Post subject: |
|
|
Loopback
Теперь порядок: и в КЗ, и в ControlSetMouseAction. Спасибо
Loopback wrote: | рефакторинг |
Такое ощущение, что мой конфиг стал быстрее обрабатываться. Специально не проверял, но первое впечатление было. _________________ Amo ergo sum |
|
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
|