RegCreateKeyEx

Function RegCreateKeyEx creates a registry key and opens it. If the key already exists, the function will just open it.

{windows.i}
 
&SCOPED-DEFINE KEY_ALL_ACCESS 983103
&SCOPED-DEFINE REG_OPTION_NON_VOLATILE 0
&SCOPED-DEFINE REG_OPTION_VOLATILE 1
&SCOPED-DEFINE REG_CREATED_NEW_KEY 1
&SCOPED-DEFINE REG_OPENED_EXISTING_KEY 2                                                 
 
PROCEDURE RegCreateKeyEx{&A} EXTERNAL {&ADVAPI} :
  DEFINE INPUT  PARAMETER hkey                 AS LONG.
  DEFINE INPUT  PARAMETER lpszSubKey           AS CHARACTER.
  DEFINE INPUT  PARAMETER dwReserved           AS LONG.
  DEFINE INPUT  PARAMETER plszClass            AS CHARACTER.
  DEFINE INPUT  PARAMETER dwOptions            AS LONG.
  DEFINE INPUT  PARAMETER samDesired           AS LONG.
  DEFINE INPUT  PARAMETER lpSecurityAttributes AS LONG.
  DEFINE OUTPUT PARAMETER phkResult            AS LONG.
  DEFINE OUTPUT PARAMETER lpdwDisposition      AS LONG.
  DEFINE RETURN PARAMETER lpResult             AS LONG.
END PROCEDURE.
 
 
/* example : */
 
DEFINE VARIABLE key-hdl    AS INTEGER NO-UNDO.
DEFINE VARIABLE dwDisposition     AS INTEGER NO-UNDO.  
DEFINE VARIABLE reslt      AS INTEGER NO-UNDO.
 
  RUN RegCreateKeyEx{&A} IN /* hpApi */ THIS-PROCEDURE 
    ( {&HKEY_CLASSES_ROOT},
    "SoftWare\MyCompany",
    0,
    '':U, 
    {&REG_OPTION_NON_VOLATILE},
    {&KEY_ALL_ACCESS}, 
    0,
    OUTPUT key-hdl,
    OUTPUT dwDisposition,
    OUTPUT reslt).
 
  IF reslt NE 0 THEN 
     MESSAGE "function RegCreateKeyEx failed" VIEW-AS ALERT-BOX.
  ELSE 
     CASE dwDisposition :
       WHEN {&REG_CREATED_NEW_KEY}     THEN MESSAGE "created new key" 
                                                    VIEW-AS ALERT-BOX.
       WHEN {&REG_OPENED_EXISTING_KEY} THEN MESSAGE "opened existing key"
                                                    VIEW-AS ALERT-BOX.
     END.   
 
 
  /* use the key */
  ....
 
  /* close it */
  RUN RegCloseKey IN hpApi (key-hdl, OUTPUT reslt).
 

notes

The example creates key "Software\MyCompany" or opens it if the key already exists.
Variable key-hdl returns a handle to the open key. This handle can be used in subsequent functions and must eventually be closed by function RegCloseKey.