Autorun

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

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

Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

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

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

pq1 = 'SELECT Address, ResponseTime, ResponseTimeToLive, StatusCode FROM Win32_PingStatus _
      WHERE BufferSize = 32 AND Timeout = 1000 AND (Address = "' & pa1 & '" _
      OR Address = "' & pa2 & '" OR Address = "' & pa3 & '")'

pq2 = "SELECT Address, ResponseTime, ResponseTimeToLive, StatusCode FROM Win32_PingStatus _
      WHERE BufferSize = 32 AND Timeout = 1000 AND (Address = '" & pa1 & "' _
      OR Address = '" & pa2 & "' OR Address = '" & pa3 & "')"
Loopback, я просто не стал полностью расписывать, но если быть точным, то код вот такой:

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

   Opt("FuncExpandVars", 0)

   If StrPos(TCFS2, "%COMMANDER_PATH%") Then
      TCFS2 = %COMMANDER_PATH% & StrReplace(TCFS2, "%COMMANDER_PATH%")
   Endif

   If StrPos(AHKV2, "%COMMANDER_PATH%") Then
      file = StrReplace(AHKV2, "%COMMANDER_PATH%")
      file = %COMMANDER_PATH% & file
      AHKV2 = file
   Endif
   
   If StrPos(AKELP, "%COMMANDER_PATH%") Then
      AKELP = %COMMANDER_PATH% & StrReplace(AKELP, "%COMMANDER_PATH%")
   Endif   

   Opt("FuncExpandVars", 1)
Все эти переменные считывались из ini-файла:

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

   IniRead TCFS2          %IniPath% "Tools"    "TCFS2"         %"%TCFS2%"
   IniRead AHKV2          %IniPath% "Tools"    "AutoHotkey"    %"%AHKV2%"
   IniRead AKELP          %IniPath% "Tools"    "AkelPad"       %"%AKELP%"
Сам ini-файл:

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

[Tools]
TCFS2=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
AkelPad=%COMMANDER_PATH%\Utilites\AkelPad\AkelPad.exe
AutoHotkey=%COMMANDER_PATH%\Scripts\Ahk\AutoHotKey32.exe
Как видите, в ini хранятся нераскрытые переменые, которые позже раскрываются в коде, после считывания из файла. Я сделал так, как первым пришло в голову, хотя не уверен, что это правильно. Если есть лучший вариан, сообщите пожалуйста )

AkulaBig
Ну вы даёте ) В наш век все копии должны быть не только в облаках, но и на девятом небе! :lol:

[cut="P.S."]
Мне не хочется работать испорченным телефоном.
А найти общий язык с админом и оставить абсолютно всё в прошлом не вариант? Что за ребячество такое, имхо.

Ну, если не вариант, то проехали...[/cut]
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):Как видите, в ini хранятся нераскрытые переменые, которые позже раскрываются в коде, после считывания из файла. Я сделал так, как первым пришло в голову, хотя не уверен, что это правильно. Если есть лучший вариант, сообщите пожалуйста )
Разница действительно есть, причём получается, что баг был как раз в прошлой версии, т.к. её поведение не соответствовало документированному. И такое решение с Opt - корявое, но как раз правильное.

Надо всё-таки что-то с этими функциями окончательно решить. Это лишнее разворачивание в ФЗ ломает логику работы строчных функций, такого быть не должно. Проблема в том, что устранение этой проблемы вынудит для строчных функций в КЗ менять запись переменных на вычисляемые строки, т.к. %var% в тексте перестанут восприниматься как переменные.

[cut]
Orion9 писал(а):А найти общий язык с админом и оставить абсолютно всё в прошлом не вариант?
Видимо не вариант, раз этого до сих пор не случилось.
[/cut]
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Можно-ли заменить команду

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

Local ini_Colors = %COMMANDER_PATH% & "\Ini\Colors.ini"
на корректную через редирект в wincmd.ini? В IniRead требуется секцию ввести, соответственно IniRead(%COMMAND_INI%, "Colors", ...) не катит. Параметра-то нет.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9
Наконец-то закончил ваши любимые процентики. Думаю вам стоит на это взглянуть. В инишнике пояснения. Если решить посмотреть, попрошу потестить.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback, то ли глюк, то ли я чего-то не понимаю. Вроде бы простой код, который должен работать как часы:

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

