REG_BINARY

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 20.04.2005 (Ср) 14:21

Так... А я не понял! Ответ-то будет???

Господин GSerg!!! Куда вы пропали???
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 20.04.2005 (Ср) 15:36

Вот - полный пример чтения/записи бинарного массива:
Код: Выделить всё

Option Explicit

Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
    (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" _
    (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
    ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, _
    lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
    (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
    lpType As Long, lpData As Any, lpcbData As Long) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
    (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
    ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long

Public Const ERROR_SUCCESS As Long = 0

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_DYN_DATA = &H80000006
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003

Public Const REG_OPTION_NON_VOLATILE = 0         ' Key is preserved when system is rebooted
Public Const KEY_ALL_ACCESS = 983103
Public Const REG_BINARY = 3                     ' Free form binary

Public Sub Main()
    Dim iKey As Long, mByteArr() As Byte, s As String, ss As String, i As Long

    If ERROR_SUCCESS = RegOpenKey(HKEY_LOCAL_MACHINE, _
                "SYSTEM\CurrentControlSet\Control\TimeZoneInformation", iKey) Then
        If RegQueryByteValue(iKey, "StandardStart", mByteArr) Then
            For i = 0 To UBound(mByteArr)
                s = IIf(mByteArr(i) >= 16, vbNullString, "0") & Hex(mByteArr(i))
                ss = ss & " " & s
            Next i
            Debug.Print "StandardStart: " & ss
        End If
        RegCloseKey iKey
    End If
    If ERROR_SUCCESS = RegCreateKeyEx(HKEY_CURRENT_USER, _
                "Software\VB and VBA Program Settings\_Test", 0, "", _
                REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, ByVal 0, iKey, 0) Then
        RegSetValueEx iKey, "StandardStart", 0, REG_BINARY, mByteArr(0), UBound(mByteArr) + 1
    End If
   
   
End Sub

Public Function RegQueryByteValue(ByVal hKey As Long, ByVal strValueName As String, mByteArr() As Byte) As Boolean
    Const REG_SZ = 1
    Dim ByteArr() As Byte
    Dim lResult As Long, lValueType As Long, strBuf As String, lDataBufSize As Long
    'retrieve nformation about the key
    lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
    If lResult = 0 Then
        If lValueType = REG_BINARY Then
            'Create a buffer
            ReDim ByteArr(lDataBufSize - 1)
            'retrieve the key's content
            lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByteArr(0), lDataBufSize)
            If lResult = 0 Then
                'Remove the unnecessary chr$(0)'s
                mByteArr = ByteArr
                RegQueryByteValue = True
            End If
        End If
    End If
End Function
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 20.04.2005 (Ср) 17:16

Это-то все понятно! Объясни как в байтовый массив зафигачить десятичное число (например 4513)
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.04.2005 (Чт) 5:36

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

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 21.04.2005 (Чт) 15:48

Короче, всем пасиба. разобрался.
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 145

    TopList