Làm sao để đọc ID của CPU? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

levanduyet

Hãy để gió cuốn đi.
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,798
Được thích
4,706
Giới tính
Nam
PcWorld.com.vn đã viết:
Bạn có thể lập trình trong Excel bằng cách dùng ngôn ngữ VBA (Visual Basic for Application).

Bản thân các lệnh của VBA cũng như các hàm sẵn có của VBA không có khả năng truy xuất được các thông tin phần cứng cấp thấp của máy như CPU ID... Tuy nhiên Microsoft có cung cấp công nghệ “Windows Management Instrumentation” (WMI) để giúp ta truy xuất các thông tin phần cứng của máy rất dễ dàng, ngắn gọn và an toàn. Thí dụ sau đây là macro GetCPUID với chức năng là đọc và hiển thị CPU ID của máy lên màn hình. Bạn có thể tạo macro GetCPUID trong Word, Excel như sau:
Mã:
 Sub GetCPUID()
 ‘tạo đối tượng dịch vụ WMI
 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
 ‘tìm các CPU đang chạy của máy
 Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
 ‘lặp hiển thị ID của từng CPU
 For Each objItem In colItems
 MsgBox "Processor Id: " & objItem.ProcessorId
 Next
 End Sub

Lưu ý rằng trên các máy PC bình thường, chỉ có 1 CPU nên vòng lặp hiển thị thông tin sẽ chỉ chạy 1 lần và hiển thị ID của CPU duy nhất của máy.

Ngoài ra để truy xuất các thông tin của 1 thiết bị I/O nào đó, thí dụ như "serial number" của đĩa cứng, bạn có thể gọi hàm API Windows có tên là DeviceIoControl(). Bạn có thể liên hệ với TGVT để copy Project VB 6.0 có tên là VB DispDiskInfo để biết chi tiết về việc gọi hàm DeviceIoControl() để truy xuất các thông tin vật lý của đĩa cứng.
TGVT
Đã có đọc Serial của HDD ở đây
 
Như đã có đề cập ở một số bài viết, việc áp dụng hàm này để đọc ID của CPU, từ đó cung cấp licence cho người sử dụng trong trường hợp bạn bán một ứng dụng nào đó.
Ví dụ:
_ Người mua mua ứng dụng của bạn, hàm này đọc ID của CPU và gởi cho bạn.
_ Sau đó bạn dùng một thuật toán nhằm chuyển ID sang một mã (Licence) cung cấp cho người dùng.

Như vậy sẽ bảo đảm không có việc cấp licence cho nhiều máy cùng dùng chung một ứng dụng của bạn.

Lê Văn Duyệt
 
Upvote 0
Xin lưu ý chỉ có thể sử dụng từ phiên bản Windows XP trở lên. Các Windows trước sẽ không chạy được.
 
Upvote 0
("winmgmts:\\.\root\cimv2") .... not defined
Vậy là sao hả anh LVD, AT?
 
Upvote 0
Như đã có đề cập ở một số bài viết, việc áp dụng hàm này để đọc ID của CPU, từ đó cung cấp licence cho người sử dụng trong trường hợp bạn bán một ứng dụng nào đó.
Ví dụ:
_ Người mua mua ứng dụng của bạn, hàm này đọc ID của CPU và gởi cho bạn.
_ Sau đó bạn dùng một thuật toán nhằm chuyển ID sang một mã (Licence) cung cấp cho người dùng.

Như vậy sẽ bảo đảm không có việc cấp licence cho nhiều máy cùng dùng chung một ứng dụng của bạn.

Lê Văn Duyệt

Còn cái vụ này thì em không biết người ta làm như thế nào nhỉ!
Nó đọc được số ID được từ đó cung cấp licence cho người sử dụng trong trường hợp bạn bán một ứng dụng nào đó.
Ví dụ:
_ Người mua mua ứng dụng của bạn, hàm này đọc ID của CPU và gởi cho bạn.
_ Sau đó bạn dùng một thuật toán nhằm chuyển ID sang một mã (Licence) cung cấp cho người dùng.
attachment.php


 

File đính kèm

  • 1.PNG
    1.PNG
    3.9 KB · Đọc: 647
Upvote 0
"Windows Management Instrumentation” (WMI)

Dở 1 cái là nó dùng thêm 1 reference object chỉ để làm mỗi việc đó. Trong khi phần mềm thì phải hạn chế những dependency files. Anh Duyệt thấy không, khi viết ứng dụng là phải tính toán kỹ là dùng cái gì, ko dùng cái gì để tránh ứng dụng to vật.

