Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Autorun
Goto page Previous  1, 2, 3 ... 215, 216, 217
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Orion9



Joined: 01 Jan 2024
Posts: 991

Post (Separately) Posted: Sun Jan 04, 2026 14:10    Post subject: Reply with quote

FallenAngel
На комментарии просто времени не хватило, хотел сделать рабочий вариант, чтобы вы могли попробовать, и вроде даже успел )

А сам функционал был уже в модуле Title.aucfg, мне просто пришлось освежить немного память и взять кое-что оттуда. Там, конечно, всё сильно нагромождено переменными и раздутым телом цикла, но сам принцип тот же. Запуск заголовка происходит после считывания ключа ShowTitle, а выход из цикла при присвоении переменной gShowTitle значения false.

Есть менее громоздкая версия, состоящая всего из 200 строк. По сути это первая версия заголовка, где алгоритм предается более наглядно, и в нем нет ничего лишнего: только пинг, память и процессор. Если к этому добавить короткую дату и скорость передачи трафика, то и получится заголовок, которым я постоянно пользуюсь.

Вообще, считаю, что Гислер мог и сам сделать такой функционал — он точно не помешал бы и безусловно украсил бы его детище. Но к сожалению, лучшие годы маестро на танцполе уже позади, а включать мозг 8-летней девочки при подходе к проблемам пользователей больше не получается Laughing

Например, скорость передачи трафика в заголовке очень даже полезная фича при работе с сетевым диском, а про память и цпу и говорить не нечего.

На счет погоды. Может быть, город и не потребуется. Я сначала думал, что нет возможности указать координаты, но сейчас более внимательно посмотрел, оказыается есть в справке об этом. Соответственно, можно указывать в запросе нужные координаты, например:
https://wttr.in/55.75,37.62?format=3
Что эквивалентно:
https://wttr.in/Moscow?format=3
И наверное, так будет лучше, чем просто указание города или автоматическое определение местоположения по IP.

Но все-равно строку запроса пользователю придется формировать самостоятельно. Для этого нужно знать все ключи однострочного вывода, которые будут сохраняться в ini-файле и считываться оттуда при запуске заголовка.

Интервал обновления тоже будет сохраняться. В общем, завтра попробую что-то сделать. Может с первого наскока чего и получится )

ZiabrevLV
У вас всё почти есть. Нужно только считать ключ DriveBarHide для определения текущего состояния, и в зависимости от его значения, выполнить ту или иную функцию. То есть:
Code:
Local sDriveBarHide
IniRead sDriveBarHide %COMMANDER_INI% "Configuration" "DriveBarHide" ""
If StrPos(sDriveBarHide, "-") Then
   IniWrite %COMMANDER_INI% "Configuration" "DriveBarHide" ""   
Else
   IniWrite %COMMANDER_INI% "Configuration" "DriveBarHide" "-"
EndIf
CommandExec cm_VisTwoDriveButtons 2
CommandExec cm_VisTwoDriveButtons 1

Только я не проверял работоспособность, но кажется здесь нужно быть осторожным, т.к. ключ DriveBarHide может содержать подстроки, а значит их тоже нужно будет сохранять.

 Hidden text

Т.е. возможно так будет правильнее:
Code:
RegisterCommand 63003 "SwitchShowHide"

Func SwitchShowHide(lParam)
    Local sDriveBarHide, sValue
    IniRead sDriveBarHide %COMMANDER_INI% "Configuration" "DriveBarHide" ""
    If StrPos(sDriveBarHide, "-") Then
       # удаление "-" из значения ключа
       sValue = StrReplace(sDriveBarHide, "-", "")
       IniWrite %COMMANDER_INI% "Configuration" "DriveBarHide" sValue
    Else
       # добавление "-" к значению ключа
       sValue = sDriveBarHide & "-"
       IniWrite %COMMANDER_INI% "Configuration" "DriveBarHide" sValue
    EndIf
    CommandExec cm_VisTwoDriveButtons 2
    CommandExec cm_VisTwoDriveButtons 1
