mirror of
https://github.com/ogoguel/activegs-ios.git
synced 2024-12-27 17:29:42 +00:00
329 lines
7.5 KiB
C++
329 lines
7.5 KiB
C++
//- -----------------------------------------------------------------
|
|
//- (C) Copyright 2000 Blake V. Miller
|
|
//- All Rights Reserved.
|
|
//- -----------------------------------------------------------------
|
|
//- File : CGFILTYP.CPP
|
|
//- Author : Blake Miller
|
|
//- Version : June 16, 2000
|
|
//- Purpose : File Type Access
|
|
//- -----------------------------------------------------------------
|
|
|
|
#include "../Common.win32/stdafx.h"
|
|
#include "winerror.h"
|
|
|
|
#ifndef __CGFILTYP_H__
|
|
#include "CGFILTYP.H" // CGCFileTypeAccess
|
|
#endif
|
|
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = "CGFILTYP.CPP";
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
IMPLEMENT_DYNAMIC(CGCFileTypeAccess, CObject)
|
|
|
|
CGCFileTypeAccess::CGCFileTypeAccess()
|
|
{
|
|
}
|
|
|
|
// virtual
|
|
CGCFileTypeAccess::~CGCFileTypeAccess()
|
|
{
|
|
}
|
|
|
|
//- *****************************************************************
|
|
//- Functions Affecting Registry
|
|
//- *****************************************************************
|
|
|
|
// virtual
|
|
BOOL CGCFileTypeAccess::RegSetAllInfo(void)
|
|
{
|
|
RegSetExtension();
|
|
RegSetDocumentType();
|
|
RegSetCLSID();
|
|
RegSetShellInfo();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
// HKEY_CLASSES_ROOT\.<Extension>
|
|
// virtual
|
|
BOOL CGCFileTypeAccess::RegSetExtension(void)
|
|
{
|
|
if( m_csExtension.IsEmpty() ){
|
|
return TRUE;
|
|
}
|
|
|
|
CString csKey = "." + m_csExtension;
|
|
|
|
SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csDocumentClassName);
|
|
|
|
if( !m_csShellOpenCommand.IsEmpty() ){
|
|
csKey += "\\shell\\open\\command";
|
|
SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csShellOpenCommand);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
// HKEY_CLASSES_ROOT\.<Document Type>
|
|
// virtual
|
|
BOOL CGCFileTypeAccess::RegSetDocumentType(void)
|
|
{
|
|
if( m_csDocumentClassName.IsEmpty()){
|
|
return TRUE;
|
|
}
|
|
|
|
CString csKey = m_csDocumentClassName;
|
|
|
|
SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csDocumentDescription);
|
|
|
|
// DefaultIcon
|
|
if( !m_csDocumentDefaultIcon.IsEmpty() ){
|
|
csKey = m_csDocumentClassName;
|
|
csKey += "\\DefaultIcon";
|
|
SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csDocumentDefaultIcon);
|
|
}
|
|
|
|
// shell\open\command
|
|
if( !m_csShellOpenCommand.IsEmpty() ){
|
|
csKey = m_csDocumentClassName;
|
|
csKey += "\\shell\\open\\command";
|
|
SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csShellOpenCommand);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
// HKEY_CLASSES_ROOT\CLSID\<GUID>
|
|
// virtual
|
|
BOOL CGCFileTypeAccess::RegSetCLSID(void)
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
//
|
|
// virtual
|
|
BOOL CGCFileTypeAccess::RegSetShellInfo(void)
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
//- *****************************************************************
|
|
//- Member Variable Get/Set Methods
|
|
//- *****************************************************************
|
|
|
|
void CGCFileTypeAccess::SetExtension(
|
|
LPCTSTR szExtension
|
|
){
|
|
m_csExtension = szExtension;
|
|
}
|
|
void CGCFileTypeAccess::GetExtension(
|
|
CString& csExtension
|
|
) const {
|
|
csExtension = m_csExtension;
|
|
}
|
|
|
|
void CGCFileTypeAccess::SetContentType(
|
|
LPCTSTR szContentType
|
|
){
|
|
m_csContentType = szContentType;
|
|
}
|
|
void CGCFileTypeAccess::GetContentType(
|
|
CString& csContentType
|
|
) const {
|
|
csContentType = m_csContentType;
|
|
}
|
|
|
|
void CGCFileTypeAccess::SetShellOpenCommand(
|
|
LPCTSTR szShellOpenCommand
|
|
){
|
|
m_csShellOpenCommand = szShellOpenCommand;
|
|
}
|
|
void CGCFileTypeAccess::GetShellOpenCommand(
|
|
CString& csShellOpenCommand
|
|
) const {
|
|
csShellOpenCommand = m_csShellOpenCommand;
|
|
}
|
|
|
|
void CGCFileTypeAccess::SetShellNewCommand(
|
|
LPCTSTR szShellNewCommand
|
|
){
|
|
m_csShellNewCommand = szShellNewCommand;
|
|
}
|
|
void CGCFileTypeAccess::GetShellNewCommand(
|
|
CString& csShellNewCommand
|
|
) const {
|
|
csShellNewCommand = m_csShellNewCommand;
|
|
}
|
|
|
|
void CGCFileTypeAccess::SetShellNewFileName(
|
|
LPCTSTR szShellNewFileName
|
|
){
|
|
m_csShellNewFileName = szShellNewFileName;
|
|
}
|
|
void CGCFileTypeAccess::GetShellNewFileName(
|
|
CString& csShellNewFileName
|
|
) const {
|
|
csShellNewFileName = m_csShellNewFileName;
|
|
}
|
|
|
|
void CGCFileTypeAccess::SetDocumentClassName(
|
|
LPCTSTR szDocumentClassName
|
|
){
|
|
m_csDocumentClassName = szDocumentClassName;
|
|
}
|
|
void CGCFileTypeAccess::GetDocumentClassName(
|
|
CString& csDocumentClassName
|
|
) const {
|
|
csDocumentClassName = m_csDocumentClassName;
|
|
}
|
|
|
|
void CGCFileTypeAccess::SetDocumentDescription(
|
|
LPCTSTR szDocumentDescription
|
|
){
|
|
m_csDocumentDescription = szDocumentDescription;
|
|
}
|
|
void CGCFileTypeAccess::GetDocumentDescription(
|
|
CString& csDocumentDescription
|
|
) const {
|
|
csDocumentDescription = m_csDocumentDescription;
|
|
}
|
|
|
|
void CGCFileTypeAccess::SetDocumentCLSID(
|
|
LPCTSTR szDocumentCLSID
|
|
){
|
|
m_csDocumentCLSID = szDocumentCLSID;
|
|
}
|
|
void CGCFileTypeAccess::GetDocumentCLSID(
|
|
CString& csDocumentCLSID
|
|
) const {
|
|
csDocumentCLSID = m_csDocumentCLSID;
|
|
}
|
|
|
|
void CGCFileTypeAccess::SetDocumentCurrentVersion(
|
|
LPCTSTR szDocumentCurrentVersion
|
|
){
|
|
m_csDocumentCurrentVersion = szDocumentCurrentVersion;
|
|
}
|
|
void CGCFileTypeAccess::GetDocumentCurrentVersion(
|
|
CString& csDocumentCurrentVersion
|
|
) const {
|
|
csDocumentCurrentVersion = m_csDocumentCurrentVersion;
|
|
}
|
|
|
|
void CGCFileTypeAccess::SetDocumentDefaultIcon(
|
|
LPCTSTR szDocumentDefaultIcon
|
|
){
|
|
m_csDocumentDefaultIcon = szDocumentDefaultIcon;
|
|
}
|
|
void CGCFileTypeAccess::GetDocumentDefaultIcon(
|
|
CString& csDocumentDefaultIcon
|
|
) const {
|
|
csDocumentDefaultIcon = m_csDocumentDefaultIcon;
|
|
}
|
|
|
|
void CGCFileTypeAccess::SetDocumentShellOpenCommand(
|
|
LPCTSTR szDocumentShellOpenCommand
|
|
){
|
|
m_csDocumentShellOpenCommand = szDocumentShellOpenCommand;
|
|
}
|
|
void CGCFileTypeAccess::GetDocumentShellOpenCommand(
|
|
CString& csDocumentShellOpenCommand
|
|
) const {
|
|
csDocumentShellOpenCommand = m_csDocumentShellOpenCommand;
|
|
}
|
|
|
|
// virtual
|
|
void CGCFileTypeAccess::ClearAllData(void)
|
|
{
|
|
m_csExtension.Empty();
|
|
m_csContentType.Empty();
|
|
m_csShellOpenCommand.Empty();
|
|
m_csShellNewCommand.Empty();
|
|
m_csShellNewFileName.Empty();
|
|
|
|
m_csDocumentClassName.Empty();
|
|
m_csDocumentDescription.Empty();
|
|
m_csDocumentCLSID.Empty();
|
|
m_csDocumentCurrentVersion.Empty();
|
|
m_csDocumentDefaultIcon.Empty();
|
|
m_csDocumentShellOpenCommand.Empty();
|
|
}
|
|
|
|
//- -----------------------------------------------------------------
|
|
//- set string value into registry
|
|
|
|
BOOL CGCFileTypeAccess::SetRegistryValue(
|
|
HKEY hOpenKey,
|
|
LPCTSTR szKey,
|
|
LPCTSTR szValue,
|
|
LPCTSTR szData
|
|
){
|
|
|
|
// OG HACK
|
|
// Write to the Current User instead of Class Root : bypass UAC !!!
|
|
|
|
hOpenKey = HKEY_CURRENT_USER ;
|
|
CString newKey;
|
|
newKey.Format("Software\\Classes\\%s",szKey);
|
|
szKey = (const char*)newKey;
|
|
|
|
// validate input
|
|
if( !hOpenKey || !szKey || !szKey[0] ||
|
|
!szValue || !szData ){
|
|
::SetLastError(E_INVALIDARG);
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL bRetVal = FALSE;
|
|
DWORD dwDisposition;
|
|
DWORD dwReserved = 0;
|
|
HKEY hTempKey = (HKEY)0;
|
|
|
|
// length specifier is in bytes, and some TCHAR
|
|
// are more than 1 byte each
|
|
DWORD dwBufferLength = lstrlen(szData) * sizeof(TCHAR);
|
|
|
|
// Open key of interest
|
|
// Assume all access is okay and that all keys will be stored to file
|
|
// Utilize the default security attributes
|
|
|
|
// OG Track error
|
|
LONG err = ::RegCreateKeyEx(hOpenKey, szKey, dwReserved,
|
|
(LPTSTR)0, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, 0,
|
|
&hTempKey, &dwDisposition);
|
|
|
|
if( ERROR_SUCCESS ==err )
|
|
{
|
|
|
|
// dwBufferLength must include size of terminating nul
|
|
// character when using REG_SZ with RegSetValueEx function
|
|
dwBufferLength += sizeof(TCHAR);
|
|
|
|
err = ::RegSetValueEx(hTempKey, (LPTSTR)szValue,
|
|
dwReserved, REG_SZ, (LPBYTE)szData, dwBufferLength) ;
|
|
if( ERROR_SUCCESS == err )
|
|
bRetVal = TRUE;
|
|
}
|
|
|
|
if (err != ERROR_SUCCESS)
|
|
{
|
|
char errstr[1024];
|
|
sprintf(errstr,"RegSetValueEx: %Xn",err);
|
|
OutputDebugString(errstr);
|
|
}
|
|
// close opened key
|
|
if( hTempKey ){
|
|
::RegCloseKey(hTempKey);
|
|
}
|
|
|
|
return bRetVal;
|
|
}
|
|
|
|
//- -----------------------------------------------------------------
|
|
//- END CGFILTYP.CPP Source File
|
|
//- -----------------------------------------------------------------
|