Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
软件频道>开发者网络>微软开发专栏>ASP.NETC#VB.NETVC.NET技术专题XML|软件频道产品中心群乐下载群乐:大家耍QQ
您现在的位置: 天极网 > 开发频道 > 微软开发专栏 > 用C#和WMI获取逻辑驱动器详细信息
全文

用C#和WMI获取逻辑驱动器详细信息

2006-11-15 14:12 作者: 窦瑞欣 出处: 天极开发 责任编辑:方舟
  三、 程序实现

  我们使用Visual Studio 2005来创建该示例程序,首先创建C#的Windows应用程序空白项目,为解决方案和项目取名为 GetLogicDrives,在默认的Form1窗体上我们各放置一个ListView和一个Button控件,保留控件的默认名称不变,将ListView1的View属性设为Details,双击ListView1的Columns属性,为详细信息视图添加5个列,分别为:盘符、卷标、类型、容量和可用空间,设置Button1的Text属性为Refresh,为该Button1添加单击事件,代码如下:

private void button1_Click(object sender, EventArgs e)
{
 listView1.Items.Clear();
 SelectQuery selectQuery = new SelectQuery("select * from win32_logicaldisk");
 ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
 int i=0;
 foreach (ManagementObject disk in searcher.Get()) {
  //盘符
  listView1.Items.Add(disk["Name"].ToString());
  //卷标
  try
  {
   listView1.Items[i].SubItems.Add(disk["VolumeName"].ToString());
  }
  catch
  {
   listView1.Items[i].SubItems.Add("设备未准备好");
  }
  //驱动器类型
  string DriveType;
  try
  {
   DriveType = disk["DriveType"].ToString();
   switch (DriveType)
   {
    case "0":
     listView1.Items[i].SubItems.Add("未知设备");
     break;
    case "1":
     listView1.Items[i].SubItems.Add("未分区");
     break;
    case "2":
     listView1.Items[i].SubItems.Add("可移动磁盘");
     break;
    case "3":
     listView1.Items[i].SubItems.Add("硬盘");
     break;
    case "4":
     listView1.Items[i].SubItems.Add("网络驱动器");
     break;
    case "5":
     listView1.Items[i].SubItems.Add("光驱");
     break;
    case "6":
     listView1.Items[i].SubItems.Add("内存磁盘");
     break;
  }

 }
 catch
 {
  listView1.Items[i].SubItems.Add("未知类型");
 }
 //容量
 try
 {
  listView1.Items[i].SubItems.Add(GetSizeUseUnit(disk["Size"].ToString()));
 }
 catch
 {
  listView1.Items[i].SubItems.Add("设备未准备好");
 }
 //剩余空间
 try
 {
  listView1.Items[i].SubItems.Add(GetSizeUseUnit(disk["FreeSpace"].ToString()));
 }
 catch
 {
  listView1.Items[i].SubItems.Add("设备未准备好");
 }
 i++;
}
}


  我们使用了格式化显示磁盘空间容量的自定义函数GetSizeUseUnit,当不使用该函数时磁盘容量和可用空间的显示如下:


private string GetSizeUseUnit(string size)
{
 double dSpace = Convert.ToDouble(size);
 string sSpace = dSpace.ToString("N");
 string[] tmp;
 string rtnSize = "0";

 tmp = sSpace.Split(',');
 switch (tmp.GetUpperBound(0))
 {
  case 0:
   rtnSize = tmp[0] + " 字节";
   break;
  case 1:
   rtnSize = tmp[0] + "." + tmp[1].Substring(0,2) + " K";
   break;
  case 2:
   rtnSize = tmp[0] + "." + tmp[1].Substring(0, 2) + " M";
   break;
  case 3:
   rtnSize = tmp[0] + "." + tmp[1].Substring(0, 2) + " G";
   break;
  case 4:
   rtnSize = tmp[0] + "." + tmp[1].Substring(0, 2) + " T";
   break;
 }
 return rtnSize;
}


  使用了上述自定义格式化显示的函数后,磁盘容量和可用空间的显示就显得非常简洁和直观。

  最后,为了确保在窗体启动时自动获取驱动器信息,需要在窗体的Load事件中模拟对Button1的单击操作,代码如下:

private void Form1_Load(object sender, EventArgs e)
{
 button1_Click(sender, e);
}

  四、 总结
 
  我们利用.Net框架System.Management 命名空间所提供的WMI封装非常简单的实现了获取逻辑驱动器的详细信息,除了上述信息我们还可以轻松的获取Windows资源大部分信息,比起使用Win32API要更加简单和有效。该示例程序在Windows XP SP2 + Visual Studio 2005 下编译和调试通过。
共2页。 9 1 2
网友关注
最新上市
编辑推荐
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml