• 实现:注册表的增删改查


    注册表的查:

    /*
    逻辑顺序:
    1、RegOpenKeyEx获得一个指定注册表的主键句柄
    2、利用RegQueryValueEx用获得的主键句柄读取对应注册表下的子键值
    */
    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, &reg_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, &reg_bufsize);//动态获取这个aaa键的大小
    	wchar_t * reg_buf = new wchar_t[reg_bufsize]; //堆区生成存储空间存放键的名称
    	RegQueryValue(HKEY_CURRENT_USER, _T("aaa"), reg_buf, &reg_bufsize);//获取键的名称放入reg_buf堆栈缓冲区中
    	AfxMessageBox(reg_buf);
    }
    

    注册表的增:

    /*
    逻辑顺序:
    1、RegCreateKeyEx 获得一个指定注册表的主键句柄
    2、利用RegSetValueEx用获得的主键句柄创建一个子键
    */
    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("删除键成功"));
    }
    
  • 相关阅读:
    matlab2016b
    【ccf- csp201509-4】高速公路
    【ccf- csp201412-2】z字形扫描
    【ccf-csp201512-5】矩阵
    【动态规划】矩阵连乘分析
    JAVA环境搭建
    【离散数学2】代数系统趣题
    给文本编辑框绑定变量
    清空文本框SetDlgItemText(IDC_TXTXT,NULL);
    有关SetTimer函数的用法
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12185445.html
Copyright © 2020-2023  润新知