分享
 
 
 

★★★敬请留意★★★:和微软一模一样的记事本的源代码(5)

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Type Formstate

Deleted As Integer

Dirty As Integer

Color As Long

End Type

Public Fstate As Formstate

Public Fstring As String

Public Gstring As String

Public Sstring As String

Public StartPos As Integer

Public EndPos As Integer

Public Tchange As Boolean

Type FILETIME

lLowDateTime As Long

lHighDateTime As Long

End Type

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

Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long

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

Declare Function RegQueryValueExA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByRef lpData As Long, lpcbData As Long) As Long

Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long

Declare Function RegSetValueExA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByRef lpData As Long, ByVal cbData As Long) As Long

Declare Function RegSetValueExB Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByRef lpData As Byte, ByVal cbData As Long) 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

Dim hKey As Long, MainKeyHandle As Long

Dim rtn As Long, lBuffer As Long, sBuffer As String

Dim lBufferSize As Long

Dim lDataSize As Long

Dim ByteArray() As Byte

'This constant determins wether or not to display error messages to the

'user. I have set the default value to False as an error message can and

'does become irritating after a while. Turn this value to true if you want

'to debug your programming code when reading and writing to your system

'registry, as any errors will be displayed in a message box.

Const DisplayErrorMsg = False

Function SetDWORDValue(SubKey As String, Entry As String, Value As Long)

Call ParseKey(SubKey, MainKeyHandle)

If MainKeyHandle Then

rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_WRITE, hKey) 'open the key

If rtn = ERROR_SUCCESS Then 'if the key was open successfully then

rtn = RegSetValueExA(hKey, Entry, 0, REG_DWORD, Value, 4) 'write the value

If Not rtn = ERROR_SUCCESS Then 'if there was an error writting the value

If DisplayErrorMsg = True Then 'if the user want errors displayed

MsgBox ErrorMsg(rtn) 'display the error

End If

End If

rtn = RegCloseKey(hKey) 'close the key

Else 'if there was an error opening the key

If DisplayErrorMsg = True Then 'if the user want errors displayed

MsgBox ErrorMsg(rtn) 'display the error

End If

End If

End If

End Function

Function GetDWORDValue(SubKey As String, Entry As String)

Call ParseKey(SubKey, MainKeyHandle)

If MainKeyHandle Then

rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_READ, hKey) 'open the key

If rtn = ERROR_SUCCESS Then 'if the key could be opened then

rtn = RegQueryValueExA(hKey, Entry, 0, REG_DWORD, lBuffer, 4) 'get the value from the registry

If rtn = ERROR_SUCCESS Then 'if the value could be retreived then

rtn = RegCloseKey(hKey) 'close the key

GetDWORDValue = lBuffer 'return the value

Else 'otherwise, if the value couldnt be retreived

GetDWORDValue = "Error" 'return Error to the user

If DisplayErrorMsg = True Then 'if the user wants errors displayed

MsgBox ErrorMsg(rtn) 'tell the user what was wrong

End If

End If

Else 'otherwise, if the key couldnt be opened

GetDWORDValue = "Error" 'return Error to the user

If DisplayErrorMsg = True Then 'if the user wants errors displayed

MsgBox ErrorMsg(rtn) 'tell the user what was wrong

End If

End If

End If

End Function

Function SetBinaryValue(SubKey As String, Entry As String, Value As String)

Call ParseKey(SubKey, MainKeyHandle)

If MainKeyHandle Then

rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_WRITE, hKey) 'open the key

If rtn = ERROR_SUCCESS Then 'if the key was open successfully then

lDataSize = Len(Value)

ReDim ByteArray(lDataSize)

For i = 1 To lDataSize

ByteArray(i) = Asc(Mid$(Value, i, 1))

Next

rtn = RegSetValueExB(hKey, Entry, 0, REG_BINARY, ByteArray(1), lDataSize) 'write the value

If Not rtn = ERROR_SUCCESS Then 'if the was an error writting the value

If DisplayErrorMsg = True Then 'if the user want errors displayed

MsgBox ErrorMsg(rtn) 'display the error

End If

End If

rtn = RegCloseKey(hKey) 'close the key

Else 'if there was an error opening the key

If DisplayErrorMsg = True Then 'if the user wants errors displayed

MsgBox ErrorMsg(rtn) 'display the error

End If

End If

End If

End Function

Function GetBinaryValue(SubKey As String, Entry As String)

Call ParseKey(SubKey, MainKeyHandle)

If MainKeyHandle Then

rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_READ, hKey) 'open the key

If rtn = ERROR_SUCCESS Then 'if the key could be opened

lBufferSize = 1

rtn = RegQueryValueEx(hKey, Entry, 0, REG_BINARY, 0, lBufferSize) 'get the value from the registry

sBuffer = Space(lBufferSize)

rtn = RegQueryValueEx(hKey, Entry, 0, REG_BINARY, sBuffer, lBufferSize) 'get the value from the registry

If rtn = ERROR_SUCCESS Then 'if the value could be retreived then

rtn = RegCloseKey(hKey) 'close the key

GetBinaryValue = sBuffer 'return the value to the user

Else 'otherwise, if the value couldnt be retreived

GetBinaryValue = "Error" 'return Error to the user

If DisplayErrorMsg = True Then 'if the user wants to errors displayed