EndFunc
Back to top
View user's profile Send private message
ZiabrevLV



Joined: 15 Sep 2022
Posts: 4

Post (Separately) Posted: Sun Jan 04, 2026 17:35    Post subject: Reply with quote

Orion9
Да, первый вариант отлично работает.
Спасибо.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 991

Post (Separately) Posted: Tue Jan 06, 2026 00:38    Post subject: Reply with quote

FallenAngel
Мда. Как всегда легко и просто только на бумаге, а берешься делать сразу вслывает куча нюансов. С одними проверками загребешься: тут надо учесть, там надо учесть. Но все-таки доделал, раз уж взялся, тем более что кому-то тоже может пригодится.

Небольшой подвох с сервером: он очень плохо откликается, иногда погода вообще может не обновиться по таймауту. Пришлось немного по-другому сделать отображение процесса обновления, что по сути и отняло больше всего времени.

При наведении на заголовок всплывает посказка. Alt - добавляет информацию о файлах. Ctrl - отображает подсказку о погоде и прогнозе из дополнительно указанной ссылки. Правый клик вызывает меню.

Настройки должны храниться в файле Header.ini в подкаталоге Ini. Т.е. %COMMANDER_INI%\Ini\Header.ini

 Hidden text

Поскольку все эти "города, координаты и прочее" довольно приватная вещь, есть возможность сохранить информацию в дополнительном файле пользователя Wttr.ini, который расположен по умолчанию в LocalAppData\GHISLER\Wttr.ini.

Соответственно, если файл пользователя существует, настройки прежде всего будут считываться с него, кроме двух ключей секции [Title], т.е. ShowTitle и Wttr. Последний отключает погоду в заголоке при Wttr=0

 Пример Wttr.ini


Строку запроса можно настроить по-разному, все зависит от ключей сайта wttr.in.

Ошибки, конечно, могут быть: все сделать и протестировать за один день невозможно. Но радует, что кроме самого Autorun с последним модулем RegExp, для работы больше ничего не требуется.

 InfoHeader.aucfg

Нужны только еще две дополнительные функции, которые можно найти 1-2 страницы назад, но я лучше их еще раз приложу.

 Hidden text

P.S.
Заголовок мне понравился, очень понравился. Даже завидую тем, кто первый раз его подключит )
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 11

Post (Separately) Posted: Wed Jan 07, 2026 11:59    Post subject: Reply with quote

Orion9
Работает. Но я не разобрался как менять город.

Я думал, что достаточно в Wttr.ini (или Header.ini при отсутствии) указать свой город в Name=
...но ничего не поменялось.

Так же, Name должен отображаться и в заголовке. Вообще по выбору города - нужно упростить, сделать более юзер френдли. К примеру, в ПКМ меню добавить простую форму ввода города.


UPD. Поигрался с Url - но тоже безрезультатно.

Вообще в InfoHeader.aucfg сильно не хватает "шапки". Нужно написать версия, автор и т.д.
"Данный файл нужно подключать к плагину Autorun.wdx след. способом...
Настройка:
п1.
п2.
п3.
...

Обратная связь: ссылка на форум, почту, гитхаб
"
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 991

Post (Separately) Posted: Thu Jan 08, 2026 00:31    Post subject: Reply with quote

FallenAngel wrote:
Работает.

Это главное.

А подсказка с прогнозом на три дня у вас тоже работает? Cервер хорошо откликается?
FallenAngel wrote:
Но я не разобрался как менять город.

В принципе город и координаты можно не указывать. Сервис попытается установить местоположение по ip, если в запросе не будет этих данных, например:
https://wttr.in/?T
https://wttr.in/?format=%l:+%C+%t

Первую ссылку можно добавить в "Hint" в качестве подсказки, а вторую использовать для однострочного вывода в заголовок.

