MFC 操作注册表的问题

原创 2013年12月02日 14:37:23

//在Win.ini初始化文件指定小节内设置一个字串。

API手册:http://www.vbgood.com/api.html

 

在Win.ini初始化文件指定小节内设置一个字串。<//msdn2.microsoft.com/mtps:codesnippetlanguage=C++ xmlns="http://msdn2.microsoft.com/mtps"displaylanguage="C++" containsmarkup="true" enablecopycode="false"runat="server">
BOOL WINAPI WriteProfileString(

__in LPCTSTR lpAppName, //指定要在其中写入新串的小节。如尚不存在,会创建这个小节。这个字串不区分大小写。

__in  LPCTSTR lpKeyName, //要设置的项名或条目名。这个字串不区分大小写。用vbNullString可删除这个小节的所有设置项

__in LPCTSTRlpString       // 指定为这个项写入的字串值。用vbNullString表示删除这个项现有的字串

);
<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false" runat="server">

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server">在Win.ini初始化文件指定小节内读取一个字串。
DWORD WINAPI GetProfileString(

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server"> __in   LPCTSTRlpAppName, //要在其中查找条目的小节名。这个字串不区分大小写。如果为vbNullString,则在lpReturnedString缓冲区装载这个.ini文件的所有小节的一个列表

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server"> __in   LPCTSTRlpKeyName, //欲获取的项名或条目名。这个字串不区分大小写。如果为vbNullString,则在lpReturnedString缓冲区装载指定小节内所有项的一个列表

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server"> __in   LPCTSTRlpDefault,     //指定条目未找到时返回的默认值。可设为空("")

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server">  __out  LPTSTRlpReturnedString,   //指定一个预先初始化好的字串缓冲区,长度至少为nSize个字符

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server"> __in   DWORDnSize    //装载到lpReturnedString缓冲区的最大字符数

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server">);

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server"> 

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server"> 

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server">创建一个单文档,然后再app类的InitInstance函数中:

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server">在语句“ SetRegistryKey(_T("应用程序向导生成的本地应用程序"));”后添加:<//msdn2.microsoft.com/mtps:codesnippetlanguage=C++ xmlns="http://msdn2.microsoft.com/mtps"displaylanguage="C++" containsmarkup="true" enablecopycode="false"runat="server">
 (1)::WriteProfileStringA("section","key","value");

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server">查看win.ini文件,可以看到在文件的最后添加了:

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server">[section]

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server">key=value

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server"> 

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server">屏蔽语句(1)后,添加语句(2):
 (2)CString str;
 ::GetProfileStringA("section","key","default",(LPSTR)str.GetBuffer(100),100);
 AfxMessageBox(  str );

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server">在运行程序后,会弹出一个消息框<//msdn2.microsoft.com/mtps:codesnippetlanguage=C++ xmlns="http://msdn2.microsoft.com/mtps"displaylanguage="C++" containsmarkup="true" enablecopycode="false"runat="server">

MFC注册表操作 - chenpeijie0_0 - chenpeijie0_0的博客

 

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server"> 屏蔽语句(2),添加语句:

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false"runat="server">(3)WriteProfileStringA("section","key","value");

MFC注册表操作 - chenpeijie0_0 - chenpeijie0_0的博客
 

 屏蔽语句(3),添加语句(4)

GetProfileString("section","key");

运行之后同样显示消息:
MFC注册表操作 - chenpeijie0_0 - chenpeijie0_0的博客

 

 

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false" runat="server">

LONG WINAPI RegCreateKey(

__in HKEY hKey, //要打开项的句柄,或者一个标准项名

__in_opt LPCTSTR lpSubKey,//欲创建的新子项。可同时创建多个项,只需用反斜杠将它们分隔开即可。例如level1\level2\newkey

__out PHKEY phkResult //指定一个变量,用于装载新子项的句柄

);

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false" runat="server">

LONG WINAPI RegSetValue(    
__in      HKEY hKey,         //一个已打开项的句柄,或指定一个标准项名    
__in_opt  LPCTSTR lpSubKey,  //欲对它的值进行设置的一个子项的名字。如指定vbNullString,表示设置hKey的默认值。如指定的子项不存在,则会创建它    
__in      DWORD dwType,      //必须是REG_SZ    
__in_opt  LPCTSTR lpData,    //新值   
__in      DWORD cbData       //指定lpData的长度,不包括空中止字符  
);
<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false" runat="server">

LONG WINAPI RegQueryValue(    
__in         HKEY hKey,        //一个已打开项的句柄,或者指定一个标准项名    
__in_opt     LPCTSTR lpSubKey, //要获取一个值的子项。可设为vbNullString,表示获取hKey的值    
__out_opt    LPTSTR lpValue,   //用于容纳指定项值的一个字串    
__inout_opt  PLONG lpcbValue   //指定一个变量,用于装载lpValue缓冲区的长度。一旦返回,它会设为实际载入缓冲区的字节数量  );

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false" runat="server">


LONG WINAPI RegSetValueEx(
 __in       HKEYhKey,                     //一个已打开项的句柄,或指定一个标准项名

 __in_opt   LPCTSTR lpValueName,  //要设置值的名字

  __reserved  DWORDReserved,       //未用,设为零

 __in       DWORDdwType,             //要设置的数量类型

 __in_opt   const BYTE*lpData,       //包含数据的缓冲区中的第一个字节

 __in       DWORDcbData               //lpData缓冲区的长度
);

 

<//msdn2.microsoft.com/mtps:codesnippet language=C++xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++"containsmarkup="true" enablecopycode="false" runat="server">
<//msdn2.microsoft.com/mtps:codesnippet language=C++ xmlns="http://msdn2.microsoft.com/mtps" displaylanguage="C++" containsmarkup="true" enablecopycode="false" runat="server">

LONG WINAPI RegOpenKey(    __in      HKEY hKey,             //一个已打开项的句柄,或指定一个标准项名    __in_opt  LPCTSTR lpSubKey,      //要打开的项名    __out     PHKEY phkResult        //指定一个变量,用于装载(保存)打开注册表项的一个句柄  );


 
LONG WINAPI RegQueryValueEx(

__in HKEYhKey,                         //一个已打开项的句柄,或者指定一个标准项名

__in_opt LPCTSTRlpValueName,       //要获取值的名字

__reserved LPDWORDlpReserved,     //未用,设为零

__out_opt LPDWORDlpType,            //用于装载取回数据类型的一个变量

__out_opt LPBYTElpData,                 //用于装载指定值的一个缓冲区

__inout_opt LPDWORDlpcbData         //用于装载lpData缓冲区长度的一个变量。一旦返回,它会设为实际装载到缓冲区的字节数

);

 

在菜单项里添加两个菜单项:

MFC注册表操作 - chenpeijie0_0 - chenpeijie0_0的博客

 然后给这两个菜单项添加命令响应:
void CRegView::OnWrite()
{
 HKEY hkey;
 DWORD dwage=30;
 RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\section\\key",&hkey);
 RegSetValue(hkey,NULL,REG_SZ,"data",strlen("data"));
 RegSetValueEx(hkey,"name",0,REG_DWORD,(CONST BYTE*)&dwage,4);
 RegCloseKey(hkey);
}


void CRegView::OnRead()
{
 
 HKEY hkey;
 RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\section\\key",&hkey);
 DWORD dwtype;
 DWORD dwvalue;
 DWORD dwname;
 RegQueryValueEx(hkey,"name",0,&dwtype,(LPBYTE)&dwname,&dwvalue);
 CString str;
 str.Format("name=%d",dwname);
 MessageBox(str);
}

<///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet><///msdn2.microsoft.com/mtps:codesnippet>

MFC软件卸载代码

// m_Software.cpp : 实现文件 // #include "stdafx.h" #include "MFCApplication1.h" #include "m_Software.h...
  • u011672712
  • u011672712
  • 2016年06月24日 13:18
  • 388

非MFC工程使用MFC库小结

一般的非MFC工程可以在包含相关头文件后(如afx.h),就可以使用里面封装的类了。 但是可能存在以下一些问题: 1、afx.h中已经包含了windows.h头文件,但是在非MFC工程中,也包含了了w...
  • u012764241
  • u012764241
  • 2014年12月22日 16:17
  • 776

如何去除MFC窗口的自动记忆功能 (如去除工具栏,菜单栏上次运行程序自动保存的内容)

BCG注册表清除: 第一次在CXXXApp::ExitInstance() 加入CleanState(), 运行一次 接着注释掉,再在OnInitInstance加入m_bSaveState=F...
  • u013602835
  • u013602835
  • 2015年04月07日 15:05
  • 1611

TortoiseGit安装注意事项

1.TortoiseGit安装同QQ,再次不具体说明,但是TortoiseGit安装之后有可能需要做的几个修改 。      (1).regedit打开注册表                     ...
  • Luomingkui1109
  • Luomingkui1109
  • 2017年05月23日 23:02
  • 592

MFC——文件操作(CFile)

1.文件的查找   当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个...
  • perfectguyipeng
  • perfectguyipeng
  • 2017年03月03日 20:49
  • 2333

MFC之基本的文件操作

1.我们要做的一个demo是创建文本文件并进行读写数据的操作 Cfile类是mfc中文件操作的积累,他派生自CObject,直接提供二进制文件的输入输出服务。本例将介绍如何使用CFile类进...
  • u011619422
  • u011619422
  • 2014年12月09日 13:24
  • 538

自己封装的MFC操作SQL数据库的类(大家给点建议!)

windows提供给我们操作数据库的dll,在mfc中通过COM来调用dll,进而来操作数据库。 #pragma once #import "C:\\Program Files (x86)\\Com...
  • haolipengzhanshen
  • haolipengzhanshen
  • 2014年01月08日 18:42
  • 3536

VS2013 MFC中操作MySQL数据库

由于项目需要,需要在MFC中操作服务器中的数据库(测试的代码是在先得到在对话框中所输入的帐号密码,然后从服务器上的数据库中查询是否有此用户以及密码是否正确)。在此先吐槽下微软的东西真难用,我在win3...
  • CQU_LiuHC
  • CQU_LiuHC
  • 2016年04月06日 23:16
  • 2487

使用MFC操作Word(使用模板)

创建一个MFC工程,过程略 导入word类库 [Project] -> [Class Wizard...] -> [Add Class...]::[MFC Class from Typelib.....
  • zcliang1983
  • zcliang1983
  • 2017年01月22日 13:01
  • 1775

MFC连ACCESS的相关操作(我的MFC做法)

授人以鱼不如授人以渔, 这篇文章主要会讲述我的MFC中几个地方做法,并不会将所有代码列出来(如有需要,可在资源下载)。   // 我用的是VC6.0 首先 建立一个MFC文件,然后建立ACCESS文件...
  • lx417147512
  • lx417147512
  • 2013年07月23日 11:05
  • 2007
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC 操作注册表的问题
举报原因:
原因补充:

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