06. november 2001 - 15:56
#2
men hvis du absolut vil læse/skrive i registry så værsågod:
regset
------
Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Declare Function RegCreateKeyEx& Lib \"advapi32.dll\" Alias \"RegCreateKeyExA\" (ByVal hKey&, ByVal lpSubKey$, ByVal Reserved&, ByVal lpClass$, ByVal dwOptions&, ByVal samDesired&, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult&, lpdwDisposition&)
Declare Function RegSetValueEx& Lib \"advapi32.dll\" Alias \"RegSetValueExA\" (ByVal hKey&, ByVal lpszValueName$, ByVal dwRes&, ByVal dwType&, ByVal lpDataBuff$, ByVal nSize&)
Declare Function RegCloseKey& Lib \"advapi32.dll\" (ByVal hKey&)
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const KEY_SET_VALUE = &H2&
Const KEY_CREATE_SUB_KEY = &H4&
Const REG_SZ = 1&
Const READ_CONTROL = &H20000
Const STANDARD_RIGHTS_WRITE = READ_CONTROL
Const Key_Write = STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY
Sub RegSetValue(H_KEY&, RSubKey$, ValueName$, RegValue$)
\'H_KEY must be one of the Key Constants
Dim lRtn& \'returned by registry functions, should be 0&
Dim hKey& \'return handle to opened key
Dim lpDisp&
Dim Sec_Att As SECURITY_ATTRIBUTES
Sec_Att.nLength = 12&
Sec_Att.lpSecurityDescriptor = 0&
Sec_Att.bInheritHandle = False
lRtn = RegCreateKeyEx(H_KEY, RSubKey, 0&, \"\", 0&, Key_Write, Sec_Att, hKey, lpDisp)
If lRtn <> 0 Then
Exit Sub \'No key open, so leave
End If
lRtn = RegSetValueEx(hKey, ValueName, 0&, REG_SZ, ByVal RegValue, CLng(Len(RegValue) + 1))
lRtn = RegCloseKey(hKey)
End Sub
regget
------
Declare Function RegCloseKey& Lib \"advapi32.dll\" (ByVal hKey&)
Declare Function RegOpenKeyExA& Lib \"advapi32.dll\" (ByVal hKey&, ByVal lpszSubKey$, dwOptions&, ByVal samDesired&, lpHKey&)
Declare Function RegQueryValueExA& Lib \"advapi32.dll\" (ByVal hKey&, ByVal lpszValueName$,ByVal lpdwRes&, lpdwType&, ByVal lpDataBuff$, nSize&)
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const ERROR_SUCCESS = 0&
Const REG_SZ = 1& \' Unicode nul terminated string
Const REG_DWORD = 4& \' 32-bit number
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
Function RegGetValue$(MainKey&, SubKey$, value$)
\' MainKey must be one of the Publicly declared HKEY constants.
Dim sKeyType& \'returns the key type. This function expects REG_SZ or REG_DWORD
Dim ret& \'returned by registry functions, should be 0&
Dim lpHKey& \'return handle to opened key
Dim lpcbData& \'length of data in returned string
Dim ReturnedString$ \'returned string value
Dim fTempDbl!
If MainKey >= &H80000000 And MainKey <= &H80000006 Then
\' Open key
ret = RegOpenKeyExA(MainKey, SubKey, 0&, Key_Read, lpHKey)
If ret <> ERROR_SUCCESS Then
RegGetValue = \"\"
Exit Function \'No key open, so leave
End If
\' Set up buffer for data to be returned in.
\' Adjust next value for larger buffers.
lpcbData = 255
ReturnedString = Space$(lpcbData)
\' Read key
ret& = RegQueryValueExA(lpHKey, value, ByVal 0&, sKeyType, ReturnedString, lpcbData)
If ret <> ERROR_SUCCESS Then
RegGetValue = \"\" \'Key still open, so finish up
Else
If sKeyType = REG_DWORD Then
fTempDbl = Asc(Mid$(ReturnedString, 1, 1)) + &H100& * Asc(Mid$(ReturnedString, 2, 1)) + &H10000 * Asc(Mid$(ReturnedString, 3, 1)) + &H1000000 * CDbl(Asc(Mid$(ReturnedString, 4, 1)))
RegGetValue = Format$(fTempDbl, \"000\")
Else
RegGetValue = Left$(ReturnedString, lpcbData - 1)
End If
End If
\' Always close opened keys.
ret = RegCloseKey(lpHKey)
End If
End Function