www.pudn.com > SuperDLL2.zip > Shared.bas
Attribute VB_Name = "Shared"
Option Explicit
Public Type POINTAPI
X As Long
Y As Long
End Type
Private Type SHITEMID
cb As Long
abID As Byte
End Type
Public Type ITEMIDLIST
mkid As SHITEMID
End Type
Public Const MAX_PATH = 260
Private Const ERROR_SUCCESS = 0&
Private Const REG_SZ = 1&
Private Const REG_EXPAND_SZ = 2&
Private Const REG_BINARY = 3&
Private Const REG_DWORD = 4&
Private Const REG_MULTI_SZ = 7&
Private Const KEY_QUERY_VALUE = &H1&
Private Const KEY_SET_VALUE = &H2&
Private Const KEY_CREATE_SUB_KEY = &H4&
Private Const KEY_ENUMERATE_SUB_KEYS = &H8&
Private Const KEY_NOTIFY = &H10&
Private Const KEY_CREATE_LINK = &H20&
Private Const SYNCHRONIZE = &H100000
Private Const STANDARD_RIGHTS_READ = &H20000
Private Const STANDARD_RIGHTS_WRITE = &H20000
Private Const KEY_READ = STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY
Private Const KEY_WRITE = STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY
Private Const STANDARD_RIGHTS_ALL = &H1F0000
Public Const zFormOrPictBoxStr As String = "Must pass in the name of either a Form or a PictureBox."
Public Const zNumericStr As String = "Must pass in a numeric value."
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Private Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Private Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Public Function AppPath2(ByVal zPathPtr As String) As String
Dim zPath As String
zPath = Trim3(zPathPtr)
If Right$(zPath, 1) = "\" Then AppPath2 = zPath Else AppPath2 = zPath & "\"
End Function
Public Function FExist(ByVal strPath As String) As Boolean
On Local Error GoTo ErrFile
Open strPath For Input Access Read As #1
Close #1
FExist = True
Exit Function
ErrFile:
FExist = False
End Function
Public Function Trim3(ByVal cString As String) As String
Dim t As Long, Z As Long
For t = 1 To Len(cString)
If Mid$(cString, t, 1) <> " " And Mid$(cString, t, 1) <> Chr$(0) Then Exit For
Next t
For Z = Len(cString) To 1 Step -1
If Mid$(cString, Z, 1) <> " " And Mid$(cString, Z, 1) <> Chr$(0) Then Exit For
Next Z
If Z < t Then
Trim3 = ""
ElseIf Z = t Then
Trim3 = Mid$(cString, t, 1)
Else
Trim3 = Mid$(cString, t, (Z - t) + 1)
End If
End Function
Private Function GetErrorMsg3(ByVal lErrorCode As Long) As String
Select Case lErrorCode
Case 1, 1009, 1015
GetErrorMsg3 = "The Registry Database is corrupt!"
Case 2, 6, 1010
GetErrorMsg3 = "Bad Key Name"
Case 3, 1011
GetErrorMsg3 = "Can't Open Key"
Case 4, 1012
GetErrorMsg3 = "Can't Read Key"
Case 5, 1013
GetErrorMsg3 = "Can't Write Key"
Case 8
GetErrorMsg3 = "Access to this key is denied"
Case 14
GetErrorMsg3 = "Out of memory"
Case 7, 87
GetErrorMsg3 = "Invalid Parameter"
Case 234
GetErrorMsg3 = "There is more data than the buffer has been allocated to hold."
Case 259
GetErrorMsg3 = "No More Items"
Case Else
GetErrorMsg3 = "Undefined Error Code: " & Str$(lErrorCode)
End Select
End Function
Private Function QueryValueEx2(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
On Local Error GoTo QueryValueExExit
Dim rtn As Long
Dim cch As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String
Dim qwe() As String
Dim qaz() As String
Dim t As Long
rtn = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
If rtn <> ERROR_SUCCESS Then MsgBox GetErrorMsg3(rtn), vbExclamation, "SuperDLL - QueryValueEx2"
Select Case lType
Case REG_SZ, REG_EXPAND_SZ:
sValue = String(cch, 0)
rtn = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
If rtn = ERROR_SUCCESS Then
vValue = Left$(sValue, cch - 1)
Else
vValue = "ERROR"
End If
Case REG_DWORD:
rtn = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
If rtn = ERROR_SUCCESS Then
vValue = lValue
Else
vValue = "ERROR"
End If
Case REG_BINARY:
sValue = String(cch, 0)
rtn = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
If rtn = ERROR_SUCCESS Then
vValue = Left$(sValue, cch)
Else
vValue = "ERROR"
End If
Case REG_MULTI_SZ:
sValue = String(cch, 0)
rtn = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
If rtn = ERROR_SUCCESS Then
qwe = Split(Left$(sValue, cch), Chr$(0))
ReDim qaz(0 To (UBound(qwe) - 2))
For t = 0 To UBound(qaz)
qaz(t) = qwe(t)
Next t
vValue = qaz
Else
vValue = "ERROR"
End If
Case Else
rtn = -1
vValue = "ERROR"
End Select
QueryValueExExit:
QueryValueEx2 = rtn
End Function
Public Function QueryValue2(ByVal sKeyName As String, ByVal sValueName As String) As Variant
Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
Dim lPredefinedKey As Long
Dim lRetVal As Long
Dim hKey As Long
Dim vValue As Variant
lPredefinedKey = &H80000002
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = QueryValueEx2(hKey, sValueName, vValue)
QueryValue2 = vValue
RegCloseKey (hKey)
End Function
Public Function KeyValueExist3(ByVal sKey As String, ByVal sKeyName As String) As Boolean
Dim rtn As Long
Dim hKey As Long
Dim MainKeyHandle As Long
Dim lActualType As Long
Dim lSize As Long
Dim sTmp As String
MainKeyHandle = &H80000002
rtn = RegOpenKeyEx(MainKeyHandle, sKey, 0, KEY_READ, hKey) 'open the key
If (rtn = ERROR_SUCCESS) Then
rtn = RegQueryValueEx(hKey, ByVal sKeyName, 0&, lActualType, sTmp, lSize) 'ByVal 0&, lSize)
If (rtn = ERROR_SUCCESS) Then
KeyValueExist3 = True
Else
KeyValueExist3 = False
End If
End If
End Function