Предполагается, что пользователь сам создаст и сохранит ссылку, которая ему нужна (температура, давление, влажность, ветер и т.д.) в Header.ini или Wttr.ini. Ключ "Name" нужен для вывода произвольного текста в заголовок, к примеру, если вы хотите вывести в заголовок не имя города, а что-то другое, типа "Погода:". Если ключ пуст, дополнительный текст не появится.
FallenAngel wrote:
Вообще по выбору города - нужно упростить, сделать более юзер френдли. К примеру, в ПКМ меню добавить простую форму ввода города.

Это не реалистично сделать на Autorun. Даже при помощи специального объекта, упрощающего работу с GUI (если таковой бы имелся) и наличия базы данных городов (если таковая имелась бы), пришлось бы изрядно отвлечься на работу с этой базой, что далеко выходило бы за рамки простого скрипта. Да и зачем оно? Ведь город можно явно указать в запросе, или использовать более точные координаты для определения местоположения.
FallenAngel wrote:
Вообще в InfoHeader.aucfg сильно не хватает "шапки"

Если скрипт пройдет проверку временем, можно будет над этим подумать. Да, нужно добавить туда хотя бы версию Autorun, которая требуется для его работы, с этим я согласен.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 991

Post (Separately) Posted: Thu Jan 08, 2026 13:49    Post subject: Reply with quote

FallenAngel
Похоже, я неправильно прочитал ваше последнее сообщение. Подумал, что речь идет о выборе города из выпадающего списка, но вы, очевидно, имели в виду простой ввод в поле редактирования. Извиняюсь за это.

В общем, даже такое окно сделать на Autorun будет не просто. В редких случаях, когда это действительно требуется, можно использовать vbs-скрипт с вызывом функции Inputbox:
test.vbs
Code:
Wscript.Echo Inputbox("Введите имя города:","Wttr.in","")

В Autorun такой скрипт вызывается через ProcessExecGetOutput, например:
Code:
vbs = '/c ECHO Wscript.Echo Inputbox("Введите имя города:","Wttr.in","' & city & '")>%TEMP%\wttr.vbs'
   
ProcessExecGetOutput out %COMSPEC% %vbs%

Результат записывается в переменную и сохраняется в ini.

Но я не уверен, что такая форма нужна: это добавит еще одну порцию проверок, т.к. придется собирать ссылку программно, вместо того, чтобы просто отдать ее пользователю.

Сейчас у меня Wttr.ini такой:
Code:
[Wttr]
Name=Погода:
;Interval=1800
Url=https://wttr.in/47.37,8.55?format=%t
Hint=https://wttr.in/47.37,8.55?T

Соответственно, результат такой:
Code:
Total Commander 11.55 - Orion 8        Погода: -2°C    8 января, Чт.    CPU: 11%    RAM: 21%    NET: ↓ 0.2  ↑ 0 mb/s

Нормально смотрится. Хотя, конечно, это для теста.

Важно отметить: если в запросе указать координаты, то в подсказке последней строкой может определиться локация. Для указанных выше координат она выглядит так:
Code:
Location: 10, Hottingerstrasse, Hottingen, Kreis 7, Zürich, Bezirk Zürich, Zürich, 8032, Schweiz/Suisse/Svizzera/Svizra [47.370096700000005,8.550088820923422]

Строка слишком длинная, поэтому обрезается до 125 символов. Но сама информация полезная.
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 11

Post (Separately) Posted: Thu Jan 08, 2026 17:53    Post subject: Reply with quote

Orion9
Да, теперь получилось. Наверное, https:// был важен.

Это все очень важно расписать поподробнее в "шапке" - простому юзеру со всем этим не разобраться.

Quote:
https://wttr.in/?T

Нет, так не работает, появляется <html>, т.е. подтягивается веб-страница.


