c++ 读取注册表详解

c++ 读取注册表详解
CND8学院C/C++教程发布日期:2011年08月18日
将本文收藏到: | 收藏到本地 | 复制本文地址
1.读注册表
// 读取注册表
CString ReadRegisteTable(CString root,CString path, CString key) {
HKEY hAppKey;
LPCTSTR WINDS_SERVICE_REGISTRY_KEY=path;
LPCTSTR DATA_FILE_SUB_KEY=key;
char szDataFile[80];
if(root=="HKEY_LOCAL_MACHINE")
{
if (ERROR_SUCCESS == RegOpenKeyEx (
HKEY_LOCAL_MACHINE,
WINDS_SERVICE_REGISTRY_KEY,
0,
KEY_READ,
&hAppKey))
{
ULONG cbSize = MAX_PATH*sizeof(TCHAR);
DWORD dwFlag = RegQueryValueEx (
hAppKey,
DATA_FILE_SUB_KEY,
NULL,
NULL,
(LPBYTE)szDataFile,&cbSize);
RegCloseKey (hAppKey);
if (ERROR_SUCCESS == dwFlag)
{
CString strDate=szDataFile; //MessageBox(strDate); if(strDate.GetLength()>0) return strDate;
else return "";
}
return "";
}
}
if(root=="HKEY_CURRENT_USER")
{
if (ERROR_SUCCESS == RegOpenKeyEx (
HKEY_CURRENT_USER,
WINDS_SERVICE_REGISTRY_KEY,
0,
KEY_READ,
&hAppKey))
{
ULONG cbSize = MAX_PATH*sizeof(TCHAR);
DWORD dwFlag = RegQueryValueEx (
hAppKey,
DATA_FILE_SUB_KEY,
NULL,
NULL,
(LPBYTE)szDataFile,&cbSize);
RegCloseKey (hAppKey);
if (ERROR_SUCCESS == dwFlag)
{
CString strDate=szDataFile; //MessageBox(strDate);
if(strDate.GetLength()>0) return strDate;
else return "";
}
return "";
}
}
return "";
}[nextqage]
2.写注册表
// 修改注册表
BOOL ModifyRegisteTable(CString root,CString path, CString key, CString value) {
HKEY hAppKey;
DWORD dwDisposition = MAX_PATH*sizeof(TCHAR);
LPCTSTR WINDS_SERVICE_REGISTRY_KEY=path;
LPCTSTR DATA_FILE_SUB_KEY=key;
char szDataFile[80]; strcpy(szDataFile,value);
if(root=="HKEY_LOCAL_MACHINE")
{
if (ERROR_SUCCESS != RegCreateKeyEx (
HKEY_LOCAL_MACHINE,
WINDS_SERVICE_REGISTRY_KEY,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_WRITE,
NULL,
&hAppKey,
&dwDisposition))
{
return false;
}
else
{
if (ERROR_SUCCESS != RegSetValueEx (hAppKey, DATA_FILE_SUB_KEY,
0,
REG_SZ,
(LPBYTE)szDataFile,
(lstrlen (szDataFile)+1)*sizeof(TCHAR)))
{
return false;
}
RegCloseKey (hAppKey);
}
}
if(root=="HKEY_CURRENT_USER")
{
if (ERROR_SUCCESS != RegCreateKeyEx (
HKEY_CURRENT_USER,
WINDS_SERVICE_REGISTRY_KEY,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_WRITE,
NULL,
&hAppKey,
&dwDisposition))
{
return false;
}
else
{
if (ERROR_SUCCESS != RegSetValueEx (hAppKey, DATA_FILE_SUB_KEY,
0,
REG_SZ,
(LPBYTE)szDataFile,
(lstrlen (szDataFile)+1)*sizeof(TCHAR)))
{
return false;
}
RegCloseKey (hAppKey);
}
}
return true;
}。

合集下载

(2)C语言注册表操作实例

(2)C语言注册表操作实例

(2)C语言注册表操作实例C语言注册表操作实例例子1:#include <stdio.h>#include <windows.h>int main(void){charregname[]="Software\\Microsoft\\Windows\\CurrentVersion\\R un";HKEY hkResult;intret=RegOpenKey(HKEY_LOCAL_MACHINE,regname,&hkResult);ret=RegSetValueEx(hkResult,"hacker",0,REG_EXPAND_SZ,(un signed char *)"%systemroot%\\hacker.exe",25);if(ret==0){printf("success to write run key\n");RegCloseKey(hkResult);}else {printf("failed to open regedit.%d\n",ret);return 0;}char modlepath[256];char syspath[256];GetModuleFileName(0,modlepath,256);//取得程序名字GetSystemDirectory(syspath,256);ret=CopyFile(modlepath,strcat(syspath,"\\hacker.exe"),1);if(ret){printf("%s has been copyed to sys dir %s\n",modlepath,syspath);}else printf("%s is exisis",modlepath);return 0;}例子2:#include <windows.h >#include <stdio.h >void main(){HKEY hKey;char SubKeyName[] = "SOFTWARE\\Microsoft\\I nternet Explorer\\Security ";char ValueName[] = "BlockXBM ";BYTE ValueData[64];DWORD Buffer;//打开if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,SubKeyName,0 ,KEY_ALL_ACCESS,&hKey) != ERROR_SUCCESS) {printf( "Error: Regedit cannot be opened! ");}else{//读原来的键值Buffer = sizeof (ValueData);if (RegQueryValueEx(hKey,ValueName,0,NULL,ValueDat a,&Buffer) != ERROR_SUCCESS){//不存在//新建一个值为0的DWORDDWORD temp = 0;if (RegSetValueEx(hKey,ValueName,0,REG_DWORD,(LPB YTE)&temp,sizeof(DWORD)) != ERROR_SUCCESS) {printf( "Error: Create Value failed ");}RegCloseKey(hKey);}else{//存在//改变值DWORD temp = 0;if (RegSetValueEx(hKey,ValueName,0,REG_DWORD,(LPB YTE)&temp,sizeof(DWORD)) != ERROR_SUCCESS) {printf( "Error: Change Value failed ");RegCloseKey(hKey);}}}}用C语言操作注册表以及上一篇的WinApi操作注册表之外还可以用MFC提供的 CRegKey 类以及 CWinApp提供的SetRegistryKey 函数SetRegistryKey 这个函数功能是设置MFC程序的注册表访问键,并把读写ini 文件的成员函数映射到读写注册表。

C#操作注册表——读、写、删除、判断等基本操作(转)

C#操作注册表——读、写、删除、判断等基本操作(转)

