利用注册表(Registry)与初始化文件(Initialization File)函数读写信息

‘ 利用初始化文件读写信息
lRet = WriteIniFile(“General”, “Name”, “wyrcad”, “D:\Test.ini”)
lRet = WriteIniFile(“General”, “Age”, “36”, “D:\Test.ini”)
sRet = ReadIniFile(“General”, “Name”, “D:\Test.ini”)
Debug.Print sRet
sRet = ReadIniFile(“General”, “Age”, “D:\Test.ini”)
Debug.Print sRet

‘ 利用注册表读写信息
Call SaveString(HKEY_CURRENT_USER, “Software\Yager\WCAD”, “Name”, “wyrcad”, “General”, “D:\Test.ini”)
Call SaveString(HKEY_CURRENT_USER, “Software\Yager\WCAD”, “Age”, “36”, “General”, “D:\Test.ini”)
sRet = GetString(HKEY_CURRENT_USER, “Software\Yager\WCAD”, “Name”, “General”, “D:\Test.ini”)
Debug.Print sRet
sRet = GetString(HKEY_CURRENT_USER, “Software\Yager\WCAD”, “Age”, “General”, “D:\Test.ini”)
Debug.Print sRet

‘ 删除注册表或初始化文件信息
DelSetting HKEY_CURRENT_USER, “Software\Yager\WCAD”, “Name”, “General”, “D:\Test.ini”
DelSetting HKEY_CURRENT_USER, “Software\Yager\WCAD”, “Age”, “General”, “D:\Test.ini”

二十四史简介——梁书

《梁书》记载自梁武帝萧衍建国至梁敬帝萧方智亡国共五十六年间的历史,是姚察及其子姚思廉两代人辛勤撰写完成的。
姚察,字伯审,吴兴武康人,南朝历史学家。
历经梁、陈、隋三朝,于陈朝任秘书监、领大著作、吏部尚书等职,于隋朝任秘书丞。入隋后于文帝开皇九年又受命编撰梁、陈两代历史,未竟而卒。临终时遗命,嘱其子姚思廉继续完成撰史工作。
姚思廉,字简之,姚思廉在撰史工作中,充分利用了其父已完成的史著旧稿。
自贞观三年至贞观十年,历时七年最终完成了《梁书》与《陈书》的撰写工作。
姚察及姚思廉父子虽为史学家,但都有较深厚的文字素养,于史文撰著方面,文字简洁朴素,力戒追求辞藻的华丽与浮泛,继承了司马迁及班固的文风与笔法,在南朝诸史中是难能可贵的。

文件系统对象(File System Object)函数系列之一

Public Function GetExeVersion(ByVal sFullName As String) As String ‘获取可执行文件版本号
Dim FSO As Object
GetExeVersion = “”
If Not FileExist(sFullName) Then Exit Function
Set FSO = CreateObject(“Scripting.FileSystemObject”)
GetExeVersion = FSO.GetFileVersion(sFullName)
Set FSO = Nothing
End Function

Public Function GetExeInfo(ByVal sFullName As String) As String ‘获取可执行文件的信息
Dim FSO As Object
GetExeInfo = “”
If Not FileExist(sFullName) Then Exit Function
Set FSO = CreateObject(“Scripting.FileSystemObject”)
Dim oFile As Object
Set oFile = FSO.GetFile(sFullName)
GetExeInfo = oFile.Size ‘Type/Attributes/Name/Path .etc
Set FSO = Nothing
End Function

Public Function GetWindows() As String ‘获取 Windows
Dim FSO As Object
Set FSO = CreateObject(“Scripting.FileSystemObject”)
GetWindows = FSO.GetSpecialFolder(0)
Set FSO = Nothing
End Function

Public Function GetSystem() As String ‘获取 System
Dim FSO As Object
Set FSO = CreateObject(“Scripting.FileSystemObject”)
GetSystem = FSO.GetSpecialFolder(1)
Set FSO = Nothing
End Function

Public Function GetTemporary() As String ‘获取 Temporary
Dim FSO As Object
Set FSO = CreateObject(“Scripting.FileSystemObject”)
GetTemporary = FSO.GetSpecialFolder(2)
Set FSO = Nothing
End Function

Public Function GetFileList(ByVal sFolder As String) As String ‘获取文件夹本级内所有文件
Dim FSO As Object
Set FSO = CreateObject(“Scripting.FileSystemObject”)
Dim oFolder As Object, oItem As Object, oCollection As Object
Dim sList As String
If FSO.FolderExists(sFolder) Then
Set oFolder = FSO.GetFolder(sFolder)
Set oCollection = oFolder.Files
‘Debug.Print oCollection.Count
For Each oItem In oCollection
sList = sList & oItem.Name
sList = sList & “|”
Next
GetFileList = sList
Else
GetFileList = “”
End If
Set FSO = Nothing
End Function

