home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
msdn_vcb
/
samples
/
vc98
/
sdk
/
sdktools
/
winnt
/
perfmon
/
addlog.c
< prev
next >
Wrap
Text File
|
1994-10-13
|
10KB
|
335 lines
//==========================================================================//
// Includes //
//==========================================================================//
#include "perfmon.h"
#include "utils.h"
#include "log.h"
#include "pmemory.h" // for MemoryXXX (malloc-like) routines
#include "perfdata.h"
#include "perfmops.h"
#include "system.h" // for SystemGet
#include "playback.h" // for PlayingBackLog & DataFromIndexPosition
#include "pmhelpid.h" // Help IDs
//==========================================================================//
// External Data //
//==========================================================================//
extern HWND hWndLogEntries ;
BOOL ComputerChange ;
static PPERFDATA pPerfData ;
//==========================================================================//
// Local Functions //
//==========================================================================//
BOOL /* static */ LogComputerChanged (HDLG hDlg)
{ // LogComputerChanged
PLOG pLog ;
HWND hWndObjects ;
PPERFSYSTEM pSysInfo;
DWORD iObjectType ;
DWORD iObjectNum ;
pLog = LogData (hDlg) ;
hWndObjects = DialogControl (hDlg, IDD_ADDLOGOBJECT) ;
if (!pPerfData)
{
LBReset (hWndObjects) ;
return FALSE ;
}
SetHourglassCursor() ;
pSysInfo = GetComputer (hDlg,
IDD_ADDLOGCOMPUTER,
TRUE,
&pPerfData,
&pLog->pSystemFirst) ;
if (!pPerfData || !pSysInfo)
{
LBReset (hWndObjects) ;
SetArrowCursor() ;
return FALSE ;
}
else
{
LBLoadObjects (hWndObjects,
pPerfData,
pSysInfo,
pLog->dwDetailLevel,
NULL,
FALSE) ;
iObjectNum = (DWORD) LBNumItems (hWndObjects) ;
for (iObjectType = 0 ;
iObjectType < iObjectNum ;
iObjectType++)
{ // for
LBSetSelection (hWndObjects, iObjectType) ;
} // for
}
ComputerChange = FALSE ;
SetArrowCursor() ;
return TRUE ;
} // LogComputerChanged
void /*static*/ OnLogDestroy (HDLG hDlg)
{ // OnLogDestroy
dwCurrentDlgID = 0 ;
if (!PlayingBackLog ())
MemoryFree (pPerfData) ;
bAddLineInProgress = FALSE ;
} // OnLogDestroy
//==========================================================================//
// Message Handlers //
//==========================================================================//
void /* static */ OnInitAddLogDialog (HDLG hDlg)
{ // OnInitAddLogDialog
TCHAR szRemoteComputerName[MAX_COMPUTERNAME_LENGTH + 3] ;
int iIndex ;
PLOGENTRY pLogEntry ;
LPTSTR pComputerName ;
bAddLineInProgress = TRUE ;
if (PlayingBackLog())
{
pPerfData = DataFromIndexPosition (&(PlaybackLog.StartIndexPos), NULL) ;
GetPerfComputerName(pPerfData, szRemoteComputerName);
DialogSetString (hDlg, IDD_ADDLOGCOMPUTER, szRemoteComputerName);
}
else
{
pPerfData = MemoryAllocate (STARTING_SYSINFO_SIZE) ;
//Try to use computer specified on command line (if any), otherwise local computer
pComputerName = CmdLineComputerName[0] ?
CmdLineComputerName :
LocalComputerName ;
iIndex = LBSelection (hWndLogEntries) ;
if (iIndex != LB_ERR)
{
pLogEntry = (PLOGENTRY) LBData(hWndLogEntries, iIndex) ;
if (pLogEntry && pLogEntry != (PLOGENTRY)LB_ERR)
{
pComputerName = pLogEntry->szComputer ;
}
}
DialogSetString (hDlg, IDD_ADDLOGCOMPUTER, pComputerName) ;
}
LogComputerChanged (hDlg) ;
DialogEnable (hDlg, IDD_ADDLOGOBJECTTEXT, TRUE) ;
DialogEnable (hDlg, IDD_ADDLOGOBJECT, TRUE) ;
WindowCenter (hDlg) ;
dwCurrentDlgID = HC_PM_idDlgEditAddToLog ;
} // OnInitAddLogDialog
void /* static */ OnLogComputer (HDLG hDlg)
/*
Effect: Put up the select Domain/Computer dialog. Allow the user
to select the computer. Check for user entering a domain
instead. Place the selected computer in the readonly
edit box.
*/
{ // OnLogComputer
TCHAR szComputer [MAX_SYSTEM_NAME_LENGTH + 1] ;
if (ChooseComputer (hDlg, szComputer))
{
DialogSetString (hDlg, IDD_ADDLOGCOMPUTER, szComputer) ;
LogComputerChanged (hDlg) ;
} // if
} // OnLogComputer
void /* static */ OnAddToLog (HDLG hDlg)
/*
Effect: Perform all actions needed when the user clicks on
the add button. In particular, determine if the required
fields of the dialog have valid values. If so, go ahead
and add a LOGENTRY record in the log. If the computer
being logged is not already logged, add a LOGSYSTEMENTRY
as well.
Assert: We have valid values for computer and object, since we
always control these fields.
*/
{ // OnAddToLog
TCHAR szComputer [MAX_SYSTEM_NAME_LENGTH + 1] ;
TCHAR szObjectType [PerfObjectLen + 1] ;
DWORD iObjectType ;
DWORD iObjectNum ;
HWND hWndObjectTypes ;
PPERF_OBJECT_TYPE pObject ;
PLOG pLog ;
pLog = LogData (hWndLog) ;
DialogText (hDlg, IDD_ADDLOGCOMPUTER, szComputer) ;
hWndObjectTypes = DialogControl(hDlg, IDD_ADDLOGOBJECT) ;
iObjectNum = (DWORD) LBNumItems (hWndObjectTypes) ;
LBSetRedraw (hWndLogEntries, FALSE) ;
for (iObjectType = 0 ;
iObjectType < iObjectNum ;
iObjectType++)
{ // for
// NOTE: for now, we don't check for duplicate lines
if (LBSelected (hWndObjectTypes, iObjectType))
{ // if
LBString (hWndObjectTypes, iObjectType, szObjectType) ;
pObject = (PPERF_OBJECT_TYPE) LBData (hWndObjectTypes, iObjectType) ;
// eliminate duplicates here
if (LogFindEntry(szComputer, pObject->ObjectNameTitleIndex) ==
LOG_ENTRY_NOT_FOUND)
{
LogAddEntry (hWndLogEntries,
szComputer,
szObjectType,
pObject->ObjectNameTitleIndex,
FALSE) ;
}
} // if
} // for
LBSetRedraw (hWndLogEntries, TRUE) ;
DialogSetText (hDlg, IDD_ADDLOGDONE, IDS_DONE) ;
if (pLog->iStatus == iPMStatusCollecting)
{
LogWriteSystemCounterNames (hWndLog, pLog) ;
}
} // OnAddToLog
int FAR WINAPI AddLogDlgProc (HWND hDlg, WORD msg,
WPARAM wParam, LONG lParam)
{ // AddLogDlg
switch(msg)
{
case WM_INITDIALOG:
OnInitAddLogDialog (hDlg) ;
SetFocus (DialogControl (hDlg, IDD_ADDLOGADD)) ;
return(FALSE);
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDD_CANCEL:
EndDialog(hDlg,0);
return(TRUE);
case IDD_OK:
case IDD_ADDLOGADD:
if (ComputerChange)
{
TCHAR szComputer [MAX_SYSTEM_NAME_LENGTH + 3] ;
DialogText (hDlg, IDD_ADDLOGCOMPUTER, szComputer) ;
LogComputerChanged (hDlg) ;
}
else
{
SetHourglassCursor() ;
OnAddToLog (hDlg) ;
SetArrowCursor() ;
}
break ;
case IDD_ADDLOGDONE:
EndDialog (hDlg, 0) ;
break ;
case IDD_ADDLOGELLIPSES:
SetHourglassCursor() ;
OnLogComputer (hDlg) ;
SetArrowCursor() ;
break ;
case IDD_ADDLOGCOMPUTER:
if (HIWORD (wParam) == EN_UPDATE)
{
ComputerChange = TRUE ;
}
break ;
case IDD_ADDLOGHELP:
CallWinHelp (dwCurrentDlgID) ;
break ;
case IDD_ADDLOGOBJECT:
if (ComputerChange)
{
TCHAR szComputer [MAX_SYSTEM_NAME_LENGTH + 3] ;
DialogText (hDlg, IDD_ADDLOGCOMPUTER, szComputer) ;
LogComputerChanged (hDlg) ;
}
break ;
default:
break ;
}
break;
case WM_DESTROY:
OnLogDestroy (hDlg) ;
break ;
default:
break;
}
return (FALSE);
} // AddLogDlgProc
BOOL AddLog (HWND hWndParent)
{ // AddLog
if (DialogBox (hInstance, idDlgAddLog,
hWndParent, (DLGPROC) AddLogDlgProc))
{ // if
return (TRUE) ;
} // if
return (FALSE) ;
} // AddLog