|
|
// WmiBrowseDlg.cpp : implementation file
//
// 03/28/00 v-marfin 62468 : Added efficiencies to help queries with thousands of
// records load faster.
// 03/30/00 v-marfin 62469 : If no occurrences, disable the OK button
#include "stdafx.h"
#include "snapin.h"
#include "WmiBrowseDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CWmiBrowseDlg dialog
CWmiBrowseDlg::CWmiBrowseDlg(CWnd* pParent /*=NULL*/) : CResizeableDialog(CWmiBrowseDlg::IDD, pParent) { //{{AFX_DATA_INIT(CWmiBrowseDlg)
m_sTitle = _T(""); //}}AFX_DATA_INIT
}
void CWmiBrowseDlg::DoDataExchange(CDataExchange* pDX) { CResizeableDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CWmiBrowseDlg)
DDX_Control(pDX, IDC_LIST_WMI_ITEMS, m_Items); DDX_Text(pDX, IDC_STATIC_TITLE, m_sTitle); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWmiBrowseDlg, CResizeableDialog) //{{AFX_MSG_MAP(CWmiBrowseDlg)
ON_BN_CLICKED(IDC_BUTTON_HELP, OnButtonHelp) ON_NOTIFY(NM_DBLCLK, IDC_LIST_WMI_ITEMS, OnDblclkListWmiItems) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWmiBrowseDlg message handlers
BOOL CWmiBrowseDlg::OnInitDialog() { CResizeableDialog::OnInitDialog();
// subclass header control
m_Items.SubclassHeaderCtrl();
// set the extended styles for the list control
m_Items.SetExtendedStyle(LVS_EX_LABELTIP|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP);
// set styles for the header control
CHeaderCtrl* pHdrCtrl = m_Items.GetHeaderCtrl(); DWORD dwStyle = GetWindowLong(pHdrCtrl->GetSafeHwnd(),GWL_STYLE); dwStyle |= (HDS_DRAGDROP|HDS_BUTTONS); SetWindowLong(pHdrCtrl->GetSafeHwnd(),GWL_STYLE,dwStyle);
SetControlInfo(IDC_STATIC_TITLE, ANCHOR_LEFT | ANCHOR_TOP | RESIZE_HOR); SetControlInfo(IDC_LIST_WMI_ITEMS, ANCHOR_LEFT | ANCHOR_TOP | RESIZE_HOR | RESIZE_VER); SetControlInfo(IDOK, ANCHOR_BOTTOM | ANCHOR_LEFT ); SetControlInfo(IDCANCEL, ANCHOR_BOTTOM | ANCHOR_LEFT ); SetControlInfo(IDC_BUTTON_HELP,ANCHOR_BOTTOM | ANCHOR_LEFT );
SetWindowText(m_sDlgTitle);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CWmiBrowseDlg::OnButtonHelp() { // TODO: Add your control notification handler code here
}
void CWmiBrowseDlg::OnDblclkListWmiItems(NMHDR* pNMHDR, LRESULT* pResult) { OnOK(); *pResult = 0; }
void CWmiBrowseDlg::OnOK() { POSITION pos = m_Items.GetFirstSelectedItemPosition();
if( ! pos ) { return; }
int iIndex = m_Items.GetNextSelectedItem(pos);
if( iIndex < 0 ) { return; }
m_sSelectedItem = m_Items.GetItemText(iIndex,0);
CResizeableDialog::OnOK(); }
/////////////////////////////////////////////////////////////////////////////
// CWmiNamespaceBrowseDlg dialog
BOOL CWmiNamespaceBrowseDlg::OnInitDialog() { CWmiBrowseDlg::OnInitDialog();
CWaitCursor wait;
// add column headers to the list ctrl
CString sColName; sColName.LoadString(IDS_STRING_NAME); m_Items.InsertColumn(0,sColName); m_Items.SetColumnWidth(0,LVSCW_AUTOSIZE);
// insert the root namespace
m_Items.InsertItem(0,_T("ROOT")); if( m_sTitle.CompareNoCase(_T("ROOT")) == 0 ) { m_Items.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED); }
// enumerate all namespaces on the system recursively
EnumerateAllChildNamespaces(_T("ROOT"));
m_sTitle.Format(IDS_STRING_NAMESPACES_ON_SYSTEM,m_ClassObject.GetMachineName());
if( m_Items.GetItemCount() == 0 ) { m_Items.DeleteColumn(0); m_Items.InsertColumn(0,_T("")); CString sNoInstancesFound; sNoInstancesFound.LoadString(IDS_STRING_NO_ITEMS_FOUND); m_Items.InsertItem(0,sNoInstancesFound); m_Items.SetColumnWidth(0,LVSCW_AUTOSIZE); m_Items.EnableWindow(FALSE); }
UpdateData(FALSE);
return TRUE; }
void CWmiNamespaceBrowseDlg::EnumerateAllChildNamespaces(const CString& sNamespace) { ULONG ulReturned = 0L; int i = 0;
CWbemClassObject Namespaces; Namespaces.Create(m_ClassObject.GetMachineName());
Namespaces.SetNamespace(sNamespace);
CString sTemp = IDS_STRING_MOF_NAMESPACE; BSTR bsTemp = sTemp.AllocSysString(); if( ! CHECKHRESULT(Namespaces.CreateEnumerator(bsTemp)) ) { ::SysFreeString(bsTemp); return; } ::SysFreeString(bsTemp);
while( Namespaces.GetNextObject(ulReturned) == S_OK && ulReturned ) { CString sName; Namespaces.GetProperty(IDS_STRING_MOF_NAME,sName);
CString sTemp2; Namespaces.GetProperty(IDS_STRING_MOF_NAMESPACE,sTemp2);
CString sNamespaceFound = sTemp2 + _T("\\") + sName; int iIndex = m_Items.InsertItem(i++,sNamespaceFound); if( sNamespaceFound.CompareNoCase(m_sTitle) == 0 ) { m_Items.SetItemState(iIndex,LVIS_SELECTED,LVIS_SELECTED); m_Items.EnsureVisible(iIndex,FALSE); } EnumerateAllChildNamespaces(sNamespaceFound); }
m_Items.SetColumnWidth(0,LVSCW_AUTOSIZE); }
/////////////////////////////////////////////////////////////////////////////
// CWmiClassBrowseDlg dialog
BOOL CWmiClassBrowseDlg::OnInitDialog() { CWmiBrowseDlg::OnInitDialog();
CWaitCursor wait;
// add column headers to the list ctrl
CString sColName; sColName.LoadString(IDS_STRING_NAME); m_Items.InsertColumn(0,sColName); m_Items.SetColumnWidth(0,LVSCW_AUTOSIZE);
ULONG ulReturned = 0L; int i = 0;
while( m_ClassObject.GetNextObject(ulReturned) == S_OK && ulReturned ) { CString sName;
m_ClassObject.GetProperty(IDS_STRING_MOF_CLASSNAME,sName); m_Items.InsertItem(i++,sName); m_Items.SetColumnWidth(0,LVSCW_AUTOSIZE); }
if( m_Items.GetItemCount() == 0 ) { m_Items.DeleteColumn(0); m_Items.InsertColumn(0,_T("")); CString sNoInstancesFound; sNoInstancesFound.LoadString(IDS_STRING_NO_ITEMS_FOUND); m_Items.InsertItem(0,sNoInstancesFound); m_Items.SetColumnWidth(0,LVSCW_AUTOSIZE); m_Items.EnableWindow(FALSE); }
return TRUE; }
/////////////////////////////////////////////////////////////////////////////
// CWmiInstanceBrowseDlg dialog
BOOL CWmiInstanceBrowseDlg::OnInitDialog() { CWmiBrowseDlg::OnInitDialog();
CWaitCursor wait;
// add column headers to the list ctrl
CString sColName; sColName.LoadString(IDS_STRING_PATH); m_Items.InsertColumn(0,sColName); m_Items.SetColumnWidth(0,LVSCW_AUTOSIZE);
sColName.LoadString(IDS_STRING_NAME); m_Items.InsertColumn(1,sColName); m_Items.SetColumnWidth(1,LVSCW_AUTOSIZE);
int order[] = { 1,0 }; m_Items.SetColumnOrderArray(2,order);
ULONG ulReturned = 0L; int i = 0; bool bNamePropertyExists = true;
// // v-marfin 62468 define CStrings outside of loop for performance purposes
CString sProperty; // v-marfin 62468
CString sNameProperty; // v-marfin 62468
HRESULT hr=0; int iItemIndex=0;
while( m_ClassObject.GetNextObject(ulReturned) == S_OK && ulReturned ) {
m_ClassObject.GetProperty(IDS_STRING_MOF_RELPATH,sProperty); iItemIndex = m_Items.InsertItem(i,sProperty);
// v-marfin 62468 : Don't check for this if we know the name doesn't exist.
if (bNamePropertyExists) { hr = m_ClassObject.GetProperty(IDS_STRING_MOF_NAME,sNameProperty); if( !CHECKHRESULT(hr) ) { bNamePropertyExists = false; sNameProperty.Empty(); // v-marfin 62468
} }
m_Items.SetItem(iItemIndex,1,LVIF_TEXT,sNameProperty,-1,-1,-1,0L); // v-marfin 62468 : m_Items.SetColumnWidth(0,LVSCW_AUTOSIZE);
// v-marfin 62468 : m_Items.SetColumnWidth(1,LVSCW_AUTOSIZE);
i++;
// v-marfin 62468
if (i > 1000) break; }
m_Items.SetColumnWidth(0,LVSCW_AUTOSIZE); // v-marfin 62468 :
m_Items.SetColumnWidth(1,LVSCW_AUTOSIZE); // v-marfin 62468
if( ! bNamePropertyExists ) { m_Items.DeleteColumn(1); }
int nCount = m_Items.GetItemCount();
if( m_Items.GetItemCount() == 0 ) { m_Items.DeleteColumn(1); m_Items.DeleteColumn(0); m_Items.InsertColumn(0,_T("")); CString sNoInstancesFound; sNoInstancesFound.LoadString(IDS_STRING_NO_ITEMS_FOUND); m_Items.InsertItem(0,sNoInstancesFound); m_Items.SetColumnWidth(0,LVSCW_AUTOSIZE); m_Items.EnableWindow(FALSE); } else { // v-marfin 62469
m_Items.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED); }
// v-marfin 62469 : If no occurrences, disable the OK button
GetDlgItem(IDOK)->EnableWindow(nCount);
return TRUE; }
|