Windows Registry Functions V3.0

xiaoxiao2021-03-06  63

$ Include ../cdefines.inc}

UNIT CREGISTRY;

{}

{Windows registry functions v3.01}

{}

{THIS UNIT IS COPYRIGHT? 2002-2004 by David J Butler}

{}

{THIS UNIT IS Part of Delphi Fundamentals.

{ITS Original File Name IS Cregistry.PAS}

{The Latest Version IS Available from The Fundamentals Home Page}

{Http://fundementals.sourceforge.net/}

{}

{I invite you to use this unit, free of charge.

{I invite you to distibute this unit, but it must be for free.

{I also invite you to controle to its development,}

{But do not distribute a modified copy of this file.

{}

{A forum is available on sourceforge for general discussion}

{Http://sourceforge.net/forum/forum.php?forum_id=2117}

{}

{Description:}

{Windows registry functions.

{} {Revision history:}

{2002/09/22 3.00 Created Cregistry Unit from CWindows.

{2002/12/08 3.01 small revisions.

{}

Interface

Uses

{DELPHI}

Windows,

{Fundamentals}

CUTILS;

{}

{Registry functions}

{}

Procedure splitregname

Const Name:

String;

Var Key, Valuename:

String);

{EXISTS}

Function Regkeyexists

Const rootkey: HKEY;

Const Key:

String):

Boolean;

Function regvalueexists

Const rootkey: HKEY;

Const Key, Name:

String):

Boolean;

{Set}

Function RegSetValue

Const rootkey: HKEY;

Const Key, Name:

String;

CONST VALUETYPE: Cardinal

Const value: Pointer;

Const Valuesize:

Integer:

Boolean;

OVERLOAD;

Function RegSetValue

Const rootkey: HKEY;

Const Name:

String;

CONST VALUETYPE: Cardinal

Const value: Pointer;

Const Valuesize:

Integer:

Boolean;

OVERLOAD;

Function setRegistryString

Const rootkey: HKEY;

Const Key:

String;

Const Name:

String;

Const Value:

String):

Boolean;

OVERLOAD;

Function setRegistryString

Const rootkey: HKEY;

Const Name:

String;

Const Value:

String):

Boolean;

OVERLOAD;

Function setRegistryDword (const rootkey: hkey;

Const Name:

String;

Const value: longword:

Boolean;

Function setRegistryBinary Binary (

Const rootkey: HKEY;

Const Name:

String;

CONST VALUE;

Const Valuesize:

Integer:

Boolean;

{Get}

Function ReggetValue

Const rootkey: HKEY;

Const Key, Name:

String;

CONST VALUETYPE: Cardinal

Var RegvalueType: cardinal

VAR valuebuf: Pointer;

Var valueSize:

Integer:

Boolean;

OVERLOAD;

Function ReggetValue

Const rootkey: HKEY;

Const Name:

String;

CONST VALUETYPE: Cardinal

Var RegvalueType: cardinal

VAR valuebuf: Pointer;

Var valueSize:

Integer:

Boolean;

OVERLOAD;

Function getRegistryString

Const rootkey: HKEY;

Const Key, Name:

String):

String;

OVERLOAD;

Function getRegistryString

Const rootkey: HKEY;

Const Name:

String):

String;

OVERLOAD;

Function GetRegistrydWord

Const rootkey: HKEY;

Const Key, Name:

: Longword;

{Delete}

Function deleteregistryValue

Const rootkey: HKEY;

Const Key, Name:

String):

Boolean;

Function deleteregistryKey

Const rootkey: HKEY;

Const Key:

String):

Boolean;

{Transote registries}

Function ConnectRegistry (

Const Machinename:

String;

Const rootkey: HKEY;

Var RemoteKey: HKEY):

Boolean;

Function disconnectregistry

Const Remotekey: HKey:

Boolean;

{ENUMERATE}

Function enumregistryValues

Const rootkey: HKEY;

Const Name:

String;

VAR Valuelist: StringArray:

Boolean;

Function enumregistryKeys

Const rootkey: HKEY; Const Name:

String;

VAR Keylist: StringArray:

Boolean;

IMPLEMENTATION

Uses

{DELPHI}

SYSUTILS,

{Fundamentals}

CSTRINGS;

{}

{Registry}

{}

Procedure splitregname

Const Name:

String;

Var Key, Valuename:

String);

Var S:

String;

I:

Integer;

Begin

S: = strexclsuffix (strexclprefix (Name,

'/'),

'/');

I: = poschar

'/', S);

IF i <=

0

THEN

Begin

Key: = S;

VALUENAME: =

'';

EXIT;

END;

