SET PROCEDURE TO clsRapiReg ADDITIVE
#DEFINE HKEY_CLASSES_ROOT 0x80000000
#DEFINE HKEY_CURRENT_USER 0x80000001
#DEFINE HKEY_LOCAL_MACHINE 0x80000002
#DEFINE HKEY_USERS 0x80000003
LOCAL oRapi
oRapi = CREATEOBJECT("TrapiReg")
IF Not oRapi.Connected
= MESSAGEBOX("Mobile device is unavailable. ", 48, "Error")
ELSE
oRapi.AddKey(HKEY_CLASSES_ROOT, 0, "MyDevice", "HKEY_CLASSES_ROOT")
oRapi.AddKey(HKEY_CURRENT_USER, 0, "MyDevice", "HKEY_CURRENT_USER")
oRapi.AddKey(HKEY_LOCAL_MACHINE, 0, "MyDevice", "HKEY_LOCAL_MACHINE")
oRapi.AddKey(HKEY_USERS, 0, "MyDevice", "HKEY_USERS")
ENDIF
* end of main
DEFINE CLASS TRapiReg As Trapi
#DEFINE REG_SZ 1
#DEFINE REG_DWORD 4
#DEFINE REG_MULTI_SZ 7
PROCEDURE Init
DODEFAULT()
IF THIS.Connected
CREATE CURSOR csKeys (keyid I AUTOINC, parentid I,;
keyname C(100), keypath M)
CREATE CURSOR csValues (keyid I, valuename C(100),;
valuetype I, valuelen I,;
valueint I, valuestr M, rawdata M)
ENDIF
PROCEDURE AddKey(hRootKey, nParentId, cFullPath, cKeyName)
LOCAL nKeyId, cPath, oKey, oSubkeys, oSubkey, oValue, vValue
cPath = cFullPath + "\" + cKeyName
? cPath
INSERT INTO csKeys (parentid, keyname, keypath);
VALUES (nParentId, cKeyName, cPath)
nKeyId = csKeys.keyid
oKey = CREATEOBJECT("Tkey", hRootKey,;
SUBSTR(cPath+"\", AT("\",cPath+"\",2)+1))
IF oKey.OpenKey()
* retrieve values for this key
oKey.GetValues
oKey.keyvalues.KeySort=2
FOR EACH oValue IN oKey.keyvalues
DO CASE
CASE oValue.valuetype=REG_SZ OR oValue.valuetype=REG_MULTI_SZ
vValue = STRCONV(oValue.valuerawdata,6)
INSERT INTO csValues (keyid, valuename, valuetype,;
valuelen, valuestr, rawdata);
VALUES (nKeyId, oValue.valuename, oValue.valuetype,;
LEN(oValue.valuerawdata), vValue, oValue.valuerawdata)
CASE oValue.valuetype=REG_DWORD
vValue = buf2dword(oValue.valuerawdata)
INSERT INTO csValues (keyid, valuename, valuetype,;
valuelen, valueint, rawdata);
VALUES (nKeyId, oValue.valuename, oValue.valuetype,;
LEN(oValue.valuerawdata), vValue, oValue.valuerawdata)
OTHER
INSERT INTO csValues (keyid, valuename, valuetype,;
valuelen, rawdata);
VALUES (nKeyId, oValue.valuename, oValue.valuetype,;
LEN(oValue.valuerawdata), oValue.valuerawdata)
ENDCASE
ENDFOR
* retrieve subkeys for this keys - recursive call
oSubkeys = CREATEOBJECT("Tkeys", oKey.hkey)
oSubkeys.KeySort=2
FOR EACH oSubkey IN oSubkeys
THIS.AddKey(hRootKey, nKeyId, cPath, oSubkey.keyname)
ENDFOR
ENDIF
RELEASE oKey
ENDDEFINE
|