⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 registry.cpp

📁 cab文件压缩、解压程序源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//           2 get info about
//-----------------------------------------------------------------------
BOOL CRegistry::EnumerateSubKeys(DWORD index, LPTSTR name, DWORD &name_size)
{
    if(!m_bStatus)
        return FALSE;
    m_nErrorCode=RegEnumKeyEx(m_hKey,index,name,&name_size,NULL,NULL,0,NULL);
    return (m_nErrorCode==ERROR_SUCCESS);
}

//-----------------------------------------------------------------------
// Pre     : If a pointer 2 value data is specified (retrieving value data too)
//           then data_size must not be NULL and the pointed DWORD must hold
//           the size of the data buffer
// Post    : Return TRUE on success
// Globals :
// I/O     :
// Task    : Enumerate values of current key
//           You can use this by calling CountValues 2 get the number of 
//           values, then calling this member with 0-based indexes of value
//           2 get info about
//-----------------------------------------------------------------------
BOOL CRegistry::EnumerateValues(DWORD index, LPTSTR name, DWORD &name_size, DWORD *type, BYTE *data, DWORD *data_size)
{
    if(!m_bStatus)
        return FALSE;
    m_nErrorCode=RegEnumValue(m_hKey,index,name,&name_size,NULL,type,data,data_size);
   return (m_nErrorCode==ERROR_SUCCESS);
}

//-----------------------------------------------------------------------
// Pre     :
// Post    : Return TRUE if info was retrieved OK
// Globals :
// I/O     :
// Task    : Query info about registy key
//-----------------------------------------------------------------------
BOOL CRegistry::GetInfo(LPTSTR  lpszKeyClass, LPDWORD lpcKeyClassSize, // Non-NULL values should be supplied 4 at least
                        LPDWORD lpcSubKeyCount,                        // parameters from one line
                        LPDWORD lpcbLongestSubKeyName,
                        LPDWORD lpcbLargestSubKeyClass,
                        LPDWORD lpcValueCount,
                        LPDWORD lpcbLongestValueName,
                        LPDWORD lpcbLargestValueData,
                        LPDWORD lpcbSecurityDescriptorSize,
                        PFILETIME lpLastWriteTime) // NT only
{
#ifdef _WIN95
    if(lpLastWriteTime)
        ASSERTX(FALSE); // This should be used only on NT, because on Windows 95 it gets filled with 0s
#endif

    if(!m_bStatus)
        return FALSE;
    m_nErrorCode=RegQueryInfoKey(m_hKey,lpszKeyClass,lpcKeyClassSize,NULL,
                                 lpcSubKeyCount,lpcbLongestSubKeyName,lpcbLargestSubKeyClass,
                                 lpcValueCount,lpcbLongestValueName,lpcbLargestValueData,
                                 lpcbSecurityDescriptorSize,
                                 lpLastWriteTime);
    return m_nErrorCode==ERROR_SUCCESS;
}

//-----------------------------------------------------------------------
// Pre     :
// Post    : On error returns -1
// Globals :
// I/O     :
// Task    : Return the number of subkeys of this key
//-----------------------------------------------------------------------
DWORD CRegistry::CountSubKeys()
{
    DWORD subkeys;
    if(!GetInfo(NULL,NULL,&subkeys))
        return (DWORD)-1;
    return subkeys;
}

//-----------------------------------------------------------------------
// Pre     :
// Post    : On error returns FALSE
// Globals :
// I/O     :
// Task    : Remove this key and its descendants
//           Because on NT the key 2 be removed must not have subkeys, remove 
//           first all the subkeys
//-----------------------------------------------------------------------
BOOL CRegistry::Delete(BOOL bDeleteSubkeys)
{
    if(!m_bStatus)
        return FALSE;

    BOOL success =TRUE;
    if(bDeleteSubkeys)
    {
        // Attempt 2 delete all subkeys
        DWORD keys =CountSubKeys();
        while(keys>0)
        {
            TCHAR key_name[MAX_PATH];
            DWORD key_name_size =sizeof(key_name);

            // Get a subkey...
            if(EnumerateSubKeys(0,key_name,key_name_size))
            {
                // Got a subkey, now delete it
                CRegistry sub_key(*this,key_name);
                success =sub_key.Delete();
            }

            if(success)
                keys =CountSubKeys();
            else
                break;
        }
    }

    if(success)
    {
        m_nErrorCode=RegDeleteKey(m_hKey,_T(""));
        if(m_nErrorCode==ERROR_SUCCESS)
            Close();
    }

    return success;
}

//-----------------------------------------------------------------------
// Pre     :
// Post    : On error returns -1
// Globals :
// I/O     :
// Task    : Return the number of values in this key
//           This count does not include the default value
//-----------------------------------------------------------------------
DWORD CRegistry::CountValues()
{
    DWORD values;
    if(!GetInfo(NULL,NULL,NULL,NULL,NULL,&values))
        return (DWORD)-1;
    return values;
}

//-----------------------------------------------------------------------
// Pre     :
// Post    : Return TRUE on success
// Globals :
// I/O     :
// Task    : Force saving of registry key data back in the registry
//-----------------------------------------------------------------------
BOOL CRegistry::Flush()
{
    if(!m_bStatus)
        return FALSE;
    m_nErrorCode=RegFlushKey(m_hKey);
    return m_nErrorCode==ERROR_SUCCESS;
}

//-----------------------------------------------------------------------
// Pre     :
// Post    : Return TRUE on success
// Globals :
// I/O     :
// Task    : Conect to a remote computer's HKEY_LOCAL_MACHINE key
//-----------------------------------------------------------------------
BOOL CRegistry::Connect_HKEY_LOCAL_MACHINE(LPCTSTR machine)
{
    Close();

    TCHAR machine_name[MAX_REG_MACHINE_NAME_LEN];
    lstrcpy(machine_name,machine);
    m_nErrorCode=RegConnectRegistry(machine_name,HKEY_LOCAL_MACHINE,&m_hKey);
    if(m_nErrorCode==ERROR_SUCCESS)
        m_bStatus=TRUE;
    else
        m_bStatus=FALSE;

    return m_bStatus;
}

//-----------------------------------------------------------------------
// Pre     :
// Post    : Return TRUE on success
// Globals :
// I/O     :
// Task    : Conect to a remote computer's HKLM key
//-----------------------------------------------------------------------
BOOL CRegistry::Connect_HKEY_USERS(LPCTSTR machine)
{
    Close();

    TCHAR machine_name[MAX_REG_MACHINE_NAME_LEN];
    lstrcpy(machine_name,machine);
    m_nErrorCode=RegConnectRegistry(machine_name,HKEY_USERS,&m_hKey);
    if(m_nErrorCode==ERROR_SUCCESS)
        m_bStatus=TRUE;
    else	  
        m_bStatus=FALSE;

    return m_bStatus;
}

//-----------------------------------------------------------------------
// Pre     :
// Post    :
// Globals :
// I/O     :
// Task    : Close key
//-----------------------------------------------------------------------
void CRegistry::Close()
{
    if(m_bStatus)
        RegCloseKey(m_hKey);

    m_hKey    =NULL;
    m_bStatus =FALSE;
}

//-----------------------------------------------------------------------
// Pre     :
// Post    :
// Globals :
// I/O     :
// Task    : Close registry key before destruction
//-----------------------------------------------------------------------
CRegistry::~CRegistry()
{
    Close();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -