分享

VB.NET获取 计算机系统信息

 趋明 2012-03-12

 
     Visual Basic.NET拥有许多VB开发者以前只能梦想的新功能和新特色。比如说,在VB6中只有通过复杂的Win32 API函数调用才能获得的系统信息,到了VB.NET,就可以以多种方法轻松的获取。
 
一、Environment类轻松获取系统信息
 
.NET Framework中的System.Environment类提供了丰富而简单的方法取得有关当前环境和平台的系统信息,如计算机名称、系统目录等:
  获取计算机的 NetBIOS 名称:
    Environment类的MachineName属性可以轻松获取此本地计算机的 NetBIOS 名称,如:
        lblMachineName.Text = "机器名:" & Environment.MachineName
  获取操作系统标识符和版本号:
Environment类的OSVersion可以轻松获取当前操作系统标识符和版本号,如:
        lblOs.Text = "操作系统:" & Environment.OSVersion.ToString
  获取系统目录:
    Environment类的SystemDirectory属性可以轻松取得系统目录:
        LblSysDir.Text = "系统目录:" & Environment.SystemDirectory
  获取系统启动后经过的时间:
    Environment类的TickCount属性可以轻松获取系统启动后经过的毫秒数,如:
        LblSysTickCount.Text = "系统已经启动了:" & CStr(Environment.TickCount / 1000) & "秒"
   获取系统特殊文件夹的路径:
    使用Environment类的GetFolderPath方法可以轻松获得系统特殊文件夹的路径,如:
LblSpecialDir.Text = "我的收藏夹:" & _ mEnvironment.GetFolderPath(Environment.SpecialFolder.Favorites)
   获取当前用户名:
    Environment类的UserName属性可以轻松获取当前用户名,如:
        LblUser.Text = "用户:" & Environment.UserName
 
二、SystemInformation类轻松获取系统信息
 
    通过SystemInformation类也可以轻松取得如计算机名等操作系统的有关信息:
    获取系统的启动方式:
使用 BootMode 可确定用户如何启动系统。对于在 Windows 98 上运行的应用程序,可以使用此属性来确定操作系统是否处于防故障模式。如:
        Select Case SystemInformation.BootMode
            Case BootMode.Normal
                lblBootMode.Text = "启动模式:正常启动"
            Case BootMode.FailSafe
                lblBootMode.Text = "启动模式:安全模式"
            Case BootMode.FailSafeWithNetwork
                lblBootMode.Text = "启动模式:(带网络驱动的)安全模式"
        End Select
    获取显示器信息如屏幕像素值、数目等:
lblMonitorSize.Text = "主显示器的尺寸为:" & SystemInformation.PrimaryMonitorSize.Width _
& "*" & SystemInformation.PrimaryMonitorSize.Height & "像素"
       LblMonitorCount.Text = "监视器数目:" & SystemInformation.MonitorCount
     获取鼠标相关信息:
        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。
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多