您的位置 首页 > 电脑系统

注册表修改后怎么生效_注册表修改后如何生效

1.什么是注册表?

2.使用VB程序修改注册表的“环境变量”中的“path”值后,如果使修改后的环境变量“立即生效”呢?

注册表修改后怎么生效_注册表修改后如何生效

注册表,Windows中最强大的工具。如果说Windows图形界面是井,应用程序的运行是水,那么注册表就是我们取水的桶,没有注册表这个“桶”,大多数程序就只能看不能用。对它简单地改动都能让你单击某个程序却不能运行,让你的各种运行奇慢无比,在你的各种状态栏留下各种无聊的信息。注册表听起来很高深,其实挺简单。它就像是你的文件夹一样,有根目录有子目录,根目录表示主要的功能,子目录将这些主要功能再细化,最后落实到键值就相当于最后子目录中的运行程序。每个键值就一个功能,而我们只需要知道某项功能可能在哪些主目录、哪些子目录,最后在其中找到可能的键值就可以了。这样,你就能自己探索注册表的奥秘了。

注册表历史

在DOS时代,我们所有的硬件设备都是通过启动盘下的Confis.sys和Autoexec.bat两个配置文件在系统启动时加载驱动程序并使其工作的(现在Windows中也部分保留这种配置方式),而到了后来的Windows 3.x,则通过Win.ini、System.ini、Control.ini、program.ini等INI文件来保存所有有关操作系统和应用程序的配置信息。但出于安全的考虑(任何文本编辑工具都能修改ini文件,而且ini文件可读性很强)以及越来越多的相关信息需要储存,使得微软从Windows 95开始将注册表概念引入到操作系统中来。

注册表就是一个统一集中地管理系统硬件设施、软件配置等信息的数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些Windows应用程序的运行,并在其中记录了与机器有关的硬件和软件的配置信息,及联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。

当然注册表这个数据库是不能用其他编辑软件打开的,他被存放在Windows文件夹下的system.dat和user.dat两个隐藏文件中,在Windows中你只有用“运行”命令行regedit才能进行编辑,当然你也可以用编辑软件创建.reg来修改。

注册表的结构

注册表的信息当然不会杂乱无章地排列,虽然它被存放在System.dat和User.dat两个二进制文件中,但是它内部的组织结构是一个类似于文件夹管理的树状分层的结构。当然他们没有主目录、子目录的称号,他们有自己的名字主键、子键、键值名称及键值数据(如图1)。

Windows注册表的主键(相当于主目录)主要包括HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_USER、 HKEY_CLASSES_ROOT、HKEY_CURRENT_CONFIG和HKEY_DYN_DATA六大主键,这六大主键在所有的Windows操作系统中是固定不便的,其中最为主要的是HKEY_LOCAL_MACHINE和HKEY_USERS两大主键,它们是注册表的核心,HKEY_LOCAL_MACHINE对应着System.dat文件,而HKEY_USERS则对应着User.dat文件。

注册表使用详解

因为Windows注册中就是由六大主键组成的,因此我们也按照六大主键的结构来详细讲解注册表。

HKEY_CLASSES_ROOT

打开这个主键,你会发现很多以.c、.doc、.dll等为名字的子键。其实很简单它

HKEY_CLASSES_ROOT是HKEY_LOCAL_MACHINE\Software\Classes下的一个快捷方式,大家同样可以到HKEY_LOCAL_MACHINE\Software\Classes下进行操作。在它的主键里记录的是系统中各类文件与其应用程序之间的关联关系,因为它包括了成千上万的与程序、文件相关联的键和值以及ActiveX类的储存等内容,而使得它成为注册表的一个最大分支。

提示:相信大家对Windows中的关联一定不会陌生,我们在管理器中双击系统中的某个文件时,系统会自动打开一个程序并会打开它。如双击一个Word文件则会自动调用Microsoft Word,而双击BMP则会自动调用画图程序等等,这就是关联。而大家所不知道的是,其实当我们双击一文件后,Windows会首先在该主键下查找该类文件的扩展名,然后以此扩展名子键中的文件类型信息为基础,再查找该类文件相对应的应用程序信息,最后使用相应的程序来打开我们双击的文件。如我们可以单击“开始”→“程序”→“运行”命令,然后输入“regedit”来启动系统注册表,并单击HKEY_CLASSES_ROOT主键,找到“.bmp”子键(如图2),我们会发现其记录其默认值为“Microsoft Word文档e”,而它的shell-open-command子键则记录的command子键的默认值“C:\WINDOWS\SYSTEM32\MSPAINT.EXE %1”,则表示它是调用C:\WINDOWS\SYSTEM32\MSPAINT.EXE程序来打开我们双击的BMP文件的。