C#操作注册表——读、写、删除、判断等基本操作(转)⼀、引⼊命名空间:using Microsoft.Win32;⼆、创建注册表项:CreateSubKey(name)⽅法添加SubKey时候⾸先要打开⼀个表项,并设置参数为true,才能成功创建⼦项//给要创建的注册表设置⼀个变量,使⽤更⽅便private string RegistFileName = "test";/// <summary>/// 创建⼀个test注册表项,下⾯包含OpenLog,和SaveLog两个⼦项/// </summary>private void CreateRegistFile(){ //SOFTWARE在LocalMachine分⽀下RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE",true);RegistryKey software = key.CreateSubKey(RegistFileName);RegistryKey test = key.OpenSubKey(RegistFileName,true);RegistryKey Savekey = test.CreateSubKey("SaveLog");}三、删除注册表项:DeleteSubKey(name,true)⽅法RegistryKey key = Registry.LocalMachine;RegistryKey software = key.OpenSubKey("SOFTWARE", true);RegistryKey test = software.OpenSubKey(RegistFileName, true);test.DeleteSubKey("SaveLog",true);四、添加键值:SetValue(name,value)⽅法/// <summary>/// 将path写⼊OPenLog⼦项/// </summary>private void writeToRegistFile(string path){ RegistryKey key = Registry.LocalMachine; RegistryKey software = key.OpenSubKey("SOFTWARE", true); RegistryKey test = software.OpenSubKey(RegistFileName, true); RegistryKey OpenPath = test.OpenSubKey("OpenLog",true); //"name"是该键值的name,相当于⼀个别名,可⾃⾏设置 OpenPath.SetValue("name", path);}五、删除键值:DeleteValue(name)⽅法RegistryKey key = Registry.LocalMachine;RegistryKey software = key.OpenSubKey("SOFTWARE", true);RegistryKey test = software.OpenSubKey(RegistFileName, true);RegistryKey OpenPath = test.OpenSubKey("SaveLog",true);//删除SaveLog⼦项下的名为SaveLog的⼦键OpenPath.DeleteValue("name");六、判断注册表项是否存在:/// <summary>/// 判断注册表项是否存在/// </summary>/// <returns>bool</returns>private bool IsRegeditItemExist(){ string[] subkeyNames; RegistryKey key = Registry.LocalMachine; RegistryKey software = key.OpenSubKey("SOFTWARE"); subkeyNames = software.GetSubKeyNames(); //在这⾥我是判断test表项是否存在 foreach (string keyName in subkeyNames) { if (keyName == RegistFileName) { key.Close(); return true; } } key.Close(); return false;}七、判断键值是否存在:/// <summary>/// 判断该路径是否已经存在/// </summary>/// <param name="path">路径</param>/// <returns></returns>private bool IsRegeditKeyExit(string name){string[] saveSubkeyNames;RegistryKey key = Registry.LocalMachine;RegistryKey software = key.OpenSubKey("SOFTWARE", true);RegistryKey test = software.OpenSubKey(RegistFileName, true);RegistryKey Savekey = test.OpenSubKey("SaveLog", true); //获取该⼦项下的所有键值的名称saveSubkeyNamessaveSubkeyNames = Savekey.GetSubKeyNames();foreach(string keyName in openSubkeyNames){if(keyName == name){key.Close();return false;}}key.Close();return true;}注:如果没有该注册表项或键值,则返回的值为空值,若不经处理运⾏程序会抛出异常。

VC读写注册表

VC读写注册表

☆ 设置一个键值RegSetValueEx
函数定义:LONG RegSetValueEx(HKEY hKey,//要设置的键的句柄
LPCTSTR lpValueName,//要访问的键值的名称
LPDWORD lpReserved,//保留值
LPBYTE lpData,//要返回的查询的数据
LPDWORD lpcbData//预置的数据的长度
);
一、说明:
注册表是Windows重要组成部分,注册表记录了大量有关电脑软硬件的信息。注册表中的值通过其名称标识。值名称由与键名相同的字符组成。值本身可以是字符串、二进制数据或者是32位无符号值。在这里我们主要运用以下技巧:
(一)、预定义的注册表键。注册表包含了几个预定义键:
HKEY_LOCAL_MACHINE 包含描述计算机及其配置的条目。其中包括关于处理器、系统主板、内存和已安装的软件和硬件的信息。
HKEY_CLASSES_ROOT 是与文档类型和 OLE\COM 相关的信息的支持键。这个键是 HKEY_LOCAL_MACHINE的从属键。
HKEY_USERS 用作默认用户首选设置,也作为单个用户的首选设置。
HKEY_CLASSES_USER 是用于当前(登录)用户的相关信息。
);
二、实例:
通过AppWizard创建基于对话框的程序 Regedit
设 置两个命令按钮,名为“查询”(ID_QUERY)和“修改”(ID_CHANGE),用来查询和修改注册表中用户姓名和公司名称。 注:信息位置9x系列:\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrntVersion NT系列:\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrntVersion 键值:RegisteredOwnertkg和RegisteredOrganization分别表示用户名和公司名

