zoukankan      html  css  js  c++  java
  • C++学习(九):访问注册表

    //1.开发环境 VS 2013
    //2.创建MFC应用程序
    //3.选择基于对话框选项
    //4.打开*.rc文件在对话框界面上拖入ListBox控件
    //5.在*Dlg.cpp中插入
    
    #define UNINSTALL_SOFT _T("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
    
    LRESULT GetValue(HKEY hKey, LPCTSTR name, LPTSTR value, LPLONG size)
    {
        return ::RegQueryValueEx(hKey, name, NULL, NULL, (LPBYTE)value, (LPDWORD)size);
    }
    
    void DumpSoftware(LPCTSTR szKey, HKEY hParent, CListBox * mylist)
    {
        LRESULT lr;
        HKEY hKey;
        LONG size;
        TCHAR buffer[MAX_PATH];
        lr = RegOpenKey(hParent, szKey, &hKey);
    
        //不能打开注册表
        if (lr != ERROR_SUCCESS)
        {
            ::MessageBox(NULL, _T("打开注册表失败!"), NULL, MB_ICONWARNING);
            return;
        }
    
        size = sizeof(buffer);
        lr = GetValue(hKey, _T("DisplayName"), &buffer[0], &size);
        if (lr == ERROR_SUCCESS)
        {
            if (size > 0)
            {
                mylist->AddString(buffer);
            }
        }
    
        RegCloseKey(hKey);
    }
    
    void ListReg(CListBox * mylist)
    {
        unsigned int index;
        TCHAR buffer[MAX_PATH];
        HKEY hKey;
        HRESULT hr = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, UNINSTALL_SOFT, 0, KEY_READ, &hKey);
        if (hr != ERROR_SUCCESS)
        {
            ::MessageBox(NULL, _T("打开注册表失败!"), NULL, MB_ICONWARNING);
            return;
        }
    
        for (index = 0;; index++)
        {
            hr = RegEnumKey(hKey, index, &buffer[0], sizeof(buffer));
            switch (hr)
            {
                case ERROR_SUCCESS:
                    DumpSoftware(buffer, hKey, mylist);
                    break;
                case ERROR_NO_MORE_ITEMS:
                    RegCloseKey(hKey);
                    return;
                default:
                    RegCloseKey(hKey);
                    return;
            }
        }
        RegCloseKey(hKey);
    }
    //6.在OnInitDialog函数中return之前插入
    
        CListBox * mylist = (CListBox *)GetDlgItem(IDC_LIST1);
        mylist->ResetContent(); //清空ListBox
        //枚举注册表将所有安装软件信息装入一个ListBox控件里
        ListReg(mylist);  
  • 相关阅读:
    深入理解递归函数的调用过程
    关于字符串和字符数组的再讨论
    返回字符串的长度
    再写静态变量的有效范围
    一道关于返回指针和返回数组名的面试题
    关于TCP/IP的三次握手和四次挥手解释
    C++面向对象的编程(二)
    关于面试宝典中的检测并修改不适合的继承
    argc和argv
    基于C的文件操作(转)
  • 原文地址:https://www.cnblogs.com/liw66/p/12465912.html
Copyright © 2011-2022 走看看