如何搜集局域网硬件信息?

其实搜集硬件信息的文章也有很多。我这里也分享一下我了解的一些方式。最后在讲一下自己写的《局域网电脑硬件信息搜集》工具是怎么做的。

目录

使用系统信息工具(这个最简单,但是信息不利于传送)

使用命令行工具(WMI也是常用的获取功能)

         使用python脚本或程序

        《局域网电脑硬件信息搜集》的部分代码及思路


使用系统信息工具(这个最简单,但是信息不利于传送)

  1. 系统信息 (System Information)
    • Windows + R 打开运行窗口,输入 msinfo32,然后按 Enter。
    • 在系统信息窗口中,你可以查看详细的硬件信息,包括处理器、内存、显卡等。

使用命令行工具(WMI也是常用的获取功能)

  1. WMIC (Windows Management Instrumentation Command-line)

    • 打开命令提示符 (Cmd),输入以下命令获取CPU信息:
      wmic cpu get name, CurrentClockSpeed, MaxClockSpeed, NumberOfCores, NumberOfLogicalProcessors 
    • 获取内存信息:
      mic memorychip get capacity, speed, manufacturer 
    • 获取显卡信息:
      mic path win32_videocontroller get name, adapterram, driverversion 
  2. PowerShell

    • 打开 PowerShell,输入以下命令获取CPU信息:
      Get-WmiObject Win32_Processor | Select-Object Name, NumberOfCores, NumberOfLogicalProcessors 
    • 获取内存信息:
      Get-WmiObject Win32_PhysicalMemory | Select-Object Capacity, Speed, Manufacturer 
    • 获取显卡信息:
      Get-WmiObject Win32_VideoController | Select-Object Name, AdapterRAM, DriverVersion

      使用python脚本或程序

      你也可以编写脚本或程序来自动化硬件信息的收集。下面是一个使用 Python 和 psutil 库的例子:《》

      import psutil
      
      # 获取CPU信息
      cpu_info = psutil.cpu_freq()
      print(f"CPU 最大频率: {cpu_info.max} MHz")
      print(f"CPU 当前频率: {cpu_info.current} MHz")
      print(f"CPU 核心数: {psutil.cpu_count(logical=False)}")
      print(f"CPU 逻辑处理器数: {psutil.cpu_count(logical=True)}")
      
      # 获取内存信息
      mem_info = psutil.virtual_memory()
      print(f"总内存: {mem_info.total / (1024 ** 3)} GB")
      print(f"可用内存: {mem_info.available / (1024 ** 3)} GB")
      
      # 获取显卡信息 (需要安装 py-cpuinfo)
      import cpuinfo
      gpu_info = cpuinfo.get_cpu_info()
      print(f"显卡: {gpu_info['brand_raw']}")
      

 《局域网电脑硬件信息搜集》的部分代码及思路

            实现方法比较简单,主要还是以WIM来读取硬件的信息,举几个例子 :

        

 ''----------添加硬盘    '

 Dim cmicWmi As New System.Management.ManagementObjectSearcher("Select * From Win32_DiskDrive")
 Dim strn As String = ""
 Dim YP As String = ""
 'MsgBox(“硬盘读取”)
 'Try
 Dim disksize As String = 0 '数字ID
 Dim diskSerialNumber As String = "" '这个我们暂且称其为序列号码
 Dim diskModel As String = "" '序列号
 Dim sumdisk As Integer = 0
 'For Each cmicWmiObj As System.Management.ManagementObject In cmicWmi.Get
 For i As Integer = 0 To cmicWmi.Get.Count - 1
     'MsgBox("size" & cmicWmiObj("size"))
     'MsgBox("serialnumber" & cmicWmiObj("serialnumber"))
     'MsgBox("Model" & cmicWmiObj("Model"))
     Try
         disksize = cmicWmi.Get(i)("size")
     Catch ex As Exception
         disksize = ""
     End Try
     Try
         diskSerialNumber = cmicWmi.Get(i)("serialnumber")
     Catch ex As Exception
         diskSerialNumber = ""
     End Try
     Try
         diskModel = cmicWmi.Get(i)("Model")
     Catch ex As Exception
         diskModel = ""
     End Try

     'If strn <> "" Then
     If diskSerialNumber <> "" Then
         diskSerialNumber = diskSerialNumber.Replace(" ", "")
         ' MsgBox(diskSerialNumber & vbCrLf & diskSerialNumber.Length)
         If diskSerialNumber.Length = 40 AndAlso diskSerialNumber.Contains("_") = False Then

             Dim newdiskname As String = RunScript(diskSerialNumber).Replace(" ", "").Replace(vbCrLf, "")
             If newdiskname.Contains("错误") = False Then
                 diskSerialNumber = newdiskname
             End If
             'MsgBox(diskSerialNumber)
         End If
     End If

     strn = strn & diskSerialNumber & " " & diskModel & " 参数:" & CInt(disksize / 1000 / 1000 / 1000) & "G|"
     sumdisk += CInt(disksize / 1000 / 1000 / 1000)

     'End If
     'MsgBox(sumdisk)
 Next
 Dim alldisk As String = ""
 If sumdisk >= 1000 Then
     alldisk = "总存储【" & Math.Round(sumdisk / 1000, 2) & "T】"

 Else
     alldisk = "总存储【" & sumdisk & "G】"

 End If
 ''-------------------主板
 Try
     Dim WmiZB As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_baseboard")

     For Each WmiObj As System.Management.ManagementObject In WmiZB.Get
         ZB = WmiObj("Manufacturer") & " " & WmiObj("Product")

     Next
 Catch
     ZB = ""
 End Try
 '---------电脑型号
 Dim cmodel As String = ""
 Try
     Dim WmiZB As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystemProduct") 'ComputerSystemProduct

     For Each WmiObj As System.Management.ManagementObject In WmiZB.Get
         'cmodel = WmiObj("Manufacturer") & " " & WmiObj("Model")
         cmodel = WmiObj("Vendor") & " " & WmiObj("Version") & WmiObj("NAME") & " "

         '              String Caption;
         'String Description;
         'String IdentifyingNumber;
         'String Name;
         'String SKUNumber;
         'String Vendor;
         'String Version;
         'String UUID;
     Next
 Catch
     cmodel = ""
 End Try
 ''-------------------系统
 Dim OS As String = ""
 Try
     Dim WmiOS As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")
     Dim osws As String = ""
     If Environment.GetEnvironmentVariable("ProgramFiles(x86)") = "" Then
         osws = "32 位"
     Else
         osws = "64 位"
     End If
     'MsgBox(osws)
     'MsgBox(My.Computer.Info.OSPlatform.ToString)
     For Each WmiObj As System.Management.ManagementObject In WmiOS.Get

         OS = "安装时间:" & Strings.Left(WmiObj("InstallDate"), 8).Insert(4, "年").Insert(7, "月").Insert(10, "日") & " 系统类型:" & osws & " 系统名:" & WmiObj("NAME")


     Next

 Catch
     OS = ""
 End Try

然后就是整个界面把获取到的信息写上去。 

最后通过TcpClient 将获取的信息传送给服务端,服务端写入数据库就可以了。

其实整体思路比较简单。就是需要考虑的细节比较多。比如获取的参数如何呈现等。

举个例子,一开始的时候,内存信息获取之后是这样呈现的: 

内存:91*****1 speed 4800 

现在的呈现方式:

总内存【16G】内存1:9******3 海力士(SK Hynix)   DDR5 4800    参数:8G|内存2:9******8 海力士(SK Hynix)   DDR5 4800    参数:8G

 需要通过获取的各个参数,查询厂家的数据以及标准,来转换成用户能够看得懂的语言来呈现出来。个人认为对于这个软件来说,可能用户体验会比代码要更重要。

先写到这里,后面有什么可以在进一步交流,感谢大家的支持!

不想写代码的可以直接去下载使用!

  《局域网电脑硬件信息搜集》V4.2

  • 13
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lucifercxw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值