c++读取注册表的实例

// CRegisterTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <atlbase.h>
#include <atlstr.h>
#include <Windows.h>
using namespace std;

//查看HKEY_CURRENT_USER主键下Software//武汉帷幄信息技术有限公司//施工工艺决策系统//系统配置
//BCGPGanttControls//GanttChartBCGPGantt-0子键中名称为GridProgressColumnIndex的值,其类型为DWORD
void  OnBnClickedQuery() //响应按钮IDC_QUERY
{
    HKEY hKEY;//定义有关的hKEY,在查询结束时要关闭
    //打开与路径data_Set相关的hKEY
    LPCTSTR data_Set = _T("/Software//武汉帷幄信息技术有限公司//施工工艺决策系统//系统配置//BCGPGanttControls//GanttChartBCGPGantt-0");
    //访问注册表,hKEY则保存此函数所打开的键的句柄
    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_Set, 0, KEY_READ, &hKEY))
    {
        DWORD dwValue;
        DWORD dwSize = sizeof(DWORD);
        DWORD dwType = REG_DWORD;
        if (::RegQueryValueEx(hKEY, _T("GridProgressColumnIndex"), 0, &dwType, (LPBYTE)&dwValue, &dwSize) != ERROR_SUCCESS)
        {
//            AfxMessageBox(_T("错误:无法查询有关的注册表信息"));
            cout << "错误:无法查询有关的注册表信息"<<endl;
        }
        //程序结束,关闭打开的hKEY
        ::RegCloseKey(hKEY);
    }
    else{
        cout << "注册表操作失败" << endl;
    }
//    UpdateData(false);
    // TODO: 在此添加控件通知处理程序代码
}
//查看HKEY_LOCAL_MACHINE主键下SOFTWARE//Microsoft//Windows NT//CurrentVersion子键中名称为"SoftwareType的值,其类型为REG_SZ
void OnBnClickedQuery_1(){
    HKEY hKEY;//定义有关的hKEY,在查询结束时要关闭
    //打开与路径data_Set相关的hKEY
    /*LPCTSTR data_Set = _T("SOFTWARE\\360Safe\\360krnlsvc");*/
    LPCTSTR data_Set = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");
    //打开一个键的函数,第三位为保留值,必须为0,&hKEY为返回值,值为打开子键的句柄
    long result = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKEY);
    cout << &hKEY << endl;//返回句柄
    cout << result<< endl;//ERROR_SUCCESS 如果返回值为0,则表示注册表打开成功
    //访问注册表,hKEY则保存此函数所打开的键的句柄

    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKEY)){
        char dwValue[256];
        DWORD dwSzType = REG_SZ;
        DWORD dwSize = sizeof(dwValue);

        if (::RegQueryValueEx(hKEY, _T("SoftwareType"), 0, &dwSzType, (LPBYTE)&dwValue, &dwSize) == ERROR_SUCCESS){
//            AfxMessageBox(_T("错误:无法查询有关的注册表信息"));
            cout << "注册表读取成功" << endl;
            cout << "读取到的值得地址" << &dwValue << endl;
            cout << "读取到的值:";
            for (int i = 0; i < sizeof(dwValue); i++){
                cout << dwValue[i];
            }
            cout << endl;
        }
        else{
            cout << "注册表读取失败" << endl;
            cout <<"读取到的值得地址"<< &dwValue << endl;
        }
        //程序结束,关闭打开的hKEY
        ::RegCloseKey(hKEY);
    }
    else{
        cout << "读取注册表操作失败" << endl;
    }
