RegEntryType

Returns the type of data for the specified subkey.

Syntax:

RegEntryType(handle, subkey-string [,view-flag])

Parameters:

(i) handle an open registration database key. (see below).

(s) subkey-string a path from the key provided to the desired key.

(i) view-flag [optional] controls which registry view the function uses when accessing the Windows registry.
0 - view indicated by the last call to the RegOpenFlags.
32 - use the 32-bit registry view.
64 - use the 64-bit registry view.

Returns:

(s) data type of specified subkey. (see below).

 

The return value will be one of the following:

 

Value

Type

Meaning

0  

(REG_NONE)

No value type

1  

(REG_SZ)

An ANSI string

2  

(REG_EXPAND_SZ)

An ANSI string that contains unexpanded references to environment variables (for example, "%PATH%").

3  

(REG_BINARY)

Free form binary

4  

(REG_DWORD)

32-bit number

5  

(REG_DWORD_BIG_ENDIAN)

32-bit number High byte first

6  

(REG_LINK)

Symbolic Link (Unicode)

7  

(REG_MULTI_SZ)

A delimited list of ANSI strings.

8  

(REG_RESOURCE_LIST)

Resource list in the resource map

9  

(REG_FULL_RESOURCE_DESCRIPTOR)

Resource list in the hardware description

10  

(REG_RESOURCE_REQUIREMENTS_LIST)

Resource requirements

11  

(REG_QWORD)

64-bit number

 

View-flag

This optional parameter controls which registry view the function uses when accessing the Windows registry. The optional parameter's values can be 32 to use the 32-bit view, 64 to use the 64-bit view, or 0 to use the view indicated by the last call to the RegOpenFlags. The parameter value of 0 can also causes a function to use the WinBatch default 64-bit view, if no call to RegOpenFlags has been made and setting the parameter to 0 is equivalent to omitting the parameter entirely.

Notes:

Example:


;This set of UDFs can clone or rename a registry key
;It is not blindingly fast, but should be ok for smaller trees.
;
;CopyRegValue - Copies one single value from one place to another
;
;CloneRegTree - copies one tree from one place to another
;
;RenameRegTree - Renames a tree.
;
;However, due to the fact that the registry API does not have
;a rename facility, the RenameRegTreeis implemented by first
;cloning the tree, then deleting the original tree.
;
;Keys are used by first obtaining a handle to one. One of the
;predefined handles (@REGMACHINE @REGCURRENT, etc) or a handle
;returned by one of the registry functions RegConnect, RegCreateKey
;or RegOpenKey may be used
;Each function needs a handle to a section in the registry
;database in addition to a string that consists of the subkey to
;an entry in the Registry database.
;
;For current versions of Windows, there are 4 handles: @REGMACHINE,
;@REGCLASSES, @REGUSRS, and @REGCURRENT. These are WIL constants
;for HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT, HKEY_USERS, and
;HKEY_CURRENT_USER. When you obtain a registry subkey from Microsoft's
;registry viewer, regedit.exe (by using Copy Key Name from the right
;mouse menu in RegEdit.exe) it will look like this example:
;HKEY_LOCAL_MACHINE\SOFTWARE\myTest\Sub2\sub21\Sub211
;
;For use in the WIL registry functions, the above key must be
;divided into handle and subkey. The handle, @REGMACHINE, takes the
;place of the first item, 'HKEY_LOCAL_MACHINE\'. The subkey needed
;for the second parameter in the functions is,
;'SOFTWARE\myTest\Sub2\sub21\Sub211'.
;Note: it does not start with the '\' backslash character.
;
;
;Define the CopyRegValue UDF.
#DefineFunction CopyRegValue(fromHandle,fromSubkey,toHandle,toSubkey)
;Stop if value does not exist.
Terminate(RegExistValue(fromHandle,fromSubkey)==0,"Reg value does not exist",fromSubkey)
;Get the entry type
type=RegEntryType(fromHandle,fromSubkey)
;Stop if type is not supported.
Terminate( ((type<1) || (type>4)) && type!=7, "Cannot handle reg value",fromSubkey)
;Define a hopefully sufficiently obscure delimiter for the BIN function
delim=Num2Char(255)
;Get the value.
value=RegQueryEx(fromHandle,fromSubkey,delim,type)
;Copy value to a new subkey.
RegSetEx(toHandle,toSubkey,value,delim,type)
Return ;Return nothing.
#EndFunction
;Define the CloneRegTree UDF.
#DefineFunction CloneRegTree(fromHandle, fromSubkey, toHandle, toSubkey)
;Stop if key does not exist.
Terminate(RegExistKey(fromHandle,fromSubkey)==0,"Reg key does not exist",fromSubkey)
;copy top default key
;Check value.
If RegExistValue(fromhandle,fromsubkey)
   ;Get value.
   defval=RegQueryValue(fromHandle,fromSubkey)
   ;Set value of destination subkey.
   If defval!="" Then RegSetValue(toHandle,toSubkey,defval)
EndIf
;copy all values under key, if any
items=RegQueryItem(fromHandle,fromSubkey)
icount=ItemCount(items,@TAB)
For ii=1 To icount
   ;Assemble source subkey with value in brackets.
   thisitem=StrCat(fromSubkey,'[',ItemExtract(ii,items,@TAB),']')
   ;Assemble destination subkey with value in brackets.
   thatitem=StrCat(toSubkey,'[',ItemExtract(ii,items,@TAB),']')
   ;Copy the entry.
   CopyRegValue(fromHandle, thisitem, toHandle, thatitem)
Next
;Get list of subkeys
;Open source key with read access rights.
tempkey=RegOpenKeyEx(fromHandle,fromSubkey,"READ",0,0)
;Get keys.
keys=RegQueryKeys(tempkey)
;Close source key.
RegCloseKey(tempkey)
;Process each subkey
kcount=ItemCount(keys,@TAB)
For kk=1 To kcount
   thiskey=StrCat(fromSubkey,"\",ItemExtract(kk,keys,@TAB))
   thatkey=StrCat(toSubkey,"\",ItemExtract(kk,keys,@TAB))
   ;Use the CloneRegTree UDF to do the work.
   CloneRegTree(fromHandle,thiskey,toHandle,thatkey)
Next
#EndFunction
#DefineFunction RenameRegTree(fromHandle, fromSubkey, toHandle, toSubkey)
;Set up UDF
;Use previous UDF to copy the source key to the destination key.
CloneRegTree(fromHandle, fromSubkey, toHandle, toSubkey)
;Delete the source key.
RegDeleteKey(fromHandle,fromSubkey)
#EndFunction
;Test code follows.
;Registry handle. In this case, both source and destination are the same.
fromHandle = @REGCURRENT
toHandle = @REGCURRENT
;source subkey
fromSubkey = "Software\Wilson WindowWare"
;destination subkey
toSubkey = "Software\MyWilson WindowWare"
;copy the subkey
CloneRegTree( fromHandle , fromSubkey , toHandle , toSubkey)
Message("Progress" , "New key created.%@CRLF%%@CRLF%See this with regedit.exe, %@CRLF%Be sure to refresh it with f5!")
fromSubkey = "Software\MyWilson WindowWare"
toSubkey = "Software\MyOtherWilson WindowWare"
;copy the subkey to a new named key, and delete the old key.
RenameRegTree( fromHandle , fromSubkey , toHandle , toSubkey)
Message("Progress" , "New key copied and renamed.%@CRLF%Check this with f5 in regedit.exe.")
See Also:

RegQueryEx, RegSetEx and the section on Registration Database Operations