PDA

Показать полную графическую версию : [решено] Запись в реестр


charon
17-12-2017, 11:41
Здравствуйте. Не получается записать в реестр.
Такая конструкция работает

Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set StdOut = WScript.StdOut
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\EditType\DataType"
strValueName = ";Data"
iValues = Array(&H00,&H01,&H00,&H00)
oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
oReg.SetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath, strValueName,iValues

Поменял HKEY_LOCAL_MACHINE = &H80000002 на HKEY_CURRENT_USER = &H80000001 и путь другой - не хочет работать

Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set StdOut = WScript.StdOut
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer"
strValueName = ";Data"
iValues = Array(&H00,&H01,&H00,&H00)
oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
oReg.SetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath, strValueName,iValues

Что исправить чтобы работал?

yurfed
17-12-2017, 12:02
Поменял HKEY_LOCAL_MACHINE = &H80000002 на HKEY_CURRENT_USER = &H80000001 и путь другой - не хочет работать »Зачем? Поменяйте на 100500.
Вас может просто туда не пускают? От админа? Может занято или нет такого Юзера?

Iska
17-12-2017, 12:21
Что исправить чтобы работал? »
Для начала — добавить Option Explicit, дабы не попадать в подобные ситуации. Потом правильно научиться вызывать методы классов Wbem, чтобы не писать «не хочет работать», а самому получать и обрабатывать информацию — почему. Наконец, сделав всё это, посмотреть и удивиться — «А чего это я пытаюсь писать в никуда?» и поменять во втором скрипте HKEY_LOCAL_MACHINE на HKEY_CURRENT_USER в обоих вызовах методов.

Option Explicit

Const HKEY_CURRENT_USER = &H80000001

Dim objSWbemServicesEx


Dim strSubkey
Dim strValueName
Dim arrValues

Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\default")
Dim objSWbemObjectEx

Set objSWbemObjectEx = objSWbemServicesEx.Get("StdRegProv")

strSubkey = "Software\Microsoft\Windows\CurrentVersion\Explorer"
strValueName = ";Data"
arrValues = Array(&H00,&H01,&H00,&H00)

If objSWbemObjectEx.CreateKey(HKEY_CURRENT_USER, strSubkey) = 0 Then
If objSWbemObjectEx.SetBinaryValue(HKEY_CURRENT_USER, strSubkey, strValueName, arrValues) = 0 Then
Else
WScript.Echo "Can't set binary values"
End If
Else
WScript.Echo "Can't create key"
End If

WScript.Quit 0

charon
17-12-2017, 20:59
Iska, Спс. Работает. Полезу разбираться с методами и правами. Все же интересно почему winmgmts не захотел работать.

Iska
18-12-2017, 05:43
Все же интересно почему winmgmts не захотел работать. »
Потому что Вы путались осуществлять запись в реестр в несуществующий раздел: в Вашем коде HKEY_LOCAL_MACHINE был неопределён, и никакие значения ему не присваивались, потому приравнивался к нулю по умолчанию. Нелепая и типичная ошибка, избегать которой поможет обязательное использование Option Explicit. Я написал об этом же в предыдущем сообщении. А Вы как не видите.

Хотите анекдот из жизни на эту тему?

yurfed
18-12-2017, 05:47
осуществлять запись в реестр в несуществующий раздел »
Может занято или нет такого Юзера? »
Вот и договорились :)


Хотите анекдот из жизни на эту тему? »давай

charon
19-12-2017, 14:58
Iska, Еще раз спс. Разобрался. Каюсь, был невниметелен. Определял HKEY_CURRENT_USER, а писал в HKEY_LOCAL_MACHINE. Естественно скрипт не хотел работать. После того как поправил winmgmts тоже работает.
Хотите анекдот из жизни на эту тему? »
Хочу :-)

Iska
21-12-2017, 16:15
давай »
Хочу :-) »
Ну, что ж…

… когда трава была зеленее один мой коллега после распределения трудился по профилю на одном закрытом предприятии. В числе прочего, считали они там параметры траекторий на каком-то из аналогов PDP. После запуска очередного пакетного задания заниматься, кроме периодического контроля, было особо нечем, писали разные программки для собственного развлечения, в том числе кто-то написал и для игры в шахматы. Всё общение сводилось ко вводу ходов и приёму ответов. Для удобства «выцыганили» в местном клубе шахматный столик с комплектом фигур, поставили рядом с машиной, на нём и разыгрывали партии.

И был там один мужик, солидно в годах, как и положено — бывший военный на пенсии, трудился главным энергетиком. По словам — весьма неглупый человек, притом — электрик от бога, с электричеством на ты, умел и не гнушался при нужде сам подержать паяльник в руках, но от цифровой вычислительной техники был достаточно далёк в силу возраста.

Так вот, наблюдал он за этими молодыми ребятами, наблюдал, как они там в шахматы играются, и однажды у этого моего коллеги поинтересовался, как это, мол, ента железяка может играть в шахматы? Далее со слов коллеги: «Ну, вот, расписываю я ему, раскладываю всё по полочкам: про электроны, про диоды-транзисторы, про уровни тока, про отображаемые ими нулики-единички, про счётное устройство, про устройство управления, программы-алгоритмы и т.д. — вошёл в раж, уважаемый ведь человек, а как меня, молодого, слушает… Одним словом, заливаюсь перед ним соловьём… И тут он вдруг останавливает меня взмахом руки: «Эт-ладно… Ты мне лучше вот что скажи — как он доску видит?» Тут-то я и осел на месте».

Так вот и я — вроде бы рассказываю правильные вещи, но, поскольку не то, что ожидал услышать собеседник, то толку от моих рассказов выходит мало.




© OSzone.net 2001-2012