Func WdxCRC()
    Local sect = IniReadSection(COMMANDER_INI, "ContentPlugins")    
    Return CRC32(sect)
EndFunc
Но при вызове из кнопки показывает разные значения после перезапуска ТС. При этом не сказать, что это совсем рандомные значения - переодически цифры повторяются:
1437548197
2224029045
2436222593
1437548197
2436222593
Что это может быть?

А по поводу Opt я примерно так и понял. Думаю, что "окончательно решать" этот вопрос теперь необязательно. Главное понимать эти особенности и знать об их существовании.

AkulaBig, не совсем понял вопроса на счёт IniRead и редиректа, если можно - чуть подробнее. А сборку завтра посмотрю - проценты это мы любим, как раз хотел спросить у вас "сколько там набежало?" ))
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):не совсем понял вопроса на счёт IniRead и редиректа
Сейчас я напрямую прописываю путь к инишникам:

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

Local ini_Colors = %COMMANDER_PATH% & "\Ini\Colors.ini"
Хотелось-бы брать его в wincmd.ini. Ведь не у всех инишники прописаны в редиректе по этому пути.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig, а новая функция IniGetSectionLocation для этого не подойдёт?

Да, посмотрел сборку: код на Autorun набирает объём и стройность! :D И раз уж вы решили перейти на модули, то, думаю, вам пригодится "Инженерное меню" для управления модулями Autorun! )

Проверено на вашей сборке:
[cut="Modules.aucfg"]

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

Global AUTORUN_INI = %COMMANDER_PATH% & "\Ini\Autorun.ini"

Global ExeAkel = %COMMANDER_PATH% & "\Utilities\AkelPad\AkelPad.exe"

# 77000-78000
RegisterCommand 77000 "AutorunHelp"
RegisterCommand 77001 "AutorunEnvars" 1
RegisterCommand 77002 "AutorunEnvars" 2
RegisterCommand 77003 "AutorunEnvars" 3
RegisterCommand 77009 "AutoruConfig"

RegisterCommand 77999 "AutorunMenu"

Func AutorunHelp(lParam)
    ShellExec "help_ru.chm" '' %AUTORUN_PATH% 
EndFunc

Func AutoruConfig(lParam)
    If IsPressed(0x11) Then
       CommandExec /CD:S %AUTORUN_INI%
    Else   
       ShellExec /SW_SHOWNORMAL %ExeAkel% ' %AUTORUN_INI%'
    EndIf
EndFunc

Func AutorunMenu(lParam)
    AutorunModules
    ModuleMenu
EndFunc

Func AutorunEnvars(lParam, wParam)
    Local h = 0
    Local Vars = (wParam = 2 ? GetState("envvars") : GetState("vars"))
    If wParam < 3 Then 
       ClipPut(Vars)
    Else
       ClipPut(GetState("libs"))        
    EndIf    
    h = WinFind(0, "AkelPad4")
    If h > 0 Then
       ShellExec /SW_SHOWNORMAL %ExeAkel% '/Command(4101) /Command(4155) /Call("Scripts::Main", 1, "GoHome.vbs")'
    Else 
       ShellExec /SW_SHOWNORMAL %ExeAkel% '/Command(4155) /Call("Scripts::Main", 1, "GoHome.vbs")'
    Endif        
EndFunc

Global aModuleName = List()

RegisterCommand 77010 "ModuleMenuItem" 0
RegisterCommand 77011 "ModuleMenuItem" 1
RegisterCommand 77012 "ModuleMenuItem" 2
RegisterCommand 77013 "ModuleMenuItem" 3
RegisterCommand 77014 "ModuleMenuItem" 4
RegisterCommand 77015 "ModuleMenuItem" 5
RegisterCommand 77016 "ModuleMenuItem" 6
RegisterCommand 77017 "ModuleMenuItem" 7
RegisterCommand 77018 "ModuleMenuItem" 8
RegisterCommand 77019 "ModuleMenuItem" 9

RegisterCommand 77020 "ModuleMenuItem" 10
RegisterCommand 77021 "ModuleMenuItem" 11
RegisterCommand 77022 "ModuleMenuItem" 12
RegisterCommand 77023 "ModuleMenuItem" 13
RegisterCommand 77024 "ModuleMenuItem" 14
RegisterCommand 77025 "ModuleMenuItem" 15
RegisterCommand 77026 "ModuleMenuItem" 16
RegisterCommand 77027 "ModuleMenuItem" 17
RegisterCommand 77028 "ModuleMenuItem" 18
RegisterCommand 77029 "ModuleMenuItem" 19