//    UpdateData(false);
    // TODO: 在此添加控件通知处理程序代码
}
//在HKEY_CURRENT_USER主键下写一个Software//武汉帷幄信息技术有限公司//test111子键,设置其名称为Name,类型为DWORD,值为6
void OnBnClickedChange(){//响应按钮IDC_CHANGE{
    HKEY hKey;//定义有关的hKEY,在查询结束时要关闭
    HKEY hTempKey;
    DWORD dwValue = 6;
    DWORD dwSize = sizeof(DWORD);
    DWORD dwType = REG_DWORD;
    //打开与路径data_Set相关的hKEY
    LPCTSTR data_Set = _T("Software//武汉帷幄信息技术有限公司");
    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_Set, 0, KEY_SET_VALUE, &hKey)){
        // 使用hKey来操作data_Set这个KEY里面的值。
        if (ERROR_SUCCESS == ::RegCreateKey(hKey, _T("test111"), &hTempKey)){//背景色
            if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, _T("Name"), 0, REG_DWORD, (CONST BYTE*)&dwValue, sizeof(DWORD))){
                //AfxMessageBox(_T("错误"));
                cout << "错误" << endl;
                ::RegCloseKey(hKey);
                return;
            }
        }
    }
    else{
        cout << "写注册表操作失败" << endl;
    }
    ::RegCloseKey(hKey);
    // TODO: 在此添加控件通知处理程序代码
}
//MFC中写注册表的方法
// 在HKEY_CURRENT_USER主键下写一个Software//武汉帷幄信息技术有限公司//test111子键,设置其名称为Name,类型为REG_SZ,值为China。
//void OnBnClickedChange(){
//    HKEY hKey;//定义有关的hKEY,在查询结束时要关闭
//    HKEY hTempKey;
//    CString m_name = "China";
//    LPBYTE m_name_Set = CString_To_LPBYTE(m_name);//定义x轴名称
//    DWORD length = m_name.GetLength() + 1;//定义数据长度
//    //打开与路径data_Set相关的hKEY
//    LPCTSTR data_Set = _T("Software//武汉帷幄信息技术有限公司");
//    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_Set, 0, KEY_SET_VALUE, &hKey)){
//        // 使用hKey来操作data_Set这个KEY里面的值。
//        if (ERROR_SUCCESS == ::RegCreateKey(hKey, _T("test111"), &hTempKey))        {
//            if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, _T("Name"), 0, REG_SZ, m_name_Set, length)){
//                cout << "错误" << endl;
//                ::RegCloseKey(hKey);
//                return;
//            }
//        }
//    }else{
//        cout << "操作注册表失败" << endl;
//    }
//    ::RegCloseKey(hKey);
////    UpdateData(false);
//    // TODO: 在此添加控件通知处理程序代码
//}
//在HKEY_CURRENT_USER主键下写一个Software//武汉帷幄信息技术有限公司//test111子键,设置其名称为Name,类型为REG_ BINARY,值为ff ac 05 4e
void OnBnClickedChange_1(){
    HKEY hKey;//定义有关的hKEY,在查询结束时要关闭
    HKEY hTempKey;
    BYTE   m_name[10];
    memset(m_name, 0, sizeof(m_name));//将数组m_name清零
    m_name[0] = 0xff;
    m_name[1] = 0xac;
    m_name[2] = 0x05;
    m_name[4] = 0x4e;
    //打开与路径data_Set相关的hKEY
    LPCTSTR data_Set = _T("Software//武汉帷幄信息技术有限公司");
    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_Set, 0, KEY_SET_VALUE, &hKey)){
        // 使用hKey来操作data_Set这个KEY里面的值。
        if (ERROR_SUCCESS == ::RegCreateKey(hKey, _T("test111"), &hTempKey)){
            if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, _T("Name"), 0, REG_BINARY, (unsigned char *)m_name, 5)){
//                AfxMessageBox(_T("错误"));
                cout << "错误" << endl;
                ::RegCloseKey(hKey);
                return;
            }
        }
    }
    else{
        cout << "主键写子键失败" << endl;
    }
    ::RegCloseKey(hKey);
//    UpdateData(false);
    // TODO: 在此添加控件通知处理程序代码
}
//删除HKEY_CURRENT_USER//Software//武汉帷幄信息技术有限公司//test111的键值Name
void OnBnClickedDelete(){
    HKEY hKey;//定义有关的hKEY,在查询结束时要关闭
    //打开与路径data_Set相关的hKEY
    LPCTSTR data_Set = _T("Software//武汉帷幄信息技术有限公司//test111");
    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_Set, 0, KEY_SET_VALUE, &hKey)){
        // 使用hKey来操作data_Set这个KEY里面的值。
        if (ERROR_SUCCESS != ::RegDeleteValue(hKey, _T("Name"))){
//            AfxMessageBox(_T("错误"));
            cout << "错误" << endl;
            ::RegCloseKey(hKey);
            return;
        }
    }
    else{
        cout << "删除注册表失败" << endl;
    }
    ::RegCloseKey(hKey);
//    UpdateData(FALSE);
    // TODO: 在此添加控件通知处理程序代码
}
void OnBnClickedDelete_1(){
    HKEY hKey;//定义有关的hKEY,在查询结束时要关闭
    //打开与路径data_Set相关的hKEY
    LPCTSTR data_Set = _T("Software//武汉帷幄信息技术有限公司");
    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_Set, 0, KEY_SET_VALUE, &hKey)){
        char *szSubKey = "test111";
        int num = MultiByteToWideChar(0, 0, szSubKey, -1, NULL, 0);
        wchar_t *wide = new wchar_t[num];
        MultiByteToWideChar(0, 0, szSubKey, -1, wide, num);
        // 使用hKey来操作data_Set这个KEY里面的值。
        if (ERROR_SUCCESS != ::RegDeleteKey(hKey, wide)){
//            AfxMessageBox(_T("错误"));
            cout << "错误" << endl;
            ::RegCloseKey(hKey);
            return;
        }
    }
    else{
        cout << "删除注册表失败" << endl;
    }
    ::RegCloseKey(hKey);
