Autorun

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

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

Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

KopBuH писал(а):вот если бы была поддержка чтения из WMI
Не, внутреннюю поддержку этого я делать не буду.

Хотя, если модифицировать идею MVV без использования ini, можно попробовать сделать захват стандартного вывода запускаемой программы. Тогда, если сделать скрипт или экзешник, выводящие информацию в stdout, ее можно будет получать сразу в скрипте.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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

Сообщение KopBuH »

ждем функцию RegRead.
чтобы можно было выставлять тип значения - REG_DWORD REG_SZ и т.п. :)

например, так:

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

RegRead AutorunKey "HKLM\Software\TC_Autorun" "sz" "AutorunKey" "Autorun"
отсюда: переменная, путь ключа в реестре, тип значения, имя значения, значение по умолчанию.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Зачем указывать тип? Строка всегда будет возвращаться в виде строки (ololo), число - тоже в виде строки (4660 или $1234), зачем тут тип указывать? Переменные всё равно в плагине бывают только строковые, а тип параметра прекрасно возвращает функция RegQueryValueEx.
Нужны только имя переменной, адрес ключа и имя значения, ну и значение по умолчанию. В качестве параметра вижу уточнение, в какой системе возвращать число - в десятеричной или шестнадцатеричной.

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

RegRead [/HEX] <имя_переменной> <адрес_ключа> <имя_значения> [<текст_по_умолчанию>]
Параметр /HEX - чтобы возвращать число в виде $1234, а не в виде 4660, на строки влиять вообще не должен. Если вместо имени ключа заданы пустые кавычки, читать значение (По умолчанию) - впрочем, это даже реализовывать не нужно, RegQueryValueEx и так прочитает значение по умолчанию, если указано пустое имя значения.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

По поводу RegRead согласен с MVV, указание типа при чтении - излишне. Да и по остальной логике возражений нет, как-то так и я себе ее представлял.
MVV писал(а):такой функции самое место в отдельном плагине.
[s]В этом случае в плагине придется по-сути повторять функционал ShellExec. Есть ли смысл? Можно просто опционально добавить чтение потока сразу после запуска в переменную. Должно уместиться в десяток строк кода.[/s]
Нет, лучше действительно в плагин. Практически все ключи ShellExec неприменимы, а сопутствующего кода оказалось больше (перекодировка).
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Одиннадцатая бета.

Скачать

Изменения:

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

+ команда ProcessExecGetOutput в плагине Process
+ команда RegRead
Вообще процесс развития - он бесконечен, поэтому, если ничего не выплывает критического, я бы хотел сделать релиз.

Flasher
По поводу дефолтных значений ini. Я не смог повторить проблему. Сейчас логика такая: заданное дефолтное значение используется в случае, если ключ отсутствует в ini. Если ключ есть - используется его значение, в том числе пустое.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение Loopback »

Flasher
А, нашел, спасибо за наводку. Это не в IniRead ошибка была, а с операторами and/or, которые обрабатывались регистрозависимо.

Версию обновил по той же ссылке.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение KopBuH »

Loopback
вроде сделал проверку локализации ОС:

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

# Проверка локализации (языка) ОС
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 "%COMMANDER_OSLANG%"
EndIf
в принципе, всё работает, спасибо.
но иногда почему то вылазиют странные сообщения плагина при выходе из ТС.
причем не всегда :( .

и еще:
является ли такой код правильным: (переменная "%ShowHiddensOnStart%" и "%COMMANDER_ASADMIN%" уже создана)
Старый код: (10-ая бета)

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

If %ShowHiddensOnStart% = 0 Then
ElseIf %COMMANDER_ASADMIN% = 1 Then
  ShellExec /EV "%COMMANDER_PATH%\Macroses\nircmd%COMMANDER_ARCH%.exe" "win show class TTOTAL_CMD"
Else
EndIf
Новый код: (11-ая бета)

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

If %ShowHiddensOnStart% = 0 Then
ElseIf %COMMANDER_ASADMIN% = 1 Then
  ShellExec /EV "%COMMANDER_PATH%\Macroses\nircmd%COMMANDER_ARCH%.exe" "win show class TTOTAL_CMD"
EndIf
как видите, там я удалил строку else, поскольку ничего выполнять не нужно. вроде пока проблем не наблюдаю. или else всё же должна быть?. (сообщения об ошибках исчезли вроде именно после того, как я везде убрал эту else. но в 10-ой бетке такого не наблюдалось )


P.S.: Loopback, добавил бы в autorun.example.cfg пару примеров работы с RegRead
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher писал(а):Про stdout пока не думал. Есть какие-то идеи? Что там из полезного окромя cmd у нас выводит?
В первую очередь - cscript. Для меня - Autoit, конечно.

Ну вот, например, очень специфический запрос KopBuH по получению SID. Теперь его можно вытащить скриптом через WMI. Скрипт (get_sid.vbs):

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

On Error Resume Next

Set strUserName = ""
Set WshShell  = WScript.CreateObject( "WScript.Shell" )
Set WshSysEnv = WshShell.Environment( "PROCESS" )
strUserName   = WshSysEnv( "USERNAME" )

Set objWMIService = GetObject( "winmgmts://./root/CIMV2" )

Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL", &h30)

For Each objItem In colItems
	If LCase( objItem.Name ) = LCase( strUserName ) Then
		WScript.Stdout.Write objItem.SID
	End If
Next
Строка запуска в Autorun:

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

ProcessExecGetOutput SID cscript.exe "//Nologo get_sid.vbs"
SetEnv /EV USER_SID %SID%
KopBuH писал(а):но иногда почему то вылазиют странные сообщения плагина при выходе из ТС. причем не всегда
Странно, не наблюдал ничего такого странного.
KopBuH писал(а):является ли такой код правильным:
Можно в любой комбинации, минимально If..Endif.
Тут возникает другой вопрос - а зачем нужно условие%ShowHiddensOnStart% = 0, если оно ничего не делает.
KopBuH писал(а):P.S.: Loopback, добавил бы в autorun.example.cfg пару примеров работы с RegRead
Есть идеи? Нужно что-то применимое для многих.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):В первую очередь - cscript. Для меня - Autoit, конечно.
Я не думаю, что вообще есть смысл использовать скрипты для вывода потока, чтобы получить какое-то значение, записываемое в переменную среды, которое потом тем же скриптингом и будет обрабатываться. В этом нет практического смысла, на мой взгяд (если не брать какие-то совсем простые операции типа создания одноимённых папок и т.п.). Или, может, я чего не улавливаю?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher писал(а):Или, может, я чего не улавливаю?
Скрипт может менять унаследованную переменную окружения, но в родительском процессе эти изменения не отразятся.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение Loopback »

Flasher
Родительский процесс - Тотал с загруженным Autorun. Переменная окружения, созданная в Autorun, будет видна во внешнем (запускаемом из Autorun) скрипте, но не может быть им изменена. Созданная во внешнем скрипте переменная вообще не будет видна в скрипте Autorun (и в ТС).

Так что передача через stdout, на мой взгляд, самый простой и удобный способ передать информацию в Autorun.
Ответить