Func AutorunModules()
    Local p = GetState("paths"), j = 1, s   
    aModuleName.Count = 0   
    while 1 
       s = StrPart(p, auCRLF, j)      
       if ERROR = 1 then break
       If StrPos(s , '#') And StrRight(s, 3) ="cfg" Then
          s = StrPart(StrTrim(s), ": ", 2)
          aModuleName.Add(s)
       Endif 
       j += 1
    wend
EndFunc

Func CreateModuleMenu()
    Local i, txt, obj, lWdx = true, lines, sErr, name
    
    AucfgLines = 0
    obj = Plugin("LineBreakInfo.wdx")
    If ERROR > 0 Then
       lWdx = false
       sErr = "ERROR #" & ERROR
    Endif
 
    For i = 0 To aModuleName.Count - 1
       If lWdx Then
          obj.FileName = aModuleName[i]
          lines = obj.GetValue(5)
          AucfgLines += lines
       Else
          lines = sErr
       EndIf
       name = StrTrim(StrRight(aModuleName[i], StrLen(aModuleName[i])-StrPos(aModuleName[i], "\", -1)))
       #txt = txt & 'MENUITEM "' & StrReplace(aModuleName[i], %COMMANDER_PATH%, "") & '\t' & lines & '", 770' & 10+i & auCRLF
       txt = txt & 'MENUITEM "' & name & '\t' & lines & '", 770' & 10+i & auCRLF      
    Next
    txt = 'MENUITEM "Всего строк\t' & (AucfgLines = 0 ? '#' : AucfgLines) & '", 77000' & auCRLF & _
          'MENUITEM SEPARATOR' & auCRLF & _
          txt
    txt = txt & 'MENUITEM SEPARATOR' & auCRLF
    txt = txt & 'MENUITEM "Переменные окружения", 77002' & auCRLF
    txt = txt & 'MENUITEM "Глобальные переменные", 77001' & auCRLF
    txt = txt & 'MENUITEM "Информация о библиотеках", 77003' & auCRLF      
    txt = txt & 'MENUITEM SEPARATOR' & auCRLF
    #txt = txt & 'MENUITEM "Справка...", 77000' & auCRLF      
    txt = txt & 'MENUITEM "Настройки...", 77009' & auCRLF   
    
    If lWdx Then Free(obj)   
 
    Return txt
EndFunc   

Func ModuleMenu()
    ShowPopupMenu /D /F "CreateModuleMenu"       
EndFunc     

Func ModuleMenuItem(lParam, nItem)
    Local file, b_Ctrl = IsPressed(0x11)
 
    If aModuleName.Count = 0 Then 
       ShowHint("Массив не содержит элементов")
       Return
    EndIf   
    
    If nItem < 0 Or nItem > aModuleName.Count  Then 
       ShowHint("Выход за границы массива")
       Return
    EndIf      
 
    file = aModuleName[nItem]
        
    If b_Ctrl Then
       CommandExec /CD:S %file%
    Else   
       ShellExec /SW_SHOWNORMAL %ExeAkel% ' %file%'
    EndIf    
EndFunc     
[/cut]
Достаточно просто подключить модуль через Pragma Include и установить плагин LineBreakInfo. Уверен, результат вам понравится)
[cut="Кнопка"]

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

TOTALCMD#BAR#DATA
77999

totalcmd.exe
Autorun


-1
[/cut]
AUTORUN_INI - файл настроек Autorun, в котором храниться что угодно, если в этом есть потребность. Вызов пункта меню с CTRL осуществляет переход к файлу модуля в его каталоге. Простой вызов открывает модуль в редакторе. Если AkelPad будет ругаться на отсутствие скрипта GoHome.vbs, то:
[cut="GoHome.vbs"]

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

Set WshShell=CreateObject("WScript.shell")

WshShell.SendKeys("^{HOME}")
[/cut]
Это всего лишь пару строк для установки курсора на начало файла. Может быть в последних версиях AkelPad они это исправили, но раньше был косяк.

А сборка, конечно, растёт на глазах. И файл readme стал гораздо лучше. Думаю вам в пору дать какое-нибудь кодовое название, а то "Portable" - считай что совсем без названия. И что значит "Portable", когда сборка устанавливается на ПК через установщик? Впрочем, если вам нравится "Portable", то можно и оставить )
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig писал(а):IniRead требуется секцию ввести, соответственно IniRead(%COMMAND_INI%, "Colors", ...) не катит. Параметра-то нет.
И даже двумя способами:

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

# используя переключатель согласно стандартному синтаксису для ФЗ
IniRead("~/R", COMMANDER_INI, "Colors", ...) 

# используя IniGetSectionLocation
IniRead(IniGetSectionLocation(COMMANDER_INI, "Colors"), "Colors", ...) 
Orion9 писал(а):Но при вызове из кнопки показывает разные значения после перезапуска ТС
Уверен, что в тексте прочитанной секции были переменные %COMMANDER_PATH%...

Этот баг стоил кучу времени, но зато помог принять окончательное решение об отключении разворачивания переменных в строчных функциях в ФЗ. Так что рекомендую не привыкать к Opt, он в следующей версии будет упразднён за ненадобностью.

Причина оказалась в том, что функция StrLen возвращала неправильную длину прочитанной секции для передачи в функцию, поскольку при ее вычислении в тексте развернулись переменные, а фактическая длина строки, передаваемая в функцию была меньше. Как результат считалась CRC для буфера, превышающего размер нашей строки, а в области свыше правильного размера оказывался произвольный мусор. Отсюда и плавающие числа.

Пока что можно исправить код так:

[cut]

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

Func CRC32(string, CRC32Init = 0xFFFFFFFF)
    If AUTORUN_TCARCH = 64 Then
        Local Opcode = "48895C24084889742410574881EC00040000448BD2488BF94533C9488D1C24458BD9BE08000000418BD3418BCBD1EA" & _
                       "8BC2448BDA352083B8ED80E101440F45D848FFCE75E241FFC144891B4883C3044181F9000100007CC74585D274210FB6" & _
                       "0F418BC048FFC74833C80FB6C1418BC8448B0484C1E9084433C141FFCA75DF4C8D9C240004000041F7D0498B5B10498B" & _
                       "7318418BC0498BE35FC3CCCCCC"
    Else
        Local Opcode = "558BEC81EC00040000565333F6576A088BFE5B8BD78BCFD1EA8BC28BFA352083B8ED80E1010F45F84B75E889BCB500" & _
                       "FCFFFF4681FE000100007CD38B550C8B4D105F5B85D2741B8B75080FB60633C1C1E90825FF000000338C8500FCFFFF46" & _
                       "4A75E8F7D18BC15E8BE55DC20C00"
    EndIf
 
    Opt("FuncExpandVars", 0)

    Local OpcodeLen = StrLen(Opcode) / 2
 
    # MEM_COMMIT = 0x1000, PAGE_EXECUTE_READWRITE = 0x40   
    Local CodeBufferMemory = DllCall("VirtualAlloc", "ptr", 0, "ulong_ptr", OpcodeLen, "dword", 0x1000, "dword", 0x40, "ptr")
    If CodeBufferMemory = 0 Then Return SetError(1, 0, 0)
 
    Local OpcodeBuf = Buffer(OpcodeLen, CodeBufferMemory)
    OpcodeBuf.SetRaw(Opcode)
 
    Local Ret = DllCall(CodeBufferMemory, "wstr", string, "uint", StrLen(string) * 2, "uint", CRC32Init, "uint")
 
    DllCall("VirtualFree", "ptr", CodeBufferMemory, "ulong_ptr", 0, "dword", 0x8000) # MEM_RELEASE
    Free(OpcodeBuf)
   
   Opt("FuncExpandVars", 1)
 
    Return Ret
EndFunc
[/cut]

Как вариант вот еще функция на основе системной недокументированной функции RtlComputeCrc32:

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

Func CRC32(string)
    Opt("FuncExpandVars", 0)
    Local Ret = DllCall('ntdll.dll\RtlComputeCrc32', 'dword', 0, 'wstr', string, 'int', StrLen(string) * 2, "uint")
    Opt("FuncExpandVars", 1)
    Return Ret
EndFunc
Orion9 писал(а):Думаю, что "окончательно решать" этот вопрос теперь необязательно.
Напротив, именно теперь это обязательно.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback
Понятно. Попробую предложенные варианты. Я тут ещё, кажется, что-то нашёл. Возможно, это не связано с последними изменениями, т.к. раньше функциями реестра не приходилось пользовался настолько. В общем, код примерно такой:

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

    Local aNames = List("WincmdConnected","WincmdCopyComplete","WincmdDeleteComplete","WincmdPackComplete", _
                            "WincmdSearchComplete","WincmdTransferComplete","WincmdUnpackComplete")    
        txt = ''
        For i = 0 To aNames.Count - 1     
           key = "HKCU\AppEvents\Schemes\Apps\Wincmd\" & aNames[i] & "\.current"
           val = RegRead(key, '', '')
           txt &= aNames[i] & auTAB & val & auCRLF
        Next
        ShowHint(txt)
Считываются ключи звуковой схемы из реестра и показываются в подсказке. Но приводит к ошибке:

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

---------------------------
Ошибка плагина Autorun
---------------------------
Ошибка в файле: C:\Portable\TC 11.50\Ini\Scripts\Environment.aucfg

[490] ShowHint(txt)

Отсутствует закрывающая кавычка для строки:  WincmdConnected	C:\Portable\TC 11.50\Ini\Sounds\Операция Ы\Всё уже украдено до нас.wav
---------------------------
ОК   
---------------------------
Пробовал и просто val = RegRead(key), но не помогло.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):Но приводит к ошибке:
Поразительно. Этот баг в RegRead никто не находил более десяти лет, а тут второй репорт :) Но действительно, возможно это другие изменения спровоцировали его проявление.

