Visual Basic.NET拥有许多VB开发者以前只能梦想的新功能和新特色。比如说,在VB6中只有通过复杂的Win32 API函数调用才能获得的系统信息,到了VB.NET,就
可以以多种方法轻松的获取。


一、Environment类轻松获取系统信息


.NET Framework中的System.Environment类提供了丰富而简单的方法取得有关当前环境和平台的系统信息,如计算机名称、系统目录等: 

 

  l          获取计算机的 NetBIOS 名称: 

 

       Environment类的MachineName属性可以轻松获取此本地计算机的 NetBIOS 名称,如: 

 

           lblMachineName.Text = "机器名:" & Environment.MachineName 

 

  l          获取操作系统标识符和版本号: 

 

  Environment类的OSVersion可以轻松获取当前操作系统标识符和版本号,如: 

 

           lblOs.Text = "操作系统:" & Environment.OSVersion.ToString 

 

  l          获取系统目录: 

 

       Environment类的SystemDirectory属性可以轻松取得系统目录: 

 

           LblSysDir.Text = "系统目录:" & Environment.SystemDirectory 

 

  l          获取系统启动后经过的时间: 

 

       Environment类的TickCount属性可以轻松获取系统启动后经过的毫秒数,如: 

 

           LblSysTickCount.Text = "系统已经启动了:" & CStr(Environment.TickCount / 1000) & "秒" 

 

  l          获取系统特殊文件夹的路径: 

 

  使用Environment类的GetFolderPath方法可以轻松获得系统特殊文件夹的路径,如: 

 

  LblSpecialDir.Text = "我的收藏夹:" & _ mEnvironment.GetFolderPath(Environment.SpecialFolder.Favorites) 

 

  l          获取当前用户名: 

 

       Environment类的UserName属性可以轻松获取当前用户名,如: 

 

           LblUser.Text = "用户:" & Environment.UserName


二、SystemInformation类轻松获取系统信息


通过SystemInformation类也可以轻松取得如计算机名等操作系统的有关信息: 

 

  l          获取系统的启动方式: 

 

  使用 BootMode 可确定用户如何启动系统。对于在 Windows 98 上运行的应用程序,可以使用此属性来确定操作系统是否处于防故障模式。如: 

 

           Select Case SystemInformation.BootMode 

 

               Case BootMode.Normal 

 

                   lblBootMode.Text = "启动模式:正常启动" 

 

               Case BootMode.FailSafe 

 

                   lblBootMode.Text = "启动模式:安全模式" 

 

               Case BootMode.FailSafeWithNetwork 

 

                   lblBootMode.Text = "启动模式:(带网络驱动的)安全模式" 

 

           End Select 

 

  l          获取显示器信息如屏幕像素值、数目等: 

 

  lblMonitorSize.Text = "主显示器的尺寸为:" & SystemInformation.PrimaryMonitorSize.Width _ 

 

  & "*" & SystemInformation.PrimaryMonitorSize.Height & "像素" 

 

          LblMonitorCount.Text = "监视器数目:" & SystemInformation.MonitorCount 

 

  l          获取鼠标相关信息: 

 

           LblMouseButtons.Text = "鼠标的按钮数为:" & SystemInformation.MouseButtons 

 

           If SystemInformation.MouseWheelPresent Then LblMouseButtons.Text &= "(带鼠标轮)"


三、通过WMI轻松获取系统信息


        WMI即Windows 管理规范,作为一种标准的接口,它提供了组织和管理如程序、网络、打印机及驱动程序等系统信息的方法。应该说明的是,WMI并不是.NET的一部分(在Win2k控制面板“服务”中可以看到作为基本服务存在的Windows Management Instrumentation)。但VB.NET中通过System.Management命名空间提供了对WMI访问简单易行的方法,我们只要通过类似SQL的查询语句就可轻松取得系统信息:


例如获取主板信息: 

 

           Dim searcher As New ManagementObjectSearcher("select * from Win32_baseboard") 

 

  ‘ ManagementObjectSearcher类根据指定的查询检索WMI对象的集合。 

 

           Dim baseboard As ManagementObject     

 

           For Each baseboard In searcher.Get() 

 

               MsgBox("主板制造商:" & baseboard("Manufacturer")) 

 

               MsgBox("型号:" & baseboard("Product")) 

 

               MsgBox("序列号:" & baseboard("SerialNumber")) 

 

  MsgBox("主板所有信息:" & baseboard.GetText(Management.TextFormat.Mof))   

 

  ‘MOF表示采用一样托管对象格式显示 

 

           Next


同样,我们通过诸如“select * from Win32_BIOS”这样的语句,使用从ManagementObjectSearcher和ManagementQuery派生的类,就能获取几乎所有的系统信息。


四、Win32 API获取系统信息


VB高手应该感到高兴,尽管VB.NET为我们新增了许多更简便而安全的方法,但我们以前悬梁刺股掌握的Win32 API知识仍是Windows编程中最有效的武器之一。.NET框架为我们提供了System.Runtime.InteropServices名字空间保持对Win32 API的兼容。例如,通过Win32 API获取CPU的相关信息:

Private Structure SYSTEM_INFO 

 

           Dim dwOemID As Integer 

 

           Dim dwPageSize As Integer 

 

           Dim lpMinimumApplicationAddress As Integer 

 

           Dim lpMaximumApplicationAddress As Integer 

 

           Dim dwActiveProcessorMask As Integer 

 

           Dim dwNumberOrfProcessors As Integer 

 

           Dim dwProcessorType As Integer 

 

           Dim dwAllocationGranularity As Integer 

 

           Dim dwReserved As Integer 

 

  End Structure 

 

  Private Declare Sub GetSystemInfo Lib "kernel32" Alias "GetSystemInfo" (ByRef lpSystemInfo As SYSTEM_INFO) 

 

  Private Sub FrmAPI_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

 

           Dim cpuInfo As New SYSTEM_INFO() 

 

           GetSystemInfo(cpuInfo) 

 

           LblCPU.Text = "系统中有" & cpuInfo.dwProcessorType.ToString() & "类型的CPU" & cpuInfo.dwNumberOrfProcessors.ToString() & "个" 

 

           LblCPU.Text &= "。CPU OEMID为:" & cpuInfo.dwOemID.ToString() & "。CPU页面大小:" & cpuInfo.dwPageSize 

 

  End Sub

要注意在调用API时VB的一些语言变化,如定义结构由Type语句变为了structure语句,Long数据类型变成了Integer。