Autorun

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

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

AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

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

Сообщение Orion9 »

AkulaBig
Если бы меня попросили придумать лозунг Autorun, я не колебался бы ни секунды:
[cut]Сделаем Total Commander снова великим :mrgreen:[/cut]
Идти нужно в ногу со временем. Возможно, раньше это и был простой "Автозапуск", о чем и говорит само имя плагина, но это было давно. Сейчас Autorun - это фактически полноценный, мощный скриптовый язык с интеграцией и ориентацией на ТС. Писать на нем скрипты - одно удовольствие. Ограничений практически никаких - лишь собственный полет фантазии. Я изменил немного скрипт и дополнил его, посмотрите какая красота получается:

[cut]

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

Global MI_PARAMS = " --Language=file://ru.csv", MI_NUM = 1, MI_LOCK = 0

ControlSetMouseAction /L /K:C 3 SetMIParams
SetHotkeyAction /V:20 SetBigHintLock 1
SetHotkeyAction /K:S /V:20 SetBigHintLock 2

Func SetBigHintLock(lParam)
   If MI_LOCK > 0 Then 
      MI_LOCK = 0
   Else
      MI_LOCK = 1
   Endif  
   If lParam = 2 Then MI_LOCK = 2
EndFunc

Func SetMIParams()

   MI_NUM = MI_NUM + 1
   If MI_NUM > 4 Then MI_NUM = 1
   
   Switch MI_NUM
   Case 1
     MI_PARAMS = " --Language=file://ru.csv"
   Case 2
     MI_PARAMS = " --Complete=1 --Language=file://ru.csv"
   Case 3
     MI_PARAMS = " --Complete=0"
   Case 4
     MI_PARAMS = " --Output=file://hint.txt"       
   EndSwitch
   ShowHint("Параметры MediaInfo: " & MI_PARAMS)
   
EndFunc

Func BigHint(FileName, FieldIndex, UnitIndex)
   
   Local b_SHIFT = IsPressed (0x10), b_CTRL = IsPressed (0x11), b_ALT = IsPressed (0x12), sParams
      
   Static pipe, line = 0
          sMI = %COMMANDER_PATH% & "\Plugins\arc\MediaInfo\MediaInfo.exe", _
          pMI = %COMMANDER_PATH% & "\Plugins\arc\MediaInfo\" 
          
          sET = %COMMANDER_PATH% & "\Plugins\wlx\ExifToolView\exiftool.exe", _
          pET = %COMMANDER_PATH% & "\Plugins\wlx\ExifToolView\"   
                       
   If MI_LOCK = 0 And Not (b_CTRL Or b_SHIFT Or b_ALT) Then Return
   
   If MI_LOCK > 0 Then b_CTRL = 1
   
   If MI_LOCK > 1 Then b_SHIFT = 1   
       
   If FieldIndex = 1 Then
      line = 0
      If b_CTRL Then
         If StrPos(FileGetAttr(FileName), "D") Then 
            pipe = "# Каталог"
            Return pipe
         Endif   
         If b_SHIFT Then 
           # pipe = GetPluginsData(FileName) 
            ProcessExecGetOutput pipe %sET% ' -G -S "%FileName%"' %pET%
         Else
            sParams = MI_PARAMS & ' "' & FileName & '"'
            ProcessExecGetOutput /C:65001 pipe %sMI% %sParams% %pMI%
            pipe = StrMid(pipe, 1, StrLen(pipe) - 4)            
            If IsPressed (0x5B) Then
               If IsPressed (0x12) Then 
                  pipe = GetPluginsData(FileName) 
               Else
                  line = 60
               Endif   
            Endif
         Endif
      ElseIf b_ALT Then
         pipe = GetPluginsData(FileName)    
      Endif
   Endif
   
   If MI_NUM = 4 Then
      Return StrPart(pipe, auLF, FieldIndex + line)
   Else
      Return TrimSpaces(StrPart(pipe, auLF, FieldIndex + line))
   Endif
   
EndFunc

Func TrimSpaces(String)
Local a, b
   If Not StrPos(String, ":") Then Return String
   
   a = StrPart(String, ":", 1)
   b = StrPart(String, ":", 2) & StrPart(String, ":", 3)
   
   Return StrTrim(a) & ":  " & StrTrim(b)
   
EndFunc