Уже исправлено в рабочей версии.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):функция IniGetSectionLocation для этого не подойдёт?
Наглядный пример, как я читаю книгу, а вижу фигу :oops:
Думаете я не читал описание этой новой функции?
Все отлично сработало.
Orion9 писал(а):код на Autorun набирает объём и стройность!
А процентики-то посмотрели? Похоже я плохо объяснил. Кнопочкой на панели инструментов можно их включать и перебирать, а через файл WinTitle.ini настраивать по своему усмотрению.
.
Orion9 писал(а):пригодится "Инженерное меню"
Для пользовательской панели инструментов может и пригодиться. Надо будет поизучать.
Loopback писал(а):И даже двумя способами
Первый способ не катит. Надо вводить какой-то параметр, а он неизвестен. И даже где параметр известен, функция не работала. Видимо из-за описанного вами косяка. Не раскрывались переменные. А второй то, что нужно. С первого пинка заработало на отлично.
Loopback писал(а):Уверен, что в тексте прочитанной секции были переменные %COMMANDER_PATH%...
Да. Причем ~/R я пробовал и вызове функции и на приеме этих данных. То просто удалялось все наполнение инишника, кроме названия секции. То не удалялось, но почему-то неправильно работало. И я имею ввиду не вариант с ~/R и без него. А казалось-бы одинаковые команды с IniRead. Например:

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

