关于注册表读取
使用myfll,或是foxer.dll读取 多字符串值 键值的时候只能读取出第一行,试着使用其他方法结果也一样,求教
[解决办法]
以下读写注册表的自定义函数:*---------------------------*操作注册表*语法:*创建子键:registry(0,主键序号,子键名,新建子键名)*写注册表:registry(1,主键序号,子键名,,注册项,项目值)*读注册表:registry(2,主键序号,子键名,,注册项)*删除子键:registry(3,主键序号,子键名)FUNCTION registry PARAMETERS nReg_code,;&&操作代码,0-创建子键,1-写注册表,2-读注册表,3-删除注册表项 nReg_MainKeyNo,; &&注册表主键序号 cReg_skey,; &&子键 cReg_skey_New,; &&需创建的子键 cReg_skeyname,; &&注册表项 cReg_keyvalue,; &&注册表项的值 nReg_ValueType &&注册表项的值的类型,1-数据串,2-Unicode 串,3-二进制,4-32-位数值 ON ERROR RETURN .f. LOCAL nDisposition,; lnResult,; &&要取得值的注册表子项的地址 nResult,; ReturnValue,; &&返回的注册表值 nKeyLength,; &&要写的值的长度 BUFFER,; &&返回注册表项值 BufferSize,; &&返回值的长度 lnError,; &&返回注册表函数的错误代码 nError,; &&返回的错误代码 skey1,skey2 IF !BETWEEN(nReg_MainKeyNo,1,4) RETURN .F. ENDIF IF nReg_code=1 AND !BETWEEN(nReg_ValueType,1,4) RETURN .F. ENDIF nReg_MainKeyNo=nReg_MainKeyNo-2147483649 *注册表键值访问权限 #DEFINE KEY_ALL_ACCESS 983103 &&所有权限 DECLARE INTEGER RegOpenKeyEx IN Win32API ; INTEGER nKey,; STRING @cSubKey, ; INTEGER nReserved,; INTEGER nAccessMask,; INTEGER @nResult DECLARE INTEGER RegQueryValueEx IN Win32API; INTEGER nKey, ; STRING cValueName, ; INTEGER nReserved,; INTEGER @nType, ; STRING @cBuffer, ; INTEGER @nBufferSize DECLARE RegCreateKeyEx IN WIN32API; INTEGER hKey,; &&一个打开项的句柄,或者一个标准项名 STRING lpSubKey,; &&欲创建的新子项的名字 INTEGER Reserved,; &&设为零 STRING lpClass,; &&项的类名 INTEGER dwOptions,; &&零,这个项不正式保存下来,系统重新启动后会消失 INTEGER samDesired,; &&访问权限 INTEGER lpSecurityAttributes,;&&对这个项的安全特性进行描述的一个结构,零 INTEGER @phkResult,; &&指定用于装载新子项句柄的一个变量 INTEGER @lpdwDisposition &&返回是新建子项,还是打开子项(如果新建的子项存在) DECLARE RegDeleteKey IN WIN32API; INTEGER hKey,; STRING lpSubKey DECLARE INTEGER RegCloseKey IN Win32API INTEGER nKey DECLARE INTEGER RegSetValueEx IN Win32API; INTEGER hKey,; STRING lpValueName,; INTEGER Reserved,; INTEGER dwType,; STRING lpData,; INTEGER cbData DO CASE CASE nReg_code=0 &&创建子建 nResult= 0 nDisposition = 0 nError = RegOpenKeyEx(nReg_MainKeyNo,cReg_sKey,0, KEY_ALL_ACCESS, @nResult) IF nError#0 MESSAGEBOX('Can`t open the sub_key!',0+48,'INF') RETURN .F. ENDIF nError=RegCreateKeyEx(nResult,cReg_sKey_New,0,'nReg_ValueType',0,KEY_ALL_ACCESS,0,@lnResult,@nDisposition) =RegCloseKey(nResult) RETURN nError ************************************************************************************** CASE nReg_code=1 &&写注册表 nError=0 nError =RegOpenKeyEx(nReg_MainKeyNo,cReg_sKey, 0,KEY_ALL_ACCESS, @lnResult) IF nError#0 MESSAGEBOX('Can`t write the sub_key!',0+48,'INF') RETURN .F. ENDIF nKeyLength=LEN(cReg_KeyValue) nError=RegSetValueEx(lnResult,cReg_sKeyName,0,nReg_ValueType, @cReg_KeyValue, @nKeyLength) =RegCloseKey(lnResult) RETURN nError=0 *************************************************************************** CASE nReg_code=2 &&读注册表 ReturnValue = "" lnResult = 0 BUFFER = SPACE(128) BufferSize = 128 lnError = RegOpenKeyEx(nReg_MainKeyNo,cReg_sKey, 0, KEY_ALL_ACCESS, @lnResult) IF lnError = 0 lnType = 0 lnError = RegQueryValueEx(lnResult, cReg_skeyname, 0, @lnType, @BUFFER, @BufferSize) IF lnError = 0 AND BUFFER <> CHR(0) &&如果错误码为 0, 则正常读取值. ReturnValue = LEFT(BUFFER, BufferSize - 1) &&取得返回值 ENDIF ENDIF =RegCloseKey(lnResult) RETURN ReturnValue ************************************************************************************** CASE nReg_code=3 &&删除注册表项 skey1=LEFT(cReg_sKey,AT('\',cReg_sKey,OCCURS('\',cReg_sKey))-1) skey2=SUBST(cReg_sKey,AT('\',cReg_sKey,OCCURS('\',cReg_sKey))+1) nError =RegOpenKeyEx(nReg_MainKeyNo,sKey1, 0,KEY_ALL_ACCESS, @lnResult) IF nError#0 MESSAGEBOX('Can`t delete the sub_key!',0+48,'INF') RETURN .F. ELSE nError=RegDeleteKey(lnResult,sKey2) ENDIF RETURN nError ENDCASEENDFUNC