MsgBox ErrorMsg(rtn) 'display the error to the user

End If

End If

Else 'otherwise, if the key couldnt be opened

GetBinaryValue = "Error" 'return Error to the user

If DisplayErrorMsg = True Then 'if the user wants to errors displayed

MsgBox ErrorMsg(rtn) 'display the error to the user

End If

End If

End If

End Function

Function DeleteKey(Keyname As String)

Call ParseKey(Keyname, MainKeyHandle)

If MainKeyHandle Then

rtn = RegOpenKeyEx(MainKeyHandle, Keyname, 0, KEY_WRITE, hKey) 'open the key

If rtn = ERROR_SUCCESS Then 'if the key could be opened then

rtn = RegDeleteKey(hKey, Keyname) 'delete the key

rtn = RegCloseKey(hKey) 'close the key

End If

End If

End Function

Function GetMainKeyHandle(MainKeyName 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 MainKeyName

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

Function ErrorMsg(lErrorCode As Long) As String

'If an error does accurr, and the user wants error messages displayed, then

'display one of the following error messages

Select Case lErrorCode

Case 1009, 1015

GetErrorMsg = "The Registry Database is corrupt!"

Case 2, 1010

GetErrorMsg = "Bad Key Name"

Case 1011

GetErrorMsg = "Can't Open Key"

Case 4, 1012

GetErrorMsg = "Can't Read Key"

Case 5

GetErrorMsg = "Access to this key is denied"

Case 1013

GetErrorMsg = "Can't Write Key"

Case 8, 14

GetErrorMsg = "Out of memory"

Case 87

GetErrorMsg = "Invalid Parameter"

Case 234

GetErrorMsg = "There is more data than the buffer has been allocated to hold."

Case Else

GetErrorMsg = "Undefined Error Code: " & Str$(lErrorCode)

End Select

End Function

Function GetStringValue(SubKey As String, Entry As String)

Call ParseKey(SubKey, MainKeyHandle)

If MainKeyHandle Then

rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_READ, hKey) 'open the key

If rtn = ERROR_SUCCESS Then 'if the key could be opened then

sBuffer = Space(255) 'make a buffer

lBufferSize = Len(sBuffer)

rtn = RegQueryValueEx(hKey, Entry, 0, REG_SZ, sBuffer, lBufferSize) 'get the value from the registry

If rtn = ERROR_SUCCESS Then 'if the value could be retreived then

rtn = RegCloseKey(hKey) 'close the key

sBuffer = Trim(sBuffer)

GetStringValue = Left(sBuffer, Len(sBuffer) - 1) 'return the value to the user

Else 'otherwise, if the value couldnt be retreived

GetStringValue = "Error" 'return Error to the user

If DisplayErrorMsg = True Then 'if the user wants errors displayed then

MsgBox ErrorMsg(rtn) 'tell the user what was wrong

End If

End If

Else 'otherwise, if the key couldnt be opened

GetStringValue = "Error" 'return Error to the user

If DisplayErrorMsg = True Then 'if the user wants errors displayed then

MsgBox ErrorMsg(rtn) 'tell the user what was wrong

End If

End If

End If

End Function

Private Sub ParseKey(Keyname As String, Keyhandle As Long)

rtn = InStr(Keyname, "\") 'return if "\" is contained in the Keyname

If Left(Keyname, 5) <> "HKEY_" Or Right(Keyname, 1) = "\" Then 'if the is a "\" at the end of the Keyname then

MsgBox "Incorrect Format:" + Chr(10) + Chr(10) + Keyname 'display error to the user

Exit Sub 'exit the procedure

ElseIf rtn = 0 Then 'if the Keyname contains no "\"

Keyhandle = GetMainKeyHandle(Keyname)

Keyname = "" 'leave Keyname blank

Else 'otherwise, Keyname contains "\"

Keyhandle = GetMainKeyHandle(Left(Keyname, rtn - 1)) 'seperate the Keyname

Keyname = Right(Keyname, Len(Keyname) - rtn)

End If

End Sub

Function CreateKey(SubKey As String)

Call ParseKey(SubKey, MainKeyHandle)

If MainKeyHandle Then

rtn = RegCreateKey(MainKeyHandle, SubKey, hKey) 'create the key

If rtn = ERROR_SUCCESS Then 'if the key was created then

rtn = RegCloseKey(hKey) 'close the key

End If

End If

End Function

Function SetStringValue(SubKey As String, Entry As String, Value As String)

Call ParseKey(SubKey, MainKeyHandle)

If MainKeyHandle Then

rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_WRITE, hKey) 'open the key

If rtn = ERROR_SUCCESS Then 'if the key was open successfully then

rtn = RegSetValueEx(hKey, Entry, 0, REG_SZ, ByVal Value, Len(Value)) 'write the value

If Not rtn = ERROR_SUCCESS Then 'if there was an error writting the value

If DisplayErrorMsg = True Then 'if the user wants errors displayed

MsgBox ErrorMsg(rtn) 'display the error

End If

End If

rtn = RegCloseKey(hKey) 'close the key

Else 'if there was an error opening the key

If DisplayErrorMsg = True Then 'if the user wants errors displayed

MsgBox ErrorMsg(rtn) 'display the error

End If

End If

End If

End Function

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有