Local ini_Buttonbar = %COMMANDER_PATH% & "\Ini\Buttonbar.ini"
Local ini_ButtonbarVertical = %COMMANDER_PATH% & "\Ini\ButtonbarVertical.ini"
Прекрасно работающий код. А вот этот глючный:

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

Local ini_Buttonbar = IniRead(%COMMANDER_INI%, "Buttonbar", "Buttonbar")
Local ini_ButtonbarVertical = IniRead(%COMMANDER_INI%, "ButtonbarVertical", "Buttonbar") 
Первый очищает секцию, а второй что-то непонятное делал.
При этом Output выдавал именно %COMMANDER_PATH%.
Сейчас вот такой код отлично работает:

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

Local ini_Buttonbar = IniGetSectionLocation(COMMANDER_INI, "Buttonbar")
Local ini_ButtonbarVertical = IniGetSectionLocation(COMMANDER_INI, "ButtonbarVertical")
И в Output выдает раскрытый путь из переменной.
В общем спасибо за объяснение глюка. Теперь мне все понятно.
Loopback писал(а):Пока что можно исправить код так
Я в такие дебри не полезу. Сейчас все работает и меня это полностью устраивает.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback писал(а):Уже исправлено в рабочей версии
А когда первый релиз кандидат c хотфиксами выйдет? А то без этой функции я свой "Total Sounds Control, Autorun Ed." не закончу :mrgreen:
AkulaBig писал(а):А процентики-то посмотрели? Похоже я плохо объяснил.
Да-нет, нормально вы всё объяснили. Просто пока я писал свой пост, о главном-то и забыл, как это порой бывает )

