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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] RegRead ( "keyname", REG_EXPAND_SZ "valuename" ) ?

Ответить
Настройки темы
[решено] RegRead ( "keyname", REG_EXPAND_SZ "valuename" ) ?

Аватара для semiono

Ветеран


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

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


Цитата:
When reading a REG_MULTI_SZ key the multiple entries are separated by @LF - use with StringSplit(..., @LF) to get each entry.
Совершенно не пойму, что делать? Куда тыкать StringSplit(..., @LF) ?
Мне надо счесть корректно параметр, который REG_MULTI_SZ, разделять строки это тоже хорошо, в InnoSetup используется {break},
но это всё относительно записи, нафига это всё надо для чтения, ведь откуда известно что я считаю регридом? Ведь было бы известно,
тогда бы и читать не нужно! ?
Одним словом как читать дворд, мултисз, экспанд итп...? Бывает, кстати неизвесно вообще заранее какой тип, хотя это отдельный вопрос.

-------
Полезное сообщение


Отправлено: 22:12, 19-06-2009

 

Аватара для semiono

Ветеран


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

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


Я уже проверил на своём скрипте, работает правильно! Благодарю!

-------
Полезное сообщение


Отправлено: 03:30, 20-06-2009 | #21



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

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


Аватара для proxy

Старожил


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

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


эта штука рулит,
стоило нам подумать головой и сэкономили бы время )))

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:38, 20-06-2009 | #22


Аватара для semiono

Ветеран


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

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


Хоть бы рассказал что там нашёл!?
Набрав RegRead выдало кучу релизов автоит. Полистав первый нашёл там строку
- Changed: RegRead() and RegWrite() no longer use hex strings for REG_BINARY types - native binary datatypes are enforced.
И что, не знаю хорошо это или плохо?
Или ты хочешь сказать что то что ты написал там подтвердилось? Я пока не уловил. Конечно хорошо что такой поиск есть гипотетически.

-------
Полезное сообщение


Отправлено: 16:08, 20-06-2009 | #23


Аватара для proxy

Старожил


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

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


имею в виду, что именно через него нашел _RegRead()
как понял они помогли ?

просто, если залез бы туда в самом начале, то это был бы самый верный шаг )

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 16:21, 20-06-2009 | #24


Аватара для semiono

Ветеран


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

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


_RegRead() - а я не нашёл... со знаком _ это ты про что?
и эта фраза мне тоже непонятна:
no longer use hex strings for REG_BINARY types - native binary datatypes are enforced.
что они там про типы говорят? как бы то нибыло у меня 3.3.0.0 итак версия...

" native binary datatypes are enforced. " что-то я это не заметил в RegRead() танцы с бубном это да!

Хотя нет, я не прав. Вот сейчас проверяю через MsgBox и RegRead читает всё вроде бы правильно,
другое дело не все типы имеют схожий синтакс с регфайлами, что и понятно. Значит для регфайлов
надо делать преобразования.

Вчера, меня одна идея осенила, но потом оказалось, что бред.
Я вдруг подумал, а что если считывать в переменную автоитом, а потом её именно подсунуть
в комманд строке утилите. Но а что толку если reg.exe не умеет ни счем работать кроме built-in своих ключей. Облом.
Хотя может сам CMD.exe если задействовать?
А сам regedit.exe /e вроде бы тоже целиком сейвит?

-------
Полезное сообщение


Последний раз редактировалось semiono, 20-06-2009 в 17:14.


Отправлено: 16:52, 20-06-2009 | #25


Аватара для proxy

Старожил


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

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


semiono, стоп, стоп.

я запутался.

чуть выше опубликовал ссылку на офф форум, где есть разработка на альтернативные функции RegRead и RegWrite.
чем они лучше / хуже не знаю, поэтому и запостил - что бы проверить.

так вот, эти функции ты проверял / пробовал?
какой результат?

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 17:20, 20-06-2009 | #26


Аватара для proxy

Старожил


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

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


читать дальше »

Код: Выделить весь код
#include-once
#include <Constants.au3>

;; REG_* constants for value types are located in <Constants.au3>
;; except REG_QWORD which is defined below

