Autorun

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

FallenAngel
Сообщения: 47
Зарегистрирован: Вт дек 30, 2025 20:01

Сообщение FallenAngel »

Orion9
Нужна помощь с такой конструкцией.

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

ControlSetMouseAction /M 1 OpenDirInNewTabElseEnter
ControlSetMouseAction /M 2 OpenDirInNewTabElseEnter

Func OpenDirInNewTabElseEnter
   I = ItemAtCursor('index')
   If I >= 0 Then
      F = RequestInfo(1010 + ItemAtCursor('panel'))
      If ItemAtCursor('panel') <> RequestInfo(1000) Or Not ItemAtCursor('focused') Then MouseClick
      If ItemAtCursor('focused') Then
         If F > I Or F = -1 Then
            SendCommand 3003
         Else
            Switch StrLower(StrRight(StrPart(ItemAtCursor('text'), auTAB, 1), 4))
			   Case '.exe', '.bat', '.cmd', '.lnk'
			      CommandExec em_startelevated
               Case '.ps1'
                  ShowPopupMenu /I:16 '%commander_path%\PS.BAR'
			   Else
			      SendCommand cm_SrcQuickView
            EndSwitch
         EndIf
      EndIf
   Else
      SendCommand cm_SrcHideQuickView
   EndIf
EndFunc
Идея состоит в том, чтобы унифицировать подход. По СКМ должен всегда открываться Быстрый просмотр. А вот все частные случаи (новая вкладка, '.exe', '.bat', '.cmd', '.lnk' и '.ps1') только с удержание Shift.
Заранее спасибо.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

FallenAngel
Если требуется сохранить старый код, т.е. обойтись минимальным вмешательством, то можно "перевесить" ControlSetMouseAction на Shift, добавив ключ /K:S, а просто СКМ оставить под новую ControlSetMouseAction с командой быстрого просмотра:

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

ControlSetMouseAction /M 1 SendCommand cm_SrcQuickView
ControlSetMouseAction /M 2 SendCommand cm_SrcQuickView

ControlSetMouseAction /K:S /M 1 OpenDirInNewTabElseEnter
ControlSetMouseAction /K:S /M 2 OpenDirInNewTabElseEnter

Func OpenDirInNewTabElseEnter
   I = ItemAtCursor('index')
   If I >= 0 Then
      F = RequestInfo(1010 + ItemAtCursor('panel'))
      If ItemAtCursor('panel') <> RequestInfo(1000) Or Not ItemAtCursor('focused') Then MouseClick
      If ItemAtCursor('focused') Then
         If F > I Or F = -1 Then
            SendCommand 3003
         Else
            Switch StrLower(StrRight(StrPart(ItemAtCursor('text'), auTAB, 1), 4))
            Case '.exe', '.bat', '.cmd', '.lnk'
               CommandExec em_startelevated
               Case '.ps1'
                  ShowPopupMenu /I:16 '%commander_path%\PS.BAR'
            Else
               SendCommand cm_SrcQuickView
            EndSwitch
         EndIf
      EndIf
   Else
      SendCommand cm_SrcHideQuickView
   EndIf
EndFunc
Подойдет вам такой вариант?
FallenAngel
Сообщения: 47
Зарегистрирован: Вт дек 30, 2025 20:01

Сообщение FallenAngel »

Orion9 писал(а): Если требуется сохранить старый код, т.е. обойтись минимальным вмешательством,
Это не обязательно.
Orion9 писал(а): Подойдет вам такой вариант?
Нет, т.к. поведение было лучше - клик по пустому пространству всегда делал cm_SrcHideQuickView
+ клик по файлу сразу выводил его содержимое в Быстром просмотре, а не просто переключал этот самый просмотр.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

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

А если так попробовать?

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

ControlSetMouseAction /M 1 OpenDirInNewTabElseEnter
ControlSetMouseAction /M 2 OpenDirInNewTabElseEnter
ControlSetMouseAction /K:S /M 1 OpenDirInNewTabElseEnter
ControlSetMouseAction /K:S /M 2 OpenDirInNewTabElseEnter

