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

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

[VB6] การอ่านค่า Serial Number ของ USB Flash Drive ด้วย WMI

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

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6583



สำหรับกระบวนการขั้นตอนวิธีคิด แอดมินได้อธิบายไปแล้วในส่วนของโค้ด VB.Net ซึ่งก็ใช้หลักการเดียวกันนั่นแหละครับ (
คลิ๊กที่นี่เพื่อไปดูโค้ด VB.Net) สำหรับโค้ด VB6 แอดมินได้แก้ไขเพิ่มเติม โดยแนะนำการใช้งานคำสั่งพื้นฐานบางอย่าง ซึ่งเราจำเป็นต้องใช้กันบ่อยมาก คือ คำสั่งภายใน (ฟังค์ชั่น) In String หรือ InStr และ InStrRev โดยที่
InStr คือ การค้นหาข้อความที่ต้องการจากทางซ้ายไปทางขวา หากเจอตัวแรกก็จะคืน
ค่าตำแหน่งที่มันอยู่ กลับไป หากไม่เจอก็คืนค่ากลับ 0 (นั่นคือฟังค์ชั่นที่มีการคืนค่าเลขจำนวนเต็ม)

InstrRev ก็จะทำกลับด้านกัน คือไล่จากทางขวามาทางซ้ายแทน


เช่น ...
i = InStr("ABCD", "B") ... ค่า i = 2 เพราะ B อยู่ตำแหน่งที่ 2 จากทางซ้ายมือ
i = InStrRev("ABCD", "C") ... ค่า i = 3 เพราะ C อยู่ตำแหน่งที่ 3 จากทางซ้ายมือ (เอาตำแหน่งที่เจอ)
i = InStrRev("ABCDC", "C") ... ค่า i = 5 เพราะเจอ C ตัวแรก จากทางขวามาซ้าย ซึ่งอยู่ตำแหน่งที่ 5


มาดูโค้ดฉบับเต็ม ...
  1. ' / --------------------------------------------------------------------------------
  2. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  3. ' / eMail : thongkorn@hotmail.com
  4. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  5. ' / Facebook: http://www.facebook.com/g2gnet (For Thailand only)
  6. ' / Facebook: http://www.facebook.com/CommonIndy (Worldwide)
  7. ' / UsbFlashSerialNoWMI:  Read Serial Number of USB Flash Drive with WMI
  8. ' / WMI = Windows Management Instrumentation
  9. ' / Microsoft Visual Basic 6.0 Service Pack 6
  10. ' /
  11. ' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
  12. ' / You can modify and/or distribute without to inform the developer.
  13. ' / --------------------------------------------------------------------------------
  14. Option Explicit

  15. Private Sub Form_Load()
  16.     Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
  17.     txtUsbFlash.Text = ""
  18.     txtUsbFlash.SelText = "USB FLASH SERIAL NUMBER" & vbCrLf & GetSerialWMI
  19. End Sub

  20. Public Function GetSerialWMI() As String
  21.     Dim strComputer As String
  22.     Dim objWMIService As Object
  23.     Dim ColItems As Object
  24.     Dim ObjItem As Object
  25.     Dim strSerial As String
  26.     Dim strTemp As String
  27.     Dim strArr() As String
  28.     Dim MaxLen As Byte '<-- หาค่าความยาวสูงสุดของชุดข้อมูล ซึ่งจะเป็น Serial Number
  29.     Dim idx As Byte '<-- เป็น Index ของ Array ซึ่งจะเก็บค่าคำตอบ Serial Number
  30.    
  31.     '/ (dot) is Local machine
  32.     strComputer = "."
  33.     Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\CIMV2")
  34.     '/ DiskDrive Class
  35.     Set ColItems = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive", , 48)
  36.     '/ Detect USB Flash All Drive
  37.     For Each ObjItem In ColItems
  38.         If ObjItem.interfacetype = "USB" Then
  39.             '// เช่น "USBSTOR\DISK&VEN_&PROD_&REV_1.00\7&15FF80F3&0&__&0"
  40.             strTemp = ObjItem.pnpdeviceid
  41.             '// InStrRev ค้นหาเครื่องหมาย \ จากทางขวามาซ้าย หากพบให้ +1 เพื่อเริ่มต้นการอ่านค่าจากฟังค์ชั่น Mid String
  42.             strTemp = Mid(strTemp, InStrRev(strTemp, "") + 1)
  43.             '// ผลที่ได้ "7&15FF80F3&0&__&0"
  44.             '// จึงต้องแยกเครื่องหมาย & ออกจากชุดข้อมูล
  45.             strArr = Split(strTemp, "&")
  46.             '// ผลที่ได้
  47.             ' strArr(0) = "7"               '<-- LBound
  48.             ' strArr(1) = "15FF80F3"
  49.             ' strArr(2) = "0"
  50.             ' strArr(3) = "__"
  51.             ' strArr(4) = "0"               '<-- UBound
  52.             '/ หาความยาวสูงสุดของชุดข้อมูลจาก Array
  53.             '/ ลูปตามจำนวน Index ของ Array โดยเริ่มจาก LBound = 0 ไปจนสิ้นสุดที่ UBound
  54.             Dim Count As Byte
  55.             MaxLen = 0: idx = 0 '<-- เคลียร์ค่าเดิม กรณีหากมี USB Flash Drive หลายตัว มิเช่นนั้นจะเกิด Bug (Logical Error)
  56.             For Count = LBound(strArr) To UBound(strArr)
  57.                 '// เปรียบเทียบค่าความยาวของข้อมูลในแต่ละ Array
  58.                 If MaxLen < Len(strArr(Count)) Then
  59.                     '// เก็บค่า Index ไว้เป็นคำตอบ (ตัวอย่างคือ Index = 1)
  60.                     idx = Count
  61.                     '// นำค่าความยาวที่มากกว่ามาเก็บไว้ ก่อนที่วนกลับไปเปรียบเทียบค่าใหม่
  62.                     MaxLen = Len(strArr(Count))
  63.                 End If
  64.             Next
  65.             '// เก็บค่าคำตอบ
  66.             strSerial = strSerial & strArr(idx) & vbCrLf
  67.         End If
  68.     Next
  69.     '/ Return value
  70.     GetSerialWMI = strSerial
  71. End Function

  72. Private Sub Form_Resize()
  73.     If WindowState <> vbMinimized Then
  74.         txtUsbFlash.Move 0, 0, ScaleWidth, ScaleHeight
  75.     End If
  76. End Sub
คัดลอกไปที่คลิปบอร์ด

ดาวน์โหลดโค้ดฉบับเต็ม VB6 (SP6) ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

51

โพสต์

232

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
232
โพสต์ 2018-5-3 09:37:38 | ดูโพสต์ทั้งหมด

ขอบคุณมากครับผม  ขอให้สุขภาพแข็งแรง เงินทองไหลมาเทมา ครับผม.

4

กระทู้

15

โพสต์

251

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
251
โพสต์ 2018-5-3 22:00:50 | ดูโพสต์ทั้งหมด

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

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

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

GMT+7, 2024-11-27 23:38 , Processed in 0.145232 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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