今天给程序里面增加了自动登录的功能 思路是见用户名 密码都保存到注册表之中 一直没有用过注册表 今天试了一下 把一些代码都记录下来吧 //将用户名 数据库地址保存到注册表 bool CSetDataBase::SetDBValue(void) { UpdateData(TRUE); HKEY hKey , hKeySub;//定义有关的hKEY,在查询结束时要关闭 DWORD dwType=REG_SZ; //定义读取数据类型 LPCTSTR RegValueNameDB = "DBAdress"; LPCTSTR RegValueNameUser = "User"; LPCTSTR RegValueNamePWD = "Pwd"; char content[256]; //所查询注册表键值的内容 LPCTSTR RegSubKey = "Software//Microsoft//Windows NT//CurrentVersion//"; DWORD dwLength = 256; LPCTSTR strDBAdr , strUserName , strPwd; strDBAdr = this->strDBPath; strUserName = this->strUser; strPwd = this->strPassword; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,RegSubKey,0,KEY_WRITE,&hKey)==ERROR_SUCCESS) { //创建数据库地址 if (RegCreateKey(hKey, RegValueNameDB, &hKeySub) != ERROR_SUCCESS) { RegCloseKey(hKey); TRACE("创建注册表失败 DB/n"); return false; } if(RegSetValueEx(hKey,RegValueNameDB,NULL,REG_SZ,(BYTE*)strDBAdr,CString(strDBAdr).GetLength())!=ERROR_SUCCESS) { TRACE("错误:无法设置有关的注册表信息 DB/n"); return false; } //创建用户名 if (RegCreateKey(hKey, RegValueNameUser, &hKeySub) != ERROR_SUCCESS) { RegCloseKey(hKey); TRACE("创建注册表失败 user/n"); return false; } if(RegSetValueEx(hKey,RegValueNameUser,NULL,REG_SZ,(BYTE*)strUserName,CString(strUserName).GetLength())!=ERROR_SUCCESS) { TRACE("错误:无法设置有关的注册表信息 DB/n"); return false; } //创建密码 if (RegCreateKey(hKey, RegValueNamePWD, &hKeySub) != ERROR_SUCCESS) { RegCloseKey(hKey); TRACE("创建注册表失败 pwd/n"); return false; } if(RegSetValueEx(hKey,RegValueNamePWD,NULL,REG_SZ,(BYTE*)strPwd,CString(strPwd).GetLength())!=ERROR_SUCCESS) { TRACE("错误:无法设置有关的注册表信息 userName/n"); return false; } RegCloseKey(hKey); } else { TRACE("打开注册表失败/n"); return false; } UpdateData(FALSE); return true; } //查询注册表中的数据库配置信息 bool CSetDataBase::GetDBValue(void) { HKEY hKey , hKeySub;//定义有关的hKEY,在查询结束时要关闭 DWORD dwType=REG_SZ; //定义读取数据类型 LPCTSTR RegValueNameDB = "DBAdress"; LPCTSTR RegValueNameUser = "User"; LPCTSTR RegValueNamePWD = "Pwd"; char content[256]; //所查询注册表键值的内容 LPCTSTR RegSubKey = "Software//Microsoft//Windows NT//CurrentVersion//"; DWORD dwLengthDBAdr = 30, dwLengthUser = 30, dwLengthPWD = 30; TCHAR strDBAdr[30] , strUserName[30] , strPwd[30]; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,RegSubKey,0,KEY_READ,&hKey)==ERROR_SUCCESS) { //查询数据库地址信息 if(RegQueryValueEx(hKey,RegValueNameDB,NULL,&dwType,(unsigned char *)strDBAdr,&dwLengthDBAdr)!=ERROR_SUCCESS) { WriteLog("无法获取数据库地址信息/n"); return false; } //查询用户名 if(RegQueryValueEx(hKey,RegValueNameUser,NULL,&dwType,(unsigned char *)strUserName,&dwLengthUser)!=ERROR_SUCCESS) { WriteLog("无法获取用户名信息/n"); return false; } //查询密码 if(RegQueryValueEx(hKey,RegValueNamePWD,NULL,&dwType,(unsigned char *)strPwd,&dwLengthPWD)!=ERROR_SUCCESS) { WriteLog("无法获取用户密码信息/n"); return false; } RegCloseKey(hKey); } else { AfxMessageBox("错误:无法打开有关的hKEY"); return false; } strDBPath = strDBAdr; strUser = strUserName; strPassword = strPwd; return true; } //判断是否注册表中存在用户名 数据库地址等信息 bool CSetDataBase::isSetPassword(void) { HKEY hKey;//定义有关的hKEY,在查询结束时要关闭 DWORD dwType=REG_SZ; //定义读取数据类型 LPCTSTR RegValueName = "DBAdress"; char content[256]; //所查询注册表键值的内容 LPCTSTR RegSubKey = "Software//Microsoft//Windows NT//CurrentVersion//"; DWORD dwLength = 256; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,RegSubKey,0,KEY_READ,&hKey)==ERROR_SUCCESS) { if(RegQueryValueEx(hKey,RegValueName,NULL,&dwType,(unsigned char *)content,&dwLength)!=ERROR_SUCCESS) { TRACE("无法查询有关的注册表信息"); return false; //未设置 } RegCloseKey(hKey); return true; //已经设置 } else { AfxMessageBox("错误:无法打开有关的hKEY"); } return false; }