Func OpenDirInNewTabElseEnter
   Local bShift = IsPressed(0x10)
   I = ItemAtCursor('index')
   If I >= 0 Then
      F = RequestInfo(1010 + ItemAtCursor('panel'))
      If ItemAtCursor('panel') <> RequestInfo(1000) Or Not ItemAtCursor('focused') Then MouseClick
      If ItemAtCursor('focused') Then
         # проверка Shift
         If Not bShift Then
            SendCommand cm_SrcQuickView
            Return
         EndIf
         If F > I Or F = -1 Then
            SendCommand 3003
         Else
            Switch StrLower(StrRight(StrPart(ItemAtCursor('text'), auTAB, 1), 4))
            Case '.exe', '.bat', '.cmd', '.lnk'
               CommandExec em_startelevated
               Case '.ps1'
                  ShowPopupMenu /I:16 '%commander_path%\PS.BAR'
            Else
               SendCommand cm_SrcQuickView
            EndSwitch
         EndIf
      EndIf
   Else
      SendCommand cm_SrcHideQuickView
   EndIf
EndFunc
FallenAngel
Сообщения: 47
Зарегистрирован: Вт дек 30, 2025 20:01

Сообщение FallenAngel »

Orion9
Да, спасибо. Это уже почти то, что я хотел. Правда, по ходу обнаружилось что с shift\ctrl заодно проходит выделение, а с alt - закрывается вызванное меню. Буду думать, по поводу модификатора еще.
Может Вы можете подсказать что? пкм+скм?

Если можно, еще пара вопросов.

В справке, в разделе Разное есть пример "Сохранение исходного заголовка". Это как я понял, нужно для правильного вывода строки WinSetText(g_sTitle & " | CPU: " & GetCPUUsage()) в заголовке ТС.
Вопрос в следующем - нужно чтобы по shift+клик по заголовку эта самая строка WinSetText... скрывалась и отображалась соотв. А самое главное, это состояние нужно сохранять после перезапука ТС. В идеале в wincmd.ini - вроде:

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

[Configuration]
ClockTC=1
И у меня предложение по поводу "на чём тогда 11,000 строк написано" и Вашей сборки с примерами.
Я честно её скачал и постарался разобраться в примерах, но выглядело это как тот мем про опоссума.
Можем Вам оформлять все отдельными .aucfg файлами? Тогда всем будет ясно, что это и зачем. Можно будет быстро подключить готовое решение и использовать у себя.
Яркий пример в справке - есть "Добавление каталога в PATH". Просто и понятно. Сохранил в AddToUserPath.aucfg и спокойно себе юзаешь 65001. Ну или "Сворачивание в область уведомлений". Т.е. это все готовые законченные решения.
А прям в идеале - выгружать на github. Тогда можно и по взрослому открывать issues по каждому решению. Так же, это еще один способ коммуникации. Для понимания, я зарегистрировался на форуме исключительно чтобы пообщаться с Вами :oops:
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

FallenAngel писал(а):нужно чтобы по shift+клик по заголовку эта самая строка WinSetText... скрывалась и отображалась соотв. А самое главное, это состояние нужно сохранять после перезапука ТС
Кажется, что-то подобное есть в сборке AkulaBig, он немного по-другому делал, по-своему. Можете глянуть, вруг это больше вам подойдет или вдруг проще станет разобраться.
FallenAngel писал(а):Можем Вам оформлять все отдельными .aucfg файлами? Тогда всем будет ясно, что это и зачем. Можно будет быстро подключить готовое решение и использовать у себя.
Я так и старался в последнее время делать, помодульно. То есть чтобы можно было просто модуль взять и подключить инструкцией Pragma и не сильно заморачиваться со всем остальным.

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

Написание документации — совершенно не моё. Если бы вы знали сколько у меня времени ушло на написание readme к заголовку, то долго бы смеялись, да я и сам смеюсь, когда вспоминаю :lol: Чтобы делать это легко и непринужденно, нужны специальные таланты и умения, и это факт. Почему, вы думаете, справка к Autorun так легко читается? Благодаря Flasher и его умениям, прежде всего. Ну и Loopback, разумеется. К сожалению, у меня таких талантов нет, поэтому и времени на написание даже простых и небольших инструкций (к тому же корявых как правило) отъедается изрядно.

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

