您的位置:广东在线游戏网 > 游戏策略 > C++修改注册表键值的问题-c++如何修改注册表?

C++修改注册表键值的问题-c++如何修改注册表?

作者:广东在线游戏网日期:

返回目录:游戏策略


/*
非IE内核的浏览器的主页设置可能不会写入注册表,而是写入自己的配置文件,这个针对不同的浏览器可能不同。下面是针对IE的,因为它把主页写e68a84e8a2ade799bee5baa6331入注册表,我们就可以通过修改注册表来实现主页修改。注意,使用的时候记得关闭安全软件,因为它们可能会锁定主页,使运行失败。
*/
#include <windows.h>
#include <string>

class IE
{
public:
bool SetHomePage(std::string strUrl)
{
m_strHomePage = strUrl;
HKEY hKey;

bool bFlag = true;

do 
{
//HKEY_LOCAL_MACHINE修改
if (ERROR_SUCCESS != RegOpenKey(HKEY_LOCAL_MACHINE
, "SOFTWARE\\Microsoft\\Internet Explorer\\MAIN"
, &hKey
))
{
bFlag = false;
break;
}

if (ERROR_SUCCESS !=RegSetValueEx(hKey
,"Start Page"
,0
,REG_SZ
,(LPBYTE)m_strHomePage.c_str()
,m_strHomePage.size()
))
{
bFlag = false;
break;
}

RegCloseKey(hKey);

//HEKY_CURRENT_USER修改
if (ERROR_SUCCESS != RegOpenKey(HKEY_CURRENT_USER
, "SOFTWARE\\Microsoft\\Internet Explorer\\MAIN"
, &hKey
))
{
bFlag = false;
break;
}

if (ERROR_SUCCESS !=RegSetValueEx(hKey
,"Start Page"
,0
,REG_SZ
,(LPBYTE)m_strHomePage.c_str()
,m_strHomePage.size()
))
{
bFlag = false;
break;
}

} while (false);

RegCloseKey(hKey);
return bFlag;
}

private:

std::string m_strHomePage;
};

int main(int argc, _TCHAR* argv[])
{

IE ie;
ie.SetHomePage("http://tencent.com");
return 0;
}


LONG lRet;
HKEY hKey;
lRet= RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\supercode"),0, KEY_SET_VALUE,&hKey);//打开注册键zd
if (lRet!= ERROR_SUCCESS)
return;
TCHAR strVal[7]=_T("123456");
lRet= RegSetValueEx(hKey, _T("code"),0, REG_SZ, (BYTE*)strVal,7)//注册键值
RegCloseKey(hKey);
VC6.0 里凡是有关注册表操作的 必须要包含头文件 <atlbase.h> !
你在前面 添上 #include <atlbase.h> 就可以对注册表进行操作了。。