Cái món WMI này trên PSC nó có cả sample lấy đủ thứ của máy tính, viết khá chuẩn. Nhưng nếu ko phải là API mà dùng thêm 1 thư viện thì hai2hai sẽ ko dùng. (nhất là dùng cái đó chỉ để lấy mỗi UniqueID của máy)

Trên PSC có rất nhiều code về software protection được viết CỰC KỲ CHUYÊN NGHIỆP. Tuy nhiên, tìm đỏ mắt không có cái nào GetMACAddress (lấy địa chỉ card mạng) mà lấy đúng cái primary MACAddress cả (trường hợp máy có nhiều card mạng ảo)


Tóm lại: Khi viết ứng dụng thì ko nên dùng WMI vì ... cảm giác ko chuyên nghiệp.
 
Lần chỉnh sửa cuối:
Upvote 0
Dở 1 cái là nó dùng thêm 1 reference object chỉ để làm mỗi việc đó. Trong khi phần mềm thì phải hạn chế những dependency files. Anh Duyệt thấy không, khi viết ứng dụng là phải tính toán kỹ là dùng cái gì, ko dùng cái gì để tránh ứng dụng to vật.

Cái món WMI này trên PSC nó có cả sample lấy đủ thứ của máy tính, viết khá chuẩn. Nhưng nếu ko phải là API mà dùng thêm 1 thư viện thì hai2hai sẽ ko dùng. (nhất là dùng cái đó chỉ để lấy mỗi UniqueID của máy)

Trên PSC có rất nhiều code về software protection được viết CỰC KỲ CHUYÊN NGHIỆP. Tuy nhiên, tìm đỏ mắt không có cái nào GetMACAddress (lấy địa chỉ card mạng) mà lấy đúng cái primary MACAddress cả (trường hợp máy có nhiều card mạng ảo)


Tóm lại: Khi viết ứng dụng thì ko nên dùng WMI vì ... cảm giác ko chuyên nghiệp.


Nhìn chung, code trên chỉ để tham khảo vì khó khai thác và sử dụng thông tin.
 
Upvote 0
Bản thân các lệnh của VBA cũng như các hàm sẵn có của VBA không có khả năng truy xuất được các thông tin phần cứng cấp thấp của máy như CPU ID... Tuy nhiên Microsoft có cung cấp công nghệ “Windows Management Instrumentation” (WMI) để giúp ta truy xuất các thông tin phần cứng của máy rất dễ dàng, ngắn gọn và an toàn. Thí dụ sau đây là macro GetCPUID với chức năng là đọc và hiển thị CPU ID của máy lên màn hình. Bạn có thể tạo macro GetCPUID trong Word, Excel như sau:
Mã:
 Sub GetCPUID()
 ‘tạo đối tượng dịch vụ WMI
 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
 ‘tìm các CPU đang chạy của máy
 Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
 ‘lặp hiển thị ID của từng CPU
 For Each objItem In colItems
 MsgBox "Processor Id: " & objItem.ProcessorId
 Next
 End Sub

Lưu ý rằng trên các máy PC bình thường, chỉ có 1 CPU nên vòng lặp hiển thị thông tin sẽ chỉ chạy 1 lần và hiển thị ID của CPU duy nhất của máy.

Ngoài ra để truy xuất các thông tin của 1 thiết bị I/O nào đó, thí dụ như "serial number" của đĩa cứng, bạn có thể gọi hàm API Windows có tên là DeviceIoControl(). Bạn có thể liên hệ với TGVT để copy Project VB 6.0 có tên là VB DispDiskInfo để biết chi tiết về việc gọi hàm DeviceIoControl() để truy xuất các thông tin vật lý của đĩa cứng.
TGVT
Đã có đọc Serial của HDD ở đây

Có bác nào test thử khi format ổ đĩa, hàm trên có trả chính xác không?
 
Upvote 0
Mình thấy cách này cũng được nhưng mà nghe vẻ nó chạy hơi nặng. Bạn có cách nào khác không?
 
Upvote 0
Như đã có đề cập ở một số bài viết, việc áp dụng hàm này để đọc ID của CPU, từ đó cung cấp licence cho người sử dụng trong trường hợp bạn bán một ứng dụng nào đó.
Ví dụ:
_ Người mua mua ứng dụng của bạn, hàm này đọc ID của CPU và gởi cho bạn.
_ Sau đó bạn dùng một thuật toán nhằm chuyển ID sang một mã (Licence) cung cấp cho người dùng.

