The following commands Read, Write, and Delete registry information stored under
HKEY_CURRENT_USER\Software\
VB and VBA Program Settings\appname\section\key
| SaveSetting | appname, section, key, value |
| GetSetting | (appname, section, key[, default]) |
| DeleteSetting | (appname, section, key) |
| GetAllSettings | (appname, section) |
The following example is from VB 6.0 help on SaveSetting
' Place some settings in the registry.
SaveSetting appname := "MyApp", section := "Startup", _
key := "Top", setting := 75
SaveSetting "MyApp","Startup", "Left", 50
' Remove section and all its settings from registry.
DeleteSetting "MyApp", "Startup"
Basically, this code is worthless.
There is no way to specify actual registry entries.
You can only read and write values in the special
VB Applications section of the registry.
(Notice the Pascal/Delphi assignment syntax
(var := "str")
when named parameters are used.)
If you want the freedom to access any key in the registry, then you must use the Windows API calls.
from Windows.pas because they are not in the help
const
{ Reserved Key Handles. }
HKEY_CLASSES_ROOT = $80000000;
HKEY_CURRENT_USER = $80000001;
HKEY_LOCAL_MACHINE = $80000002;
HKEY_USERS = $80000003;
HKEY_PERFORMANCE_DATA = $80000004;
HKEY_CURRENT_CONFIG = $80000005;
HKEY_DYN_DATA = $80000006;
from Registry.pas
constructor TRegistry.Create;
begin
RootKey := HKEY_CURRENT_USER;
LazyWrite := True;
end;
// How to test for HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
// The following test returns true
var
a: string;
b:boolean;
reg1: TRegistry;
begin
a:='SOFTWARE\Microsoft';
reg1 := TRegistry.create;
reg1.RootKey := HKEY_LOCAL_MACHINE;
b:=reg1.KeyExists(a);
if b then
UIEdit.text:='True'
else
UIEdit.text:='False';
reg1.free;
end;
The following code produces an error when the application closes.
reg1.create;Use
reg1 := TRegistry.create;
......
reg1.free;
instead.
var
reg: TRegistry;
begin
reg := TRegistry.create;
try
// Your code here
finally
reg.free;
end;
end;
In order to access the (Default) value, use a null string ('').
reg1.RootKey := HKEY_CLASSES_ROOT;
if reg1.openKey('.txt', false) then
begin
reg1.WriteString('', 'your string'); // null means "default"
reg1.closeKey;
end;
An at-sign (@) is used in the .reg files to refer to the
default value. However, in Delphi,
the following creates a string value called '@'
reg1.WriteString('@', 'your string');
The reg1.GetValueNames method returns the names of the available parameters.
There appears to be a coding error - MyRegistry is changed to MRURegistry.
MyRegistry := TRegistry.Create;
' full key = HKEY_CURRENT_USER\Software\MyApps\Settings
MyRegistry.OpenKey('\Software\Myapps\Settings', True);
MRURegistry.WriteString('LastFile','myfile.txt');
MRURegistry.WriteString('LastDirectory','C:\');
MRURegistry.WriteString('Data',1);
MyRegistry.Free;
*****
var
FileName: String;
MyRegistry := TRegistry.Create;
MyRegistry.OpenKey('\Software\Myapps\Settings', True);
FileName := MyRegistry.ReadString("LastFile");
MyRegistry.Free;
Because the TRegistry destructor closes the current key,
there is no reason to call CloseKey explicitly.
*****
ZDNet provides several utilities written by Neil J. Rubenking which include Delphi source code and text descriptions of the design technique.
LONG RegOpenKey( HKEY hKey, // handle to open key
LPCTSTR lpSubKey, // address of name of subkey to open
PHKEY phkResult // address of handle to open key);
' -----------------
' ADVAPI32
' -----------------
' function prototypes, constants, and type definitions
' for Windows 32-bit Registry API
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_PERFORMANCE_DATA = &H80000004 // Windows NT
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_DYN_DATA = &H80000006 // Windows 95 & 98
' Registry API prototypes
RegCloseKey (ByVal hKey As Long) As Long
RegConnectRegistry (ByVal lpMachineName As String, ByVal hKey As Long, phkResult As Long) As Long
RegCreateKey (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
RegCreateKeyEx (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
RegDeleteKey (ByVal hKey As Long, ByVal lpSubKey As String) As Long
RegDeleteValue (ByVal hKey As Long, ByVal lpValueName As String) As Long
RegEnumKey (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
RegEnumKeyEx (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
RegEnumValue (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
RegFlushKey (ByVal hKey As Long) As Long
RegGetKeySecurity (ByVal hKey As Long, ByVal SecurityInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR, lpcbSecurityDescriptor As Long) As Long
RegLoadKey (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long
RegNotifyChangeKeyValue
(ByVal hKey As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long
RegOpenKey (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
RegOpenKeyEx (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
RegQueryInfoKey (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
RegQueryValue (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
RegQueryValueEx (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value.
RegReplaceKey (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpNewFile As String, ByVal lpOldFile As String) As Long
RegRestoreKey (ByVal hKey As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long
RegSaveKey (ByVal hKey As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
RegSetKeySecurity (ByVal hKey As Long, ByVal SecInfo As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR) As Long
RegSetValue (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
RegSetValueEx (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 ' Note that if you declare the lpData parameter as String, you must pass it By Value.
RegUnLoadKey (ByVal hKey As Long, ByVal lpSubKey As String) As Long