Кстати, всех с наступающими! :D Будем надеятся Loopback появится в новом году, и не с пустыми руками, а с большими подарками )
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Написание документации — совершенно не моё.
И вот этот человек можно сказать заставил меня написать комменты ко всем моим функциям. Это подстава :twisted:
Orion9 писал(а):Кстати, всех с наступающими!
И вас с наступающим!!!
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

FallenAngel
А что из функционала собранных скриптов вас заинтересовало больше всего, на что стоит обратить внимание в первую очередь?

Там ведь половина - это чисто "проба пера", которая представляет ценность разве что с технической точки зрения. Я имею в виду, простому пользователю разобраться с этим будет непросто, да и вряд ли вообще будет интересно без соответсвующих знаний в области программирования и скриптинга.

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

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

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

В скрипте Title.aucfg реализован код кнопки, переключающей количество строк на главной панели инструментов (кнопка меняет значение BarLimitLines в Wincmd.ini).

Первое нажатие на кнопку разворачивает панель (BarLimitLines=0). Через 10 секунд панель снова свернется (BarLimitLines=1). Чтобы панель оставалась в развернутом виде, необходимо повторно нажать на кнопку в течении 10 секунд. Развернутая панель возвращается в исходное состояние нажатием на кнопку в третий раз. 
Однако код кнопки сильно завязан на основной цикл заголовка. Выдернуть его оттуда непросто. Я давно хотел сделать отдельную функцию на эту кнопку, но все забывал. Однако вы мне напомнили.
[cut]

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

Global gBarLinesTimer = false

RegisterCommand 60040 "ToggleBarLines"

SetHotkeyAction /K:C /H:F12 "ToggleBarLines"

Func ToggleBarLines()
    # окно имеет прозрачность
    Local bWinTrans = WinHasStyle(0x80000, 1, AUTORUN_TCHANDLE)
    Local nLines
    # чтение ключа
    IniRead /R nLines %COMMANDER_INI% "Buttonbar" "BarLimitLines" 1
    # панель развернута с запущенным таймером
    If nLines = 0 And gBarLinesTimer Then
       gBarLinesTimer = false
       Sleep(50)
       Return
    EndIf
    # переключение ключа
    If nLines = 1 Then
       IniWrite /R %COMMANDER_INI% "Buttonbar" "BarLimitLines" 0
    Else
       IniWrite /R %COMMANDER_INI% "Buttonbar" "BarLimitLines" 1     
    Endif
    # запрет перерисовки окна
    If Not bWinTrans Then SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
    # двойная поылка cm_VisButtonBar
    SendCommand(2901, 0, 1)
    SendCommand(2901, 0, 1)
    Sleep(10)
    # снятие запрета перерисовки
    If Not bWinTrans Then SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
    WinRedraw(2)
    # повторное чтение ключа
    IniRead /R nLines %COMMANDER_INI% "Buttonbar" "BarLimitLines" 1 
    # панель свернута
    If nLines = 1 Then 
       gBarLinesTimer = false
       Sleep(50)
       Return
    EndIf   
    # запуск таймера
    RunThread BarLinesTimer
EndFunc

Func BarLinesTimer()
    Local nSeconds = 5
    gBarLinesTimer = true
    For i = 1 To nSeconds
        For j = 1 To 20
            Sleep(50)
            If Not gBarLinesTimer Then Break
        Next
        If Not gBarLinesTimer Then Break       
    Next
    gBarLinesTimer = false
    # таймер был прерван
    If i < nSeconds Then Return
    # таймер сработал до конца 
    Local nLines
    IniRead /R nLines %COMMANDER_INI% "Buttonbar" "BarLimitLines" 1   
    If nLines = 0 Then RunThread ToggleBarLines
EndFunc
[/cut]
Количество секунд можно поменять (сейчас nSeconds = 5), а вызов повесить на другую комбинацию (сейчас CTRL+F12). Или прописать отдельную горячую клавишу через стандартную секцию [Shortcuts].

