MFC读写注册表

MFC读写注册表
MFC读写注册表2010年06月29日星期二11:53一、说明:注册表是Windows重要组成部分,注册表记录了大量有关电脑软硬件的信息。

注册表中
的值通过其名称标识。

值名称由与键名相同的字符组成。

值本身可以是字符串、二进制数据或者是32位无符号值。

在这里我们主要运用以下技巧:(一)、预定义的注册表键。

注册表包含了几个预定义键:
HKEY_LOCAL_MACHINE包含描述计算机及其配置的条目。

其中包括关于处理器、系统主板、内存和已安装的软件和硬件的信息。

HKEY_CLASSES_ROOT是与
文档类型和OLE\COM相关的信息的支持键。

这个键是HKEY_LOCAL_MACHINE的从属键。

HKEY_USERS用作默认用户首选设置,也作为单个用户的首选设置。

HKEY_CLASSES_USER是用于当前(登录)用户的相关信息。

HKEY_CURRENT_CONFIG
包含了当前系统配置的信息。

还有一个,一般不会出现,只有配置的局域网后
才会有。

(二)、CRegKey类及主要使用和函数说明
所需要头文件:atlbase.h常用函数
☆打开一个键的函数:RegOpenKeyEx函数定义:LONG RegOpenKeyEx(HKEY hKey,//已经打开的键的句柄,或者直接是上述几个根键LPCTSTR lpSubKey,//
要打开的子键名字的地址DWORD ulOptions,//保留值,必须为0 REGSAM samDesired,//打开方式,如读还是写PHKEY phkResult//返回的打开的子键的
句柄);☆查询某一个键值:RegQueryValueEx函数定义:LONG RegQueryValueEx(HKEY hKey,//要查询的键的句柄LPCTSTR lpValueName,//要
查询的键值的名称LPDWORD lpReserved,//保留值LPDWORD lpType,//要查询的数据的类型LPBYTE lpData,//要返回的查询的数据LPDWORD lpcbData//预置的数据的长度);☆设置一个键值RegSetValueEx函数定义:LONG RegSetValueEx(HKEY hKey,//要设置的键的句柄LPCTSTR lpValueName,//要访
问的键值的名称LPDWORD lpReserved,//保留值DWORD dwType,//要设置的数据的类型const BYTE*lpData,//要设置的健值DWORD cbData//数据的长度);二、实例:
通过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分别表示用户名和公司名设
置两个编辑框,用于显示和修改信息。

定义两个CString变量
m_strOwner,m_Company。

"查询"按钮代码如下:
void CRegeditDlg:OnQuery(){UpdateData(true);HKEY hKEY;//定义有关的hKEY,在查询结束时要关闭//打开与路径data_Set相关的hKEY LPCTSTR data_Set="Software\Microsoft\Windows NT\CurrentVersion\";//访问注册表,hKEY则保存此函数所打开的键的句柄long ret0=(:
RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_READ,&hKEY));if(ret0!=ERROR_SUCCESS)//如果无法打开hKEY,则中止程序的执行{AfxMessageBox("错误:无法打开有关的hKEY");return;}//查询有关的数据LPBYTE
owner_Get=new BYTE[80];//定义用户姓名owner_Get DWORD type_1=REG_SZ;//定义数据类型DWORD cbData_1=80;//定义数据长度long ret1=:RegQueryValueEx(hKEY,"RegisteredOwner",NULL,&type_1,owner_Get,&cbData _1);if(ret1!=ERROR_SUCCESS){AfxMessageBox("错误:无法查询有关的注册表信息");return;}//查询公司名LPBYTE company_Get=new BYTE[80];//定
义公司名称company_Get DWORD type_2=REG_SZ;//定义数据类型DWORD
cbData_2=80;//定义数据长度long ret2=:
RegQueryValueEx(hKEY,"RegisteredOrganization",NULL,&type_2,company_Ge t,&cbData_2);if(ret2!=ERROR_SUCCESS){AfxMessageBox("错误:无法查询
有关的注册表信息");return;}//显示信息m_strOwner=CString(owner_Get);m_strCompany=CString(company_Get);delete owner_Get;delete
company_Get;//程序结束,关闭打开的hKEY:RegCloseKey(hKEY);UpdateData(false);}"设置"按钮代码如下:
void CRegeditDlg:OnModify(){UpdateData(true);HKEY hKEY;//定义
有关的hKEY,在查询结束时要关闭//打开与路径data_Set相关的hKEY LPCTSTR data_Set="Software\Microsoft\Windows NT\CurrentVersion\";//访问注册
表,hKEY则保存此函数所打开的键的句柄long ret0=(:
RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_READ,&hKEY));if(ret0!=ERROR_SUCCESS)//如果无法打开hKEY,则中止程序的执行{AfxMessageBox("错误:无法打开有关的hKEY");return;}//设置有关的数据
//CString_To_LPBYTE,请参考下面的函数LPBYTE
owner_Set=CString_To_LPBYTE(m_strOwner);//定义用户姓名owner_Set DWORD type_1=REG_SZ;//定义数据类型DWORD
cbData_1=m_strOwner.GetLength()+1;//定义数据长度long ret1=:RegSetValueEx(hKEY,"RegisteredOwner",NULL,type_1,owner_Set,cbData_1);if(ret1!=ERROR_SUCCESS){AfxMessageBox("错误:无法设置有关的注册表信息");return;}//查询公司名LPBYTE
company_Set=CString_To_LPBYTE(m_strCompany);//定义公司名称
company_Set DWORD type_2=REG_SZ;//定义数据类型DWORD
cbData_2=m_strCompany.GetLength()+1;//定义数据长度long ret2=:RegSetValueEx(hKEY,"RegisteredOrganization",NULL,type_2,company_Set,c bData_2);if(ret2!=ERROR_SUCCESS){AfxMessageBox("错误:无法设置有关
的注册表信息");return;}else{AfxMessageBox("注册表修改完成");}//程
序结束,关闭打开的hKEY:RegCloseKey(hKEY);UpdateData(false);}参考
函数
LPBYTE CString_To_LPBYTE(CString str){LPBYTE lpb=new
BYTE[str.GetLength()+1];for(int i=0;i str.GetLength();
i++)lpb[i]=str[i];lpb[str.GetLength()]=0;return lpb;}三、注意:以
上代码仅能在Windows NT/2000/XP中通过,Windows 9X/Me中请将注册表路径
中的Windows NT改为Windows即可实现。

本程序源代码在Windows
2000+VC6.0中通过测试。

本程序源代码示例文件仅能在Windows NT/2000/XP
下使用,Windows 9X/Me中请修改后使用。

合集下载

MFC程序读写注册表

MFC程序读写注册表
WriteProfileString("LogInfo","Password",strPassword);//同上~
strUserName = GetProfileString("LogInfo","UserName");// 这里是读取HKEY_CURRENT_USER\\software\\boli's app\\LogInfo\\分支下的 UserName 字符串键值到 strUserName~

strUserName = AfxGetApp()->GetProfileString("LogInfo","UserName");
条条大路通罗马。
看看MFC的代码吧~~SDK高手们不屑MFC,但有时候看看MFC的代码会到学习SDK,windows api有很大的帮助~ :P
////////////////////////////////////////////////////////////////////////////
REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
&hCompanyKey, &dw) == ERROR_SUCCESS)
{
RegCreateKeyEx(hCompanyKey, m_pszProfileName, 0, REG_NONE,
GetProfileString Retrieves a string from an entry in the application's .INI file.
MSDN上面写上面6个函数是写到INI文件的。所以俺就忽略了其访问注册表的功能。无意中看了其MFC实现才有所了解。

mfc读写类

mfc读写类

mfc读写类MFC(Microsoft Foundation Class)是微软公司开发的一套基于C++的应用程序框架,它提供了一系列的类和函数,可以帮助开发者快速地构建Windows应用程序。

在MFC中,读写类是非常重要的一类类,它们可以帮助我们读取和写入文件、网络数据等信息,从而实现数据的传输和存储。

在MFC中,读写类主要包括CFile、CStdioFile、CMemFile等。

其中,CFile是最基本的读写类,它可以用来读写二进制文件和文本文件。

CStdioFile则是用来读写文本文件的,它提供了一些方便的函数,如ReadString、WriteString等,可以直接读写字符串。

CMemFile 则是用来读写内存中的数据,它可以将内存中的数据当作文件来读写,非常方便。

下面我们来看一下如何使用这些读写类。

首先是CFile类,它的使用非常简单,只需要创建一个CFile对象,然后调用它的Open函数打开文件,再调用Read和Write函数读写文件即可。

例如:CFile file;if(file.Open(_T("test.txt"), CFile::modeCreate | CFile::modeWrite)){char buf[] = "Hello, world!";file.Write(buf, sizeof(buf));file.Close();}这段代码就是创建了一个名为test.txt的文件,并向其中写入了一个字符串。

其中,modeCreate表示如果文件不存在则创建文件,modeWrite表示以写入模式打开文件。

接下来是CStdioFile类,它的使用也非常简单,只需要创建一个CStdioFile对象,然后调用它的Open函数打开文件,再调用ReadString和WriteString函数读写文件即可。

例如:CStdioFile file;if(file.Open(_T("test.txt"), CFile::modeCreate | CFile::modeWrite | CFile::typeText)){CString str = _T("Hello, world!");file.WriteString(str);file.Close();}这段代码就是创建了一个名为test.txt的文本文件,并向其中写入了一个字符串。

MFC读取Excel数据

MFC读取Excel数据

doc文档可能在W AP端浏览体验不佳。

建议您优先选择TXT,或下载源文件到本机查看。

MFC 实现excel 的读写操作这个是使用ODBC 来完成的第一步:建立基于对话框的MFC 工程,命名为MfctoExc;第二步:添加两个头文件到stdafx.h,#include #include <odbcinst.h>第三步:添加两个按钮控件和一个List Box 控件,给List Box 添加控制变量CListBox m_ExcelList;添加DDX_Control(pDX, IDC_LIST_BOX, m_ExcelList);第四步:给两个按钮添加两个功能函数,读写excelvoid CMfctoExcDlg::OnRead(){ // TODO: Add your control notification handler code hereCDatabase database;CString sSql;CString sItem1, sItem2,sItem3;CString sDriver;CString sDsn;CString sFile,sPath;//获取主程序所在路径,存在sPath 中GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PA TH); sPath.ReleaseBuffer ();int nPos;nPos=sPath.ReverseFind ('\\');sPath=sPath.Left (nPos);sFile = sPath + "\\Demo.xls"; // 将被读取的Excel 文件名// 检索是否安装有Excel 驱动"Microsoft Excel Driver (*.xls)" sDriver = GetExcelDriver(); if (sDriver.IsEmpty()) { // 没有发现Excel 驱动AfxMessageBox("没有安装Excel 驱动!"); return; } // 创建进行存取的字符串sDsn.Format("ODBC;DRIVER={%s};DSN=' ';DBQ=%s", sDriver, sFile);TRY { // 打开数据库(既Excel 文件) database.Open(NULL, false, false, sDsn);CRecordset recset(&database); // 设置读取的查询语句. sSql = "SELECT Num,Name, Age " //设置索引顺序"FROM Exceldemo " ; "ORDER BY Name "; // 执行查询语句recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly); // 获取查询结果while (!recset.IsEOF()) { //读取Excel 内部数值recset.GetFieldValue("Num", sItem1); recset.GetFieldValue("Name", sItem2); recset.GetFieldValue("Age", sItem3); //显示记取的内容m_ExcelList.AddString( sItem1 + " --> "+sItem2+ " --> "+sItem3 ); // 移到下一行recset.MoveNext(); } // 关闭数据库database.Close();} CATCH(CDBException, e) { // 数据库操作产生异常时……AfxMessageBox("数据库错误: " + e->m_strError); } END_CATCH; } void CMfctoExcDlg::OnWrite() { // TODO: Add your control notification handler code here CDatabase database; CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel 安装驱动CString sExcelFile,sPath; CString sSql; //获取主程序所在路径,存在sPath 中GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH); sPath.ReleaseBuffer (); int nPos; nPos=sPath.ReverseFind ('\\'); sPath=sPath.Left (nPos); sExcelFile = sPath + "\\Demo.xls"; TRY { // 创建进行存取的字符串sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONL Y=FALSE;CREATE_DB= \"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile); // 创建数据库(既Excel 表格文件) if( database.OpenEx(sSql,CDatabase::noOdbcDialog) ) { // 创建表结构(序号、姓名、年龄) sSql = "CREATE TABLE Exceldemo (Num Number,Name TEXT,Age NUMBER)";//可以用中文表示序号,姓名,年龄等database.ExecuteSQL(sSql); // 插入数值sSql = "INSERT INTO Exceldemo (Num,Name,Age) V ALUES (1,'小西',24)"; database.ExecuteSQL(sSql); sSql = "INSERT INTO Exceldemo (Num,Name,Age) V ALUES (2,'小东',22)"; database.ExecuteSQL(sSql); sSql = "INSERT INTO Exceldemo (Num,Name,Age) V ALUES (3,'小朱',25)"; database.ExecuteSQL(sSql); sSql = "INSERT INTO Exceldemo (Num,Name,Age) V ALUES (4,'小鸭',27)"; database.ExecuteSQL(sSql); } // 关闭数据库database.Close(); AfxMessageBox("Excel 文件写入成功!"); } CA TCH_ALL(e) { TRACE1("Excel 驱动没有安装: %s",sDriver); } // 要建立的Excel 文件END_CATCH_ALL; } 第五步:添加成员函数CString CMfctoExcDlg::GetExcelDriver() { char szBuf[2001]; WORD cbBufMax = 2000; WORD cbBufOut; char *pszBuf = szBuf; CString sDriver; // 获取已安装驱动的名称(涵数在odbcinst.h 里) if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut)) return ""; // 检索已安装的驱动是否有Excel……do { if (strstr(pszBuf, "Excel") != 0) { //发现! sDriver = CString(pszBuf); break; } pszBuf = strchr(pszBuf, '\0') + 1; } while (pszBuf[1] != '\0'); return sDriver; } 文件存储路径设置:CString filename, sExcelFile ; CFileDialog fileDlg (FALSE, "Path", filename,OFN_FILEMUSTEXIST| OFN_HIDEREADONL Y, "*.xls "); if( fileDlg.DoModal()==IDOK) { sExcelFile = fileDlg.GetPathName(); CFileFind finder; BOOL bWorking = finder.FindFile(sExcelFile);//寻找文件// 要建立的Excel 文件if (bWorking)//如果已经存在文件,则删除{ CFile::Remove((LPCTSTR)sExcelFile);} } else return ; 将变量写入Excel 可以用下面的笨方法:for(int i=0;i<5;i++) { sSql = "INSERT INTO Exceldemo (Num,Name,Age) V ALUES ("; str0.Format("%d",a[i]); sSql=sSql+str0; sSql=sSql+",'"; sSql=sSql+str[i]; sSql=sSql+"',"; str0.Format("%0.7f",data[i]); sSql=sSql+str0; sSql=sSql+")"; database.ExecuteSQL(sSql); } 其中a[ ]是一个int 型数组,str[ ]是CString 数组,data[ ]是float 数字1。

C++读写注册表

C++读写注册表

C++读写注册表最近⾃⼰搞了⼀下操作注册表的程序,⾃⼰对于windows编程真的不了解,于是上⽹找博客,结果⽹上的博客,发现没有⼀个对的,路径好多的符号写反了。

于是把⾃⼰能⽤的代码放上来。

代码:#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include <string>#include <cstring>#include <atlbase.h>#include <Windows.h>#pragma warning(disable:4996)using namespace std;void read_dword()//读取操作表,其类型为DWORD{HKEY hKEY;//定义有关的键,在查询结束时关闭//打开与路径data_Set相关的hKEYLPCTSTR data_set = _T("Software\\Chicony\\Lenovo1");//访问注册表,hKEY则保存此函数所打开的键的句柄if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_READ, &hKEY)){DWORD dwValue;//长整型数据,如果是字符串数据⽤char数组DWORD dwSize = sizeof(DWORD);DWORD dwType = REG_DWORD;if (::RegQueryValueEx(hKEY, _T("123"), 0, &dwType, (LPBYTE)&dwValue, &dwSize) != ERROR_SUCCESS){cout << "错误:⽆法查询有关的注册表信息" << endl;}cout << dwValue << endl;}::RegCloseKey(hKEY);}void read_reg_sz()//读取操作表,其类型为REG_SZ{HKEY hkey;LPCTSTR data_set = _T("Software\\Chicony\\Lenovo1");if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_READ, &hkey)){char dwValue[256];DWORD dwSzType = REG_SZ;DWORD dwSize = sizeof(dwValue);if (::RegQueryValueEx(hkey, _T("wangchong"), 0, &dwSzType, (LPBYTE)&dwValue, &dwSize) != ERROR_SUCCESS){cout << "⽆法查询有关的注册表信息" << endl;}cout << dwValue<< endl;}::RegCloseKey(hkey);}void write_dword()//在\Software\\Chicony\\Lenovo1⽂件夹下写⼊⼀个test111的⼦键,设置其名称为Name,其值为6{HKEY hkey;//定义有关的hkey,在查询结束时要关闭HKEY hTempKey;DWORD dwValue = 6;DWORD dwSize = sizeof(DWORD);DWORD dwType = REG_DWORD;LPCTSTR data_set= _T("Software\\Chicony\\Lenovo1");if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_SET_VALUE, &hkey)){if (ERROR_SUCCESS == ::RegCreateKey(hkey, _T("test111"), &hTempKey)){if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, _T("Name"), 0, REG_DWORD, (CONST BYTE*)&dwValue, sizeof(DWORD))){cout <<"写⼊注册表失败"<< endl;}}}::RegCloseKey(hkey);}void write_reg_sz(){HKEY hkey;HKEY hTempKey;char m_name_set[256]="China";DWORD len = strlen(m_name_set) + 1;LPCTSTR data_set = _T("Software\\Chicony\\Lenovo1");if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_SET_VALUE, &hkey)){if (ERROR_SUCCESS == ::RegCreateKey(hkey,_T("test1112"),&hTempKey)){if (ERROR_SUCCESS!=::RegSetValueEx(hTempKey,_T("Name"),0,REG_SZ,(const BYTE*)m_name_set,len)){cout << "写⼊错误" << endl;}}}::RegCloseKey(hkey);}void write_binary(){HKEY hkey;HKEY hTempKey;BYTE m_name[10];memset(m_name, 0, sizeof(m_name));m_name[0] = 0xff;m_name[1] = 0xac;m_name[2] = 0x05;m_name[3] = 0x4e;LPCTSTR data_set= _T("Software\\Chicony\\Lenovo1");if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_SET_VALUE, &hkey)){if (ERROR_SUCCESS==::RegCreateKey(hkey,_T("test111"),&hTempKey)){if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, _T("Name"), 0, REG_BINARY, (unsigned char *)m_name, 5)) {cout << "写⼊错误" << endl;}}}::RegCloseKey(hkey);}void delete_value(){HKEY hkey;LPCTSTR data_set = _T("Software\\Chicony\\Lenovo1\\test1112");if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_SET_VALUE, &hkey)){if (ERROR_SUCCESS != ::RegDeleteValue(hkey, _T("Name"))){cout << "删除错误" << endl;}}::RegCloseKey(hkey);}void delete_key(){HKEY hkey;LPCTSTR data_set = _T("Software\\Chicony\\Lenovo1");if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_SET_VALUE, &hkey)){if (ERROR_SUCCESS != ::RegDeleteKey(hkey,"test1112")){cout << "删除错误" << endl;}}::RegCloseKey(hkey);}int main(){read_dword();read_reg_sz();write_reg_sz();write_binary();delete_value();delete_key();system("pause");return 0;}读写注册表之后的效果如图,⾃⼰windows编程这块还要努⼒学习,好多的地⽅都不懂,希望能和⼤家多多交流。

mfc读写注册表函数

mfc读写注册表函数

mfc读写注册表函数在Microsoft Foundation Classes (MFC)库中,读写注册表的函数通常通过CWinThread类和CWinApp类的成员函数实现。

以下是一些常用的函数:SetRegistryKey:这个函数用于设置当前线程的注册表键。

cppvoid SetRegistryKey(LPCTSTR lpszRegistryKey); OpenRegistryKey:这个函数用于打开一个指定的注册表键。

cppBOOL OpenRegistryKey(HKEY hRootKey, LPCTSTR lpszSubKey, HKEY& hKey);WriteRegistryValue:这个函数用于写入一个注册表值。

cppBOOL WriteRegistryValue(LPCTSTR lpszValueName, DWORD dwType, LPVOID lpData, DWORD cbData);ReadRegistryValue:这个函数用于读取一个注册表值。

cppBOOL ReadRegistryValue(LPCTSTR lpszValueName, DWORD& dwType, LPVOID lpData, DWORD& cbData);使用MFC读写注册表的例子:写入注册表cppCWinThread* pThread = AfxGetThread();pThread->SetRegistryKey(_T("Software\\MyApp"));HKEY hKey;if (pThread->OpenRegistryKey(_T(""), KEY_WRITE, hKey) == ERROR_SUCCESS) {CString valueName = _T("KeyName");DWORD dwValue = 12345;if (pThread->WriteRegistryValue(valueName, REG_DWORD, &dwValue, sizeof(dwValue)) == ERROR_SUCCESS) {AfxMessageBox(_T("写入注册表成功!"));} else {AfxMessageBox(_T("写入注册表失败!"));}pThread->RegCloseKey(hKey);} else {AfxMessageBox(_T("打开注册表键失败!"));}读取注册表cppCWinThread* pThread = AfxGetThread();pThread->SetRegistryKey(_T("Software\\MyApp"));HKEY hKey;if (pThread->OpenRegistryKey(_T(""), KEY_READ, hKey) == ERROR_SUCCESS) {CString valueName = _T("KeyName");DWORD dwType, dwValue;DWORD cbData = sizeof(dwValue);if (pThread->ReadRegistryValue(valueName, &dwType, &dwValue, &cbData) == ERROR_SUCCESS) {AfxMessageBox(_T("读取到的值是:") + dwValue); } else {AfxMessageBox(_T("读取注册表值失败!"));}pThread->RegCloseKey(hKey);} else {AfxMessageBox(_T("打开注册表键失败!"));}。

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子键的值。

MFC操作注册表

MFC操作注册表打开注册表键1 LONG RegOpenKeyEx(2 HKEY hKey, // handle to open key主键3 LPCTSTR lpSubKey, // subkey name⼦键4 DWORD ulOptions, // reserved。

必须是05 REGSAM samDesired, // security access mask读写标识6 PHKEY phkResult // handle to open key返回的HKEY类型的指针。

以后,读写,关闭⽤这个指针7 );如:1// 打开HKEY_LOCAL_MACHINE主键下的SoftWare\\Knight Studio\\Knight⼦键2 HKEY hKEY;3 HKEY hKeyRoot = HKEY_LOCAL_MACHINE;4long ret0=(::RegOpenKeyEx(hKeyRoot,"SoftWare\\Knight Studio\\Knight",0,KEY_READ,&hKEY));5if(ret0!=ERROR_SUCCESS)//如果⽆法打开hKEY,则中⽌程序的执⾏6 {7 AfxMessageBox("错误:⽆法打开有关的hKEY");8return;9 }读取注册表1 LONG RegQueryValueEx(2 HKEY hKey, // handle to key打开注册表指针3 LPCTSTR lpValueName, // value name要读取的键名称4 LPDWORD lpReserved, // reserved must be NULL. 必须是NULL5 LPDWORD lpType, // type buffer,键类型。

我最常⽤REG_SZ,REG_DWORD6 LPBYTE lpData, // data buffer。

MFC对注册表的读写

MFC对注册表的读写一、说明:注册表是Windows重要组成部分,注册表记录了大量有关电脑软硬件的信息。

注册表中的值通过其名称标识。

值名称由与键名相同的字符组成。

值本身可以是字符串、二进制数据或者是32位无符号值。

在这里我们主要运用以下技巧:(一)、预定义的注册表键。

注册表包含了几个预定义键:HKEY_LOCAL_MACHINE 包含描述计算机及其配置的条目。

其中包括关于处理器、系统主板、内存和已安装的软件和硬件的信息。

HKEY_CLASSES_ROOT 是与文档类型和OLE\COM 相关的信息的支持键。

这个键是HKEY_LOCAL_MACHINE的从属键。

HKEY_USERS 用作默认用户首选设置,也作为单个用户的首选设置。

HKEY_CLASSES_USER 是用于当前(登录)用户的相关信息。

HKEY_CURRENT_CONFIG 包含了当前系统配置的信息。

还有一个,一般不会出现,只有配置的局域网后才会有。

(二)、CRegKey 类及主要使用和函数说明所需要头文件:atlbase.h常用函数☆ 打开一个键的函数:RegOpenKeyEx函数定义:LONG RegOpenKeyEx(HKEY hKey,//已经打开的键的句柄,或者直接是上述几个根键LPCTSTR lpSubKey,//要打开的子键名字的地址DWORD ulOptions,//保留值,必须为0REGSAM samDesired,//打开方式,如读还是写PHKEY phkResult//返回的打开的子键的句柄);☆ 查询某一个键值:RegQueryValueEx函数定义:LONG RegQueryValueEx(HKEY hKey,//要查询的键的句柄LPCTSTR lpValueName,//要查询的键值的名称LPDWORD lpReserved,//保留值LPDWORD lpType,//要查询的数据的类型LPBYTE lpData,//要返回的查询的数据LPDWORD lpcbData//预置的数据的长度);☆ 设置一个键值RegSetValueEx函数定义:LONG RegSetValueEx(HKEY hKey,//要设置的键的句柄LPCTSTR lpValueName,//要访问的键值的名称LPDWORD lpReserved,//保留值DWORD dwType,//要设置的数据的类型const BYTE *lpData,//要设置的健值DWORD cbData//数据的长度);☆ 创建一个键RegSetValueEx函数定义:LONG RegCreateKeyEx();longret0=RegCreateKey(HKEY_LOCAL_MACHINE,"software\\ ...",&amp;hKEY);if(ret0!=ERROR_SUCCESS)//如果无法打开hKEY,则中止程序的执行{AfxMessageBox("错误:无法打开有关的hKEY");return;}二、实例:通过AppWizard创建基于对话框的程序Regedit设置两个命令按钮,名为“查询”(ID_QUERY)和“修改”(ID_CHANGE),用来查询和修改注册表中用户姓名和公司名称。

mfc读写注册表函数

mfc读写注册表函数摘要:1.MFC 简介2.注册表简介3.MFC 中的注册表操作函数4.读写注册表的实例代码正文:一、MFC 简介MFC(Microsoft Foundation Class)是微软提供的一套用于开发Windows 应用程序的类库。

它提供了许多方便的类和函数,使开发者能够简化编程过程,快速地开发出功能强大的应用程序。

二、注册表简介注册表是Windows 操作系统中的一个核心组件,用于存储系统和应用程序的配置信息。

它由一系列键值对组成,可以存储各种数据类型,如字符串、整数、布尔值等。

注册表具有较高的安全性和稳定性,可以确保应用程序和系统配置的正确性。

三、MFC 中的注册表操作函数MFC 提供了一系列用于操作注册表的函数,包括读取、写入和删除注册表键值等。

以下是一些常用的MFC 注册表操作函数:1.RegOpenKeyEx:打开注册表键2.RegCloseKey:关闭注册表键3.RegSetValueEx:写入注册表键值4.RegGetValueEx:读取注册表键值5.RegDeleteValue:删除注册表键值6.RegEnumValue:枚举注册表键的值7.RegCreateKey:创建注册表键四、读写注册表的实例代码下面是一个使用MFC 读写注册表的简单示例:```cpp#include <afx.h>#include <iostream>void ReadRegistration(void){// 打开注册表键HKEY hKey;if (RegOpenKeyEx(HKEY_CURRENT_USER, "SoftwareMyApp", 0, KEY_READ, &hKey)!= ERROR_SUCCESS){MessageBox("打开注册表键失败!");return;}// 读取注册表键值DWORD dwValue;if (RegGetValueEx(hKey, "key_name", 0, &dwValue,sizeof(dwValue))!= ERROR_SUCCESS){MessageBox("读取注册表键值失败!");RegCloseKey(hKey);return;}// 输出读取到的值std::cout << "读取到的值:" << dwValue << std::endl;// 关闭注册表键RegCloseKey(hKey);}void WriteRegistration(void){// 打开注册表键HKEY hKey;if (RegOpenKeyEx(HKEY_CURRENT_USER, "SoftwareMyApp", 0, KEY_WRITE, &hKey)!= ERROR_SUCCESS){MessageBox("打开注册表键失败!");return;}// 写入注册表键值DWORD dwValue = 12345;if (RegSetValueEx(hKey, "key_name", 0, &dwValue, sizeof(dwValue))!= ERROR_SUCCESS){MessageBox("写入注册表键值失败!");RegCloseKey(hKey);return;}// 输出写入到的值std::cout << "写入到的值:" << dwValue << std::endl;// 关闭注册表键RegCloseKey(hKey);}int main(){// 读取注册表值ReadRegistration();// 写入注册表值WriteRegistration();return 0;}```以上代码示例首先打开注册表键,然后分别读取和写入键值。

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的快捷映射。

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