تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] ارجو مساعدة
#8
(07-07-20, 04:59 AM)abdodz كتب : نعم اخي اعطيه اللبرنامج ويعطيني رقم الهارد لكن اين اضعة في برنامجي هنا المشكل اين الكود الدي اضع فيه رقم الهارد بعد الحصول عليه

يا اخي اذا اعطاك المستخدم رقم الهارد
فيجب عليك اولا اضافة الكود التالي داخل ملف من نوع Module في برنامجك

كود :
Imports System.Security
Imports System.Runtime.InteropServices
Imports Microsoft.Win32.SafeHandles
Imports System.ComponentModel
Imports System.Text

Module SerialNumber

    <SuppressUnmanagedCodeSecurity()> _
    Private Class NativeMethods
        <DllImport("kernel32", SetLastError:=True)> _
        Public Shared Function CreateFile( _
       ByVal FileName As String, _
       ByVal DesiredAccess As Integer, _
       ByVal ShareMode As Integer, _
       ByVal SecurityAttributes As IntPtr, _
       ByVal CreationDisposition As Integer, _
       ByVal FlagsAndAttributes As Integer, _
       ByVal hTemplateFile As IntPtr) As SafeFileHandle
        End Function

        <DllImport("kernel32.dll", SetLastError:=True)> _
        Friend Shared Function DeviceIoControl( _
          ByVal deviceHandle As SafeFileHandle, _
          ByVal controlCode As Integer, _
          ByRef inBuffer As ATA_PASS_THROUGH_EX_WITH_BUFFERS, _
          ByVal inBufferSize As Integer, _
          ByRef outBuffer As ATA_PASS_THROUGH_EX_WITH_BUFFERS, _
          ByVal outBufferSize As Integer, _
          ByRef bytesReturned As Integer, _
          ByVal overlapped1 As IntPtr) As Boolean
        End Function

    End Class

    <StructLayout(LayoutKind.Sequential)> _
    Private Structure ATA_PASS_THROUGH_EX
        Public Length As Short
        Public AtaFlags As Short
        Public PathId As Byte
        Public TargetId As Byte
        Public Lun As Byte
        Public ReservedAsUchar As Byte
        Public DataTransferLength As Integer
        Public TimeOutValue As Integer
        Public ReservedAsUlong As Integer
        Public DataBufferOffset As IntPtr
        <MarshalAs(UnmanagedType.ByValArray, sizeconst:=8)> _
        Public PreviousTaskFile() As Byte
        <MarshalAs(UnmanagedType.ByValArray, sizeconst:=8)> _
        Public CurrentTaskFile() As Byte
    End Structure

    <StructLayout(LayoutKind.Sequential)> _
    Private Structure ATA_PASS_THROUGH_EX_WITH_BUFFERS
        Public Apt As ATA_PASS_THROUGH_EX
        <MarshalAs(UnmanagedType.ByValArray, sizeconst:=512)> _
        Public Data() As Byte
    End Structure

    Public Enum HDINFO
        HD_MODEL_NUMBER = 0
        HD_SERIAL_NUMBER = 1
        HD_FIRMWARE_REVISION = 2
    End Enum

    Public Function HDDInfo(ByVal InfoType As HDINFO) As String
        Dim letter As Char = "c"
        Const GenericRead As Integer = &H80000000
        Const GenericWrite As Integer = &H40000000
        Const FileShareRead As Integer = 1
        Const FileShareWrite As Integer = 2
        Const OpenExisting As Integer = 3
        Dim drivePath As String = String.Concat("\\.\" & letter & ":")
        Using driveHandle As SafeFileHandle = NativeMethods.CreateFile( _
         drivePath, _
         GenericRead Or GenericWrite, _
         FileShareRead Or FileShareWrite, _
         IntPtr.Zero, _
         OpenExisting, _
         0, _
         IntPtr.Zero)
            If driveHandle.IsInvalid Then
                Return "CreateFile ERROR: " & (New Win32Exception).Message
            End If
            Dim apex As New ATA_PASS_THROUGH_EX
            apex.Length = Marshal.SizeOf(apex)

            ' ATA_FLAGS_DATA_IN
            apex.AtaFlags = 2

            ' The command returns a 512 byte package of info.
            apex.DataTransferLength = 512

            apex.TimeOutValue = 10 ' 10 second timeout.
            apex.DataBufferOffset = Marshal.OffsetOf( _
                      GetType(ATA_PASS_THROUGH_EX_WITH_BUFFERS), "Data")
            ' This contains the command we are requesting.
            apex.CurrentTaskFile = New Byte(7) {}
            'the command "IDENTIFY DEVICE"
            apex.CurrentTaskFile(6) = &HEC
            Dim apexb As New ATA_PASS_THROUGH_EX_WITH_BUFFERS
            apexb.Apt = apex
            Dim inBufferSize As Integer = Marshal.SizeOf( _
                     GetType(ATA_PASS_THROUGH_EX_WITH_BUFFERS))
            Dim bytesReturned As Integer
            Const IOCTL_ATA_PASS_THROUGH As Integer = &H4D02C
            Dim result As Boolean = NativeMethods.DeviceIoControl( _
                                    driveHandle, IOCTL_ATA_PASS_THROUGH, _
                                    apexb, inBufferSize, apexb, inBufferSize, _
                                    bytesReturned, IntPtr.Zero)
            If result = False Then
                Return "DeviceIOControl ERROR: " & (New Win32Exception).Message
            End If

            Select Case InfoType
                Case HDINFO.HD_SERIAL_NUMBER
                    Return GetString(apexb.Data, 20, 20)
                Case HDINFO.HD_FIRMWARE_REVISION
                    Return GetString(apexb.Data, 46, 8)
                Case HDINFO.HD_MODEL_NUMBER
                    Return GetString(apexb.Data, 54, 40)
                Case Else
                    Return Nothing
            End Select
        End Using
    End Function

    Private Function GetString(ByVal bytes() As Byte, _
                               ByVal offset As Integer, _
                               ByVal length As Integer) As String
        ' The strings are slightly weird - endianness?
        ' If you use ASCII.GetBytes Then Each character
        ' pair is reversed.
        Dim sb As New StringBuilder()
        For i As Integer = offset To offset + length - 1 Step 2
            sb.Append(Chr(bytes(i + 1)))
            sb.Append(Chr(bytes(i)))
        Next
        Return RTrim(LTrim(sb.ToString))
    End Function

End Module


ثم استخدم الكود التالي مع ملاحظة انك يجب ان تستبدل القيمة التالية     Dim SN As String = "XX-XXXXXXXX" برقم الهارد الذي اعطاك العميل


ثم في حدث الفورم لود تقوم بالتحقق اذا كان الرقم المحفوظ في المتغير SN يطابق رقم الهارد للجهاز الذي يعمل عليه برنامجك

كود :
Public Class Form1


    Dim SN As String = "XX-XXXXXXXX"
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'اولا يجب استخراج رقم الهارد لكمبيوتر العميل
        'SN  ثم مقارنته مع الرقم الذي اعطاك اياه العميل والمحفوظ في المتغير

        If HDDInfo(HDINFO.HD_SERIAL_NUMBER) = SN Then
            ' طابق رقم هارد العميل الرقم المحفوظ
            'لذا يمكن للعميل متابعة العمل على البرنامج

        Else
            MsgBox("غير مسموح لك بتشغيل البرنامج")
        End If
    End Sub
End Class

الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , essawq , ابو روضة , ابو روضة


الردود في هذا الموضوع
ارجو مساعدة - بواسطة abdodz - 02-07-20, 01:27 AM
RE: ارجو مساعدة - بواسطة kiki - 02-07-20, 01:38 AM
RE: ارجو مساعدة - بواسطة abdodz - 03-07-20, 01:28 PM
RE: ارجو مساعدة - بواسطة معاند الحظ - 03-07-20, 04:07 PM
RE: ارجو مساعدة - بواسطة abdodz - 05-07-20, 12:24 AM
RE: ارجو مساعدة - بواسطة abdodz - 07-07-20, 04:59 AM
RE: ارجو مساعدة - بواسطة معاند الحظ - 07-07-20, 05:46 AM
RE: ارجو مساعدة - بواسطة ابراهيم ايبو - 07-07-20, 05:17 AM
RE: ارجو مساعدة - بواسطة abdodz - 08-07-20, 02:10 AM
RE: ارجو مساعدة - بواسطة معاند الحظ - 08-07-20, 07:14 AM
RE: ارجو مساعدة - بواسطة abdodz - 09-07-20, 01:22 AM
RE: ارجو مساعدة - بواسطة معاند الحظ - 09-07-20, 02:18 AM
RE: ارجو مساعدة - بواسطة abdodz - 09-07-20, 02:29 AM
RE: ارجو مساعدة - بواسطة معاند الحظ - 09-07-20, 02:48 AM
RE: ارجو مساعدة - بواسطة abdodz - 09-07-20, 03:02 AM
RE: ارجو مساعدة - بواسطة معاند الحظ - 09-07-20, 03:05 AM
RE: ارجو مساعدة - بواسطة abdodz - 09-07-20, 03:10 AM
RE: ارجو مساعدة - بواسطة معاند الحظ - 09-07-20, 03:12 AM
RE: ارجو مساعدة - بواسطة abdodz - 09-07-20, 03:12 AM
RE: ارجو مساعدة - بواسطة abdodz - 10-07-20, 02:01 AM
RE: ارجو مساعدة - بواسطة essawq - 10-07-20, 04:19 AM
RE: ارجو مساعدة - بواسطة essawq - 10-07-20, 04:00 PM
RE: ارجو مساعدة - بواسطة abdodz - 10-07-20, 04:18 PM
RE: ارجو مساعدة - بواسطة essawq - 10-07-20, 04:23 PM
RE: ارجو مساعدة - بواسطة abdodz - 10-07-20, 04:26 PM
RE: ارجو مساعدة - بواسطة essawq - 10-07-20, 04:31 PM
RE: ارجو مساعدة - بواسطة abdodz - 10-07-20, 04:38 PM
RE: ارجو مساعدة - بواسطة essawq - 10-07-20, 04:42 PM
RE: ارجو مساعدة - بواسطة abdodz - 10-07-20, 04:47 PM
RE: ارجو مساعدة - بواسطة essawq - 10-07-20, 04:51 PM
RE: ارجو مساعدة - بواسطة abdodz - 10-07-20, 05:07 PM
RE: ارجو مساعدة - بواسطة essawq - 10-07-20, 05:08 PM
RE: ارجو مساعدة - بواسطة abdodz - 11-07-20, 04:43 PM
RE: ارجو مساعدة - بواسطة essawq - 11-07-20, 04:57 PM


التنقل السريع :


يقوم بقرائة الموضوع: