科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用C#和WMI获取逻辑驱动器详细信息

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的

作者:窦瑞欣 来源:天极开发 2007年11月11日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
三、 程序实现

  我们使用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 下编译和调试通过。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章