638 lines
18 KiB
C++
638 lines
18 KiB
C++
|
// browsctr.cpp : implementation file
|
|||
|
//
|
|||
|
|
|||
|
#include "stdafx.h"
|
|||
|
#include "DPH_TEST.h"
|
|||
|
#include "browsctr.h"
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
#undef THIS_FILE
|
|||
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|||
|
#endif
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////////////////
|
|||
|
// CBrowsCountersDlg dialog
|
|||
|
|
|||
|
|
|||
|
CBrowsCountersDlg::CBrowsCountersDlg(CWnd* pParent /*=NULL*/,
|
|||
|
UINT nTemplate /* = IDD_BROWSE_COUNTERS_DLG_EXT */)
|
|||
|
: CDialog(nTemplate, pParent)
|
|||
|
{
|
|||
|
//{{AFX_DATA_INIT(CBrowsCountersDlg)
|
|||
|
// NOTE: the ClassWizard will add member initialization here
|
|||
|
//}}AFX_DATA_INIT
|
|||
|
// initialize the private/public variables here
|
|||
|
wpLastMachineSel = 0;
|
|||
|
|
|||
|
cpeLastSelection.szMachineName = &cpeMachineName[0];
|
|||
|
memset (cpeMachineName, 0, sizeof(cpeMachineName));
|
|||
|
|
|||
|
cpeLastSelection.szObjectName = &cpeObjectName[0];
|
|||
|
memset (cpeObjectName, 0, sizeof(cpeObjectName));
|
|||
|
|
|||
|
cpeLastSelection.szInstanceName = &cpeInstanceName[0];
|
|||
|
memset (cpeInstanceName, 0, sizeof(cpeInstanceName));
|
|||
|
|
|||
|
cpeLastSelection.szParentInstance = &cpeParentInstance[0];
|
|||
|
memset (cpeParentInstance, 0, sizeof(cpeParentInstance));
|
|||
|
|
|||
|
cpeLastSelection.dwInstanceIndex = (DWORD)-1;
|
|||
|
|
|||
|
cpeLastSelection.szCounterName = &cpeCounterName[0];
|
|||
|
memset (cpeCounterName, 0, sizeof(cpeCounterName));
|
|||
|
|
|||
|
memset (cpeLastPath, 0, sizeof(cpeLastPath));
|
|||
|
|
|||
|
bShowIndex = FALSE;
|
|||
|
|
|||
|
bSelectMultipleCounters = FALSE;
|
|||
|
bAddMultipleCounters = TRUE;
|
|||
|
bIncludeMachineInPath = FALSE;
|
|||
|
|
|||
|
szUsersPathBuffer = NULL;
|
|||
|
dwUsersPathBufferLength = 0;
|
|||
|
pCallBack = NULL;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void CBrowsCountersDlg::DoDataExchange(CDataExchange* pDX)
|
|||
|
{
|
|||
|
CDialog::DoDataExchange(pDX);
|
|||
|
//{{AFX_DATA_MAP(CBrowsCountersDlg)
|
|||
|
// NOTE: the ClassWizard will add DDX and DDV calls here
|
|||
|
//}}AFX_DATA_MAP
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
BEGIN_MESSAGE_MAP(CBrowsCountersDlg, CDialog)
|
|||
|
//{{AFX_MSG_MAP(CBrowsCountersDlg)
|
|||
|
ON_CBN_SETFOCUS(IDC_MACHINE_COMBO, OnSetfocusMachineCombo)
|
|||
|
ON_CBN_KILLFOCUS(IDC_MACHINE_COMBO, OnKillfocusMachineCombo)
|
|||
|
ON_CBN_SELCHANGE(IDC_OBJECT_COMBO, OnSelchangeObjectCombo)
|
|||
|
ON_LBN_SELCHANGE(IDC_COUNTER_LIST, OnSelchangeCounterList)
|
|||
|
ON_LBN_SELCHANGE(IDC_INSTANCE_LIST, OnSelchangeInstanceList)
|
|||
|
ON_BN_CLICKED(IDC_USE_LOCAL_MACHINE, OnUseLocalMachine)
|
|||
|
ON_BN_CLICKED(IDC_SELECT_MACHINE, OnSelectMachine)
|
|||
|
ON_BN_CLICKED(IDC_ALL_INSTANCES, OnAllInstances)
|
|||
|
ON_BN_CLICKED(IDC_USE_INSTANCE_LIST, OnUseInstanceList)
|
|||
|
ON_BN_CLICKED(IDC_HELP, OnHelp)
|
|||
|
ON_BN_CLICKED(IDC_NETWORK, OnNetwork)
|
|||
|
//}}AFX_MSG_MAP
|
|||
|
END_MESSAGE_MAP()
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////////////////
|
|||
|
// Utility Functions
|
|||
|
#define MACHINE_LIST_SIZE 1024
|
|||
|
#define OBJECT_LIST_SIZE 4096
|
|||
|
#define COUNTER_LIST_SIZE 8192
|
|||
|
#define INSTANCE_LIST_SIZE 8192
|
|||
|
|
|||
|
void CBrowsCountersDlg::LoadKnownMachines ()
|
|||
|
{
|
|||
|
TCHAR mszMachineList[MACHINE_LIST_SIZE];
|
|||
|
LPTSTR szThisMachine;
|
|||
|
DWORD dwLength;
|
|||
|
PDH_STATUS status;
|
|||
|
|
|||
|
HCURSOR hOldCursor;
|
|||
|
|
|||
|
hOldCursor = ::SetCursor (::LoadCursor (NULL, IDC_WAIT));
|
|||
|
|
|||
|
dwLength = MACHINE_LIST_SIZE;
|
|||
|
status = PdhEnumConnectedMachines (
|
|||
|
&mszMachineList[0],
|
|||
|
&dwLength);
|
|||
|
|
|||
|
SendDlgItemMessage(IDC_MACHINE_COMBO, CB_RESETCONTENT);
|
|||
|
|
|||
|
if (status == ERROR_SUCCESS) {
|
|||
|
// update the combo box
|
|||
|
for (szThisMachine = &mszMachineList[0];
|
|||
|
*szThisMachine != 0;
|
|||
|
szThisMachine += lstrlen(szThisMachine)+1) {
|
|||
|
SendDlgItemMessage (IDC_MACHINE_COMBO, CB_ADDSTRING,
|
|||
|
0, (LPARAM)szThisMachine);
|
|||
|
}
|
|||
|
SendDlgItemMessage (IDC_MACHINE_COMBO, CB_SETCURSEL);
|
|||
|
}
|
|||
|
::SetCursor (hOldCursor);
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::LoadMachineObjects (BOOL bRefresh)
|
|||
|
{
|
|||
|
TCHAR szMachineName[MAX_PATH];
|
|||
|
TCHAR szDefaultObject[MAX_PATH];
|
|||
|
TCHAR mszObjectList[OBJECT_LIST_SIZE];
|
|||
|
DWORD dwLength;
|
|||
|
LPTSTR szThisObject;
|
|||
|
HCURSOR hOldCursor;
|
|||
|
|
|||
|
hOldCursor = ::SetCursor (::LoadCursor (NULL, IDC_WAIT));
|
|||
|
// get current machine name
|
|||
|
(GetDlgItem(IDC_MACHINE_COMBO))->GetWindowText(szMachineName, MAX_PATH);
|
|||
|
|
|||
|
// get object list
|
|||
|
dwLength = OBJECT_LIST_SIZE;
|
|||
|
PdhEnumObjects (szMachineName, mszObjectList, &dwLength, bRefresh);
|
|||
|
|
|||
|
// load object list
|
|||
|
SendDlgItemMessage (IDC_OBJECT_COMBO, CB_RESETCONTENT);
|
|||
|
|
|||
|
for (szThisObject = &mszObjectList[0];
|
|||
|
*szThisObject != 0;
|
|||
|
szThisObject += lstrlen(szThisObject) + 1) {
|
|||
|
SendDlgItemMessage (IDC_OBJECT_COMBO, CB_ADDSTRING,
|
|||
|
0, (LPARAM)szThisObject);
|
|||
|
}
|
|||
|
|
|||
|
// get default Object
|
|||
|
dwLength = MAX_PATH;
|
|||
|
PdhGetDefaultPerfObject (
|
|||
|
szMachineName,
|
|||
|
szDefaultObject,
|
|||
|
&dwLength);
|
|||
|
|
|||
|
if (SendDlgItemMessage (IDC_OBJECT_COMBO, CB_SELECTSTRING,
|
|||
|
(WPARAM)-1, (LPARAM)szDefaultObject) == CB_ERR) {
|
|||
|
// default object not found in list so select the first one
|
|||
|
SendDlgItemMessage (IDC_OBJECT_COMBO, CB_SETCURSEL);
|
|||
|
}
|
|||
|
::SetCursor (hOldCursor);
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::LoadCountersAndInstances ()
|
|||
|
{
|
|||
|
TCHAR szMachineName[MAX_PATH];
|
|||
|
TCHAR szObjectName[MAX_PATH];
|
|||
|
TCHAR szDefaultCounter[MAX_PATH];
|
|||
|
TCHAR mszCounterList[COUNTER_LIST_SIZE];
|
|||
|
TCHAR mszInstanceList[INSTANCE_LIST_SIZE];
|
|||
|
TCHAR szInstanceString[MAX_PATH];
|
|||
|
LPTSTR szIndexStringPos;
|
|||
|
DWORD dwCounterLen;
|
|||
|
DWORD dwDefaultIndex;
|
|||
|
DWORD dwCounterListLength;
|
|||
|
DWORD dwInstanceListLength;
|
|||
|
DWORD dwInstanceMatch;
|
|||
|
DWORD dwInstanceIndex;
|
|||
|
LPTSTR szThisItem;
|
|||
|
CWnd *pcCounterListBox;
|
|||
|
CWnd *pcInstanceListBox;
|
|||
|
HCURSOR hOldCursor;
|
|||
|
|
|||
|
hOldCursor = ::SetCursor (::LoadCursor (NULL, IDC_WAIT));
|
|||
|
|
|||
|
// get current machine & object name
|
|||
|
(GetDlgItem(IDC_MACHINE_COMBO))->GetWindowText(szMachineName, MAX_PATH);
|
|||
|
(GetDlgItem(IDC_OBJECT_COMBO))->GetWindowText(szObjectName, MAX_PATH);
|
|||
|
|
|||
|
// get object list
|
|||
|
dwCounterListLength = sizeof(mszCounterList) / sizeof(TCHAR);
|
|||
|
dwInstanceListLength = sizeof(mszInstanceList) / sizeof(TCHAR);
|
|||
|
|
|||
|
PdhEnumObjectItems (
|
|||
|
szMachineName,
|
|||
|
szObjectName,
|
|||
|
mszCounterList,
|
|||
|
&dwCounterListLength,
|
|||
|
mszInstanceList,
|
|||
|
&dwInstanceListLength,
|
|||
|
0);
|
|||
|
|
|||
|
//reset contents of both list boxes
|
|||
|
|
|||
|
pcCounterListBox = GetDlgItem (IDC_COUNTER_LIST);
|
|||
|
pcInstanceListBox = GetDlgItem (IDC_INSTANCE_LIST);
|
|||
|
|
|||
|
pcCounterListBox->SendMessage (LB_RESETCONTENT);
|
|||
|
pcInstanceListBox->SendMessage (LB_RESETCONTENT);
|
|||
|
|
|||
|
// now fill 'em up
|
|||
|
// start with the counters
|
|||
|
for (szThisItem = mszCounterList;
|
|||
|
*szThisItem != 0;
|
|||
|
szThisItem += lstrlen(szThisItem) + 1) {
|
|||
|
pcCounterListBox->SendMessage (LB_ADDSTRING, 0, (LPARAM)szThisItem);
|
|||
|
}
|
|||
|
|
|||
|
dwCounterLen = MAX_PATH;
|
|||
|
PdhGetDefaultPerfCounter (
|
|||
|
szMachineName,
|
|||
|
szObjectName,
|
|||
|
szDefaultCounter,
|
|||
|
&dwCounterLen);
|
|||
|
|
|||
|
dwDefaultIndex = pcCounterListBox->SendMessage (LB_FINDSTRINGEXACT,
|
|||
|
(WPARAM)-1, (LPARAM)szDefaultCounter);
|
|||
|
if (dwDefaultIndex == LB_ERR) {
|
|||
|
pcCounterListBox->SendMessage (LB_SETSEL, TRUE, 0);
|
|||
|
} else {
|
|||
|
pcCounterListBox->SendMessage (LB_SETSEL, TRUE, dwDefaultIndex);
|
|||
|
pcCounterListBox->SendMessage (LB_SETCARETINDEX, (WPARAM)dwDefaultIndex,
|
|||
|
MAKELPARAM(FALSE, 0));
|
|||
|
}
|
|||
|
|
|||
|
// now the instance list
|
|||
|
if (dwInstanceListLength > 0) {
|
|||
|
pcInstanceListBox->EnableWindow(TRUE);
|
|||
|
GetDlgItem(IDC_ALL_INSTANCES)->EnableWindow(TRUE);
|
|||
|
GetDlgItem(IDC_USE_INSTANCE_LIST)->EnableWindow(TRUE);
|
|||
|
for (szThisItem = mszInstanceList;
|
|||
|
*szThisItem != 0;
|
|||
|
szThisItem += lstrlen(szThisItem) + 1) {
|
|||
|
if (bShowIndex) {
|
|||
|
dwInstanceIndex = 0;
|
|||
|
dwInstanceMatch = (DWORD)-1;
|
|||
|
// find the index of this instance
|
|||
|
lstrcpy (szInstanceString, szThisItem);
|
|||
|
lstrcat (szInstanceString, TEXT("#"));
|
|||
|
szIndexStringPos = &szInstanceString[lstrlen(szInstanceString)];
|
|||
|
|
|||
|
do {
|
|||
|
LongToString ((long)dwInstanceIndex++, szIndexStringPos, 10);
|
|||
|
dwInstanceMatch = (DWORD)SendDlgItemMessage (IDC_INSTANCE_LIST,
|
|||
|
LB_FINDSTRINGEXACT,
|
|||
|
(WPARAM)dwInstanceMatch, (LPARAM)szInstanceString);
|
|||
|
} while (dwInstanceMatch != LB_ERR);
|
|||
|
pcInstanceListBox->SendMessage (LB_ADDSTRING, 0, (LPARAM)szInstanceString);
|
|||
|
} else {
|
|||
|
pcInstanceListBox->SendMessage (LB_ADDSTRING, 0, (LPARAM)szThisItem);
|
|||
|
}
|
|||
|
}
|
|||
|
if (bWildCardInstances) {
|
|||
|
// disable instance list
|
|||
|
pcInstanceListBox->EnableWindow(FALSE);
|
|||
|
} else {
|
|||
|
if (pcInstanceListBox->SendMessage (LB_GETCOUNT) != LB_ERR) {
|
|||
|
pcInstanceListBox->SendMessage (LB_SETSEL, TRUE, 0);
|
|||
|
}
|
|||
|
}
|
|||
|
} else {
|
|||
|
pcInstanceListBox->SendMessage (LB_ADDSTRING, 0, (LPARAM)TEXT("<No Instances>"));
|
|||
|
pcInstanceListBox->EnableWindow(FALSE);
|
|||
|
GetDlgItem(IDC_ALL_INSTANCES)->EnableWindow(FALSE);
|
|||
|
GetDlgItem(IDC_USE_INSTANCE_LIST)->EnableWindow(FALSE);
|
|||
|
}
|
|||
|
::SetCursor (hOldCursor);
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::CompileSelectedCounters()
|
|||
|
{
|
|||
|
DWORD dwBufferRemaining;
|
|||
|
|
|||
|
DWORD dwCountCounters;
|
|||
|
DWORD dwThisCounter;
|
|||
|
DWORD dwCountInstances;
|
|||
|
DWORD dwThisInstance;
|
|||
|
|
|||
|
DWORD dwSize1, dwSize2;
|
|||
|
|
|||
|
PDH_COUNTER_PATH_ELEMENTS lszPath;
|
|||
|
TCHAR lszMachineName[MAX_PATH];
|
|||
|
TCHAR lszObjectName[MAX_PATH];
|
|||
|
TCHAR lszInstanceName[MAX_PATH];
|
|||
|
TCHAR lszParentInstance[MAX_PATH];
|
|||
|
TCHAR lszCounterName[MAX_PATH];
|
|||
|
|
|||
|
TCHAR szWorkBuffer[MAX_PATH];
|
|||
|
LPTSTR szCounterStart;
|
|||
|
|
|||
|
CWnd *cwCounterList, *cwInstanceList;
|
|||
|
|
|||
|
// clear user's string
|
|||
|
if (szUsersPathBuffer != NULL) {
|
|||
|
*szUsersPathBuffer = 0;
|
|||
|
dwBufferRemaining = dwUsersPathBufferLength;
|
|||
|
szCounterStart = szUsersPathBuffer;
|
|||
|
} else {
|
|||
|
return; // no point in continuing if user doesn't have a buffer
|
|||
|
}
|
|||
|
|
|||
|
// build base string using selected machine and object
|
|||
|
|
|||
|
if (bIncludeMachineInPath) {
|
|||
|
lszPath.szMachineName = &lszMachineName[0];
|
|||
|
memset (lszMachineName, 0, sizeof(lszMachineName));
|
|||
|
GetDlgItemText (IDC_MACHINE_COMBO, lszMachineName, MAX_PATH);
|
|||
|
} else {
|
|||
|
lszPath.szMachineName = NULL;
|
|||
|
}
|
|||
|
|
|||
|
lszPath.szObjectName = &lszObjectName[0];
|
|||
|
memset (lszObjectName, 0, sizeof(lszObjectName));
|
|||
|
GetDlgItemText (IDC_OBJECT_COMBO, lszObjectName, MAX_PATH);
|
|||
|
|
|||
|
cwCounterList = GetDlgItem (IDC_COUNTER_LIST);
|
|||
|
cwInstanceList = GetDlgItem (IDC_INSTANCE_LIST);
|
|||
|
|
|||
|
if (bSelectMultipleCounters) {
|
|||
|
if (bWildCardInstances) {
|
|||
|
lszPath.szInstanceName = &lszInstanceName[0];
|
|||
|
memset (lszInstanceName, 0, sizeof(lszInstanceName));
|
|||
|
lstrcpy (lszInstanceName, TEXT("*"));
|
|||
|
lszPath.szParentInstance = NULL;
|
|||
|
lszPath.dwInstanceIndex = (DWORD)-1;
|
|||
|
|
|||
|
dwSize1 = sizeof (szWorkBuffer) / sizeof (TCHAR);
|
|||
|
PdhMakeCounterPath (&lszPath,
|
|||
|
szWorkBuffer,
|
|||
|
&dwSize1,
|
|||
|
0);
|
|||
|
|
|||
|
if ((dwSize1 + 1) < dwBufferRemaining) {
|
|||
|
// then this will fit so add it to the string
|
|||
|
lstrcpy (szCounterStart, szWorkBuffer);
|
|||
|
szCounterStart += lstrlen(szWorkBuffer);
|
|||
|
*szCounterStart++ = 0;
|
|||
|
}
|
|||
|
} else {
|
|||
|
// get selected instances from list
|
|||
|
dwCountCounters = cwCounterList->SendMessage (LB_GETCOUNT);
|
|||
|
for (dwThisCounter = 0; dwThisCounter < dwCountCounters; dwThisCounter++) {
|
|||
|
if (cwCounterList->SendMessage (LB_GETSEL, (WPARAM)dwThisCounter)) {
|
|||
|
lszPath.szCounterName = &lszCounterName[0];
|
|||
|
memset (lszCounterName, 0, sizeof(lszCounterName));
|
|||
|
cwCounterList->SendMessage (LB_GETTEXT, (WPARAM)dwThisCounter, (LPARAM)lszCounterName);
|
|||
|
|
|||
|
if (cwInstanceList->IsWindowEnabled()) {
|
|||
|
dwCountInstances = cwInstanceList->SendMessage (LB_GETCOUNT);
|
|||
|
for (dwThisInstance = 0; dwThisInstance < dwCountInstances; dwThisInstance++) {
|
|||
|
if (cwInstanceList->SendMessage (LB_GETSEL, (WPARAM)dwThisInstance)) {
|
|||
|
lszPath.szInstanceName = &lszInstanceName[0];
|
|||
|
memset (lszInstanceName, 0, sizeof(lszInstanceName));
|
|||
|
cwInstanceList->SendMessage (LB_GETTEXT,
|
|||
|
(WPARAM)dwThisInstance, (LPARAM)lszInstanceName);
|
|||
|
|
|||
|
lszPath.szParentInstance = &lszParentInstance[0];
|
|||
|
memset (lszParentInstance, 0, sizeof(lszParentInstance));
|
|||
|
|
|||
|
dwSize1 = dwSize2 = MAX_PATH;
|
|||
|
PdhParseInstanceName (lszInstanceName,
|
|||
|
lszInstanceName,
|
|||
|
&dwSize1,
|
|||
|
lszParentInstance,
|
|||
|
&dwSize2,
|
|||
|
&lszPath.dwInstanceIndex);
|
|||
|
|
|||
|
|
|||
|
// parse instance name adds in the default index of one is
|
|||
|
// not present. so if it's not wanted, this will remove it
|
|||
|
if (!bShowIndex) lszPath.dwInstanceIndex = (DWORD)-1;
|
|||
|
|
|||
|
if (dwSize1 > 0) {
|
|||
|
lszPath.szInstanceName = &lszInstanceName[0];
|
|||
|
} else {
|
|||
|
lszPath.szInstanceName = NULL;
|
|||
|
}
|
|||
|
if (dwSize2 > 0) {
|
|||
|
lszPath.szParentInstance = &lszParentInstance[0];
|
|||
|
} else {
|
|||
|
lszPath.szParentInstance = NULL;
|
|||
|
}
|
|||
|
|
|||
|
dwSize1 = sizeof (szWorkBuffer) / sizeof (TCHAR);
|
|||
|
PdhMakeCounterPath (&lszPath,
|
|||
|
szWorkBuffer,
|
|||
|
&dwSize1,
|
|||
|
0);
|
|||
|
|
|||
|
if ((dwSize1 + 1) < dwBufferRemaining) {
|
|||
|
// then this will fit so add it to the string
|
|||
|
lstrcpy (szCounterStart, szWorkBuffer);
|
|||
|
szCounterStart += lstrlen(szWorkBuffer);
|
|||
|
*szCounterStart++ = 0;
|
|||
|
}
|
|||
|
|
|||
|
} // end if instance is selected
|
|||
|
} // end for each instance in list
|
|||
|
} else {
|
|||
|
// this counter has no instances so process now
|
|||
|
lszPath.szInstanceName = NULL;
|
|||
|
lszPath.szParentInstance = NULL;
|
|||
|
lszPath.dwInstanceIndex = (DWORD)-1;
|
|||
|
|
|||
|
dwSize1 = sizeof (szWorkBuffer) / sizeof (TCHAR);
|
|||
|
PdhMakeCounterPath (&lszPath,
|
|||
|
szWorkBuffer,
|
|||
|
&dwSize1,
|
|||
|
0);
|
|||
|
|
|||
|
if ((dwSize1 + 1) < dwBufferRemaining) {
|
|||
|
// then this will fit so add it to the string
|
|||
|
lstrcpy (szCounterStart, szWorkBuffer);
|
|||
|
szCounterStart += lstrlen(szWorkBuffer);
|
|||
|
*szCounterStart++ = 0;
|
|||
|
}
|
|||
|
|
|||
|
} // end if counter has instances
|
|||
|
} // else counter is not selected
|
|||
|
} // end for each counter in list
|
|||
|
} // end if not wild card instances
|
|||
|
*szCounterStart++ = 0; // terminate MSZ
|
|||
|
} else {
|
|||
|
// only single selections are allowed
|
|||
|
// FIXFIX: add this code.
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
////////////////////////////////////////////////////////////////////////////
|
|||
|
// CBrowsCountersDlg message handlers
|
|||
|
|
|||
|
BOOL CBrowsCountersDlg::OnInitDialog()
|
|||
|
{
|
|||
|
HCURSOR hOldCursor;
|
|||
|
|
|||
|
hOldCursor = ::SetCursor (::LoadCursor (NULL, IDC_WAIT));
|
|||
|
|
|||
|
CDialog::OnInitDialog();
|
|||
|
|
|||
|
// limit text to machine name
|
|||
|
(GetDlgItem(IDC_MACHINE_COMBO))->SendMessage(EM_LIMITTEXT, MAX_PATH);
|
|||
|
|
|||
|
// set check boxes to the caller defined setting
|
|||
|
|
|||
|
CheckRadioButton (IDC_USE_LOCAL_MACHINE, IDC_SELECT_MACHINE,
|
|||
|
(bIncludeMachineInPath ? IDC_SELECT_MACHINE : IDC_USE_LOCAL_MACHINE));
|
|||
|
GetDlgItem(IDC_MACHINE_COMBO)->EnableWindow (
|
|||
|
(bIncludeMachineInPath ? TRUE : FALSE));
|
|||
|
|
|||
|
CheckRadioButton (IDC_ALL_INSTANCES, IDC_USE_INSTANCE_LIST,
|
|||
|
IDC_USE_INSTANCE_LIST);
|
|||
|
|
|||
|
// set button text strings to reflect mode of dialog
|
|||
|
if (bAddMultipleCounters) {
|
|||
|
(GetDlgItem(IDOK))->SetWindowText(TEXT("Add"));
|
|||
|
(GetDlgItem(IDCANCEL))->SetWindowText(TEXT("Close"));
|
|||
|
}
|
|||
|
|
|||
|
// connect to this machine
|
|||
|
PdhConnectMachine(NULL); // Null is local machine
|
|||
|
|
|||
|
LoadKnownMachines(); // load machine list
|
|||
|
LoadMachineObjects(TRUE); // load object list
|
|||
|
LoadCountersAndInstances();
|
|||
|
|
|||
|
wpLastMachineSel = 0;
|
|||
|
|
|||
|
::SetCursor (hOldCursor);
|
|||
|
|
|||
|
return TRUE; // return TRUE unless you set the focus to a control
|
|||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnOK()
|
|||
|
{
|
|||
|
HCURSOR hOldCursor;
|
|||
|
|
|||
|
hOldCursor = ::SetCursor (::LoadCursor (NULL, IDC_WAIT));
|
|||
|
|
|||
|
CompileSelectedCounters();
|
|||
|
if (pCallBack != NULL) {
|
|||
|
(*pCallBack)(dwArg);
|
|||
|
}
|
|||
|
if (!bAddMultipleCounters) {
|
|||
|
CDialog::OnOK();
|
|||
|
}
|
|||
|
::SetCursor (hOldCursor);
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnCancel()
|
|||
|
{
|
|||
|
CDialog::OnCancel();
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnSetfocusMachineCombo()
|
|||
|
{
|
|||
|
wpLastMachineSel = SendDlgItemMessage (IDC_MACHINE_COMBO, CB_GETCURSEL);
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnKillfocusMachineCombo()
|
|||
|
{
|
|||
|
TCHAR szNewMachineName[MAX_PATH];
|
|||
|
CWnd *pcMachineCombo;
|
|||
|
long lMatchIndex;
|
|||
|
PDH_STATUS status;
|
|||
|
int mbStatus;
|
|||
|
HCURSOR hOldCursor;
|
|||
|
|
|||
|
hOldCursor = ::SetCursor (::LoadCursor (NULL, IDC_WAIT));
|
|||
|
|
|||
|
pcMachineCombo = GetDlgItem(IDC_MACHINE_COMBO);
|
|||
|
|
|||
|
// Get current combo box text
|
|||
|
|
|||
|
pcMachineCombo->GetWindowText (szNewMachineName, MAX_PATH);
|
|||
|
|
|||
|
// see if it's in the combo box already
|
|||
|
|
|||
|
lMatchIndex = (long)pcMachineCombo->SendMessage (
|
|||
|
CB_FINDSTRING,(WPARAM)-1, (LPARAM)szNewMachineName);
|
|||
|
|
|||
|
// if name is in list, then select it
|
|||
|
|
|||
|
if (lMatchIndex != CB_ERR) {
|
|||
|
// this name is already in the list so see if it's the same as the last selected machine
|
|||
|
if (lstrcmpi (szNewMachineName, cpeMachineName) != 0) {
|
|||
|
// this is a different machine so update the display
|
|||
|
pcMachineCombo->SendMessage (CB_SETCURSEL, (WPARAM)lMatchIndex);
|
|||
|
LoadMachineObjects (TRUE);
|
|||
|
LoadCountersAndInstances ();
|
|||
|
}
|
|||
|
} else {
|
|||
|
// not in list so try to add it
|
|||
|
status = PdhConnectMachine (szNewMachineName);
|
|||
|
|
|||
|
if (status == ERROR_SUCCESS) {
|
|||
|
// if successful, add string to combo box
|
|||
|
lMatchIndex = pcMachineCombo->SendMessage (CB_ADDSTRING, 0, (LPARAM)szNewMachineName);
|
|||
|
pcMachineCombo->SendMessage (CB_SETCURSEL, (WPARAM)lMatchIndex);
|
|||
|
// update other fields
|
|||
|
LoadMachineObjects (); // no need to update since it was just connected
|
|||
|
LoadCountersAndInstances ();
|
|||
|
} else {
|
|||
|
mbStatus = MessageBox (TEXT("Unable to connect to machine"), NULL,
|
|||
|
MB_ICONEXCLAMATION | MB_TASKMODAL | MB_OKCANCEL);
|
|||
|
if (mbStatus == IDCANCEL) {
|
|||
|
GetDlgItem(IDC_MACHINE_COMBO)->SetFocus();
|
|||
|
} else {
|
|||
|
pcMachineCombo->SendMessage (CB_SETCURSEL, wpLastMachineSel);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
::SetCursor (hOldCursor);
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnSelchangeObjectCombo()
|
|||
|
{
|
|||
|
LoadCountersAndInstances();
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnSelchangeCounterList()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnSelchangeInstanceList()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnUseLocalMachine()
|
|||
|
{
|
|||
|
BOOL bMode;
|
|||
|
|
|||
|
bMode = !(BOOL)IsDlgButtonChecked(IDC_USE_LOCAL_MACHINE);
|
|||
|
GetDlgItem(IDC_MACHINE_COMBO)->EnableWindow(bMode);
|
|||
|
bIncludeMachineInPath = bMode;
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnSelectMachine()
|
|||
|
{
|
|||
|
BOOL bMode ;
|
|||
|
|
|||
|
bMode = (BOOL)IsDlgButtonChecked(IDC_SELECT_MACHINE);
|
|||
|
GetDlgItem(IDC_MACHINE_COMBO)->EnableWindow(bMode);
|
|||
|
bIncludeMachineInPath = bMode;
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnAllInstances()
|
|||
|
{
|
|||
|
BOOL bMode;
|
|||
|
CWnd *pInstanceList;
|
|||
|
|
|||
|
bMode = (BOOL)IsDlgButtonChecked(IDC_ALL_INSTANCES);
|
|||
|
pInstanceList = GetDlgItem(IDC_INSTANCE_LIST);
|
|||
|
// if "Sselect ALL" then clear list box selections and disable
|
|||
|
if (bMode) {
|
|||
|
pInstanceList->SendMessage(LB_SETSEL, FALSE, (LPARAM)-1);
|
|||
|
}
|
|||
|
pInstanceList->EnableWindow(!bMode);
|
|||
|
bWildCardInstances = bMode;
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnUseInstanceList()
|
|||
|
{
|
|||
|
BOOL bMode;
|
|||
|
CWnd *pInstanceList;
|
|||
|
|
|||
|
bMode = (BOOL)IsDlgButtonChecked(IDC_USE_INSTANCE_LIST);
|
|||
|
pInstanceList = GetDlgItem(IDC_INSTANCE_LIST);
|
|||
|
|
|||
|
// enable list box and select 1st Instance
|
|||
|
pInstanceList->EnableWindow(bMode);
|
|||
|
if (bMode) {
|
|||
|
if (pInstanceList->SendMessage(LB_GETCOUNT) > 0) {
|
|||
|
pInstanceList->SendMessage (LB_SETSEL, TRUE, 0);
|
|||
|
}
|
|||
|
}
|
|||
|
bWildCardInstances = !bMode;
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnHelp()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void CBrowsCountersDlg::OnNetwork()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|