请问为何注册表保存不了? 用AfxGetApp()->WriteProfileString();试一下啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看一下你在RegCreateKeyEx中是否设置了REG_OPTION_VOLATILE 读注册表值; HKEY hKey; DWORD dwDisposition; DWORD dwLength=20; CHAR user[10]; if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,"NETWORK\\Logon",0,NULL,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition)!=ERROR_SUCCESS) return TRUE; if (RegQueryValueEx(hKey,"username",NULL,NULL,(LPBYTE)&user,&dwLength) != ERROR_SUCCESS) AfxMessageBox("FAIL"); AfxMessageBox(user); RegCloseKey(hKey);删注册表值; HKEY hKey; DWORD dwDisposition; if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,NULL,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition)!=ERROR_SUCCESS) { AfxMessageBox("FAIL"); return; } if (RegDeleteValue(hKey,"TimeTool")!= ERROR_SUCCESS) AfxMessageBox("FAIL"); AfxMessageBox("OK"); RegCloseKey(hKey); 写注册表值; HKEY hKey; DWORD dwDisposition; DWORD dwLength=20; CHAR user[12] = "F:\\pass.exe"; if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,NULL,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition)!=ERROR_SUCCESS) { AfxMessageBox("FAIL"); return; } if (RegSetValueEx(hKey,"TimeTool",0,REG_SZ,(BYTE*)&user,dwLength) != ERROR_SUCCESS) AfxMessageBox("FAIL"); AfxMessageBox("OK"); RegCloseKey(hKey); 首先非常感谢各位的支持,现答复如下:一,我是以Administrator登录的,应该有写入的权限的.二,我的程序是可以正常运行的,可能写进去,可以对项进行读取,修改.三,我在98下面没试过.我想可能主要是RegCreateKeyEx这个函数有用的有问题,因为我按要求自己手工去建一个,修改一些值,重启还是有的,而且修改过的的值也保存了.我的语句如下:DWORD dwDisposition=REG_CREATED_NEW_KEY;::RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\MyAppConfig",0,NULL,REG_OPTION_VOLATILE,KEY_ALL_ACCESS,NULL,&m_hKey,&dwDisposition);不知为什么?请各位帮忙,谢谢! 你必须先把HKEY_LOCAL_MACHINE用RegCreateKeyEx打开!!!msdn:The key identified by the hKey parameter must have been opened with KEY_CREATE_SUB_KEY access. To open the key, use the RegCreateKeyEx or RegOpenKeyEx function. 我试了,这样子在2000下是可以的: DWORD dwCreate; HKEY m_keyOpen,m_keyCreate; ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,NULL,0,0, &m_keyOpen); ::RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\aaa",0,NULL,0,0,NULL,&m_keyCreate,&dwCreate); RegCloseKey(m_keyCreate); RegCloseKey(m_keyOpen); 你在RegCreateKeyEx中用了REG_OPTION_VOLATILE, 所有修改只保存在内存中。应设为REG_OPTION_NON_VOLITILE // Registry.hclass CRegistry{public: CRegistry(); CRegistry( HKEY, const char * ); ~CRegistry(); BOOL Open( HKEY, const char * ); BOOL Close( void ); BOOL IsOpen( void ); BOOL ReadDWORD( const char *, DWORD *, DWORD *pdwLastError = NULL ); BOOL ReadString( const char *, LPVOID, int, DWORD *pdwLastError = NULL ); char **ReadMultipleStrings( const char *, DWORD *pdwLastError = NULL ); static void DeleteList( char ** ); BOOL WriteDWORD( const char *, DWORD, DWORD *pdwLastError = NULL ); BOOL WriteString( const char *, LPVOID, DWORD *pdwLastError = NULL ); BOOL Write( const char *, LPVOID, DWORD, int ); static BOOL CreateKey( HKEY, const char *, const char * ); static BOOL DeleteKey( HKEY, const char * ); BOOL Read( const char *, LPVOID, int );protected: HKEY m_hKey; DWORD m_dwLastError; int m_nSize; char *m_strUseKey;// BOOL Read( const char *, LPVOID, int );}; // Registry.cpp#include "stdafx.h"#include "Registry.h"CRegistry::CRegistry(){ m_hKey = NULL; Open( m_hKey, m_strUseKey );}CRegistry::CRegistry( HKEY hKey, const char *lpszSubKey ){ m_hKey = NULL; Open( hKey, lpszSubKey );}CRegistry::~CRegistry(){ Close();}BOOL CRegistry::Open( HKEY hKey, const char *lpszSubKey ){ Close(); if( ::RegOpenKeyEx( hKey, lpszSubKey, 0, KEY_ALL_ACCESS, &m_hKey ) != ERROR_SUCCESS ){ m_hKey = NULL; m_dwLastError = GetLastError(); return( FALSE ); } return( TRUE );}BOOL CRegistry::Close( void ){ BOOL bRet = TRUE; if( m_hKey == NULL ) return( FALSE ); bRet = ( ::RegCloseKey( m_hKey ) == ERROR_SUCCESS ); m_hKey = NULL; return( bRet );}BOOL CRegistry::IsOpen( void ){ return( m_hKey != NULL );}BOOL CRegistry::Read( const char *lpszValueName, LPVOID lpReturnBuffer, int nSize ){ if( m_hKey == NULL ) return( FALSE ); DWORD dwSize = (DWORD) nSize; BOOL bRet = ( ::RegQueryValueEx( m_hKey, lpszValueName, NULL, NULL, (unsigned char *) lpReturnBuffer, &dwSize ) == ERROR_SUCCESS ); m_dwLastError = GetLastError(); return( bRet );}BOOL CRegistry::ReadDWORD( const char *lpszValueName, DWORD *pdwData, DWORD *pdwLastError ){ if( m_hKey == NULL ) return( FALSE ); BOOL bRet = Read( lpszValueName, pdwData, sizeof( DWORD ) ); if( pdwLastError != NULL ) *pdwLastError = m_dwLastError; return( bRet );}BOOL CRegistry::ReadString( const char *lpszValueName, LPVOID lpReturnBuffer, int nSize, DWORD *pdwLastError ){ if( m_hKey == NULL ) return( FALSE ); char *lpWork = (char *) lpReturnBuffer; lpWork[0] = 0; BOOL bRet = Read( lpszValueName, lpReturnBuffer, nSize ); if( pdwLastError != NULL ) *pdwLastError = m_dwLastError; return( bRet );}char **CRegistry::ReadMultipleStrings( const char *lpszValueName, DWORD *pdwLastError ){ char szEntireString[2500]; if( !ReadString( lpszValueName, szEntireString, 2500, pdwLastError ) ) return( NULL ); if( szEntireString[0] == 0 ) return( NULL ); int nCount = 0; if( szEntireString[strlen(szEntireString)-1] != ';' ) nCount = 1; char *pPointer = szEntireString; do{ pPointer = strstr( pPointer, ";" ); if( pPointer != NULL ){ nCount++; pPointer++; } } while( pPointer != NULL ); int i = 0; char *pEnd; char **pList = (char **) new char [(nCount+3)*sizeof(char *)]; if( pList == NULL ) return( NULL ); memset( pList, 0, ( nCount + 3 ) * sizeof(char *) ); pPointer = szEntireString; do{ pEnd = strstr( pPointer, ";" ); int nSize = strlen( pPointer ); if( pEnd != NULL ) nSize = pEnd - pPointer; pList[i] = new char [nSize+3]; if( pList[i] != NULL ){ memset( pList[i], 0, nSize + 3 ); memcpy( pList[i], pPointer, nSize ); } else pEnd = NULL; pPointer = pEnd; if( pPointer != NULL ) pPointer++; i++; } while( pPointer != NULL && pPointer[0] != 0 ); return( pList );}void CRegistry::DeleteList( char **pList ){ if( pList == NULL ) return; int i = 0; while( pList[i] != NULL ){ delete [] pList[i]; i++; } delete pList;}BOOL CRegistry::WriteDWORD( const char *lpszValueName, DWORD dwData, DWORD *pdwLastError ){ if( m_hKey == NULL ) return( FALSE ); m_nSize = sizeof( DWORD ); BOOL bRet = Write( lpszValueName, &dwData, REG_DWORD, sizeof( DWORD ) ); if( pdwLastError != NULL ) *pdwLastError = m_dwLastError; return( bRet );}BOOL CRegistry::WriteString( const char *lpszValueName, LPVOID lpData, DWORD *pdwLastError ){ if( m_hKey == NULL ) return( FALSE ); m_nSize = 2000; BOOL bRet = Write( lpszValueName, lpData, REG_SZ, (DWORD) strlen( (const char *) lpData ) + 1 ); if( pdwLastError != NULL ) *pdwLastError = m_dwLastError; return( bRet );}BOOL CRegistry::Write( const char *lpszValueName, LPVOID lpData, DWORD dwType, int nSize ){ if( m_hKey == NULL ) return( FALSE ); DWORD dwSize = (DWORD) m_nSize; BOOL bRet = ( ::RegSetValueEx( m_hKey, lpszValueName, 0, dwType, (unsigned char *) lpData, nSize ) == ERROR_SUCCESS ); m_dwLastError = GetLastError(); return( bRet );}BOOL CRegistry::CreateKey( HKEY hKey, const char *lpszSubKey, const char *lpszClass ){ HKEY hOpenedKey; DWORD dwDisposition; DWORD dwLastError; BOOL bRet = ( ::RegCreateKeyEx( hKey, lpszSubKey, 0, (char *) lpszClass, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hOpenedKey, &dwDisposition ) == ERROR_SUCCESS ); if( bRet ) ::RegCloseKey( hOpenedKey ); dwLastError = GetLastError(); return( bRet );}BOOL CRegistry::DeleteKey( HKEY hKey, const char *lpszSubKey ){ BOOL bRet; DWORD dwLastError; bRet = ( ::RegDeleteKey( hKey, lpszSubKey ) == ERROR_SUCCESS ); dwLastError = GetLastError(); return( bRet );} 求助关于一个典型的MFC问题,详细见内(给出可靠答案送一百分) 关于IXMLHTTPRequest问题 ectc手机怎么样? 请问怎样用MFC编程改变WebBrowser中网页的页面大小和字体大小 MFC的组合框控件问题 那位大虾知道什么是匈牙利记法?谢谢 哪里有hook的资源,谢谢提供 名列榜首,高中状元,散分 我用CAsyncSocket编通信时server端向CLIENT端发送数据时,CLIENT端接收不到 为什么我的非模式对话框显示不出来? 加急!!!!!!加急!!! richedit和getpixel
HKEY hKey;
DWORD dwDisposition;
DWORD dwLength=20;
CHAR user[10];
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,"NETWORK\\Logon",0,NULL,REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition)!=ERROR_SUCCESS)
return TRUE;
if (RegQueryValueEx(hKey,"username",NULL,NULL,(LPBYTE)&user,&dwLength)
!= ERROR_SUCCESS)
AfxMessageBox("FAIL");
AfxMessageBox(user);
RegCloseKey(hKey);删注册表值;
HKEY hKey;
DWORD dwDisposition;
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,NULL,REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition)!=ERROR_SUCCESS)
{
AfxMessageBox("FAIL");
return;
}
if (RegDeleteValue(hKey,"TimeTool")!= ERROR_SUCCESS)
AfxMessageBox("FAIL");
AfxMessageBox("OK");
RegCloseKey(hKey); 写注册表值;
HKEY hKey;
DWORD dwDisposition;
DWORD dwLength=20;
CHAR user[12] = "F:\\pass.exe";
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,NULL,REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition)!=ERROR_SUCCESS)
{
AfxMessageBox("FAIL");
return;
}
if (RegSetValueEx(hKey,"TimeTool",0,REG_SZ,(BYTE*)&user,dwLength)
!= ERROR_SUCCESS)
AfxMessageBox("FAIL");
AfxMessageBox("OK");
RegCloseKey(hKey);
一,我是以Administrator登录的,应该有写入的权限的.
二,我的程序是可以正常运行的,可能写进去,可以对项进行读取,修改.
三,我在98下面没试过.
我想可能主要是RegCreateKeyEx这个函数有用的有问题,因为我按要求自己手工去建一个,修改一些值,重启还是有的,而且修改过的的值也保存了.
我的语句如下:
DWORD dwDisposition=REG_CREATED_NEW_KEY;
::RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\MyAppConfig",0,NULL,REG_OPTION_VOLATILE,KEY_ALL_ACCESS,NULL,&m_hKey,&dwDisposition);不知为什么?请各位帮忙,谢谢!
The key identified by the hKey parameter must have been opened with KEY_CREATE_SUB_KEY access. To open the key, use the RegCreateKeyEx or RegOpenKeyEx function.
DWORD dwCreate;
HKEY m_keyOpen,m_keyCreate;
::RegOpenKeyEx(HKEY_LOCAL_MACHINE,NULL,0,0,
&m_keyOpen);
::RegCreateKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\\aaa",0,NULL,0,0,NULL,&m_keyCreate,&dwCreate);
RegCloseKey(m_keyCreate);
RegCloseKey(m_keyOpen);
{public:
CRegistry();
CRegistry( HKEY, const char * );
~CRegistry(); BOOL Open( HKEY, const char * );
BOOL Close( void );
BOOL IsOpen( void ); BOOL ReadDWORD( const char *, DWORD *, DWORD *pdwLastError = NULL );
BOOL ReadString( const char *, LPVOID, int, DWORD *pdwLastError = NULL );
char **ReadMultipleStrings( const char *, DWORD *pdwLastError = NULL );
static void DeleteList( char ** ); BOOL WriteDWORD( const char *, DWORD, DWORD *pdwLastError = NULL );
BOOL WriteString( const char *, LPVOID, DWORD *pdwLastError = NULL );
BOOL Write( const char *, LPVOID, DWORD, int ); static BOOL CreateKey( HKEY, const char *, const char * );
static BOOL DeleteKey( HKEY, const char * );
BOOL Read( const char *, LPVOID, int );protected:
HKEY m_hKey;
DWORD m_dwLastError;
int m_nSize;
char *m_strUseKey;
// BOOL Read( const char *, LPVOID, int );};
#include "Registry.h"CRegistry::CRegistry()
{ m_hKey = NULL;
Open( m_hKey, m_strUseKey );}CRegistry::CRegistry( HKEY hKey, const char *lpszSubKey )
{ m_hKey = NULL;
Open( hKey, lpszSubKey );}CRegistry::~CRegistry()
{ Close();}BOOL CRegistry::Open( HKEY hKey, const char *lpszSubKey )
{ Close(); if( ::RegOpenKeyEx( hKey, lpszSubKey, 0, KEY_ALL_ACCESS, &m_hKey ) != ERROR_SUCCESS ){
m_hKey = NULL;
m_dwLastError = GetLastError();
return( FALSE );
} return( TRUE );}BOOL CRegistry::Close( void )
{
BOOL bRet = TRUE; if( m_hKey == NULL )
return( FALSE ); bRet = ( ::RegCloseKey( m_hKey ) == ERROR_SUCCESS );
m_hKey = NULL; return( bRet );}BOOL CRegistry::IsOpen( void )
{ return( m_hKey != NULL );}BOOL CRegistry::Read( const char *lpszValueName, LPVOID lpReturnBuffer, int nSize )
{ if( m_hKey == NULL )
return( FALSE ); DWORD dwSize = (DWORD) nSize;
BOOL bRet = ( ::RegQueryValueEx( m_hKey, lpszValueName, NULL, NULL, (unsigned char *) lpReturnBuffer, &dwSize ) == ERROR_SUCCESS ); m_dwLastError = GetLastError(); return( bRet );}BOOL CRegistry::ReadDWORD( const char *lpszValueName, DWORD *pdwData, DWORD *pdwLastError )
{ if( m_hKey == NULL )
return( FALSE ); BOOL bRet = Read( lpszValueName, pdwData, sizeof( DWORD ) ); if( pdwLastError != NULL )
*pdwLastError = m_dwLastError; return( bRet );}BOOL CRegistry::ReadString( const char *lpszValueName, LPVOID lpReturnBuffer, int nSize, DWORD *pdwLastError )
{ if( m_hKey == NULL )
return( FALSE ); char *lpWork = (char *) lpReturnBuffer;
lpWork[0] = 0;
BOOL bRet = Read( lpszValueName, lpReturnBuffer, nSize ); if( pdwLastError != NULL )
*pdwLastError = m_dwLastError; return( bRet );}char **CRegistry::ReadMultipleStrings( const char *lpszValueName, DWORD *pdwLastError )
{
char szEntireString[2500]; if( !ReadString( lpszValueName, szEntireString, 2500, pdwLastError ) )
return( NULL ); if( szEntireString[0] == 0 )
return( NULL ); int nCount = 0;
if( szEntireString[strlen(szEntireString)-1] != ';' )
nCount = 1;
char *pPointer = szEntireString;
do{
pPointer = strstr( pPointer, ";" );
if( pPointer != NULL ){
nCount++;
pPointer++;
}
} while( pPointer != NULL ); int i = 0;
char *pEnd;
char **pList = (char **) new char [(nCount+3)*sizeof(char *)];
if( pList == NULL )
return( NULL );
memset( pList, 0, ( nCount + 3 ) * sizeof(char *) ); pPointer = szEntireString;
do{ pEnd = strstr( pPointer, ";" );
int nSize = strlen( pPointer );
if( pEnd != NULL )
nSize = pEnd - pPointer; pList[i] = new char [nSize+3];
if( pList[i] != NULL ){
memset( pList[i], 0, nSize + 3 );
memcpy( pList[i], pPointer, nSize );
}
else pEnd = NULL; pPointer = pEnd;
if( pPointer != NULL )
pPointer++; i++; } while( pPointer != NULL && pPointer[0] != 0 ); return( pList );}void CRegistry::DeleteList( char **pList )
{ if( pList == NULL )
return; int i = 0;
while( pList[i] != NULL ){
delete [] pList[i];
i++;
}
delete pList;}BOOL CRegistry::WriteDWORD( const char *lpszValueName, DWORD dwData, DWORD *pdwLastError )
{ if( m_hKey == NULL )
return( FALSE ); m_nSize = sizeof( DWORD );
BOOL bRet = Write( lpszValueName, &dwData, REG_DWORD, sizeof( DWORD ) ); if( pdwLastError != NULL )
*pdwLastError = m_dwLastError; return( bRet );}BOOL CRegistry::WriteString( const char *lpszValueName, LPVOID lpData, DWORD *pdwLastError )
{ if( m_hKey == NULL )
return( FALSE ); m_nSize = 2000;
BOOL bRet = Write( lpszValueName, lpData, REG_SZ, (DWORD) strlen( (const char *) lpData ) + 1 ); if( pdwLastError != NULL )
*pdwLastError = m_dwLastError; return( bRet );}BOOL CRegistry::Write( const char *lpszValueName, LPVOID lpData, DWORD dwType, int nSize )
{ if( m_hKey == NULL )
return( FALSE ); DWORD dwSize = (DWORD) m_nSize;
BOOL bRet = ( ::RegSetValueEx( m_hKey, lpszValueName, 0, dwType, (unsigned char *) lpData, nSize ) == ERROR_SUCCESS ); m_dwLastError = GetLastError(); return( bRet );}BOOL CRegistry::CreateKey( HKEY hKey, const char *lpszSubKey, const char *lpszClass )
{
HKEY hOpenedKey;
DWORD dwDisposition;
DWORD dwLastError; BOOL bRet = ( ::RegCreateKeyEx( hKey, lpszSubKey, 0, (char *) lpszClass, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hOpenedKey, &dwDisposition ) == ERROR_SUCCESS );
if( bRet ) ::RegCloseKey( hOpenedKey );
dwLastError = GetLastError(); return( bRet );}BOOL CRegistry::DeleteKey( HKEY hKey, const char *lpszSubKey )
{
BOOL bRet;
DWORD dwLastError; bRet = ( ::RegDeleteKey( hKey, lpszSubKey ) == ERROR_SUCCESS );
dwLastError = GetLastError(); return( bRet );}