Global Const $HKEY_CLASSES_ROOT = 0x80000000
Global Const $HKEY_CURRENT_USER = 0x80000001
Global Const $HKEY_LOCAL_MACHINE = 0x80000002
Global Const $HKEY_USERS = 0x80000003
Global Const $HKEY_PERFORMANCE_DATA = 0x80000004
Global Const $HKEY_PERFORMANCE_TEXT = 0x80000050
Global Const $HKEY_PERFORMANCE_NLSTEXT = 0x80000060
Global Const $HKEY_CURRENT_CONFIG = 0x80000005
Global Const $HKEY_DYN_DATA = 0x80000006
Global Const $KEY_QUERY_VALUE = 0x0001
Global Const $KEY_SET_VALUE = 0x0002
Global Const $KEY_WRITE = 0x20006
Global Const $REG_OPTION_NON_VOLATILE = 0x0000
Global Const $REG_OPTION_VOLATILE = 0x0001
Global Const $REG_QWORD = 11

Func _RegWrite($szKey, $szValue = "", $iType = -1, $bData = Default, $dwOptions = $REG_OPTION_NON_VOLATILE)
    Local $hRoot = StringLeft($szKey, StringInStr($szKey, "\") - 1)
    If $hRoot = "" Then $hRoot = $szKey ; passed a root key
    Switch $hRoot
        Case "HKEY_LOCAL_MACHINE", "HKLM"
            $hRoot = $HKEY_LOCAL_MACHINE
        Case "HKEY_USERS", "HKU"
            $hRoot = $HKEY_USERS
        Case "HKEY_CURRENT_USER", "HKCU"
            $hRoot = $HKEY_CURRENT_USER
        Case "HKEY_CLASSES_ROOT", "HKCR"
            $hRoot = $HKEY_CLASSES_ROOT
        Case "HKEY_CURRENT_CONFIG", "HKCC"
            $hRoot = $HKEY_CURRENT_CONFIG
        Case Else
    Return SetError(1, 0, 0)
    EndSwitch

    Local $szSubkey = StringTrimLeft($szKey, StringInStr($szKey, "\"))

    Local $ret = DllCall("advapi32.dll", "long", "RegCreateKeyExW", "ulong_ptr", $hRoot, "wstr", $szSubkey, "dword", 0, "ptr", 0, "dword", $dwOptions, _
                                            "dword", $KEY_WRITE, "ptr", 0, "ulong_ptr*", 0, "ptr*", 0)
    If $ret[0] <> 0 Then Return SetError(2, $ret[0], 0)
    Local $hKey = $ret[8]
    If $iType >= 0 And $bData <> Default Then
        Switch $iType
            Case $REG_SZ, $REG_EXPAND_SZ
                $bData &= Chr(0) ; add terminating null
                Local $lpData = DllStructCreate("wchar[" & StringLen($bData) & "]")
            Case $REG_MULTI_SZ
                $bData &= Chr(0) & Chr(0) ; add 2 terminating nulls
                Local $lpData = DllStructCreate("wchar[" & StringLen($bData) & "]")
            Case Else
                Local $lpData = DllStructCreate("byte[" & BinaryLen($bData) & "]")
        EndSwitch
        DllStructSetData($lpData, 1, $bData)
        $ret = DllCall("advapi32.dll", "long", "RegSetValueExW", "ulong_ptr", $hKey, "wstr", $szValue, "dword", 0, _
                                        "dword", $iType, "ptr", DllStructGetPtr($lpData), "dword", DllStructGetSize($lpData))
    EndIf
    DllCall("advapi32.dll", "long", "RegCloseKey", "ulong_ptr", $hKey)

    If $ret[0] <> 0 Then Return SetError(3, $ret[0], 0)
    Return 1
EndFunc

Func _RegRead($szKey, $szValue)
    Local $hRoot = StringLeft($szKey, StringInStr($szKey, "\") - 1)
    If $hRoot = "" Then $hRoot = $szKey ; passed a root key
    Switch $hRoot
        Case "HKEY_LOCAL_MACHINE", "HKLM"
            $hRoot = $HKEY_LOCAL_MACHINE
        Case "HKEY_USERS", "HKU"
            $hRoot = $HKEY_USERS
        Case "HKEY_CURRENT_USER", "HKCU"
            $hRoot = $HKEY_CURRENT_USER
        Case "HKEY_CLASSES_ROOT", "HKCR"
            $hRoot = $HKEY_CLASSES_ROOT
        Case "HKEY_CURRENT_CONFIG", "HKCC"
            $hRoot = $HKEY_CURRENT_CONFIG
        Case Else
            Return SetError(1, 0, 0)
    EndSwitch

    Local $szSubkey = StringTrimLeft($szKey, StringInStr($szKey, "\"))

    Local $ret = DllCall("advapi32.dll", "long", "RegOpenKeyExW", "ulong_ptr", $hRoot, "wstr", $szSubkey, "dword", 0, "dword", $KEY_QUERY_VALUE, "ulong_ptr*", 0)
    If $ret[0] <> 0 Then Return SetError(2, $ret[0], 0)
    $hKey = $ret[5]
    $ret = DllCall("advapi32.dll", "long", "RegQueryValueExW", "ulong_ptr", $hKey, "wstr", $szValue, "ptr", 0, _
                                    "dword*", 0, "ptr", 0, "dword*", 0)
    If $ret[0] <> 0 Then Return SetError(3, $ret[0], 0)

    Local $iType = $ret[4], $iLen = $ret[6], $sType
    Switch $iType ; set type of value
        Case $REG_SZ, $REG_EXPAND_SZ, $REG_MULTI_SZ
            $sType = "wchar"
            ; iLen is byte length, if unicode string divide by 2
            ; add 2 terminating nulls for possibly incorrectly stored strings
            $iLen = ($iLen / 2) + 2
        Case $REG_BINARY, $REG_NONE
            $sType = "byte"
        Case $REG_QWORD
            $sType = "int64"
            $iLen = $iLen / 8 ; int64 = 8 bytes
        Case Else
            $sType = "int"
            $iLen = $iLen / 4 ; int = 4 bytes
    EndSwitch
    Local $lpData = DllStructCreate($sType & "[" & $iLen & "]")
    $ret = DllCall("advapi32.dll", "long", "RegQueryValueExW", "ulong_ptr", $hKey, "wstr", $szValue, "ptr", 0, _
                                    "dword*", 0, "ptr", DllStructGetPtr($lpData), "dword*", DllStructGetSize($lpData))
    DllCall("advapi32.dll", "long", "RegCloseKey", "ulong_ptr", $hKey)

    If $ret[0] <> 0 Then Return SetError(3, $ret[0], 0)
    Return SetError(0, $iType, DllStructGetData($lpData, 1))
EndFunc

Func _TypeToString($iType)
    Local $sType
    Switch $iType
        Case $REG_NONE
            $sType = "REG_NONE"
        Case $REG_SZ
            $sType = "REG_SZ"
        Case $REG_EXPAND_SZ
            $sType = "REG_EXPAND_SZ"
        Case $REG_BINARY
            $sType = "REG_BINARY"
        Case $REG_DWORD
            $sType = "REG_DWORD"
        Case $REG_DWORD_BIG_ENDIAN
            $sType = "REG_DWORD_BIG_ENDIAN"
        Case $REG_LINK
            $sType = "REG_LINK"
        Case $REG_MULTI_SZ
            $sType = "REG_MULTI_SZ"
        Case $REG_RESOURCE_LIST
            $sType = "REG_RESOURCE_LIST"
        Case $REG_FULL_RESOURCE_DESCRIPTOR
            $sType = "REG_FULL_RESOURCE_DESCRIPTOR"
        Case $REG_RESOURCE_REQUIREMENTS_LIST
            $sType = "REG_RESOURCE_REQUIREMENTS_LIST"
        Case $REG_QWORD
            $sType = "REG_QWORD"
        Case Else
            $sType = ""
    EndSwitch
    Return $sType
EndFunc


1. сохранить код в файл RegEx.au3
2. скопировать файл RegEx.au3 в папку C:\Program Files\AutoIt3\Include\
3. в своем скрипте написать в самом верху #include <RegEx.au3>
4. при чтение данных из реестра использовать функцию: _RegRead(Ключ_реестра, название_значения), параметры те же

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 17:22, 20-06-2009 | #27


Аватара для semiono

Ветеран


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

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


Я нашёл батник, может что полезное извлечь для автоит сгодиться?
http://forum.oszone.net/showthread.php?p=1147902
То как подключить инклюд мне знакомо, но надо проверить будет сами скрипты!

Цитата proxy:
чуть выше опубликовал »
ух! это то что надо, там какраз про такие вещи пишут!

-------
Полезное сообщение


Отправлено: 01:29, 21-06-2009 | #28


Аватара для semiono

Ветеран


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

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


Не для нашей задачи это не пойдёт. Пишет так же по автоитовски,
между REG_SZ и REG_EXPAND_SZ различий не делает, что собсно и понятно,
ведь это только регфайлу нужно различие...

Код: Выделить весь код
#include <RegEx.au3>

$var1 = _RegRead("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment","AutoIt3")
$var2 = _RegRead("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment","ComSpec")
$var3 = _RegRead("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Executive","AdditionalCriticalWorkerThreads")
$var4 = _RegRead("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Executive","PriorityQuantumMatrix")
$var5 = _RegRead("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\kernel","ObUnsecureGlobalNames")
MsgBox(4096, "REG_SZ", $var1 , 10)
MsgBox(4096, "REG_EXPAND_SZ", $var2 , 10)
MsgBox(4096, "REG_DWORD", $var3 , 10)
MsgBox(4096, "REG_BINARY", $var4 , 10)
MsgBox(4096, "REG_MULTISZ_SZ", $var5 , 10)
Наверное они там пропатчили некоторые особенности, типа empty-zero string всяких.
Но чтоб написать корректный регфайл, это только с твоей помощью можно с твоими парсингами строки.

-------
Полезное сообщение


Отправлено: 01:57, 21-06-2009 | #29


Аватара для proxy

Старожил


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

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


так.

Ключ реестра: HKEY_CURRENT_USER\Software\DashSignature\Knagalis
Тип ключа: REG_MULTISZ_SZ
Название величины: X
Значение величины: hex(2):56,00,4d,00,4b,00,4a,00,47,00,4e,00,44,00,49,00,44,00,4e,00,57,00,\
4c,00,44,00,4d,00,4b,00,4a,00,47,00,4e,00,44,00,49,00,44,00,4e,00,57,00,4c,\
00,44,00,00,00

все верно?

сейчас создал у себя этот ключ с этими параметрами.
и после чтения получил сразу: hex(2):56,00,4d,00,4b,00,4a,00,47,00,4e,00,44,00,49,00,44,00,4e,00,57,00,\4c,00,44,00,4d,00,4b,00,4a ,00,47,00,4e,00,44,00,49,00,44,00,4e,00,57,00,4c,\00,44,00,00,00
читать дальше »

Код: Выделить весь код
RegWrite('HKEY_CURRENT_USER\Software\DashSignature\Knagalis', 'x', 'REG_MULTI_SZ', 'hex(2):56,00,4d,00,4b,00,4a,00,47,00,4e,00,44,00,49,00,44,00,4e,00,57,00,\4c,00,44,00,4d,00,4b,00,4a,00,47,00,4e,00,44,00,49,00,44,00,4e,00,57,00,4c,\00,44,00,00,00')
$var1 = RegRead('HKEY_CURRENT_USER\Software\DashSignature\Knagalis',  'x')

MsgBox(0, '', $var1)



вопрос, почему у тебя результат чтения: VMKJGNDIDNWLDMKJGNDIDNWLD

или я что то не то делаю/проверяю?

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:14, 21-06-2009 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] RegRead ( "keyname", REG_EXPAND_SZ "valuename" ) ?

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Как удалить папку "Моя музыка","Мои Картинки", "Мое видео"? verdix Microsoft Windows 2000/XP 3 03-10-2009 23:46
[решено] Нужна помощь с StringRegExpReplace ( "test", "PATTERN-ом", "\1"). ikif AutoIt 6 28-07-2009 20:06
Debian/Ubuntu - [решено] Пропали кнопки "свернуть","закрыть","во весь екран" в папках Alex.sys Общий по Linux 5 02-04-2009 11:13
Приоритет в диспетчере: "реального времени", "средний", "выше среднего" alhimik PC Хочу все знать 3 28-11-2006 05:29
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") submaster Microsoft Windows NT/2000/2003 5 13-09-2006 12:29




 
Переход