首页 > 编程语言 >c++ 读写注册表

c++ 读写注册表

时间:2023-09-21 11:35:43浏览次数:34  
标签:hKey 读写 cfg pos c++ 注册表 test sizeof lpData

class CConfig
{
    HKEY _hKey;
public:
    ~CConfig()
    {
        if (_hKey)
        {
            RegCloseKey(_hKey);
        }
    }

    CConfig() : _hKey(0)
    {
    }

    LSTATUS Save(
        PCWSTR lpValueName,
        DWORD dwType,
        const void* lpData,
        DWORD cbData)
    {
        return RegSetValueExW(_hKey, lpValueName, 0, dwType, (BYTE*)lpData, cbData);
    }

    LSTATUS Load(
        PCWSTR lpValueName,
        PDWORD lpType,
        void* lpData,
        PDWORD lpcbData)
    {
        return RegQueryValueExW(_hKey, lpValueName, 0, lpType, (BYTE*)lpData, lpcbData);
    }

    LSTATUS Init(HKEY hKey, PCWSTR lpSubKey)
    {
        return RegCreateKeyExW(hKey, lpSubKey, 0, 0, 0, KEY_ALL_ACCESS, 0, &_hKey, 0);
    }
};

//void test_cfg()
//{
//    CConfig cfg;
//    if (!cfg.Init(HKEY_CURRENT_USER, L"Software\\MyKey"))
//    {
//        struct winpos_t
//        {
//            DWORD dwWindowStyle;
//            int iWindowX;
//            int iWindowY;
//        };
//
//        winpos_t test_pos = { 1, 2, 3 };
//
//        static const PCWSTR szwinpos_t = L"winpos_t";
//
//        if (!cfg.Save(szwinpos_t, REG_BINARY, &test_pos, sizeof(test_pos)))
//        {
//            ULONG type, cb = sizeof(test_pos);
//            RtlZeroMemory(&test_pos, sizeof(test_pos));
//            if (!cfg.Load(szwinpos_t, &type, &test_pos, &cb) && type == REG_BINARY && cb == sizeof(test_pos))
//            {
//                printf("{%x, %x, %x}\n", test_pos.dwWindowStyle, test_pos.iWindowX, test_pos.iWindowY);
//            }
//        }
//    }
//}

c++ - Saving settings to Windows registry as a tuple - Code Review Stack Exchange

标签:hKey,读写,cfg,pos,c++,注册表,test,sizeof,lpData
From: https://www.cnblogs.com/laremehpe/p/17719492.html

相关文章

  • c++ 简单模拟js Promise
    main:#include<stdio.h>#include"common.h"#include"promise.h"#include<chrono>//std::chrono::seconds#include<thread>//std::this_thread::sleep_forintmain(void){Promise*pro=newPromise([](ca......
  • C++ 程序员入门需要多久,怎样才能学好?
    学习成为一名熟练的C++程序员需要时间和努力,具体的时间取决于个人的学习速度、学习方法和学习目标。以下是一些建议,以帮助您入门并学好C++:基础知识学习(数周至数月):开始学习C++的基础语法,包括变量、数据类型、运算符、控制流程(如条件语句和循环)、函数等。学习C++标准库,包括常用的容器......
  • C++ 左/右值及其引用 论述
    说明:本文探讨的是C++11以来的值类别关于左值和右值,在不对其进行详细的划分时,简单的分类方法包括左值持久,右值短暂能取得地址得通常是左值,反之通常是右值(这一方法启示我们一个表达式的类型与其是左值还是右值无关,即相同类型的表达式既可以是左值也可以是右值)右......
  • C++中的四种类型转换运算符
    隐式类型转换是安全的,显式类型转换是有风险的,C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么。但是,这种强调风险的方式还是比较粗放,粒度比较大,它并没有表明存在什么风险,风险程度如何。再者,C风格的强制类型转换统一使用(),而()在代码中随处可见,所以......
  • INT13H 是一个基本的硬盘控制器中断,用于在实模式下进行对硬盘的读写操作。它提供了多
    INT13H是一个基本的硬盘控制器中断,用于在实模式下进行对硬盘的读写操作。它提供了多个功能来操控硬盘,包括磁盘读、磁盘写、磁盘参数查询等。以下是一些常见的INT13H功能:磁盘读取:功能号2:从磁盘上读取扇区到内存缓冲区。寄存器AH=02h,AL表示要读取的扇区数量,CH表示磁道号......
  • c++ 访问全局变量
      #include<iostream>usingnamespacestd;inta{1};intmain(){inta{123};cout<<"外部的a:"<<a<<endl;//外部的a:123{cout<<"外部的a:"<<a<<endl;//外部的a:123......
  • C++的构造函数和析构函数
    背景介绍在B站上看完侯捷老师讲解的两个类:String类andcomplex类,这两个类的实现体现了不带指针和带指针的区别,也可以作为设计类的参考学习。这两个类的实现过程中有很多小细节的东西需要注意,否则很可能造成编译报错。编写带指针的类String在c++的ansi库中有有一个string类,用......
  • C++医学影像(PACS)管理系统源码
    PACS(PictureArchivingandCommunicationsSystem)——图像存储与传输系统,和医院信息化及数字化的目标紧密关联,它是专门为现代化医院的影像管理而设计的包括数字化医学图像信息的采集、显示、处理、存储、诊断、输出、管理、查询、信息处理的综合应用系统,是以数字化诊断(无纸化、无......
  • C++ STL 容器之map
    一、map简介可以将任何基本类型映射到任何基本类型。如intarray[100]事实上就是定义了一个int型到int型的映射。map提供一对一的数据处理,key-value键值对,其类型可以自己定义,第一个称为关键字,第二个为关键字的值map内部是自动排序的二、用法1.map定义:map<type1name,t......
  • Win32编程之注册表的相关操作(十四)
    一、设置注册表项的值RegOpenKeyEx函数RegOpenKeyEx 函数是WindowsAPI中的一个函数,用于打开注册表中的一个指定注册表项的句柄。通过该句柄,您可以读取或修改该注册表项中的值和子项。函数原型:LONGRegOpenKeyEx(HKEYhKey,//指定基本注册表项的句柄LPC......