zoukankan      html  css  js  c++  java
  • 主机性能监控之wmi 获取磁盘信息

    标 题: 主机性能监控之wmi 获取磁盘信息
    作 者: itdef
    链 接: http://www.cnblogs.com/itdef/p/3990541.html 

    欢迎转帖 请保持文本完整并注明出处

    仅在《主机性能监控之wmi 获取系统信息及内存性能信息》 代码中添加一个函数

    使用的结构体位为Win32_LogicalDisk

    class Win32_LogicalDisk : CIM_LogicalDisk
    {
      uint16 Access;
      uint16 Availability;
      uint64 BlockSize;
      string Caption;
      boolean Compressed;
      uint32 ConfigManagerErrorCode;
      boolean ConfigManagerUserConfig;
      string CreationClassName;
      string Description;
      string DeviceID;
      uint32 DriveType;
      boolean ErrorCleared;
      string ErrorDescription;
      string ErrorMethodology;
      string FileSystem;
      uint64 FreeSpace;
      datetime InstallDate;
      uint32 LastErrorCode;
      uint32 MaximumComponentLength;
      uint32 MediaType;
      string Name;
      uint64 NumberOfBlocks;
      string PNPDeviceID;
      uint16 PowerManagementCapabilities[];
      boolean PowerManagementSupported;
      string ProviderName;
      string Purpose;
      boolean QuotasDisabled;
      boolean QuotasIncomplete;
      boolean QuotasRebuilding;
      uint64 Size;
      string Status;
      uint16 StatusInfo;
      boolean SupportsDiskQuotas;
      boolean SupportsFileBasedCompression;
      string SystemCreationClassName;
      string SystemName;
      boolean VolumeDirty;
      string VolumeName;
      string VolumeSerialNumber;
    };
    View Code

    添加的函数

    bool CMyWMI::QueryDiskInfo()
    {
        HRESULT hres; //定义COM调用的返回  
        IEnumWbemClassObject* pEnumerator = NULL;  
        bool bRet = false;
    
        try{
            hres = pSvc_->ExecQuery(  
                bstr_t("WQL"),     
                bstr_t("SELECT * FROM Win32_LogicalDisk"),  
                WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,   
                NULL,  
                &pEnumerator);  
    
            if (FAILED(hres))  
            {  
                throw exception("ExecQuery() error.");
            }  
    
            while (pEnumerator)  
            {
                IWbemClassObject *pclsObj;  
                ULONG uReturn = 0;  
    
                HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,   
                    &pclsObj, &uReturn);  
                if(0 == uReturn)  
                {  
                    break;  
                }  
    
                GetInfo(L"Name",pclsObj);
                GetInfo(L"VolumeName",pclsObj);
                GetInfo(L"FileSystem",pclsObj);
                GetInfo(L"VolumeSerialNumber",pclsObj);
                GetInfo(L"FreeSpace",pclsObj);
    
            
    
                ;
    
    
                cout << endl;
    
                pclsObj->Release(); 
            }
    
    
        }catch(exception& e)
        {
            cout << e.what() << endl;
            if(pEnumerator != NULL)
            {
                pEnumerator->Release(); 
                pEnumerator = NULL;
            }
            return bRet;
        }
    
    
        if(pEnumerator != NULL)
        {
            pEnumerator->Release(); 
            pEnumerator = NULL;
        }
    
        bRet = true;
        return bRet;
    }
    View Code

    python 代码

    #!/usr/bin/env python 
    # -*- coding: cp936 -*-
     
    import wmi 
    import os 
    import sys 
    import platform 
    import time
    
    def disk_info():
        c = wmi.WMI()
        for p in c.Win32_LogicalDisk():
            print p.Name, p.VolumeName , p.FileSystem, p.FreeSpace
    
    
            
    def main(): 
       disk_info();
     
    if __name__ == '__main__': 
        main() 
    View Code
  • 相关阅读:
    Maven笔记(一)
    Oracle JDBC通过占位符可以查询可变长字段,不可查询固定长度字段
    Oracle 汉字在不同字符集下所占字节
    Spring Bean注册解析(一)
    Spring AOP切点表达式用法总结
    ThreadPoolExecutor详解
    数据库索引创建与优化
    ScheduledThreadPoolExecutor详解
    使用三种方法求解前N个正整数的排列
    后缀表达式的计算
  • 原文地址:https://www.cnblogs.com/itdef/p/3990541.html
Copyright © 2011-2022 走看看