//    UpdateData(FALSE);
    // TODO: 在此添加控件通知处理程序代码
}

int _tmain(int argc, _TCHAR* argv[])
{
    OnBnClickedQuery_1();
    cout << "hello" << endl;
    system("pause");
    return 0;
}
时间: 2024-10-07 00:44:50

c++读取注册表的实例的相关文章

C#简单注册表操作实例

1.简介操作 //设置注册值 private void Button_Click(object sender, RoutedEventArgs e) { //路径及间隔符号要正确 //1.如果指定路径不存在,则创建 //2.如果指定键存在,则覆盖值 string path = "HKEY_CURRENT_USER\\myRegOne"; Registry.SetValue(path, "Expend", "hellow world!"); Mes

Advanced Installer读取注册表时将Program Files读取为Program Files (x86)的解决办法

原文:Advanced Installer读取注册表时将Program Files读取为Program Files (x86)的解决办法 今天同事在做安装包的时候,有一个读取注册表路径的需求,需要根据读取的值来写配置文件,按照常规的做法,写好了注册表搜索方法,但是在测试的时候,发现总是会将系统盘下的Program Files\xxx路径读取为Program Files (x86)\xxx,如下图所示: 之后测试了如果读取非系统盘下的此路径,不会出现这个问题. 但是这个路径一般情况下都是默认安装在

用javascript技术读取注册表中软件安装位置并启动本地软件

1.首先读取注册表中本地软件安装的位置,如果未安装则无就跳转到下载页面. 2.启动软件,关闭页面. 3.如报错提示. <SCRIPT language=javascript>  <!--   function killErrors(){  alert("请将您浏览器Internet选项中的“对没有标记为安全的ActiveX控件进行初始化和脚本运行”设置为“启用”!/n/n然后刷新本页登陆!");  return true;}   window.onerror = ki

读取注册表获取Windows系统XP/7/8/10类型(使用wcscmp比较wchar[]内容)

很多方案是采用GetVersion.GetVersionEx这两个API来查询操作系统的版本号来判断当前的操作系统是Windows系列中的哪个,在Win10没有出现前,这种方法是行的通的,但是Win10出现后此方法对于判断Win10就不准了. 在此提供一个读取注册表的方法,已经验证过可行: [cpp] view plain copy //查看注册表获知:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentV

Unicode 转码 Ansi ,用于读取注册表后的值转换

1 char* UnicodeToAnsi(TCHAR* wstr) //转换字符编码 2 { 3 if( !wstr ) 4 return NULL; 5 6 int strlen = ::WideCharToMultiByte(CP_ACP, NULL, wstr, wcslen(wstr), NULL, 0, NULL, FALSE); 7 char* str = new char[strlen + 1]; 8 ::WideCharToMultiByte(CP_ACP, NULL, wst

如何写入和读取注册表

参考下面代码,写入和读取注册表 1 string registrySubKey = @"SOFTWARE\RegistryTest"; 2 RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(registrySubKey, true); 3 if (registryKey == null)//没有则创建路径 4 { 5 Registry.LocalMachine.CreateSubKey(registrySubKey);

64位读取注册表与32位的区别

有一个读取注册表信息的程序  if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkeystring , 0, KEY_READ, &hKey) == ERROR_SUCCESS)/ ,在32位下完全正常,但是在64位返回值正确,但就是读不到东西.后来单步发现读不到东西,就搜64位读注册表失败,发现需要加 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkeystring , 0,KEY_READ|KEY_WOW64_64KEY, &am

C++读取注册表

昨天受一朋友要求,帮忙写一个用C++读取注册表的程序.这个朋友是搞Java的,肯定不知道C++怎么写啦!他的需求也奇怪:用js调用一个浏览器插件,通过插件获取注册表中指定键的值,插件肯定是用C++写了. 于是乎我就在网上查了一下"C++读取注册表",一搜一大片但都是一些初学C++的人写的,多数不能用,而且那写的程序真是无力吐槽--一怒之下我就自己花一个小时写了一个,费话不说了,直接上代码: C++读取注册表 GetRegValue.h: #ifndef __GETREGVALUE_H_

读取注册表

读取注册表需要using Microsoft.Win32 读取指定路径的注册表,例如如下位置: RegistryKey uninstall = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\MicroSoft\Windows\CurrentVersion\Uninstall"); 从其子项中读取名称含"QQ"的子项 1 RegistryKey uninstall = Registry.LocalMac