IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Изменение реестра с помощью JS, Работа с параметрами
сообщение
Сообщение #1


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


привет всем. Задание такое, скрипт состоит из двух параметров.
1)первый параметр должен создавать ключ, где имя ключа должно передаваться через параметр(т.е.название ключа мы сами пишем),еще ключ должен создаваться в любой ветке т.е. ветку тоже указываем через параметр.
2)второй параметр должен задавать значение ключа и удаление ключа.
У мя есть пример, но он все делает автоматически без каких либо параметров т.е. ветки, значение ключей, название можно менять только в коде что неудобно для обычного пользователя.
помогите пожалуйста разобраться с параметрами(.

Код
//Пример работы с реестром на JScript
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Popup("Создаем раздел");

WSHShell.RegWrite("HKCU\\MyRegKey\\", "Primer");
WSHShell.Popup("Создаем строковый параметр");
WSHShell.RegWrite("HKCU\\MyRegKey\\String", 1);
WSHShell.Popup("Создаем параметр DWORD");
WSHShell.RegWrite("HKCU\\MyRegKey\\DWORD", 2, "REG_DWORD");
WSHShell.Popup("Создаем двоичный параметр");
WSHShell.RegWrite("HKCU\\MyRegKey\\Binary", 3, "REG_BINARY");
WSHShell.Popup("Удаляем все параметры");
WSHShell.RegDelete("HKCU\\MyRegKey\\String");
WSHShell.RegDelete("HKCU\\MyRegKey\\DWORD");
WSHShell.RegDelete("HKCU\\MyRegKey\\Binary");
WSHShell.Popup("Удаляем раздел");
WSHShell.RegDelete("HKCU\\MyRegKey\\");
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Почему ты все время недоговариваешь условие? Ну, если не ввел я второй параметр, что тогда? Не удалять созданный ключ в реестре? Что значит,
Цитата
второй параметр должен задавать значение ключа и удаление ключа
? Как параметр может задавать удаление? Он может запросить у скрипта удалить ключ из реестра, но тогда о каком значении речь? Ты уж выбери, что должен делать второй параметр, задавать значение ключу, имя которого передано первым параметром, или удалять этот самый только созданный ключ (зачем тогда создавали? Как ты проверишь работоспособность программы? У тебя ж все останется как и было в реестре, можешь просто написать только
WScript.Echo("Ключ создан и удален");
, и разницы никакой не будет...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Прежняя моя ошибка(.Если не вводим второй параметр, то удаление ключа не происходит. Все-таки название и значение ключа задается с помощью первого параметра(. т.е параметры живут отдельно.

Добавлено через 2 мин.
а второй параметр удаляет этот созданный ключ.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Я нашел что то похожее в инете но оно написано на vbs.

Код
Dim Names
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
'Записать в реестр
'параметры:
'name - куда записать. Name должен начинаться с одного из корневых ключей: HKEY_CURRENT_USER - HKCU,
' HKEY_LOCAL_MACHINE  - HKLM, HKEY_CLASSES_ROOT - HKCR,    HKEY_USERS - HKEY_USERS,
' HKEY_CURRENT_CONFIG - HKEY_CURRENT_CONFIG. напр. "HKCU\Software\1C\1cv7\7.7\Test\script name"
'Value -  значение параметра
'strType - тип параметра, возможные значения "REG_SZ", "REG_EXPAND_SZ", "REG_DWORD", "REG_BINARY"
Sub RegWrite(name,Value,strType)
WshShell.RegWrite name,Value,strType
End Sub

'Получить значение параметра
'strName - значение параметра. strName должен начинаться с одного из корневых ключей: HKEY_CURRENT_USER - HKCU,
' HKEY_LOCAL_MACHINE  - HKLM, HKEY_CLASSES_ROOT - HKCR,    HKEY_USERS - HKEY_USERS,
' HKEY_CURRENT_CONFIG - HKEY_CURRENT_CONFIG. напр."HKCU\Software\1C\1cv7\7.7\Test\script name"
Function RegRead(strName)
strName = WshShell.RegRead(strName)
End Function

'Удалить раздел/параметр
'strName - значение раздела/параметра. strName должен начинаться с одного из корневых ключей:
' HKEY_CURRENT_USER - HKCU, HKEY_LOCAL_MACHINE  - HKLM, HKEY_CLASSES_ROOT - HKCR,    HKEY_USERS - HKEY_USERS,
' HKEY_CURRENT_CONFIG - HKEY_CURRENT_CONFIG.
'для удаления раздела StrName должен заканчиваться "\" (напр."HKCU\Software\1C\1cv7\7.7\Test\")
'для удаления параметра strName должен быть в виде "HKCU\Software\1C\1cv7\7.7\Test\script name"
Sub RegDelete(strName)
WshShell.RegDelete(strName)
End Sub

' -----------------------------------------------------------------------------
'Соответсвие значений корней реестра:
'HKEY_CLASSES_ROOT &H80000000
'HKEY_CURRENT_USER &H80000001
'HKEY_LOCAL_MACHINE &H80000002
'HKEY_USERS &H80000003
'HKEY_CURRENT_CONFIG &H80000005
'т.е. в нижеследующих функциях можно в параметре "rasdel" указывать (например
'если нужно обратиться к корню HKEY_CURRENT_USER) то можно указать
'или HKEY_CURRENT_USER или HKCU или &H80000001
' -----------------------------------------------------------------------------

'возвращает в переменную Names все подразделы в указанном разделе
'в виде строки с разделителем ";"
'напр.: "AddTemplate;AutoCompleteSymb;DisableTemplate;EnumMethDlg;ParamInfo;"
Function EnumSubKey(rasdel, strKeyPath, Names)
    If rasdel = "HKEY_CURRENT_USER" OR rasdel =  "HKCU" OR rasdel =  "&H80000001" Then
        rasdel = &H80000001
    elseif rasdel = "HKEY_LOCAL_MACHINE" OR rasdel =  "HKLM" OR rasdel =  "&H80000002" Then
        rasdel = &H80000002
    elseif rasdel = "HKEY_USERS" OR rasdel =  "&H80000003" Then
        rasdel = &H80000003
    elseif rasdel = "HKEY_CURRENT_CONFIG" OR rasdel =  "&H80000005" Then
        rasdel = &H80000005
    End If
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
oReg.EnumKey rasdel, strKeyPath, arrSubKeys
On Error Resume Next
For Each subkey In arrSubKeys
    Names =Names & subkey & ";"
Next
End Function

'возвращает в переменную Names параметры в указанном разделе
'в виде строки с разделителем ";"
'напр.: "lang;components;"
Function EnumValues(rasdel, strKeyPath, Names)
    If rasdel = "HKEY_CURRENT_USER" OR rasdel =  "HKCU" OR rasdel =  "&H80000001" Then
        rasdel = &H80000001
    elseif rasdel = "HKEY_LOCAL_MACHINE" OR rasdel =  "HKLM" OR rasdel =  "&H80000002" Then
        rasdel = &H80000002
    elseif rasdel = "HKEY_USERS" OR rasdel =  "&H80000003" Then
        rasdel = &H80000003
    elseif rasdel = "HKEY_CURRENT_CONFIG" OR rasdel =  "&H80000005" Then
        rasdel = &H80000005
    End If
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
oReg.EnumValues rasdel, strKeyPath, arrValueNames
On Error Resume Next
For Each ValueNames In arrValueNames
    Names =Names & ValueNames & ";"
Next
End Function

'возвращает в переменную Names параметры ,их значения и типы в указанном разделе
'в виде строки "lang=2,REG_SZ;components=3,REG_DWORD;", т.е.
'параметру lang соответствует значение 2 тип REG_SZ, а параметру components
'соответствует значение 3 тип REG_DWORD
Function EnumParamValues(rasdel, strKeyPath, Names)
const REG_SZ = 1
const REG_EXPAND_SZ = 2
const REG_BINARY = 3
const REG_DWORD = 4
const REG_MULTI_SZ = 7    
    If rasdel = "HKEY_CURRENT_USER" OR rasdel =  "HKCU" OR rasdel =  "&H80000001" Then
        ras = &H80000001
    elseif rasdel = "HKEY_LOCAL_MACHINE" OR rasdel =  "HKLM" OR rasdel =  "&H80000002" Then
        ras = &H80000002
    elseif rasdel = "HKEY_USERS" OR rasdel =  "&H80000003" Then
        ras = &H80000003
    elseif rasdel = "HKEY_CURRENT_CONFIG" OR rasdel =  "&H80000005" Then
        ras = &H80000005
    End If
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
oReg.EnumValues ras, strKeyPath, arrValueNames, arrValueTypes
On Error Resume Next
For i=0 To UBound(arrValueNames)
    Names =Names & arrValueNames(i) & "="
    Select Case arrValueTypes(i)
        Case REG_SZ
            tip = "REG_SZ"
        Case REG_EXPAND_SZ
            tip = "REG_EXPAND_SZ"
        Case REG_BINARY
            tip = "REG_BINARY"
        Case REG_DWORD
            tip = "REG_DWORD"
        Case REG_MULTI_SZ
            tip = "REG_MULTI_SZ"
    End Select
    str1 = rasdel & "\" & strKeyPath & "\" & arrValueNames(i)
    str = RegRead(str1)
    Names = Names & str1 & "," & tip & ";"
Next
End Function---------------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Ну, а теперь посмотри, что передается в этот VBS. Три параметра, только чтоб записать новый ключ в реестр. А ты хочешь двумя, да еще и с возможностью удаления. Приводи примеры, как ты хочешь ВЫЗЫВАТЬ свой скрипт. Например, что я должен написать, чтобы он мне в HKCU\Software создал новую папку MyProg, а в ней - ключ ID типа REG_SZ со значением "forum.pascal.net.ru/index.php?showuser=1235" ? Учти, с ОДНИМ параметром !!! Удалять не надо ничего, только создаем.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


К примеру

создаем раздел MyRegKey c ключом Мой ключ.
c:\ cscript.exe 1.js HKCU\\MyRegKey\\Мой ключ,1

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Что означает 1, и какого типа должно быть значение? Строка? DWORD? Бинарное?

Вообще тебе придется разбивать строку, полученную через WScript.Arguments(0) при помощи Split на части:
var create_parameters = WScript.Arguments(0).Split(",");
, и уже оттуда получать все необходимые данные.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


любой тип к примеру dword.
а что такое Split?


Добавлено через 4 мин.
Split делит строку на кусочки)

Добавлено через 2 мин.

это в начале прописывать?
var create_parameters = WScript.Arguments(0).Split(",");
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Split - это функция, которая разобьет строку на части, разделенные заданным символом. К примеру:
var first = WScript.Arguments(0);
var create_parameters = first.split(",");
for(var i = 0; i < create_parameters.length; i++)
{
WScript.Echo(create_parameters[i]);
}
при вызове:
F:\Programs>cscript test_js.js "HKCU\\MyRegKey\\My Key",1,"322" 2

, выдаст разобранную строку:
Microsoft ® Windows Script Host Version 5.7
Copyright © Microsoft Corporation. All rights reserved.

HKCU\\MyRegKey\\My Key
1
322

 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


F:\Programs>cscript test_js.js "HKCU\\MyRegKey\\My Key",1,"322" 2-- а зачем нам нужны 322 и 2 ?

Добавлено через 1 мин.
хотя не суть важно всеравно разделение на куски зависит от длины.

Добавлено через 15 мин.
вот сделал но работает не правильно..

//Пример работы с реестром на JScript
var WSHShell = WScript.CreateObject("WScript.Shell");

var first = WScript.Arguments(0);


WSHShell.Popup("Создаем раздел");
WSHShell.RegWrite("HKCU\\MyRegKey\\", "Primer");
WSHShell.Popup("Создаем строковый параметр");

var WSHShell = WSHShell.RegWrite(first + "\\String",1)




WSHShell.Popup("Удаляем все параметры");
WSHShell.RegDelete("HKCU\\MyRegKey\\String");

WSHShell.Popup("Удаляем раздел");
WSHShell.RegDelete("HKCU\\MyRegKey\\");
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Ну, вот так у меня отработало:
//Пример работы с реестром на JScript
var WSHShell = WScript.CreateObject("WScript.Shell");

var first = WScript.Arguments(0);
var create_parameters = first.split(",");

WSHShell.Popup("Создаем раздел");
var last_bs = create_parameters[0].lastIndexOf("\\") + 1;
var branch_name = create_parameters[0].substr(0, last_bs);
var key_name = create_parameters[0].substr(last_bs, create_parameters[0].length - last_bs);

WSHShell.RegWrite(branch_name, key_name);

WSHShell.Popup("Создаем строковый параметр");

WSHShell.RegWrite(branch_name + "String", create_parameters[1]);

if(WScript.Arguments.Count() > 1 && WScript.Arguments(1) == "/delete")
{
WSHShell.Popup("Удаляем все параметры");
WSHShell.RegDelete(branch_name + "String");

WSHShell.Popup("Удаляем раздел");
WSHShell.RegDelete(branch_name);
}

Запускал так:
F:\Programs>cscript test_js.js "HKCU\MyRegKey\My Key",1

- создается ветка + ключ и не удаляются...

Запустил так:
F:\Programs>cscript test_js.js "HKCU\MyRegKey\My Key",1 /delete

- ветка и ключ после создания удаляются...

В работе со строками (чтоб вытащить название ветки и название ключа) разберешься?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


странно пробовал вашу прогу.. но у меня не создается ключ(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Запустилась))

F:\Programs>cscript test_js.js "HKCU\MyRegKey\My Key",1--странно при этом создается два ключа
первый имеет имя string со значением 1.
второй не имеет имя(по умолчанию) со значением My key.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Это не 2 ключа, это раздел (то, что "по умолчанию" - это корень созданного раздела, обычно его делают REG_SZ и без значения) и ключ.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Конец строки всегда явся значением ключа без имени.

Добавлено через 4 мин.
а как реализовать чтоб имя ключа задавал пользователь в параметре его создания?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


А что означают строки каждая в отдельности?
var last_bs = create_parameters[0].lastIndexOf("\\") + 1;
var branch_name = create_parameters[0].substr(0, last_bs);
var key_name = create_parameters[0].substr(last_bs, create_parameters[0].length - last_bs);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 8.05.2024 9:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name