![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
dron4ik |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
привет всем. Задание такое, скрипт состоит из двух параметров.
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\\"); |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Почему ты все время недоговариваешь условие? Ну, если не ввел я второй параметр, что тогда? Не удалять созданный ключ в реестре? Что значит,
Цитата второй параметр должен задавать значение ключа и удаление ключа ? Как параметр может задавать удаление? Он может запросить у скрипта удалить ключ из реестра, но тогда о каком значении речь? Ты уж выбери, что должен делать второй параметр, задавать значение ключу, имя которого передано первым параметром, или удалять этот самый только созданный ключ (зачем тогда создавали? Как ты проверишь работоспособность программы? У тебя ж все останется как и было в реестре, можешь просто написать толькоWScript.Echo("Ключ создан и удален");
, и разницы никакой не будет...) |
dron4ik |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
Прежняя моя ошибка(.Если не вводим второй параметр, то удаление ключа не происходит. Все-таки название и значение ключа задается с помощью первого параметра(. т.е параметры живут отдельно.
Добавлено через 2 мин. а второй параметр удаляет этот созданный ключ. |
dron4ik |
![]()
Сообщение
#4
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я нашел что то похожее в инете но оно написано на 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--------------------------- |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Ну, а теперь посмотри, что передается в этот VBS. Три параметра, только чтоб записать новый ключ в реестр. А ты хочешь двумя, да еще и с возможностью удаления. Приводи примеры, как ты хочешь ВЫЗЫВАТЬ свой скрипт. Например, что я должен написать, чтобы он мне в HKCU\Software создал новую папку MyProg, а в ней - ключ ID типа REG_SZ со значением "forum.pascalnet.ru/index.php?showuser=1235" ? Учти, с ОДНИМ параметром !!! Удалять не надо ничего, только создаем.
|
dron4ik |
![]()
Сообщение
#6
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
К примеру
создаем раздел MyRegKey c ключом Мой ключ. c:\ cscript.exe 1.js HKCU\\MyRegKey\\Мой ключ,1 |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Что означает 1, и какого типа должно быть значение? Строка? DWORD? Бинарное?
Вообще тебе придется разбивать строку, полученную через WScript.Arguments(0) при помощи Split на части: var create_parameters = WScript.Arguments(0).Split(",");
, и уже оттуда получать все необходимые данные. |
dron4ik |
![]()
Сообщение
#8
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
любой тип к примеру dword.
а что такое Split? Добавлено через 4 мин. Split делит строку на кусочки) Добавлено через 2 мин. это в начале прописывать? var create_parameters = WScript.Arguments(0).Split(","); |
volvo |
![]()
Сообщение
#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 |
dron4ik |
![]()
Сообщение
#10
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
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\\");
|
volvo |
![]()
Сообщение
#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 - ветка и ключ после создания удаляются... В работе со строками (чтоб вытащить название ветки и название ключа) разберешься? |
dron4ik |
![]()
Сообщение
#12
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
странно пробовал вашу прогу.. но у меня не создается ключ(
|
dron4ik |
![]()
Сообщение
#13
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
Запустилась))
F:\Programs>cscript test_js.js "HKCU\MyRegKey\My Key",1--странно при этом создается два ключа первый имеет имя string со значением 1. второй не имеет имя(по умолчанию) со значением My key. |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Это не 2 ключа, это раздел (то, что "по умолчанию" - это корень созданного раздела, обычно его делают REG_SZ и без значения) и ключ.
|
dron4ik |
![]()
Сообщение
#15
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
Конец строки всегда явся значением ключа без имени.
Добавлено через 4 мин. а как реализовать чтоб имя ключа задавал пользователь в параметре его создания? |
dron4ik |
![]()
Сообщение
#16
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
А что означают строки каждая в отдельности?
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);
|
![]() ![]() |
![]() |
Текстовая версия | 31.07.2025 2:05 |