Func GetPluginsData(FileName)
Local obj, streams, links, hint

   obj = Plugin("NTFSFileStreams")
   If ERROR = 0 Then
      obj.FileName = FileName
      streams = StrFormat("%.0f", obj.GetValue(1))
      hint = "Потоков: " & streams     
      If streams > 0 Then 
         hint = hint & auCRLF & "Имена потоков: " & obj.GetValue(3)
         hint = hint & auCRLF & "Размер потоков: " & SizeFormat(obj.GetValue(5), 1, "K", 2) 
      Endif           
      Free(obj)
   Else
      hint = "WDX Error " & ERROR
   Endif
   
   obj = Plugin("NTLinks")
   If ERROR = 0 Then
      obj.FileName = FileName
      links = StrFormat("%.0f", obj.GetValue(0))
      hint  = hint & auCRLF & "Жестких ссылок: " & links      
      If links > 1 Then 
         hint = hint  & auCRLF & StrReplace(obj.GetValue(7), ", ", auCRLF)
      Endif   
      Free(obj)
   Else
      hint = hint & auCRLF & "WDX Error " & ERROR
   Endif
      
   Return hint
EndFunc
[/cut]
Теперь подсказку можно залочить по CapsLock или Shift+CapsLock, чтобы не держать постоянно Ctrl или Shift. Комбинация Ctrl+Click по активной панели меняет параметры MediaInfo. Файл hint.txt задает формат вывода для MI и должен быть в том же каталоге:
[cut]General;Name: %FileName%.%FileExtension%\r\nSize: %FileSize/String4%\r\n[Duration: %Duration%]\r\n[Duration: %Duration/String1%]\r\n[Duration: %Duration/String5%]\r\n[General: %BitRate/String%][(%BitRate_Mode%)][, %Format%][(%Format/Family%)]$if(%Cover%,\, Cover)[, %Width%x%Height%pix][, AR:%AspectRatio%=~%AspectRatio/String%][, %Channel(s)%ch][, %Resolution/String%][, %FrameRate/String%][, %SamplingRate/String%][, %Bits-(Pixel*Frame)%bpf][, %Language%]\r\n

Video;Video #%StreamKindID%: [%Width%x%Height%pix][, AR:%AspectRatio%=~%AspectRatio/String%][, %Resolution/String%][, %FrameRate/String%][, %BitRate/String%][(%BitRate_Mode%)][, %Bits-(Pixel*Frame)%bpf][, %Format%][(%Format/Family%)][, %Language%][, %Channel(s)%ch][, %SamplingRate/String%]\r\n

Audio;Audio #%StreamKindID%: [%Channel(s)%ch][, %Resolution/String%][, %SamplingRate/String%][, %BitRate/String%][(%BitRate_Mode%)][, %Format%][(%Format/Family%)][, %Format_Profile%][, %Language%][, %Width%x%Height%pix][, AR:%AspectRatio%=~%AspectRatio/String%][, %FrameRate/String%][, %Bits-(Pixel*Frame)%bpf]\r\n
;
Text;Text #%StreamKindID%: %Format%[(%Format/Family%)][@%Language%][, %StreamSize/String4%][, %BitRate/String%][(%BitRate_Mode%)][, %Width%x%Height%pix][, AR:%AspectRatio%=~%AspectRatio/String%][, %Channel(s)%ch][, %Resolution/String%][, %FrameRate/String%][, %SamplingRate/String%][, %Bits-(Pixel*Frame)%bpf]\r\n

Chapters;Chapters #%StreamKindID%: %Format%[(%Format/Family%)][@%Language%][, %Total% entries][, %StreamSize/String4%][, %BitRate/String%][(%BitRate_Mode%)][, %Width%x%Height%pix][, AR:%AspectRatio%=~%AspectRatio/String%][, %Channel(s)%ch][, %Resolution/String%][, %FrameRate/String%][, %SamplingRate/String%][, %Bits-(Pixel*Frame)%bpf]\r\n
;
Image;Image #%StreamKindID%: [%Width%x%Height%pix][, AR:%AspectRatio%=~%AspectRatio/String%][, %Resolution/String%][, %FrameRate/String%][, %StreamSize/String4%][, %BitRate/String%][(%BitRate_Mode%)][, %Bits-(Pixel*Frame)%bpf][, %Format%][(%Format/Family%)][, %Language%][, %Channel(s)%ch][, %SamplingRate/String%]\r\n
;
Menu;Menu #%StreamKindID%: [%MenuID/String%][, %Duration% Format:%Format/String%][/cut]
Ну еще к exiftool путь нужно указать.
[cut]Подсказка - шик просто )[/cut]
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig
Кстати, в Autorun есть и своя подсказка, которую можно не только отображать, но и задавать ей другие стили. Вот пара примеров (вызов по F11 и Ctrl+F11):

[cut]

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

SetHotkeyAction /H:F11 TridHint 0
SetHotkeyAction /K:C /H:F11 ShowConsoleHint

Func TridHint(lParam)
Local p, n, f, stdout, line, hint, i = 1
   
    Static trid = %COMMANDER_PATH% & "\Plugins\wdx\TrID\TrID\trid.exe"
 
    If Not FileExist(trid) Then   
       ShowHint("Не найден " & trid)
       Return 
    Endif

    p = RequestCopyDataInfo("SP")
    n = RequestCopyDataInfo("SN")
    f = p & n
    
    If Not FileExist(f) Then 
       ShowHint("Файл не существует " & f)
       Return 
    Endif
    
    If StrPos(FileGetAttr(f), "D") Then
       ShowHint("Каталог")
       Return 
    Endif
    
    ShowHint("Analyzing...")
    
    ProcessExecGetOutput stdout %trid% '"%f%"'
 
    while 1 
       line=StrPart(stdout, auCRLF, i)
       If ERROR = 1 Then Break
       If StrLen(StrTrim(line)) = 0 Then
          i = i + 1
          Continue
       Endif
       hint = hint & auCR & line
       i = i + 1
    Wend
    
   ShowHint(StrMid(hint, 2))
EndFunc

Func ShowConsoleHint()
Local f, p, n, out, hint, i
Local uwdx = %COMMANDER_PATH% & "\Plugins\uwdx\uwdx.exe"
 
    If Not FileExist(uwdx) Then   
       ShowHint("Не найден " & uwdx)
       Return 
    Endif
   
    p = RequestCopyDataInfo("SP")
    n = RequestCopyDataInfo("SN")
    f = p & n
    
    If Not FileExist(f) Then 
       ShowHint("Файл не существует " & f)
       Return 
    Endif
    
    SetHintParam("ShowHint", "Font", 9, "Consolas")
    SetHintParam("ShowHint", "BackColor", 0x000000)
    SetHintParam("ShowHint", "Text", 0xFFFFFF)
    
    ShowHint("Analyzing...")
       
    ProcessExecGetOutput /OEM icacls %COMSPEC% "/c icacls ""%f%"" /q" %p%
    icacls = StrReplace(icacls, f)
    i=1
    while 1 
       line = StrPart(icacls, auLF, i)
       If ERROR = 1 Then Break       
       out = out & StrTrim(line) & auLF
       i = i + 1
    Wend    

    ProcessExecGetOutput /C:1251 links %uwdx% "/C:1251 /E /I /X:Obj_RealPath /X:Obj_RealSize NTLinks.wdx ""%f%"""
    out = out & "+" & auLF & links
    
    ProcessExecGetOutput stream %uwdx% "/C:1251 /I NTFSFileStreams.wdx ""%f%"" ""Streams Count"""
    If stream > 0 Then
       ProcessExecGetOutput streams %uwdx% "/C:1251 /I /E /X:8 /X:9 NTFSFileStreams.wdx ""%f%"""
    Else
       streams = "-------- No NTFS Streams -------- "
    EndIf
    out = out & auLF & streams   
    
    ProcessExecGetOutput /C:1251 filex %uwdx% "/C:1251 /E /I /X:2 /X:8 /X:9 /X:10 /X:11 /X:12 /X:19 /X:20 /X:21 /X:22 FileX.wdx ""%f%"""
    out = out & auLF & filex
    i=1
    while 1 
       line=StrPart(out, auLF, i)
       If ERROR = 1 Then Break
       If StrLen(StrTrim(line)) = 0 Or StrPos(line, 'All non-empty') > 0 _
                                    Or StrPos(line, 'не удалось') > 0 Or StrPos(line, '    All') > 0 Then
          i = i + 1
          Continue
       Endif
       hint = hint & line & auLF
       i = i + 1
    Wend
 
    i = StrLen(hint) - 2
    ShowHint(StrMid(hint, 1, i))
    Sleep(1000)

    SetHintParam("ShowHint", "Reload")