В целом, как уже писал выше, попробую пересмотреть весь код и адаптировать самые нужные функции для более простого использования. Думаю, начну где-то после всех праздников, если ничего экстренного не навалится.
AkulaBig писал(а):И вот этот человек можно сказать заставил меня написать комменты ко всем моим функциям. Это подстава
Вы хотите как в лучших коммандерах лондОна и парижа, или не хотите? :lol:
FallenAngel
Сообщения: 47
Зарегистрирован: Вт дек 30, 2025 20:01

Сообщение FallenAngel »

Orion9 писал(а):FallenAngel
на что стоит обратить внимание в первую очередь?
Как я уже говорил, мне сейчас интересная тема настройки заголовка.
Такое чувство, что каждый "строит" что-то сам себе. Нужен универсальный .aucfg.
Кроме стандартных RAM\CPU нужна и погода, возможно задействовав https://github.com/chubin/wttr.in

И у всего этого должно быть юзер-френдли настройки. Т.е. прям в начале .aucfg глобальными переменными указываем хотим ли сохранять в ini, что хотим видеть и как.
Все. Юзер подключает модуль, настраивает как душе угодно и не вникает в детали. Так должно быть.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Вы хотите как в лучших коммандерах лондОна и парижа, или не хотите?
Ай, хитрец.
FallenAngel писал(а):Так должно быть.
Если напишите, будет.
FallenAngel писал(а):Нужен универсальный .aucfg.
Можете в моей сборке посмотреть. aucfg отдельно. К нему инишник, в котром можно кое-что настраивать.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

FallenAngel писал(а):Юзер подключает модуль, настраивает как душе угодно и не вникает в детали. Так должно быть.
Я согласен, что так должно быть. Но сделать универсальный модуль для работы с заголовком — задача весьма амбициозная. Боюсь, что на такое я уже не решусь.

Дело даже не в объеме кода и времени, которое на это уйдет (оставлю за рамками жизненные обстоятельства, которые тоже изменились не в лучшую в этом плане сторону), а в банальной потере интереса. Увы, это горякая правда.

Представьте альпиниста, который взбирается на гору: пока он движется, у него есть цель, стремление и задача, и он достигает этой цели. Но за красивой вывеской "покорил вершину" стоит лишь снег, пот и кислородное голодание :lol: Никакой романтики )

Более того, взойдя на вершину его начинает мучать другой вопрос: "а на кой оно мне вообще было надо?" :lol:

Возможно, это пример не отображет всей полноты смысла, поэтому могу привести другой пример.

У султана может быть много жен, много одежд, много золотых чаш и кубков, много красивых лошадей. Но не смотря на такое обилие выбора и роскошь, он проводит время с одной женой — своей любимой женой, носит одну одежду — свою любимую одежду, ест с одной чаши — своей любимой чаши, ездит верхом на одной лошади — своей любимой лошади.

К чему это я? :lol:

К тому, что за 1,5 года пользования заголовком я осознал, что большая часть фич там просто не требуется. Заголовок, которым я обычно пользуюсь, выглядит вот так:

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

Total Commander 11.55 - Orion 8   Fri 2   Dune   Offline   128 byte   0 byte   Memory: 15%   CPU: 3%
Плюс погода по настроению. Но на этом все )

И сделать такой легковесный, ничем не перегруженный заголовок, который будет учитывать только собственные нужды, будет не так сложно, при условии, что есть навыки программирования и скриптописания. В последних версиях Autorun Loopback максимально облегчил для этого жизнь. Поэтому да, каждый строит, и самое главное — может построить что-то себе, как вы выразились.

Ссылка на погоду, которую вы дали, действительно крутая. Извлечь из нее данные будет совсем просто. Вот небольшой пример:

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

RegisterCommand 60041 "WttrDownloadTest"

Func WttrDownloadTest()
    Local url = "https://wttr.in/Moscow?format=3"
    If WinInetDownloadFile(url, TEMP & "\wttr.txt") = 0 Then
       Local txt = FileRead(TEMP & "\wttr.txt")
       tip(StrTrim(txt), 1, "Weather")
    Else
       tip("Не удалось получить данные " & url, 3, "Error")   
    EndIf