Вообще со строкой gInfoHeader = gTitle нужно что то делать. Я это вижу как блок в самом начале для переменных юзера, там где
Global gWttrIni = COMMANDER_PATH & "\User\Header.ini"
Global gWttrIniApp = COMMANDER_PATH & "\User\Wttr.ini"

И да, это нужно разделить и пояснить вначале:
==============
НАСТРОЙКИ ЮЗЕРА
==============
...

Так вот, там нужно указать что мы хотим видеть, в какой последовательности и как разделять:
weather=1
clock=2
cpu=3
ram=4
net=5
separator=' '


Идея в том, чтобы юзер дальше заголовка вообще не спускался в код. Можно конечно и ini-шником.

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

Orion9 wrote:
FallenAngel wrote:
Работает.


А подсказка с прогнозом на три дня у вас тоже работает? Cервер хорошо откликается?
Если скрипт пройдет проверку временем, можно будет над этим подумать. Да, нужно добавить туда хотя бы версию Autorun, которая требуется для его работы, с этим я согласен.


Code:
Error in file: D:\soft\Total Commander 64\Plugins\Autorun\InfoHeader.aucfg

[193] lst.Text = RegExpGet(txt, '<pre>(.*?)</pre>', "$1")

Function name not found: RegExpGet


Это с ctrl.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 991

Post (Separately) Posted: Thu Jan 08, 2026 20:24    Post subject: Reply with quote

FallenAngel
Потребуется последняя версия Autorun, желательно не ниже 2.2.21.3 от 15.10.2025:

https://total.darkhost.ru/files/autorun/beta/wdx_autorun_2.2.21_beta.zip
https://total.darkhost.ru/files/temp/autorun_20251015.zip

Кроме этого в файле autorun.cfg нужно подключить все модули (желательно все сразу, чтобы в будущем к этому больше не возвращаться):
Code:
LoadLibrary Plugins\Autorun_Tweaks.dll
LoadLibrary Plugins\Autorun_Sysinfo.dll
LoadLibrary Plugins\Autorun_Runtime.dll
LoadLibrary Plugins\Autorun_Process.dll
LoadLibrary Plugins\Autorun_RegExp.dll

Отсутствие последнего модуля RegExp приводит к ошибке "Function name not found: RegExpGet".

Функция RegExpGet извлекает текст подсказки из html, т.ч. с этим все нормально.

А на счет разбития заголовка на блоки, так это и будет тот самый универсализм, которого я изначально пытался избежать. Имхо, Cpu и Ram нет смысла отделять друг от друга. Net убирать из заголовка тоже как-то не катит. Можно однако сделать включение и выключение погоды отдельным пунктом, это на мой взгляд, не помешает.

Но вы не спешите. Попользуйтесь немного. Станет лучше видно где и что улучшить.
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 11

Post (Separately) Posted: Fri Jan 09, 2026 12:15    Post subject: Reply with quote

Orion9 wrote:

Отсутствие последнего модуля RegExp приводит к ошибке "Function name not found: RegExpGet".

Все равно <html>.

Orion9 wrote:
Можно однако сделать включение и выключение погоды отдельным пунктом, это на мой взгляд, не помешает.

Да, и меню должно быть на английском, по умолчанию. А то, часть на английском - часть на русском.

Кстати, пункты Настройки... Пользователь... должны открываться через cm_Edit /N (т.е. настроенным редактором юзера).
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 991

Post (Separately) Posted: Fri Jan 09, 2026 13:36    Post subject: Reply with quote

FallenAngel wrote:
Все равно <html>.

Он и должен подтягиваться.

При запросе к серверу во временном каталоге сохраняется html-файл. Этот файл затем открывается и при помощи регулярного выражения из него извлекается текст, т.е. буквально текст подсказки:

 Hidden text

