zoukankan      html  css  js  c++  java
  • VC++ 读写注冊表,注冊文件图标关联

    #include <string>
    #include <iostream>
    #include <Windows.h>
    #include <shlobj.h>
    using namespace std;
    
    //-------------------------------------------------------------------------
    // 注冊文件图标关联
    //-------------------------------------------------------------------------
    // @strExt				[in]: 须要检測的文件后缀(.txt)
    // @strAppKey			[in]: 扩展名在注冊表中的键值(txtfile)
    // @strAppName			[in]: 须要关联的引用程序(c:appapp.exe)
    // @strDefaultIcon		[in]: 关联的图标
    // @strDescribe			[in]: 描写叙述
    //-------------------------------------------------------------------------
    void RegisterFileRelation(char *strExt,char *strAppKey,char *strAppName, char *strDefaultIcon, char *strDescribe)
    {
    	char strTemp[_MAX_PATH];
    	HKEY hKey;
    
    	RegCreateKey(HKEY_CLASSES_ROOT,strExt,&hKey);
    	RegSetValue(hKey,"",REG_SZ,strAppKey,strlen(strAppKey)+1);
    	RegCloseKey(hKey);
    
    	RegCreateKey(HKEY_CLASSES_ROOT,strAppKey,&hKey);
    	RegSetValue(hKey,"",REG_SZ,strDescribe,strlen(strDescribe)+1);
    	RegCloseKey(hKey);
    
    	sprintf(strTemp,"%s\DefaultIcon",strAppKey);
    	RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey);
    	RegSetValue(hKey,"",REG_SZ,strDefaultIcon,strlen(strDefaultIcon)+1);
    	RegCloseKey(hKey);
    
    	sprintf(strTemp,"%s\Shell",strAppKey);
    	RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey);
    	RegSetValue(hKey,"",REG_SZ,"Open",strlen("Open")+1);
    	RegCloseKey(hKey);
    
    	sprintf(strTemp,"%s\Shell\Open\Command",strAppKey);
    	RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey);
    	sprintf(strTemp,"%s "%%1"",strAppName);
    	RegSetValue(hKey,"",REG_SZ,strTemp,strlen(strTemp)+1);
    	RegCloseKey(hKey);
    	SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,NULL,NULL);
    }
    
    //-------------------------------------------------------------------------
    // 写注冊表的的方法
    //-------------------------------------------------------------------------
    // @root			[in]: 注冊表根
    // @subDir			[in]: 子结构
    // @regKey			[in]: 注冊表项键
    // @regValue		[in]: 要写入的注冊表值
    //-------------------------------------------------------------------------
    // @return			    : 0表示成功,其它表示错误码
    //-------------------------------------------------------------------------
    int WriteRegKey(HKEY root,char * subDir,char * regKey,char * regValue){
    	char strTemp[_MAX_PATH];
    	HKEY hKey;
    	sprintf(strTemp,subDir);
    
    	char* sclass = "";
    	DWORD nbf = 0;
    	long ret = RegCreateKeyEx(root,strTemp,0,"",REG_OPTION_NON_VOLATILE,KEY_READ|KEY_WRITE,NULL,&hKey,&nbf);
    	if(ret != ERROR_SUCCESS) {
    		return -1;
    	}
    	
    	ret = RegSetValueEx(hKey,regKey,0,REG_SZ,LPBYTE(regValue),strlen(regValue)+1);
    	if(ret != ERROR_SUCCESS) {
    		return -1;
    	}
    
    	return 0;
    }
    
    //-------------------------------------------------------------------------
    // 写注冊表的的方法
    //-------------------------------------------------------------------------
    // @root			[in] : 注冊表根
    // @subDir			[in] : 子结构
    // @regKey			[in] : 注冊表项键
    // @regValue		[out]: 读的的注冊表值
    //-------------------------------------------------------------------------
    // @return				 : 0表示成功,其它表示错误码
    //-------------------------------------------------------------------------
    int ReadRegKey(HKEY root,char * subDir,char * regKey,char* & regValue){
    	char strTemp[_MAX_PATH];
    	HKEY hKey;
    	sprintf(strTemp,subDir);
    
    	long ret = (::RegOpenKeyExA(root,strTemp,0,KEY_READ,&hKey));
    	if (ret !=ERROR_SUCCESS)
    	{
    		return -1;
    	}
    
    	DWORD valueType = REG_SZ;
    	DWORD cbData = 255;
    
    	ret = ::RegQueryValueExA(hKey,regKey,NULL,&valueType,(LPBYTE)regValue,&cbData);
    	if (ret != ERROR_SUCCESS)
    	{
    		return -1;
    	}
    	RegCloseKey(hKey);
    
    	return 0;
    }
    
    int main(){
    	WriteRegKey(HKEY_CURRENT_USER,"Software\Demo 1.0\AppKey","path","C:\hello\world");
    
    	char* ret;
    	ret = new char[255];
    	ret[0] = '';
    
    	ReadRegKey(HKEY_CURRENT_USER,"Software\Demo 1.0\AppKey","path",ret);
    	cout << ret << endl;
    	delete[] ret;
    
    	return 0;
    }

  • 相关阅读:
    主流数据库连接池性能比较 hikari druid c3p0 dbcp jdbc
    Dubbo 分布式事务一致性实现
    微服务实现事务一致性实例
    微服务间保持事务一致性
    海量积分数据实时排名处理方式介绍二
    Java两种方法实现循环报数
    MySQL 千万级 数据库或大表优化
    Linux 中 Nginx 重启关闭
    Linux 中 Oracle dmp 文件导入导出
    Linux 中 Oracle 数据库启动和关闭
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6767187.html
Copyright © 2011-2022 走看看