⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 register.bas

📁 档案管理系统源码VB档案管理系统源码VB
💻 BAS
字号:
Attribute VB_Name = "Bas"
Option Explicit

Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const WM_MOUSEMOVE = &H200
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4
Public Const REG_ERROR = "REGISTRY_ERROR"
Public Const NIM_MODIFY = &H1
Public Const NIF_ICON = &H2
Public Const WM_LBUTTONDOWN As Long = &H201
Public Const WM_LBUTTONUP As Long = &H202
Public Const WM_LBUTTONDBLCLK As Long = &H203
Public Const WM_MBUTTONDOWN As Long = &H207
Public Const WM_MBUTTONUP As Long = &H208
Public Const WM_MBUTTONDBLCLK As Long = &H209
Public Const WM_RBUTTONDOWN As Long = &H204
Public Const WM_RBUTTONUP As Long = &H205
Public Const WM_RBUTTONDBLCLK As Long = &H206

Type FILETIME
    lLowDateTime    As Long
    lHighDateTime   As Long
End Type

Public Type NOTIFYICONDATA
    cbSize As Long
    hwnd As Long
    uID As Long
    uFlags As Long
    uCallbackMessage As Long
    hIcon As Long
    szTip As String * 64
End Type


Public T As NOTIFYICONDATA

Declare Function RegOpenKeyEx& Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey&, ByVal lpszSubKey$, dwOptions&, ByVal samDesired&, lpHKey&)
Declare Function RegCreateKey& Lib "advapi32" Alias "RegCreateKeyA" (ByVal hKey&, ByVal lpszSubKey$, phkResult&)
Declare Function RegCreateKeyEx& Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal Reserved&, ByVal lpClass$, ByVal dwOptions&, ByVal samDesired&, lpSecurityAttributes&, phkResult&, lpdwDisposition&)
Declare Function RegDeleteKey& Lib "advapi32" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpszSubKey As String)
Declare Function RegCloseKey& Lib "advapi32.dll" (ByVal hKey&)
Declare Function RegQueryValueEx& Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey&, ByVal lpszValueName$, ByVal lpdwRes&, lpdwType&, ByVal lpDataBuff$, nSize&)
Declare Function RegSetValueEx& Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey&, ByVal lpszValueName$, ByVal dwRes&, ByVal dwType&, lpDataBuff As Any, ByVal nSize&)

Declare Function RegConnectRegistry& Lib "advapi32.dll" (ByVal lpMachineName$, ByVal hKey&, phkResult&)
Declare Function RegFlushKey& Lib "advapi32.dll" (ByVal hKey&)
Declare Function RegEnumKeyEx& Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey&, ByVal dwIndex&, ByVal lpName$, lpcbName&, ByVal lpReserved&, ByVal lpClass$, lpcbClass&, lpftLastWriteTime As FILETIME)
Declare Function RegEnumValue& Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey&, ByVal dwIndex&, ByVal lpName$, lpcbName&, ByVal lpReserved&, lpdwType&, lpValue As Any, lpcbValue&)
Declare Function RegQueryInfoKey& Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey&, ByVal lpClass$, lpcbClass&, ByVal lpReserved&, lpcSubKeys&, lpcbMaxSubKeyLen&, lpcbMaxClassLen&, lpcValues&, lpcbMaxValueNameLen&, lpcbMaxValueLen&, lpcbSecurityDescriptor&, lpftLastWriteTime As FILETIME)
Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

Const ERROR_SUCCESS = 0&
Const ERROR_BADDB = 1009&
Const ERROR_BADKEY = 1010&
Const ERROR_CANTOPEN = 1011&
Const ERROR_CANTREAD = 1012&
Const ERROR_CANTWRITE = 1013&
Const ERROR_OUTOFMEMORY = 14&
Const ERROR_INVALID_PARAMETER = 87&
Const ERROR_ACCESS_DENIED = 5&
Const ERROR_NO_MORE_ITEMS = 259&
Const ERROR_MORE_DATA = 234&

Const REG_NONE = 0&
Const REG_SZ = 1&
Const REG_EXPAND_SZ = 2&
                                          
Const REG_BINARY = 3&
Const REG_DWORD = 4&
Const REG_DWORD_LITTLE_ENDIAN = 4&
Const REG_DWORD_BIG_ENDIAN = 5&
Const REG_LINK = 6&
Const REG_MULTI_SZ = 7&
Const REG_RESOURCE_LIST = 8&
Const REG_FULL_RESOURCE_DESCRIPTOR = 9&
Const REG_RESOURCE_REQUIREMENTS_LIST = 10&

