// SysInfoDialog.cpp : implementation file // #include "stdafx.h" #include "systemstateinfo.h" #include "SysInfoDialog.h" #include "OXSysInfo.h" #include "OXInteger.h" #include "UTBStrOp.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSysInfoDialog dialog CSysInfoDialog::CSysInfoDialog() : CPageDialog() { //{{AFX_DATA_INIT(CSysInfoDialog) m_nExpandLevel = 0; m_nExpandType = 1; m_bShowPrinters = FALSE; //}}AFX_DATA_INIT } void CSysInfoDialog::DoDataExchange(CDataExchange* pDX) { CPageDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSysInfoDialog) DDX_Control(pDX, IDC_SPIN_EXPANDLEVEL, m_spinExpandLevel); DDX_Control(pDX, IDC_EDIT_EXPANDLEVEL, m_editExpandLevel); DDX_Control(pDX, IDC_TREE_ITEMS, m_tree); DDX_Text(pDX, IDC_EDIT_EXPANDLEVEL, m_nExpandLevel); DDX_Radio(pDX, IDC_RADIO_EXPANDLEVEL, m_nExpandType); DDX_Check(pDX, IDC_SHOWPRINTERS, m_bShowPrinters); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSysInfoDialog, CPageDialog) //{{AFX_MSG_MAP(CSysInfoDialog) ON_BN_CLICKED(IDC_RADIO_EXPANDALL, OnRadioExpandall) ON_BN_CLICKED(IDC_RADIO_EXPANDLEVEL, OnRadioExpandlevel) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSysInfoDialog message handlers void CSysInfoDialog::OnInitDialog() { CPageDialog::OnInitDialog(); // TODO: Add your specialized creation code here m_ilTree.Create(IDB_SYSINFO_TREE_IMAGE,16,1,RGB(255,0,255)); m_tree.SetImageList(&m_ilTree,TVSIL_NORMAL); LV_COLUMN lvc={ sizeof(lvc) }; lvc.fmt=LVCFMT_LEFT; lvc.cx=237; lvc.pszText=_T("Item"); lvc.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT; m_tree.SetColumn(0,&lvc); m_tree.InsertColumn(1,_T("Value"),LVCFMT_LEFT,200,1); // set COXTreeCtrl styles m_tree.ModifyExStyle(0,TVOXS_PICKANYWHERE|TVOXS_ROWSEL); m_tree.ModifyStyle(0,TVS_SHOWSELALWAYS|TVS_HASBUTTONS| TVS_HASLINES|TVS_LINESATROOT); // spin control m_spinExpandLevel.SetRange(0,3); m_spinExpandLevel.SetPos(0); // layout manager // m_LayoutManager.Attach(this); // tree control m_LayoutManager.TieChild(IDC_TREE_ITEMS,OX_LMS_ANY,OX_LMT_SAME); ////////////////// // radio buttons and expand level edit control m_LayoutManager.TieChild(IDC_RADIO_EXPANDALL, OX_LMS_LEFT|OX_LMS_BOTTOM,OX_LMT_SAME); m_LayoutManager.TieChild(IDC_RADIO_EXPANDLEVEL, OX_LMS_LEFT|OX_LMS_BOTTOM,OX_LMT_SAME); m_LayoutManager.TieChild(IDC_EDIT_EXPANDLEVEL,OX_LMS_LEFT, OX_LMT_OPPOSITE,IDC_RADIO_EXPANDLEVEL); m_LayoutManager.TieChild(IDC_EDIT_EXPANDLEVEL,OX_LMS_BOTTOM,OX_LMT_SAME); m_LayoutManager.TieChild(IDC_SPIN_EXPANDLEVEL,OX_LMS_LEFT, OX_LMT_OPPOSITE,IDC_EDIT_EXPANDLEVEL); m_LayoutManager.TieChild(IDC_SPIN_EXPANDLEVEL,OX_LMS_BOTTOM,OX_LMT_SAME); m_LayoutManager.TieChild(IDC_SHOWPRINTERS,OX_LMS_BOTTOM,OX_LMT_SAME); ////////////////// ////////////////////////////////////// PopulateTree(); ShowControls(); } void CSysInfoDialog::Refresh() { PopulateTree(); } void CSysInfoDialog::PopulateTree() { if(!UpdateData()) return; CWaitCursor waitCursor; m_tree.SetRedraw(FALSE); m_tree.DeleteAllItems(); // create fonts to customize tree items appearance LOGFONT lf; CFont fontRoot; CFont fontSubRoot; CFont* pFontRoot=GetFont(); if(pFontRoot->GetLogFont(&lf)) { lf.lfHeight=-14; UTBStr::tcsncpy(lf.lfFaceName, LF_FACESIZE, _T("Arial"),LF_FACESIZE); fontRoot.CreateFontIndirect(&lf); lf.lfHeight=-12; lf.lfWeight=FW_BOLD; UTBStr::tcsncpy(lf.lfFaceName,LF_FACESIZE,_T("Times New Roman"),LF_FACESIZE); fontSubRoot.CreateFontIndirect(&lf); } pFontRoot=((HFONT)fontRoot!=NULL) ? &fontRoot : NULL; CFont* pFontSubRoot=((HFONT)fontSubRoot!=NULL) ? &fontSubRoot : NULL; CString sValue; DWORD dwValue; BOOL bResult; HTREEITEM htiRoot; HTREEITEM htiSubRoot; HTREEITEM htiItem; COLORREF clrTopic=RGB(0,0,255); COLORREF clrValue=RGB(0,128,0); COXInteger Integer; COXSysInfo m_SysInfo; BOOL bIsWindowsNT=FALSE; /////////////////////////////////////////////////// // SYSTEM // htiRoot=InsertItem(_T("System"),NULL,0,pFontRoot,clrTopic); HTREEITEM htiSelectItem=htiRoot; // operating system DWORD dwPlatform,dwMajor,dwMinor; if(m_SysInfo.GetWindowsVersion(&dwPlatform,&dwMajor,&dwMinor)) { htiItem=InsertItem(_T("Operating system"),htiRoot); if(dwPlatform==VER_PLATFORM_WIN32s) { sValue=_T("Windows 3.1"); } else if(dwPlatform==VER_PLATFORM_WIN32_WINDOWS) { if(dwMajor==4 && dwMinor==0) { sValue=_T("Windows 95"); BOOL bIsOSR2; if(m_SysInfo.IsOSR2(&bIsOSR2) && bIsOSR2) sValue=sValue+_T(" OSR 2"); } else if(dwMajor==4 && dwMinor==10) sValue=_T("Windows 98"); else if(dwMajor==4 && dwMinor==90) sValue=_T("Windows Me"); else sValue=_T("Unknown"); } else if(dwPlatform==VER_PLATFORM_WIN32_NT) { if(dwMajor==5) { switch (dwMinor) { case 2: sValue = _T("Windows Server 2003"); break; case 1: sValue = _T("Windows XP"); break; case 0: { sValue=_T("Windows 2000"); BOOL bIsNTServer; if(m_SysInfo.IsNTServer(&bIsNTServer)) { if(bIsNTServer) sValue+=_T(" Server"); else sValue+=_T(" Professional"); } } break; default: sValue = _T("Windows Vista"); } VERIFY(sValue.GetBuffer(1024)!=NULL); //sValue.Format(_T("%s v%d.%d"),sValue,dwMajor,dwMinor); sValue.ReleaseBuffer(); bIsWindowsNT=TRUE; } else { sValue=_T("Windows NT"); BOOL bIsNTServer; if(m_SysInfo.IsNTServer(&bIsNTServer)) { if(bIsNTServer) sValue+=_T(" Server"); else sValue+=_T(" Workstation"); } VERIFY(sValue.GetBuffer(1024)!=NULL); sValue.Format(_T("%s v%d.%d"),sValue,dwMajor,dwMinor); sValue.ReleaseBuffer(); bIsWindowsNT=TRUE; } } else sValue=_T("Unknown"); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // build number if(m_SysInfo.GetWindowsBuildNumber(&dwValue)) { htiItem=InsertItem(_T("Build Number"),htiRoot); sValue.Format(_T("%u"),dwValue); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // platform info if(m_SysInfo.GetWindowsPlatformInfo(sValue) && !sValue.IsEmpty() && !sValue.SpanExcluding(_T(" ")).IsEmpty()) { htiItem=InsertItem(_T("Platform Info"),htiRoot); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // computer name if(m_SysInfo.GetComputerName(&sValue)) { htiItem=InsertItem(_T("Computer name"),htiRoot); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // User & Domain name CString sDomain; if(bIsWindowsNT && m_SysInfo.GetUserAndDomainName(&sValue,&sDomain)) { htiItem=InsertItem(_T("Domain name"),htiRoot); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sDomain,0,NULL,clrValue)); htiItem=InsertItem(_T("User name"),htiRoot); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } else if(m_SysInfo.GetUserName(&sValue)) { htiItem=InsertItem(_T("User name"),htiRoot); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // Network Interface Card (NIC) Address NICADDRESS NICAddress; if(m_SysInfo.GetNICAddress(&NICAddress)) { htiItem=InsertItem(_T("Network Interface Card (NIC) Address"),htiRoot); sValue.Format(_T("%.2x.%.2x.%.2x.%.2x.%.2x.%.2x"), NICAddress.data[0],NICAddress.data[1],NICAddress.data[2], NICAddress.data[3],NICAddress.data[4],NICAddress.data[5]); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // IP address(es) CStringArray arrIPAddresses; if(m_SysInfo.GetListIPAddresses(&arrIPAddresses)) { ASSERT(arrIPAddresses.GetSize()>0); if(arrIPAddresses.GetSize()>1) { htiSubRoot=InsertItem(_T("IP Addresses"),htiRoot,-1,pFontSubRoot); sValue.Format(_T("%u"),arrIPAddresses.GetSize()); VERIFY(m_tree.SetSubItem(htiSubRoot,1, OX_SUBITEM_TEXT|(pFontSubRoot!=NULL ? OX_SUBITEM_FONT : 0), sValue,0,pFontSubRoot)); } else htiSubRoot=htiRoot; for(int nIndex=0; nIndex=1); // topic will depend on the number of processors used in the system if(nNumProcessors>1) { htiRoot=InsertItem(_T("Processors"),NULL,2,pFontRoot,clrTopic); sValue.Format(_T("%d"),nNumProcessors); VERIFY(m_tree.SetSubItem(htiRoot,1, OX_SUBITEM_TEXT|(pFontRoot!=NULL ? OX_SUBITEM_FONT : 0), sValue,0,pFontRoot)); htiSubRoot=InsertItem(_T("Primary processor"), htiRoot,-1,pFontSubRoot); } else htiSubRoot=InsertItem(_T("Processor"),NULL,2,pFontRoot,clrTopic); /////////////////////////////////////////////////////////////////// // primary processor description // // Processor Architecture DWORD dwProcessorType; if(m_SysInfo.GetProcessorType(&dwProcessorType)) { htiItem=InsertItem(_T("Architecture"),htiSubRoot); switch(dwProcessorType) { case PROCESSOR_INTEL_386: sValue=_T("Intel 386"); break; case PROCESSOR_INTEL_486: sValue=_T("Intel 486"); break; case PROCESSOR_INTEL_PENTIUMCELERON: sValue=_T("Intel Pentium Celeron"); break; case PROCESSOR_INTEL_PENTIUMPRO: sValue=_T("Intel Pentium Pro"); break; case PROCESSOR_INTEL_PENTIUM: sValue=_T("Intel Pentium"); break; case PROCESSOR_INTEL_PENTIUM2: sValue=_T("Intel Pentium II"); break; case PROCESSOR_INTEL_PENTIUM3: sValue=_T("Intel Pentium III"); break; case PROCESSOR_MIPSR4000: sValue=_T("MIPS R4000"); break; case PROCESSOR_ALPHA21064: sValue=_T("Alpha 21064"); break; case PROCESSOR_ALPHA21066: sValue=_T("Alpha 21066"); break; case PROCESSOR_ALPHA21164: sValue=_T("Alpha 21164"); break; case PROCESSOR_PPC601: sValue=_T("PowerPC 601"); break; case PROCESSOR_PPC603: sValue=_T("PowerPC 603"); break; case PROCESSOR_PPC604: sValue=_T("PowerPC 604"); break; case PROCESSOR_PPC603PLUS: sValue=_T("PowerPC 603+"); break; case PROCESSOR_PPC604PLUS: sValue=_T("PowerPC 604+"); break; case PROCESSOR_PPC620: sValue=_T("PowerPC 620"); break; default: sValue=_T("UNKNOWN"); break; } VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } // Processor speed DWORD dwSpeed; if(m_SysInfo.GetProcessorSpeed(&dwSpeed)) { htiItem=InsertItem(_T("Speed"),htiSubRoot); sValue.Format(_T("%d MHz"),dwSpeed); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } // Math CoProcessor if(m_SysInfo.IsCoProcessorPresent(&bResult)) { htiItem=InsertItem(_T("Math CoProcessor"),htiSubRoot); sValue=bResult ? _T("Present") : _T("Not present"); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } // MMX technology if(m_SysInfo.IsMMXProcessor(&bResult)) { htiItem=InsertItem(_T("MMX technology"),htiSubRoot); sValue=bResult ? _T("Present") : _T("Not present"); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } // Time stamp DWORD dwHigh, dwLow; if(m_SysInfo.GetTimeStamp(&dwHigh,&dwLow)) { htiItem=InsertItem(_T("Time stamp"),htiSubRoot); sValue.Format(_T("%08lx %08lx"),dwHigh,dwLow); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } ///////////////////////////////////////////// // multiple processors description if(nNumProcessors>1) for(int nIndex=2; nIndex<=nNumProcessors; nIndex++) { sValue.Format(_T("Processor %d"),nIndex); htiSubRoot=InsertItem(sValue,htiRoot,-1,pFontSubRoot); // Processor speed DWORD dwSpeed; if(m_SysInfo.GetProcessorSpeed(&dwSpeed,nIndex-1)) { htiItem=InsertItem(_T("Speed"),htiSubRoot); sValue.Format(_T("%d MHz"),dwSpeed); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } } ///////////////////////////////////////////// } // // The end of PROCESSOR(S) topic /////////////////////////////////////////////////// /////////////////////////////////////////////////// // DISC INFORMATION // htiRoot=InsertItem(_T("Disc Information"),NULL,3,pFontRoot,clrTopic); int nDiskType; CString sFileSysType; CString sVolName; DWORDLONG dwTotalSpace, dwFreeSpace; DWORD dwVolSer; int nIndex=0; for(nIndex=0; nIndex<26; nIndex++) { if(m_SysInfo.GetDriveTypeInfo(nIndex,&sFileSysType,&nDiskType)) { if(m_SysInfo.GetDriveVolumeInfo(nIndex,&sVolName, &dwVolSer,&dwTotalSpace,&dwFreeSpace)) { sValue.Format(_T("Drive %c:"),nIndex+65); htiSubRoot=InsertItem(sValue,htiRoot,-1,pFontSubRoot); if(nDiskType == DRIVE_FIXED || nIndex==0 || nIndex==1) { // type of disk if(nIndex==0 || nIndex==1) { m_tree.SetItemImage(htiSubRoot,8,8); sValue=_T("Floppy Disk"); } else { m_tree.SetItemImage(htiSubRoot,9,9); sValue=_T("Fixed Disk"); } VERIFY(m_tree.SetSubItem(htiSubRoot,1, OX_SUBITEM_TEXT,sValue,0,NULL)); // File System htiItem=InsertItem(_T("File System"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sFileSysType,0,NULL,clrValue)); // Volume name htiItem=InsertItem(_T("Volume Name"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sVolName.IsEmpty() ? _T("") : sVolName,0, NULL,clrValue)); // Volume Serial htiItem=InsertItem(_T("Volume Serial"),htiSubRoot); sValue.Format(_T("%u"),dwVolSer); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); // Total space htiItem=InsertItem(_T("Total space"),htiSubRoot); Integer.SetNumber(dwTotalSpace/1024); sValue=Integer.GetStringNumber(10,TRUE)+_T(" KB"); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); // Free space htiItem=InsertItem(_T("Free space"),htiSubRoot); Integer.SetNumber(dwFreeSpace/1024); sValue=Integer.GetStringNumber(10,TRUE)+_T(" KB"); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } else if(nDiskType==DRIVE_CDROM) { m_tree.SetItemImage(htiSubRoot,10,10); // type of disk VERIFY(m_tree.SetSubItem(htiSubRoot,1, OX_SUBITEM_TEXT,_T("CD ROM"),0,NULL)); // File System htiItem=InsertItem(_T("File System"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sFileSysType,0,NULL,clrValue)); // Volume name htiItem=InsertItem(_T("Volume Name"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sVolName.IsEmpty() ? _T("") : sVolName,0, NULL,clrValue)); } else if(nDiskType==DRIVE_REMOTE) { m_tree.SetItemImage(htiSubRoot,11,11); // type of disk VERIFY(m_tree.SetSubItem(htiSubRoot,1, OX_SUBITEM_TEXT,_T("Network Disk"),0,NULL)); // File System htiItem=InsertItem(_T("File System"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sFileSysType,0,NULL,clrValue)); // Volume name htiItem=InsertItem(_T("Volume Name"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sVolName.IsEmpty() ? _T("") : sVolName,0, NULL,clrValue)); } else { // type of disk VERIFY(m_tree.SetSubItem(htiSubRoot,1, OX_SUBITEM_TEXT,_T("Unknown"),0,NULL)); } } } } // // The end of DISC INFORMATION topic /////////////////////////////////////////////////// /////////////////////////////////////////////////// // DISPLAY // htiRoot=InsertItem(_T("Display"),NULL,4,pFontRoot,clrTopic); // Font Size if(m_SysInfo.IsSmallFont(&bResult)) { htiItem=InsertItem(_T("Font Size"),htiRoot); sValue=bResult ? _T("Small fonts") : _T("Large fonts"); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // Display resolution int nXRes, nYRes; if(m_SysInfo.GetDisplayResolution(&nXRes,&nYRes)) { htiItem=InsertItem(_T("Current Resolution"),htiRoot); sValue.Format(_T("%u x %u"), nXRes, nYRes); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // Display colors int nNumBits; DWORDLONG dwNumColors; if(m_SysInfo.GetDisplayNumColors(&dwNumColors,&nNumBits)) { htiItem=InsertItem(_T("Current Colors"),htiRoot); sValue.Format(_T(" (%u bits)"),nNumBits); Integer.SetNumber(dwNumColors); sValue=Integer.GetStringNumber(10,TRUE)+sValue; VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // Display max resolution if(m_SysInfo.GetDisplayMaxResolution(&nXRes,&nYRes)) { htiItem=InsertItem(_T("Max Resolution"),htiRoot); sValue.Format(_T("%u x %u"), nXRes, nYRes); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // Display max colors if(m_SysInfo.GetDisplayMaxNumColors(&dwNumColors,&nNumBits)) { htiItem=InsertItem(_T("Max Colors"),htiRoot); sValue.Format(_T(" (%u bits)"),nNumBits); Integer.SetNumber(dwNumColors); sValue=Integer.GetStringNumber(10,TRUE)+sValue; VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // List of all display modes CArrayDisplayMode arrDisplayMode; if(m_SysInfo.GetAllDisplayModes(&arrDisplayMode) && arrDisplayMode.GetSize()>0) { htiSubRoot=InsertItem(_T("List of all Display Modes"), htiRoot,-1,pFontSubRoot); sValue.Format(_T("%u"),arrDisplayMode.GetSize()); VERIFY(m_tree.SetSubItem(htiSubRoot,1, OX_SUBITEM_TEXT|(pFontSubRoot!=NULL ? OX_SUBITEM_FONT : 0), sValue,0,pFontSubRoot)); for(nIndex=1; nIndex<=arrDisplayMode.GetSize(); nIndex++) { DISPLAYMODE displayMode=arrDisplayMode.GetAt(nIndex-1); sValue.Format(_T("Display Mode %u"),nIndex); htiItem=InsertItem(sValue,htiSubRoot); Integer.SetNumber(displayMode.dwNumColors); sValue.Format(_T("%d x %d (%d bit, %s colors)"), displayMode.dwHorzResolution,displayMode.dwVertResolution, displayMode.dwBitsPerPixel,Integer.GetStringNumber(10,TRUE)); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } } //////////////////////////////////////////////// // // The end of DISPLAY topic /////////////////////////////////////////////////// /////////////////////////////////////////////////// // MEMORY // htiRoot=InsertItem(_T("Memory"),NULL,5,pFontRoot,clrTopic); // Physical Memory htiSubRoot=InsertItem(_T("Physical Memory"),htiRoot,-1,pFontSubRoot); if(m_SysInfo.GetTotalPhysicalMemory(&dwValue)) { htiItem=InsertItem(_T("Total amount"),htiSubRoot); Integer.SetNumber(dwValue/1024); sValue=Integer.GetStringNumber(10,TRUE)+_T(" KB"); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } if(m_SysInfo.GetFreePhysicalMemory(&dwValue)) { htiItem=InsertItem(_T("Free amount"),htiSubRoot); Integer.SetNumber(dwValue/1024); sValue=Integer.GetStringNumber(10,TRUE)+_T(" KB"); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // Swap File htiSubRoot=InsertItem(_T("Swap File"),htiRoot,-1,pFontSubRoot); if(m_SysInfo.GetTotalPageFile(&dwValue)) { htiItem=InsertItem(_T("Total amount"),htiSubRoot); Integer.SetNumber(dwValue/1024); sValue=Integer.GetStringNumber(10,TRUE)+_T(" KB"); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } if(m_SysInfo.GetFreePageFile(&dwValue)) { htiItem=InsertItem(_T("Free amount"),htiSubRoot); Integer.SetNumber(dwValue/1024); sValue=Integer.GetStringNumber(10,TRUE)+_T(" KB"); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // Virtual Memory htiSubRoot=InsertItem(_T("Virtual Memory"),htiRoot,-1,pFontSubRoot); if(m_SysInfo.GetTotalVirtual(&dwValue)) { htiItem=InsertItem(_T("Total amount"),htiSubRoot); Integer.SetNumber(dwValue/1024); sValue=Integer.GetStringNumber(10,TRUE)+_T(" KB"); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } if(m_SysInfo.GetFreeVirtual(&dwValue)) { htiItem=InsertItem(_T("Free amount"),htiSubRoot); Integer.SetNumber(dwValue/1024); sValue=Integer.GetStringNumber(10,TRUE)+_T(" KB"); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // Resources int nValue=0; if(m_SysInfo.GetFreeSystemResources(&nValue,RT_SYSTEM)) { htiSubRoot=InsertItem(_T("Resources"),htiRoot,-1,pFontSubRoot); htiItem=InsertItem(_T("Free System Resources"),htiSubRoot); sValue.Format(_T("%u %%"),nValue); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); VERIFY(m_SysInfo.GetFreeSystemResources(&nValue,RT_GDI)); htiItem=InsertItem(_T("Free GDI Resources"),htiSubRoot); sValue.Format(_T("%u %%"),nValue); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); VERIFY(m_SysInfo.GetFreeSystemResources(&nValue,RT_USER)); htiItem=InsertItem(_T("Free User Resources"),htiSubRoot); sValue.Format(_T("%u %%"),nValue); VERIFY(m_tree.SetSubItem(htiItem,1,OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } //////////////////////////////////////////////// // // The end of MEMORY topic /////////////////////////////////////////////////// /////////////////////////////////////////////////// // MODEM(S) // // Number of Modems int nNumModems; if(m_SysInfo.GetNumModems(&nNumModems) && nNumModems>0) { // topic will depend on the number of modems installed if(nNumModems>1) { htiRoot=InsertItem(_T("Modems"),NULL,6,pFontRoot,clrTopic); sValue.Format(_T("%u"),nNumModems); VERIFY(m_tree.SetSubItem(htiRoot,1, OX_SUBITEM_TEXT|(pFontRoot!=NULL ? OX_SUBITEM_FONT : 0), sValue,0,pFontRoot)); } else htiRoot=InsertItem(_T("Modem"),NULL,6,pFontRoot,clrTopic); /////////////////////////////////////////////////////////////////// // loop through all installed modems CArrayModemInfo arrModemInfo; VERIFY(m_SysInfo.GetModemInfo(&arrModemInfo)); ASSERT(arrModemInfo.GetSize()==nNumModems); for(int nIndex=0; nIndex1) { sValue.Format(_T("Modem %d"),nIndex+1); htiSubRoot=InsertItem(sValue,htiRoot,-1,pFontSubRoot); } else htiSubRoot=htiRoot; MODEMINFO modemInfo=arrModemInfo.GetAt(nIndex); // Port htiItem=InsertItem(_T("Port"),htiSubRoot); sValue.Format(_T("COM%d"),modemInfo.nPort); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); // Description htiItem=InsertItem(_T("Description"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, modemInfo.sDriverDesc,0,NULL,clrValue)); // Manufacturer htiItem=InsertItem(_T("Manufacturer"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, modemInfo.sManufacturer,0,NULL,clrValue)); // Model htiItem=InsertItem(_T("Model"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, modemInfo.sModel,0,NULL,clrValue)); } ///////////////////////////////////////////// } // // The end of MODEM(S) topic /////////////////////////////////////////////////// /////////////////////////////////////////////////// // PRINTER(S) // if(m_bShowPrinters) { CStringArray arrPrinterName; if(m_SysInfo.GetAllPrintersName(arrPrinterName)) { if(arrPrinterName.GetSize()>0) { CString sDefaultPrinterName; VERIFY(m_SysInfo.GetDefaultPrinterName(sDefaultPrinterName)); sValue=_T("Printer"); if(arrPrinterName.GetSize()>1) sValue=sValue+_T("s"); htiRoot=InsertItem(sValue,NULL,7,pFontRoot,clrTopic); if(arrPrinterName.GetSize()>1) { sValue.Format(_T("%u"),arrPrinterName.GetSize()); VERIFY(m_tree.SetSubItem(htiRoot,1, OX_SUBITEM_TEXT|(pFontRoot!=NULL ? OX_SUBITEM_FONT : 0), sValue,0,pFontRoot)); } for(int nIndex=0; nIndexpServerName!=NULL && lstrlen(lpPrinterInfo->pServerName)>0) { htiItem=InsertItem(_T("Server Name"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, lpPrinterInfo->pServerName,0,NULL,clrValue)); } /////////////////////////////////////// // share name if((lpPrinterInfo->Attributes&PRINTER_ATTRIBUTE_SHARED)!=0 && lpPrinterInfo->pShareName!=NULL && lstrlen(lpPrinterInfo->pShareName)>0) { htiItem=InsertItem(_T("Share Name"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, lpPrinterInfo->pShareName,0,NULL,clrValue)); } /////////////////////////////////////// // port(s) if(lpPrinterInfo->pPortName!=NULL && lstrlen(lpPrinterInfo->pPortName)>0) { if(_tcschr(lpPrinterInfo->pPortName,';')!=NULL) htiItem=InsertItem(_T("Ports"),htiSubRoot); else htiItem=InsertItem(_T("Port"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, lpPrinterInfo->pPortName,0,NULL,clrValue)); } /////////////////////////////////////// // driver name if(lpPrinterInfo->pDriverName!=NULL && lstrlen(lpPrinterInfo->pDriverName)>0) { htiItem=InsertItem(_T("Driver Name"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, lpPrinterInfo->pDriverName,0,NULL,clrValue)); } /////////////////////////////////////// // brief description if(lpPrinterInfo->pComment!=NULL && lstrlen(lpPrinterInfo->pComment)>0) { htiItem=InsertItem(_T("Brief Description"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, lpPrinterInfo->pComment,0,NULL,clrValue)); } /////////////////////////////////////// // physical location if(lpPrinterInfo->pLocation!=NULL && lstrlen(lpPrinterInfo->pLocation)>0) { htiItem=InsertItem(_T("Physical Location"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, lpPrinterInfo->pLocation,0,NULL,clrValue)); } /////////////////////////////////////// // print processor if(lpPrinterInfo->pPrintProcessor!=NULL && lstrlen(lpPrinterInfo->pPrintProcessor)>0) { htiItem=InsertItem(_T("Print Processor"),htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, lpPrinterInfo->pPrintProcessor,0,NULL,clrValue)); } /////////////////////////////////////// // average number of pages per minute that have been printed // on the printer if(lpPrinterInfo->AveragePPM>0) { htiItem=InsertItem(_T("Average number of pages"), htiSubRoot); sValue.Format(_T("%u per minute"), lpPrinterInfo->AveragePPM); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } /////////////////////////////////////// // printer IP address if(lpPrinterInfo->pServerName!=NULL && lstrlen(lpPrinterInfo->pServerName)>0) { CString sHostName=lpPrinterInfo->pServerName; if(sHostName.Left(2)==_T("\\\\")) sHostName=sHostName.Mid(2); if(m_SysInfo.GetPrimaryIPAddress(&sValue,sHostName)) { htiItem=InsertItem(_T("Primary IP Address"), htiSubRoot); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } } /////////////////////////////////////// // device and environment settings if(lpPrinterInfo->pDevMode!=NULL) { htiSubRoot=InsertItem(_T("Environment"), htiSubRoot,-1,pFontSubRoot); // page orientation if((lpPrinterInfo->pDevMode->dmFields&DM_ORIENTATION)!=0) { htiItem=InsertItem(_T("Orientation"),htiSubRoot); if(lpPrinterInfo->pDevMode->dmOrientation== DMORIENT_PORTRAIT) sValue=_T("Portrait"); else if(lpPrinterInfo->pDevMode->dmOrientation== DMORIENT_LANDSCAPE) sValue=_T("Landscape"); else ASSERT(FALSE); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } /////////////////////////////////////// // paper size if((lpPrinterInfo->pDevMode->dmFields&DM_PAPERSIZE)!=0 && lpPrinterInfo->pDevMode->dmPaperSize!=0) { htiItem=InsertItem(_T("Paper size"),htiSubRoot); switch(lpPrinterInfo->pDevMode->dmPaperSize) { case DMPAPER_LETTER: sValue=_T("Letter, 8 1/2- by 11-inches"); break; case DMPAPER_LEGAL: sValue=_T("Legal, 8 1/2- by 14-inches"); break; case DMPAPER_A4: sValue=_T("A4 Sheet, 210- by 297-millimeters"); break; case DMPAPER_CSHEET: sValue=_T("C Sheet, 17- by 22-inches"); break; case DMPAPER_DSHEET: sValue=_T("D Sheet, 22- by 34-inches"); break; case DMPAPER_ESHEET: sValue=_T("E Sheet, 34- by 44-inches"); break; case DMPAPER_LETTERSMALL: sValue=_T("Letter Small, 8 1/2- by 11-inches"); break; case DMPAPER_TABLOID: sValue=_T("Tabloid, 11- by 17-inches"); break; case DMPAPER_LEDGER: sValue=_T("Ledger, 17- by 11-inches"); break; case DMPAPER_STATEMENT: sValue=_T("Statement, 5 1/2- by 8 1/2-inches"); break; case DMPAPER_EXECUTIVE: sValue=_T("Executive, 7 1/4- by 10 1/2-inches"); break; case DMPAPER_A3: sValue=_T("A3 sheet, 297- by 420-millimeters"); break; case DMPAPER_A4SMALL: sValue=_T("A4 small sheet, 210- by 297-millimeters"); break; case DMPAPER_A5: sValue=_T("A5 sheet, 148- by 210-millimeters"); break; case DMPAPER_B4: sValue=_T("B4 sheet, 250- by 354-millimeters"); break; case DMPAPER_B5: sValue=_T("B5 sheet, 182- by 257-millimeter paper"); break; case DMPAPER_FOLIO: sValue=_T("Folio, 8 1/2- by 13-inch paper"); break; case DMPAPER_QUARTO: sValue=_T("Quarto, 215- by 275-millimeter paper"); break; case DMPAPER_10X14: sValue=_T("10- by 14-inch sheet"); break; case DMPAPER_11X17: sValue=_T("11- by 17-inch sheet"); break; case DMPAPER_NOTE: sValue=_T("Note, 8 1/2- by 11-inches"); break; case DMPAPER_ENV_9: sValue=_T("#9 Envelope, 3 7/8- by 8 7/8-inches"); break; case DMPAPER_ENV_10: sValue=_T("#10 Envelope, 4 1/8- by 9 1/2-inches"); break; case DMPAPER_ENV_11: sValue=_T("#11 Envelope, 4 1/2- by 10 3/8-inches"); break; case DMPAPER_ENV_12: sValue=_T("#12 Envelope, 4 3/4- by 11-inches"); break; case DMPAPER_ENV_14: sValue=_T("#14 Envelope, 5- by 11 1/2-inches"); break; case DMPAPER_ENV_DL: sValue=_T("DL Envelope"); break; case DMPAPER_ENV_C5: sValue=_T("C5 Envelope, 162- by 229-millimeters"); break; case DMPAPER_ENV_C3: sValue=_T("C3 Envelope, 324- by 458-millimeters"); break; case DMPAPER_ENV_C4: sValue=_T("C4 Envelope, 229- by 324-millimeters"); break; case DMPAPER_ENV_C6: sValue=_T("C6 Envelope, 114- by 162-millimeters"); break; case DMPAPER_ENV_C65: sValue=_T("C65 Envelope, 114- by 229-millimeters"); break; case DMPAPER_ENV_B4: sValue=_T("B4 Envelope, 250- by 353-millimeters"); break; case DMPAPER_ENV_B5: sValue=_T("B5 Envelope, 176- by 250-millimeters"); break; case DMPAPER_ENV_B6: sValue=_T("B6 Envelope, 176- by 125-millimeters"); break; case DMPAPER_ENV_ITALY: sValue=_T("Italy Envelope, 110- by 230-millimeters"); break; case DMPAPER_ENV_MONARCH: sValue=_T("Monarch Envelope, 3 7/8- by 7 1/2-inches"); break; case DMPAPER_ENV_PERSONAL: sValue=_T("6 3/4 Envelope, 3 5/8- by 6 1/2-inches"); break; case DMPAPER_FANFOLD_US: sValue=_T("US Std Fanfold, 14 7/8- by 11-inches"); break; case DMPAPER_FANFOLD_STD_GERMAN: sValue=_T("German Std Fanfold, 8 1/2- by 12-inches"); break; case DMPAPER_FANFOLD_LGL_GERMAN: sValue=_T("German Legal Fanfold, 8 1/2- by 13-inches"); break; default: sValue=_T("Unknown"); } VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } else if((lpPrinterInfo->pDevMode->dmFields& DM_PAPERLENGTH)!=0 && (lpPrinterInfo->pDevMode->dmFields& DM_PAPERWIDTH)!=0) { htiItem=InsertItem(_T("Paper size"),htiSubRoot); sValue.Format(_T("%u- by %u-millimeters"), lpPrinterInfo->pDevMode->dmPaperWidth, lpPrinterInfo->pDevMode->dmPaperLength); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } /////////////////////////////////////// // printer quality if((lpPrinterInfo->pDevMode->dmFields& DM_PRINTQUALITY)!=0 && lpPrinterInfo->pDevMode->dmPrintQuality<=0) { htiItem=InsertItem(_T("Print Quality"),htiSubRoot); switch(lpPrinterInfo->pDevMode->dmPrintQuality) { case DMRES_HIGH: sValue=_T("High"); break; case DMRES_MEDIUM: sValue=_T("Medium"); break; case DMRES_LOW: sValue=_T("Low"); break; case DMRES_DRAFT: sValue=_T("Draft"); break; default: sValue=_T("Unknown"); } VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } /////////////////////////////////////// // printer resolution if(lpPrinterInfo->pDevMode->dmPrintQuality>0 && (lpPrinterInfo->pDevMode->dmFields& DM_YRESOLUTION)!=0) { htiItem=InsertItem(_T("Print Resolution"),htiSubRoot); sValue.Format(_T("%u x %u DPI"), lpPrinterInfo->pDevMode->dmPrintQuality, lpPrinterInfo->pDevMode->dmYResolution); VERIFY(m_tree.SetSubItem(htiItem,1, OX_SUBITEM_TEXT|OX_SUBITEM_COLOR, sValue,0,NULL,clrValue)); } /////////////////////////////////////// } /////////////////////////////////////// // we have to free memory ourselves ::GlobalFree(lpPrinterInfo); } /////////////////////////////////////// } } } } // // The end of PRINTER(S) topic /////////////////////////////////////////////////// ExpandTree((m_nExpandType==0 ? m_nExpandLevel : -1)); m_tree.SetFocus(); m_tree.SelectItem(htiSelectItem); m_tree.SetRedraw(TRUE); } void CSysInfoDialog::ExpandTree(int nExpandLevel/*=-1*/, HTREEITEM htiParent/*=NULL*/) { if(nExpandLevel==0) return; if(htiParent==NULL) { htiParent=m_tree.GetRootItem(); ASSERT(htiParent!=NULL); } HTREEITEM hti=m_tree.GetNextItem(htiParent,TVGN_CHILD); while(hti!=NULL) { m_tree.Expand(hti,TVE_EXPAND); COXTreeItem* xti=m_tree.GetXItem(hti); ASSERT(xti!=NULL); if(xti->ItemHasChildren()) ExpandTree((nExpandLevel==-1 ? -1 : nExpandLevel-1),hti); hti=m_tree.GetNextItem(hti,TVGN_NEXT); } } HTREEITEM CSysInfoDialog::InsertItem(CString sItem, HTREEITEM htiParent/*=NULL*/, int nImage/*=-1*/, CFont* pFont/*=NULL*/, COLORREF clr/*=CLR_NONE*/) { HTREEITEM hti=m_tree.InsertItem(sItem,htiParent); ASSERT(hti!=NULL); // associate new font if(pFont!=NULL) VERIFY(m_tree.SetItemFont(hti,pFont)); // and new color if(clr!=CLR_NONE) VERIFY(m_tree.SetItemColor(hti,clr)); m_tree.SetItemImage(hti,nImage,nImage); return hti; } void CSysInfoDialog::ShowControls() { if(UpdateData()) { CWnd* pDlgItem=GetDlgItem(IDC_EDIT_EXPANDLEVEL); ASSERT(pDlgItem!=NULL); pDlgItem->EnableWindow((m_nExpandType==0)); pDlgItem=GetDlgItem(IDC_SPIN_EXPANDLEVEL); ASSERT(pDlgItem!=NULL); pDlgItem->EnableWindow((m_nExpandType==0)); } } void CSysInfoDialog::OnRadioExpandall() { // TODO: Add your control notification handler code here ShowControls(); } void CSysInfoDialog::OnRadioExpandlevel() { // TODO: Add your control notification handler code here ShowControls(); }