Như vậy sẽ bảo đảm không có việc cấp licence cho nhiều máy cùng dùng chung một ứng dụng của bạn.

Lê Văn Duyệt

Nếu máy của người dùng bị hỏng CPU phải thay thì sao? Cấp bản quyền cho User hay là cho CPU? Nếu đã cấp bản quyền cho người sử dụng thì phải cho phép người ta sử dụng ứng dụng với các máy khác nhau chứ, ví dụ đến cơ quan thì dùng máy cơ quan, về nhà thì dùng máy gia đình, đi công tác thì dùng laptop...
 
Upvote 0
Nếu máy của người dùng bị hỏng CPU phải thay thì sao? Cấp bản quyền cho User hay là cho CPU? Nếu đã cấp bản quyền cho người sử dụng thì phải cho phép người ta sử dụng ứng dụng với các máy khác nhau chứ, ví dụ đến cơ quan thì dùng máy cơ quan, về nhà thì dùng máy gia đình, đi công tác thì dùng laptop...

Chính xác là như bạn nói. Cấp quyền cho người sử dụng (cấp theo số concurrent users) nhưng vẫn phải cho 1 máy chủ (và vì thế vẫn cần phải xác định UniqueKey của máy chủ). Nghĩa là việc xác định quyền là cho số lượng người cùng truy cập vào máy chủ. Ví dụ, kể cả khi đi du lịch trên thế giới, người chủ có thể login vào CSDL của công ty mà ko bị chạy ở chế độ trial KHI VÀ CHỈ KHI số người cùng truy cập vào máy chủ đó < số licenses được cấp.

Đối với 1 số loại hình sản phẩm khác (như ActiveX Control, Developer tools,...) thì lại phần lớn là cung cấp theo máy chứ ko theo người dùng.
 
Upvote 0
Tôi muốn có một hàm để đọc số Seri cua MainBoard bất kì, bạn có thể giúp tôi được không? Cảm ơn bạn nhiều!
 
Upvote 0
chào các bác ,
em mới bập bẹ tìm hiểu về lập trình , các bác viết mẫu giúp em làm cách nào để làm được như hình bên dưới
Phần mềm sẽ có đoạn code nhận số seria của mainboard , kết hợp với tên đăng kí để tạo thành 1 số đăng ký tạo ẩn trong máy,Người sử dụng gửi số mainboard cho mình để nhận số đăng ký và điền vào khung dưới , so sánh 2 số nếu trùng nhau sẽ cho sử dụng ( chi lần đầu tiên sau khi cài đặt )
 

File đính kèm

  • bez tytułu1.JPG
    bez tytułu1.JPG
    13.7 KB · Đọc: 74
  • bez tytułu.JPG
    bez tytułu.JPG
    9.8 KB · Đọc: 70
Upvote 0
Tôi gà mờ vụ này lắm. Bạn có thể hướng dẫn cụ thể từng bước tạo loại marco không?
 
Upvote 0
Trong của sổ viết code của bạn, có thể có dòng Option Explicit ở trên cùng ---> Bạn thử xóa dòng này xem
Thêm code coppy mã luôn vào code dùm em với thầy ơi!
Sub GetCPUID()
‘tạo đối tượng dịch vụ WMI
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
‘tìm các CPU đang chạy của máy
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
‘lặp hiển thị ID của từng CPU
For Each objItem In colItems
MsgBox "Processor Id: " & objItem.ProcessorId
Next
End Sub
 
Upvote 0
Như đã có đề cập ở một số bài viết, việc áp dụng hàm này để đọc ID của CPU, từ đó cung cấp licence cho người sử dụng trong trường hợp bạn bán một ứng dụng nào đó.
Ví dụ:
_ Người mua mua ứng dụng của bạn, hàm này đọc ID của CPU và gởi cho bạn.
_ Sau đó bạn dùng một thuật toán nhằm chuyển ID sang một mã (Licence) cung cấp cho người dùng.

Như vậy sẽ bảo đảm không có việc cấp licence cho nhiều máy cùng dùng chung một ứng dụng của bạn.

Lê Văn Duyệt

"_ Sau đó bạn dùng một thuật toán nhằm chuyển ID sang một mã (Licence) cung cấp cho người dùng." >> Vậy cái này anh có hướng dẫn code như thế nào hk a. Em có suy nghĩ ra hướng đi là load từ file txt. nhưng không biết như thế nào.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom