用AfxGetApp()->WriteProfileString();试一下啊

解决方案 »

  1.   

    看一下你在RegCreateKeyEx中是否设置了REG_OPTION_VOLATILE
      

  2.   

    读注册表值;
    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);
      

  3.   

    首先非常感谢各位的支持,现答复如下:
    一,我是以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);不知为什么?请各位帮忙,谢谢!
      

  4.   

    你必须先把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.
      

  5.   

    我试了,这样子在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);
      

  6.   

    你在RegCreateKeyEx中用了REG_OPTION_VOLATILE, 所有修改只保存在内存中。应设为REG_OPTION_NON_VOLITILE
      

  7.   

    // 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 );};
      

  8.   

    // 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 );}