&quot; заменяется на кавычку, а последняя длинная строка обрезается до 125 символов, чтобы окно подсказки не разъехалось. На последнем этапе текст отображается функцией ShowHint с определенным стилем (темный фон и размер шрифта). Последнее, кстати, можно изменить по вкусу.
FallenAngel wrote:
Да, и меню должно быть на английском, по умолчанию. А то, часть на английском - часть на русском.

Тут уж всем не угодишь. В этом и заключается сложность универсализма.

Не стесняйтесь вносить изменения в скрипт. Некоторые вещи не требуют большого знания Autorun. Например, вы сами можете поменять поряд блоков в заголовоке. Просто закомментрируйте старую строку:
Code:
 gInfoHeader = gTitle & '        ' & (gWttr ? gWttrData & '    ' : '') & Date("d MMMM, ddd") & '.    CPU: ' & StrFormat("%02d", GetCPUUsage()) & '%    RAM: ' & GetMemStats() & '%    NET: ↓ ' & Round(nRecvSpeed / 1000, 1) & '  ↑ ' & Round(nSendSpeed / 1000, 1) & ' mb/s'

И скопируйте ее в новую. Дальше попробуйте поменять местами текст и переменные как вам больше понравится.

Это же касается и других частей интерфеса. Если вам не нравится сообщение "Booting...", к примеру, вы можете поменять его на любое другое, например на "Loading..." или "Starting..." или вообще его закомментировать, т.е. убрать.

То же самое касается и меню. Можно легко переименовать и добавить новые пункты. Если нужно, можете почитать в справке про ShowPopupMenu, там очень хорошо все расписано с примерами.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 991

Post (Separately) Posted: Thu Jan 15, 2026 20:24    Post subject: Reply with quote

FallenAngel
Еще раз просмотрел и обновил InfoHeader.aucfg

Добавил некоторые проверки и изменил меню заголовка. Реорганизовать пункты можно по-разному, но пока остановился на таком варианте.

Loopback на заметку: запись ниже не выгружает иконку из-за расширения .cpl:
Code:
em_aucmd "timedate.cpl" ShellExec rundll32.exe

Можно такое учесть для апплетов?

FallenAngel
В меню теперь можно включить или отключить отображение погоды: так удобнее, чем вручную править файл конфигурации.

Файл пользователя можно создать автоматически, если он отсутствует. Для этого используется шаблон:
Code:
[Wttr]
Name=Погода:
Interval=1800
Url=https://wttr.in/47.37,8.55?format=%t
Hint=https://wttr.in/47.37,8.55?T

Но при желании его можно изменить в скрипте.

Добавил переменную gTitleRound для указания количества знаков после точки у сетевого трафика. Раньше округлялось до одного знака, что выглядело несколько статично, на мой взгляд, но можно вернуть прежнее значение.

 InfoHeader.aucfg


Сервер работает плохо. Пару раз во временном каталоге сохранялся недокаченный на несколькой килобайт файл. Поскольку закрывающий тег </pre> в таком html обрезан, регулярное выражение не может вернуть текст. В таком случае вместо подсказки будет сообщение, что файл не содержит данных. Чтобы подсказка заработала необходимо еще раз обновить погоду и дождаться полной загрузки файла.
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 11

Post (Separately) Posted: Fri Jan 16, 2026 14:00    Post subject: Reply with quote

Orion9 wrote:

Сервер работает плохо.


Я из-за этого пока оставил идею с погодой в заголовке. Но за обновление спасибо, потестирую.


А вообще, ждем возвращения Loopback - нужно как-то все таки добраться до заголовка листера.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 991

Post (Separately) Posted: Fri Jan 16, 2026 20:46    Post subject: Reply with quote

FallenAngel
Я там фигню сморозил. Вместо:
Code:
txt &= "Файл от " & Date('', gWttrFile) & ' ' & Time('', gWttrFile) & " "
txt &= gWttrFile & auCRLF
txt &= "Файл от " & Date('', file) & ' ' & Time('', file) & " "
txt &= file & auCRLF

