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()
|
||
{
|
||
|
||
}
|
||
|