Sign in Join
Wiki copytemporary

fcl-registry

English · Español · Русский

fcl-registry is an FCL unit that provides access to the Windows registry. It is cross-platform. How? In non-Windows operating systems it creates a reg.xml file. For example, under non-Windows operating systems it creates the per user XML file (HKEY_CURRENT_USER) reg.xml in the /home/[user]/.config/application_name/ directory; the global XML file (HKEY_LOCAL_MACHINE) reg.xml is created in the /etc/application_name/ directory which is invariably a read-only location unless you are the root or Admin user.

Registry terms

RootKey: registry hive where you want to start accessing the registry. Examples: HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER

Key: the path to the "directory" that contains individual data. This is a bit counter-intuitive but a holdover from compatibility with earlier versions of the registry.

Name/value: the actual name/value pairs in the Key "directory". Each key can have a default value, whose name is (an empty string).

Example

Example that tries to get a value:

pascal
uses ... registry...

var
  CompileCommand: string='';
  Registry: TRegistry;
begin
  Registry := TRegistry.Create;
  try
    // Navigate to proper "directory":
    Registry.RootKey := HKEY_LOCAL_MACHINE;
    if Registry.OpenKeyReadOnly('\SOFTWARE\Classes\InnoSetupScriptFile\shell\Compile\Command') then
      CompileCommand:=Registry.ReadString(''); //read the value of the default name
  finally
    Registry.Free;  // In non-Windows operating systems this flushes the reg.xml file to disk
  end;
end;

Accessing 64 bit and 32 bit registry views

If you have 64 bit Windows, the registry is split up into a 64 bit and 32 bit (compatibility) part. By default, if you run a 32 bit process, you see the 32 bit part; if you run a 64 bit application, you see the 64 bit part.

You can also access the 32 bit part from 64 bit applications and vice versa. From MSDN

These keys are defined in the registry unit so you can just use them: eg in the registry object's Access property, like this:

pascal
Registry := TRegistry.Create;
Try
  Registry.Access:=Registry.Access or KEY_WOW64_64KEY;

or in the registry.create call, eg:

pascal
TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);

Administrative privileges

Depending on what you want to read/write in the Windows registry, you may need administrator rights and elevation (Windows Vista+). Please see Use manifest file to set execution level

See also

Packages List


From the Free Pascal wiki, page "fcl-registry", as it stood on 2020-05-06 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 1, last changed by WikiArchive .

Edited on wiki.freepascal.org by 4 people, 2012–2020

From the official wiki's backup of 26 May 2024: who edited this page there, and when. Edits made there after that date were not recorded, and the earlier versions are not shown here; the main page says why.

WhenWhoWhat changed
BigChimpCreated registry/fcl-registry key
Jwdietrich
Jwdietrich
Swen (minor)
BigChimp64 bit and 32 bit registry
BigChimp (minor)
BigChimp (minor)
BigChimpAccessing 64 bit and 32 bit registry views (minor)
BigChimp (minor)
BigChimpElevation
TrevFixed syntax highlighting; typos; wiki markup (minor)
TrevSee also: Fixed broken page link (minor)
TrevSee also: Added description to page link (minor)
TrevRemoved Windows-only text; this is cross-platform; removed categories included in page template
TrevExpanded reg.xml file locations description

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.