RetroZilla/embedding/browser/activex/tests/RegMozCtl/RegTask.cpp
2015-10-20 23:03:22 -04:00

155 lines
3.4 KiB
C++

// RegTask.cpp: implementation of the CRegTask class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "regmozctl.h"
#include "RegTask.h"
#include "RegTaskManager.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CRegTask::CRegTask()
{
}
CRegTask::CRegTask(CRegTaskManager *pMgr)
{
m_pTaskMgr = pMgr;
}
CRegTask::~CRegTask()
{
}
//////////////////////////////////////////////////////////////////////
class CRegTaskRegistry : public CRegTask
{
public:
CRegTaskRegistry(CRegTaskManager *pMgr) : CRegTask(pMgr)
{
m_szDesc = _T("Set BinDirectoryPath registry entry");
}
HRESULT DoTask();
};
HRESULT CRegTaskRegistry::DoTask()
{
CString szBinDirPath;
m_pTaskMgr->GetValue(c_szValueBinDirPath, szBinDirPath);
// Create registry key
CRegKey cKey;
cKey.Create(HKEY_LOCAL_MACHINE, MOZ_CONTROL_REG_KEY);
cKey.SetValue(szBinDirPath, MOZ_CONTROL_REG_VALUE_BIN_DIR_PATH);
cKey.Close();
return S_OK;
}
//////////////////////////////////////////////////////////////////////
class CRegTaskRegSvr : public CRegTask
{
public:
CRegTaskRegSvr(CRegTaskManager *pMgr) : CRegTask(pMgr)
{
m_szDesc = _T("Register Mozilla Control");
}
HRESULT DoTask();
};
HRESULT CRegTaskRegSvr::DoTask()
{
BOOL bRegister = TRUE;
CString szBinDirPath;
m_pTaskMgr->GetValue(c_szValueBinDirPath, szBinDirPath);
SetCurrentDirectory(szBinDirPath);
// Now register the mozilla control
CString szMozCtl = szBinDirPath + CString(_T("\\mozctl.dll"));
HINSTANCE hMod = LoadLibrary(szMozCtl);
if (hMod == NULL)
{
AfxMessageBox(_T("Can't find mozctl.dll in current directory"));
return E_FAIL;
}
HRESULT hr = E_FAIL;
FARPROC pfn = GetProcAddress(hMod, bRegister ? _T("DllRegisterServer") : _T("DllUnregisterServer"));
if (pfn)
{
hr = pfn();
}
FreeLibrary(hMod);
return hr;
}
//////////////////////////////////////////////////////////////////////
class CRegTaskPATH : public CRegTask
{
public:
CRegTaskPATH(CRegTaskManager *pMgr) : CRegTask(pMgr)
{
m_szDesc = _T("Set PATH environment variable");
}
HRESULT DoTask();
};
HRESULT CRegTaskPATH::DoTask()
{
CString szBinDirPath;
m_pTaskMgr->GetValue(c_szValueBinDirPath, szBinDirPath);
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO)
GetVersionEx(&osvi);
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
}
else if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{
FILE *f = fopen("c:\\autoexec.bat", "rw");
if (f == NULL)
{
return NULL;
}
// TODO read autoexec.bat if necessary and add Mozilla bin path to it
// READ whole thing into memory
// grep for magic control tags
// if there then replace section
// else append new section
fclose(f);
}
return S_OK;
}
//////////////////////////////////////////////////////////////////////
HRESULT CRegTask::PopulateTasks(CRegTaskManager &cMgr)
{
cMgr.AddTask(new CRegTaskRegistry(&cMgr));
cMgr.AddTask(new CRegTaskPATH(&cMgr));
cMgr.AddTask(new CRegTaskRegSvr(&cMgr));
return S_OK;
}