• Lấy về số seri CPU, ổ cứng MainBoard trong Access
  • RE: Code qui định số lần cho phép khởi động fomrs !

    dinhvank19 > 05-11-10, 12:15 PM

    (04-10-10, 07:42 PM)DoquangLam Đã viết: Nhờ các bạn trợ giúp :

    - Mình có forms có tên là DangKy
    - Bây giờ mình muốn các bạn viết dùm mình Code qui định cho nó khi khởi động đến lần thứ 3 hay 5,6... (do mình quy định trong code) thì hiện lên dòng thông báo "Đã hết hạn sử dụng", bấm OK thì nó thoát fomrs.
    Cám ơn !

    xem bài http://thuthuataccess.co.cc/forum/thread-285.html
  • RE: Lấy về số seri CPU, ổ cứng MainBoard trong Access

    dinhvank19 > 05-11-10, 12:31 PM

    (23-08-10, 01:25 PM)Noname Đã viết: Đôi khi có 1 số nhu cầu lấy thông tin phần cứng trong chương trình (chẳng hạn để cấp bản quyền). Dưới đây là Đoạn Code cho phép bạn lấy thông tin CPU máy tính:
    Mã:
    Sub GetCPUID()
         'ta.o ðo^'i týo+.ng di.ch vu. WMI
         Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
         'ti`m các CPU ðang cha.y cu?a máy
         Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
         'la(.p hie^?n thi. ID cu?a tu+`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.


    nguồn PC word

    2. Lấy CPU ổ cứng:

    Mã:
    Sub readserienumber()
        Dim fso As Object, Drv As Object
                'Create a FileSystemObject object
                  Set fso = CreateObject("Scripting.FileSystemObject")
                  'Assign the current drive letter if not specified
                  Set Drv = fso.GetDrive()
                  With Drv
                      If .IsReady Then
                          DriveSerial = Abs(.SerialNumber)
                      Else    '"Drive Not Ready!"
                          DriveSerial = -1
                      End If
                  End With
                  'Clean up
                  Set Drv = Nothing
                  Set fso = Nothing
                  Msgbox "Serial là: " & DriveSerial
         End Sub

    3. Lấy Serial Main Board

    Mã:
    Sub readseriemainboard()
    Dim objs As Object
    Dim obj As Object
    Dim WMI As Object
    Dim sAns As String
    Set WMI = GetObject("WinMgmts:")
    Set objs = WMI.InstancesOf("Win32_BaseBoard")
    For Each obj In objs
    sAns = sAns & obj.SerialNumber
    If sAns < objs.Count Then sAns = sAns & ","
    Next
    Msgbox "Serial main: " & sAns
    End Sub

    Hình như đoạn code lấy serial đĩa cứng chạy không được trên mọi hệ điều hành!
    các bạn xem đoạn code dài dòng này ra sao?

    Option Explicit

    'àõnh nghôa caác hùçng cêìn duâng cho haâm CreateFile
    Private Const FILE_SHARE_READ = &H1
    Private Const FILE_SHARE_WRITE = &H2
    Private Const GENERIC_READ = &H80000000
    Private Const GENERIC_WRITE = &H40000000
    Private Const OPEN_EXISTING = 3
    Private Const CREATE_NEW = 1
    'àõnh nghôa caác hùçng, caác kiïíu cêìn duâng cho haâm DeviceIOControl
    'caác thöng tin naây àûúåc lêëy tûâ böå DDK
    Private Const DFP_RECEIVE_DRIVE_DATA = &H7C088
    Private Enum HDINFO
    HD_MODEL_NUMBER
    HD_SERIAL_NUMBER
    HD_FIRMWARE_REVISION
    End Enum

    Private Type IDEREGS
    bFeaturesReg As Byte
    bSectorCountReg As Byte
    bSectorNumberReg As Byte
    bCylLowReg As Byte
    bCylHighReg As Byte
    bDriveHeadReg As Byte
    bCommandReg As Byte
    bReserved As Byte
    End Type

    Private Type SENDCMDINPARAMS
    cBufferSize As Long
    irDriveRegs As IDEREGS
    bDriveNumber As Byte
    bReserved(1 To 3) As Byte
    dwReserved(1 To 4) As Long
    End Type

    Private Type DRIVERSTATUS
    bDriveError As Byte
    bIDEStatus As Byte
    bReserved(1 To 2) As Byte
    dwReserved(1 To 2) As Long
    End Type

    Private Type SENDCMDOUTPARAMS
    cBufferSize As Long
    DStatus As DRIVERSTATUS ' ovvero DriverStatus
    bBuffer(1 To 512) As Byte
    End Type

    'Àõnh nghôa caác haâm API cêìn duâng
    Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, ByVal lpOverlapped As Long) As Long

    'Àõnh nghôa haâm GetHDInfo àïí àoåc thöng tin vêåt lyá disk
    Private Function GetHDInfo(Drive As Integer, hdi As HDINFO) As String
    Dim bin As SENDCMDINPARAMS
    Dim bout As SENDCMDOUTPARAMS
    Dim hdh As Long
    Dim br As Long
    Dim ix As Long
    Dim hddfr As Long
    Dim hddln As Long
    Dim s As String
    Select Case hdi ' Selezione tipo caratteristica richiesta
    Case HD_MODEL_NUMBER
    hddfr = 55 ' Posizione nel buffer del ModelNumber
    hddln = 40 ' Lunghezza nel buffer del ModelNumber
    Case HD_SERIAL_NUMBER
    hddfr = 21 ' Posizione nel buffer del SerialNumber
    hddln = 20 ' Lunghezza nel buffer del SerialNumber
    Case HD_FIRMWARE_REVISION
    hddfr = 47 ' Posizione nel buffer del FirmwareRevision
    hddln = 8 ' Lunghezza nel buffer del FirmwareRevision
    Case Else
    Err.Raise 10001, "Illegal HD Data type" ' Altre informazioni non disponibili (Evoluzione futura)
    End Select
    'taåo file nhêån daång öí cûáng cêìn àoåc thöng tin
    hdh = CreateFile("\\.\PhysicalDrive" & Drive, GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)
    'kiïím tra viïåc taåo file
    If hdh = 0 Then
    Err.Raise 10003, , "Error on CreateFile"
    End If

    'thiïët lêåp caác thöng söë input
    With bin
    .bDriveNumber = Drive
    .cBufferSize = 512
    With .irDriveRegs
    If (Drive And 1) Then
    .bDriveHeadReg = &HB0
    Else
    .bDriveHeadReg = &HA0
    End If
    .bCommandReg = &HEC
    .bSectorCountReg = 1
    .bSectorNumberReg = 1
    End With
    End With
    'goåi haâm DeviceIoControl àïí àoåc thöng tin
    DeviceIoControl hdh, DFP_RECEIVE_DRIVE_DATA, bin, Len(bin), bout, Len(bout), br, 0
    'copy thöng tin cêìn truy xuêët
    s = ""
    For ix = hddfr To hddfr + hddln - 1 Step 2
    If bout.bBuffer(ix + 1) = 0 Then Exit For
    s = s & Chr(bout.bBuffer(ix + 1))
    If bout.bBuffer(ix) = 0 Then Exit For
    s = s & Chr(bout.bBuffer(ix))
    Next ix
    GetHDInfo = Trim(s)
    'Àoáng handle disk
    CloseHandle hdh
    End Function
    /----------------------------------------------------------------------------
    Public Function Lay_Serial() As String
    On Error GoTo M01_MODAU_Err
    If Not IsNull(GetHDInfo(0, HD_SERIAL_NUMBER)) Then
    Lay_Serial = GetHDInfo(0, HD_SERIAL_NUMBER)
    'MsgBox GetHDInfo(0, HD_SERIAL_NUMBER)
    Else
    MsgBox "Khong doc duoc serial number!! ", vbCritical
    DoCmd.Quit
    End If

    M01_MODAU_Exit:
    Exit Function

    M01_MODAU_Err:
    MsgBox Error$
    Resume M01_MODAU_Exit
    End Function
    //sưu tầm
  • RE: Lấy về số seri CPU, ổ cứng MainBoard trong Access

    haquocquan > 10-11-10, 08:04 PM

    Tôi chạy sao không được nhỉ.

    - Lấy CPU: OK.
    - Lấy Main: chỉ có mỗi dấu , thôi.
    - Lấy HD báo lỗi Set Drv = fso.GetDrive(). error 450
    Noname xem giúp nhé.
  • RE: Lấy về số seri CPU, ổ cứng MainBoard trong Access

    Cafe Via He > 10-11-10, 09:55 PM

    (10-11-10, 08:04 PM)haquocquan Đã viết: Tôi chạy sao không được nhỉ.

    - Lấy CPU: OK.
    - Lấy Main: chỉ có mỗi dấu , thôi.
    - Lấy HD báo lỗi Set Drv = fso.GetDrive(). error 450
    Noname xem giúp nhé.

    Bạn Quân. Mình có fix lỗi error 450 rồi.
    Sửa lại đoạn code thế này

    Mã:
    Set Drv = fso.GetDrive(Environ("SystemDrive"))
  • RE: Lấy về số seri CPU, ổ cứng MainBoard trong Access

    haquocquan > 10-11-10, 10:03 PM

    Cám ơn CFVH. Mình đã lấy được CPU và HD rồi. Nhưng còn MAIN vẫn chưa được.
  • RE: Lấy về số seri CPU, ổ cứng MainBoard trong Access

    Cafe Via He > 11-11-10, 11:11 AM

    @ Bạn Quân: Thử lại đoạn code này, Cafe thêm mắm muối chút nè. Lấy Model và Bios của Main luôn

    Mã:
    Sub readseriemainboard()
    Dim objs As Object
    Dim obj As Object
    Dim WMI As Object
    Dim sAns As String
    Set WMI = GetObject("WinMgmts:")
    Set objs = WMI.InstancesOf("Win32_BaseBoard")
    For Each obj In objs

        sAns = sAns & "Serial Number: " & obj.SerialNumber & vbCrLf
        sAns = sAns & "Model: " & obj.product & vbCrLf

        If sAns < objs.Count Then sAns = sAns & ","

    Next
    'Set objs = Nothing
    Set objs = WMI.InstancesOf("Win32_BIOS")
      
    For Each obj In objs
        sAns = sAns & "BIOS: " & obj.Manufacturer & vbCrLf
    Next
    MsgBox sAns
    End Sub

  • RE: Lấy về số seri CPU, ổ cứng MainBoard trong Access

    Noname > 11-11-10, 11:21 AM

    Hé hé, tks cafe, đã cập nhật tất cả lên trang đầu cho mọi người dễ theo dõi!
  • RE: Lấy về số seri CPU, ổ cứng MainBoard trong Access

    Cafe Via He > 11-11-10, 11:25 AM

    --------->>>> Sửa lại đoạn code GETCPU của Noname chút. Lấy CPU name và Manufacturer
    Mã:
    Sub GetCPUID()
         'ta.o ðo^'i týo+.ng di.ch vu. WMI
         Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
         'ti`m các CPU ðang cha.y cu?a máy
         Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
         'la(.p hie^?n thi. ID cu?a tu+`ng CPU
         For Each objItem In colItems
         MsgBox "Processor Id: " & objItem.ProcessorId & vbCrLf & _
                "Proccess Name: " & objItem.Name & vbCrLf & _
                "Manufacturer: " & objItem.Manufacturer
         Next
    End Sub
  • RE: Lấy về số seri CPU, ổ cứng MainBoard trong Access

    Noname > 18-11-10, 10:44 AM

    Đã Chuyển từ sub thành function lấy về thông tin CPU, main, HDD. Có demo, xem ở trang 1.
    Chú ý: Một số main không cho lấy thông tin serial (các đời máy VAIO, Apple) nên hàm Lấy thông tin Main chỉ mang tính tham khảo!
  • RE: Lấy về số seri CPU, ổ cứng MainBoard trong Access

    vanrongvn > 08-01-11, 12:49 PM

    Cảm ơn Noname về access demo
    Từ nay mình có thể tạo bản quyền file.mdb giống như những phần mềm Thuế của Fash