EndFunc
[/cut]
Переделал сейчас эти две функции под новые реалии: c RequestCopyDataInfo смотрится очень аккуратно и приятно для глаз, но вторую функцию еще надо дорабатывать или вовсе переделывать, пока это только демо.

В общем, Autorun - это больше, чем плагин. Почитав последнюю справку к нему, я просто прифигел сколько новых возможностей было добавлено. Считаю, что иметь навыки программирования и не пользоваться этими возможностями - это просто преступление против ТС :mrgreen:
AkulaBig писал(а):Вот времени и нет. Тем более мне надо очень много времени, чтобы с чем-то разобраться.
Не займет долго, главное - начать. Оглянуться не успеете, как начнете клепать функции на Autorun как горячие пирожки для своей сборки :lol:
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback
Вызов функции ProcessCount("TOTALCMD") не находит 64-битные процессы TOTALCMD64, так и должно быть? Пока пришлось сложить значения:

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

tc = ProcessCount("TOTALCMD.EXE") + ProcessCount("TOTALCMD64.EXE")
В справке говорится про ключ /F (поиск по полному имени процесса), имеется ввиду полный путь?

P.S.

А тем временем, еще одна демо-зарисовка на тему цвета фона:

[cut]

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

# массивы значений
Global aColorsList  = List(7566195, 7497811, 9865603, 8483950, 8421230)
Global aColorsList2 = List(7566195, 7497811, 9865603, 9602431, 8421230)

# начальный фон
Global ColorStart, ColorStart2

IniRead /R ColorStart %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R ColorStart2 %COMMANDER_INI% "Colors" "BackColor2" -1

# добавление начального фона к массивам
aColorsList.Add(ColorStart)
aColorsList2.Add(ColorStart2)

# вызов функции по Alt+Click на панелях
ControlSetMouseAction /L /K:A 3 SetColorNum 0
ControlSetMouseAction /L /K:A 4 SetColorNum 0

# вызов функции по коду из кнопки
RegisterCommand 70040 "SetColorNum"

Func SetColorNum(lParam)
Local bkg1, bkg2, blue, green, red, txt

   # индекс цвета в массиве
   Static ColorIndex = -1
         
   ColorIndex = ColorIndex + 1
   If ColorIndex > aColorsList.Count - 1 Then ColorIndex = 0
   
   bkg1 = aColorsList[ColorIndex]
   bkg2 = aColorsList2[ColorIndex]   

   # запись значений   
   IniWrite /R %COMMANDER_INI% "Colors" "BackColor" %bkg1%
   IniWrite /R %COMMANDER_INI% "Colors" "BackColor2" %bkg2%
   
   # обновление панелей
   SendCommand 2957
   SendCommand 2957   
   
   txt = "Фон " & ColorIndex + 1 & " из " &  aColorsList.Count & auLF & "Значение: " & bkg1
   
   if bkg1 = -1 then bkg1 = 1*255 + 256*255 + 65536*255
   
   blue = floor(bkg1/65536)
   green = bkg1 - (blue * 65536)
   green = floor(green/256)
   red = bkg1 - (blue * 65536) - (green * 256)
   
   txt = txt & auLF & "Красный: " & red & auLF & "Зелёный: " & green & auLF & "Синий: " & blue   
   
   ShowHint(txt)

EndFunc
[/cut]
Переключение цвета панелей в стиле Хищника :lol:

[cut]Ну вот, сбылась еще одна мечта, и объект List получил свою обкатку)[/cut]
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):так и должно быть?
Конечно. Определение идет по имени процесса, а имена у них разные.
Orion9 писал(а):имеется ввиду полный путь?
Да, полный путь к файлу процесса.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Версия Autorun 2.2.15 beta

[cut="Список изменений"]
+ Runtime: добавлена GetSelectedItems
- переменную цикла For..Next нельзя было изменить изнутри цикла
+ в вывод GetState по библиотекам добавлена дата компиляции
* убраны лишние переводы строк в GetState
- исправлено экранирование кавычек в строчных значениях в выражениях
- исправлена работа с вычисляемыми строками в параметрах для RegisterCommand, RunThread
* Tweaks: для совместимости добавлен переключатель /CM ((CSMA, SHA, SMA)
* Tweaks: изменена работа с вычисляемыми строками в параметрах вызываемой функции (CSMA, SHA, SMA)
+ Runtime: в RequestInfo добавлены идентификаторы 11001-11012
+ Process: ProcessExecGetOutput может получать вывод в заданной кодировке
+ Process: функции ProcessGetPath, ProcessGetId
+ Process: ряд функций могут принимать не только имя процесса, но и PID
- для Plugin исправлена "ошибка 3" при наличии только ANSI-версии ContentGetValue
+ Runtime: добавлены WinFromPoint, WinGetPID, WinGetHandleByPID, MouseSetPos
- Tweaks: SetHintParam менял размер шрифта при несуществующем имени параметра
- Runtime: исправлена обрезка длинного текста в параметрах
- ModifyDialog: исправлено падение в некоторых ситуациях
+ функция ShellExec возвращает PID запущенного процесса в EXTENDED
+ Runtime: добавлено получение границ прямоугольника в функции GetCurrentItem
- Runtime: WinGetText/WinSetText не работали с контролами в другом приложении
+ Tweaks: в ShowPopupMenu добавлены параметры X, Y
+ Tweaks: в ShowPopupMenu добавлен флаг расположения меню возле текущего объекта в активной панели
+ в функцию GetState добавлено получение списка переменных окружения
+ экспериментально: метод вычисления And/Or по "короткой схеме"
* небольшие оптимизации парсера
+ добавлен тернарный оператор ?:
+ добавлен параметр в MsgBox для управления внешним видом и поведением
- попытка исправить нестабильное появление сообщений об ошибках в x64
+ API: для функции плагина возможность увеличить буфер по запросу
+ добавлены составные операторы присваивания: +=, -=, *=, /=, &=
- Runtime: исправления в значениях error WinGetState
+ добавлены предварительные версии китайского перевода и справки (спасибо "Party")
[/cut]

В этом релизе есть одно изменение, которое можно назвать критическим (хотя сомневаюсь, что это затронет большую аудиторию).

Если кто-то использует вычисляемые строки в параметрах вызываемой функции в функциях ControlSetMouseAction, SetHotkeyAction и SetMessageAction, то теперь они вычисляются единоразово при вызове этих функций, а не при вызове вызываемой функции. Это был давний баг, который считался в некотором роде "фичей", однако недавно обнаружилось, что он влечёт за собой критическую проблему с использованием переменных в параметрах. Поэтому он был исправлен, но в силу давности бага был добавлен режим совместимости, который можно включить переключателем /CM.

По аналогии были исправлены и RegisterCommand с RunThread, но без возможности возврата.

Также в справку была добавлена библиотека примеров. Очень предварительная, структура, категории - всё может измениться. Большая часть из них за авторством Flasher, если по ним возникнут вопросы - задавайте их ему напрямую через англоязычный форум.
Последний раз редактировалось Loopback Ср дек 04, 2024 10:51, всего редактировалось 3 раза.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback
Эх, чуть-чуть не успел к релизу... Была парочка пожеланий, но теперь до следующего раза придется ждать.

Очень не помешала бы константа по типу AUTORUN_PATH, но только хранящая путь к подключенному файлу конфигурации, т.е. например, если подключен %COMMANDER_PATH%\Ini\Wdx\Hints.aucfg, то, скажем, AUTORUN_MODULE_PATH возвращала бы путь к каталогу этого модуля. Это облегчило бы жизнь в ряде ситуаций.

Еще хотелось бы посылать нажатия клавиш, т.е. иметь аналог SendKeys.

В Ini-файлах хотелось бы считывать и записывать сразу всю секцию или иметь отдельную функцию, которая включал бы ее или выключала, ставя/убирая перед ней минус.

Надо в будущем записывать все идеи. Иногда что-то замечаешь такое незначительное, но потом забываешь :)

А за релиз спасибо! Завтра уже хочу пробовать новый оператор )
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):Очень не помешала бы константа по типу AUTORUN_PATH, но только хранящая путь к подключенному файлу конфигурации, т.е. например, если подключен %COMMANDER_PATH%\Ini\Wdx\Hints.aucfg, то, скажем, AUTORUN_MODULE_PATH возвращала бы путь к каталогу этого модуля. Это облегчило бы жизнь в ряде ситуаций.
И чтобы AUTORUN_MODULE_PATH возвращала свой путь внутри каждого модуля, так?

Так вот, это сделать невозможно, потому что "модули" не исполняются изолированно, технически после препроцессинга все подключаемые файлы объединяются в единый скрипт.
Orion9 писал(а):Еще хотелось бы посылать нажатия клавиш, т.е. иметь аналог SendKeys.
В планах, но с низким приоритетом. Для этого есть TCFS2 или Autoit/AHK.
Orion9 писал(а):В Ini-файлах хотелось бы считывать и записывать сразу всю секцию или иметь отдельную функцию, которая включал бы ее или выключала, ставя/убирая перед ней минус.
Над секцией целиком в принципе можно подумать. Ставить/убирать минус - хотя это по-сути переименование, технически это будет запись новой секции с удалением старой.
Orion9 писал(а):Надо в будущем записывать все идеи.
Конечно. Интересные идеи сразу записываются в todo. Правда, потом там могут лежать годами :)
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback писал(а):Также в справку была добавлена библиотека примеров. Очень предварительная, структура, категории - всё может измениться. Большая часть из них за авторством Flasher, если по ним возникнут вопросы - задавайте их ему напрямую через англоязычный форум.
Я понял:
[cut]Растут лимоны на высоких горах, на крутых берегах, на крутых... Короче, ты не достанешь :mrgreen:[/cut]
Смотрю, он там опять все расписал как с куста, ну и сколько это будет продолжаться?
[cut]CaptainFlint, как на счет амнистии в 2025-ом году? :) По-моему, неплохая иея и неплохой подарок к Новому Году от дедушки Админа )[/cut]
Изменений действительно много, вечером напишу обо всем подробнее, но сейчас взялся за ProcessExecGetOutput. Еще ранее заметил, что на выходе стала появляться пустая строка в конце, но сразу разбираться не стал. Но сейчас удостоверился на фрагменте из скрипта:

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

ProcessExecGetOutput up "cscript.exe" "/nologo UpTime.vbs" %VbsPath%
OutputDebugString('"' & up & '"')
[cut="UpTime.vbs"]Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(MachineName, "root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")

For Each objOS in colOperatingSystems

dtmBootup = objOS.LastBootUpTime
dtmLastBootupTime = WMIDateStringToDate(dtmBootup)
dtmSystemUptimeSecs = DateDiff("s", dtmLastBootUpTime, Now)

intSecsTotal = dtmSystemUptimeSecs
intDays = Fix( intSecsTotal / 86400 )
intSecsRemaining = ( intSecsTotal - ( intDays * 86400 ))
intSecsTotal = intSecsRemaining
intHours = Fix( intSecsTotal / 3600 )
intSecsRemaining = ( intSecsTotal - ( intHours * 3600 ))
intSecsTotal = intSecsRemaining
intMinutes = Fix( intSecsTotal / 60 )
intSeconds = ( intSecsTotal - ( intMinutes * 60 ))

days = CStr(intDays)
lZero = ""
If intHours < 10 Then lZero = "0"
hrs = lZero + CStr(intHours)
lZero = ""
If intMinutes < 10 Then lZero = "0"
mins = lZero + CStr(intMinutes)
lZero = ""
If intSeconds < 10 Then lZero = "0"
secs = lZero + CStr(intSeconds)

Next

If days = "0" Then
'WScript.Echo "Uptime: " & hrs & ":" & mins
WScript.Echo "Uptime: " & days & "/" & hrs & ":" & mins
Else
WScript.Echo "Uptime: " & days & "/" & hrs & ":" & mins
End if

'WScript.Echo days & " days " & hrs & " hrs " & mins & " mins"

Function WMIDateStringToDate(dtmBootup)

WMIDateStringToDate = CDate(Mid(dtmBootup, 7, 2) & "/" & _
Mid(dtmBootup, 5, 2) & "/" & Left(dtmBootup, 4) _
& " " & Mid (dtmBootup, 9, 2) & ":" & _
Mid(dtmBootup, 11, 2) & ":" & Mid(dtmBootup,13, 2))

End Function[/cut]
Кодовые страницы менял, не помогло. Воспроизводится у вас проблема?

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

GetState("paths") приводит к MsgBox с заголовком "dd"
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Orion9 писал(а):GetState("paths") приводит к MsgBox с заголовком "dd"
Тоже обнаружил!
Список изменений писал(а):+ Tweaks: в ShowPopupMenu добавлен флаг расположения меню у выделенного объекта
А это о чём? В справке не нашёл...
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):Еще ранее заметил, что на выходе стала появляться пустая строка в конце, но сразу разбираться не стал.
Похоже, проблема была как раз в предыдущей версии и ProcessExecGetOutput обрезала лишнее. Потому что если запустить в консоли "cscript.exe /nologo UpTime.vbs", то видно, что после текста выводится перевод строки. ProcessExecGetOutput сам ничего не добавляет, всё что есть берётся из вывода.

На самом деле не вижу в этом проблемы, просто используйте StrTrim.
Orion9 писал(а):GetState("paths") приводит к MsgBox с заголовком "dd"
Во жеж... Обновил дистрибутив по той же ссылке.
sa писал(а):А это о чём? В справке не нашёл.
Флаг 16384 — нижняя граница курсора в активной панели.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Loopback писал(а):нижняя граница курсора в активной панели
Понял! А ведь пробовал, но тестовое меню оказалось довольно длинным - не прочувствовал разницу. А объект, кстати, может быть и не выделенным, а просто выбранным.
Loopback писал(а):Во жеж... Обновил дистрибутив по той же ссылке.
Теперь нормально!
Аватара пользователя
jentoso
Сообщения: 443
Зарегистрирован: Чт дек 20, 2007 01:36

Сообщение jentoso »

Loopback писал(а):Да, /EV когда-то использовался для включения разворачивания переменных, потом был инвертирован на /EV-. Сейчас /EV в SetEnv просто ничего не делает.
В принципе всё просто: нет в документации - нет и по факту, можно смело убирать.
Может для "красоты" из autorun.example.cfg убрать в соответствии с документацией?
# Adding current TC path to PATH environment variable
# Добавляет к переменной окружения PATH текущую папку TC
SetEnv /A /EV PATH ;%COMMANDER_PATH%
TC 11.58 combo, Windows 11 x64
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Версия Autorun 2.2.15.1 beta

- исправлена некорректная работа ветки true тернарного оператора при присваивании

Очень надеялся обойтись без хотфиксов, но такое не для тихого обновления. Удивительно, как удалось такой косяк пропустить.
jentoso писал(а):Может для "красоты" из autorun.example.cfg убрать в соответствии с документацией?
Разумеется, просто этот файл уже сто лет никто не трогал, ближе к релизу он наверняка будет существенно переписан.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback писал(а): - исправлена некорректная работа ветки true тернарного оператора при присваивании
Да вроде сработала у меня примерка )

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

vars = (lParam = 2 ? GetState("envvars") : GetState("vars"))
Вызов в подсказке:

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

If IsPressed (0x10) Then Return GetState("libs")
Все нормально отображается, но если сделать

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

ClipPut(GetState("libs"))
То при вставке из буфера наблюдается такой вывод:

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

Library #1:

    Path: C:\Portable\T 11 03\Ini\Autorun\Plugins\Autorun_Tweaks.dll

    Plugin: true

    Version: 1.2.4.0

    Build date: 01.12.2024 13:46:03

    Description: Autorun sub-plugin with functions for tweaking TC

    Handle: 0x04EC0000
В чем причина лишних строк?
+ Tweaks: в ShowPopupMenu добавлен флаг расположения меню у выделенного объекта
+ добавлены составные операторы присваивания: +=, -=, *=, /=, &=
Про ShowPopupMenu уже ответили, но в справке действительно нет, как нет и про новые операторы. Проверил пока += работает.
- для Plugin исправлена "ошибка 3" при наличии только ANSI-версии ContentGetValue
Тоже проверил, ошибки больше нет.

Добавлено спустя 13 минут:
Loopback писал(а):Так вот, это сделать невозможно, потому что "модули" не исполняются изолированно, технически после препроцессинга все подключаемые файлы объединяются в единый скрипт.
До меня потом дошло. Кстати, я уже думал ою этом летом, но забыл :lol:
Loopback писал(а):В планах, но с низким приоритетом. Для этого есть TCFS2 или Autoit/AHK.
Вы просто так круто взялись за окна :) там уже столько функций разных - и найти можно, и активировать, и фокус установить - что возникает вопрос: почему бы не послать нажатия )
Loopback писал(а):Над секцией целиком в принципе можно подумать. Ставить/убирать минус - хотя это по-сути переименование, технически это будет запись новой секции с удалением старой.
Да, это фишка чисто ТС - в сборках бывает делают. Но лучше, наверное, просто секцию переименовывать, т.е. как вы и говорите - запись новой секции с удалением старой.
Ответить