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.
- 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?
Điều hành viên: tungblt
- truongphu
- 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: 510 time
Re: Hỏi về Serialnumber của ổ cứng?
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
** 2 câu code trên là gọi WMI: system32\wbem\winmgmt.exe
- 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à:
- Tôi test code của bạn trên máy của tôi, tốt, thu gọn như sau:
(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
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
Re: Hỏi về Serialnumber của ổ cứng?
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!
- truongphu
- 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: 510 time
Re: Hỏi về Serialnumber của ổ cứng?
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
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 368 lần
Re: Hỏi về Serialnumber của ổ cứng?
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
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: Majestic-12 [Bot] và 5 khách