主机性能监控之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
复制代码

 

posted on   itdef  阅读(953)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示