Autorun

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

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

Аватара пользователя
KopBuH
Сообщения: 127
Зарегистрирован: Пт июл 02, 2010 09:21
Откуда: Tashkent, Uzbekistan

Сообщение KopBuH »

да, вот сделал пример для функции ProcessExecGetOutput:
если в конфиге много комманд, строку нужно добавлять где-то в середину конфига.
вторую строчку лучше ближе в конец конфига

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

# Получение версии ОС с помощью командной строки Windows
ProcessExecGetOutput OSVER %COMSPEC% '/c ver'

# Создание переменной содержащей версию Windows
SetEnv /EV COMMANDER_OSVER "%OSVER%"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):Это может быть связано, например, с командой получения SID, поскольку скрипт выполняется достаточно медленно. Попробуй ее перенести в самый конец секции загрузки.
Лучше просто как следует передавать поток, не давая скрипту пройти весь цикл. Делается либо указанием возвращаемых атрибутов вместо * и выходом из цикла Exit For

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

For Each Item In GetObject("winmgmts://./root/CIMV2").ExecQuery("SELECT SID FROM Win32_UserAccount where" &_
" Name='" & CreateObject("WScript.Network").UserName & "'") : WScript.Stdout.Write Item.SID : Exit For : Next
либо (что ещё лучше) напрямую с получением сида из дочернего объекта WMI:

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

With CreateObject("WScript.Network")
WScript.Stdout.Write GetObject("winmgmts:\\.\root\CIMV2:Win32_UserAccount.Domain='" & .UserDomain & "',Name='" & .UserName & "'").SID
End With
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

KopBuH писал(а):да, вот сделал пример для функции ProcessExecGetOutput:
Ок, можно будет добавить, но все что касается плагинов - только в закомментированном виде.

Flasher
Твой вариант, теоретически, более оптимален. Но ты пробовал сравнивать время отработки скрипта? Уверен, что на десятке учетных записей это будут миллисекунды. Я же при вызове cscript наблюдаю задержку минимум полсекунды. Визуально разницы между двумя вариантами не заметил. Так что скорее всего это издержки именно cscript.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback
10 учёток и 16 атрибутов - миллисекунды? Ну, не знаю. WMI сам по себе долго свою базу загружает. К тому же текущая учётка может оказаться в конце списка, как у меня, например. Мой опыт подсказывает, что это могут быть и доли секунды, при большом списке - секунда и более. Могу, конечно, накидать отладочный скрипт - проверить, но у меня нет и 10-ти учёток.
А полсекунды (да ещё и минимум) - это уже не мало, с учётом того, сколько всего в autorun-е другого вызывается. И это уже не теория.
А два варианта - какие имеешь в виду? Оба - мои? Или твой и какой-то из моих?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher
Мой и твой второй.

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

Кстати, для сравнения, команда ver отрабатывает значительно быстрее. Но все равно с заметной задержкой.
Аватара пользователя
KopBuH
Сообщения: 127
Зарегистрирован: Пт июл 02, 2010 09:21
Откуда: Tashkent, Uzbekistan

Сообщение KopBuH »

слушай, Loopback
а не мог бы ты добавить определение в переменной %AUTORUN_OSVERSION% среды Preinstallation Environment (PE), а :) ?
и еще сделать бы переменную с языком текущей ОС, например %AUTORUN_OSLANG%, хотя бы русский и английский? :roll:

сейчас я делаю это так:

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

# Проверка локализации (языка) ОС
RegRead COMMANDER_OSLANG "HKCU\Control Panel\International" "Locale" "unknown"
If %COMMANDER_OSLANG% = 00000419 Then
  SetEnv COMMANDER_OSLANG "Rus"
ElseIf %COMMANDER_OSLANG% = 00000409 Then
  SetEnv COMMANDER_OSLANG "Eng"
Else
  SetEnv COMMANDER_OSLANG "Unknown"
EndIf
а коды языков можно взять здесь:
http://www.science.co.il/language/locale-codes.asp
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

KopBuH писал(а):а не мог бы ты добавить определение в переменной %AUTORUN_OSVERSION% среды Preinstallation Environment (PE), а ?
Если это можно определить программно. Я поискал - что-то не нашел ничего полезного.
KopBuH писал(а):сейчас я делаю это так:
И чем же плох способ? Вполне корректно и надежно. Ну я понимаю еще, если бы способа не было или он был запредельно сложный.

Если я сделаю такую переменную, то язык она будет содержать только в виде, который можно получить напрямую: либо код языка (en, ru), либо его LSID (00000419). Потому что
KopBuH писал(а):хотя бы русский и английский
такой вариант неприемлем.
Аватара пользователя
KopBuH
Сообщения: 127
Зарегистрирован: Пт июл 02, 2010 09:21
Откуда: Tashkent, Uzbekistan

Сообщение KopBuH »

Loopback писал(а): И чем же плох способ? Вполне корректно и надежно. Ну я понимаю еще, если бы способа не было или он был запредельно сложный.

либо код языка (en, ru), либо его LSID (00000419). Потому что
KopBuH писал(а):хотя бы русский и английский
такой вариант неприемлем.
LSID подойдет.
только если без нолей в начале. например просто 419.
а имя переменной такое например: %AUTORUN_OSLANGID%
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):либо код языка (en, ru)
Лучше код. Его же сразу задействовать можно. LSID ни к селу, ни к городу.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
KopBuH
Сообщения: 127
Зарегистрирован: Пт июл 02, 2010 09:21
Откуда: Tashkent, Uzbekistan

Сообщение KopBuH »

Да, прямой код лучше.
но всё дело в том, что в XP код языка в реестре еще не придумали, и там есть только параметр Locale, содержащий числовой код.
вот именно поэтому я сделал универсальный вариант с числовым значением.
в Win7/8 есть параметр LocaleName содержащий строковой код, типа "ru-RU"
Loopback, глянь его здесь:
HKCU\Control Panel\International
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Не знаю точно, что там в реестре XP, но никто не пишет про получение данных из него, есть же API типа GetCPInfo, GetLocaleInfo и т.п. И никто не мешает автору программно сопоставить с ID коды языков.

Есть, кстати, и другие ветки:
HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\
HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language\
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
KopBuH
Сообщения: 127
Зарегистрирован: Пт июл 02, 2010 09:21
Откуда: Tashkent, Uzbekistan

Сообщение KopBuH »

Flasher писал(а): Есть, кстати, и другие ветки:
HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\
HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language\
такие ветки есть. и да, по второй ветке указана локализация при установке системы.
но про выше упомянутому мной ключу реестра, а именно HKCU\Control Panel\International находится код локализации именно текущего пользователя. дело в том, что сам Windows может быть английским, но локализация пользовательской среды - русской. имхо, тогда лучше определять значение из HKCU, ведь именно под ним и будет запускаться ТС.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Читать реестр я, разумеется, не буду. Для этого есть функция GetLocaleInfo. В висте и выше есть ее расширенный вариант, но ограничивать использование этими системами преждевременно.

Функция возвращает много разных значений, но здесь применимы только два: LCID (0419) или трехбуквенная аббревиатура языка (RUS). Не исключено, что последняя будет коррелировать с именами языков TC.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback
Сойдёмся на алфавитных кодах языков по ISO 639-3?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Зачем встраивать то, что элементарно реализуется 5 строчками Autorun-скрипта (благодаря функциям чтения из реестра) и за несколько лет существования плагина понадобилось 1 раз?
Ответить