|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Версия WinVer.exe и создание переменной |
|
|
[решено] Версия WinVer.exe и создание переменной
|
Пользователь Сообщения: 76 |
Профиль | Отправить PM | Цитировать Всем привет
нужна небольшая помощь профи в языке AutoIT3, а именно: скрипт, который читает версию файла WinVer.exe по такому пути: %OFFLINESYSTEM%\System32\winver.exe и создает локальную (пользовательскую) переменную %OFFLINESYSTEMVER%, опустив версию Bild'a, то есть только номер 6.0/6.1/6.2/6.3 может кто нибудь помочь?. |
|
Отправлено: 20:46, 04-07-2014 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать KopBuH91,
У меня нет переменной %OFFLINESYSTEM%, проверял на %WINDIR% $sPath = EnvGet('WINDIR');EnvGet('OFFLINESYSTEM') If Not $sPath Then Exit 1 $sVers = FileGetVersion($sPath & '\System32\winver.exe') $sVers = StringRegExpReplace($sVers, '^(\d+\.\d+).*', '$1') If @extended <> 1 Then Exit 2 ConsoleWrite($sVers & @LF) |
Отправлено: 21:39, 04-07-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать Спасибо, и если не трудно, еще один небольшой нюанс:
как бы сделать так, чтобы скрипт еще и записывал значение в реестр, например в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment параметр OFFLINESYSTEMVER в DWORD? ? |
Отправлено: 21:57, 04-07-2014 | #3 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать Цитата KopBuH91:
Можно так сделать (запишется 6100). ;~ #RequireAdmin; для записи в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment $sPath = EnvGet('WINDIR');EnvGet('OFFLINESYSTEM') If Not $sPath Then Exit 1 $sVers = FileGetVersion($sPath & '\System32\winver.exe') $sVers = StringRegExpReplace($sVers, '^(\d+\.\d+).*', '$1') If @extended <> 1 Then Exit 2 ConsoleWrite($sVers & @LF) RegWrite('HKEY_CURRENT_USER\Environment', 'OFFLINESYSTEMVER', 'REG_DWORD', $sVers * 1000) If @error Then Exit 3 $sVers = '6.1' $aVers = StringSplit($sVers, '.') $bVers = BitOR(BitShift($aVers[1], -8), $aVers[2]) ConsoleWrite($bVers & @TAB & '0x' & Hex($bVers, 4) & @LF) |
|
Последний раз редактировалось madmasles, 05-07-2014 в 06:32. Отправлено: 22:09, 04-07-2014 | #4 |
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать ок, неподумал, что походу REG_SZ подходит лучше.
примерно так: ;~ #RequireAdmin; для записи в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment $sPath = EnvGet('WINDIR');EnvGet('OFFLINESYSTEM') If Not $sPath Then Exit 1 $sVers = FileGetVersion($sPath & '\System32\winver.exe') $sVers = StringRegExpReplace($sVers, '^(\d+\.\d+).*', '$1') If @extended <> 1 Then Exit 2 ConsoleWrite($sVers & @LF) RegWrite('HKEY_CURRENT_USER\Environment', 'OFFLINESYSTEMVER', 'REG_SZ', $sVers) Run(@ComSpec & ' /C SETX OFFLINESYSTEMVER & $sVers"', '', @SW_HIDE) If @error Then Exit 3 теперь как бы сделать так, чтобы запущенный с параметром /auto скрипт, вместо конкретно заданной переменной (WINDIR,OFFLINESYSTEM), перебирал диск, начиная с C: (но пропуская X: ) и дальше, и при наличии папки Windows, использовал её вместо переменной? |
|
Последний раз редактировалось KopBuH91, 05-07-2014 в 08:37. Отправлено: 08:14, 05-07-2014 | #5 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать Цитата KopBuH91:
#include <Array.au3>;нужен только для отладки (показать массив $aWinVers _ArrayDisplay($aWinVers) Global $aWinVers[24], $sDrive If $CmdLine[0] Then If StringRegExp($CmdLineRaw, '(?<=^|\x{20})([''"]{0,1}/auto[''"]{0,1})(?=\x{20}|$)') Then For $i = 67 To 90 If $i = 88 Then ContinueLoop $sDrive = Chr($i) If FileExists($sDrive & ':\Windows\System32\winver.exe') Then $aWinVers[0] += 1 $aWinVers[$aWinVers[0]] = $sDrive & ':\Windows\System32\winver.exe' EndIf Next $sDrive = '' ReDim $aWinVers[$aWinVers[0] + 1] _ArrayDisplay($aWinVers) Else MsgBox(16, 'Error', 'Нет параметра " /auto".') ;~ ;здесь не знаю, что должно быть, если нет параметра ' /auto' EndIf Else MsgBox(16, 'Error', 'Нет параметров.') ;~ ;здесь не знаю, что должно быть, если нет параметров. EndIf ;~ запускать можно так: ;~ Run('"' & @ScriptDir & '\test.exe" "test param" "next param" "/auto" "param"') ;~ Run('"' & @ScriptDir & '\test.exe" /auto "test param" "next param" "param"') ;~ Run('"' & @ScriptDir & '\test.exe" "test param" "next param" "param" ''/auto''') ;~ Run('"' & @ScriptDir & '\test.exe" /auto') ;~ Run('"' & @ScriptDir & '\test.exe" "/auto"') ;~ Run('"' & @ScriptDir & '\test.exe" ''/auto''') |
|
Отправлено: 09:59, 05-07-2014 | #6 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать |
Отправлено: 11:19, 05-07-2014 | #7 |
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать думаю, если нет параметров, то должен запускаться обычный код скрипта, который мы сделали выше.
сообщения думаю надо убрать. нет параметров - запускается обычный режим (прямой): ;~ #RequireAdmin; для записи в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment $sPath = EnvGet('OFFLINESYSTEM');EnvGet('WINDIR') If Not $sPath Then Exit 1 $sVers = FileGetVersion($sPath & '\System32\winver.exe') $sVers = StringRegExpReplace($sVers, '^(\d+\.\d+).*', '$1') If @extended <> 1 Then Exit 2 ConsoleWrite($sVers & @LF) RegWrite('HKEY_CURRENT_USER\Environment', 'OFFLINESYSTEMVER', 'REG_SZ', $sVers) Run(@ComSpec & ' /C SETX OFFLINESYSTEMVER ' & $sVers, '', @SW_HIDE) If @error Then Exit 3 |
Отправлено: 12:15, 05-07-2014 | #8 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать Цитата madmasles:
|
|
Отправлено: 12:37, 05-07-2014 | #9 |
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать если есть параметр /auto - тогда перебор дисков на наличие папки Windows и чтение версии WinVer.exe из первой попавшейся (за исключением диска X: ) и пропуск переменной OFFLINESYSTEMDRIVE
а так всё тоже самое. результатом будет таже самая запись в реестр. |
Отправлено: 13:06, 05-07-2014 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. | NiOl | Скриптовые языки администрирования Windows | 7 | 31-01-2019 19:58 | |
PowerShell - [решено] Создание переменной (коллекции) с несколькими значениями | rudimko | Скриптовые языки администрирования Windows | 5 | 16-01-2014 15:08 | |
Ошибка приложения 1cv7.exe, версия 7.70.0.27, модуль unknown, версия 0.0.0.0, адреc.. | Arlekin_s | Microsoft Windows NT/2000/2003 | 18 | 21-06-2010 15:15 | |
[статья] Создание переменной среды, соответствующей букве установочного диска | Vadikan | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 0 | 17-01-2009 18:21 | |
Ошибка приложения svchost.exe, версия 0.0.0.0, модуль unknown, версия 0.0.0.0 | romantika | Лечение систем от вредоносных программ | 1 | 29-11-2008 15:51 |
|