Страница 44 из 243
Добавлено: Пн дек 24, 2012 22:00
Loopback
KopBuH писал(а):вот если бы была поддержка чтения из WMI
Не, внутреннюю поддержку этого я делать не буду.
Хотя, если модифицировать идею MVV без использования ini, можно попробовать сделать захват стандартного вывода запускаемой программы. Тогда, если сделать скрипт или экзешник, выводящие информацию в stdout, ее можно будет получать сразу в скрипте.
Добавлено: Пн дек 24, 2012 23:15
MVV
Loopback, такой функции самое место в отдельном плагине.
А вообще, не думаю, что такая уж и проблема выдать результат в инишник во временной папке... на то она и временная.
Добавлено: Ср дек 26, 2012 20:40
KopBuH
ждем функцию RegRead.
чтобы можно было выставлять тип значения - REG_DWORD REG_SZ и т.п.
например, так:
Код: Выделить всё
RegRead AutorunKey "HKLM\Software\TC_Autorun" "sz" "AutorunKey" "Autorun"
отсюда: переменная, путь ключа в реестре, тип значения, имя значения, значение по умолчанию.
Добавлено: Ср дек 26, 2012 22:20
MVV
Зачем указывать тип? Строка всегда будет возвращаться в виде строки (
ololo), число - тоже в виде строки (
4660 или
$1234), зачем тут тип указывать? Переменные всё равно в плагине бывают только строковые, а тип параметра прекрасно возвращает функция
RegQueryValueEx.
Нужны только имя переменной, адрес ключа и имя значения, ну и значение по умолчанию. В качестве параметра вижу уточнение, в какой системе возвращать число - в десятеричной или шестнадцатеричной.
Код: Выделить всё
RegRead [/HEX] <имя_переменной> <адрес_ключа> <имя_значения> [<текст_по_умолчанию>]
Параметр
/HEX - чтобы возвращать число в виде
$1234, а не в виде
4660, на строки влиять вообще не должен. Если вместо имени ключа заданы пустые кавычки, читать значение
(По умолчанию) - впрочем, это даже реализовывать не нужно,
RegQueryValueEx и так прочитает значение по умолчанию, если указано пустое имя значения.
Добавлено: Чт дек 27, 2012 11:49
Loopback
По поводу RegRead согласен с MVV, указание типа при чтении - излишне. Да и по остальной логике возражений нет, как-то так и я себе ее представлял.
MVV писал(а):такой функции самое место в отдельном плагине.
[s]В этом случае в плагине придется по-сути повторять функционал ShellExec. Есть ли смысл? Можно просто опционально добавить чтение потока сразу после запуска в переменную. Должно уместиться в десяток строк кода.[/s]
Нет, лучше действительно в плагин. Практически все ключи ShellExec неприменимы, а сопутствующего кода оказалось больше (перекодировка).
Добавлено: Пт дек 28, 2012 18:22
Loopback
Одиннадцатая бета.
Скачать
Изменения:
Код: Выделить всё
+ команда ProcessExecGetOutput в плагине Process
+ команда RegRead
Вообще процесс развития - он бесконечен, поэтому, если ничего не выплывает критического, я бы хотел сделать релиз.
Flasher
По поводу дефолтных значений ini. Я не смог повторить проблему. Сейчас логика такая: заданное дефолтное значение используется в случае, если ключ отсутствует в ini. Если ключ есть - используется его значение, в том числе пустое.
Добавлено: Пт дек 28, 2012 18:37
Flasher
Loopback
Т.е.
такой код у тебя работает?
Новую пока не качал..
Добавлено: Пт дек 28, 2012 20:43
Loopback
Flasher
А, нашел, спасибо за наводку. Это не в IniRead ошибка была, а с операторами and/or, которые обрабатывались регистрозависимо.
Версию обновил по той же ссылке.
Добавлено: Сб дек 29, 2012 13:41
Flasher
Loopback
Сейчас порядок. Можно релизить. Отдельное мерси за RegRead, начинаю уже прикручивать.

Про stdout пока не думал. Есть какие-то идеи? Что там из полезного окромя cmd у нас выводит?
Добавлено: Сб дек 29, 2012 14:41
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
Добавлено: Вс дек 30, 2012 20:02
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
Есть идеи? Нужно что-то применимое для многих.
Добавлено: Вс дек 30, 2012 20:13
Flasher
Loopback писал(а):В первую очередь - cscript. Для меня - Autoit, конечно.
Я не думаю, что вообще есть смысл использовать скрипты для вывода потока, чтобы получить какое-то значение, записываемое в переменную среды, которое потом тем же скриптингом и будет обрабатываться. В этом нет практического смысла, на мой взгяд (если не брать какие-то совсем простые операции типа создания одноимённых папок и т.п.). Или, может, я чего не улавливаю?
Добавлено: Вс дек 30, 2012 20:21
Loopback
Flasher писал(а):Или, может, я чего не улавливаю?
Скрипт может менять унаследованную переменную окружения, но в родительском процессе эти изменения не отразятся.
Добавлено: Вс дек 30, 2012 20:30
Flasher
Loopback
Какой процесс в данном случае понимается под родительским, и какие изменения должны на нём отражаться?
Добавлено: Вс дек 30, 2012 21:09
Loopback
Flasher
Родительский процесс - Тотал с загруженным Autorun. Переменная окружения, созданная в Autorun, будет видна во внешнем (запускаемом из Autorun) скрипте, но не может быть им изменена. Созданная во внешнем скрипте переменная вообще не будет видна в скрипте Autorun (и в ТС).
Так что передача через stdout, на мой взгляд, самый простой и удобный способ передать информацию в Autorun.