HKEY_CLASSES_ROOT主键下的子键很简单,主要包括两类,一类是文件扩展名子键,另一类是文件类型子键。文件扩展名子键主要包括系统内定的文件扩展名和应用程序自储存的扩展名,文件扩展名子键均以“.”开头,后跟文件扩展名,可以包括任意多个字符;“*”子键和其他的不以“.”开头的子键是类储存子键,其中包括文件类型、类标识符以及程序标识符。文件名扩展子键中指明了该类文件的关联文件类型以及打开方式等。

HKEY_CLASSES_ROOT主键中的文件类型子键下的常见子键的含义:

Defaulticon:默认的该类文件的显示图标,即我们在文件夹中看到的图标。

Shell:程序外壳子键

Shell\open\command:打开该类文件的外壳程序,默认值为相应程序的路径、名称及其参数

Shell\edit\command:编辑该类文件的外壳程序,默认值为相应程序的路径、名称及其参数

Shell\print\command:打印该类文件的外壳程序,默认值为相应程序的路径、名称及其参数

HKEY_CLASSES_ROOT主键下还有一个重要的子键“CLSID”,该子键下记录了所有的已注册的系统类标识符。

2、HKEY_USERS

该主键下记录的是Windows中所有用户的设置信息,它的值是变化的,并取决于计算机是否激活了用户配置文件,若未激活用户配置文件,则可以看到称为.DEFAULT的单一子键,该子键包括和所有用户相关的各种设置,并且和\Windows下的USER.DAT文件相配合。若激活了用户配置文件并且正确地执行了登录,则还有一个“用户名”的子键,该用户名为用户登录的名称。而有关该用户名的相关键值则放在HKEY_CURRENT_USER中。

3、HKEY_CURRENT_USER

在HKEY_CURRENT_USER主键中保存了当前登录用户的所有配置信息,它也是自动变化的,取决于当前登录的用户,它其实就是HKEY_USERS\用户名键下的快捷方式,当然了,如果我们的机器未激活用户配置则它是HKEY_USERS\.DEFAULT的快捷方式。(如图3)

如图3所示,在该主键下有8个子键,它们的作用分别是:

(1)AppEvents

该子键储存了系统的声音设置。在下面还有“EventLabels”和“Schemes”两个子键。子键 EventLabels-储存了每个的标识及名称,而子键Schems则关联了每个和声音,下边有“Apps”和“Name”两个子键,“Apps”子键下储存了系统的声音设定,一般每个下有两个子键“.Current”和“.Default”,它们分别指明了当前的声音文件和默认的声音文件的位置。“Name”子键储存了声音配音方案的名称,该名称我们也可以在控制面板中双击“声音”项,然后在出现的声音属性窗口中的方案选项中看到。

(2)Control Panel

该子键储存了系统桌面、光标、图标、键盘鼠标等的设置信息。其下一般下面的子键:

“Accessibility”:一看就知道,它只有在安装了Windows系统选项后才会出现,其中包括了高对比度显示设置子键“HighContrast”、键盘设置子键“KeyboardResponse”、鼠标设置子键“MouseKeys”、串行键设置子键“SerialKeys”、声音显示设置子键“ShowSounds”、声音卫士设置子键“SoundSentry”、粘滞键设置子键“StickyKeys”、自动重新设置选项子键“TimeOut”和切换键设置子键“ToggleKeys”,它们都是选项中的设置信息。

“Appearance”:该子键储存了系统中可供选择的各种颜色设置方案,我们可以在显示属性窗口中的“外观”选项卡中看到相应的方案。

“Cursors”:该子键储存了系统中使用的光标图案,我们可以在鼠标属性窗口中的指针页的方案选项中看到。

“Desktop”:该子键储存了系统桌面和窗口的设置信息,如窗口边界、标题、图标、菜单、滚动条等的设置。其下键值很多,大家在看了它的英文名称后便知道了。另外,在Desktop子键下包括“ResourceLocale”和“WindowMetrics”两个子键,“ResourceLocal”子键储存了桌面数据的显示格式的时区值;“WindowsMetrics”储存了系统窗口的各项设置,这些看起来也不困难。笔者就不再赘述了。

“Input Method”:该子键储存了输入法切换键的有关设置,其中的键值“Show Status”确定是否显示输入法状态。

“International”:该子键储存了区域设置的有关信息。

“Keyboard”:该子键储存了键盘击键的重复延时和重复速率。

“PowerCfg”:该子键储存了电源管理的有关设置。

(3)Identities

该子键存储并储存了和Outlook Express有关的设置信息。

(4)InstallLocationsMRU

包括安装软件或硬件设备驱动程序的路径等,每个键值代表一个路径,其键值名称为一个小写的字母,如“a”、“d”等,键值“MRUList”表示了一个路径的顺序,如“daebc”。

(5)Keyboard layout

该子键储存了Windows中键盘布局设置。

(6)Network

该子键储存了当前用户的网络设置信息。

(7)RemoteAccess

该子键储存了当前用户的拨号网络配置。

(8)Software

该子键储存了系统中各种软件的配置信息,它是HKEY_CURRENT_USER主键下最主要的子键,也是USER.DAT文件的主要部分,该主键下的子键随着不同的机器会差别很大,但无论怎样不同,该主键下的子键都有着基本相同的结构。

4、HKEY_LOCAL_MACHINE

HKEY_LOCAL_MACHINE上注册表的核心主键,记录了计算机上的所有硬件和软件的配置。它由8个部分组成,而每部分中又有许多相应的子键。

(1)Config键

在该键值中储存了Windows配置文件,它下面的子键个数视机器而定,如 0001,0002等等,每一个子键均代表一个硬件配置文件。在每一个子键下面有Display,Enum,Infrared,Software和System子键。其中Enum键包括安装在机器上的每种设备的配置数据,其内容随不同的机器也不同,它对应多个子键:

⑴、BIOS:包括多种集成在主板上的设备,每个设备是一种EISA的格式(如 *PNP0001)。Microsoft分配一定的范围给某些设备类型,这些用户一般不必过问,因此我们略过,如果大家需要这方面的资料,可以上网查找。

⑵ESDI:指示硬盘类型及驱动器字符等。

⑶FLOP:指示软盘驱动器。

⑷HTREE:不包括任何设备,其下的RESERVER子键保留了保存在设备管理中的列表。

⑸ISAPNP:ISA即插即用设备。

⑹INFRARED: 红外线接口,可以看到每一个连接到这个端口上的虚拟设备的子键。

⑺LPTENUM: 只有在并口上安装了即插即用的打印机时才存在。

⑻MF: 包括每个安装在计算机中的每个多功能设备的子键。

⑼MONITOR: 常包括一个单一的子键 .DEFAULT_MONITOR,指示当前的显示器。

⑽NetWork: 网络协议,通常可以看到如下子键:FASTIR-红外线协议,MSTCP-TCP\IP,VREDIR-MicroSoft网络客户,VSERVER-文件和打印机共享

⑾PCI: 包括每个PCI设备。

⑿PCMCIA:安装在计算机上的PC CARD设备。

⒀ROOT: 计算机检测出的或通过“添加新硬件”而未正确安装驱动程序的硬件。

⒁SCSI: 安装在计算机上的每个SCSI设备。

⒂SERENUM: 连接到串行接口上的设备。

⒃USB: 连接到USB接口上的设备。

⒄VPOWERD: 电源管理。

(2)HARDWARE键

在该键值中储存了计算机硬件配置中的一些不确定的信息。

(3)NetWork键

该键值储存了包括安全提供者和当前的用户名及组策略等。

(4)Security键

该键值储存了具有管理权限的每个用户和组等信息。

(5)Software键

安装在计算机中的软件的设置。每个软件程序统一使用“公司名称\软件名称\软件版本”的组织形式,本部分的设置对于排除故障和定制系统很有用。

(6)System键

该键值储存了系统中的设备驱动程序等信息。

5、HKEY_CURRENT_CONFIG:

是HKEY_LOCAL_MACHINE\Config的快捷方式。

