?? registryex.cpp
字號:
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(scStringList.IsSerializable());
scStringList.RemoveAll();
scStringList.Serialize(ar);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Read (LPCTSTR pszKey, CByteArray& bcArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
int OldSize = bcArray.GetSize();
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(bcArray.IsSerializable());
bcArray.RemoveAll();
bcArray.SetSize(10);
bcArray.Serialize(ar);
bcArray.SetSize(OldSize);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Read (LPCTSTR pszKey, CDWordArray& dwcArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
int OldSize = dwcArray.GetSize();
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(dwcArray.IsSerializable());
dwcArray.RemoveAll();
dwcArray.SetSize(10);
dwcArray.Serialize(ar);
dwcArray.SetSize(OldSize);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Read (LPCTSTR pszKey, CWordArray& wcArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
int OldSize = wcArray.GetSize();
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(wcArray.IsSerializable());
wcArray.RemoveAll();
wcArray.SetSize(10);
wcArray.Serialize(ar);
wcArray.SetSize(OldSize);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Read (LPCTSTR pszKey, CStringArray& scArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 4096;
int OldSize = scArray.GetSize();
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
m_Info.lMessage = lReturn;
m_Info.dwType = dwType;
m_Info.dwSize = dwData;
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(scArray.IsSerializable());
scArray.RemoveAll();
scArray.SetSize(10);
scArray.Serialize(ar);
scArray.SetSize(OldSize);
ar.Close();
file.Close();
}
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Read(LPCTSTR pszKey, LPRECT& rcRect)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 30;
CDWordArray dwcArray;
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(dwcArray.IsSerializable());
dwcArray.RemoveAll();
dwcArray.SetSize(5);
dwcArray.Serialize(ar);
ar.Close();
file.Close();
rcRect->top = dwcArray.GetAt(0);
rcRect->bottom = dwcArray.GetAt(1);
rcRect->left = dwcArray.GetAt(2);
rcRect->right = dwcArray.GetAt(3);
}
m_Info.lMessage = lReturn;
m_Info.dwType = REG_RECT;
m_Info.dwSize = sizeof(RECT);
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::Read(LPCTSTR pszKey, LPPOINT& lpPoint)
{
ASSERT(m_hKey);
ASSERT(pszKey);
const int iMaxChars = 20;
CDWordArray dwcArray;
DWORD dwType;
DWORD dwData = iMaxChars;
BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR));
ASSERT(byData);
LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType,
byData, &dwData);
if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY)
{
ASSERT(dwData < iMaxChars);
CMemFile file(byData, dwData);
CArchive ar(&file, CArchive::load);
ar.m_bForceFlat = FALSE;
ASSERT(ar.IsLoading());
ASSERT(dwcArray.IsSerializable());
dwcArray.RemoveAll();
dwcArray.SetSize(5);
dwcArray.Serialize(ar);
ar.Close();
file.Close();
lpPoint->x = dwcArray.GetAt(0);
lpPoint->y = dwcArray.GetAt(1);
}
m_Info.lMessage = lReturn;
m_Info.dwType = REG_POINT;
m_Info.dwSize = sizeof(POINT);
if(byData)
{
free(byData);
byData = NULL;
}
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::DeleteValue (LPCTSTR pszValue){ ASSERT(m_hKey);
LONG lReturn = RegDeleteValue(m_hKey, pszValue);
m_Info.lMessage = lReturn;
m_Info.dwType = 0L;
m_Info.dwSize = 0L;
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::DeleteValueKey (HKEY hKeyRoot, LPCTSTR pszPath)
{
ASSERT(pszPath);
ASSERT(hKeyRoot);
LONG lReturn = RegDeleteKey(hKeyRoot, pszPath);
m_Info.lMessage = lReturn;
m_Info.dwType = 0L;
m_Info.dwSize = 0L;
if(lReturn == ERROR_SUCCESS)
return TRUE;
return FALSE;
}
// for debugging
void ShowSysMsg(LONG res, char* str, char* file, DWORD line)
{
char msg[256];
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
res,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Defaultlanguage
(LPTSTR) &lpMsgBuf,
0,
NULL );
sprintf(msg, "%u %s\n%s %u", res, str, file, line);
MessageBox( NULL, msg, (char*)lpMsgBuf, MB_OK | MB_ICONINFORMATION );
LocalFree( lpMsgBuf );
}
CString CRegistryEx::FindKey (LPCTSTR pszSearchRoot, LPCTSTR pszKey, LPCTSTR pszValue)
{
CString strResult;
ASSERT(m_hKey);
ASSERT(pszSearchRoot);
ASSERT(pszKey);
ASSERT(pszValue);
// read key from registry based on search root; determine value
CRegistryEx registry;
registry.Open( HKEY_LOCAL_MACHINE, pszSearchRoot );
CString strValueFound;
registry.Read( pszKey, strValueFound );
registry.Close();
CString strValueWanted = pszValue;
strValueFound.MakeUpper();
strValueWanted.MakeUpper();
if ( strValueFound == strValueWanted )
{
strResult = pszSearchRoot;
}
else
{
CStringArray aKeys;
if ( ListKey( pszSearchRoot, aKeys ) )
{
int nCount;
const int nSize = aKeys.GetSize();
for ( nCount = 0; nCount < nSize && strResult.IsEmpty(); nCount++ )
{
const CString strKey = CString( pszSearchRoot ) + "\\" + aKeys[ nCount ];
CStringArray aSubKeys;
if ( ListKey( strKey, aSubKeys ) )
{
strResult = FindKey( strKey, pszKey, pszValue );
}
}
}
}
return strResult;
}
BOOL CRegistryEx::ListKey (LPCTSTR pszKey, CStringArray& scArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwSubKeys = 0;
DWORD idw;
LONG lReturn;
HKEY hQKey = NULL;
CString szSubKeyName;
TCHAR szStr[200];
DWORD dwSubKeyNameLen;
FILETIME LastFileTime;
BOOL Ok;
lReturn = RegOpenKeyEx (m_hKey, pszKey, 0L,
KEY_READ, &hQKey);
Ok = (lReturn == ERROR_SUCCESS);
m_Info.lMessage = lReturn;
m_Info.dwSize = 0L;
m_Info.dwType = 0L;
if (Ok) {
lReturn = RegQueryInfoKey( hQKey, NULL, NULL, NULL
, &dwSubKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL );
m_Info.lMessage = lReturn;
m_Info.dwType = 0;
m_Info.dwSize = 0;
Ok = (lReturn == ERROR_SUCCESS);
}
if (Ok) {
scArray.RemoveAll();
}
for ( idw=0; ((idw<dwSubKeys) && Ok); idw++) {
dwSubKeyNameLen = 200;
lReturn = RegEnumKeyEx(
hQKey
, idw
, szStr
, &dwSubKeyNameLen
, NULL
, NULL
, NULL
, &LastFileTime
);
m_Info.lMessage = lReturn;
m_Info.dwType = 0;
m_Info.dwSize = 0;
Ok = (lReturn == ERROR_SUCCESS);
if (Ok) {
// Add name to array
szSubKeyName = szStr;
scArray.Add( szSubKeyName );
}
else {
ShowSysMsg(lReturn, "RegEnumKeyEx", __FILE__, __LINE__);
}
}
if (hQKey != NULL) {
RegCloseKey (hQKey);
hQKey = NULL;
}
if(Ok)
return TRUE;
return FALSE;
}
BOOL CRegistryEx::ListValues (LPCTSTR pszKey, CStringArray& scArray)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwValues = 0;
DWORD idw;
LONG lReturn;
HKEY hQKey = NULL;
CString szValueName;
TCHAR szStr[200];
DWORD dwValueNameLen;
DWORD dwType;
BOOL Ok;
lReturn = RegOpenKeyEx (m_hKey, pszKey, 0L,
KEY_READ, &hQKey);
Ok = (lReturn == ERROR_SUCCESS);
m_Info.lMessage = lReturn;
m_Info.dwSize = 0L;
m_Info.dwType = 0L;
if (Ok) {
lReturn = RegQueryInfoKey( hQKey, NULL, NULL, NULL
, NULL, NULL, NULL, &dwValues, NULL, NULL, NULL, NULL );
m_Info.lMessage = lReturn;
m_Info.dwType = 0;
m_Info.dwSize = 0;
Ok = (lReturn == ERROR_SUCCESS);
}
if (Ok) {
scArray.RemoveAll();
}
for ( idw=0; ((idw<dwValues) && Ok); idw++) {
dwValueNameLen = 200;
lReturn = RegEnumValue(
hQKey // handle to key to query
, idw // index of value to query
, szStr // address of buffer for value string
, &dwValueNameLen // address for size of value buffer
, NULL // reserved
, &dwType // address of buffer for type code
, NULL // address of buffer for value data
, NULL // address for size of data buffer
);
m_Info.lMessage = lReturn;
m_Info.dwType = 0;
m_Info.dwSize = 0;
Ok = (lReturn == ERROR_SUCCESS);
if (Ok) {
// Add name to array
szValueName = szStr;
scArray.Add( szValueName );
}
else {
ShowSysMsg(lReturn, "RegEnumValue", __FILE__, __LINE__);
}
}
if (hQKey != NULL) {
RegCloseKey (hQKey);
hQKey = NULL;
}
if(Ok)
return TRUE;
return FALSE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -