windows-nt/Source/XPSP1/NT/admin/activec/test/snapins/sample/powertest.cpp
2020-09-26 16:20:57 +08:00

544 lines
14 KiB
C++

/*--------------------------------------------------------------------------*
*
* Microsoft Windows
* Copyright (C) Microsoft Corporation, 1992 - 000
*
* File: powertest.cpp
*
* Contents: Implements ACPI test snap-in
*
* History: 29-Feb-2000 jeffro Created
*
*--------------------------------------------------------------------------*/
#include "stdafx.hxx"
#include "powertest.h"
/*+-------------------------------------------------------------------------*
* ShowReturn
*
*
*--------------------------------------------------------------------------*/
static void ShowReturn (const SC& sc, LPCTSTR pszPrefix)
{
tstring strMessage = pszPrefix;
/*
* Successful HRESULTs will map to unsuccessful Win32 error codes,
* so if the SC doesn't contain an error, give it S_OK so GetErrorMessage
* doesn't return confusing error text.
*/
SC scLocal = sc;
if (!scLocal.IsError())
scLocal = S_OK;
TCHAR szErrorMessage[256];
scLocal.GetErrorMessage (256, szErrorMessage);
strMessage += szErrorMessage;
if (!sc.IsError() && !(sc == S_OK))
{
strMessage += _T(" ");
if (sc == S_FALSE)
strMessage += _T("(S_FALSE)");
else
strMessage += tstring(_T("(")) + _itot(sc.GetCode(), szErrorMessage, 10) + _T(")");
}
MessageBox (NULL, strMessage.data(), _T("Debug message"), MB_OK);
}
/*+=========================================================================*
* *
* CPowerTestSnapinItem Implmentation *
* *
*==========================================================================*/
#define DECLARE_SNAPIN_MENU_ITEM(id, dwGray) \
{ id, id, id, CCM_INSERTIONPOINTID_PRIMARY_TOP, 0, dwMenuAlwaysEnable, dwGray, dwMenuNeverChecked}
SnapinMenuItem CPowerTestSnapinItem::s_rgMenuItems[] =
{
DECLARE_SNAPIN_MENU_ITEM (IDS_CreateConsolePower, eFlag_ConsolePowerCreated),
DECLARE_SNAPIN_MENU_ITEM (IDS_ReleaseConsolePower, eFlag_ConsolePowerNotCreated),
DECLARE_SNAPIN_MENU_ITEM (IDS_SetExecutionState, eFlag_ConsolePowerNotCreated),
DECLARE_SNAPIN_MENU_ITEM (IDS_ResetIdleTimer, eFlag_ConsolePowerNotCreated),
};
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::CPowerTestSnapinItem
*
*
*--------------------------------------------------------------------------*/
CPowerTestSnapinItem::CPowerTestSnapinItem() :
m_cSystem (0),
m_cDisplay (0),
m_dwAdviseCookie (0)
{
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::DwFlagsMenuGray
*
*
*--------------------------------------------------------------------------*/
DWORD CPowerTestSnapinItem::DwFlagsMenuGray(void)
{
return ((m_spConsolePower) ? eFlag_ConsolePowerCreated : eFlag_ConsolePowerNotCreated);
}
/*+-------------------------------------------------------------------------*
* tstring* CPowerTestSnapinItem::PstrDisplayName
*
*
*--------------------------------------------------------------------------*/
const tstring* CPowerTestSnapinItem::PstrDisplayName()
{
return (&Psnapin()->StrDisplayName());
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::ScGetResultViewType
*
*
*--------------------------------------------------------------------------*/
SC CPowerTestSnapinItem::ScGetResultViewType(LPOLESTR* ppViewType, long* pViewOptions)
{
DECLARE_SC (sc, _T("CPowerTestSnapinItem::ScGetResultViewType"));
/*
* use the standard message view OCX
*/
sc = StringFromCLSID (CLSID_MessageView, ppViewType);
if (sc)
return (sc);
/*
* use only the OCX
*/
*pViewOptions = MMC_VIEW_OPTIONS_NOLISTVIEWS;
return (sc);
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::ScOnShow
*
* WM_SHOW handler for CPowerTestSnapinItem.
*--------------------------------------------------------------------------*/
SC CPowerTestSnapinItem::ScOnShow(CComponent *pComponent, BOOL fSelect)
{
DECLARE_SC (sc, _T("CPowerTestSnapinItem::ScOnShow"));
if (fSelect)
{
if (pComponent == NULL)
return (sc = E_UNEXPECTED);
IConsole* pConsole = pComponent->IpConsole();
if (pConsole == NULL)
return (sc = E_NOINTERFACE);
CComPtr<IUnknown> spResultUnk;
sc = pConsole->QueryResultView (&spResultUnk);
if (sc)
return (sc);
m_spMsgView = spResultUnk;
if (m_spMsgView == NULL)
return (sc = E_NOINTERFACE);
UpdateMessageView();
}
else
{
m_spMsgView.Release();
}
return (sc);
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::UpdateMessageView
*
*
*--------------------------------------------------------------------------*/
void CPowerTestSnapinItem::UpdateMessageView ()
{
if (m_spMsgView)
{
m_spMsgView->SetIcon (Icon_Information);
m_spMsgView->SetTitleText (L"Power Test Snap-in");
m_spMsgView->SetBodyText (GetMessageText().data());
}
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::GetMessageText
*
*
*--------------------------------------------------------------------------*/
std::wstring CPowerTestSnapinItem::GetMessageText()
{
std::wstring strMessageText;
if (m_spConsolePower)
{
WCHAR szMessageText[256];
wsprintfW (szMessageText,
L"CLSID_ConsolePower created\n\n"
L"Current execution state:\n"
L"ES_SYSTEM_REQUIRED = %d\n"
L"ES_DISPLAY_REQUIRED = %d\n",
m_cSystem, m_cDisplay);
strMessageText = szMessageText;
}
else
strMessageText = L"CLSID_ConsolePower not created";
return (strMessageText);
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::Pmenuitem
*
*
*--------------------------------------------------------------------------*/
SnapinMenuItem* CPowerTestSnapinItem::Pmenuitem(void)
{
return (s_rgMenuItems);
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::CMenuItem
*
*
*--------------------------------------------------------------------------*/
INT CPowerTestSnapinItem::CMenuItem(void)
{
return (sizeof(s_rgMenuItems) / sizeof(s_rgMenuItems[0]));
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::ScCommand
*
*
*--------------------------------------------------------------------------*/
SC CPowerTestSnapinItem::ScCommand(long nCommandID, CComponent *pComponent)
{
DECLARE_SC (sc, _T("CPowerTestSnapinItem::ScCommand"));
switch (nCommandID)
{
case IDS_CreateConsolePower:
sc = ScOnCreateConsolePower (pComponent);
break;
case IDS_ReleaseConsolePower:
sc = ScOnReleaseConsolePower (pComponent);
break;
case IDS_ResetIdleTimer:
sc = ScOnResetIdleTimer (pComponent);
break;
case IDS_SetExecutionState:
sc = ScOnSetExecutionState (pComponent);
break;
default:
sc = E_UNEXPECTED;
break;
}
UpdateMessageView();
return (sc);
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::ScOnCreateConsolePower
*
*
*--------------------------------------------------------------------------*/
SC CPowerTestSnapinItem::ScOnCreateConsolePower (CComponent *pComponent)
{
DECLARE_SC (sc, _T("CPowerTestSnapinItem::ScOnCreateConsolePower"));
/*
* create the CLSID_ConsolePower object
*/
sc = m_spConsolePower.CoCreateInstance (CLSID_ConsolePower);
if (sc)
return (sc);
/*
* create a CPowerTestConsolePowerSinkImpl
*/
CComObject<CPowerTestConsolePowerSinkImpl>* pPowerSinkImpl;
sc = CComObject<CPowerTestConsolePowerSinkImpl>::CreateInstance (&pPowerSinkImpl);
if (sc)
return (ReleaseAll(), sc);
m_spConsolePowerSink = pPowerSinkImpl;
/*
* set up the event sink
*/
sc = AtlAdvise (m_spConsolePower, m_spConsolePowerSink, IID_IConsolePowerSink, &m_dwAdviseCookie);
if (sc)
return (ReleaseAll(), sc);
return (sc);
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::ScOnReleaseConsolePower
*
*
*--------------------------------------------------------------------------*/
SC CPowerTestSnapinItem::ScOnReleaseConsolePower (CComponent *pComponent)
{
DECLARE_SC (sc, _T("CPowerTestSnapinItem::ScOnCreateConsolePower"));
AtlUnadvise (m_spConsolePower, IID_IConsolePowerSink, m_dwAdviseCookie);
ReleaseAll();
return (sc);
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::ReleaseAll
*
*
*--------------------------------------------------------------------------*/
void CPowerTestSnapinItem::ReleaseAll()
{
m_spConsolePower.Release();
m_spConsolePowerSink.Release();
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::ScOnResetIdleTimer
*
*
*--------------------------------------------------------------------------*/
SC CPowerTestSnapinItem::ScOnResetIdleTimer (CComponent *pComponent)
{
DECLARE_SC (sc, _T("CPowerTestSnapinItem::ScOnCreateConsolePower"));
if (!m_spConsolePower)
{
MMCErrorBox (sc = E_UNEXPECTED);
sc.Clear();
return (sc);
}
CPowerTestDlg dlg(true);
if (dlg.DoModal() == IDOK)
{
sc = m_spConsolePower->ResetIdleTimer (dlg.GetAddFlags());
ShowReturn (sc, _T("IConsolePower::ResetIdleTimer returned:\n\n"));
}
return (sc);
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapinItem::ScOnSetExecutionState
*
*
*--------------------------------------------------------------------------*/
SC CPowerTestSnapinItem::ScOnSetExecutionState (CComponent *pComponent)
{
DECLARE_SC (sc, _T("CPowerTestSnapinItem::ScOnCreateConsolePower"));
if (!m_spConsolePower)
{
MMCErrorBox (sc = E_UNEXPECTED);
sc.Clear();
return (sc);
}
CPowerTestDlg dlg;
if (dlg.DoModal() == IDOK)
{
DWORD dwAdd = dlg.GetAddFlags();
DWORD dwRemove = dlg.GetRemoveFlags();
sc = m_spConsolePower->SetExecutionState (dwAdd, dwRemove);
ShowReturn (sc, _T("IConsolePower::SetExecutionState returned:\n\n"));
if (sc == S_OK)
{
if (dwAdd & ES_SYSTEM_REQUIRED) m_cSystem++;
if (dwAdd & ES_DISPLAY_REQUIRED) m_cDisplay++;
if (dwRemove & ES_SYSTEM_REQUIRED) m_cSystem--;
if (dwRemove & ES_DISPLAY_REQUIRED) m_cDisplay--;
}
}
return (sc);
}
/*+=========================================================================*
* *
* CPowerTestConsolePowerSinkImpl Implmentation *
* *
*==========================================================================*/
/*+-------------------------------------------------------------------------*
* CPowerTestConsolePowerSinkImpl::OnPowerBroadcast
*
*
*--------------------------------------------------------------------------*/
STDMETHODIMP CPowerTestConsolePowerSinkImpl::OnPowerBroadcast (
WPARAM wParam,
LPARAM lParam,
LRESULT* plResult)
{
if (plResult == NULL)
return (E_INVALIDARG);
if (wParam == PBT_APMQUERYSUSPEND)
*plResult = BROADCAST_QUERY_DENY;
else
*plResult = TRUE;
return (S_OK);
}
/*+=========================================================================*
* *
* CPowerTestSnapin Implmentation *
* *
*==========================================================================*/
SNR CPowerTestSnapin::s_rgsnr[] =
{
SNR(&nodetypePowerTestRoot, snrEnumSP ),
};
LONG CPowerTestSnapin::s_rgiconid[] = {0};
LONG CPowerTestSnapin::s_iconidStatic = 0;
// include members needed for every snapin.
SNAPIN_DEFINE(CPowerTestSnapin);
/*+-------------------------------------------------------------------------*
* CPowerTestSnapin::CPowerTestSnapin
*
*
*--------------------------------------------------------------------------*/
CPowerTestSnapin::CPowerTestSnapin() :
m_strDisplayName (_T("PowerTest Snap-in"))
{
m_pstrDisplayName = &m_strDisplayName;
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapin::~CPowerTestSnapin
*
*
*--------------------------------------------------------------------------*/
CPowerTestSnapin::~CPowerTestSnapin()
{
}
/*+-------------------------------------------------------------------------*
* CPowerTestSnapin::ScInitBitmaps
*
*
*--------------------------------------------------------------------------*/
SC CPowerTestSnapin::ScInitBitmaps(void)
{
DECLARE_SC (sc, _T("CPowerTestSnapin::ScInitBitmaps"));
if (BitmapSmall())
return (sc);
sc = CBaseSnapin::ScInitBitmaps();
if (sc)
return (sc);
BitmapSmall().DeleteObject();
sc = BitmapSmall().LoadBitmap(IDB_POWER16) ? S_OK : E_FAIL;
if (sc)
return sc;
BitmapLarge().DeleteObject();
sc = BitmapLarge().LoadBitmap(IDB_POWER32) ? S_OK : E_FAIL;
if (sc)
return sc;
BitmapStaticSmall().DeleteObject();
sc = BitmapStaticSmall().LoadBitmap(IDB_POWER16) ? S_OK : E_FAIL;
if (sc)
return sc;
BitmapStaticSmallOpen().DeleteObject();
sc = BitmapStaticSmallOpen().LoadBitmap(IDB_POWER16) ? S_OK : E_FAIL;
if (sc)
return sc;
BitmapStaticLarge().DeleteObject();
sc = BitmapStaticLarge().LoadBitmap(IDB_POWER32) ? S_OK : E_FAIL;
if (sc)
return sc;
return sc;
}