|
有些老掉牙了,這是很久以前寫的了,覺得功能已經(jīng)比較完善了。
下載地址: http://www.wowor.net/bbs/up/files/2004403_mregistry.zip
這是我用這個(gè)模塊寫過的一個(gè)軟件:
注冊(cè)表大師 2.0
http://www.onlinedown.net/soft/16780.htm
標(biāo)準(zhǔn)模塊代碼: '************************************************************************************************************** '* 本模塊提供了一些對(duì)注冊(cè)表進(jìn)行操作的函數(shù) '* 警告: 操作注冊(cè)表是非常危險(xiǎn)的, 使用本模塊中的任何函數(shù)都要慎重!!! '* '* 版權(quán): LPP軟件工作室 '* 作者: 盧培培 '**************************************************************************************************************
Option Explicit
Option Compare Text
'--------------------------------------------------------------- '- 注冊(cè)表 API 聲明... '--------------------------------------------------------------- Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long 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 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 Private Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long Private Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long Private 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 Private Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPriv As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long 'Used to adjust your program's security privileges, can't restore without it! Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As Any, ByVal lpName As String, lpLuid As LUID) As Long 'Returns a valid LUID which is important when making security changes in NT. Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
'--------------------------------------------------------------- '- 注冊(cè)表 Api 常數(shù)... '--------------------------------------------------------------- ' 注冊(cè)表創(chuàng)建類型值... Const REG_OPTION_NON_VOLATILE = 0 ' 當(dāng)系統(tǒng)重新啟動(dòng)時(shí),關(guān)鍵字被保留
' 注冊(cè)表關(guān)鍵字安全選項(xiàng)... Const READ_CONTROL = &H20000 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 KEY_READ = KEY_QUERY_VALUE + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + READ_CONTROL Const KEY_WRITE = KEY_SET_VALUE + KEY_CREATE_SUB_KEY + READ_CONTROL Const KEY_EXECUTE = KEY_READ Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + KEY_CREATE_LINK + READ_CONTROL ' 返回值... Const ERROR_NONE = 0 Const ERROR_BADKEY = 2 Const ERROR_ACCESS_DENIED = 8 Const ERROR_SUCCESS = 0
' 有關(guān)導(dǎo)入/導(dǎo)出的常量 Const REG_FORCE_RESTORE As Long = 8& Const TOKEN_QUERY As Long = &H8& Const TOKEN_ADJUST_PRIVILEGES As Long = &H20& Const SE_PRIVILEGE_ENABLED As Long = &H2 Const SE_RESTORE_NAME = "SeRestorePrivilege" Const SE_BACKUP_NAME = "SeBackupPrivilege"
'--------------------------------------------------------------- '- 注冊(cè)表類型... '--------------------------------------------------------------- Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Boolean End Type
Private Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type
Private Type LUID lowpart As Long highpart As Long End Type
Private Type LUID_AND_ATTRIBUTES pLuid As LUID Attributes As Long End Type
Private Type TOKEN_PRIVILEGES PrivilegeCount As Long Privileges As LUID_AND_ATTRIBUTES End Type
'--------------------------------------------------------------- '- 自定義枚舉類型... '--------------------------------------------------------------- ' 注冊(cè)表數(shù)據(jù)類型... Public Enum ValueType REG_SZ = 1 ' 字符串值 REG_EXPAND_SZ = 2 ' 可擴(kuò)充字符串值 REG_BINARY = 3 ' 二進(jìn)制值 REG_DWORD = 4 ' DWORD值 REG_MULTI_SZ = 7 ' 多字符串值 End Enum
' 注冊(cè)表關(guān)鍵字根類型... Public Enum KeyRoot HKEY_CLASSES_ROOT = &H80000000 HKEY_CURRENT_USER = &H80000001 HKEY_LOCAL_MACHINE = &H80000002 HKEY_USERS = &H80000003 HKEY_PERFORMANCE_DATA = &H80000004 HKEY_CURRENT_CONFIG = &H80000005 HKEY_DYN_DATA = &H80000006 End Enum
Private hKey As Long ' 注冊(cè)表打開項(xiàng)的句柄 Private i As Long, j As Long ' 循環(huán)變量 Private Success As Long ' API函數(shù)的返回值, 判斷函數(shù)調(diào)用是否成功
'------------------------------------------------------------------------------------------------------------- '- 新建注冊(cè)表關(guān)鍵字并設(shè)置注冊(cè)表關(guān)鍵字的值... '- 如果 ValueName 和 Value 都缺省, 則只新建 KeyName 空項(xiàng), 無子鍵... '- 如果只缺省 ValueName 則將設(shè)置指定 KeyName 的默認(rèn)值 '- 參數(shù)說明: KeyRoot--根類型, KeyName--子項(xiàng)名稱, ValueName--值項(xiàng)名稱, Value--值項(xiàng)數(shù)據(jù), ValueType--值項(xiàng)類型 '------------------------------------------------------------------------------------------------------------- Public Function SetKeyValue(KeyRoot As KeyRoot, KeyName As String, Optional ValueName As String, Optional Value As Variant = "", Optional ValueType As ValueType = REG_SZ) As Boolean Dim lpAttr As SECURITY_ATTRIBUTES ' 注冊(cè)表安全類型 lpAttr.nLength = 50 ' 設(shè)置安全屬性為缺省值... lpAttr.lpSecurityDescriptor = 0 ' ... lpAttr.bInheritHandle = True ' ... ' 新建注冊(cè)表關(guān)鍵字... Success = RegCreateKeyEx(KeyRoot, KeyName, 0, ValueType, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, lpAttr, hKey, 0) If Success <> ERROR_SUCCESS Then SetKeyValue = False: RegCloseKey hKey: Exit Function ' 設(shè)置注冊(cè)表關(guān)鍵字的值... If IsMissing(ValueName) = False Then Select Case ValueType Case REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ Success = RegSetValueEx(hKey, ValueName, 0, ValueType, ByVal CStr(Value), LenB(StrConv(Value, vbFromUnicode)) + 1) Case REG_DWORD If CDbl(Value) <= 4294967295# And CDbl(Value) >= 0 Then Dim sValue As String sValue = DoubleToHex(Value) Dim dValue(3) As Byte dValue(0) = Format("&h" & Mid(sValue, 7, 2)) dValue(1) = Format("&h" & Mid(sValue, 5, 2)) dValue(2) = Format("&h" & Mid(sValue, 3, 2)) dValue(3) = Format("&h" & Mid(sValue, 1, 2)) Success = RegSetValueEx(hKey, ValueName, 0, ValueType, dValue(0), 4) Else Success = ERROR_BADKEY End If Case REG_BINARY On Error Resume Next Success = 1 ' 假設(shè)調(diào)用API不成功(成功返回0) ReDim tmpValue(UBound(Value)) As Byte For i = 0 To UBound(tmpValue) tmpValue(i) = Value(i) Next i Success = RegSetValueEx(hKey, ValueName, 0, ValueType, tmpValue(0), UBound(Value) + 1) End Select End If If Success <> ERROR_SUCCESS Then SetKeyValue = False: RegCloseKey hKey: Exit Function ' 關(guān)閉注冊(cè)表關(guān)鍵字... RegCloseKey hKey SetKeyValue = True ' 返回函數(shù)值 End Function
'------------------------------------------------------------------------------------------------------------- '- 獲得已存在的注冊(cè)表關(guān)鍵字的值... '- 如果 ValueName="" 則返回 KeyName 項(xiàng)的默認(rèn)值... '- 如果指定的注冊(cè)表關(guān)鍵字不存在, 則返回空串... '- 參數(shù)說明: KeyRoot--根類型, KeyName--子項(xiàng)名稱, ValueName--值項(xiàng)名稱, ValueType--值項(xiàng)類型 '------------------------------------------------------------------------------------------------------------- Public Function GetKeyValue(KeyRoot As KeyRoot, KeyName As String, ValueName As String, Optional ValueType As Long) As String Dim TempValue As String ' 注冊(cè)表關(guān)鍵字的臨時(shí)值 Dim Value As String ' 注冊(cè)表關(guān)鍵字的值 Dim ValueSize As Long ' 注冊(cè)表關(guān)鍵字的值的實(shí)際長(zhǎng)度 TempValue = Space(1024) ' 存儲(chǔ)注冊(cè)表關(guān)鍵字的臨時(shí)值的緩沖區(qū) ValueSize = 1024 ' 設(shè)置注冊(cè)表關(guān)鍵字的值的默認(rèn)長(zhǎng)度 ' 打開一個(gè)已存在的注冊(cè)表關(guān)鍵字... RegOpenKeyEx KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey ' 獲得已打開的注冊(cè)表關(guān)鍵字的值... RegQueryValueEx hKey, ValueName, 0, ValueType, ByVal TempValue, ValueSize ' 返回注冊(cè)表關(guān)鍵字的的值... Select Case ValueType ' 通過判斷關(guān)鍵字的類型, 進(jìn)行處理 Case REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ TempValue = Left$(TempValue, ValueSize - 1) ' 去掉TempValue尾部空格 Value = TempValue Case REG_DWORD ReDim dValue(3) As Byte RegQueryValueEx hKey, ValueName, 0, REG_DWORD, dValue(0), ValueSize For i = 3 To 0 Step -1 Value = Value + String(2 - Len(Hex(dValue(i))), "0") + Hex(dValue(i)) ' 生成長(zhǎng)度為8的十六進(jìn)制字符串 Next i If CDbl("&H" & Value) < 0 Then ' 將十六進(jìn)制的 Value 轉(zhuǎn)換為十進(jìn)制 Value = 2 ^ 32 + CDbl("&H" & Value) Else Value = CDbl("&H" & Value) End If Case REG_BINARY If ValueSize > 0 Then ReDim bValue(ValueSize - 1) As Byte ' 存儲(chǔ) REG_BINARY 值的臨時(shí)數(shù)組 RegQueryValueEx hKey, ValueName, 0, REG_BINARY, bValue(0), ValueSize For i = 0 To ValueSize - 1 Value = Value + String(2 - Len(Hex(bValue(i))), "0") + Hex(bValue(i)) + " " ' 將數(shù)組轉(zhuǎn)換成字符串 Next i End If End Select ' 關(guān)閉注冊(cè)表關(guān)鍵字... RegCloseKey hKey GetKeyValue = Trim(Value) ' 返回函數(shù)值 End Function
'------------------------------------------------------------------------------------------------------------- '- 刪除已存在的注冊(cè)表關(guān)鍵字的值... '- 如果指定的注冊(cè)表關(guān)鍵字不存在, 則不做任何操作... '- 參數(shù)說明: KeyRoot--根類型, KeyName--子項(xiàng)名稱, ValueName--值項(xiàng)名稱 '------------------------------------------------------------------------------------------------------------- Public Function DeleteKey(KeyRoot As KeyRoot, KeyName As String, Optional ValueName As String) As Boolean Dim tmpKeyName As String ' 注冊(cè)表關(guān)鍵字的臨時(shí)子項(xiàng)名稱 Dim tmpValueName As String ' 注冊(cè)表關(guān)鍵字的臨時(shí)子鍵名稱 ' 打開一個(gè)已存在的注冊(cè)表關(guān)鍵字... Success = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) If Success <> ERROR_SUCCESS Then DeleteKey = False: RegCloseKey hKey: Exit Function ' 刪除已打開的注冊(cè)表關(guān)鍵字... tmpKeyName = "" tmpValueName = KeyName If ValueName = "" Then ' 判斷ValueName是否缺省, 如缺省作相應(yīng)處理 If InStrRev(KeyName, "\") > 1 Then tmpValueName = Right(KeyName, InStrRev(KeyName, "\") + 1) tmpKeyName = Left(KeyName, InStrRev(KeyName, "\") - 1) End If Success = RegOpenKeyEx(KeyRoot, tmpKeyName, 0, KEY_ALL_ACCESS, hKey) Success = RegDeleteKey(hKey, tmpValueName) Else Success = RegDeleteValue(hKey, ValueName) End If If Success <> ERROR_SUCCESS Then DeleteKey = False: RegCloseKey hKey: Exit Function ' 關(guān)閉注冊(cè)表關(guān)鍵字... RegCloseKey hKey DeleteKey = True ' 返回函數(shù)值 End Function
'------------------------------------------------------------------------------------------------------------- '- 獲得注冊(cè)表關(guān)鍵字的一些信息... '- SubKeyName() 注冊(cè)表關(guān)鍵字的所有子項(xiàng)的名稱(注意:最小下標(biāo)為0) '- ValueName() 注冊(cè)表關(guān)鍵字的所有子鍵的名稱(注意:最小下標(biāo)為0) '- ValueType() 注冊(cè)表關(guān)鍵字的所有子鍵的類型(注意:最小下標(biāo)為0) '- CountKey 注冊(cè)表關(guān)鍵字的子項(xiàng)數(shù)量 '- CountValue 注冊(cè)表關(guān)鍵字的子鍵數(shù)量 '- MaxLenKey 注冊(cè)表關(guān)鍵字的子項(xiàng)名稱的最大長(zhǎng)度 '- MaxLenValue 注冊(cè)表關(guān)鍵字的子鍵名稱的最大長(zhǎng)度 '------------------------------------------------------------------------------------------------------------- Public Function GetKeyInfo(KeyRoot As KeyRoot, KeyName As String, SubKeyName() As String, ValueName() As String, ValueType() As ValueType, Optional CountKey As Long, Optional CountValue As Long, Optional MaxLenKey As Long, Optional MaxLenValue As Long) As Boolean Dim f As FILETIME Dim l As Long, s As String ' 打開一個(gè)已存在的注冊(cè)表關(guān)鍵字... Success = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) If Success <> ERROR_SUCCESS Then GetKeyInfo = False: RegCloseKey hKey: Exit Function ' 獲得一個(gè)已打開的注冊(cè)表關(guān)鍵字的信息... Success = RegQueryInfoKey(hKey, vbNullString, ByVal 0&, ByVal 0&, CountKey, MaxLenKey, ByVal 0&, CountValue, MaxLenValue, ByVal 0&, ByVal 0&, f) If Success <> ERROR_SUCCESS Then GetKeyInfo = False: RegCloseKey hKey: Exit Function If CountKey <> 0 Then ReDim SubKeyName(CountKey - 1) As String ' 重新定義數(shù)組, 使用數(shù)組大小與注冊(cè)表關(guān)鍵字的子項(xiàng)數(shù)量匹配 For i = 0 To CountKey - 1 SubKeyName(i) = Space(255) l = 255 RegEnumKeyEx hKey, i, ByVal SubKeyName(i), l, 0, vbNullString, ByVal 0&, f SubKeyName(i) = Left(SubKeyName(i), l) Next i ' 下面的二重循環(huán)對(duì)字符串?dāng)?shù)組進(jìn)行冒泡排序 For i = 0 To UBound(SubKeyName) For j = i + 1 To UBound(SubKeyName) If SubKeyName(i) > SubKeyName(j) Then s = SubKeyName(i) SubKeyName(i) = SubKeyName(j) SubKeyName(j) = s End If Next j Next i End If If CountValue <> 0 Then ReDim ValueName(CountValue - 1) As String ' 重新定義數(shù)組, 使用數(shù)組大小與注冊(cè)表關(guān)鍵字的子鍵數(shù)量匹配 ReDim ValueType(CountValue - 1) As Long ' 重新定義數(shù)組, 使用數(shù)組大小與注冊(cè)表關(guān)鍵字的子鍵數(shù)量匹配 For i = 0 To CountValue - 1 ValueName(i) = Space(255) l = 255 RegEnumValue hKey, i, ByVal ValueName(i), l, 0, ValueType(i), ByVal 0&, ByVal 0& ValueName(i) = Left(ValueName(i), l) Next i ' 下面的二重循環(huán)對(duì)字符串?dāng)?shù)組進(jìn)行冒泡排序 For i = 0 To UBound(ValueName) For j = i + 1 To UBound(ValueName) If ValueName(i) > ValueName(j) Then s = ValueName(i) ValueName(i) = ValueName(j) ValueName(j) = s End If Next j Next i End If ' 關(guān)閉注冊(cè)表關(guān)鍵字... RegCloseKey hKey GetKeyInfo = True ' 返回函數(shù)值 End Function
'------------------------------------------------------------------------------------------------------------- '- 導(dǎo)出注冊(cè)表關(guān)鍵字的值 '- 參數(shù)說明: KeyRoot--根類型, KeyName--子項(xiàng)名稱, FileName--導(dǎo)出的文件路徑及文件名(原始數(shù)據(jù)庫格式) '------------------------------------------------------------------------------------------------------------- Public Function SaveKey(KeyRoot As KeyRoot, KeyName As String, FileName As String) As Boolean On Error Resume Next Dim lpAttr As SECURITY_ATTRIBUTES ' 注冊(cè)表安全類型 lpAttr.nLength = 50 ' 設(shè)置安全屬性為缺省值... lpAttr.lpSecurityDescriptor = 0 ' ... lpAttr.bInheritHandle = True ' ... If EnablePrivilege(SE_BACKUP_NAME) = False Then SaveKey = False Exit Function End If Success = RegOpenKeyEx(KeyRoot, KeyName, 0&, KEY_ALL_ACCESS, hKey) If Success <> 0 Then SaveKey = False Success = RegCloseKey(hKey) Exit Function End If Success = RegSaveKey(hKey, FileName, lpAttr) If Success = 0 Then SaveKey = True Else SaveKey = False Success = RegCloseKey(hKey) End Function
'------------------------------------------------------------------------------------------------------------- '- 導(dǎo)入注冊(cè)表關(guān)鍵字的值 '- 參數(shù)說明: KeyRoot--根類型, KeyName--子項(xiàng)名稱, FileName--導(dǎo)入的文件路徑及文件名(原始數(shù)據(jù)庫格式) '------------------------------------------------------------------------------------------------------------- Public Function RestoreKey(KeyRoot As KeyRoot, KeyName As String, FileName As String) As Boolean On Error Resume Next If EnablePrivilege(SE_RESTORE_NAME) = False Then RestoreKey = False Exit Function End If Success = RegOpenKeyEx(KeyRoot, KeyName, 0&, KEY_ALL_ACCESS, hKey) If Success <> 0 Then RestoreKey = False Success = RegCloseKey(hKey) Exit Function End If Success = RegRestoreKey(hKey, FileName, REG_FORCE_RESTORE) If Success = 0 Then RestoreKey = True Else RestoreKey = False Success = RegCloseKey(hKey) End Function
'------------------------------------------------------------------------------------------------------------- '- 使注冊(cè)表允許導(dǎo)入/導(dǎo)出 '------------------------------------------------------------------------------------------------------------- Private Function EnablePrivilege(seName As String) As Boolean On Error Resume Next Dim p_lngRtn As Long Dim p_lngToken As Long Dim p_lngBufferLen As Long Dim p_typLUID As LUID Dim p_typTokenPriv As TOKEN_PRIVILEGES Dim p_typPrevTokenPriv As TOKEN_PRIVILEGES p_lngRtn = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, p_lngToken) If p_lngRtn = 0 Then EnablePrivilege = False Exit Function End If If Err.LastDllError <> 0 Then EnablePrivilege = False Exit Function End If p_lngRtn = LookupPrivilegeValue(0&, seName, p_typLUID) If p_lngRtn = 0 Then EnablePrivilege = False Exit Function End If p_typTokenPriv.PrivilegeCount = 1 p_typTokenPriv.Privileges.Attributes = SE_PRIVILEGE_ENABLED p_typTokenPriv.Privileges.pLuid = p_typLUID EnablePrivilege = (AdjustTokenPrivileges(p_lngToken, False, p_typTokenPriv, Len(p_typPrevTokenPriv), p_typPrevTokenPriv, p_lngBufferLen) <> 0) End Function
'------------------------------------------------------------------------------------------------------------- '- 將 Double 型( 限制在 0--2^32-1 )的數(shù)字轉(zhuǎn)換為十六進(jìn)制并在前面補(bǔ)零 '- 參數(shù)說明: Number--要轉(zhuǎn)換的 Double 型數(shù)字 '------------------------------------------------------------------------------------------------------------- Private Function DoubleToHex(ByVal Number As Double) As String Dim strHex As String strHex = Space(8) For i = 1 To 8 Select Case Number - Int(Number / 16) * 16 Case 10 Mid(strHex, 9 - i, 1) = "A" Case 11 Mid(strHex, 9 - i, 1) = "B" Case 12 Mid(strHex, 9 - i, 1) = "C" Case 13 Mid(strHex, 9 - i, 1) = "D" Case 14 Mid(strHex, 9 - i, 1) = "E" Case 15 Mid(strHex, 9 - i, 1) = "F" Case Else Mid(strHex, 9 - i, 1) = CStr(Number - Int(Number / 16) * 16) End Select Number = Int(Number / 16) Next i DoubleToHex = strHex End Function
|