Public Function GetFolderList(ByVal sFolder As String) As String ‘获取文件夹下一级所有子文件夹
Dim FSO As Object
Set FSO = CreateObject(“Scripting.FileSystemObject”)
Dim oFolder As Object, oItem As Object, oCollection As Object
Dim sList As String
If FSO.FolderExists(sFolder) Then
Set oFolder = FSO.GetFolder(sFolder)
Set oCollection = oFolder.SubFolders
‘Debug.Print oCollection.Count
For Each oItem In oCollection
sList = sList & oItem.Name
sList = sList & “|”
Next
GetFolderList = sList
Else
GetFolderList = “”
End If
Set FSO = Nothing
End Function

Public Function GetDrivesList() As String
Dim FSO As Object
Set FSO = CreateObject(“Scripting.FileSystemObject”)
Dim oItem As Object, oCollection As Object
Dim sList As String
Set oCollection = FSO.Drives
For Each oItem In oCollection
‘Debug.Print oItem.SerialNumber
sList = sList & oItem.DriveLetter
sList = sList & “|”
Next
GetDrivesList = sList
Set FSO = Nothing
End Function

二十四史简介——南齐书

《南齐书》记述南朝萧齐王朝自齐高帝建元元年至齐和帝中兴二年,共二十三年史事,是现存关于南齐最早的纪传体断代史。原名《齐书》,至宋代为区别于李百药所著《北齐书》,改称为《南齐书》,撰著者为萧子显。
萧子显,字景阳,南朝历史学家、文学家。出身皇族,萧子显博学多识,长于写作,又是自齐入梁的贵族人物,对南齐许多史事、王室情况是熟悉的或是亲自经历过的,加之梁朝取代南齐,未经重大战乱,许多图书文籍得以保存,都为萧子显撰著史书提供了有利条件。
《南齐书》现存五十九卷,其中帝纪八卷,志十一卷,列传四十卷。
所缺一卷为《自序》。
《南齐书》文字比较简洁,文笔流畅,叙事完备。列传的撰写,继承了班固《汉书》的类叙法,又借鉴沈约《宋书》的代叙法,能于一传中列述较多人物,避免人各一传不胜其烦的弊病。又书中各志及类传,除少数外,大都写有序文,借以概括全篇内容,提示写作主旨。

注册表(Registry)函数系列之一

Option Explicit
‘注册表操作
Public Declare Function RegCloseKey Lib “advapi32.dll” (ByVal hkey As Long) As Long
Private Declare Function RegCreateKey Lib “advapi32.dll” Alias “RegCreateKeyA” (ByVal hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
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 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&, ByVal lpValueName$, ByVal Reserved&, ByVal dwType&, ByVal lpData$, ByVal cbData&) As Long
Private Declare Function RegSetValue Lib “advapi32.dll” Alias “RegSetValueA” (ByVal hkey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Private Declare Function RegDeleteValue Lib “advapi32.dll” Alias “RegDeleteValueA” (ByVal hkey As Long, ByVal lpValueName As String) As Long
Public Declare Function RegOpenKeyEx Lib “advapi32” Alias “RegOpenKeyExA” (ByVal hkey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, ByRef phkResult As Long) As Long
Public Declare Function RegCreateKeyEx Lib “advapi32.dll” Alias “RegCreateKeyExA” (ByVal hkey&, ByVal lpSubKey$, ByVal Reserved&, ByVal lpClass$, ByVal dwOptions&, ByVal samDesired&, ByVal SecAtts&, phkResult&, lpdwDisp&) As Long
Private Declare Function RegDeleteKey Lib “advapi32.dll” Alias “RegDeleteKeyA” (ByVal hkey As Long, ByVal lpSubKey As String) As Long
Public Declare Function SHDeleteKey Lib “shlwapi.dll” Alias “SHDeleteKeyA” (ByVal hkey As Long, ByVal pszSubKey As String) As Long

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_DYN_DATA = &H80000006
Public Const KEY_ALL_ACCESS = (&H1F0000 Or &H1 Or &H2 Or &H4 Or &H8 Or &H10 Or &H20) And (Not &H100000)
Public Const REG_NONE = (0)
Public Const REG_SZ = (1) ‘REG_SZ ——键值存储为字符串值
Public Const REG_EXPAND_SZ = (2)
Public Const REG_BINARY = (3) ‘REG_BINARY ——键值存储为二进制值
Public Const REG_DWORD = (4) ‘REG_DWORD ——键值存储为DWORD值(双字)
Public Const REG_DWORD_BIG_ENDIAN = (5)
Public Const REG_LINK = (6)
Public Const REG_MULTI_SZ = (7)
Public Const REG_RESOURCE_LIST = (8)
Public Const REG_FULL_RESOURCE_DESCRIPTOR = (9)
Public Const REG_RESOURCE_REQUIREMENTS_LIST = (10)

Function RegQueryStringValue(ByVal hkey As Long, ByVal sValueName As String) As String
On Error Resume Next
Dim lResult As Long, lValueType As Long, sBuf As String, lDataBufSize As Long
‘retrieve nformation about the key
lResult = RegQueryValueEx(hkey, sValueName, 0, lValueType, ByVal 0, lDataBufSize)
If lResult = 0 Then
If lValueType = REG_SZ Then
‘Create a buffer
sBuf = String(lDataBufSize, Chr$(0))
‘retrieve the key’s content
lResult = RegQueryValueEx(hkey, sValueName, 0, 0, ByVal sBuf, lDataBufSize)
If lResult = 0 Then
‘Remove the unnecessary chr$(0)’s
‘RegQueryStringValue = Left$(sBuf, InStr(1, sBuf, Chr$(0)) – 1)
‘Avoid making mistakes when chr$(0) is zero
RegQueryStringValue = GetAPIString(sBuf)
End If
ElseIf lValueType = REG_BINARY Then
Dim sData As Integer
‘retrieve the key’s value
lResult = RegQueryValueEx(hkey, sValueName, 0, 0, sData, lDataBufSize)
If lResult = 0 Then
RegQueryStringValue = sData
End If
End If
End If
On Error GoTo 0
End Function

Function GetString(ByVal hkey As Long, sPath As String, ByVal sValue As String, ByVal sApp As Variant, ByVal sIniFile As Variant) ‘从注册表读取数据, 如果失败则从初始化文件读取
On Error Resume Next
Dim lResult1, lResult2
‘Open the key
lResult1 = RegOpenKey(hkey, sPath, lRet)
‘Get the key’s content
lResult2 = RegQueryStringValue(lRet, sValue)
GetString = lResult2
‘Close the key
RegCloseKey lRet
On Error GoTo 0
‘OS is diversity, determine if registry success
If IsMissing(sApp) Then Exit Function
If IsMissing(sIniFile) Then Exit Function
If lResult1 = 0 And Len(lResult2) > 0 And Not ChineseExist(lResult2) Then Exit Function ‘含汉字字符串时不一定对
On Error Resume Next
‘Read ini file, when operating Registry is fail.
GetString = ReadIniFile(sApp, sValue, sIniFile)
On Error GoTo 0
End Function

Sub SaveString(ByVal hkey As Long, ByVal sPath As String, ByVal sValue As String, ByVal sData As String, ByVal sApp As Variant, ByVal sIniFile As Variant) ‘向注册表写入数据, 如果失败则向初始化文件写入
On Error Resume Next
Dim lResult1, lResult2
‘Create a new key
lResult1 = RegCreateKey(hkey, sPath, lRet)
‘Save a string to the key
lResult2 = RegSetValueEx(lRet, sValue, 0, REG_SZ, ByVal sData, Len(sData))
‘close the key
RegCloseKey lRet
On Error GoTo 0
‘Debug.Print lResult1
‘Debug.Print lResult2
‘OS is diversity, determine if registry success
If IsMissing(sApp) Then Exit Function
If IsMissing(sIniFile) Then Exit Function
If lResult1 = 0 And lResult2 = 0 And Not ChineseExist(sData) Then Exit Sub ‘含汉字字符串时结果有问题
On Error Resume Next
‘Write ini file, when operating Registry is fail.
WriteIniFile sApp, sValue, sData, sIniFile
WritePrivateProfileString sApp, sValue, sData, sIniFile
On Error GoTo 0
End Sub

Sub DelSetting(ByVal hkey As Long, ByVal sPath As String, ByVal sValue As String, ByVal sApp As Variant, ByVal sIniFile As Variant) ‘删除注册表数据, 如果失败则删除初始化文件数据
On Error Resume Next
‘Debug.Print hKey
‘Debug.Print sPath
‘Debug.Print sValue
Dim lResult1, lResult2
‘Create a new key
lResult1 = RegCreateKey(hkey, sPath, lRet)
‘Delete the key’s value
lResult2 = RegDeleteValue(lRet, sValue)
‘close the key
RegCloseKey lRet
On Error GoTo 0
‘Debug.Print lResult1
‘Debug.Print lResult2
‘OS is diversity, determine if registry success
If IsMissing(sApp) Then Exit Function
If IsMissing(sIniFile) Then Exit Function
If lResult1 = 0 And hkey = HKEY_LOCAL_MACHINE Then Exit Sub ‘lResult2 = 2 or 5 含汉字字符串时须两处删除
On Error Resume Next
‘Write ini file, when operating Registry is fail.
WriteIniFile sApp, sValue, vbNullString, sIniFile
WritePrivateProfileString sApp, sValue, vbNullString, sIniFile
On Error GoTo 0
End Sub

Public Sub DelKey(hkey As Long, sKey As String)
‘Delete the key
lRet = RegDeleteKey(hkey, sKey)
End Sub