EndFunc
Добавить полученные данные в заголовок тоже будет несложно. Сделать включение и выключение по Shift+Click тоже вроде не сложно. У вас есть какой-то код? Не видя кода сложно что-то конкретное предложить.
FallenAngel
Сообщения: 47
Зарегистрирован: Вт дек 30, 2025 20:01

Сообщение FallenAngel »

Orion9 писал(а): У вас есть какой-то код? Не видя кода сложно что-то конкретное предложить.

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

Title = WinGetText()
RunThread InfoHeader
 
Func InfoHeader
   Local nRecvSpeed, nSendSpeed
   While 1
      Sleep 1000
      GetNetSpeed(nRecvSpeed, nSendSpeed)
      WinSetText(Title & '        ' & Date("d MMMM, ddd") & '.    CPU: ' & StrFormat("%02d", GetCPUUsage()) & '%    RAM: ' & GetMemStats() & '%    NET: ↓ ' & Round(nRecvSpeed / 1000, 1) & '  ↑ ' & Round(nSendSpeed / 1000, 1) & ' mb/s')
   Wend
EndFunc
Добавлено спустя 28 минут:

Orion9
да, еще если можно, у менять есть такое:

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

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)
EndIf
И я добавляю это через Pragma Include.
Можно ли сделать тоже самое, только через shift+клик по заголовку Lister (ну и понятно сразу с применением)? Т.е. листер становится в размер TC и записывает это в ini.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

FallenAngel
Если я понял, функция GetNetSpeed была взята из справки. Я ее приложил в модуль, т.ч. можете удалить ее у себя, чтобы не было конфликта имен. Просто подключите новый модуль к конфигурации.

[cut="InfoHeader.aucfg"]

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

ControlSetMouseAction /L /K:S /H:2 0 ToggleInfoHeader

Sleep(200)

Global gTitle = WinGetText(), gInfoHeader = gTitle, gShowTitle = 1, gTitleThread = 0

LaunchInfoHeader()

SetMessageAction 70 "SetInfoHeader"

Func ToggleInfoHeader()
    gShowTitle = Not gShowTitle
    IniWrite %COMMANDER_INI% "Autorun" "ShowTitle" %"gShowTitle"    
    Sleep(100)
    LaunchInfoHeader()
EndFunc
 
Func SetInfoHeader()
    WinSetText(gShowTitle ? gInfoHeader : gTitle)
EndFunc

Func LaunchInfoHeader()
    IniRead gShowTitle %COMMANDER_INI% "Autorun" "ShowTitle" 1
    If gShowTitle And Not gTitleThread Then
       gInfoHeader = gTitle & '        ' & "Booting..."
       WinSetText(gInfoHeader)       
       Sleep(200)
       RunThread InfoHeader
    EndIf   
EndFunc

Func InfoHeader
   Local nRecvSpeed, nSendSpeed, T1
   gTitleThread = 1
   While gShowTitle
      T1 = GetUptime()
      GetNetSpeed(nRecvSpeed, nSendSpeed)
      gInfoHeader = gTitle & '        ' & Date("d MMMM, ddd") & '.    CPU: ' & StrFormat("%02d", GetCPUUsage()) & '%    RAM: ' & GetMemStats() & '%    NET: ↓ ' & Round(nRecvSpeed / 1000, 1) & '  ↑ ' & Round(nSendSpeed / 1000, 1) & ' mb/s'
      WinSetText(gInfoHeader)
      While GetUptime() < T1 + 1000
          If Not gShowTitle Then Break
          Sleep(50)
       WEnd
   Wend
   gTitleThread = 0
   SetInfoHeader()
EndFunc

Func GetNetSpeed(ByRef nRecvSpeed, ByRef nSendSpeed)
    Static nIntfIdx = GetNetInterface()
    If nIntfIdx = -1 Then Return
 
    Static nPrevRecv = GetNetInterfaceInfo(nIntfIdx, 'Recv')
    Static nPrevSend = GetNetInterfaceInfo(nIntfIdx, 'Sent')
    Static nPrevTime = GetUptime()
 
    Local nRecv = GetNetInterfaceInfo(nIntfIdx, 'Recv')
    Local nSend = GetNetInterfaceInfo(nIntfIdx, 'Sent')
    Local nTime = GetUptime()
    Local nTimeDiff = nTime - nPrevTime
 
    nRecvSpeed = Round(Abs(nRecv - nPrevRecv) / nTimeDiff)
    nSendSpeed = Round(Abs(nSend - nPrevSend) / nTimeDiff)
 
    nPrevRecv = nRecv
    nPrevSend = nSend
    nPrevTime = nTime