VC中打开exe文件和读写注册表

VC中打开exe文件和读写注册表

vc中打开exe文件// test.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <windows.h>#include <shellapi.h>int main(int argc, char* argv[]){SHELLEXECUTEINFO shell = { sizeof(shell) };shell.fMask = SEE_MASK_FLAG_DDEWAIT;shell.lpVerb = "open";shell.lpFile = "C:\\windows\\NOTEPAD.EXE";shell.nShow = SW_SHOWNORMAL;BOOL ret = ShellExecuteEx(&shell);//"";printf("Hello World!\n%d",ret);getchar();return 0;}vc中读写注册表Win 95及NT的注册数据库(Registry) 是系统中非常重要的组成部分。

在Win32 API中有一组Reg函数来处理这些问题。

其一般的读写过程如下:1、使用RegOpenKeyEx或RegCreateKeyEx函数打开或创建一个键;2、如果上一步成功,使用RegQueryValueEx读取子键的值,使用RegSetValueEx设置子键值,使用RegEnumKey获得所有子键,使用RegDeleteKey删除一个键;3、完成操作后使用RegCloseKey关闭键。

下面这段程序打开HKEY_CURRENT_USER\Software\Zeal SoftStudio\AskPro FTP\LastTime 键,然后读取WOL子键的值。

VC++注册表操作

VC++注册表操作

