• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Hỏi về Serialnumber của ổ cứng?

Góc trao đổi, hỏi đáp của ngôn ngữ Visual Basic 6 và Visual Basic Script

Điều hành viên: tungblt

redsea_tq
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 83
Ngày tham gia: T.Bảy 21/08/2010 2:03 pm

Hỏi về Serialnumber của ổ cứng?

Gửi bàigửi bởi redsea_tq » T.Ba 05/04/2011 8:33 am

Em chào các bác, em dùng đoạn mã sau để tìm Serialnumber của ổ cứng, nhưng có máy tìm được có máy không tìm được. Em không hiểu tại sao lại như vậy mong các bác chỉ giúp vì đoạn mã này em cũng chỉ tham khảo trên mạng và ứng dụng nên cũng không hiểu sâu về nó nhiều lắm.
  1. Private Sub cm_Pass_Click()
  2.     Dim ObjetoWMI As Object
  3.     Dim Disco As Object
  4.     Dim Discos As Object
  5.     Dim abc
  6.     Set ObjetoWMI = GetObject("WINMGMTS:")
  7.     Set Discos = ObjetoWMI.InstancesOf("Win32_PhysicalMedia")
  8.     abc = ""
  9.     For Each Disco In Discos
  10.         abc = Disco.SerialNumber
  11.         If Len(Trim(abc)) > 0 Then
  12.             Exit For
  13.         End If
  14.     Next
  15.     tb_Thongtin.Text = Trim(abc)
  16. End Sub
  17.  



Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Hỏi về Serialnumber của ổ cứng?

Gửi bàigửi bởi truongphu » T.Ba 05/04/2011 10:08 am

Với VB6 cổ điển, việc tìm hard disk number rất khó, phải dùng các hàm API phức tạp lòng thòng
trên XP trở đi, MS cho thêm WMI để thao tác với toàn bộ quản lý và hoạt động của máy tính,
nhờ thế, việc dùng code WMI trên VB6 đơn giản hơn nhiều
redsea_tq đã viết:

Mã: Chọn hết

    Set ObjetoWMI = GetObject("WINMGMTS:")
    Set Discos = ObjetoWMI.InstancesOf("Win32_PhysicalMedia")

** 2 câu code trên là gọi WMI: system32\wbem\winmgmt.exe
redsea_tq đã viết:nhưng có máy tìm được có máy không tìm được.

- có thể các máy khác chạy khác HĐH
- quyền quản trị không cho user chạy WMI
- câu code khá đầy đủ sẽ là:

Mã: Chọn hết

 strComputer = "."  ' hoac dùng tên máy tính, vd "redsea_tq001"
    Set ObjetoWMI = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
    Set Discos = ObjetoWMI.ExecQuery("SELECT * FROM Win32_PhysicalMedia")

- Tôi test code của bạn trên máy của tôi, tốt, thu gọn như sau:

Mã: Chọn hết

Private Sub Command1_Click()
    Set Discos = GetObject("WINMGMTS:").InstancesOf("Win32_PhysicalMedia")
    For Each Disco In Discos
        abc = Disco.SerialNumber
        If Len(Trim(abc)) > 0 Then Exit For
    Next
    MsgBox Trim(abc)
End Sub

(code script không cần Dim... As)
Bạn thử các biện pháp trên, nếu không được trên một số máy, thử dùng API
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

redsea_tq
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 83
Ngày tham gia: T.Bảy 21/08/2010 2:03 pm

Re: Hỏi về Serialnumber của ổ cứng?

Gửi bàigửi bởi redsea_tq » T.Ba 05/04/2011 10:29 pm

Em cám ơn bác TruongPhu rất nhiều, có lẽ em phải dùng API thôi mà API thì đúng là lòng thòng thật. em đã thử theo cách của bác mà vẫn không được, biến abc trả về null có nghĩa là nó không tìm được một Disco nào cả. em cũng không hiểu tại sao nữa, tất cả các máy đều dùng win xp. Nhưng vẫn cảm ơn bác rất nhiều, bác đúng là sư phụ về vb!

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Hỏi về Serialnumber của ổ cứng?

Gửi bàigửi bởi truongphu » T.Tư 06/04/2011 7:43 am

Tôi chợt nhớ một số đĩa cứng mới có chuẩn khác với chuẩn truyền thống IDE/ATA, không biết liệu như thế có tác dụng làm code nhận không ra chăng (biến abc trả về null)

Sau đây là project của tiền bối nào đó viết trên API kèm 1 dll, chạy khá tốt
Tập tin đính kèm
Get harddisk number.rar
(48.64 KiB) Đã tải 348 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

redsea_tq
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 83
Ngày tham gia: T.Bảy 21/08/2010 2:03 pm

Re: Hỏi về Serialnumber của ổ cứng?

Gửi bàigửi bởi redsea_tq » T.Tư 06/04/2011 5:41 pm

Em cám ơn bác nhiều, để em chạy thử xem sao!

hxuyenlqd
Bài viết: 1
Ngày tham gia: CN 08/08/2010 3:20 pm

Re: Hỏi về Serialnumber của ổ cứng?

Gửi bàigửi bởi hxuyenlqd » T.Năm 29/06/2017 6:12 pm

Khi đưa chương trình thành hàm đọc SerialNumHDD và khai báo biến như sau thi bị báo lỗi tại dòng 5:
For Each Disco In Discos
Bạn nào biết cách khai báo biến Disco giúp mình với
Dim Discos As Object
Dim abc As String
Public Function SerialNumHDD() As String
Set Discos = GetObject("WINMGMTS:").InstancesOf("Win32_PhysicalMedia")
For Each Disco In Discos
abc = Trim$(Disco.SerialNumber)
If Len(Trim(abc)) > 0 Then Exit For
Next
SerialNumHDD = abc
End Function


Quay về “Visual Basic 6 và Visual Basic Script (VB & VBS)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.8 khách