www.pudn.com > ComputerInformation.zip > SystemInformation.cpp
// Disclaimer and Copyright Information
// SystemInformation.cpp : Implementation of CSystemInformation
//
// All rights reserved.
//
// Written by Naveen K Kohli (naveenkohli@netzero.net)
// Version 1.0
//
// Distribute freely, except: don't remove my name from the source or
// documentation (don't take credit for my work), mark your changes (don't
// get me blamed for your possible bugs), don't alter or remove this
// notice.
// No warrantee of any kind, express or implied, is included with this
// software; use at your own risk, responsibility for damages (if any) to
// anyone resulting from the use of this software rests entirely with the
// user.
//
// Send bug reports, bug fixes, enhancements, requests, flames, etc. to
// naveenkohli@netzero.net
///////////////////////////////////////////////////////////////////////////////
// Revision History:
// 2/1/2001 Initial Creation
// 2/7/2001 Added new method from IMiscInformation2 interface
// 2/10/2001 Added Locale Info interface
//
#include "stdafx.h"
#include "SystemInfo.h"
#include "SystemInformation.h"
/////////////////////////////////////////////////////////////////////////////
// CSystemInformation
CSystemInformation::CSystemInformation ()
{
m_pOSInfo = NULL;
m_pMouseInfo = NULL;
m_pMemoryInfo = NULL;
m_pHDiskInfo = NULL;
m_pStorageInfo = NULL;
m_pMultiMediaInfo = NULL;
m_pCPUInfo = NULL;
m_pMiscInfo = NULL;
m_pLocaleInfo = NULL;
// m_pHWDevices = NULL;
// m_pNetworkInfo = NULL;
// m_pModemInfo = NULL;
m_pPnPDevices = NULL;
m_pKeyboardInfo = NULL;
}
HRESULT
CSystemInformation::FinalConstruct ()
{
HRESULT hr;
hr = CoCreateInstance (CLSID_OSInformation, 0, CLSCTX_INPROC_SERVER,
IID_IOSInformation, reinterpret_cast(&m_pOSInfo));
if (FAILED (hr)) {
return E_NOINTERFACE;
}
hr = CoCreateInstance (CLSID_MouseInformation, 0, CLSCTX_INPROC_SERVER,
IID_IMouseInformation, reinterpret_cast(&m_pMouseInfo));
if (FAILED (hr)) {
return E_NOINTERFACE;
}
hr = CoCreateInstance (CLSID_MemoryInformation, 0, CLSCTX_INPROC_SERVER,
IID_IMemoryInformation, reinterpret_cast(&m_pMemoryInfo));
if (FAILED (hr)) {
return E_NOINTERFACE;
}
hr = CoCreateInstance (CLSID_HDiskInformation, 0, CLSCTX_INPROC_SERVER,
IID_IHDiskInformation, reinterpret_cast(&m_pHDiskInfo));
if (FAILED (hr)) {
return E_NOINTERFACE;
}
hr = CoCreateInstance (CLSID_StorageMediaInformation, 0, CLSCTX_INPROC_SERVER,
IID_IStorageMediaInformation, reinterpret_cast(&m_pStorageInfo));
if (FAILED (hr)) {
return E_NOINTERFACE;
}
hr = CoCreateInstance (CLSID_MultiMediaInformation, 0, CLSCTX_INPROC_SERVER,
IID_IMultiMediaInformation, reinterpret_cast(&m_pMultiMediaInfo));
if (FAILED (hr)) {
return E_NOINTERFACE;
}
hr = CoCreateInstance (CLSID_CPUInformation, 0, CLSCTX_INPROC_SERVER,
IID_ICPUInformation, reinterpret_cast(&m_pCPUInfo));
if (FAILED (hr)) {
return E_NOINTERFACE;
};
hr = CoCreateInstance (CLSID_MiscInformation, 0, CLSCTX_INPROC_SERVER,
IID_IMiscInformation, reinterpret_cast(&m_pMiscInfo));
if (FAILED (hr)) {
return E_NOINTERFACE;
};
hr = CoCreateInstance (CLSID_ProtectedFilesInfo, 0, CLSCTX_INPROC_SERVER,
IID_IProtectedFilesInfo, reinterpret_cast(&m_pProtectFileInfo));
if (FAILED (hr)) {
return E_NOINTERFACE;
};
/*
hr = CoCreateInstance (CLSID_HWDevices, 0, CLSCTX_INPROC_SERVER,
IID_IHWDevices, reinterpret_cast(&m_pHWDevices));
if (FAILED (hr))
{
return E_NOINTERFACE;
}
hr = ::CoCreateInstance (CLSID_NetworkInformation,
0,
CLSCTX_SERVER,
IID_INetworkInformation,
reinterpret_cast(&m_pNetworkInfo));
if (FAILED (hr))
{
return E_NOINTERFACE;
};
hr = ::CoCreateInstance (CLSID_ModemInformation,
0,
CLSCTX_SERVER,
IID_IModemInformation,
reinterpret_cast(&m_pModemInfo));
if (FAILED (hr))
{
return E_NOINTERFACE;
};
*/
hr = ::CoCreateInstance (CLSID_LocaleInformation,
0,
CLSCTX_SERVER,
IID_ILocaleInformation,
reinterpret_cast(&m_pLocaleInfo));
if (FAILED (hr))
{
return E_NOINTERFACE;
};
hr = ::CoCreateInstance (CLSID_PnPDevicesInfo,
0,
CLSCTX_SERVER,
IID_IPnPDevicesInfo,
reinterpret_cast(&m_pPnPDevices));
if (FAILED (hr))
{
return E_NOINTERFACE;
};
hr = ::CoCreateInstance (CLSID_PSKeyboardInformation,
0,
CLSCTX_SERVER,
IID_IPSKeyboardInformation,
reinterpret_cast(&m_pKeyboardInfo));
if (FAILED (hr))
{
return E_NOINTERFACE;
};
return S_OK;
}
void
CSystemInformation::FinalRelease ()
{
if (m_pOSInfo != NULL)
{
m_pOSInfo->Release ();
}
m_pOSInfo = NULL;
if (m_pMouseInfo != NULL)
{
m_pMouseInfo->Release ();
}
m_pMouseInfo = NULL;
if (m_pMemoryInfo != NULL)
{
m_pMemoryInfo->Release ();
}
m_pMemoryInfo = NULL;
if (m_pHDiskInfo != NULL)
{
m_pHDiskInfo->Release ();
}
m_pHDiskInfo = NULL;
if (m_pStorageInfo != NULL)
{
m_pStorageInfo->Release ();
}
m_pStorageInfo = NULL;
if (m_pMultiMediaInfo != NULL)
{
m_pMultiMediaInfo->Release ();
}
m_pMultiMediaInfo = NULL;
if (m_pCPUInfo != NULL)
{
m_pCPUInfo->Release ();
}
m_pCPUInfo = NULL;
if (m_pMiscInfo != NULL)
{
m_pMiscInfo->Release ();
}
m_pMiscInfo = NULL;
if (m_pMiscInfo != NULL)
{
m_pProtectFileInfo->Release ();
}
m_pProtectFileInfo = NULL;
/*
if (m_pHWDevices != NULL)
{
m_pHWDevices->Release ();
}
m_pHWDevices = NULL;
if (NULL != m_pNetworkInfo)
{
m_pNetworkInfo->Release ();
}
m_pNetworkInfo = NULL;
if (NULL != m_pModemInfo)
{
m_pModemInfo->Release ();
}
m_pModemInfo = NULL;
*/
if (NULL != m_pLocaleInfo)
{
m_pLocaleInfo->Release ();
}
m_pLocaleInfo = NULL;
if (NULL != m_pPnPDevices)
{
m_pPnPDevices->Release ();
}
m_pPnPDevices = NULL;
if (NULL != m_pKeyboardInfo)
{
m_pKeyboardInfo->Release ();
}
m_pKeyboardInfo = NULL;
}
STDMETHODIMP CSystemInformation::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_ISystemInformation
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (::InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
STDMETHODIMP CSystemInformation::GetOSInformation(BSTR *pbstrPlatform,
BSTR *pbstrSuites,
BSTR *pbstrMinorVersion,
BSTR *pbstrServicePack,
long *plBuildNumber)
{
HRESULT hr = E_FAIL;
hr = m_pOSInfo->GetOSInformation (plBuildNumber, pbstrPlatform,
pbstrSuites, pbstrMinorVersion,
pbstrServicePack);
if (FAILED (hr))
{
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CSystemInformation::GetMouseInformation(VARIANT_BOOL *pbInstalled, VARIANT_BOOL *pbButtonsSwapped,
long *plSpeed)
{
HRESULT hr = E_FAIL;
hr = m_pMouseInfo->GetMouseInformation (pbInstalled, pbButtonsSwapped, plSpeed);
if (FAILED (hr))
{
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CSystemInformation::GetCPUInformation(BSTR *pbstrVendor, BSTR *pbstrType,
BSTR *pbstrArchitecture, BSTR *pbstrLevel, BSTR *pbstrRevision, long *plNumberOfProcessors,
long *plSpeed, long *plPageSize, long *plMask)
{
HRESULT hr = E_FAIL;
hr = m_pCPUInfo->GetCPUInformation (pbstrVendor, pbstrType, pbstrArchitecture, pbstrLevel,
pbstrRevision, plNumberOfProcessors, plSpeed, plPageSize, plMask);
if (FAILED (hr))
{
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CSystemInformation::GetHDiskInformation(long *plNumberOfPartitions,
VARIANT *pbstrDriveLetterArr, VARIANT *pbBootableArr, VARIANT *pbstrTypeArr,
VARIANT *plPartitionNumberArr, VARIANT *plLengthArr, VARIANT *plHiddenSectorsArr)
{
HRESULT hr = E_FAIL;
hr = m_pHDiskInfo->GetHDiskInformation(plNumberOfPartitions, pbstrDriveLetterArr,
pbBootableArr, pbstrTypeArr, plPartitionNumberArr, plLengthArr, plHiddenSectorsArr);
if (FAILED (hr)) {
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CSystemInformation::GetMemoryInformation(long *plRAMInstalled,
long *plAvailableMemory, long *plVirtualMemory, long *plMemoryLoad)
{
HRESULT hr = E_FAIL;
hr = m_pMemoryInfo->GetMemoryInformation (plRAMInstalled, plAvailableMemory, plVirtualMemory, plMemoryLoad);
if (FAILED (hr)) {
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CSystemInformation::GetStorageMediaInformation(long *plNumberOfDrives,
VARIANT *pbReadyArr, VARIANT *pbstrDriveLetterArr, VARIANT *pbstrLabelArr,
VARIANT *pbSupportLongNameArr, VARIANT *pbstrFileSystemArr, VARIANT *pbstrMediaTypeArr,
VARIANT *plTotalSpaceArr, VARIANT *plFreeSpaceUserArr, VARIANT *plFreeSpaceTotalArr)
{
HRESULT hr = E_FAIL;
hr = m_pStorageInfo->GetStorageMediaInformation (plNumberOfDrives, pbReadyArr, pbstrDriveLetterArr,
pbstrLabelArr, pbSupportLongNameArr, pbstrFileSystemArr, pbstrMediaTypeArr,
plTotalSpaceArr, plFreeSpaceUserArr, plFreeSpaceTotalArr);
if (FAILED (hr)) {
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CSystemInformation::GetMultiMediaInformation(VARIANT_BOOL *pbIsInstalled,
VARIANT_BOOL *pbHasVolCtrl, VARIANT_BOOL *pbHasSeparateLRVolCtrl, BSTR *pbstrProductName,
BSTR *pbstrCompanyName)
{
HRESULT hr = E_FAIL;
hr = m_pMultiMediaInfo->GetMultiMediaInformation (pbIsInstalled, pbHasVolCtrl,
pbHasSeparateLRVolCtrl, pbstrProductName, pbstrCompanyName);
if (FAILED (hr)) {
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CSystemInformation::GetSystemName(BSTR *pbstrComputerName)
{
HRESULT hr = E_FAIL;
hr = m_pMiscInfo->get_SystemName(pbstrComputerName);
if (FAILED (hr)) {
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CSystemInformation::GetSystemUserName(BSTR *pbstrUserName)
{
HRESULT hr = E_FAIL;
hr = m_pMiscInfo->get_SystemUserName(pbstrUserName);
if (FAILED (hr)) {
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CSystemInformation::GetLocalLanguage(BSTR *pbstrLocalLanguage)
{
HRESULT hr = E_FAIL;
hr = m_pMiscInfo->get_Language (pbstrLocalLanguage);
if (FAILED (hr)) {
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CSystemInformation::GetProtectedFilesInfo(long *plNumOfFiles, VARIANT *pbstrFileNameArr)
{
HRESULT hr = E_FAIL;
// hr = m_pProtectFileInfo->get_NumberOfProtectedFiles (plNumOfFiles);
hr = m_pProtectFileInfo->GetProtectedFilesInfo (plNumOfFiles, pbstrFileNameArr);
if (FAILED (hr)) {
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CSystemInformation::GetHWDevicesInfo(void)
{
HRESULT hr = E_FAIL;
// For the time being implementation has been disabled.
/*
hr = m_pHWDevices->GetHWDevicesInfo ();
if (FAILED (hr))
{
return E_FAIL;
}
*/
return hr;
}
STDMETHODIMP CSystemInformation::GetTimeZone (BSTR *pbstrTimeZone)
{
HRESULT hr = E_FAIL;
IMiscInformation2 *pMiscInfo2 = NULL;
// Get the new interface object.
hr = m_pMiscInfo->QueryInterface (IID_IMiscInformation2,
reinterpret_cast(&pMiscInfo2));
if (SUCCEEDED (hr))
{
hr = pMiscInfo2->get_TimeZone (pbstrTimeZone);
pMiscInfo2->Release ();
pMiscInfo2 = NULL;
}
return hr;
}
STDMETHODIMP CSystemInformation::GetNetworkInfo (void)
{
HRESULT hr = S_OK;
// hr = m_pNetworkInfo->GetNetworkInfo ();
return hr;
}
STDMETHODIMP CSystemInformation::GetModemInfo (void)
{
HRESULT hr = S_OK;
return hr;
}
STDMETHODIMP CSystemInformation::GetLocaleInformation ( /*[out]*/ short* pCodePage,
/*[out]*/ short *pOEMCodePage,
/*[out]*/ BSTR* pCalendarType,
/*[out]*/ BSTR* pDateFormat,
/*[out]*/ BSTR* pLanguage,
/*[out]*/ BSTR* pCountry,
/*[out]*/ short* pCountryCode,
/*[out]*/ BSTR* pTimeFormat,
/*[out]*/ BSTR* pCurrency,
/*[out]*/ BSTR* pTimeFormatSpecifier)
{
HRESULT hr = S_OK;
hr = m_pLocaleInfo->get_CodePage (pCodePage);
hr = m_pLocaleInfo->get_OEMCodePage (pOEMCodePage);
hr = m_pLocaleInfo->get_CalendarType (pCalendarType);
hr = m_pLocaleInfo->get_DateFormat (pDateFormat);
hr = m_pLocaleInfo->get_Language (pLanguage);
hr = m_pLocaleInfo->get_Country (pCountry);
hr = m_pLocaleInfo->get_CountryCode (pCountryCode);
hr = m_pLocaleInfo->get_TimeFormat (pTimeFormat);
hr = m_pLocaleInfo->get_Currency (pCurrency);
hr = m_pLocaleInfo->get_TimeFormatSpecifier (pTimeFormatSpecifier);
return hr;
}
STDMETHODIMP CSystemInformation::GetPnPDevices (IUnknown **pDevices)
{
HRESULT hr = S_OK;
ATLASSERT (NULL != pDevices);
if (NULL == pDevices)
{
return E_POINTER;
}
IPnPDevices *pPnPDevices = NULL;
hr = m_pPnPDevices->GetPnpDevices (&pPnPDevices);
if (SUCCEEDED (hr))
{
hr = pPnPDevices->QueryInterface (IID_IUnknown, reinterpret_cast(pDevices));
}
return hr;
}
STDMETHODIMP CSystemInformation::GetKeyboardInfo (BSTR* pbstrKeyboardType, short* pnFnKeys)
{
HRESULT hr = S_OK;
ATLASSERT (NULL != pbstrKeyboardType);
if (NULL == pbstrKeyboardType)
{
return E_POINTER;
}
ATLASSERT (NULL != pnFnKeys);
if (NULL == pnFnKeys)
{
return E_POINTER;
}
hr = this->m_pKeyboardInfo->get_Type (pbstrKeyboardType);
ATLASSERT (SUCCEEDED (hr));
if (FAILED (hr))
{
return hr;
}
hr = this->m_pKeyboardInfo->get_FunctionKeys (pnFnKeys);
ATLASSERT (SUCCEEDED (hr));
return hr;
}