Key: = COPYLEFT (S, I -

1);

Valuename: = CopyFrom (S, I

1);

END;

{EXISTS}

Function Regkeyexists

Const rootkey: HKEY;

Const Key:

String):

Boolean;

VAR HANDLE: HKEY;

Begin

IF Regopenkeyex (RootKey, Pchar (Key),

0, key_read, handle = error_success

THEN

Begin

Result: =

True;

RegcloseKey (Handle);

end

Else

Result: =

False;

END;

Function regvalueexists

Const rootkey: HKEY;

Const Key, Name:

String):

Boolean;

VAR HANDLE: HKEY;

Begin

IF Regopenkeyex (RootKey, Pchar (Key),

0, key_read, handle = error_success

THEN

Begin

Result: = RegQueryValueex (Handle, Pointer (Name), NIL, NIL, NIL, NIL) = Error_suCcess;

RegcloseKey (Handle);

end

Else

Result: =

False;

END;

{Set}

Function RegSetValue

Const rootkey: HKEY;

Const Key, Name:

String;

CONST VALUETYPE: Cardinal

Const value: Pointer;

Const Valuesize:

Integer:

Boolean;

VAR D: DWORD;

Handle: HKEY;

Begin

Result: =

False;

IF valueesize <

0

THEN

EXIT;

If RegcreateKeyex (Rootkey, Pchar (Key),

0, NIL, REG_OPTION_NON_VOLATILE,

Key_Write, NIL, Handle, @D) <> error_success

THEN

EXIT;

Result: = RegSetValueex (Handle, Pointer (Name),

0, valueetype, value, valueesize = error_success;

RegcloseKey (Handle);

END;

Function RegSetValue

Const rootkey: HKEY;

Const Name:

String;

CONST VALUETYPE: Cardinal

Const value: Pointer;

Const Valuesize:

Integer:

Boolean;

VAR K, N:

String;

Begin

SplitRegname (Name, K, N);

Result: = RegSetValue (RootKey, K, N, ValueType, Value, VALUESize);

END;

Function setRegistryString

Const rootkey: HKEY;

Const Key:

String;

Const Name:

String;

Const Value:

String):

Boolean;

Begin

Result: = RegSetValue (RootKey, Key, Name, Reg_SZ, Pchar (Value), Length

1);

END;

Function setRegistryString

Const rootkey: HKEY;

Const Name:

String;

Const Value:

String):

Boolean;

Begin

Result: = RegSetValue (RootKey, Name, Reg_sz, Pchar (Value), Length (Value)

1);

END;

Function setRegistryDWord

Const rootkey: HKEY;

Const Name:

String;

Const value: longword:

Boolean;

Begin

Result: = RegSetValue (rootkey, name, reg_dword, @Value, sizeof (longword));

END;

Function setRegistryBinary Binary (

Const rootkey: HKEY;

Const Name:

String;

CONST VALUE;

Const Valuesize:

Integer:

Boolean;

Begin

Result: = RegSetValue (RootKey, Name, Reg_binary, @Value, VALUESIZE);

END;

{Get}

Function ReggetValue

Const rootkey: HKEY;

Const Key, Name:

String;

CONST VALUETYPE: Cardinal

Var RegvalueType: cardinal; var valuebuf: Pointer

Var valueSize:

Integer:

Boolean;

VAR HANDLE: HKEY;

BUF: POINTER;

BUFSIZE: Cardinal

Begin

Result: =

False;

VALUESIZE: =

0;

Valuebuf: = NIL;

IF Regopenkeyex (RootKey, Pchar (Key),

0, Key_Read, Handle <> error_success

THEN

EXIT;

BUFSIZE: =

0;

RegQueryValueex (Handle, Pointer (Name), NIL, @RegvalueType, NIL, @Bufsize);

IF bufsize <=

0

THEN

EXIT;

GetMem (buf, bufsize);

If RegQueryValueex (Handle, Pointer (Name), NIL, @RegvalueType, BUF, @Bufsize) = Error_Success

THEN

Begin

Valuebuf: = BUF;

VALUESIZE: =

Integer (bufsize);

Result: =

True;

END;

IF

NOT RESULT

THEN

FreeMem (buf);

RegcloseKey (Handle);

END;

Function ReggetValue

Const rootkey: HKEY;

Const Name:

String;

CONST VALUETYPE: Cardinal

Var RegvalueType: cardinal

VAR valuebuf: Pointer;

Var valueSize:

Integer:

Boolean;

VAR K, N:

String;

Begin

SplitRegname (Name, K, N);

Result: = ReggetValue (RootKey, K, N, ValueType, RegvalueType, ValueBuf, VALUESIZE);

END;

Function getRegistryString

Const rootkey: HKEY;

Const Key, Name:

String):

String;

VAR BUF: POINTER;

Size:

Integer;

Vtype: cardinal;

Begin

Result: =

'';

IF

NOT ReggetValue (RootKey, Key, Name, Reg_sz, Vtype, BUF, SIZE)

THEN

EXIT;

IF (VTYPE = REG_DWORD)

AND (size> = sizeof (longword))

THEN

Result: = INTOSTR (Plongword (buf) ^)

Else

IF size>

0

THEN

Begin

SETLENGTH (Result, Size)

1);

MoveMem (buf ^, Pointer (Result) ^, Size

1);

END;

FreeMem (buf);

END;

Function getRegistryString

Const rootkey: HKEY;

Const Name:

String):

String;

VAR K, N:

String;

Begin

SplitRegname (Name, K, N);

Result: = GetRegistryString (RootKey, K, N); END;

Function GetRegistrydWord

Const rootkey: HKEY;

Const Key, Name:

: Longword;

VAR BUF: POINTER;

Size:

Integer;

Vtype: cardinal;

Begin

Result: =

0;

IF

NOT ReggetValue (RootKey, Key, Name, Reg_dword, Vtype, BUF, SIZE)

THEN

EXIT;

IF (VTYPE = REG_DWORD)

AND (size> = sizeof (longword))

THEN

Result: = Plongword (buf) ^;

FreeMem (buf);

END;

{Delete}

Function deleteregistryValue

Const rootkey: HKEY;

Const Key, Name:

String):

Boolean;

VAR HANDLE: HKEY;

Begin

IF Regopenkeyex (RootKey, Pchar (Key),

0, key_write, handle) = error_success

THEN

Begin

Result: = RegdeleteValue (Handle, Pointer (Name) = Error_suCcess;

RegcloseKey (Handle);

end

Else

Result: =

False;

END;

Function deleteregistryKey

Const rootkey: HKEY;

Const Key:

String):

Boolean;

VAR HANDLE: HKEY;

K, N:

String;

Begin

SplitRegname (Key, K, N);

IF regopenkeyex (RootKey, Pchar (K),

0, key_write, handle) = error_success

THEN

Begin

Result: = regdeleteKey (Handle, Pointer (N)) = Error_Success;

RegcloseKey (Handle);

end

Else

Result: =

False;

END;

{Transote registries}

Function ConnectRegistry (

Const Machinename:

String;

Const rootkey: HKEY;

Var RemoteKey: HKEY):

Boolean;

Begin

Result: = regonnectregistry (Pchar (Machinename), Rootkey, RemoteKey = Error_Success;

END;

Function disconnectregistry

Const Remotekey: HKey:

Boolean;

Begin

RESULT: = regclosekey (remotekey) = error_success;

END;

{Enumerate} Function Regenum

Const rootkey: HKEY;

Const Name:

String;

Var Resultlist: StringArray;

Const dokeys:

Boolean:

Boolean;

VAR BUF:

Array [

0 ..

2047]

Of char;

BUFSIZE: Cardinal

I:

Integer;

RES:

Integer;

S:

String;

Handle: HKEY;

Begin

Resultlist: = NIL;

Result: = regopenkeyex (rootkey, pchar (name),

0, key_read, handle = error_success;

IF

NOT RESULT

THEN

EXIT;

I: =

0;

Repeat

BUFSIZE: = Sizeof (BUF);

IF dokeys

THEN

Res: = regenumKeyex (Handle, I, @BUF [

0], BUFSIZE, NIL, NIL, NIL, NIL

Else

Res: = regenumvalue (Handle, I, @BUF [

0] BUFSIZE, NIL, NIL, NIL, NIL;

if res = error_success

THEN

Begin

SETLENGTH (S, BUFSIZE);

IF buffsize>

0

THEN

MoveMem (BUF [

0], Pointer (s) ^, buffsize;

Append (ResultList, s);

INC (I);

END;

Until RES <> Error_Success;

RegcloseKey (Handle);

END;

Function enumregistryValues

Const rootkey: HKEY;

Const Name:

String;

VAR Valuelist: StringArray:

Boolean;

Begin

Result: = Regenum (Rootkey, Name, Valuelist,

FALSE);

END;

Function enumregistryKeys

Const rootkey: HKEY;

Const Name:

String;

VAR Keylist: StringArray:

Boolean;

Begin

Result: = Regenum (Rootkey, Name, Keylist,

True);

END;

End.

转载请注明原文地址:https://www.9cbs.com/read-85165.html

New Post(0)