Const KEY_QUERY_VALUE = &H1&
Const KEY_SET_VALUE = &H2&
Const KEY_CREATE_SUB_KEY = &H4&
Const KEY_ENUMERATE_SUB_KEYS = &H8&
Const KEY_NOTIFY = &H10&
Const KEY_CREATE_LINK = &H20&
Const READ_CONTROL = &H20000
Const WRITE_DAC = &H40000
Const WRITE_OWNER = &H80000
Const SYNCHRONIZE = &H100000
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const STANDARD_RIGHTS_READ = READ_CONTROL
Const STANDARD_RIGHTS_WRITE = READ_CONTROL
Const STANDARD_RIGHTS_EXECUTE = READ_CONTROL
Const KEY_READ = STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or _
KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY
Const KEY_WRITE = STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or _
KEY_CREATE_SUB_KEY
Const KEY_EXECUTE = KEY_READ

Public gbSkipRegErrMsg As Boolean

Public Const DRIVE_CDROM = 5
Public NotifyTrue As Boolean, PlayTrue As Boolean


Public Function DeleteRegKey(sKeyName As String) As Boolean

 Dim hKey As Long, lRtn As Long
 Dim lMainKeyHandle As Long
     
     DeleteRegKey = False
     
Call ParseKey(sKeyName, lMainKeyHandle)
     
     If lMainKeyHandle Then
        lRtn = RegOpenKeyEx(lMainKeyHandle, sKeyName, 0&, KEY_WRITE, hKey)
     If lRtn = ERROR_SUCCESS Then
        lRtn = RegDeleteKey(hKey, sKeyName)
        lRtn = RegCloseKey(hKey)
        DeleteRegKey = True
     End If
End If

gbSkipRegErrMsg = False

End Function

Private Function GetMainKeyHandle(sMainKeyName As String) As Long

 '系统注册表主键的常量列表
 
  Const HKEY_CLASSES_ROOT = &H80000000
  Const HKEY_CURRENT_USER = &H80000001
  Const HKEY_LOCAL_MACHINE = &H80000002
  Const HKEY_USERS = &H80000003
  Const HKEY_PERFORMANCE_DATA = &H80000004
  Const HKEY_CURRENT_CONFIG = &H80000005
  Const HKEY_DYN_DATA = &H80000006
   
  Select Case sMainKeyName
 
        Case "HKEY_CLASSES_ROOT"
             GetMainKeyHandle = HKEY_CLASSES_ROOT
        Case "HKEY_CURRENT_USER"
             GetMainKeyHandle = HKEY_CURRENT_USER
        Case "HKEY_LOCAL_MACHINE"
             GetMainKeyHandle = HKEY_LOCAL_MACHINE
        Case "HKEY_USERS"
             GetMainKeyHandle = HKEY_USERS
        Case "HKEY_PERFORMANCE_DATA"
             GetMainKeyHandle = HKEY_PERFORMANCE_DATA
        Case "HKEY_CURRENT_CONFIG"
             GetMainKeyHandle = HKEY_CURRENT_CONFIG
        Case "HKEY_DYN_DATA"
             GetMainKeyHandle = HKEY_DYN_DATA
  End Select

End Function

Private Function GetRegError(lErrorCode As Long) As String
    
'注册错误

Select Case lErrorCode
    
    Case 1009, 1015
        GetRegError = "注册表数据据损坏!   "
    Case 2, 1010
        GetRegError = "注册键员损坏!    "
    Case 1011
        GetRegError = "不能打开键!    "
    Case 4, 1012
        GetRegError = "不能阅读键!    "
    Case 5
        GetRegError = "访问键时被拒绝!    "
    Case 1013
        GetRegError = "不能写键!    "
    Case 8, 14
        GetRegError = "内存溢出!    "
    Case 87
        GetRegError = "无效的参数!    "
    Case 234
        GetRegError = "比缓冲区更多的数据需要保留!    "
    Case Else
        GetRegError = "未定义的错误代码:    " & Str$(lErrorCode)
End Select

End Function