当打开注册表操作完成后,如果没有打开 成功,就需要自己创建一个注册表,使用 RegCreateKeyEx函数来创建一个键。 RegCreateKeyEx函数来创建一个键。 例如: RegCreateKeyEx( HKEY_LOCAL_MACHIN E,L"System\ E,L"System\\KERNEL",0,sclass,REG_OPTIO N_NON_VOLATILE, KEY_READ|KEY_WRITE,NULL,&hd,&nbf ); 如果创建正确返回值为ERROR_SUCCESS, 如果创建正确返回值为ERROR_SUCCESS, 否则失败。
当打开一个注册表项后就可以对注册表进 行读操作了,读取需要的注册表信息。 RegQueryValueEx可以实现对注册表信息的 RegQueryValueEx可以实现对注册表信息的 提取。
2.2 注册表的写操作
当打开注册表项后,就可以对注册表进行 写操作了,具体函数实现如下: RegSetValueEx可以实现对注册表项的写操 RegSetValueEx可以实现对注册表项的写操 作。
作业:通过对注册表的读写操作,实现对 程序的简单加密功能。
当打开注册表操作完成后如果没有打开当打开注册表操作完成后如果没有打开成功就需要自己创建一个注册表使用成功就需要自己创建一个注册表使用regcreatekeyexregcreatekeyex函数来创建一个键Fra bibliotek文件和注册表的操作
2. 注册表的读写操作
2.1 注册表的读操作 2.2 注册表的写操作
2.1 注册表的读操作
EVC封装了注册表的各种操作,其中最重要的就是读写操作。 EVC封装了注册表的各种操作,其中最重要的就是读写操作。 在读写注册表之前,首先要像操作文件那样打开注册表: LONG RegOpenKeyEx ( HKEY hkey,//要打开的主键 hkey,//要打开的主键 LPCTSTR lpsubkey //子键的名称 //子键的名称 DWORD uloptions //必须为0 //必须为0 REGSAM samDesired //为0 //为 PHKEY //存放打开键的地址 //存放打开键的地址 ) 例如: HKEY hKey; if( ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"System\ L"System\\KERNEL",0,0,&hKey) ) RegOpenKeyEx的返回值为ERROR_SUCCESS表示打开成功,否则失败。 RegOpenKeyEx的返回值为ERROR_SUCCESS表示打开成功,否则失败。

C#操作注册表的方法详解

C#操作注册表的方法详解

C#操作注册表的⽅法详解本⽂实例讲述了C#操作注册表的⽅法。

分享给⼤家供⼤家参考,具体如下:下⾯我们就来⽤.NET下托管语⾔C#注册表操作,主要内容包括:注册表项的创建,打开与删除、键值的创建(设置值、修改),读取和删除、判断注册表项是否存在、判断键值是否存在。

准备⼯作:1. 要操作注册表,我们必须要引⼊必要的命名空间:复制代码代码如下:using Microsoft.Win32;在这个命名空间⾥⾯包含了许多注册表相关的类,⾜够我们使⽤了~~2. 命名空间⾥⾯提供了⼀个类:RegistryKey 利⽤它我们可以定位到注册表最开头的分⽀:ClassesRoot,CurrentUser,Users,LocalMachine,CurrentConfig如:复制代码代码如下:RegistryKey key = Registry.LocalMachine;3. 在操作的过程中涉及到⼦分⽀,要⽤\\进⾏深⼊,单个\会报错!4. 最后要调⽤RegistryKey对象的Close()关闭对注册表的修改~~~5. 以下我们的例⼦都是在LocalMachine分⽀下,请注意。

⼀、C#注册表项的创建,打开与删除1. 创建创建注册表项主要⽤到RegistryKey 的CreateSubKey()⽅法。

如:RegistryKey key = Registry.LocalMachine;RegistryKey software = key.CreateSubKey("software\\test");//在HKEY_LOCAL_MACHINE\SOFTWARE下新建名为test的注册表项。

如果已经存在则不影响!2. 打开打开注册表项主要⽤到RegistryKey 的OpenSubKey()⽅法。

如:注意,如果该注册表项不存在,这调⽤这个⽅法会抛出异常RegistryKey key = Registry.LocalMachine;RegistryKey software = key.OpenSubKey("software\\test",true);//注意该⽅法后⾯还可以有⼀个布尔型的参数,true表⽰可以写⼊。

C#读写注册表

C#读写注册表读写注册表1. ⾃window95以来的所有window版本中,注册表是包含window安装,⽤户爱好,以及安装软件和设备的所有配置信息的核⼼存储库。

⽬前所有基于window的商业软件都是⽤注册表来存储这些信息。

2. 应⽤程序现在使⽤windows instanller来安装,开发⼈员不再需要直接操作注册表来安装应⽤程序了。

但是,如果要发布完整的应⽤程序,应⽤程序也要使⽤注册表来保存配置信息。

例如,如果应⽤程序要显⽰在控制⾯板的“添加/删除程序” 对话框中,仍然需要使⽤相应的注册表项。

还需要使⽤注册表处理与原有代码的向后兼容性。

3. 注册表的库和.NET库⼀样复杂,它包括访问注册表的类,其中有两个类设计到注册表,即Registry和RegistryKey,这两个类都在Microsoft.Win32命名空间中。

注册表的必备知识1.注册表的层次结构⾮常类似于⽂件系统。

2.查看和修改注册表内容的⼀般⽅式为:regedit :所有window版本都有。

regedt32:从window NT版本开始使⽤,其⽤户友好性不如regedit,但能访问regedit不能访问的安全性信息。

在window操作系统的⽂本系统中,最上⾯的节点是驱动器盘符,如:C:,D:,在注册表中,最上⾯的节点是注册表表巢(registry hive),他们的位置是不能改变的,有7个表巢(但xp中只能看到其中的5个).1.HKEY_CLASSS_ROOT(HKCR):包含系统上⽂件系统类型的细节(.txt,.doc等),以及应⽤程序可以打开的⽂件类型。

2.HKEY_CURRENT_USER(HKCU):包含⽤户⽬前登录的计算机的⽤户喜好,这些设置包括桌⾯设置,环境设置,⽹络和打印机连接和其他定义⽤户操作系统环境的设置。

3.HKEY_LOCAL_MACHINE(HKLM):其中包含所有安装到机器上的软件和硬件信息,这些设置不是⽤户特有的,⽽是可⽤于所有登录到机器上的⽤户,他还包含HKCR巢,HKCR实际上并不是⼀个独⽴的巢,⽽只是⼀个在注册表项:HKCM\SOFTWARE\Classes的快捷映射。

CC++实现读写注册表

CC++实现读写注册表读注册表// 初始化HKEY hKey_return = NULL;// 打开注册表失败if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, // 注册表根键句柄(也可以是 HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_USERS、HKEY_CURRENT_CONFIG)去掉第⼀个参数后的注册表路径, // 注册表路径(开头⽆'\',结尾有'\')0, // 保留KEY_READ, // 只读&hKey_return // 接收打开键的指针(RegQueryValueEx 会⽤到))){cout << "RegOpenKeyEx failed." << endl;return false;}// 打开键失败char keyValue[256];DWORD keySzType;DWORD keySize;if(ERROR_SUCCESS != RegQueryValueEx(hKey_return, // 由 RegOpenKeyEx 返回注册表键名, // 键名0, // 不定义值类型&keySzType, // 接收键类型(LPBYTE)&keyValue, // 接收键值&keySize // 接收键值的字节⼤⼩)){cout << "RegQueryValueEx failed." << endl;return false;}// 打印注册表键值cout << keyValue << endl;写注册表: 这是⼀个例⼦,有多余的代码。

功能⼤概是遍历了某个注册表键下的所有键值,酌情修改其中的某个数据BOOL CDesktopController::CheckShellFloders(){std::map<std::wstring, std::wstring> mapShellFolders = {{L"AppData", L"%USERPROFILE%\\AppData\\Roaming"},{L"Cache", L"%USERPROFILE%\\AppData\\Local\\Microsoft\\Windows\\INetCache"},{L"Cookies", L"%USERPROFILE%\\AppData\\Local\\Microsoft\\Windows\\INetCookies"},{L"Desktop", L"%USERPROFILE%\\Desktop"},{L"Favorites", L"%USERPROFILE%\\Favorites"},{L"History", L"%USERPROFILE%\\AppData\\Local\\Microsoft\\Windows\\History"},{L"Local AppData", L"%USERPROFILE%\\AppData\\Local"},{L"My Music", L"%USERPROFILE%\\Music"},{L"My Pictures", L"%USERPROFILE%\\Pictures"},{L"My Video", L"%USERPROFILE%\\Videos"},{L"NetHood", L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Network Shortcuts"},{L"Personal", L"%USERPROFILE%\\Documents"},{L"PrintHood", L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Printer Shortcuts"},{L"Programs", L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs"},{L"Recent", L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Recent"},{L"SendTo", L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\SendTo"},{L"Start Menu", L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu"},{L"Startup", L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup"},{L"Templates", L"%USERPROFILE%\\AppData\\Roaming\\Microsoft\\Windows\\Templates"}};BOOL ret = FALSE;BOOL needKillExplorer = FALSE;HKEY hTestKey = NULL;DWORD cSubKeys = 0; // ⼦健个数DWORD cValues = 0; // 键值个数TCHAR achValue[MAX_VALUE_NAME]; // 键值名DWORD cchValue = MAX_VALUE_NAME; // 键值最⼤长度TCHAR achData[MAX_VALUE_DATA]; // 键数据DWORD cchData = MAX_VALUE_DATA; // 键数据最⼤长度DWORD cbName = 0;// 遍历 HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/User Shell Foldersif (ERROR_SUCCESS != RegOpenKeyEx(HKEY_CURRENT_USER,L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders",0,KEY_ALL_ACCESS,&hTestKey)){LOG_INFO_A("RegOpenKeyEx failed. \n");goto end;}if (ERROR_SUCCESS != RegQueryInfoKey(hTestKey,NULL,NULL,NULL,&cSubKeys,NULL,NULL,&cValues,NULL,NULL,NULL,NULL)){LOG_INFO_A("RegQueryInfoKey failed. \n");goto end;}for (UINT i = 0; i < cValues; ++i){cchValue = MAX_VALUE_NAME;cchData = MAX_VALUE_DATA;achValue[0] = '\0';achValue[0] = '\0';if (ERROR_SUCCESS != RegEnumValue(hTestKey,i,achValue,&cchValue,NULL,NULL,(LPBYTE)achData,&cchData)){LOG_INFO_A("RegEnumValue failed. \n");continue;}// 如果有 \\ 开头的⽹络路径,就恢复if (achData[0] == '\\' && achData[1] == '\\'){if (mapShellFolders.find(achValue) == mapShellFolders.end()) {continue;}if (ERROR_SUCCESS != RegSetValueEx(hTestKey,achValue,0,REG_EXPAND_SZ,(const BYTE*)mapShellFolders.find(achValue)->second.c_str(), MAX_VALUE_DATA)){LOG_INFO_A("[LYSM] RegSetValueEx failed. \n");continue;}needKillExplorer = TRUE;}}// 杀安全桌⾯ - explorer.exe 进程,使注册表改动⽣效if (needKillExplorer){if (!killSecureExplorer()){goto end;}}ret = TRUE;end:if (hTestKey){RegCloseKey(hTestKey);}return ret;}。

C#读取注册表信息

private string GetRegistData(string name)
{
string registData;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键
er 对应于 HKEY_USER主键
Registry.CurrentConfig 对应于HEKY_CURRENT_CONFIG主键
Registry.DynDa 对应于HKEY_DYN_DATA主键
C#就可以十分方便、简洁的开发出操作注册表的程序。单击"开始/运行",在"打开"的后面填入"regedit"。就可以看到注册表的数据结构了。"主键"是有层次结构的。主键的下一级主键称为该主键的"子键"。每一个主键可以对拥有多个子键。右边的这些值就是所谓的键值了。每一个主键或者子键都可以拥有多个键值。注册表是一个庞大的数据库,在其中每一个主键,每一个键值都赋予了不同的功能。
下面通过一个读取注册表信息例子来具体说明这二个来的用法。
程序设计和运行的环境:Windows 2000服务器版,.Net FrameWork SDK Beta 2版。
在运行程序前的一些必要的处理工作。在程序设计时,主要功能是读取已经存在的主键键值,用户可以新建若干个主键和对应的键值。
程序的主要功能是读取指定主键下面的所有子键和子键拥有的键值,并以列表的形式按层次显示出来。程序设计过程中的重要步骤以及应该注意的一些问题:

C#注册表的读,写,删除,查找

C#注册表的读,写,删除,查找⾸先分享⼀下写⼊,这个最常⽤的public bool WriteRegedit(){try{RegistryKey rk = Registry.CurrentUser;RegistryKey softWare = rk.OpenSubKey("Software");RegistryKey microsoft = softWare.OpenSubKey("Microsoft");RegistryKey windows = microsoft.OpenSubKey("Windows");RegistryKey current = windows.OpenSubKey("CurrentVersion");RegistryKey explorer = current.OpenSubKey("Explorer");RegistryKey shell = explorer.OpenSubKey(@"Shell Folders", true);//这⾥必须加true就是得到写⼊权限 RegistryKey key = shell.CreateSubKey("swort");//创建swort⽬录key.SetValue("swort", "test");//在swort⽬录下建⽴写⼊swort testResponse.Write("写⼊成功!!!!!!!!!");return true;}catch{return false;}接下来是给出⼀个操作⽹页的cs⽂件,⼤家看着调⽤就⾏using System;using System.Collections;using System.Configuration;using System.Data;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using Microsoft.Win32;public partial class Register : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){Response.Write("这⾥是读取到的信息"+"<br/>");ReadRegedit();Response.Write("<br/>");Response.Write("这⾥将要写⼊信息swort/swort-test" + "<br/>");WriteRegedit();Response.Write("写⼊结束" + "<br/>");Response.Write("查看存在与否" + "<br/>");ExistsRegedit();Response.Write("查看结束" + "<br/>");Response.Write("删除" + "<br/>");DeleteRegedit();Response.Write("删除结束" + "<br/>");Response.Write("查看存在与否" + "<br/>");ExistsRegedit();Response.Write("查看结束" + "<br/>");}///<summary>///注册表的读取///</summary>///<returns></returns>public void ReadRegedit(){RegistryKey rk = Registry.CurrentUser;RegistryKey softWare = rk.OpenSubKey("Software");RegistryKey microsoft = softWare.OpenSubKey("Microsoft");RegistryKey windows = microsoft.OpenSubKey("Windows");RegistryKey current = windows.OpenSubKey("CurrentVersion");RegistryKey explorer = current.OpenSubKey("Explorer");RegistryKey shell = explorer.OpenSubKey(@"Shell Folders");foreach (string b in shell.GetValueNames())//这⾥⽤shell.GetValueNames()不是shell.GetSubKeyNames(){Response.Write( b+""+ shell.GetValue(b).ToString());Response.Write("<br/>");}}///<summary>///注册表的写⼊///</summary>///<returns></returns>public bool WriteRegedit(){try{RegistryKey rk = Registry.CurrentUser;RegistryKey softWare = rk.OpenSubKey("Software");RegistryKey microsoft = softWare.OpenSubKey("Microsoft");RegistryKey windows = microsoft.OpenSubKey("Windows");RegistryKey current = windows.OpenSubKey("CurrentVersion");RegistryKey explorer = current.OpenSubKey("Explorer");RegistryKey shell = explorer.OpenSubKey(@"Shell Folders", true);//这⾥必须加true就是得到写⼊权限 RegistryKey key = shell.CreateSubKey("swort");//创建swort⽬录key.SetValue("swort", "test");//在swort⽬录下建⽴写⼊swort testResponse.Write("写⼊成功!!!!!!!!!");return true;}catch{return false;}}///<summary>///注册表的删除///</summary>///<returns></returns>public bool DeleteRegedit(){try{RegistryKey rk = Registry.CurrentUser;RegistryKey softWare = rk.OpenSubKey("Software");RegistryKey microsoft = softWare.OpenSubKey("Microsoft");RegistryKey windows = microsoft.OpenSubKey("Windows");RegistryKey current = windows.OpenSubKey("CurrentVersion");RegistryKey explorer = current.OpenSubKey("Explorer");RegistryKey shell = explorer.OpenSubKey(@"Shell Folders",true);RegistryKey swort = shell.OpenSubKey("swort",true);//这⾥必须加true就是得到写⼊权限swort.DeleteValue("swort");//删除swort的值这个连键值⼀起删除了剩下⼀个shell.DeleteSubKey("swort",false);//删除swort这个⽬录要删除这个⽬录必须具有权限Response.Write("删除成功!!!!!!!!!");return true;}catch{return false;}return true;}///<summary>///查询某个键值是否存在///</summary>///<returns></returns>public bool ExistsRegedit(){RegistryKey rk = Registry.CurrentUser;RegistryKey softWare = rk.OpenSubKey("Software");RegistryKey microsoft = softWare.OpenSubKey("Microsoft");RegistryKey windows = microsoft.OpenSubKey("Windows");RegistryKey current = windows.OpenSubKey("CurrentVersion");RegistryKey explorer = current.OpenSubKey("Explorer");RegistryKey shell = explorer.OpenSubKey(@"Shell Folders");if (shell.SubKeyCount != 0){RegistryKey swort = shell.OpenSubKey("swort");foreach (string b in swort.GetValueNames()){if (b == "swort"){Response.Write("存在这个键!");return true;}}Response.Write("不存在这个键!");return false;}else{ Response.Write("不存在这个键!");return false;}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档