Unicode版本的注册表封装类

来源:互联网 发布:网络八大神兽 编辑:程序博客网 时间:2024/05/18 20:47

前几天看了 网页url协议的一篇资料 http://blog.csdn.net/zssureqh/article/details/25828683

我也试试~


其中写注册表的那部分,我不想从头用注册表API来写,  .如果没有自己的基础库,也要找开源的组件改改~

找到自己在资源中上传的注册表类, 10年写的~

搬到现有工程中,发现编译不过.

原来的注册表操作类是用在MBCS配置选项的工程中,我现在只用Unicode配置选项的工程.

改了下, 可以完成上述注册表操作任务.

扫了一眼,貌似要使该类中所有操作都适合Unicode工程,还得改改.

我就先不管了,以后遇到状况再弄~~,  工作量也不大


工程下载点: srcRegistryTest_2014_1115_1149.rar


测试程序后,在注册表中的效果:


测试程序:

// srcRegistryTest.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "regOpt.h"int _tmain(int argc, _TCHAR* argv[]){    std::wstring strPathNameMe = L"";    ns_reg::GetFilePathName_Me(strPathNameMe);    ns_reg::WriteDlUrlProcesserToRegister(strPathNameMe.c_str());    _tprintf(L"END, press any key to quit\r\n");    getwchar();return 0;}

在注册表类之上,封装了一个注册表操作函数, 完成注册表中url处理键值操作.

/// @file       regOpt.h#ifndef __REG_OPT_H__#define __REG_OPT_H__#include "stdafx.h"#include <string>#include "helper/LsRegistry.h"namespace ns_reg{    BOOL WriteDlUrlProcesserToRegister(const WCHAR* pcPePathName); ///< 向注册表写入下载url处理者是我    BOOL WriteDlUrlProcesserToRegister_defaultValue(CLsRegistry& reg, const WCHAR* pcPePathName);    BOOL WriteDlUrlProcesserToRegister_Processer(CLsRegistry& reg, const WCHAR* pcPePathName);    BOOL WriteDlUrlProcesserToRegister_DefaultIcon(CLsRegistry& reg, const WCHAR* pcPePathName);    BOOL WriteDlUrlProcesserToRegister_ShellOpen(CLsRegistry& reg, const WCHAR* pcPePathName);    BOOL GetFilePathName_Me(std::wstring & strPathName);    BOOL StringCompare_equ(const WCHAR* pcSrc, const WCHAR* pcDst);    int StringCompare(const WCHAR* pcSrc, const WCHAR* pcDst);}#endif // #ifndef __REG_OPT_H__

/// @file       regOpt.cpp#include "stdafx.h"#include "regOpt.h"#define REG_UrlProcess_RegPathObj           L"HKEY_CLASSES_ROOT\\DemoHelper"#define REG_UrlProcess_WebshellProtocol     L"WebshellProtocolDemo"#define REG_UrlProcess_DefaultIcon          L"HKEY_CLASSES_ROOT\\DemoHelper\\DefaultIcon"#define REG_UrlProcess_shell                L"HKEY_CLASSES_ROOT\\DemoHelper\\shell"#define REG_UrlProcess_shell_open           L"HKEY_CLASSES_ROOT\\DemoHelper\\shell\\open"#define REG_UrlProcess_shell_open_command   L"HKEY_CLASSES_ROOT\\DemoHelper\\shell\\open\\command"namespace ns_reg{    BOOL WriteDlUrlProcesserToRegister(const WCHAR* pcPePathName)    {        // @ref http://blog.csdn.net/zssureqh/article/details/25828683        /**        Windows Registry Editor Version 5.00        [HKEY_CLASSES_ROOT\Webshell]        "URL Protocol"="D:\\Documents\\Visual Studio 2008\\Projects\\zs_test_sln\\Release\\webshell2.exe"        @="WebshellProtocol"        [HKEY_CLASSES_ROOT\Webshell\DefaultIcon]        @="D:\\Documents\\Visual Studio 2008\\Projects\\zs_test_sln\\Release\\webshell2.exe,1"        [HKEY_CLASSES_ROOT\Webshell\shell]        [HKEY_CLASSES_ROOT\Webshell\shell\open]        [HKEY_CLASSES_ROOT\Webshell\shell\open\command]        @="\"D:\\Documents\\Visual Studio 2008\\Projects\\zs_test_sln\\Release\\webshell2.exe\" \"%1\""        */                BOOL                bRc = FALSE;        CLsRegistry         reg;        do         {            if (NULL == pcPePathName)                break;            bRc = WriteDlUrlProcesserToRegister_defaultValue(reg, pcPePathName);            if (!bRc)                break;            bRc = WriteDlUrlProcesserToRegister_Processer(reg, pcPePathName);            if (!bRc)                break;            bRc = WriteDlUrlProcesserToRegister_DefaultIcon(reg, pcPePathName);            if (!bRc)                break;            bRc = WriteDlUrlProcesserToRegister_ShellOpen(reg, pcPePathName);            if (!bRc)                break;            bRc = TRUE;        } while (0);        return bRc;    }    BOOL WriteDlUrlProcesserToRegister_defaultValue(CLsRegistry& reg, const WCHAR* pcPePathName)    {        BOOL                bRc = FALSE;        long                lRc = ERROR_SUCCESS;        std::wstring        strVal = L"";        const std::wstring  strRegPathObj = REG_UrlProcess_RegPathObj;        const std::wstring  strUrlProtocolDefaultName = REG_UrlProcess_WebshellProtocol;        do         {            // 打开或建立 REG_UrlProcess_RegPathObj            bRc = reg.OpenPathName(strRegPathObj.c_str());             if (!bRc)                bRc = reg.CreatePathName(strRegPathObj.c_str());            if (!bRc)                break;            /// 写默认值 REG_UrlProcess_WebshellProtocol            strVal.resize(MAX_PATH + 1, L'\0');            // ERROR_SUCCESS            lRc = reg.ReadVal_Default((PTCHAR)strVal.data(), strVal.size() - 1);            if ((ERROR_SUCCESS != lRc)                 || !StringCompare_equ(strVal.c_str(), strUrlProtocolDefaultName.c_str()))            {                lRc = reg.WriteVal_Default((WCHAR*)strUrlProtocolDefaultName.c_str());                if (ERROR_SUCCESS != lRc)                    break;            }            bRc = TRUE;        } while (0);        return bRc;    }    BOOL WriteDlUrlProcesserToRegister_Processer(CLsRegistry& reg, const WCHAR* pcPePathName)    {        BOOL                bRc = FALSE;        long                lRc = ERROR_SUCCESS;        std::wstring        strVal = L"";        std::wstring        strPePathName = L"";        const std::wstring  strUrlProtocolKey = L"URL Protocol";        do         {            /// "URL Protocol"="x:\\xx.exe"            if (NULL == pcPePathName)                break;            strPePathName = L"\"";            strPePathName += pcPePathName;            strPePathName += L"\"";            strVal.resize(MAX_PATH + 1, L'\0');            lRc = reg.ReadVal_Sz(strUrlProtocolKey.c_str(), (WCHAR*)strVal.data(), strVal.size() - 1);            if ((ERROR_SUCCESS != lRc) || (!StringCompare_equ(strVal.c_str(), strPePathName.c_str())))            {                lRc = reg.WriteVal_Sz(strUrlProtocolKey.c_str(), (WCHAR*)strPePathName.c_str());                if (ERROR_SUCCESS != lRc)                    break;            }            bRc = TRUE;        } while (0);        return bRc;    }    BOOL WriteDlUrlProcesserToRegister_DefaultIcon(CLsRegistry& reg, const WCHAR* pcPePathName)    {        /*        [HKEY_CLASSES_ROOT\Webshell\DefaultIcon]        @="D:\\Documents\\Visual Studio 2008\\Projects\\zs_test_sln\\Release\\webshell2.exe,1"        */        BOOL                bRc = FALSE;        long                lRc = ERROR_SUCCESS;        std::wstring        strVal = L"";        std::wstring        strDefaultVal = L"";        const std::wstring  strRegPathObj = REG_UrlProcess_DefaultIcon;        do         {            if (NULL == pcPePathName)                break;            strDefaultVal = L"\"";            strDefaultVal += pcPePathName;            strDefaultVal += L",1\"";            bRc = reg.OpenPathName(strRegPathObj.c_str());             if (!bRc)                bRc = reg.CreatePathName(strRegPathObj.c_str());            if (!bRc)                break;            /// 写默认值 WebshellProtocolFz            strVal.resize(MAX_PATH + 1, L'\0');            // ERROR_SUCCESS            lRc = reg.ReadVal_Default((PTCHAR)strVal.data(), strVal.size() - 1);            if ((ERROR_SUCCESS != lRc)                 || (!StringCompare_equ(strVal.c_str(), strDefaultVal.c_str())))            {                lRc = reg.WriteVal_Default((WCHAR*)strDefaultVal.c_str());                if (ERROR_SUCCESS != lRc)                    break;            }            bRc = TRUE;        } while (0);        return bRc;    }    BOOL WriteDlUrlProcesserToRegister_ShellOpen(CLsRegistry& reg, const WCHAR* pcPePathName)    {        /*        [HKEY_CLASSES_ROOT\Webshell\shell]        [HKEY_CLASSES_ROOT\Webshell\shell\open]        [HKEY_CLASSES_ROOT\Webshell\shell\open\command]        @="\"D:\\Documents\\Visual Studio 2008\\Projects\\zs_test_sln\\Release\\webshell2.exe\" \"%1\""        */        BOOL                bRc = FALSE;        long                lRc = ERROR_SUCCESS;        std::wstring        strVal = L"";        std::wstring        strDefaultVal = L"";        const std::wstring  strRegPathShell = REG_UrlProcess_shell;        const std::wstring  strRegPathShellOpen = REG_UrlProcess_shell_open;        const std::wstring  strRegPathShellOpenCommand = REG_UrlProcess_shell_open_command;        do         {            if (NULL == pcPePathName)                break;            strDefaultVal = L"\"";            strDefaultVal += pcPePathName;            strDefaultVal += L"\" \"%1\"";            bRc = reg.OpenPathName(strRegPathShell.c_str());             if (!bRc)                bRc = reg.CreatePathName(strRegPathShell.c_str());            if (!bRc)                break;            bRc = reg.OpenPathName(strRegPathShellOpen.c_str());             if (!bRc)                bRc = reg.CreatePathName(strRegPathShellOpen.c_str());            if (!bRc)                break;            bRc = reg.OpenPathName(strRegPathShellOpenCommand.c_str());             if (!bRc)                bRc = reg.CreatePathName(strRegPathShellOpenCommand.c_str());            if (!bRc)                break;            /// 写默认值 WebshellProtocol            strVal.resize(MAX_PATH + 1, L'\0');            // ERROR_SUCCESS            lRc = reg.ReadVal_Default((PTCHAR)strVal.data(), strVal.size() - 1);            if ((ERROR_SUCCESS != lRc)                 || (!StringCompare_equ(strVal.c_str(), strDefaultVal.c_str())))            {                lRc = reg.WriteVal_Default((WCHAR*)strDefaultVal.c_str());                if (ERROR_SUCCESS != lRc)                    break;            }            bRc = TRUE;        } while (0);        return bRc;    }    BOOL GetFilePathName_Me(std::wstring & strPathName)    {        WCHAR szModuleMe[MAX_PATH + 1] = { L'\0'};        ::GetModuleFileName(NULL, szModuleMe, MAX_PATH);        strPathName = szModuleMe;        return TRUE;    }    BOOL StringCompare_equ(const WCHAR* pcSrc, const WCHAR* pcDst)    {        BOOL            bRc = FALSE;        int             iRc = 0;        std::wstring    strTmp = L"";        do         {            if ((NULL == pcSrc)                || (NULL == pcDst))            {                break;            }            strTmp = pcSrc;            iRc = StringCompare(pcSrc, pcDst);            bRc = (0 == iRc);        } while (0);        return bRc;    }    int StringCompare(const WCHAR* pcSrc, const WCHAR* pcDst)    {        int iRc = -1;        std::wstring strTmp = L"";        _ASSERT(NULL != pcSrc);        _ASSERT(NULL != pcDst);        do         {            strTmp = pcSrc;            iRc = strTmp.compare(pcDst);        } while (0);        return iRc;    }}





0 0
原创粉丝点击