Ну, для начала в WinTitle.ini слишком много слов "нельзя" :lol: Смех смехом, а никто не любит, когда ему завязывают руки ) В идеале, ограничение должно быть только одно - на количество шаблонов (что название полей нельзя менять - и так понятно). А вот то, что нельзя менять единицы измерения - это плохо. Мне, например, не нравятся мегабайты или килобайты, да и вообще гибкости какой-то хочется.

Отсылки к справке Autorun для простого пользователя можно заменить готовыми текстовыми файлами с примерами использования. Сами файлы могут открываться через пункты меню или в прямо в посказке ShowHint. Думаю, не лишним будет прикрутить такое меню к кнопке или к заголовку, включая возможность быстрого открытия файла WinTitle.ini на редактирование в одном из пунктов.
[cut="Format.txt"]

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

   d - День месяца в виде цифр без ведущих нулей. 
  dd - День месяца в виде цифр с ведущими нулями. 
 ddd - Сокращенный день недели, например «пн». 
dddd - Полный день недели, например «Понедельник». 
   M - Месяц в виде цифр без ведущих нулей. 
  MM - Месяц в виде цифр с ведущими нулями. 
 MMM - Сокращенный месяц, например «ноя». 
MMMM - Месяц, например «November» для английского и «Ноябрь» для русского. 
   y - Год, представленный только последней цифрой. 
  yy - Год, представленный только двумя последними цифрами. Ведущий ноль добавляется. 
yyyy - Год, представленный четырьмя или пятью цифрами, в зависимости от используемого календаря. 
[/cut]
Ну и самое главное, вам нужно самому сделать набор проверенных шаблонов. Основной критерий - чтобы заголовок не сливался между своими полями и не "качался туда-сюда", т.е. чтобы у него болтался один хвост. Первая часть заголовка желательно должна быть статичной и не содержать, к примеру, процентов процессора, который в основном его и раскачивает, т.е. когда нагрузка < 10%. Стандартную дату тоже можно убрать из начала - она представляет наименьший интерес, т.к. всё-равно дублируется в часах на панели задач Windows. Вот буквенные названия дней и месяцев - это другое дело.

В общем, имхо, начало вы положили очень хорошое. Спешить-то некуда. Чем больше будете делать, тем больше идей и будет приходить, как это всегда бывает. Я свой заголовок, например, несколько месяцев делал, но тогда и в Autorun много чего небыло. Сейчас - сплошные удобства! :D
AkulaBig писал(а):Для пользовательской панели инструментов может и пригодиться. Надо будет поизучать.
Это скорее не для пользователя, а для разработчика, но вещь кошерная ))
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):А когда первый релиз кандидат c хотфиксами выйдет?
Хотфикс подразумевает критические проблемы. Пока таких вроде нет. Конечно, есть проблема с разворачиванием переменных, но это уже давняя тема.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):гибкости какой-то хочется
Люди уже и вот так просят:
Изображение
:roll:
К сожалению меня эта опция вообще не интересует. Поэтому далее пусть развивают те, кому это интересно. Все скрипты в открытом доступе.
Orion9 писал(а):Отсылки к справке Autorun для простого пользователя можно заменить готовыми текстовыми файлами с примерами использования. Сами файлы могут открываться через пункты меню или в прямо в посказке ShowHint. Думаю, не лишним будет прикрутить такое меню к кнопке или к заголовку, включая возможность быстрого открытия файла WinTitle.ini на редактирование в одном из пунктов.
Эту тему можно развить, если намекнете, как это сделать. Только не забывайте, что помимо даты есть формат и у времени.
Orion9 писал(а):Ну и самое главное, вам нужно самому сделать набор проверенных шаблонов.
Насчет времени я понял. Но не совсем понял алгоритм. Во всех шаблонах прописать словами? А то непонятно. Сейчас у меня смысл в том, что постепенно уменьшается количество инфы в заголовки. А если ее еще и разной делать, как-то не понимаю я этого.
Orion9 писал(а):Основной критерий - чтобы заголовок не сливался между своими полями и не "качался туда-сюда", т.е. чтобы у него болтался один хвост. Первая часть заголовка желательно должна быть статичной и не содержать, к примеру, процентов процессора, который в основном его и раскачивает, т.е. когда нагрузка < 10%.
Из этой фразы не понял ни одного слова. Перед процентами процессора выводится заголовок CPU. Тогда не понятно, что качается. А самое главное, что такое хвост? И еще важнее, вы косяк заметили или просто в принципе оговариваете как-бы правила?
Orion9 писал(а):А вот то, что нельзя менять единицы измерения - это плохо. Мне, например, не нравятся мегабайты или килобайты
В таких вопросах у меня все просто. Как показывает Винда, так будет и у меня. Кстати, не хочется развивать эту тему, но про виртуальную память и размер файла подкачки я вообще не понял в Autorun. У Винды эти названия называются диаметрально противоположно. А размер какой-то из этих памятей вообще непонятно что показывает.
Понятно, что это вопрос не к вам.
Orion9 писал(а):Это скорее не для пользователя, а для разработчика
Дак пользователь это я :lol: Ведь моя ПП не передается в сборке.

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

