zoukankan      html  css  js  c++  java
  • 注册表操作(VC_Win32)

    数据类型

    注册表的数据类型主要有以下四种:
    显示类型(在编辑器中)   数据类型    说明                   
    REG_SZ           字符串     文本字符串
    REG_MULTI_SZ         多字符串    含有多个文本值的字符串
    REG_BINARY          二进制数    二进制值,以十六进制显示.
    REG_DWORD           双字      一个32位的二进制值,显示为8位的十六进制值.

    各主键的简单介绍

    • HKEY_LOCAL_MACHINE  是一个显示控制系统和软件的处理键.HKLM键保存着计算机的系统信息.它包括网络和硬件上所有的软件设置.
    • HKEY_CLASSES_ROOT  是系统中控制所有数据文件的项.
    • HKEY_USERS  将缺省用户和目前登陆用户的信息输入到注册表编辑器
    • HKEY_CURRENT_USER  包含着在HKEY_USERS安全辨别里列出的同样信息
    • HKEY_CURRENT_CONFIG  包括了系统中现有的所有配置文件的细节.HKEY_CURRENT_CONFIG允许软件和设备驱动程序员很方便的更新注册表,而不涉及到多个配置文件信息. HKEY_LOCAL_MACHINE中同样的数据和任何注册表的变化都会同时的变化.

     

    相关函数

    创建键 RegCreateKeyEx(次函数主要用于生成键(目录))

    函数原型

    LONG RegCreateKeyEx(

      HKEYhKey,                                 // handle to open key

      LPCTSTRlpSubKey,                           // subkey name

      DWORDReserved,                             // reserved

      LPTSTRlpClass,                             // class string

      DWORD dwOptions,                            // special options

      REGSAMsamDesired,                          // desired security access

     LPSECURITY_ATTRIBUTES lpSecurityAttributes, //inheritance

      PHKEYphkResult,                            // key handle

      LPDWORD lpdwDisposition                     //disposition value buffer

    );

    参数说明

    • hKey:   要打开键的句柄或以下预定义句柄
      • HKEY_CLASSES_ROOT
      • HKEY_CURRENT_USER
      • HKEY_LOCAL_MACHINE
      • HKEY_USERS
    • lpSubKey:   指向一个用于定义子键路径的字符串
    • Reserved,dwOptions,samDesired:   置0
    • lpClass,lpSecurityAttributes:   置NULL
    • phkResult:   用于接收键句柄
    • lpdwDisposition:   接收的相关信息,取值如下
      • REG_CREATED_NEW_KEY   创建成功
      • REG_OPENED_EXISTING_KEY    键已存在

    返回值:If the function succeeds, the return value is ERROR_SUCCESS.

    打开键 RegOpenKeyEx

    函数原型

    LONG RegOpenKeyEx(

      HKEYhKey,         // handle to open key

      LPCTSTRlpSubKey,  //subkey name

      DWORDulOptions,   //reserved

      REGSAMsamDesired, // security access mask

      PHKEYphkResult    //handle to open key

    );

    参数说明

    • hKey:     要打开键的句柄或以下预定义句柄
      • HKEY_CLASSES_ROOT
      • HKEY_CURRENT_USER
      • HKEY_LOCAL_MACHINE
      • HKEY_USERS
    • lpSubKey:   指向一个用于定义子键路径的字符串
    • ulOptions:   保留位,置0
    • samDesired:   打开键后键的操作权限
    • phResult:   接收打开的键的句柄

    返回值:If the function succeeds, the return value is ERROR_SUCCESS

    删除键 RegDeleteKey

    函数原型

    LONG RegDeleteKey(

      HKEYhKey,         // handle to open key

      LPCTSTRlpSubKey   //subkey name

    );

    参数说明

    • hKey:   要打开键的句柄或以下预定义句柄
      • HKEY_CLASSES_ROOT
      • HKEY_CURRENT_USER
      • HKEY_LOCAL_MACHINE
      • HKEY_USERS
    • lpSubKey:   指向一个用于定义子键路径的字符串

    返回值:If the function succeeds, the return value is ERROR_SUCCESS

    修改/添加键值 RegSetValueEx

    函数原型

    LONG RegSetValueEx(

      HKEYhKey,           // handle to key

      LPCTSTRlpValueName, // value name

      DWORDReserved,      //reserved

      DWORDdwType,        //value type

      CONST BYTE*lpData,  //value data

      DWORD cbData         // size ofvalue data

    );

    参数说明

    • hKey:   打开键的句柄或以下预定义句柄
      • HKEY_CLASSES_ROOT
      • HKEY_CURRENT_USER
      • HKEY_LOCAL_MACHINE
      • HKEY_USERS
    • lpValueName:   键值的名称
    • Reserved:   保留位,置0
    • dwType:   键值的类型
    • lpData:   键值
    • cbData:   键值数据长度

    返回值:If the function succeeds, thereturn value is ERROR_SUCCESS

    删除键值 RegDeleteValue

    函数原型

    LONG RegDeleteValue(

      HKEYhKey,            // handle to key

      LPCTSTRlpValueName   //value name

    );

    参数说明

    • hKey:   打开键的句柄或以下预定义句柄
      • HKEY_CLASSES_ROOT
      • HKEY_CURRENT_USER
      • HKEY_LOCAL_MACHINE
      • HKEY_USERS
    • lpValueName:   键值的名称

    返回值:If the function succeeds, the return value is ERROR_SUCCESS

    读取键值 RegQueryValueEx

    函数原型

    LONG RegQueryValueEx(

      HKEYhKey,            // handle to key

      LPCTSTRlpValueName,  //value name

      LPDWORDlpReserved,   //reserved

      LPDWORD lpType,       // type buffer

      LPBYTElpData,        //data buffer

      LPDWORDlpcbData      //size of data buffer

    );

    参数说明

    • hKey:   打开键的句柄或以下预定义句柄
      • HKEY_CLASSES_ROOT
      • HKEY_CURRENT_USER
      • HKEY_LOCAL_MACHINE
      • HKEY_USERS
    • lpValueName:   键值的名称
    • Reserved:   保留位,置0
    • lpType:   接收键值的类型
    • lpData:   接收键值
    • lpcbData:   接收键值数据长度
      1 #include "stdafx.h"
      2 #include <windows.h>
      3 #include <iostream>
      4 using namespacestd;
      5  
      6 int main()
      7 {
      8      HKEY hKey;    
      9      LPCTSTR lpRun =L"Software\_MyTest";
     10      DWORD state,dwtype,sizeBuff;
     11      long lRet;
     12      char reBuff[10] ={0};
     13  
     14      //lRet =RegCreateKeyEx(HKEY_CURRENT_USER,lpRun,0,NULL,0,0,NULL,&hKey,&state);
     15      //if(lRet == ERROR_SUCCESS)
     16      //{
     17      //    if(state ==REG_CREATED_NEW_KEY)
     18      //       cout<<"表项创建成功"<<endl;
     19  
     20      //
     21      //    //关闭键
     22      //   RegCloseKey(hKey);
     23      //}
     24      //else if (state == REG_OPENED_EXISTING_KEY)
     25      //{
     26      //   cout<<"表项已存在"<<endl;
     27      //}
     28  
     29      //lRet = RegDeleteKey(HKEY_CURRENT_USER,lpRun);
     30      //if (ERROR_SUCCESS == lRet)
     31      //{
     32      //   cout<<"删除键成功"<<endl;
     33      //}
     34      //else
     35      //   cout<<"删除键失败"<<endl;
     36  
     37      lRet = RegOpenKeyEx(HKEY_CURRENT_USER,lpRun,0,KEY_ALL_ACCESS,&hKey);
     38      if (ERROR_SUCCESS==lRet)
     39      {
     40          cout<<"打开键成功"<<endl;
     41      }
     42      else
     43          cout<<"打开键失败"<<endl;
     44  
     45      LPCTSTR KeyName= L"KeyName";
     46      char KeyValue[20];
     47      DWORD type;
     48      DWORD len = sizeof(KeyValue);
     49      lRet = RegQueryValueEx(hKey,KeyName,0,&type,(BYTE*)KeyValue,&len);
     50      if (ERROR_SUCCESS==lRet)
     51      {
     52          cout<<"查询键值成功------"<<KeyValue<<endl;
     53      }
     54      else
     55          cout<<"查询键值失败"<<endl;
     56  
     57  //  LPCTSTR KeyName =L"KeyName";
     58      //char KeyValue[] = "KeyValue";
     59      //lRet = RegSetValueEx(hKey,KeyName,0,REG_SZ,(BYTE*)KeyValue,20);
     60      //if (ERROR_SUCCESS == lRet)
     61      //{
     62      //   cout<<"写入键值成功"<<endl;
     63      //}
     64      //else
     65      //   cout<<"写入键值失败"<<endl;
     66  
     67      //LPCTSTR KeyName = L"KeyName";
     68      //lRet = RegDeleteValue(hKey,KeyName);
     69      //if (ERROR_SUCCESS == lRet)
     70      //{
     71      //   cout<<"删除键值成功"<<endl;
     72      //}
     73      //else
     74      //   cout<<"删除键值失败"<<endl;
     75  
     76      return 0;
     77 }
     78  ===================================添加开机启动项============================================
     79 bool AutoStart()
     80 {
     81     //程序路径
     82     char strMyPath[MAX_PATH];
     83     int retGMFN=GetModuleFileName(NULL,strMyPath,MAX_PATH);
     84     if (retGMFN==0)
     85     {
     86         return false;
     87     }
     88 
     89     //写注册表,达到开机启动的效果
     90     HKEY    keyAutoStart;
     91     char    subKeyName[100]="Software\Microsoft\Windows\CurrentVersion\Run";
     92     LONG retROK=RegOpenKeyEx(HKEY_LOCAL_MACHINE,subKeyName,0,KEY_ALL_ACCESS,&keyAutoStart);
     93     if (retROK!=ERROR_SUCCESS)
     94     {
     95         int erro =GetLastError();
     96         return false;
     97     }
     98     //添加启动项
     99     char keyValueName[100]="YunYaoHuLian_UpdateServer";
    100     LONG retRSV=RegSetValueEx(keyAutoStart,keyValueName,0,REG_SZ,(BYTE *)strMyPath,strlen(strMyPath));
    101     if (retRSV!=ERROR_SUCCESS)
    102     {
    103         int erro =GetLastError();
    104         return false;
    105     }
    106 
    107     //不用就关闭
    108     RegCloseKey(keyAutoStart);
    109 
    110     return true;
    111 }
  • 相关阅读:
    day4 流程控制while 判断if
    作业2
    C语言I博客作业02
    ActionScript3与PHP的通信
    WordPress代码和分析从主题开始
    事件、委托、异步
    201920201学期 20192405《网络空间安全专业导论》第二周学习总结
    201920201学期 20192405《网络空间安全专业导论》第二周学习总结
    201920201学期 20192405《网络空间安全专业导论》第四周学习总结
    201920201学期 20192405《网络空间安全专业导论》第一周学习总结
  • 原文地址:https://www.cnblogs.com/xiaocaocao/p/8451823.html
Copyright © 2011-2022 走看看