windows mobile註冊表操作(vb.net) 一切來源於網路

來源:互聯網
上載者:User

Imports System
Imports System.Runtime.InteropServices
Imports System.Text

Public Class cRegistry

    Public Shared Function CreateKey(ByVal strhkeyName As String, ByVal keyName As String) As Integer
        Dim hkey As IntPtr = IntPtr.Zero
        Dim disposition As Integer = 0

        Try
            Return RegCreateKeyEx(intPtrkeyName(strhkeyName), keyName, 0, Nothing, 0, KeyAccess.None, IntPtr.Zero, hkey, disposition)
        Finally
            If IntPtr.Zero.ToInt32() <> hkey.ToInt32() Then
                RegCloseKey(hkey)
            End If
        End Try
    End Function

    Public Shared Function DeleteKey(ByVal keyName As String) As Integer
        Return RegDeleteKey(HKCU, keyName)
    End Function 'DeleteKey

    Public Shared Function intPtrkeyName(ByVal strhkeyName As String) As IntPtr

        Select Case strhkeyName
            Case "HKCR" : intPtrkeyName = New IntPtr(&H80000000)
            Case "HKCU" : intPtrkeyName = New IntPtr(&H80000001)
            Case "HKLM" : intPtrkeyName = New IntPtr(&H80000002)
            Case "HKU" : intPtrkeyName = New IntPtr(&H80000003)
        End Select

    End Function

    Public Shared Function CreateValueString(ByVal strhkeyName As String, ByVal keyName As String, ByVal valueName As String, ByVal stringData As String) As Integer
        Dim hkey As IntPtr = IntPtr.Zero

        Try
            Dim result As Integer = RegOpenKeyEx(intPtrkeyName(strhkeyName), keyName, 0, KeyAccess.None, hkey)
            If ERROR_SUCCESS <> result Then
                Return result
            End If
            Dim bytes As Byte() = Encoding.Unicode.GetBytes(stringData & Chr(0))

            Return RegSetValueEx(hkey, valueName, 0, KeyType.StringKey, bytes, bytes.Length)

        Finally
            If IntPtr.Zero.ToInt32() <> hkey.ToInt32() Then
                RegCloseKey(hkey)
            End If
        End Try
    End Function 'CreateValueString

    Public Shared Function CreateValueDWORD(ByVal strhkeyName As String, ByVal keyName As String, ByVal valueName As String, ByVal dwordData As Integer) As Integer
        Dim hkey As IntPtr = IntPtr.Zero

        Try
            Dim result As Integer = RegOpenKeyEx(intPtrkeyName(strhkeyName), keyName, 0, KeyAccess.None, hkey)
            If ERROR_SUCCESS <> result Then
                Return result
            End If
            Dim bytes As Byte() = BitConverter.GetBytes(dwordData)
            Return RegSetValueEx(hkey, valueName, 0, KeyType.DwordKey, bytes, bytes.Length)
        Finally
            If IntPtr.Zero.ToInt32() <> hkey.ToInt32() Then
                RegCloseKey(hkey)
            End If
        End Try
    End Function 'CreateValueDWORD

    Public Shared Function GetStringValue(ByVal strhkeyName As String, ByVal keyName As String, ByVal valueName As String, ByRef stringResult As String) As Integer
        Dim hkey As IntPtr = IntPtr.Zero

        Try
            Dim result As Integer = RegOpenKeyEx(intPtrkeyName(strhkeyName), keyName, 0, KeyAccess.None, hkey)
            If ERROR_SUCCESS <> result Then
                Return result
            End If
            Dim bytes As Byte() = Nothing
            Dim length As Integer = 0
            Dim keyType As KeyType = keyType.NoKey

            result = RegQueryValueEx(hkey, valueName, IntPtr.Zero, keyType, Nothing, length)

            If ERROR_SUCCESS <> result Then
                Return result
            End If
            keyType = keyType.NoKey
            bytes = New Byte(length) {}

            result = RegQueryValueEx(hkey, valueName, IntPtr.Zero, keyType, bytes, length)

            If ERROR_SUCCESS <> result Then
                Return result
            End If

            stringResult = Encoding.Unicode.GetString(bytes, 0, bytes.Length)

            Return ERROR_SUCCESS
        Finally
            If IntPtr.Zero.ToInt32() <> hkey.ToInt32() Then
                RegCloseKey(hkey)
            End If
        End Try
    End Function 'GetStringValue

    Public Shared Function GetDWORDValue(ByVal strhkeyName As String, ByVal keyName As String, ByVal valueName As String, ByRef dwordResult As Integer) As Integer
        Dim hkey As IntPtr = IntPtr.Zero

        Try
            Dim result As Integer = RegOpenKeyEx(intPtrkeyName(strhkeyName), keyName, 0, KeyAccess.None, hkey)
            If ERROR_SUCCESS <> result Then
                Return result
            End If
            Dim bytes As Byte() = Nothing
            Dim length As Integer = 0 'ToDo: Unsigned Integers not supported
            Dim keyType As KeyType = keyType.NoKey

            result = RegQueryValueEx(hkey, valueName, IntPtr.Zero, keyType, Nothing, length)

            bytes = New Byte(Marshal.SizeOf(GetType(System.Int32))) {}
            length = bytes.Length

            keyType = keyType.NoKey

            result = RegQueryValueEx(hkey, valueName, IntPtr.Zero, keyType, bytes, length)

            If ERROR_SUCCESS <> result Then
                Return result
            End If
            dwordResult = BitConverter.ToInt32(bytes, 0)

            Return ERROR_SUCCESS
        Finally
            If IntPtr.Zero.ToInt32() <> hkey.ToInt32() Then
                RegCloseKey(hkey)
            End If
        End Try
    End Function 'GetDWORDValue

    Public Shared Function DeleteValue(ByVal strhkeyName As String, ByVal keyName As String, ByVal valueName As String) As Integer
        Dim hkey As IntPtr = IntPtr.Zero

        Try
            Dim result As Integer = RegOpenKeyEx(intPtrkeyName(strhkeyName), keyName, 0, KeyAccess.None, hkey)
            If ERROR_SUCCESS <> result Then
                Return result
            End If
            Return RegDeleteValue(hkey, valueName)
        Finally
            If IntPtr.Zero.ToInt32() <> hkey.ToInt32() Then
                RegCloseKey(hkey)
            End If
        End Try
    End Function 'DeleteValue

    Public Enum KeyType
        NoKey = 0
        StringKey = 1
        DwordKey = 4
    End Enum

    Public Enum KeyAccess
        None = &H0
        QueryValue = &H1
        SetValue = &H2
        CreateSubKey = &H4
        EnumerateSubKeys = &H8
        Notify = &H10
        CreateLink = &H20
    End Enum

    Public Shared HKCR As New IntPtr(&H80000000)
    Public Shared HKCU As New IntPtr(&H80000001)
    Public Shared HKLM As New IntPtr(&H80000002)
    Public Shared HKU As New IntPtr(&H80000003)

    Public Const ERROR_SUCCESS As Integer = 0

    <DllImport("coredll.dll", SetLastError:=True)> _
    Public Shared Function RegCreateKeyEx(ByVal hkey As IntPtr, ByVal lpSubKey As String, ByVal Reserved As Integer, ByVal lpClass As StringBuilder, ByVal dwOptions As Integer, ByVal samDesired As KeyAccess, ByVal lpSecurityAttributes As IntPtr, ByRef phkResult As IntPtr, ByRef lpdwDisposition As Integer) As Integer
    End Function

    <DllImport("coredll.dll", SetLastError:=True)> _
    Public Shared Function RegDeleteKey(ByVal hkey As IntPtr, ByVal subkeyName As String) As Integer
    End Function

    <DllImport("coredll.dll", SetLastError:=True)> _
    Public Shared Function RegOpenKeyEx(ByVal hkey As IntPtr, ByVal lpSubKey As String, ByVal ulOptions As Integer, ByVal samDesired As KeyAccess, ByRef phkResult As IntPtr) As Integer
    End Function

    <DllImport("coredll.dll", SetLastError:=True)> _
    Public Shared Function RegQueryValueEx(ByVal hkey As IntPtr, ByVal lpValueName As String, ByVal lpReserved As IntPtr, ByRef lpType As KeyType, ByVal lpData() As Byte, ByRef lpcbData As Integer) As Integer
    End Function

    <DllImport("coredll.dll", SetLastError:=True)> _
    Public Shared Function RegSetValueEx(ByVal hkey As IntPtr, ByVal lpValueName As String, ByVal Reserved As Integer, ByVal dwType As KeyType, ByVal lpData() As Byte, ByVal cbData As Integer) As Integer
    End Function

    <DllImport("coredll.dll", SetLastError:=True)> _
    Public Shared Function RegDeleteValue(ByVal hkey As IntPtr, ByVal valueName As String) As Integer
    End Function

    <DllImport("coredll.dll", SetLastError:=True)> _
    Public Shared Function RegCloseKey(ByVal hkey As IntPtr) As Integer
    End Function

End Class

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.