Autorun

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

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

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

Сообщение Flasher »

Loopback писал(а):Созданная во внешнем скрипте переменная вообще не будет видна в скрипте Autorun (и в ТС).
Это было понятно. Я как раз к тому, что, в скрипте Autorun она не нужна будет, поскольку необходимое значение будет задействовано в тех же скриптах, в кот. и так можно его получить без специально созданной переменной среды.
Под улавливанием я подразумевал какие-то неспецифичные примеры задействования таких переменных скорее вне скриптов (т.е. касаемо кнопок/юзеркоманд, где это необходимость может возникнуть).
Если же мы говорим про переменные, требуемые исключительно при запуске ТС, то это уже другой момент, кот. тоже есть смысл обсудить в плане применения.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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

Сообщение KopBuH »

Loopback писал(а):
Строка запуска в Autorun:

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

ProcessExecGetOutput SID cscript.exe "//Nologo get_sid.vbs"
SetEnv /EV USER_SID %SID%
насколько я понял, нужно подгружать плагин Process, так?.
есть одно маленькое "но": при запуске ТС с другой рабочей папкой, отличающейся от папки ТС, например через контекстное меню проводника - скрипт берет рабочую папку оттуда, но есть решение, код такой:

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

ProcessExecGetOutput /EV /OEM COMMANDER_USERSID cscript.exe '//Nologo "%commander_path%\Macroses\get_usersid.vbs"' '%commander_path%'
естественно, вместо Macroses может быть любая папка, но тут уж люди сами разберутся, я думаю.
кстати, с помощью ProcessExecGetOutput можно очень много чего добыть :) , спасибо за скрипт по получению SID.

Добавлено спустя 24 минуты:
MVV писал(а):
Loopback писал(а):Тут возникает другой вопрос - а зачем нужно условие%ShowHiddensOnStart% = 0, если оно ничего не делает.
Полагаю, чтобы ничего не делать, если условие истинно, и выполнять какие-то действия в противном случае (внешний условный блок).
точно:).
Пример:

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

If %EncryptAdminINI% = 0 Then
ElseIf %EncryptAdminINI_withSID% = 1 Then
  ShellExec /EV /SW_HIDE '%COMMANDER_PATH%\Macroses\ccrypt.exe' '-e -v -r -s -K "%COMMANDER_USERSID%" "%commander_path%\Admin.ini"'
Else
  ShellExec /EV /SW_HIDE '%COMMANDER_PATH%\Macroses\ccrypt.exe' '-e -v -r -s -K "%USERNAME%" "%commander_path%\Admin.ini"'
EndIf
разбираем условие: если %EncryptAdminINI% равно 0, то ничего не происходит. если же отличается от 0, происходит проверка второй переменной: %EncryptAdminINI_withSID%, и если значение переменной равно 1 - то происходит запуск ccrypt.exe с ключом шифрования, взятой из переменной %COMMANDER_USERSID% (thanks to Loopback). если же значение %EncryptAdminINI_withSID% отличается от 1, то происходит запуск того же ccrypt.exe, но ключ шифрования берется уже из переменной %USENAME%.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher писал(а):Я как раз к тому, что, в скрипте Autorun она не нужна будет, поскольку необходимое значение будет задействовано в тех же скриптах, в кот. и так можно его получить без специально созданной переменной среды.
Разумеется, в этом случае не нужно. Но задача состояла как раз в том, что это значение нужно использовать в Autorun, а кроме как скриптом получить его затруднительно.

Пример KopBuH с использованием SID для шифрования вполне показателен, поскольку как я понял, это значение используется и после окончания запуска.
MVV писал(а):Полагаю, чтобы ничего не делать, если условие истинно, и выполнять какие-то действия в противном случае (внешний условный блок).
Имелось в виду, что в том конкретном примере можно было бы оба условия объединить в одно:

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

If (%ShowHiddensOnStart% <> 0) and (%COMMANDER_ASADMIN% = 1) Then 
...
EndIf
KopBuH писал(а):при запуске ТС с другой рабочей папкой, отличающейся от папки ТС, например через контекстное меню проводника - скрипт берет рабочую папку оттуда, но есть решение, код такой:
Да, для этого и сделана возможность задать рабочий каталог.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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

Сообщение KopBuH »

Loopback, приведи пожалуйста пример сравнения, если ключ в ini файле есть, но он пустой.

Скажем, вот на таком практическом примере:

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

 
If (%OfflineSystemDir% = "") OR (%OfflineSystemDir% = %SystemRoot%) Then
ElseIf FileExist "C:\Windows" Then
  SetEnv COMMANDER_OFFLINESYSTEM "C:\Windows"
ElseIf FileExist "D:\Windows" Then
  SetEnv COMMANDER_OFFLINESYSTEM "D:\Windows"
ElseIf FileExist "E:\Windows" Then
  SetEnv COMMANDER_OFFLINESYSTEM "E:\Windows"
ElseIf FileExist "F:\Windows" Then
  SetEnv COMMANDER_OFFLINESYSTEM "F:\Windows"
