Windows Registry Value - REG_DWORD

P. Knoetze

New Member
Hi,

I am using the 4gl code 'PUT-KEY-VALUE' to create a registry key. Unfortunately this creates a registry key with a value of type REG_SZ (null terminated string). I would very much like to create a key with a type of REG_DWORD (32 bit number).

Is this possible using the PUT-KEY-VALUE command? If not, how can I achieve this? Sample code would also be appreciated.

Progress 9.1C
Windows 9x, 2000

TIA
Philip
 

bendaluz2

Member
Dunno about v9, but in v8, put-key-value can only create a string of maximum 128 bytes. Whats the problem with storing your number in a string, you should have enough digits :)
 

Gerco

New Member
For this you'll have to resort to Windows API I'm afraid. To be more precise: advapi32.dll

These definitions should help, in MSDN is more info on how to use them.

Code:
PROCEDURE RegOpenKeyA EXTERNAL "advapi32" :
  DEFINE INPUT  PARAMETER hkey       AS LONG.
  DEFINE INPUT  PARAMETER lpszSubKey AS CHAR.
  DEFINE OUTPUT PARAMETER phkResult  AS LONG.
  DEFINE RETURN PARAMETER lpResult   AS LONG.
END PROCEDURE.

PROCEDURE RegCloseKey EXTERNAL "advapi32" :
  DEFINE INPUT  PARAMETER hkey     AS LONG.
  DEFINE RETURN PARAMETER lpresult AS LONG.
END PROCEDURE.

PROCEDURE RegEnumKeyA EXTERNAL "advapi32" :
  DEFINE INPUT  PARAMETER hKey        AS LONG.
  DEFINE INPUT  PARAMETER iSubKey     AS LONG.
  DEFINE OUTPUT PARAMETER lpszName    AS CHAR.
  DEFINE INPUT  PARAMETER cchName     AS LONG.
  DEFINE RETURN PARAMETER lpresult    AS LONG.
END PROCEDURE.

PROCEDURE RegQueryValueExA EXTERNAL "advapi32" :
  DEFINE INPUT        PARAMETER hkey         AS LONG.
  DEFINE INPUT        PARAMETER lpValueName  AS CHAR.
  DEFINE INPUT        PARAMETER lpdwReserved AS LONG.
  DEFINE OUTPUT       PARAMETER lpdwType     AS LONG.
  DEFINE INPUT        PARAMETER lpbData      AS LONG. /* memptr */
  DEFINE INPUT-OUTPUT PARAMETER lpcbData     AS LONG.
  DEFINE RETURN       PARAMETER lpresult     AS LONG.
END PROCEDURE.

PROCEDURE RegSetValueExA EXTERNAL "advapi32" :
  DEFINE INPUT  PARAMETER hkey         AS LONG.
  DEFINE INPUT  PARAMETER lpValueName  AS CHAR.
  DEFINE INPUT  PARAMETER Reserved     AS LONG.
  DEFINE INPUT  PARAMETER dwType       AS LONG.
  DEFINE INPUT  PARAMETER lpData       AS LONG. /* memptr */
  DEFINE INPUT  PARAMETER cbData       AS LONG.
  DEFINE RETURN PARAMETER lpresult     AS LONG.
END PROCEDURE.
 
Top