Кстати, а вы планируете обновление своей сборки в соответствии с последними изменениями? Она у меня как настольная книга. Но на данный момент не соответствующая реалиям.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback писал(а):Конечно, есть проблема с разворачиванием переменных, но это уже давняя тема.
Значит, ошибка вызова RegRead была связана с раскрытием переменных?

В общем, нашел пока обходной путь через stdout, ведь дело не может стоять на месте )

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

           cmd = "reg query " & key & " /ve"
           ProcessExecGetOutput /OEM out %COMSPEC% "/c %cmd%"          
           txt &= StrTrim(out) & auCRLF & auCRLF
Заодно проверил предложенные вами варианты:

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

Func WdxCRC()
    Local sect = IniReadSection(COMMANDER_INI, "ContentPlugins")    
    Return CRC32(sect) & auCRLF & CRC32NT(sect)
EndFunc

Func CRC32NT(string)
    Opt("FuncExpandVars", 0)
    Local Ret = DllCall('ntdll.dll\RtlComputeCrc32', 'dword', 0, 'wstr', string, 'int', StrLen(string) * 2, "uint")
    Opt("FuncExpandVars", 1)
    Return Ret
EndFunc 
Теперь обе функции отрабатывают корректно и показывают одинаковый результат. А вызов из ntdll.dll - просто прекрасная демонстрация того, каких высот достиг Autorun :)
AkulaBig писал(а):Люди уже и вот так просят
А что будет, если сам ТС во всё окно развернуть? :? Имхо, к заголовку Total Commander это отношения уже не имеет.
AkulaBig писал(а):К сожалению меня эта опция вообще не интересует. Поэтому далее пусть развивают те, кому это интересно. Все скрипты в открытом доступе
Передохните немного, вы и так потрудились на славу. За один месяц сделали больше, чем я за три ) И это при том, что вы все инишники ещё перетряхнули и своими плагинами занимались + AkelPad. Заголовок и подождать может, тем более что основное вы и так уже сделали.
AkulaBig писал(а):Эту тему можно развить, если намекнете, как это сделать. Только не забывайте, что помимо даты есть формат и у времени.
Да всё так же, как у вас меню перезагрузки сделано. Обычный bar-файл, который вызывается по CTRL. Только я не стал бы заморачиваться и сделал бы через функцию Autorun "ShowPopupMenu". А для формата времени можно и свой текстовый файл сделать и отдельный пункт меню.
AkulaBig писал(а):Но не совсем понял алгоритм. Во всех шаблонах прописать словами?
Выходит, так. Только я ещё не пробовал эти новые функции Авторан - пока не пойму, можно ли там английские имена в русскоязычной системе вызвать. Я, например, предпочитаю короткие, типа "Mon 10" или "Jan"
AkulaBig писал(а):Из этой фразы не понял ни одного слова.
Да не грузитесь, всё у вас там более-менее нормально. Я имел в виду, чтобы плотности большой у блоков не было (чтобы они не теснились) и CPU во время перехода с 9% на 10% не двигал за собой заголовок. Да сделаете со временем всё как надо, ещё не такое придумаете )
AkulaBig писал(а):Кстати, а вы планируете обновление своей сборки в соответствии с последними изменениями?
Да вроде хотел собрать все последние скрипты, как в прошлый раз. Казалось бы задача лёгкая, но как оказалось не так всё просто. Но надо поднажать в ближайшее время :)
Ответить