Else
  SetEnv /EV COMMANDER_OFFLINESYSTEM "%OfflineSystemDir%"
EndIf
предположим, что переменная %OfflineSystemDir% читается из ini файла, и файл содержит ключ, но значение там не установлено (пустое).
разбираем условие: если значение %OfflineSystemDir% или пустое, или равно с переменной %SystemRoot%, то происходит цикл проверок на наличие папки Windows на разных дисках. при первом же совпадении, эта папка устанавливается как значение переменной %OfflineSystemDir%.
если же ключ из ini файла был прочитан, и не совпадает со значением %SystemRoot% то он записывается в переменную %COMMANDER_OFFLINESYSTEM%.

Еще есть такой вопрос: как сделать так, чтобы проверка ElseIf FileExist "E:\Windows" Then проверяла так же не совпадает ли оно с %SystemRoot%?.
типа такового:

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

ElseIf (FileExist C:\Windows) AND (C:\Windows <> %SystemRoot%) Then
вот еще вариант, который я пробовал:

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

If %OfflineSystemDir% = False Then
  FileExist OfflineDirAtDriveC C:\Windows
  FileExist OfflineDirAtDriveD D:\Windows
  FileExist OfflineDirAtDriveE E:\Windows
  FileExist OfflineDirAtDriveF F:\Windows
ElseIf (%OfflineDirAtDriveC% = 1) AND (%SystemRoot% <> C:\Windows) Then
  SetEnv COMMANDER_OFFLINESYSTEM "C:\Windows"
ElseIf (%OfflineDirAtDriveD% = 1) AND (%SystemRoot% <> D:\Windows) Then
  SetEnv COMMANDER_OFFLINESYSTEM "D:\Windows"
ElseIf (%OfflineDirAtDriveE% = 1) AND (%SystemRoot% <> E:\Windows) Then
  SetEnv COMMANDER_OFFLINESYSTEM "E:\Windows"
ElseIf (%OfflineDirAtDriveF% = 1) AND (%SystemRoot% <> F:\Windows) Then
  SetEnv COMMANDER_OFFLINESYSTEM "F:\Windows"  
Else
  SetEnv /EV COMMANDER_OFFLINESYSTEM "%OfflineSystemDir%"
EndIf
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):Пример KopBuH с использованием SID для шифрования вполне показателен, поскольку как я понял, это значение используется и после окончания запуска.
Для меня пока не показателен. Сам же назвал запрос очень специфичным. Я писал про неспецифичные задачи. А то, что используется после запуска, возвращается и без участия Autorun (мы только это обсудили).
KopBuH писал(а): приведи пожалуйста пример сравнения, если ключ в ini файле есть, но он пустой.
Я же приводил.
Только надо ставить конкретное значение, как у меня False, а не пустое.

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

Сообщение KopBuH »

Flasher писал(а):
KopBuH писал(а): приведи пожалуйста пример сравнения, если ключ в ini файле есть, но он пустой.
Я же приводил.
Только надо ставить конкретное значение, как у меня False, а не пустое.
про конкретное значение я знаю, например у меня в некоторых ключах оно Unknown.
просто Loopback обещал добавить условие сравнения, если ключ в ini файле пустой. а поскольку в Readme.txt ничего не появилось, приходится писать сюда.
Flasher писал(а):А что даёт COMMANDER_OFFLINESYSTEM, чего не даст WINDIR?
я добавляю в сборку некоторые функции для работы с отключенной (оффлайн) системой: подключение оффлайн реестра, просмотр событий, анализ BSOD, выгрузка системных настроек и т.д.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение KopBuH »

Flasher писал(а):KopBuH
Что в таком случае онлайн-система? Удалённое управление?
текущая активная система.
Flasher писал(а): Реестр подключается прямиком из Autorun? Каким образом?
реестр подключается через пункт меню:
http://i52.fastpic.ru/big/2013/0102/0b/ ... 1b260b.jpg
путь к реестру задается из Autorun.
но эти вопросы (как и ответы) по-моему не по теме топика :( .
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

KopBuH писал(а):текущая активная система
Это как раз оффлайн (название сопряжено с работающей/неработающей сетью).
KopBuH писал(а):но эти вопросы (как и ответы) по-моему не по теме топика
Всё, что связано с Autorun и его примерами - по теме (по крайней мере касаемо вопросов).
KopBuH писал(а):Loopback обещал добавить условие сравнения, если ключ в ini файле пустой
Можно пруфлинк (не припомню, хотя тоже на эти грабли в своё время напоролся) ?
Последний раз редактировалось Flasher Ср янв 02, 2013 14:05, всего редактировалось 1 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

MVV писал(а):Пришлось бы писать это дополнительное условие также и в каждой ветке Else[If].
Но не для того конкретного примера :)
KopBuH писал(а):Скажем, вот на таком практическом примере:
Если нет разницы, пусто ли значение ключа, или он отсутствует совсем, то при использовании в IniRead в качестве дефолтного значения пустого значения можно сделать так:

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

