ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 4701|ตอบกลับ: 0

[VB6/VB.NET] ค้นหา Harddisk ที่ติดตั้ง Windows พร้อมกับอ่านค่า Physical Serial Number ด้วย WMI

[คัดลอกลิงก์]

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583



WMI หรือ
Windows Management Instrumentation แอดมินได้กล่าวไปถึงหลายรอบแล้ว ก็จะสรุปให้ฟังอีกทีล่ะกันครับ WMI เป็นการดำเนินการกับรีจิสทรีในระบบไฟล์ ทั้งการค้นหา การกำหนดค่าฮาร์ดแวร์และการจัดการตั้งค่าของ Windows เอง โดยมี Namespace หลักคือ "root\cimv2" ประกอบด้วย Class ที่สามารถเรียกใช้งานได้มากกว่า 500 Class โดยมีหมวดหมู่หลักๆดังนี้คือ ...
  • Computer system hardware
  • Operating System
  • Installed Applications
  • Internal WMI Service settings
  • Performance Counter
  • Helper Classes


ดาวน์โหลด WMI Code Creator v1.0 ...

กรณีที่เครื่องคอมพิวเตอร์ทำการติดตั้งฮาร์ดดิสต์เอาไว้หลายลูก โค้ดชุดนี้เป็นการใช้ WMI ในการทดสอบว่าฮาร์ดดิสต์ลูกไหนเป็นตัว Boot ระบบปฏิบัติการ Windows จากนั้นก็จะทำการค้นหา Physical Serial Number ซึ่งค่านี้จะไม่มีการเปลี่ยนแปลงได้เลย ซึ่งตัวแอดมินนำไปใช้ในการล็อคโปรแกรมของตัวเองนั่นเอง (แต่ต้องมีการเข้ารหัสอีกทีน่ะครับ) ...

มาดูโค้ดสำหรับ VB6 ...
  1. Private Function GetBootDiskSerial() As String
  2.     Dim SerialHDD As String
  3.     Dim OSName As String
  4.     Dim strComputer As String
  5.     '//
  6.     Dim oWMI As Object
  7.     Dim objItem As Object
  8.     Dim colItems As Object
  9.    
  10.     strComputer = "."
  11.     Set oWMI = GetObject("winmgmts:\" & strComputer & "\root\CIMV2")
  12.     '// ค้นหา Windows OS  และ Hard Disk ลูกที่บู๊ตระบบ
  13.     Set colItems = oWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem", , 48)
  14.     For Each objItem In colItems
  15.         '// คำตอบที่ได้
  16.         '// Microsoft Windows 10 Pro|C:\Windows|\Device\Harddisk0\Partition2
  17.        OSName = objItem.Name
  18.     Next
  19.    
  20.     '// "Microsoft Windows 10 Pro|C:\Windows|\Device\Harddisk0\Partition2"
  21.     Dim Pos As Integer
  22.     '// หาคำว่า Harddisk เมื่อเจอมันจะรีเทิร์นค่าตำแหน่ง H ตัวแรก แต่ให้บวกเพิ่มเข้าไปอีก 8 ตัวอักขระ
  23.     Pos = InStr(OSName, "Harddisk") + 8
  24.     '// ชุดข้อมูลที่ต้องการ Harddisk0 ให้เอาตัวเลขที่ต่อจาก Harddisk (คือ 0)
  25.     Dim HddIndex As Byte
  26.     '// อ่านค่าตัวเลขหลักสุดท้ายจะได้ 0
  27.     HddIndex = Mid(OSName, Pos, 1)
  28.    
  29.     '// แอดมินลองทดสอบดู Harddisk0 มันเป็นตัวเดียวกับ PHYSICALDRIVE0
  30.     Dim Hd As String
  31.     For Each objItem In oWMI.InstancesOf("Win32_PhysicalMedia")
  32.         ' "\\.\PHYSICALDRIVE0"
  33.         Hd = "\\.\PHYSICALDRIVE" & HddIndex
  34.         '// เอา Serial Number ของ PHYSICALDRIVE0
  35.         If objItem.Tag = Hd Then
  36.             SerialHDD = objItem.SerialNumber
  37.             Exit For
  38.         End If
  39.     Next
  40.     GetBootDiskSerial = Replace(Trim(SerialHDD), Chr(0), "")
  41. End Function
คัดลอกไปที่คลิปบอร์ด
การเรียกใช้งาน MsgBox GetBootDiskSerial ...

สำหรับ VB.NET ก่อนทำการเรียกใช้งาน WMI ได้ จะต้อง Reference System.Management เข้ามาก่อนครับ ...


มาดูโค้ดสำหรับ VB.NET ...
  1. '// ไปที่ Reference ต้อง Add System.Management เข้ามาด้วย
  2. Imports System.Management
คัดลอกไปที่คลิปบอร์ด
  1.     Public Function GetBootDiskSerial() As String
  2.         Dim Finder As ManagementObjectSearcher = New ManagementObjectSearcher("Select * from Win32_OperatingSystem")
  3.         Dim Name As String = ""
  4.         Dim SerialNumber As String = ""

  5.         For Each OS As ManagementObject In Finder.[Get]()
  6.             Name = OS("Name").ToString()
  7.         Next
  8.         Dim ind As Integer = Name.IndexOf("Harddisk") + 8
  9.         Dim HardIndex As Integer = Convert.ToInt16(Name.Substring(ind, 1))
  10.         Finder = New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Index=" & HardIndex)
  11.         For Each HardDisks As ManagementObject In Finder.[Get]()
  12.             For Each HardDisk As ManagementObject In HardDisks.GetRelated("Win32_PhysicalMedia")
  13.                 SerialNumber = HardDisk("SerialNumber").ToString()
  14.             Next
  15.         Next

  16.         Return Trim(SerialNumber).Replace(Chr(0), "")
  17.     End Function
คัดลอกไปที่คลิปบอร์ด

การเรียกใช้งาน MsgBox(GetBootDiskSerial) ...
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-11-27 22:38 , Processed in 0.207479 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้