实现:注册表的增删改查

注册表的查:

void CMyMFCDlg::OnBnClickedButton1Cpu() 
{

    //第一种
    //读取键所对应得值
    //HKEY hkey;
    //wchar_t reg_value[64];
    //if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"), 0, KEY_QUERY_VALUE, &hkey) == ERROR_SUCCESS) {
    //  //打开成功了,接下来就是进行读取的操作
    //  DWORD reg_value_size = sizeof(reg_value);
    //  if (RegQueryValueEx(hkey, _T("ProcessorNameString"), NULL, NULL, (LPBYTE)reg_value, ®_value_size) == ERROR_SUCCESS) { //读取的值放到reg_value缓冲区中
    //      SetDlgItemText(IDC_STATIC_CPU, reg_value);

    //  }
    //  else {
    //      AfxMessageBox(_T("读取注册表失败!"));
    //  }
    //}
    //else {
    //  AfxMessageBox(_T("打开注册表失败!"));
    //}
    //RegCloseKey(hkey);



    // -----------------------------------------------------------------
    // 第二种就是直接读取键的名称
    LONG reg_bufsize;
    RegQueryValue(HKEY_CURRENT_USER, _T("aaa"), NULL, ®_bufsize);//动态获取这个aaa键的大小
    wchar_t * reg_buf = new wchar_t[reg_bufsize]; //堆区生成存储空间存放键的名称
    RegQueryValue(HKEY_CURRENT_USER, _T("aaa"), reg_buf, ®_bufsize);//获取键的名称放入reg_buf堆栈缓冲区中
    AfxMessageBox(reg_buf);
}

注册表的增:

void CMyMFCDlg::OnBnClickedButton2() //创建键值
{

    HKEY hkey; //打开指定子键
    DWORD lRet;
    DWORD dispo = REG_OPENED_EXISTING_KEY;

    if ((lRet = RegCreateKeyEx(
        HKEY_LOCAL_MACHINE,
        _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
        0,
        NULL,
        REG_OPTION_NON_VOLATILE,
        KEY_ALL_ACCESS,
        NULL,
        &hkey,
        &dispo)) == ERROR_SUCCESS) {

        wchar_t szModule[MAX_PATH];
        GetModuleFileName(NULL, szModule, MAX_PATH); //得到当前执行文件的文件名(包含路径)
        //创建一个新的键值,设置键值数据为文件
        if ((lRet = RegSetValueEx(hkey, _T("SelfRunDemo"), 0, REG_SZ, (BYTE*)szModule, sizeof(szModule))) == ERROR_SUCCESS) {
            SetDlgItemText(IDC_STATIC_CPU, _T("RegSetValueEx成功!")); //设置成功;
        }
        else {
            SetDlgItemText(IDC_STATIC_CPU, _T("RegSetValueEx失败!")); //设置成功;
        }

    }
    else {
        SetDlgItemText(IDC_STATIC_CPU, _T("RegCreateKeyEx失败!")); //设置成功;
    }

    RegCloseKey(hkey);  //关闭子键句柄



        //下面这段代码是编程论坛版主给我的例子,FormatMessageA可以用来调试lRet返回值的原因
    //HKEY hkey;
    //DWORD lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 
    //  0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, NULL);
    //if (lRet == ERROR_SUCCESS)
    //{
    //  AfxMessageBox(_T("OK"));
    //  RegCloseKey(hkey);
    //}
    //else
    //{
    //  wchar_t * pMsgBuf;
    //  FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS
    //      , NULL, lRet, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&pMsgBuf, 0, NULL);
    //  AfxMessageBox(pMsgBuf);
    //  LocalFree(pMsgBuf);
    //}
 
}

注册表的删:


void CMyMFCDlg::OnBnClickedButton1()
{
    /*
        LSTATUS RegDeleteKeyA(
            HKEY   hKey,
            LPCSTR lpSubKey
        );
    */
    
    RegDeleteKey(HKEY_CURRENT_USER, _T("aaa"));
    AfxMessageBox(_T("删除键成功"));
}

你可能感兴趣的:(实现:注册表的增删改查)