If (%OfflineSystemDir% <> "") AND (%OfflineSystemDir% <> %SystemRoot%) Then
 SetEnv /EV COMMANDER_OFFLINESYSTEM %OfflineSystemDir%
ElseIf FileExist "C:\Windows" Then 
 SetEnv COMMANDER_OFFLINESYSTEM "C:\Windows" 
ElseIf FileExist "D:\Windows" Then 
 SetEnv COMMANDER_OFFLINESYSTEM "D:\Windows" 
ElseIf FileExist "E:\Windows" Then 
 SetEnv COMMANDER_OFFLINESYSTEM "E:\Windows" 
ElseIf FileExist "F:\Windows" Then 
 SetEnv COMMANDER_OFFLINESYSTEM "F:\Windows" 
EndIf
KopBuH писал(а):вот еще вариант, который я пробовал:
Так работать не будет, поскольку при первом совпадении условия, последующие условия не проверяются. Следовательно, переменные OfflineDirAtDriveC и т.д. нужно присваивать перед условием.

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

FileExist OfflineDirAtDriveC C:\Windows 
FileExist OfflineDirAtDriveD D:\Windows 
FileExist OfflineDirAtDriveE E:\Windows 
FileExist OfflineDirAtDriveF F:\Windows 

If (%OfflineDirAtDriveC% = 1) AND (%SystemRoot% <> C:\Windows) Then 
 SetEnv COMMANDER_OFFLINESYSTEM "C:\Windows" 
ElseIf (%OfflineDirAtDriveD% = 1) AND (%SystemRoot% <> D:\Windows) Then 
 SetEnv COMMANDER_OFFLINESYSTEM "D:\Windows" 
ElseIf (%OfflineDirAtDriveE% = 1) AND (%SystemRoot% <> E:\Windows) Then 
 SetEnv COMMANDER_OFFLINESYSTEM "E:\Windows" 
ElseIf (%OfflineDirAtDriveF% = 1) AND (%SystemRoot% <> F:\Windows) Then 
 SetEnv COMMANDER_OFFLINESYSTEM "F:\Windows"  
Else 
 SetEnv /EV COMMANDER_OFFLINESYSTEM "%OfflineSystemDir%" 
EndIf
Flasher писал(а):Для меня пока не показателен. Сам же назвал запрос очень специфичным. Я писал про неспецифичные задачи. А то, что используется после запуска, возвращается и без участия Autorun (мы только это обсудили).
Переменные окружения, созданные в скриптах, не могут быть использованы в TC после выхода из скрипта. Функция устраняет это ограничение для тех случаев, когда значение, которое можно получить только внешним скриптом, нужно использовать в дальнейшем в ТС.
Я не могу сейчас сходу придумать такие примеры, однако ввиду универсальности решения, применение наверняка найдется.
KopBuH писал(а):просто Loopback обещал добавить условие сравнения, если ключ в ini файле пустой. а поскольку в Readme.txt ничего не появилось, приходится писать сюда.
Так все уже давно есть, это дефолтное значение, которое записывается в переменную, если ключ отсутствует.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):нужно использовать в дальнейшем в ТС
Ты имеешь в виду те самые кнопки/юзеркоманды, о которых я писал? Без примеров как-то не ахти. :( Код не нужен, нужно простое описание.
Loopback писал(а):это дефолтное значение, которое записывается в переменную, если ключ отсутствует
Он имеет в виду, если ставить кавычки вместо значения.
IniRead COMMANDER_LANGINI %COMMANDER_INI% Configuration LanguageIni ""
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher писал(а):Ты имеешь в виду те самые кнопки/юзеркоманды, о которых я писал? Без примеров как-то не ахти.
Ну видишь ли, я сам до сих пор обходился без этого функционала. Потом появилась мысль, которая показалась перспективной, и при этом несложной в реализации. Думаю, со временем и идеи использования появятся.
Flasher писал(а): Он имеет в виду, если ставить кавычки вместо значения.
Получится пустая переменная. Ее можно проверить в условии как Var = "".
Аватара пользователя
KopBuH
Сообщения: 127
Зарегистрирован: Пт июл 02, 2010 09:21
Откуда: Tashkent, Uzbekistan

Сообщение KopBuH »

Loopback писал(а): Я не могу сейчас сходу придумать такие примеры, однако ввиду универсальности решения, применение наверняка найдется.
ладно, давай попробуем так: по идее, функция ProcessExecGetOutput запускает консольную программу, и выдает в переменную результат её работы, то есть её вывод.
можешь доработать такой пример (получение версии Windows)?:

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

ProcessExecGetOutput /EV COMMANDER_WINVER cmd.exe '/c ver'
Добавлено спустя 6 минут:
Loopback писал(а): Получится пустая переменная. Ее можно проверить в условии как Var = "".
а вот как бы не так:
ключ из ini-файла

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

WLanProfile=
Начало кода из конфига Autorun:

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

IniRead WLanProfile "%COMMANDER_PATH%\wincmd.ini" "WLan" "WLanProfile" ""
If %WLanProfile% = "" Then
...
запуск ТС:
Изображение
Ответить