Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как получить имя ветки реестра?

Ответить
Настройки темы
[решено] Как получить имя ветки реестра?

Пользователь


Сообщения: 80
Благодарности: 0

Профиль | Отправить PM | Цитировать


хочу поменять DNS на удаленном компе.

RegWrite("\\10.167.32.100\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Inte rfaces\{E5B0E6CF-3B94-41D8-BD02-73C021A3365D}", "NameServer", "REG_SZ", "213.177.96.1,213.177.97.1")

но дело то в том, что {E5B0E6CF-3B94-41D8-BD02-73C021A3365D} - эта ветка у всех разная... что же делать ?

Отправлено: 16:09, 16-12-2009

 

Аватара для Creat0R

Must AutoIt


Moderator


Сообщения: 3054
Благодарности: 1008

Профиль | Сайт | Отправить PM | Цитировать


Цитата garanov:
дело то в том, что {E5B0E6CF-3B94-41D8-BD02-73C021A3365D} - эта ветка у всех разная... что же делать ? »
Вопрос в другом, как определить какую именно ветку нужно считывать, у меня там несколько веток с похожим названием (GUID).
Можно получить данные с каждой из них, но лучше будет определить искомую ветку по её параметрам к примеру (по ключам внутри ветки).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

Русское сообщество AutoIt | CreatoR's Lab | Opera AC Community


Отправлено: 16:28, 16-12-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Googler


Сообщения: 3665
Благодарности: 1562

Профиль | Отправить PM | Цитировать


Цитата garanov:
хочу поменять DNS на удаленном компе »
Код: Выделить весь код
_NetAdapterSetDNS("192.168.1.1,192.168.1.3")

Func _NetAdapterSetDNS($sDNSList, $sHostName = "localhost")
    Local $objWMIService = ObjGet( "winmgmts:\\"& $sHostName &"\root\CIMV2")
    Local $aDNSList = StringSplit($sDNSList, ",;|", 2)
    Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled = True', "WQL", 0x30)
    If IsObj($colItems) Then
        For $colItem In $colItems
            $colItem.SetDNSServerSearchOrder($aDNSList)
            Return True
        Next
    EndIf
    Return False
EndFunc  ;==> _NetAdapterSetDNS

Отправлено: 16:59, 16-12-2009 | #3


Пользователь


Сообщения: 80
Благодарности: 0

Профиль | Отправить PM | Цитировать


Опа, спасибо!)

Только вот как бы доделать что бы он менял DNS по всем компам в сети?

циклом... 10.167.32.$I

Отправлено: 10:29, 17-12-2009 | #4


Googler


Сообщения: 3665
Благодарности: 1562

Профиль | Отправить PM | Цитировать


Цитата garanov:
Только вот как бы доделать что бы он менял DNS по всем компам в сети?

циклом »
сам спросил - сам ответил

Отправлено: 11:10, 17-12-2009 | #5


Пользователь


Сообщения: 80
Благодарности: 0

Профиль | Отправить PM | Цитировать


куда это написать то ?) я запутался

Отправлено: 15:37, 17-12-2009 | #6


Googler


Сообщения: 3665
Благодарности: 1562

Профиль | Отправить PM | Цитировать


Цитата garanov:
куда это написать то ? »
зависит от того, как собираетесь получать список - из текстового файла, Active Directory, службы обозревателя или еще каким способом... сначала записать этот список в массив, а потом перебрать все элементы массива и для каждого выполнить ф-цию _NetAdapterSetDNS()

-------
Как сообщить о том, что моя проблема решена?
не оказываю техподдержку через ПМ/ICQ/Mail - для этого есть форум


Отправлено: 16:13, 17-12-2009 | #7


Пользователь


Сообщения: 80
Благодарности: 0

Профиль | Отправить PM | Цитировать


ррр. не понял ничерта (

Отправлено: 16:19, 17-12-2009 | #8


Googler


Сообщения: 3665
Благодарности: 1562

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$aCompList = _NetServerEnum(1)
$sDNSList  = "192.168.1.1,192.168.1.2"

For $i=1 To $aCompList[0]
    _NetAdapterSetDNS($sDNSList, $aCompList[$i])
Next

Func _NetAdapterSetDNS($sDNSList, $sHostName = "localhost")
    Local $objWMIService = ObjGet( "winmgmts:\\"& $sHostName &"\root\CIMV2")
    Local $aDNSList = StringSplit($sDNSList, ",;|", 2)
    Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled = True', "WQL", 0x30)
    If IsObj($colItems) Then
        For $colItem In $colItems
            $colItem.SetDNSServerSearchOrder($aDNSList)
            Return True
        Next
    EndIf
    Return False
EndFunc  ;==> _NetAdapterSetDNS

Func _NetServerEnum ($iSrvType = -1, $sDomain = '')
    Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1]=[0], $i
    Local $uRecord = DllStructCreate("dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
    Local $uString = DllStructCreate("char[16]")
    Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
    If Not ($sDomain='' Or $sDomain='*') Then
        DllStructSetData($uDomain, 1, StringToBinary($sDomain,2))
        $pDomain = DllStructGetPtr($uDomain)
    EndIf
    Local $ret = DllCall ("netapi32.dll", "int", "NetServerEnum", _
        "ptr", 0, "int", 100, _
        "ptr", DllStructGetPtr($uBufPtr,1), "int", -1, _
        "ptr", DllStructGetPtr($uBufPtr,2), _
        "ptr", DllStructGetPtr($uBufPtr,3), _
        "int", $iSrvType, "ptr", $pDomain, "int", 0 )
    If $ret[0] Then Return SetError(1, $ret[0], '')
    Local $res[DllStructGetData($uBufPtr,3)+1]=[DllStructGetData($uBufPtr,3)]
    For $i=1 To DllStructGetData($uBufPtr,3)
        Local $uRecord = DllStructCreate("dword;ptr", DllStructGetData($uBufPtr,1)+($i-1)*$iRecLen)
        Local $sNBName = DllStructCreate("byte[32]", DllStructGetData($uRecord,2))
        DllStructSetData($uString,1,BinaryToString(DllStructGetData($sNBName,1),2))
        $res[$i] = DllStructGetData($uString,1)
    Next
    $ret = DllCall ("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr,1))
    Return $res
EndFunc ; ==> _NetServerEnum

Отправлено: 16:55, 17-12-2009 | #9


Пользователь


Сообщения: 80
Благодарности: 0

Профиль | Отправить PM | Цитировать


хех. смотрится крутовато попробую разобраться вечерком .

спасибо!)

Отправлено: 17:44, 17-12-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как получить имя ветки реестра?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Исчезает содержимое ветки реестра HKCU...RUN Nitro75 Microsoft Windows 2000/XP 7 15-10-2009 22:38
Доступ - [решено] Как дать пользователю доступ на чтение/запись ветки реестра в Win 200 Pro? mnv-uanic Microsoft Windows 2000/XP 4 02-06-2009 11:59
[решено] Установка разрешений на ветки реестра через CMD Delirium Microsoft Windows NT/2000/2003 12 10-07-2008 09:40
[решено] Разрешение на ветки реестра в 2000 Maks_mq Microsoft Windows NT/2000/2003 3 30-10-2007 08:57
[решено] Программа, запоминающая ветки реестра и папки для установки Sparkster Автоматическая установка приложений 3 04-05-2007 01:57




 
Переход