有时候我们编写程序时需要将一些初始化的信息写到一个配置文件当中,当我们程序启动时从配置文件当中去读取这些初始化的信息,现在很多软件都将这些信息写到注册表当中,软件启动时从注册表当中去读取这些初始化信息,但早期一些软件都会将这些信息写到WIN.INI文件当中。在超过16位操作系统以后,这些信息只能写在注册表当中了。
如果我们想要在WIN.INI当中写入一些初始化的信息可以用如下函数,它仅用于16位操作系统当中.:
一、向注册表文件中写信息:拷一个字符串到Win.ini文件当中
平台SDK中的函数:
WriteProfileString(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
LPCTSTR lpString
);
它需要在CFileApp中的Initstance()函数中完成,这个函数是应用程序初始化时需要调用的一个虚函数,
可以把它放在SetRegistryKey()这个函数后面,
GetProfileString(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
LPCTSTR lpDefault,LPCTSTR lpReturnedString,
DWORD nSize
);
示例:
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
::WriteProfileString("iscas.ac.cn","admin","dyz");
CString str;
::GetProfileString("iscas.ac.cn","admin","dyz",str.GetBuffer(100),100);
AfxMessageBox(str);
二、行用WinApp中的函数:
CWinApp中的函数:在注册表中写入值。CWinApp::WrtieProfileString()
CWinApp::GetProfileString()
示例:
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
WriteProfileString("iscas.ac.cn","admin","dyz1");
CString str;
str=GetProfileString("iscas.ac.cn","admin");
AfxMessageBox(str);
三、通过窗口读写注册表信息
写:
RegCreateKdy();创建指定的注册表项,如果已经存在,则打开它。
RegSetValue();设置指定指向的缺省值。
RegCloseKey();关闭句柄
示例:
HKEY hKey;
RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\ISCAS.AC.CN\\admin",&hKey);
RegSetValue(hKey,NULL,REG_SZ,"DYZ",strlen("DYZ"));
RegCloseKey(hKey);
读:
RegQueryValue();获得和一个指定的注册表项缺省的或没有名字的相关的数据
LONG lValue;
RegQueryValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\ISCAS.AC.CN\\admin",NULL,&lValue);//第三个变量为空时,在第四个变量中存储数据的大小。可以为数据分配置一个最佳的BUFFER,
char *pBuf=new char[lValue];
RegQueryValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\ISCAS.AC.CN\\admin",pBuf,&lValue);//再调用可以得到数据
MessageBox(pBuf);
三、写入读取整型函数:
设置数据:
RegSetValueEx();在注册表下面设置指定值的数据和类型。第二个参数,如果设置的值不存在,它会增加一个值的名字,
得到数据:
RegOpenKey()
示例:
HKEY hKey;
RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\ISCAS.AC.CN\\admin",&hKey);
DWORD dwType;
DWORD dwValue;
DWORD dwAge;
RegQueryValueEx(hKey,"age",0,&dwType,(LPBYTE)&dwAge,&dwValue);
CString str;
str.Format("age = %d",dwAge);
MessageBox(str);
知识点:
其它与注册表相关的函数:查看以Reg开头的一些函数。
知识点:
1、在CString类当中,有一个函数可以返回字符串的指针类型,
CString::GetBuffer()
2、CWinApp并不是从CWnd派生的,所以并不包含MessageBox(),对应的函数要调用AfxMessageBox()
3、在程序中调用平台SDK中的函数时需要在函数前面加上两个冒号::