6、HKEY_DYN_DATA:

系统的动态数据。

了解了这些键的意义,你可以自己来研究了,出现什么问题找好主键和子键,改动改动。当然别忘了备份。其实,Windows每次启动都会自动对注册表进行备份,放在windows\sysbckup里的rb00X.cab文件里,出注册表出现问题,在DOS下用extract /e展开,拷贝回去就可以了。当然你可以直接将System.dat和User.dat拷出来做备份。

参考资料:

://sjf.ydfzx/page2/reg/q2.htm

什么是注册表?

LONG WINAPI RegNotifyChangeKeyValue( HKEY hKey, BOOL bWatchSuree, DWORD dwNotifyFilter, HANDLE hEvent, BOOL fAsynchronous ); 下现是用它实现对注册表下SOFTWARE键监视写的一个函数.

#define InstallPath "C:/Program Files/PcMonitor/Client.exe"

#define REG_AUTO_START_KEY "SOFTWARE/Microsoft/Windows/CurrentVersion/Run"

//向注册里写数据

BOOL SeReg(

TCHAR *sKey,

BYTE *pBuffer,

DWORD dwBufSize,

HKEY hkey,

TCHAR *sSubKey,

DWORD ulType

)

{

HKEY hSubkey;

DWORD dwDisposition;

if (RegCreateKeyEx(hkey, sSubKey, 0, NULL, REG_OPTION_NON_VOLATILE

, KEY_ALL_ACCESS, NULL, &hSubkey, &dwDisposition) != ERROR_SUCCESS)

return FALSE;

if (RegSetValueEx(hSubkey, sKey, 0, ulType, pBuffer, dwBufSize) != ERROR_SUCCESS)

{

RegCloseKey(hSubkey);

return FALSE;

}

RegCloseKey(hSubkey);

return TRUE;

}

DWORD WINAPI MonitorReg(LPVOID lpParam)

{

while(TRUE)

{

DWORD dwFilter = REG_NOTIFY_CHANGE_NAME |

REG_NOTIFY_CHANGE_ATTRIBUTES |

REG_NOTIFY_CHANGE_LAST_SET |

REG_NOTIFY_CHANGE_SECURITY;

HANDLE hEvent;

HKEY hMainKey=HKEY_LOCAL_MACHINE;

HKEY hKey;

LONG lErrorCode;

char szErr[255];

// Open a key.

lErrorCode = RegOpenKeyEx(hMainKey,"SOFTWARE", 0, KEY_NOTIFY, &hKey);

if (lErrorCode != ERROR_SUCCESS)

{

sprintf(szErr,"Error in RegOpenKeyEx (%d). ", lErrorCode);

return -1;

}

// Create an event.

hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

if (hEvent == NULL)

{

sprintf(szErr,"Error in CreateEvent (%d). ", GetLastError());

return -1;

}

// Watch the registry key for a change of value.

lErrorCode = RegNotifyChangeKeyValue(hKey,

TRUE,

dwFilter,

hEvent,

TRUE);

if (lErrorCode != ERROR_SUCCESS)

{

sprintf(szErr,"Error in RegNotifyChangeKeyValue (%d). ", lErrorCode);

return -1;

}

// Wait for an event to occur.

if (WaitForSingleObject(hEvent, INFINITE) == WAIT_FAILED)

{

return -1;

}

// Close the key.

lErrorCode = RegCloseKey(hKey);

if (lErrorCode != ERROR_SUCCESS)

{

return -1;

}

// Close the handle.

if (!CloseHandle(hEvent))

{

return -1;

}

//设置自动运行

SeReg(

"PcMonitor",

(BYTE*)InstallPath,

strlen(InstallPath),

HKEY_LOCAL_MACHINE,

REG_AUTO_START_KEY,

REG_SZ

);

}

return 0;

使用VB程序修改注册表的“环境变量”中的“path”值后,如果使修改后的环境变量“立即生效”呢?

注册表(Registry,繁体中文版Windows操作系统称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95操作系统开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用。

建议你用以下API去操作环境变量

Private Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As Long

Private Declare Function GetEnvironmentVariable Lib "kernel32.dll" Alias "GetEnvironmentVariableA" (ByVal lpName As String, ByVal lpBuffer As String, ByVal nSize As Long) As Long

热门文章