Должно быть:
Code:
txt &= "Временные файлы:" & auCRLF
txt &= "Файл от " & Date('', FileGetTime(gWttrFile)) & ' ' & Time('', FileGetTime(gWttrFile)) & " "
txt &= gWttrFile & auCRLF
txt &= "Файл от " & Date('', FileGetTime(file)) & ' ' & Time('', FileGetTime(file)) & " "
txt &= file & auCRLF

На автомате просто делал и не проверил толком, но теперь корректно показывает дату изменения файлов по Alt, так что сразу видно, когда было последнее обновление.

Также добавил сведения об обновлении в саму подсказку. По идее надо было сразу это сделать, но не думал, что проблемы с сервером окажутся настолько серьезными, да и времени не было.

Сейчас лучше видно, что происходит в фоне. Информация в заголовке обновляется хоть и медленно, но стабильно (все-таки файл очень маленький приходит от сервера). А вот с Wttr.html могут быть проблемы. Мало того, что он скачивается медленно, так еще и не докачивается иногда, хотя у него размер всего 25-30 Кб. В общем, добавил некоторых проверок. Сейчас недокаченный файл будет отображаться в подсказке примерно так:
 Hidden text

Это лучше, чем сообщение, что файл не содержит данных.

Еще изменил имена у некоторых функций для лучшей унификации имён в модуле.

Что касается Листера, если задача стоит добиться, чтобы его окно при открытии имело тот же размер и положение, что и окно тотала, то можно привязать функцию к сообщению об изменении позиции окна ТС, в модуле это выглядит так:
Code:
Func InfoHeaderSet()
    WinSetText(gShowTitle ? gInfoHeader : gTitle)
    SyncListerPosition()
EndFunc

Func SyncListerPosition()
    Static c = 0
    If IniRead("~/R", COMMANDER_INI, "Lister", "Maximized", 0) = 0 Then
        WinGetPos("x", "y", "w", "h")
        IniWrite("~/R", COMMANDER_INI, "Lister", "x", x)
        IniWrite("~/R", COMMANDER_INI, "Lister", "y", y)
        IniWrite("~/R", COMMANDER_INI, "Lister", "dx", w)
        IniWrite("~/R", COMMANDER_INI, "Lister", "dy", h)
        c += 4
        #ShowHint("Запись ключей: " & c, SYSINFO_DESKTOPWIDTH/2-50, SYSINFO_DESKTOPHEIGHT/2, 1000, 1)
    EndIf
EndFunc

Раскомментируйте ShowHint, чтобы увидеть количество записей в ini-файл, если интересно. Если фича не нужна, просто закомментируйте или уберите SyncListerPosition() из функции InfoHeaderSet().

Теоретически функции SyncListerPosition можно присвоить код через RegisterCommand, например 60050, а далее сделать em_команду с указанным кодом (об этом было 2-3 страницы назад). Полученную em_команду можно использовать в свзяке с командами cm_List*, чтобы перед запуском листера записывались параметры его окна в файл конфигурации.

Shift+клик, как вы хотите, самый сложный вариант. Нужно перехватывать клик, смотреть под каким окном находится указатель мыши, проверять клиентская ли это часть окна или не клиентская, и только потом запускать действие. Тут без Loopback, наверное, не обойтись.

Последний модуль:
 Hidden text

P.s.
Обещал пересмотреть другие модули после праздников, но пока не получается. Теперь только в феврале, наверное, попробую еще раз взяться.
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 11

Post (Separately) Posted: Wed Feb 04, 2026 17:17    Post subject: Reply with quote

Orion9
Команду, к примеру 64000 я не смог выполнить из меню Start. Не знает, так задумано?

Еще вопрос, мы можем выполнить команду для CompareTool= ? (секция [Configuration])
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 215, 216, 217
Page 217 of 217

 
Jump to:  
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