注册表编程扫盲(一)

原创 2004年10月05日 23:58:00
前言    
    今天看了一本注册表方面的书,觉得还不错。特别还写了一章注册表编程。呵呵,我现在就我的理解把它贴上来给大家分享一下:)
    什么是注册表我不用说了吧,反正大家都知道了。不知道?其实注册表就是...就是...就是那么回事了,具体我也说不清楚。有一点是可以肯定的,通过修改注册表可以产生很牛的效果,比如说自动运行啊,隐藏驱动器之类的,反正很多用拉,数不清的。又比如说现在有n多软件功能丰富,其实都是在把注册表改来改去。呵呵,说了这么多废话,不好意思,恩,现在开始吧。
    操作注册表主要还是要靠API了,我数一下,1,2,3,...很多,就写一些比较常用的吧。不知道为什么,有这么多的注册表API,MS却没有把它们封装成一个类,很不爽。好了,先介绍一个操作注册表的一个重要变量类型:HKEY,一看这个类型以H开头,就知道它是一个句柄。什么是句柄我也不太懂,但是好象凡是win32编程都要用到句柄,按定义的话句柄是一个void *,可是又和平时说的指针不太一样。不管怎么说,HKEY就是一个Handle to a registry key,MSDN上是这样写的。翻译过来应该是一个注册表键的句柄,不知道对不对,唉,都怪我E文没学好,让大家笑了。在操作注册表的时候都要用到一个这样的句柄。好了,说了这么多先介绍几个API吧。

一。RegCreateKeyEx
   恩,来看看RegCreateKeyEx吧,一看这个函数的字面意思就知道是创建一个键。如果这个键已经存在的话,就相当是把它打开了。对了,还有个概念没说,什么是键。其实我一句话也说不清就有点象一个文件夹那样的,还不懂的话...不说了。这个函数的声明是这样的:
LONG RegCreateKeyEx(
  HKEY hKey,                
  LPCTSTR lpSubKey,         
  DWORD Reserved,           
  LPTSTR lpClass,           
  DWORD dwOptions,          
  REGSAM samDesired,        
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  PHKEY phkResult,        
  LPDWORD lpdwDisposition   
);
我来数一数,1,2,3...我靠,一共九个参数,累死我了。这么多参数怎么用呢?看一下。
hKey:这是一个已经打开的键的句柄,看来是要在一个已经打开的键建立一个子键了。就好象在一个已经存在的目录下建立一个字目录一样。对了,如果你开始没有一个已经打开的键的句柄,怎么办呢?有办法的,hKey还可以是如下的值:
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_PERFORMANCE_DATA(WinNT&&Win2K)
HKEY_DYN_DATA(Win98&&Win95&&WinMe)
其实一般情况下hKey的值都是这几种。具体是什么意思嘛,打开注册表编辑器就看见了:)打个比方就象你的电脑有A,C,D..几个盘一样,注册表也有几个这样的东西就是了。

lpSubKey:一个字符串,不用说是什么意思了吧?就是说你要把你的注册表键放在哪个位置了。有两点注意了,首先lpSubKey不能为NULL,还有就是(/),要写成(//)。

Reserved:没什么用,必须是0。

lpClass:又是一个字符串,据说是指定你要建立的键的类型,我也不知道怎么用就设它为NULL算了。

dwOptions:对你建立的键的一些选项。可以是这些值:REG_OPTION_NON_VOLATILE,
REG_OPTION_VOLATILE,
REG_OPTION_BACKUP_RESTORE
第一个是默认的了。一般用第一个就可以了。

samDesired :好象是你对这个新建的键的访问权限了,笑话,我自己建的我我当然要设置为KEY_ALL_ACCESS,也就是想怎么样就怎么样的那种。

lpSecurityAttributes:很麻烦,懒得说了,反正也不是很重要,还是把它设为NULL。

phkResult:这可是个很重要的参数了,你建立一个键后,这个键的句柄就放在这里,以后操作就全靠它了。注意了,它是一个指向HKEY的指针。

lpdwDisposition:又是一个指针,调用完此函数后,可以通过它来检测是打开了一个已经存在的键(REG_OPENED_EXISTING_KEY),还是建立了一个键(REG_CREATED_NEW_KEY)。

还有一个问题,就是返回值的问题,如果返回ERROR_SUCCESS,也就是0了,恭喜恭喜,成功了。最后举个例吧:
#include<windows.h>
void main()
{
 DWORD dwRes;
 HKEY hk;
 RegCreateKeyEx(HKEY_LOCAL_MACHINE,
               "SOFTWARE//Carrier Studio//Hello",  
0,                                  
NULL,                              
REG_OPTION_NON_VOLATILE,           
KEY_ALL_ACCESS,                    
NULL,                              
&hk,
                &dwRes
);
 if (dwRes == REG_CREATED_NEW_KEY)
 {
   printf("new key!!/n");
 }
}

windows注册表编程

Windows注册表 1 注册表的作用          注册表在windows中非常重要,它是一个庞大的数据库,里面保存了大量的系统信息,例如保存软件硬件的配置信息,计算机系统的设置,性能记录。  ...
  • zhuhuangtianzi
  • zhuhuangtianzi
  • 2014年08月13日 14:54
  • 1344

注册表编程快速入门

最近涉及到了一些注册表的编程,就把入门的一些东西整理一下,各位注册表新手一起来讨论讨论。欢迎留言! 文本的完整代码在http://download.csdn.net/detail/arvon2012...
  • arvon2012
  • arvon2012
  • 2012年08月07日 16:45
  • 1485

注册表编程

转载请注明出自:blog.csdn.net/mingojiang 目录 一、注册表基础 1.1注册表历史背景 1.2注册表作用 1.3注册表结构 1.4各根键主要存储的信息 1.5手动操作注册表 二、...
  • MingoJiang
  • MingoJiang
  • 2012年07月19日 18:14
  • 6319

注册表编程,程序记忆功能

BCG注册表清除: 第一次在CXXXApp::ExitInstance() 加入CleanState(), 运行一次 接着注释掉,再在OnInitInstance加入m_bSaveState=F...
  • huangtaibin
  • huangtaibin
  • 2015年05月23日 19:37
  • 1095

注册表编程

  • 2012年07月19日 18:14
  • 31KB
  • 下载

Windows操作注册表API简单例子

 //Windows操作注册表API简单例子 //操作注册表主要包括下面几个系统API //1、RegOpenKeyEx    打开注册表项 //2、RegCreateKeyEx  创建注...
  • dgyanyong
  • dgyanyong
  • 2014年10月18日 15:12
  • 2089

注册表编程入门

  • 2012年08月07日 16:52
  • 3KB
  • 下载

注册表编程扫盲(一)

前言        今天看了一本注册表方面的书,觉得还不错。特别还写了一章注册表编程。呵呵,我现在就我的理解把它贴上来给大家分享一下:)    什么是注册表我不用说了吧,反正大家都知道了。不知道?其实...
  • s98
  • s98
  • 2004年10月05日 23:58
  • 2337

注册表编程

DWORD  InitializeKey( void ) {  HKEY     hOpenKey;  DWORD    dwDisposition;  LONG     lResult = ...
  • xuyongbeijing2008
  • xuyongbeijing2008
  • 2012年11月13日 16:05
  • 270

网口扫盲一、二、三

网口扫盲一网口扫盲二网口扫盲三
  • iot_hept
  • iot_hept
  • 2015年11月04日 19:23
  • 479
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:注册表编程扫盲(一)
举报原因:
原因补充:

(最多只允许输入30个字)