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
- Unicode版本的注册表封装类
- 自己封装的注册表操作类
- 一些实用的注册表封装类
- 读写注册表的封装
- CRegistry注册表封装类
- 封装了一个简单的注册表操作类
- C#对注册表读写类的再封装
- Atitit.操作注册表 树形数据库 注册表的历史 java版本类库总结
- UNICODE版本的clipboard复制
- 从注册表读取程序的版本
- 从注册表读取程序的版本
- 从注册表读取程序的版本
- 封装ANSI,UNICODE,UTF8互相转换类
- Unicode下用CRegKey类来操作注册表
- 生成Unicode版本的Ini文件
- 创建Unicode版本的VC工程
- 创建Unicode版本的VC工程
- SQLite3数据库Native C++封装类(Unicode)CppSQLite3U的初步认识与使用
- qt样式表学习
- 一、了解Matlab的基本操作
- 用WPS演示实现PPT转换为DOC
- 20141115 【 Arduino - LM35 - 4位八段数码管 】 数码管显示温度
- Delphi 数据类型及字节占用
- Unicode版本的注册表封装类
- 写给自己
- MySQL Error集锦
- Setting the limitation of total bytes of model
- iOS webview 交互
- nyoj 15 括号匹配
- Java Thread(线程)案例详解sleep和wait的区别
- 如何在Ubuntu下使用全民wifi?
- 大数据的五大误区及其破解之道