REGEDIT 5.0
; @ECHO OFF
; CLS
; REG IMPORT "%~f0"
; EXIT
[HKEY_CURRENT_USER\Software\Test]
"TestVal"="Succeeded"
блок1
рег-файл1
блок 2
рег файл 2
и т.д.
@Echo off
set logsave=1.log
if "%STDOUT_REDIRECTED%" == "" (
set STDOUT_REDIRECTED=yes
cmd.exe /c %0 %* >%logsave%
exit /b %ERRORLEVEL%
)
echo parametr1 call test
echo parametr2 call teston
:test
REGEDIT4
; @ECHO OFF
; CLS
; REG IMPORT "%~f0"
; EXIT
[HKEY_CURRENT_USER\Software\Test]
"TestVal"="Succeeded"
:teston
REGEDIT4
; @ECHO OFF
; CLS
; REG IMPORT "%~f0"
; EXIT
[HKEY_CURRENT_USER\Software\Teston]
"TestVal"="Succeeded"
pause
@echo off
set logsave=1.log
if "%STDOUT_REDIRECTED%" == "" (
set STDOUT_REDIRECTED=yes
cmd.exe /c %0 %* >%logsave%
exit /b %ERRORLEVEL%
)
echo parametr1 call :test
pause
echo parametr2 call :teston
pause
:test
setLocal
for /f "delims=[]" %%N in ('find /n "reg_1" ^<"%~f0"') do set /a num=%%N
more +%num% < "%~f0" > 2.bat
exit /b
::reg_1
REGEDIT4
; @ECHO OFF
; CLS
; REG IMPORT "%~f0"
; EXIT
[HKEY_CURRENT_USER\Software\Test]
"TestVal"="Succeeded"
:teston
setLocal
for /f "delims=[]" %%N in ('find /n "reg_2" ^<"%~f0"') do set /a num=%%N
more +%num% < "%~f0" > 3.bat
exit /b
::reg_2
REGEDIT4
; @ECHO OFF
; CLS
; REG IMPORT "%~f0"
; EXIT
[HKEY_CURRENT_USER\Software\Teston]
"TestVal"="Succeeded"
:end
echo normal
pause
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
call :RegKeyExecute SetConsoleColor
pause
call :RegKeyExecute SetDefaultKeyboardLayout_EN
pause
exit /B
:RegKeyExecute [Имя ресурса]
For /F "tokens=1 delims=[]" %%? in ('find /i /n "%~1 begin" ^< "%~f0"') do set LineFrom=%%?& set /A LineFrom+=1
For /F "tokens=1 delims=[]" %%? in ('find /i /n "%~1 end" ^< "%~f0"') do set LineUntil=%%?& set /A LineUntil-=1
For /L %%C in (%LineFrom%, 1, %LineUntil%) do set "txtmask=!txtmask!\[%%C\] "
(for /f "tokens=1* delims=]" %%a in ('find /v /n "" ^<"%~f0"^| findstr /B "%txtmask%" 2^>nul') do Echo=%%b)> "%temp%\my_key.reg"
REG IMPORT "%temp%\my_key.reg"& >nul del "%temp%\my_key.reg"
Exit /B
======================
:SetConsoleColor begin
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console]
"ScreenColors"=dword:0000001a
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"ScreenColors"=dword:0000001a
:SetConsoleColor end
====================
==================================
:SetDefaultKeyboardLayout_EN begin
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Keyboard Layout\Preload]
"1"="00000409"
:SetDefaultKeyboardLayout_EN end
================================
@echo off
:: EnableExtensions - Включаем поддержку ключей For /F, For /L
:: EnableDelayedExpansion - Включаем поддержку раскрытия переменных через (!)
SetLocal EnableExtensions EnableDelayedExpansion
:: Вызываем функцию RegKeyExecute с аргументом SetConsoleColor
call :RegKeyExecute SetConsoleColor
pause
:: Вызываем функцию RegKeyExecute с аргументом SetDefaultKeyboardLayout_EN
call :RegKeyExecute SetDefaultKeyboardLayout_EN
pause
exit /B
:RegKeyExecute [Имя ресурса]
:: Записывает в переменную LineFrom номер строки, в которой находится текст [Имя ресурса] + ключевое слово "begin", set /A ...+1 начало на одну строку ниже
For /F "tokens=1 delims=[]" %%? in ('find /i /n "%~1 begin" ^< "%~f0"') do set LineFrom=%%?& set /A LineFrom+=1
:: Записывает в переменную LineUntil номер строки, в которой находится текст [Имя ресурса] + ключевое слово "end", set /A ...-1 конец на одну строку выше
For /F "tokens=1 delims=[]" %%? in ('find /i /n "%~1 end" ^< "%~f0"') do set LineUntil=%%?& set /A LineUntil-=1
:: Записывает в переменную txtmask номера строк этого файла, где находится читаемый Reg
For /L %%C in (%LineFrom%, 1, %LineUntil%) do set "txtmask=!txtmask!\[%%C\] "
(
:: Нумерует строки всего файла, а потом фильтрует только те, что в переменной txtmask
for /f "tokens=1* delims=]" %%a in ('find /v /n "" ^<"%~f0"^| findstr /B "%txtmask%" 2^>nul') do Echo=%%b
:: и записывает текст из этих строк во временную папку, в файл my_key.reg
)> "%temp%\my_key.reg"
:: Применяет ключевой файл реестра
REG IMPORT "%temp%\my_key.reg"& >nul del "%temp%\my_key.reg"
:: Возвращается в точку вызова подпрограммы
Exit /B
:: Просто разделитель для наглядности
======================
:: Здесь пишем произвольное имя, по которому будем идентифицировать + дописываем к нему знак пробела и ключевое слово "begin"
:SetConsoleColor begin
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console]
"ScreenColors"=dword:0000001a
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"ScreenColors"=dword:0000001a
:: в конце делаем тоже самое, но дописываем слово "end"
:SetConsoleColor end
====================
==================================
:SetDefaultKeyboardLayout_EN begin
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Keyboard Layout\Preload]
"1"="00000409"
:SetDefaultKeyboardLayout_EN end
================================
ок.Тогда только JS.
'Основной Код VBScript
'Код распаковщика
'Ресурс вот так - каждая строка с кавычки:
'REG:1:BEGIN
'Windows Registry Editor Version 5.00
'[HKEY_CURRENT_USER\Console]
'"ScreenColors"=dword:0000001a
'[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
'"ScreenColors"=dword:0000001a
'REG:1:END
'REG:2:BEGIN
'Windows Registry Editor Version 5.00
'[HKEY_CURRENT_USER\Keyboard Layout\Preload]
'"1"="00000409"
'REG:2:END
В HTA всё делается по другому. В отличии от VBS, он всегда имеет доступ к собственному коду, причём с разбивкой по тегам:В принципе можно и VBS, но тогда ресурс будет выглядеть примерно так:
<html>
<head>
<meta http-equiv=content-type content="text-html; charset=utf-8">
<meta http-equiv=MSThemeCompatible content=yes>
<style type="text/css">
.block {
border: solid 1px silver;
margin: 5px;
}
</style>
<script type="text/javascript">
function saveAndReg(blockId, filename) {
s = getTextFrom(blockId);
save(filename, s);
run('"regedit" /s "'+filename+'"');
run('"notepad.exe" "'+filename+'"');
}
function getTextFrom(blockId) {
return document.getElementById(blockId).innerText;
}
function save(filename, text) {
var FSO = new ActiveXObject("Scripting.FileSystemObject");
var file = FSO.CreateTextFile(filename);
file.Write(text);
file.Close();
}
function run(command) {
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run('%comspec% /c start "" '+command, 0, true);
}
function env(name) {
var WshShell = new ActiveXObject("WScript.Shell");
return WshSysEnv = WshShell.ExpandEnvironmentStrings('%'+name+'%');
}
</script>
</head>
<body>
<div class="block"><pre id="block1">
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Test]
"TestVal"="Succeeded"
</pre>
<button onclick="saveAndReg('block1',env('TEMP')+'\\1.reg')">Выполнить</button></div>
<div class="block"><pre id="block2">
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Test]
"TestVal"="Succeeded2"
</pre>
<button onclick="saveAndReg('block2',env('TEMP')+'\\2.reg')">Выполнить</button></div>
</body>
</html>
HTA это смесь двух технологий: HTML-DOM и WSH.а можно где нибудь почитать о HTA?
<script type="text/VBScript">
; Твой код на VBScript
</script>
<html>
<head>
<meta charset="windows-1251">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<title>Восстановление запуска системных служб по умолчанию</title>
<hta:application
borderStyle="complex"
windowState=" minimize"
innerBorder="yes"
selection="yes"
scroll="no"
caption="yes"
maximizebutton="yes"
minimizebutton="yes"
contextmenu="yes" />
<style type="text/css">
BODY {
font: x-small Verdana, Arial, sans-serif;
color: WindowText;
background-color: ButtonFace;
}
.Row {
clear:both;
}
.Left {
float:Left;
clear:none;
}
.Right, SELECT {
float:Right;
clear:none;
}
</style>
<script language="VBScript">
Sub GetOSVersion
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
Msgbox objOperatingSystem.Caption & " " & objOperatingSystem.Version
Next
End Sub
</script>
<script language="VBScript">
Option Explicit
Sub OK_OnClick
With document
.getElementByID("Wait").disabled = True
.getElementByID("OK").disabled = True
.getElementByID("tagBody").style.cursor = "wait"
End With
setTimeout "SetOK", 0
End Sub
Sub SetOK()
With CreateObject("Scripting.FileSystemObject").CreateTextFile("services.reg", True)
.WriteLine document.getElementByID("Wait").value
.Close
End With
With document
.getElementByID("Wait").disabled = False
.getElementByID("OK").disabled = False
.getElementByID("tagBody").style.cursor = "auto"
End With
End Sub
</script>
</head>
<body id="tagBody" scroll="auto">
<span Class="Row">
<span Class="left"><span id="lblChoice">Версия операционной системы: </span></span>
<span Class="right">
<select name="Wait" id="Wait" size="1">
<option value="1" selected>Windows 7 Ultimate *64 bit
<option value="2">Windows 7 Ultimate *32 bit
<option value="3">Windows 7 Professional SP1 *64 bit
<option value="4">Windows 7 Professional SP1 *32 bit
<option value="5">Windows 7 Home Premium *64 bit
<option value="6">Windows 7 Home Premium *32 bit
<option value="7">Windows 7 Windows 7 Home Basic
<option value="8">Windows 7 Starter
</select>
</span>
</span>
<span Class="Row">
<span Class="left"><span id="lblOK">Выберите версию операционной системы</span></span>
<span Class="right"><input type="Button" name="OK" value="OK"></span>
</span>
</body>
<br><br><br>
<body STYLE="font:12 pt arial; color:white;
filter:progid:DXImageTransform.Microsoft.Gradient (GradientType=1, StartColorStr='#000000', EndColorStr='#0000FF')">
<input type="button" value="Показать версию ОС..." name="run_button" onClick="GetOSVersion">
</body>
<script language="VBScript">
With window
.resizeTo 500, tagBody.scrollHeight + 220
.moveTo (.screen.availWidth - tagBody.offsetWidth) \ 2, (.screen.availHeight - tagBody.offsetHeight) \ 2
End With
</script>
</html>
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?