Private Sub ParseKey(sKeyName As String, lKeyHandle As Long)
   
   Dim nBackSlash As Integer
       nBackSlash = InStr(sKeyName, "\")
       
'分析主键与子键
  If Left(sKeyName, 5) <> "HKEY_" Or Right(sKeyName, 1) = "\" Then
     MsgBox "注册键格式错误 !!!  " & vbCrLf & vbCrLf & sKeyName, vbOKOnly + vbQuestion, "格式错误"
     Exit Sub
  End If
       If nBackSlash = 0 Then
          lKeyHandle = GetMainKeyHandle(sKeyName)
          sKeyName = ""
       Else
          lKeyHandle = GetMainKeyHandle(Left(sKeyName, nBackSlash - 1))
          sKeyName = Right(sKeyName, Len(sKeyName) - nBackSlash)
       End If

   If lKeyHandle < &H80000000 Or lKeyHandle > &H80000006 Then
      MsgBox " 无效的主键句柄 !    ", vbOKOnly + vbExclamation, "句柄错误"
   End If

End Sub

Public Function GetRegStringValue(sSubKey As String, sEntry As String) As String

  Dim hKey As Long, lMainKeyHandle As Long
  Dim lRtn As Long, sBuffer As String
  Dim lBufferSize As Long, lType As Long
  Dim sErrMsg As String

      lType = REG_SZ
      GetRegStringValue = REG_ERROR

      Call ParseKey(sSubKey, lMainKeyHandle)

If lMainKeyHandle Then

    lRtn = RegOpenKeyEx(lMainKeyHandle, sSubKey, 0&, KEY_READ, hKey)
    
    If lRtn = ERROR_SUCCESS Then
        '请求键值
        sBuffer = Space(255)
        lBufferSize = Len(sBuffer)
        lRtn = RegQueryValueEx(hKey, sEntry, 0&, lType, sBuffer, lBufferSize)
        
        If lRtn = ERROR_SUCCESS Then
           lRtn = RegCloseKey(hKey)
            '除去后面的空串
            sBuffer = Trim(sBuffer)
            GetRegStringValue = Left(sBuffer, Len(sBuffer) - 1)
        Else
        
            If gbSkipRegErrMsg = False Then
                sErrMsg = GetRegError(lRtn)
                MsgBox sErrMsg + "    ", vbCritical, "请求注册键值错误!"
            End If
            
        End If
    Else
        If Not gbSkipRegErrMsg Then
            sErrMsg = GetRegError(lRtn)
            MsgBox sErrMsg, vbCritical, "注册键打开错误!"
        End If
    End If
End If

gbSkipRegErrMsg = False

End Function

Public Function WriteRegStringValue(sSubKey As String, sEntry As String, sValue As String) As Boolean

   Dim hKey As Long, lMainKeyHandle As Long
   Dim lRtn As Long, lDataSize As Long
   Dim lType As Long, sErrMsg As String

   WriteRegStringValue = False

   lType = REG_SZ

   Call ParseKey(sSubKey, lMainKeyHandle)

If lMainKeyHandle Then
    '打开注册键
    lRtn = RegOpenKeyEx(lMainKeyHandle, sSubKey, 0&, KEY_WRITE, hKey)
    If lRtn = ERROR_SUCCESS Then
        '写键值
        lDataSize = Len(sValue)
        lRtn = RegSetValueEx(hKey, sEntry, 0&, lType, ByVal sValue, lDataSize)
        
        If lRtn = ERROR_SUCCESS Then
            WriteRegStringValue = True
        Else
           If Not gbSkipRegErrMsg Then
              sErrMsg = GetRegError(lRtn)
              MsgBox sErrMsg, vbCritical, "写注册键值时错误"
            End If
        End If
        lRtn = RegCloseKey(hKey)
    Else
        If Not gbSkipRegErrMsg Then
            sErrMsg = GetRegError(lRtn)
            MsgBox sErrMsg, vbCritical, "注册键打开错误"
        End If
    End If
End If

gbSkipRegErrMsg = False

End Function

Public Function CreateRegKey(sSubKey As String) As Boolean

    Dim lMainKeyHandle As Long, hKey As Long
    Dim sErrMsg As String, lRtn As Long

    CreateRegKey = False

    Call ParseKey(sSubKey, lMainKeyHandle)

'建立子键
If lMainKeyHandle Then
    lRtn = RegCreateKey(lMainKeyHandle, sSubKey, hKey)
    If lRtn = ERROR_SUCCESS Then
        '建立完成,关闭
        lRtn = RegCloseKey(hKey)
        CreateRegKey = True
    Else
        If Not gbSkipRegErrMsg Then
           sErrMsg = GetRegError(lRtn)
           MsgBox sErrMsg, vbCritical, "建立子键错误"
        End If
    End If
End If

gbSkipRegErrMsg = False

End Function

Public Function FirstCDDrive() As String

 Const ASC_A = 65
 Const ASC_Z = ASC_A + 25

 Dim i As Integer

    For i = ASC_A To ASC_Z
        If GetDriveType(Chr$(i) & ":\") = DRIVE_CDROM Then
            FirstCDDrive = Chr$(i)
            Exit For
        End If
    Next i
    
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -