mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
83 lines
2.5 KiB
C++
83 lines
2.5 KiB
C++
|
//====================================
|
||
|
// File: OBJLIST.CPP
|
||
|
// Author: Matt Pietrek
|
||
|
// From: Microsoft Systems Journal
|
||
|
// "Under the Hood", April 1996
|
||
|
//====================================
|
||
|
|
||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||
|
#define WIN32_LEAN_AND_MEAN
|
||
|
#endif
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <winperf.h>
|
||
|
#include <stdlib.h>
|
||
|
#pragma hdrstop
|
||
|
#include "titledb.h"
|
||
|
#include "objlist.h"
|
||
|
#include "perfobj.h"
|
||
|
#include "makeptr.h"
|
||
|
|
||
|
CPerfObjectList::CPerfObjectList(
|
||
|
CPerfSnapshot * const pPerfSnapshot,
|
||
|
CPerfTitleDatabase * const pPerfTitleDatabase )
|
||
|
{
|
||
|
m_pPerfSnapshot = pPerfSnapshot;
|
||
|
m_pPerfCounterTitles = pPerfTitleDatabase;
|
||
|
}
|
||
|
|
||
|
CPerfObject *
|
||
|
CPerfObjectList::GetFirstPerfObject( void )
|
||
|
{
|
||
|
m_currentObjectListIndex = 0;
|
||
|
if ( m_currentObjectListIndex >= m_pPerfSnapshot->GetNumObjectTypes() )
|
||
|
return 0;
|
||
|
|
||
|
m_pCurrObjectType =
|
||
|
(PPERF_OBJECT_TYPE)m_pPerfSnapshot->GetPostHeaderPointer();
|
||
|
|
||
|
return new CPerfObject( m_pCurrObjectType, m_pPerfCounterTitles );
|
||
|
}
|
||
|
|
||
|
CPerfObject *
|
||
|
CPerfObjectList::GetNextPerfObject( void )
|
||
|
{
|
||
|
// Are we at the last object in the list? Return NULL if so.
|
||
|
if ( ++m_currentObjectListIndex >= m_pPerfSnapshot->GetNumObjectTypes() )
|
||
|
return 0;
|
||
|
|
||
|
// Advance to the next PERF_OBJECT_TYPE structure
|
||
|
m_pCurrObjectType = MakePtr(PPERF_OBJECT_TYPE,
|
||
|
m_pCurrObjectType,
|
||
|
m_pCurrObjectType->TotalByteLength );
|
||
|
|
||
|
return new CPerfObject( m_pCurrObjectType, m_pPerfCounterTitles );
|
||
|
}
|
||
|
|
||
|
CPerfObject *
|
||
|
CPerfObjectList::GetPerfObject( PCTSTR const pszObjListName )
|
||
|
{
|
||
|
DWORD objListIdx
|
||
|
= m_pPerfCounterTitles->GetIndexFromTitleString( pszObjListName );
|
||
|
if ( 0 == objListIdx )
|
||
|
return 0;
|
||
|
|
||
|
// Point at first PERF_OBJECT_TYPE, and loop through the list, looking
|
||
|
// for one that matches.
|
||
|
PPERF_OBJECT_TYPE pCurrObjectType =
|
||
|
(PPERF_OBJECT_TYPE)m_pPerfSnapshot->GetPostHeaderPointer();
|
||
|
|
||
|
for ( unsigned i=0; i < m_pPerfSnapshot->GetNumObjectTypes(); i++ )
|
||
|
{
|
||
|
// Is this the one that matches?
|
||
|
if ( pCurrObjectType->ObjectNameTitleIndex == objListIdx )
|
||
|
return new CPerfObject(pCurrObjectType, m_pPerfCounterTitles);
|
||
|
|
||
|
// Nope... try the next object type
|
||
|
pCurrObjectType = MakePtr( PPERF_OBJECT_TYPE,
|
||
|
pCurrObjectType,
|
||
|
pCurrObjectType->TotalByteLength );
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|