日期:2012-08-04  浏览次数:20460 次

使用 System.Environment 类


System.Environment 类提供了若干不同的信息,如果没有这些信息,就需要进行多次 Windows API 调用。使用 System.Environment 可以检索:
  • 有关可用驱动器的信息(GetLogicalDrives 方法)
  • Windows 启动后的毫秒数(TickCount 属性)
  • 一般环境设置(由 CurrentDirectory、MachineName、OSVersion、SystemDirectory、UserDomainName、UserInteractive、UserName 和 WorkingSet 属性提供)
  • 特定文件夹列表(使用 GetFolderPath 方法提供)

如果您使用过 Windows API,您将知道选择方法和属性将代替很多 API 调用,包括 GetTickCount、GetLogicalDrives、GetSystemDirectory、GetComputerName、GetUserName 以及 GetVersionEx 等等。
在图 4(单击主窗体上的 Environment Info [环境信息])所示的示例窗体中,在靠近顶部的列表框中显示了执行 GetLogicalDrives 方法的结果,其中包括所有特定文件夹的列表(使用 GetFolderPath 方法检索)。在窗体下部的列表框中,显示了该类的许多属性的运行结果。

图 4:显示 System.Environment 类所使用的属性和方法的窗体
另外,要测试 TickCount 属性,请单击 Test ClickCount(测试 ClickCount),以显示使用示例窗体中定义的 StopWatch 类的结果,并请使用以下代码:
Public Class StopWatch    Private mintStart As Integer    Public Sub Start()        mintStart = Environment.TickCount    End Sub    Public Function Elapsed() As Integer        Return Environment.TickCount - mintStart    End Function    Public Overrides Function ToString() As String        Return String.Format( _         "Started: {0}, Elapsed: {1}", _         mintStart, Me.Elapsed)    End FunctionEnd Class

此处显示的 FillProperties 方法使用先前显示过的 AddItem 方法的一个副本,将属性名称和结果填入 ListView 控件,如下所示:
Private Sub FillProperties()    AddItem("CurrentDirectory", _     Environment.CurrentDirectory)    AddItem("MachineName", Environment.MachineName)    AddItem("OSVersion.Platform", _     Environment.OSVersion.Platform.ToString)    AddItem("OSVersion.Version", _     Environment.OSVersion.Version.ToString)    AddItem("SystemDirectory", _     Environment.SystemDirectory)    AddItem("UserDomainName", Environment.UserDomainName)    AddItem("UserInteractive", _     Environment.UserInteractive)    AddItem("UserName", Environment.UserName)    AddItem("WorkingSet", Environment.WorkingSet)End Sub

除了使用 Environment 类之外,FillFolderList 实际上还包含一些有趣的代码。这个过程的目的是循环使用 Environment 类提供的 SpecialFolder 枚举中的所有成员。(此枚举包含物理文件夹 [如收藏夹和历史记录等] 的逻辑名称。)该过程将每个枚举值的名称添加到窗体上的 ListView 控件中,同时将传递枚举值的结果添加到 Environment 对象的 GetFolderPath 方法中。下面所示的过程能够完成所有工作:
Private Sub FillFolderList()    Dim strName As String    Dim astrNames() As String    Dim aintValues As Array    Dim i As Integer    ' 使用 SpecialFolder 枚举中的名称    ' 填写 ListView 控件的第一列。    astrNames = System.Enum.GetNames( _     GetType(Environment.SpecialFolder))    aintValues = System.Enum.GetValues( _     GetType(Environment.SpecialFolder))    For i = 0 To astrNames.Length - 1        With lvwFolders.Items.Add(astrNames(i))            .SubItems.Add( _             Environment.GetFo