544 lines
14 KiB
C++
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;
|
|
}
|