你自己看吧,VC下的:(更多资料请参考: http://hi.baidu.com/3582077/home) 第五十三个RegCreateKeyEx在注册表里创建一个子键,或获取7a64e58685e5aeb9365一个子键的句柄 在这里我们先来了解一下注册表的基本概念,打开运行对话框,输入regedit,然后回车,便打开了注册表编辑器,首先映入眼前的,便是五个根键 HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USER HKEY_CURRENT_CONFIG 在根键下面便是主键了,如HKEY_CURRENT_CONFIG根键下有两个主键,分别是Software和System(可能会不一样),那么主键下面是什么呢,对了,就是跟 RegCreateKeyEx函数相关的子键,子键下面就是具体的键值项了,但也可以又是子键。键值有五种可选类型,分别是:字符串值(REG_SZ),二进制值(REG_BINARY),DWORD值(REG_DWORD),多字符串值(REG_MULTI_SZ)和可扩充字符值(REG_EXPAND_SZ)。键值项还有其它信息,它的名称,数据。 了解了上面这些东西,接着就来了解下RegCreateKeyEx函数的各个参数吧,先来看一下函数定义: LONG RegCreateKeyEx ( HKEY hKey,//根键句柄,指明要在哪个根键下创建子键,填根键名既可 LPCSTR lpSubKey,//子键名,包含完整路径名 DWORD Reserved,.//一般取0 LPSTR lpClass,//一般取NULL DWORD dwOptions,//创建子键时的选项,可选值REG_OPTION_NON_VOLATILE,REG_OPTION_VOLATILE,这里取0既可 REGSAM samDesired,//打开方式,填KEY_ALL_ACCESS,在任何情况都行。 LPSECURITY_ATTRIBUTES lpSecurityAttributes,//指定继承性,还是取0 PHKEY phkResult,//子键对应句柄,待创建或打开的子键句柄将存储在该句柄里 LPDWORD lpdwDisposition//打开还是创建子键,对应REG_CREATED_NEW_KEY和REG_OPENED_EXISTING_KEY ); 在这里举一个例子,以便我们能更好的理解该函数。 在HKEY_CURRENT_CONFIG根键下的Software主键里创建一个名为MySelf的子键。 #include<windows.h> int main() { HKEY hroot;//子键句柄 DWORD dwDisposition;//对应着最后一个参数 RegCreateKeyEx(HKEY_CURRENT_CONFIG,"Software\\MySelf",0,NULL,0,KEY_ALL_ACCESS,NULL,&hroot,&dwDisposition); return 0; } 第五十四个RegSetValueEx根据子键句柄在其下创建或修改一个键值 函数定义:LONG RegSetValueEx( HKEY hKey, // 子键句柄 LPCTSTR lpValueName, // 键值名称,如果提供的子键下没有该名称,则创建 DWORD Reserved, // 保留,填0 DWORD dwType, // 键值类型, CONST BYTE *lpData, // 键值的数据 DWORD cbData // 键值的数据的大小 ); 接着我们以增加开机自启动为例,来看一下函数是如何创建一个键值的,我们知道,像程序添加开机自启动一般都在 HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run下添加一个键值,键值类型为二进制(REG_SZ),而键值的数据就为要自启动程序的路径。 假设e盘下有一个AutoRun.exe的应用程序,让电脑开机时自动运行它。 #include<windows.h> int main() { HKEY hroot;//子键句柄 DWORD dwDisposition; RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0, NULL,0,KEY_ALL_ACCESS,NULL,&hroot,&dwDisposition); RegSetValueEx(hroot,"AutoRun",0,REG_SZ,(BYTE *)"e:\\AutoRun.exe",sizeof("e:\\AutoRun.exe")); return 0; } 第五十五个RegDeleteValue根据子键句柄删除其下的一个键值 这里直接举一个例子,删除RegSetValueEx函数创建的键值 #include<windows.h> int main() { HKEY hroot;//子键句柄 DWORD dwDisposition; RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0, NULL,0,KEY_ALL_ACCESS,NULL,&hroot,&dwDisposition); RegDeleteValue(hroot,"AutoRun");//删除子键下名为AutoRun的键值 return 0; } 第五十六个RegQueryValueEx根据子键句柄获取一个键值数据,类型。 函数定义:LONG RegQueryValueEx ( HKEY hKey,//根键句柄 LPCWSTR lpValueName,//键值名称 LPDWORD lpReserved,//预留,填0 LPDWORD lpType,//接收键值类型 LPBYTE lpData,//接收键值数据 LPDWORD lpcbData//接收数据的大小 ); 例子,获取RegSetValueEx函数创建的键值的类型,数据 #include<windows.h> #include<stdio.h> int main() { char Data[52]; DWORD Size,Type; HKEY hroot;//子键句柄 DWORD dwDisposition; RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0, NULL,0,KEY_ALL_ACCESS,NULL,&hroot,&dwDisposition);//获取根键句柄 RegQueryValueEx(hroot,"AutoRun",0,&Type,(BYTE *)Data,&Size);//获取AutoRun的信息 printf("键值名称:AutoRun "); switch(Type) { case REG_SZ:printf("键值类型:REG_SZ");break; case REG_BINARY:printf("键值类型:REG_BINARY");break; case REG_DWORD:printf("键值类型:REG_DWORD");break; case REG_MULTI_SZ:printf("键值类型:REG_MULTI_SZ");break; case REG_EXPAND_SZ:printf("键值类型:REG_EXPAND");break; } printf(" 键值数据:%s %d\n",Data,Size); return 0; } 第五十七个RegEnumValue根据子键句柄返回对应索引的键值信息(名称,数据,类型,子键下第一个键值索引为0,以此类推,函数成功执行返回ERROR_SUCCESS) 函数定义:LONG RegEnumValue ( HKEY hKey,//子键句柄 DWORD dwIndex,//键值索引 LPWSTR lpValueName,//接收键值名称,字符数组 LPDWORD lpcbValueName,//指明数组大小 LPDWORD lpReserved,//预留,0 LPDWORD lpType,//键值类型,填NULL,不获取 LPBYTE lpData,//键值数据,填NULL,不获取 LPDWORD lpcbData//接收数据的大小,如果键值数据那项参数为NULL,则该项也为NULL ); 例子:输出Run下的所有键值名 #include<windows.h> #include<stdio.h> int main() { char Name[52]; int Index=0; DWORD dwSize=52; DWORD Size,Type; HKEY hroot;//子键句柄 DWORD dwDisposition; RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0, NULL,0,KEY_ALL_ACCESS,NULL,&hroot,&dwDisposition);//获取根键句柄 while(RegEnumValue(hroot,Index,Name,&dwSize,NULL,NULL,NULL,NULL)==ERROR_SUCCESS) { printf("%s\n",Name); Index++;//索引从0开始每次自增一,函数如果执行失败,则索引已到头 } return 0; } 其实也还可以扩充一下,可以像msconfig程序那样列出当前计算机的所有开机自启动程序,当然,注册表也不只就前面的那一个子键下可以添加自启动程序,在HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run下也可以添加,所以这些子键都需要去查看,更多添加自启动程序的子键可以到百度里去搜一下,大家如果掌握前面那几个注册表操作函数,可以结合起来试着做一个可以添加,查看,删除开机自启动程序的小程序。

相关阅读

关键词不能为空

标签导航

有什么经典的第一人称射击类游戏,介绍点 第一人称射击游戏的鼻祖到底是谁 所有第一人称射击游戏的祖先是哪部游戏? 第一款FPS(第一人称射击)游戏是? 中世纪2全面战争秘籍怎么用 我想要中世纪2全面战争的所有秘籍,注意,是所有,别太乱. 中世纪2全面战争秘籍加兵种问题 中世纪2全面战争兵秘籍 C++如何通过修改注册表绑定主页呢? 谁知道怎样用c++在注册表里新建或删除注册表项吗? C++修改注册表键值的问题 ppsspp模拟器能玩ps3的游戏吗? ppsspp到底能不能模拟ps3的游戏 ps1游戏可以在ppsspp模拟器玩吗? ppsspp啥时候能模拟PS游戏了 什么英雄比较克制亚巴顿一点,全能也特别恶 用什么装备......... dota什么英雄杀全能骑士好杀 dota中全能骑士这个英雄的确全能,打辅助太浪费了吧,大家觉... 全能骑士克什么英雄 cf寂静村图中,有一个高台是爬梯子上去的,但经常有女鬼从后面... cf寂静村的高墙怎么跳,求详解! cf寂静村,左边那个台阶怎么跳,求教程,谢谢求答案 CF寂静村地图有个最高的地方,怎样上台阶上房啊,我看别人都是... Win10修改注册表提示无法编辑,怎么办 Win10系统注册表无法编辑怎么办 win10注册表里文件无法更改权限怎么办 Win10正式版注册表提示无法编辑该怎么办 还有驱魔拿什么武器好 dnf驱魔师pk怎么加点还有带什么武器好 DNF现在刷图的驱魔师怎么加点 应该带什么武器 详细点 求大神dnf力驱魔师加点 DNF驱魔师用什么武器好 求贫瘠之地狮王休玛具体坐标~~高手指点,谢谢 断牙的坐标是多少? 断牙和休玛 比较 魔兽世界狮王休玛坐标要详细点最好有图 灵魂献祭救赎还是牺牲 哪个厉害 psv上的灵魂献祭ssd刷的好累啊,好玩在哪里了啊 灵魂献祭魔腕和圣腕等级怎么提升的的,为什么我的只能到等级4就... psv灵魂献祭delta三个流派的特点 NBA球员退役球衣的标准是什么? 公牛球衣退役的有哪些人? 凯尔特人历史上一共有几件退役球衣号码? 退役两个号码有什么了不起,3支球队为他退役球衣 寂静岭5警察局车库里的保险箱密码是多少? 寂静岭5一开始那铁门的密码是多少? 寂静岭的第一个房间密码是多少 寂寞岭5的一开始那个门的密码是什么? 200分!求《虚幻竞技场2004》所有称号最好有称号获得表... 关于虚幻竞技场2004CD-key问题 虚幻竞技场2004,启动不了,请问如何解决 虚幻竞技场2004的游戏介绍 中国污染最严重的城市是哪些城市??????