关闭

MFC 操作注册表的问题

461人阅读 评论(0) 收藏 举报
分类:

//在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>
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1040004次
    • 积分:18211
    • 等级:
    • 排名:第522名
    • 原创:741篇
    • 转载:522篇
    • 译文:0篇
    • 评论:105条
    最新评论