修改登入編輯 regedit
當然可以, 你可以用這些函式來看和改. 我以前無聊時有用過. 等我下班再把code刊出來GetSystemRegistryQuota
RegConnectRegistry
RegDeleteKey
RegDeleteKeyEx
RegDeleteValue
RegDisablePredefinedCache
RegDisableReflectionKey
RegEnableReflectionKey
RegEnumKeyEx
RegEnumValue
RegFlushKey
RegGetKeySecurity
RegGetValue
RegLoadKey
RegNotifyChangeKeyValue
RegOpenCurrentUser
RegOpenKeyEx
RegOpenUserClassesRoot
RegOverridePredefKey
RegQueryInfoKey
RegQueryMultipleValues
RegQueryReflectionKey
RegQueryValueEx
RegReplaceKey
RegRestoreKey
RegSaveKey
RegSaveKeyEx
RegSetKeySecurity
RegSetValueEx
RegUnLoadKey
-----------------------------------------------------------------------------------------------------
以下的程式是用VB 6.0來改registry
這程式會先在HKEY_LOCAL_MACHINE裡新增一個"SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello"的key
然後在SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello裡新增一個hello的字串值, 值為"hello"
關掉registry之後會重新在HKEY_LOCAL_MACHINE打開"SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello"的key.
讀取hello字串值的值之後刪除hello字串值.
最後關掉registry和在HKEY_LOCAL_MACHINE裡刪除"SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello"的key.
===============================================================
Option Explicit
'Registry Security Attributes TYPE
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean
End Type
' Constants for Registry top-level keys
Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_USERS = &H80000003
Private Const HKEY_CLASSES_ROOT = &H80000000
' Return values
Private Const ERROR_SUCCESS = 0&
Private Const ERROR_MORE_DATA = 234
' RegCreateKeyEx options
Private Const REG_OPTION_NON_VOLATILE = 0
' RegCreateKeyEx Disposition
Private Const REG_CREATED_NEW_KEY = &H1
Private Const REG_OPENED_EXISTING_KEY = &H2
' Registry data types
Private Const REG_NONE = 0
Private Const REG_SZ = 1
Private Const REG_BINARY = 3
Private Const REG_DWORD = 4
' Registry security attributes
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_ALL_ACCESS = &H3F
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 RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) 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, 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
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 Sub Form_Load()
Dim error As Long
Dim key As Long
Dim value As String
Dim size As Long
Dim valType As Long
Dim depth As Long
Dim lpAttr As SECURITY_ATTRIBUTES
lpAttr.nLength = 50
lpAttr.lpSecurityDescriptor = 0
lpAttr.bInheritHandle = True
'新增一個"SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello"的key
error = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello", 0, REG_SZ, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, lpAttr, key, depth)
If (error <> ERROR_SUCCESS) Then
End
End If
'新增一個hello的字串值, 值為"hello"
error = RegSetValueEx(key, "hello", 0, REG_SZ, "hello", 6)
If (error <> ERROR_SUCCESS) Then
End
End If
'關掉registry
RegCloseKey (key)
'在HKEY_LOCAL_MACHINE打開"SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello"的key.
error = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello", 0, KEY_ALL_ACCESS, key)
If (error <> ERROR_SUCCESS) Then
End
End If
value = String$(1024, 0)
size = 1024
'讀取hello字串值的值
error = RegQueryValueEx(key, "hello", 0, valType, value, size)
If (error <> ERROR_SUCCESS) Then
End
End If
'刪除hello字串值
error = RegDeleteValue(key, "hello")
If (error <> ERROR_SUCCESS) Then
End
End If
'關掉registry
RegCloseKey (key)
'在HKEY_LOCAL_MACHINE裡刪除"SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello"的key
error = RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello")
If (error <> ERROR_SUCCESS) Then
End
End If
End Sub
==========================================================
P.S. 修改hello的值跟新增hello字串值都用RegSetValueEx只不過最後兩個輸入值不同而以
例句:
RegSetValueEx(key, "hello", 0, REG_SZ, "hello world", 12)
會把hello裡的值改為hello world.
==========================================================
可以講在registry裡每一個文件夾(key)可以說是一般的文件夾(folder). 你如果要改文件夾裡面的值你就要先打開文件夾(key)
因微軟的registry分成好幾種類型. 像HKEY_LOCAL_MACHINE(你現在所用的電腦), HKEY_CURRENT_USER(你自己)等等. 所以你再開文件夾(key)時要告訴電腦你要開的文件夾(key)是哪一種類型. 當然, 你也要告訴電腦你要開的文件夾的住址.
RegOpenKeyEx是用來打開文件夾, 用法是
RegOpenKeyEx(a, b, c, d,e)
a是你要開的文件夾(key)的類型, HKEY_CURRENT_USER還是HKEY_LOCAL_MACHINE還是其它
b是你要開的文件夾(key)的住址. 像我要開"SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello"就傳進"SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello"
c是微軟保留的輸入值. 所以你可以傳進0.
d是存取控制. 你只要傳進KEY_ALL_ACCESS就可以.(這跟你開檔案時傳進mode一樣, ios::read, ios::app)
e是結果. 如果你成功的打開文件夾(key)的話, e代表你剛剛打開的文件夾.
開了之後你才可以用e來讀取/更新/刪除/建立文件夾裡面的值.
RegQueryValueEx是用來讀取文件夾裡面的值.
RegDeleteValue是用來刪除文件夾裡面的值.
RegSetValueEx是用來更新和建立文件夾裡面的值.
像如果我要讀取在SOFTWARE\microsoft\Windows\CurrentVersion\Run\hello裡的hello的值我可以用
RegQueryValueEx(e, "hello", 0, type, value, size)
type, value, size都是輸出值. type代表"hello"是什麼值, 可能是字串值, DWORD, 或Binary等等.
value是"hello"的值. size是"hello"的值佔有的記憶體空間.
一般來講你要先空出足夠的記憶體空間才行. 所以我在叫RegQueryValueEx以前
value = String$(1024, 0)
size = 1024
這兩行空出1024個記憶體空間.
頁:
[1]