159 lines
3.9 KiB
C++
159 lines
3.9 KiB
C++
#ifndef __FSP_H_
|
|
#define __FSP_H_
|
|
#include "resource.h"
|
|
#include "atlsnap.h"
|
|
#include <shlobj.h>
|
|
|
|
|
|
#define LOGKEY TEXT("Software\\Microsoft\\Fax\\Device Providers\\Microsoft Modem Device Provider")
|
|
#define LOGLEVEL TEXT("ModemLogLevel")
|
|
#define LOGLOCATION TEXT("ModemLogLocation")
|
|
#define LOGGING_NONE 0x0
|
|
#define LOGGING_ERRORS 0x1
|
|
#define LOGGING_ALL 0x100
|
|
|
|
class CFSPPage : public CPropertyPageImpl<CFSPPage>
|
|
{
|
|
private:
|
|
BOOL m_bChanged;
|
|
DWORD m_LoggingLevel;
|
|
LPWSTR m_LoggingDirectory;
|
|
HKEY m_LogKey;
|
|
public :
|
|
CFSPPage(TCHAR* pTitle = NULL) : CPropertyPageImpl<CFSPPage> (pTitle)
|
|
{
|
|
m_bChanged = FALSE;
|
|
m_LogKey = OpenRegistryKey(HKEY_LOCAL_MACHINE,LOGKEY,FALSE,0);
|
|
if (!m_LogKey) {
|
|
m_LoggingLevel = 0;
|
|
m_LoggingDirectory = NULL;
|
|
} else {
|
|
m_LoggingLevel = GetRegistryDword(m_LogKey,LOGLEVEL);
|
|
m_LoggingDirectory = GetRegistryString(m_LogKey,LOGLOCATION,TEXT(""));
|
|
}
|
|
|
|
}
|
|
|
|
~CFSPPage() {
|
|
if (m_LoggingDirectory) {
|
|
MemFree(m_LoggingDirectory);
|
|
}
|
|
if (m_LogKey) {
|
|
RegCloseKey(m_LogKey);
|
|
}
|
|
}
|
|
|
|
enum { IDD = IDD_FSP };
|
|
|
|
BEGIN_MSG_MAP(CFSPPage)
|
|
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
|
|
COMMAND_ID_HANDLER(IDC_LOG_NONE, DisableLogging);
|
|
COMMAND_ID_HANDLER(IDC_LOG_ERRORS, EnableLogging);
|
|
COMMAND_ID_HANDLER(IDC_LOG_ALL, EnableLogging);
|
|
COMMAND_ID_HANDLER(IDC_LOGBROWSE, OnBrowseDir);
|
|
CHAIN_MSG_MAP(CPropertyPageImpl<CFSPPage>)
|
|
END_MSG_MAP()
|
|
|
|
LRESULT DisableLogging(INT code, INT id, HWND hwnd, BOOL& bHandled);
|
|
LRESULT EnableLogging(INT code, INT id, HWND hwnd, BOOL& bHandled);
|
|
LRESULT OnBrowseDir(INT code, INT id, HWND hwnd, BOOL& bHandled);
|
|
|
|
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
|
|
|
VOID SetChangedFlag( BOOL Flag );
|
|
|
|
BOOL OnApply();
|
|
private:
|
|
BOOL BrowseForDirectory();
|
|
BOOL ValidateLogLocation();
|
|
|
|
};
|
|
|
|
class CFSPData : public CSnapInDataInterface< CFSPData, TRUE >
|
|
{
|
|
static const GUID* m_NODETYPE;
|
|
static const TCHAR* m_SZNODETYPE;
|
|
static const TCHAR* m_SZDISPLAY_NAME;
|
|
static const CLSID* m_SNAPIN_CLASSID;
|
|
|
|
public:
|
|
static CComPtr<IControlbar> m_spControlBar;
|
|
|
|
public:
|
|
|
|
CFSPData()
|
|
{
|
|
}
|
|
|
|
~CFSPData()
|
|
{
|
|
}
|
|
|
|
STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK lpProvider,
|
|
long handle, IUnknown* pUnk)
|
|
{
|
|
TCHAR Title[MAX_TITLE_LEN];
|
|
LoadString(_Module.GetModuleInstance(),IDS_TITLE,Title,sizeof(Title));
|
|
CFSPPage* pPage = new CFSPPage(Title);
|
|
lpProvider->AddPage(pPage->Create());
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHOD(QueryPagesFor)(void)
|
|
{
|
|
return S_OK;
|
|
}
|
|
|
|
void* GetNodeType()
|
|
{
|
|
return (void*)m_NODETYPE;
|
|
}
|
|
|
|
void* GetSZNodeType()
|
|
{
|
|
return (void*)m_SZNODETYPE;
|
|
}
|
|
|
|
void* GetDisplayName()
|
|
{
|
|
return (void*)m_SZDISPLAY_NAME;
|
|
}
|
|
|
|
void* GetSnapInCLSID()
|
|
{
|
|
return (void*)m_SNAPIN_CLASSID;
|
|
}
|
|
IDataObject* m_pDataObject;
|
|
BOOL InitDataClass(IDataObject* pDataObject)
|
|
{
|
|
m_pDataObject = pDataObject;
|
|
// The default code stores off the pointer to the Dataobject the class is wrapping
|
|
// at the time.
|
|
// Alternatively you could convert the dataobject to the internal format
|
|
// it represents and store that information
|
|
return TRUE;
|
|
}
|
|
};
|
|
|
|
class CFSP : public CSnapinObjectRootEx<CComSingleThreadModel>,
|
|
public IExtendPropertySheetImpl<CFSP>,
|
|
public CComCoClass<CFSP, &CLSID_FSP>
|
|
{
|
|
public:
|
|
EXTENSION_SNAPIN_DATACLASS(CFSPData)
|
|
|
|
BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP(CFSP)
|
|
EXTENSION_SNAPIN_NODEINFO_ENTRY(CFSPData)
|
|
END_EXTENSION_SNAPIN_NODEINFO_MAP()
|
|
|
|
BEGIN_COM_MAP(CFSP)
|
|
COM_INTERFACE_ENTRY(IExtendPropertySheet)
|
|
END_COM_MAP()
|
|
|
|
DECLARE_REGISTRY_RESOURCEID(IDR_FSP)
|
|
|
|
DECLARE_NOT_AGGREGATABLE(CFSP)
|
|
|
|
};
|
|
|
|
#endif |