CBXShell/CBXManager/RegManager.h
2017-02-25 20:45:53 +01:00

164 lines
4.5 KiB
C++

#ifndef _REGMANAGER_79AE66E4_84E2_45A1_BF4F_43AA714BE55F_
#define _REGMANAGER_79AE66E4_84E2_45A1_BF4F_43AA714BE55F_
#pragma once
#include <windows.h>
#pragma comment(lib,"advapi32.lib")
#include <shlwapi.h>
#pragma comment(lib,"shlwapi.lib")
#define CBX_MUTEX_GLOBAL L"Global\\{64DEE47D-9669-4430-9D5C-304867F87B51}"
#define CBX_MGRMUTEX L"Local\\{50D9CBE6-C168-4901-8CC9-2A7C97E558F7}"
#define CBX_GUID_KEY _T("{9E6ECB90-5A61-42BD-B851-D3297D9C7F39}") //38+1 TCHAR
#define CBX_GUID_KEY_SLEN 39
#define CBX_APP_KEY _T("Software\\T800 Productions\\{9E6ECB90-5A61-42BD-B851-D3297D9C7F39}")
// per-user settings (HKCU)
// thumbnail handler keys
#define CBX_ZIPTH_KEY _T("SOFTWARE\\Classes\\.ZIP\\shellex\\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}")
#define CBX_CBZTH_KEY _T("SOFTWARE\\Classes\\.CBZ\\shellex\\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}")
#define CBX_RARTH_KEY _T("SOFTWARE\\Classes\\.RAR\\shellex\\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}")
#define CBX_CBRTH_KEY _T("SOFTWARE\\Classes\\.CBR\\shellex\\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}")
// infotip handler keys
#define CBX_ZIPIH_KEY _T("SOFTWARE\\Classes\\.ZIP\\shellex\\{00021500-0000-0000-C000-000000000046}")
#define CBX_CBZIH_KEY _T("SOFTWARE\\Classes\\.CBZ\\shellex\\{00021500-0000-0000-C000-000000000046}")
#define CBX_RARIH_KEY _T("SOFTWARE\\Classes\\.RAR\\shellex\\{00021500-0000-0000-C000-000000000046}")
#define CBX_CBRIH_KEY _T("SOFTWARE\\Classes\\.CBR\\shellex\\{00021500-0000-0000-C000-000000000046}")
// cbx types
#define CBX_NONE 0
#define CBX_ZIP 1
#define CBX_CBZ 2
#define CBX_RAR 3
#define CBX_CBR 4
//#define CBX_SORT 5
class CRegManager
{
public:
//CRegManager(void){}
//virtual ~CRegManager(void){}
public:
///////////////
// sort option
BOOL IsSortOpt()
{
DWORD d;
CRegKey rk;
if (ERROR_SUCCESS==rk.Open(HKEY_CURRENT_USER, CBX_APP_KEY, KEY_READ))
{
if (ERROR_SUCCESS==rk.QueryDWORDValue(_T("NoSort"), d))
return (d==FALSE);
}
return TRUE;
}
void SetSortOpt(BOOL bSort)
{
CRegKey rk;
if (ERROR_SUCCESS==rk.Create(HKEY_CURRENT_USER, CBX_APP_KEY, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE))
rk.SetDWORDValue(_T("NoSort"), (DWORD)(bSort ? FALSE : TRUE));
}
///////////////////////////////
// check for thumbnail handlers
BOOL HasTH(int cbxType)
{
ATLASSERT(cbxType>CBX_NONE);
ULONG n=CBX_GUID_KEY_SLEN;
TCHAR s[CBX_GUID_KEY_SLEN];
CRegKey rk;
if (ERROR_SUCCESS==rk.Open(HKEY_CURRENT_USER, GetTHKeyName(cbxType), KEY_READ))
{
if (ERROR_SUCCESS==rk.QueryStringValue(NULL, s, &n))
{
if (0==StrCmpI(s, CBX_GUID_KEY))
return TRUE;
}
}
return FALSE;
}
/////////////////////////////
// check for infotip handlers
BOOL HasIH(int cbxType)
{
ATLASSERT(cbxType>CBX_NONE);
ULONG n=CBX_GUID_KEY_SLEN;
TCHAR s[CBX_GUID_KEY_SLEN];
CRegKey rk;
if (ERROR_SUCCESS==rk.Open(HKEY_CURRENT_USER, GetIHKeyName(cbxType), KEY_READ))
{
if (ERROR_SUCCESS==rk.QueryStringValue(NULL, s, &n))
{
if (StrCmpI(s, CBX_GUID_KEY)==0)
return TRUE;
}
}
return FALSE;
}
/////////////////////////
// set thumbnail / infotip handlers
void SetHandlers(int cbxType, BOOL bSet)
{
ATLASSERT(cbxType>CBX_NONE);
if (bSet)
{
//thumbnail
CRegKey rkt, rki;
if (ERROR_SUCCESS==rkt.Create(HKEY_CURRENT_USER, GetTHKeyName(cbxType), NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE))
rkt.SetStringValue(NULL, CBX_GUID_KEY);
//infotip
if (ERROR_SUCCESS==rki.Create(HKEY_CURRENT_USER, GetIHKeyName(cbxType), NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE))
rki.SetStringValue(NULL, CBX_GUID_KEY);
}
else
{
//thumbnail
if (HasTH(cbxType)) RegDeleteKey(HKEY_CURRENT_USER, GetTHKeyName(cbxType));
//infotip
if (HasIH(cbxType)) RegDeleteKey(HKEY_CURRENT_USER, GetIHKeyName(cbxType));
}
}
//get handler reg key names
LPCTSTR GetTHKeyName(int cbxType)
{
ATLASSERT(cbxType>CBX_NONE);
switch (cbxType)
{
case CBX_ZIP: return CBX_ZIPTH_KEY;
case CBX_CBZ: return CBX_CBZTH_KEY;
case CBX_RAR: return CBX_RARTH_KEY;
case CBX_CBR: return CBX_CBRTH_KEY;
default:break;
}
return NULL;
}
LPCTSTR GetIHKeyName(int cbxType)
{
ATLASSERT(cbxType>CBX_NONE);
switch (cbxType)
{
case CBX_ZIP: return CBX_ZIPIH_KEY;
case CBX_CBZ: return CBX_CBZIH_KEY;
case CBX_RAR: return CBX_RARIH_KEY;
case CBX_CBR: return CBX_CBRIH_KEY;
default:break;
}
return NULL;
}
};
#endif//_REGMANAGER_79AE66E4_84E2_45A1_BF4F_43AA714BE55F_