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, {®_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 {®_CREATED_NEW_KEY} THEN MESSAGE "created new key" VIEW-AS ALERT-BOX. WHEN {®_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).
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.