简单的注册表控制范例

作者在 2008-04-29 23:15:05 发布以下内容
好久没有下手编程,离开开发岗位有段时间了。近期帮朋友捣腾一个软件,重拾起往日的“利剑”,感觉熟悉和亲切。陆续会有一些纯技术范畴的代码会放在博客里,虽粗浅但希望以后可以给自己一个借鉴(捡起来更容易些),当然也希望能得到访友的批评和指正。

/*****************************************************************
* 方法:LoadDefaultSetting()
* 输入:
* 输出:true:成功,false:不成功
* 描述:读取注册表中保存的软件系统设置,并将设置保存到相应的变量m_IsAutoConnect,m_IsAutoSave,m_DefaultPath
* 作者:Yin
* 日期:2008.04.24
* 版本:01
****************************************************************/
bool CDataManager::LoadDefaultSetting()
{
    HKEY hKey;  //注册表键句柄
    DWORD Var;  //键类型
    DWORD ValueLength = 256;  //读入的键值长度
    CString LocalPath;  //当前路径
    LPBYTE Value = new BYTE[256];  //键值
    LPCTSTR Info = "Software\\Bamboo";  //母键标识

    //判断母键是否存在,若不存在则创建母键
    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,Info,0,KEY_ALL_ACCESS,&hKey) != ERROR_SUCCESS)  //打开注册表键
    {
        Var = REG_CREATED_NEW_KEY;

        if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,Info,0,NULL,0,0,NULL,&hKey,&Var) != ERROR_SUCCESS)  //创建母键
        {
            AfxMessageBox("注册信息读取失败,请重装系统并重启!");
            RegCloseKey(hKey);  //释放句柄

            return FALSE;
        }

        if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,Info,0,KEY_ALL_ACCESS,&hKey) != ERROR_SUCCESS)  //重新打开注册表键
        {
            AfxMessageBox("注册信息读取失败,请重装系统并重启!");
            RegCloseKey(hKey);  //释放句柄

            return FALSE;
        }
    }

    //读取软件版权,若不存在则创建新的默认归属
    Var = REG_SZ;  //无结尾字符串型
    if(RegQueryValueEx(hKey,"Author",NULL,&Var,Value,&ValueLength) != ERROR_SUCCESS)  //查询键值
    {
        strcpy((char *)Value,"Yin");  //键值

        if(RegSetValueEx(hKey,"Author",NULL,REG_SZ,Value,4) != ERROR_SUCCESS)  //赋新键值
        {
            AfxMessageBox("注册信息读取失败,请重装系统并重启!");
            RegCloseKey(hKey);  //释放句柄
           
            return FALSE;
        }
    }
   
    //读取软件版本号,若不存在则创建新的默认版本号
    if(RegQueryValueEx(hKey,"Edition",NULL,&Var,Value,&ValueLength) != ERROR_SUCCESS)  //查询键值
    {
        strcpy((char *)Value,"1.0");  //键值
       
        if(RegSetValueEx(hKey,"Edition",NULL,REG_SZ,Value,4) != ERROR_SUCCESS)  //赋新键值
        {
            AfxMessageBox("注册信息读取失败,请重装系统并重启!");
            RegCloseKey(hKey);  //释放句柄
           
            return FALSE;
        }
    }
   
    //读取软件数据文件路径名称
    if(RegQueryValueEx(hKey,"FilePath",NULL,&Var,Value,&ValueLength) != ERROR_SUCCESS)  //查询键值
    {
        GetCurrentDirectory(256,LocalPath.GetBuffer(0));
        LocalPath.Format("%s%s",LocalPath,"\\Data");  //添加子文件夹路径Data
        strcpy((char *)Value,LocalPath);  //键值
       
        if(RegSetValueEx(hKey,"FilePath",NULL,REG_SZ,Value,LocalPath.GetLength()) != ERROR_SUCCESS)  //赋新键值
        {
            AfxMessageBox("注册信息读取失败,请重装系统并重启!");
            RegCloseKey(hKey);  //释放句柄
           
            return FALSE;
        }
    }
    else
    {
        //赋值到变量m_DefaultPath
    }
   
    //读取软件设置“是否启动自动连接串口”
    Var = REG_BINARY;
    if(RegQueryValueEx(hKey,"AutoConnect",NULL,&Var,Value,&ValueLength) != ERROR_SUCCESS)  //查询键值
    {
        Value[0]=1;  //键值
       
        if(RegSetValueEx(hKey,"AutoConnect",NULL,Var,Value,1) != ERROR_SUCCESS)  //赋新键值
        {
            AfxMessageBox("注册信息读取失败,请重装系统并重启!");
            RegCloseKey(hKey);  //释放句柄
           
            return FALSE;
        }
    }
    else
    {
        //赋值到变量m_IsAutoConnect
        if(Value[0] == 0)
            m_IsAutoConnect = FALSE;
        else
            m_IsAutoConnect = TRUE;
    }
   
    //读取软件设置“是否自动保存数据文件”
    Var = REG_BINARY;
    if(RegQueryValueEx(hKey,"AutoSave",NULL,&Var,Value,&ValueLength) != ERROR_SUCCESS)  //查询键值
    {
        Value[0]=1;  //键值
       
        if(RegSetValueEx(hKey,"AutoSave",NULL,Var,Value,1) != ERROR_SUCCESS)  //赋新键值
        {
            AfxMessageBox("注册信息读取失败,请重装系统并重启!");
            RegCloseKey(hKey);  //释放句柄
           
            return FALSE;
        }
    }
    else
    {
        //赋值到变量m_IsAutoSave
        if(Value[0] == 0)
            m_IsAutoSave = FALSE;
        else
            m_IsAutoSave = TRUE;
    }
   
    return TRUE;
}

默认分类 | 阅读 4434 次
文章评论,共0条
游客请输入验证码
浏览42302次