EndFunc
[/cut]
Работает?

Надеюсь, что да. А то меня не будет пару дней. Но вы не спешите, подумайте, что еще будет нужно. Когда вернусь, попробуем погоду вставить. Возможно обойдемся простым вызовом URLDownloadToFileW, т.к. он работает, я проверил:

[cut="WttrDownloadTest"]

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

RegisterCommand 60041 "WttrDownloadTest"

Func WttrDownloadTest()
    Local url = "https://wttr.in/London?format=3"
    Local file = TEMP & "\wttr.txt"
    If IsPressed(0x11) Then
       tip("Internet connection.", 1, "Urlmon.dll")    
       hr = DllCall("Urlmon.dll\URLDownloadToFileW", _
                    "ptr", 0, "wstr", url, "wstr", file, "dword", 0, "ptr", 0, "hresult")  
       If hr <> 0 Then
          txt = "An error occured." & auCRLF & url & auCRLF & _
                "Error code: " & hr & auCRLF & GetINetECode(hr)
          Return tip(txt, 3)
       EndIf
       Local txt = FileRead(file)
       tip(StrTrim(txt), 1, "Urlmon.dll")
       Return
    EndIf
    If WinInetDownloadFile(url, file) = 0 Then
       Local txt = FileRead(file)
       tip(StrTrim(txt), 1, "WinInet")
    Else
       tip("Не удалось получить данные " & url, 3, "Error")   
    EndIf
EndFunc
[/cut]
Запуск с CTRL.

На счет листера, пока не знаю. Надо будет у Loopback спросить. Подручными средствами вряд ли получится (т.е. нет готовой команды типа ControlSetMouseAction /L /K:S для окна листера), но он может что-нибудь посоветует. Я тоже потом подумаю.
FallenAngel
Сообщения: 47
Зарегистрирован: Вт дек 30, 2025 20:01

Сообщение FallenAngel »

Orion9
Да, похоже работает, спасибо. Буду тестировать - отпишу подробнее.



UPD. Потестил, все ок. Можно смело оформлять готовым решением. В начале файла только указать что это, зачем и как использовать. По правилам хорошего тона, на три строчки кода полагается 1 комментарий, ну то такое, хотя бы инфо вначале.

По погоде. Заголовок обновляется каждую секунду. Нужно придумать как его не перегружать. К примеру, раз в час (не более) данные обновляются в файл\переменную.... а заголовок только подтягивает сталое значение. Плюс нужно пояснить как юзеру правильно указать свой город. Мини мануал.
ZiabrevLV
Сообщения: 14
Зарегистрирован: Чт сен 15, 2022 11:22

Сообщение ZiabrevLV »

Нужна помощь.
Есть две команды - включают и отключают сведения о дисковом пространстве

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

RegisterCommand 63001 "SwitchHide"
Func SwitchHide(lParam)
    		  IniWrite %COMMANDER_INI% "Configuration" "DriveBarHide" ""
  CommandExec cm_VisTwoDriveButtons 2
  CommandExec cm_VisTwoDriveButtons 1
EndFunc

 RegisterCommand 63002 "SwitchShow" 
Func SwitchShow(lParam)
    		  IniWrite %COMMANDER_INI% "Configuration" "DriveBarHide" "-"
  CommandExec cm_VisTwoDriveButtons 2
  CommandExec cm_VisTwoDriveButtons 1
EndFunc
Наддо объединить в одну команду:

RegisterCommand 63003 "SwitchShowHide"
Func SwitchShowHide(lParam)

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

If <выражение 1> Then
    ...
ElseIf <выражение 2> Then
    ...
Else
    ...
EndIf
Чтобы одна команда выполняла отключение \ включение сведения о дисковом пространстве
Ответить