vfp6。0有个注册表类。好象叫regist

解决方案 »

  1.   

    提供给大家一个注册表操作系列函数:RegLoad、RegOpen、RegRead、RegWrite* ---- RegLoad.PRG
    PRIVATE ALL
    cError = ON("ERROR")
    nError = 0
    ON ERROR STORE -1 TO nError
    CLEAR DLLS
    *---- 打开键
    DECLARE Integer RegOpenKey IN Win32API ;
       Integer nHKey, String @cSubKey, Integer @nResult
    ON ERROR &cError
    IF nError = -1
       RETURN -1
    ENDIF
     *---- 创建键
    DECLARE Integer RegCreateKey IN Win32API ;
       Integer nHKey, String @cSubKey, Integer @nResult
     *---- 删除键
    DECLARE Integer RegDeleteKey IN Win32API ;
       Integer nHKey, String @cSubKey
     *---- 
    DECLARE Integer RegDeleteValue IN Win32API ;
       Integer nHKey, String cSubKey
    DECLARE Integer RegCloseKey IN Win32API ;
       Integer nHKey
     *---- 写入注册表
    DECLARE Integer RegSetValueEx IN Win32API ;
       Integer hKey, String lpszValueName, Integer dwReserved,;
       Integer fdwType, String lpbData, Integer cbData
     *---- 从注册表读数据
    DECLARE Integer RegQueryValueEx IN Win32API ;
       Integer nHKey, String lpszValueName, Integer dwReserved,;
       Integer @lpdwType, String @lpbData, Integer @lpcbData
    DECLARE Integer RegEnumKey IN Win32API ;
       Integer nHKey,Integer iSubKey, String @lpszName, Integer @cchName
    DECLARE Integer RegEnumKeyEx IN Win32API ;
       Integer nHKey,Integer iSubKey, String @lpszName, Integer @cchName,;
       Integer dwReserved,String @lpszName, Integer @cchName,String @cchName
    DECLARE Integer RegEnumValue IN Win32API ;
       Integer hKey, Integer iValue, String @lpszValue, ;
       Integer @lpcchValue, Integer lpdwReserved, Integer @lpdwType, ;
       String @lpbData, Integer @lpcbData
    RETURN 0* ------ RegOpen.PRG
    LPARAMETER tcLookUpKey,tnRegKey,tlCreateKey
    *
    * 创建或打开注册表键
    * 成功操作返回子键值,失败返回 0
    * 运行前需要执行 RegLoadWin32
    *
    PRIVATE ALL
    IF EMPTY(tnRegKey)
       tnRegKey = -2147483646 && HKEY_LOCAL_MACHINE
    ENDIF
    nSubKey = 0
    IF tlCreateKey
       = RegCreateKey(tnRegKey,tcLookUpKey,@nSubKey)
    ELSE
       = RegOpenKey(tnRegKey,tcLookUpKey,@nSubKey)
    ENDIF
    RETURN nSubKey
    * --- RegRead.PRG
    LPARAMETER tcPath,tcName,tnRegKey
    *
    * 读取失败时返回 -1,没有读到时返回 0,读取成功返回结果
    *
    *
    #DEFINE HKEY_CLASSES_ROOT           -2147483648  && BITSET(0,31)
    #DEFINE HKEY_CURRENT_USER           -2147483647  && BITSET(0,31) + 1
    #DEFINE HKEY_LOCAL_MACHINE          -2147483646  && BITSET(0,31) + 2
    #DEFINE HKEY_USERS                  -2147483645  && BITSET(0,31) + 3
    #DEFINE HKEY_CURRENT_CONFIG         -2147483643  && BITSET(0,31) + 5PRIVATE ALL
    IF RegLoad() = -1
       = MessageBox("装入 Win32API 失败!", 48, "错误")
       RETURN -1
    ENDIF*---- 在 HKEY_LOCAL_MACHINE 下
    nSubKey = RegOpen(tcPath,tnRegKey,.T.)
    IF nSubKey = 0
       = MessageBox("读取注册表失败!", 48, "错误")
       RETURN -1
    ENDIF
    lpdwType = 0
    lpdwReserved = 0
    lpbData  = SPACE(254)
    lpcbData = 254
    *nError = RegQueryValueEx(nSubKey,tcName,0,@lpdwType,@lpbData,@lpcbData)
    nError = RegQueryValueEx(nSubKey,tcName,lpdwReserved,@lpdwType,@lpbData,@lpcbData)
    = RegCloseKey(nSubKey)
    CLEAR DLLS
    IF nError # 0
       RETURN 0
    ELSE
       lpbData = LEFT(lpbData,lpcbData-1)
       RETURN lpbData
    ENDIF
    * ---- RegWrite.PRGLPARAMETER tcPath,tcName,tcValue
    *
    * 成功返回真,失败返回假
    *
    PRIVATE ALL
    IF RegLoad() = -1
       = MessageBox("装入 Win32API 失败!", 48, "错误")
       RETURN .F.
    ENDIF*---- 在 HKEY_LOCAL_MACHINE 下
    nSubKey = RegOpen(tcPath,,.T.)
    IF nSubKey = 0
       = MessageBox("读取注册表失败!", 48, "错误")
       RETURN .F.
    ENDIF
    tcValue = tcValue
    nValueSize = LEN(tcValue)
    nError = RegSetValueEx(nSubKey,tcName,0,1,tcValue,nValueSize)
    = RegCloseKey(nSubKey)
    CLEAR DLLS
    RETURN (nError=0)