zoukankan      html  css  js  c++  java
  • Windows核心编程——MFC下注册表操作

    1.注册表

      注册表(Registry),是Microsoft Windows中的一个重要的数据库,用于存储系统应用程序的设置信息。

    2.注册表操作

        系统的配置一般都保存在注册表里,一些软件配置信息也在注册表
        Win+R  regedit 可以打开windows的注册表编辑工具
        
        如何操作注册表?
      相关api:

    3.MFC操作注册表

    1)添加键值对:

    添加键:RegCreateKey()

    示例:指定目录下添加键shadow

    	RegCreateKey
    	
    	HKEY hSubKey;
    	LONG lRet = RegCreateKey(
    		HKEY_CURRENT_USER,//主键
    		"Software\shadow",
    		&hSubKey //传出参数
    	);
    
    	if (lRet != ERROR_SUCCESS)
    	{
    		return 0;
         }
    

    成功添加键:

     

    设置值:  RegSetKeyValue()

     示例:设置值test

    char szValue[] = { "hello" };
    	lRet = RegSetKeyValue(
    		HKEY_CURRENT_USER, //主键
    		"Software\shadow", //子键的路径
    		"test", //值的名称
    		REG_SZ, //值的类型
    		szValue, //值的数据所在的缓冲区
    		sizeof(szValue)
    	);
    
    	if (lRet != ERROR_SUCCESS)
    	{
    		return 0;
            }    
    

    成功添加test:


    2)删除数据:


     RegDeleteKeyValue() //删除键值对
     RegDeleteKey()  //删除键

    示例:删除test:

    lRet = RegDeleteKeyValue(
    	HKEY_CURRENT_USER, //主键
    	"Software\shadow", //子键的路径
    	"test" //值的名称
        );
    

     test删除成功:

     

    3)查询数据:

    RegEnumValue()   //枚举键值信息
    RegQueryValueEx() //查询键上有多少个值
    RegQueryInfoKey()  //查询键

        软件配置信息放在注册表,在卸载软件后再安装信息还存在。如
    果在自己目录下,卸载后所有信息都会消失。

    查询示例:

    HKEY hWinRar = NULL;
    lRet = RegOpenKey(HKEY_CURRENT_USER, "Software\RegisteredApplications", &hWinRar);
    QueryKey(hWinRar);
    
    
    #define MAX_KEY_LENGTH 255
    #define MAX_VALUE_NAME 16383
    
    void QueryKey(HKEY hKey)
    {
    	TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
    	DWORD    cbName;                   // size of name string 
    	TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 
    	DWORD    cchClassName = MAX_PATH;  // size of class string 
    	DWORD    cSubKeys = 0;               // number of subkeys 
    	DWORD    cbMaxSubKey;              // longest subkey size 
    	DWORD    cchMaxClass;              // longest class string 
    	DWORD    cValues;              // number of values for key 
    	DWORD    cchMaxValue;          // longest value name 
    	DWORD    cbMaxValueData;       // longest value data 
    	DWORD    cbSecurityDescriptor; // size of security descriptor 
    	FILETIME ftLastWriteTime;      // last write time 
    
    	DWORD i, retCode;
    
    	TCHAR  achValue[MAX_VALUE_NAME];
    	DWORD cchValue = MAX_VALUE_NAME;
    
    	// Get the class name and the value count. 
    	retCode = RegQueryInfoKey(
    		hKey,                    // key handle 
    		achClass,                // buffer for class name 
    		&cchClassName,           // size of class string 
    		NULL,                    // reserved 
    		&cSubKeys,               // 子键的个数
    		&cbMaxSubKey,            // longest subkey size 
    		&cchMaxClass,            // longest class string 
    		&cValues,                // 键所对应的值的个数
    		&cchMaxValue,            // longest value name 
    		&cbMaxValueData,         // longest value data 
    		&cbSecurityDescriptor,   // security descriptor 
    		&ftLastWriteTime);       // last write time 
    
    								 // Enumerate the subkeys, until RegEnumKeyEx fails.
    
    	//遍历键的信息
    	if (cSubKeys)
    	{
    		printf("
    Number of subkeys: %d
    ", cSubKeys);
    
    		for (i = 0; i < cSubKeys; i++)
    		{
    			cbName = MAX_KEY_LENGTH;
    			retCode = RegEnumKeyEx(hKey, i,
    				achKey,
    				&cbName,
    				NULL,
    				NULL,
    				NULL,
    				&ftLastWriteTime);
    			if (retCode == ERROR_SUCCESS)
    			{
    				_tprintf(TEXT("(%d) %s
    "), i + 1, achKey);
    			}
    		}
    	}
    
    	// 遍历值的信息
    	if (cValues)
    	{
    		printf("
    Number of values: %d
    ", cValues);
    
    		for (i = 0, retCode = ERROR_SUCCESS; i < cValues; i++)
    		{
    			cchValue = MAX_VALUE_NAME;
    			achValue[0] = '';
    			retCode = RegEnumValue(hKey, i,
    				achValue,
    				&cchValue,
    				NULL,
    				NULL,
    				NULL,
    				NULL);
    
    			if (retCode == ERROR_SUCCESS)
    			{
    				_tprintf(TEXT("(%d) %s
    "), i + 1, achValue);
    			}
    		}
    	}
    }
    
  • 相关阅读:
    Pycharm的快捷键
    【Python】笔记1:Spyder常用快捷键
    npm常用命令整理
    MVC4 IIS7.5 403.14错误的解决办法
    AO 获取系统自带的工具条
    CentOS 7.3下安装Redis
    CentOS 7.3下安装MySql
    安装sql server 2005时出现“安装汇编”错误的解决办法
    解决IIS下localhost访问需要输入用户名和密码的问题
    不断沟通,反复确认
  • 原文地址:https://www.cnblogs.com/zhaoyixiang/p/12983823.html
Copyright © 2011-2022 走看看