windows-nt/Source/XPSP1/NT/admin/hmonitor/snapin/snapinabout.cpp
2020-09-26 16:20:57 +08:00

239 lines
6.5 KiB
C++

// SnapinAbout.cpp : implementation file
//
#include "stdafx.h"
#include "SnapinAbout.h"
#include "FileVersion.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSnapinAbout
IMPLEMENT_DYNCREATE(CSnapinAbout, CCmdTarget)
CSnapinAbout::CSnapinAbout()
{
EnableAutomation();
// To keep the application running as long as an OLE automation
// object is active, the constructor calls AfxOleLockApp.
AfxOleLockApp();
}
CSnapinAbout::~CSnapinAbout()
{
// To terminate the application when all objects created with
// with OLE automation, the destructor calls AfxOleUnlockApp.
AfxOleUnlockApp();
}
/////////////////////////////////////////////////////////////////////////////
// Overrideable Members
/////////////////////////////////////////////////////////////////////////////
HRESULT CSnapinAbout::OnGetStaticFolderImage(HBITMAP __RPC_FAR * hSmallImage,HBITMAP __RPC_FAR * hSmallImageOpen,HBITMAP __RPC_FAR * hLargeImage,COLORREF __RPC_FAR * cMask)
{
TRACEX(_T("CSnapinAbout::OnGetStaticFolderImage\n"));
*hSmallImage = NULL;
*hSmallImageOpen = NULL;
*hLargeImage = NULL;
*cMask = NULL;
return S_FALSE;
}
void CSnapinAbout::OnGetSnapinDescription(CString& sDescription)
{
TRACEX(_T("CSnapinAbout::OnGetSnapinDescription\n"));
sDescription = _T("");
}
HRESULT CSnapinAbout::OnGetSnapinImage(HICON __RPC_FAR *hAppIcon)
{
TRACEX(_T("CSnapinAbout::OnGetSnapinImage\n"));
*hAppIcon = NULL;
return S_FALSE;
}
void CSnapinAbout::OnFinalRelease()
{
// When the last reference for an automation object is released
// OnFinalRelease is called. The base class will automatically
// deletes the object. Add additional cleanup required for your
// object before calling the base class.
CCmdTarget::OnFinalRelease();
}
BEGIN_MESSAGE_MAP(CSnapinAbout, CCmdTarget)
//{{AFX_MSG_MAP(CSnapinAbout)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_DISPATCH_MAP(CSnapinAbout, CCmdTarget)
//{{AFX_DISPATCH_MAP(CSnapinAbout)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()
// Note: we add support for IID_ISnapinAbout to support typesafe binding
// from VBA. This IID must match the GUID that is attached to the
// dispinterface in the .ODL file.
// {80F85331-AB10-11D2-BD62-0000F87A3912}
static const IID IID_ISnapInAbout =
{ 0x80f85331, 0xab10, 0x11d2, { 0xbd, 0x62, 0x0, 0x0, 0xf8, 0x7a, 0x39, 0x12 } };
BEGIN_INTERFACE_MAP(CSnapinAbout, CCmdTarget)
INTERFACE_PART(CSnapinAbout, IID_ISnapInAbout, Dispatch)
INTERFACE_PART(CSnapinAbout, IID_ISnapinAbout, SnapinAbout)
END_INTERFACE_MAP()
/////////////////////////////////////////////////////////////////////////////
// ISnapinAbout Interface Map
/////////////////////////////////////////////////////////////////////////////
ULONG FAR EXPORT CSnapinAbout::XSnapinAbout::AddRef()
{
METHOD_PROLOGUE(CSnapinAbout, SnapinAbout)
return pThis->ExternalAddRef();
}
ULONG FAR EXPORT CSnapinAbout::XSnapinAbout::Release()
{
METHOD_PROLOGUE(CSnapinAbout, SnapinAbout)
return pThis->ExternalRelease();
}
HRESULT FAR EXPORT CSnapinAbout::XSnapinAbout::QueryInterface(
REFIID iid, void FAR* FAR* ppvObj)
{
METHOD_PROLOGUE(CSnapinAbout, SnapinAbout)
return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}
HRESULT FAR EXPORT CSnapinAbout::XSnapinAbout::GetSnapinDescription(
/* [out] */ LPOLESTR __RPC_FAR *lpDescription)
{
METHOD_PROLOGUE(CSnapinAbout, SnapinAbout)
TRACEX(_T("CSnapinAbout::XSnapinAbout::GetSnapinDescription\n"));
TRACEARGn(lpDescription);
TCHAR szFileName[_MAX_PATH];
GetModuleFileName(AfxGetInstanceHandle(),szFileName,_MAX_PATH);
CFileVersion fv;
fv.Open(szFileName);
CString sSnapInDescription;
pThis->OnGetSnapinDescription(sSnapInDescription);
CString sDescription = sSnapInDescription;
sDescription += _T("\r\n");
sDescription += fv.GetFileDescription();
sDescription += _T("\r\n");
sDescription += fv.GetLegalCopyright();
if( sDescription.IsEmpty() )
return S_OK;
LPVOID lpBuffer = CoTaskMemAlloc((sDescription.GetLength()+1)*sizeof(TCHAR));
CopyMemory(lpBuffer,sDescription,(sDescription.GetLength()+1)*sizeof(TCHAR));
*lpDescription = (TCHAR*)lpBuffer;
return S_OK;
}
HRESULT FAR EXPORT CSnapinAbout::XSnapinAbout::GetProvider(
/* [out] */ LPOLESTR __RPC_FAR *lpName)
{
METHOD_PROLOGUE(CSnapinAbout, SnapinAbout)
TRACEX(_T("CSnapinAbout::XSnapinAbout::GetProvider\n"));
TRACEARGn(lpName);
TCHAR szFileName[_MAX_PATH];
GetModuleFileName(AfxGetInstanceHandle(),szFileName,_MAX_PATH);
CFileVersion fv;
fv.Open(szFileName);
CString sProvider = fv.GetCompanyName();
if( sProvider.IsEmpty() )
return S_OK;
LPVOID lpBuffer = CoTaskMemAlloc((sProvider.GetLength()+1)*sizeof(TCHAR));
CopyMemory(lpBuffer,sProvider,(sProvider.GetLength()+1)*sizeof(TCHAR));
*lpName = (TCHAR*)lpBuffer;
return S_OK;
}
HRESULT FAR EXPORT CSnapinAbout::XSnapinAbout::GetSnapinVersion(
/* [out] */ LPOLESTR __RPC_FAR *lpVersion)
{
METHOD_PROLOGUE(CSnapinAbout, SnapinAbout)
TRACEX(_T("CSnapinAbout::XSnapinAbout::GetSnapinVersion\n"));
TRACEARGn(lpVersion);
TCHAR szFileName[_MAX_PATH];
GetModuleFileName(AfxGetInstanceHandle(),szFileName,_MAX_PATH);
CFileVersion fv;
fv.Open(szFileName);
CString sVersion = fv.GetFileVersion();
if( sVersion.IsEmpty() )
return S_OK;
LPVOID lpBuffer = CoTaskMemAlloc((sVersion.GetLength()+1)*sizeof(TCHAR));
CopyMemory(lpBuffer,sVersion,(sVersion.GetLength()+1)*sizeof(TCHAR));
*lpVersion = (TCHAR*)lpBuffer;
return S_OK;
}
HRESULT FAR EXPORT CSnapinAbout::XSnapinAbout::GetSnapinImage(
/* [out] */ HICON __RPC_FAR *hAppIcon)
{
METHOD_PROLOGUE(CSnapinAbout, SnapinAbout)
TRACEX(_T("CSnapinAbout::XSnapinAbout::GetSnapinImage\n"));
TRACEARGn(hAppIcon);
return pThis->OnGetSnapinImage(hAppIcon);
}
HRESULT FAR EXPORT CSnapinAbout::XSnapinAbout::GetStaticFolderImage(
/* [out] */ HBITMAP __RPC_FAR *hSmallImage,
/* [out] */ HBITMAP __RPC_FAR *hSmallImageOpen,
/* [out] */ HBITMAP __RPC_FAR *hLargeImage,
/* [out] */ COLORREF __RPC_FAR *cMask)
{
METHOD_PROLOGUE(CSnapinAbout, SnapinAbout)
TRACEX(_T("CSnapinAbout::XSnapinAbout::GetStaticFolderImage\n"));
TRACEARGn(hSmallImage);
TRACEARGn(hSmallImageOpen);
TRACEARGn(hLargeImage);
TRACEARGn(cMask);
return pThis->OnGetStaticFolderImage(hSmallImage,hSmallImageOpen,hLargeImage,cMask);
}
/////////////////////////////////////////////////////////////////////////////
// CSnapinAbout message handlers