使用 System Information II 了解您计算机的所有信息
VB.NET 程序提供关于您的硬件和操作系统的信息

引言
我一直对使用的电脑的技术细节很感兴趣。我知道如何使用各种实用程序来查找大部分硬件和操作系统细节,但我希望编写一个程序,使用 .NET Framework 来获取大部分信息。我几年前开始用 VB.NET 编写这个实用程序,这个版本是经过多次修改和补充的结果。
除了信息外,这个实用程序还提供控制显示信息的能力。您可以启动/停止驱动程序和服务,卸载程序,控制进程,设置 OEM 电脑信息(包括徽标/图片),共享/取消共享文件夹,删除启动程序,以及修改用户/公司信息。
完整的类别列表是 Bios
、Components
、Computer
、CPU
、DateAndTime
、Desktop
、Drivers
、Drives
、EnvironmentVariables
、EventViewer
、FileTypes
、Fonts
、InstalledPrograms
、Introduction
、Keyboard
、MultimediaCodecs
、Network
、OEMInformation
、OperatingSystem
、PointingDevice
、Ports
、Processes
、Services
、Shares
、Sound
、SpecialFolders
、StartupPrograms
、UsbDevices
、UserInformation
、Video
、VisualStyles
、Win32Explorer
Hardware、Win32Explorer
Memory、Win32Explorer
Network、Win32Explorer
Storage、Win32Explorer
System 和 Win32Explorer
Users。
通过检查源代码,这个应用程序将使读者熟悉 .NET WMI 类方法、用作 UserControl
的 Panels、TreeView
、ListView
和 ListViewGroup
。
设计
每个信息类别都实现为一个用户控件,其中包含一个带有用户界面的面板和该类别的代码。使用树形视图控件选择每个类别,并将用户控件面板添加到主窗体中的分割容器中。这使得添加或修改信息类别变得容易,因为每个类别几乎都像一个独立的程序一样运行。许多用户控件(面板)都依赖于一个名为“ComputerInformation
”的大类,该类包含程序中的大部分逻辑。这个大类是早期版本的遗留物。在未来的修订版中,我希望将这个类分解成更小的类,每个类对应一个信息类别。
Using the Code
我尽量做到整洁和一致。我还尝试为控件和变量使用描述性名称。代码中也有相当多的注释。
将用户控件添加到分割容器
' Display the correct panel based on the node that was selected.
Private Sub TreeviewSystemInfo_AfterSelect(ByVal sender As Object, _
ByVal e As System.Windows.Forms.TreeViewEventArgs) _
Handles TreeViewSystemInfo.AfterSelect
Select Case e.Node.Text
Case "Computer"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Computer.CreateInstance())
Case "CPU"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Cpu.CreateInstance())
Case "BIOS"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Bios.CreateInstance())
Case "Drives and Volumes"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Drives.CreateInstance())
Case "Network"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Network.CreateInstance())
Case "Sound"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Sound.CreateInstance())
Case "Video"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Video.CreateInstance())
Case "Operating System"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add_
(OperatingSystem.CreateInstance())
Case "Date and Time"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(DateAndTime.CreateInstance())
Case "Installed Programs"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add_
(InstalledPrograms.CreateInstance())
Case "Services"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Services.CreateInstance())
Case "Startup Programs"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add_
(StartupPrograms.CreateInstance())
Case "Special Folders"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(SpecialFolders.CreateInstance())
Case "Environment Variables"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add_
(EnvironmentVariables.CreateInstance())
Case "OEM Information"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(OemInformation.CreateInstance())
Case "Processes"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Processes.CreateInstance())
Case "User Information"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add_
(UserInformation.CreateInstance())
Case "Visual Styles"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(VisualStyles.CreateInstance())
Case "Fonts"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Fonts.CreateInstance())
Case "Event Viewer"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(EventViewer.CreateInstance())
Case "Drivers"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Drivers.CreateInstance())
Case "Components"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Component.CreateInstance())
Case "Shares"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Shares.CreateInstance())
Case "File Types"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(FileTypes.CreateInstance)
Case "Keyboard"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Keyboard.CreateInstance())
Case "Pointing Device"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(PointingDevice.CreateInstance())
Case "Multimedia Codecs"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add_
(MultimediaCodecs.CreateInstance())
Case "Desktop"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Desktop.CreateInstance())
Case "USB Devices"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(UsbDevices.CreateInstance())
Case "Ports"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Ports.CreateInstance())
Case "Win32 Hardware"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Win32Hardware.CreateInstance())
Case "Win32 Storage"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Win32Storage.CreateInstance())
Case "Win32 Memory"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Win32Memory.CreateInstance())
Case "Win32 System"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Win32System.CreateInstance())
Case "Win32 Network"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Win32Network.CreateInstance())
Case "Win32 Users"
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Win32Users.CreateInstance())
Case Else
SplitContainerSystemInfo.Panel2.Controls.Clear()
SplitContainerSystemInfo.Panel2.Controls.Add(Introduction.CreateInstance())
End Select
结论
我希望这个程序不仅对您了解电脑的信息有用,而且对您找到可以用来提取或更改这些信息的代码有用。对类别添加的建议始终受到欢迎。 此外,任何关于如何改进此代码的建议也将不胜感激。