إقتباس : Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'اولا يتم عمل ملف فى نسخة الويندوز ويتم قراءة هذا الكود بهذة الطريقة
Dim KeyName As String = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
Dim valueName As String = "manduh"
Dim inwin1 As String = "in"
Dim Value As Object = inwin
inwin = Registry.GetValue(KeyName, valueName, Value.ToString())
'اذا لم يكن هناك ملف فىالنسخة يتم الاتى
If inwin = "" Then
'هنا تم عمل تاريخ نهاية النسخة بعد 15يوما
Dim MpTryApi As String = Now.AddDays(15D)
'تم عمل جدول فى قاعدة البيانات يتم تخزين فية التاريخ
Dim datess As String
If Not DataAccess.con.State = ConnectionState.Open Then
DataAccess.con.Open()
End If
Dim da1 As New OleDbDataAdapter("SELECT * from testing_pro where (id=1) ", DataAccess.con)
Dim dt1 As New DataTable
da1.Fill(dt1)
datess = dt1.Rows(0).Item("datess").ToString
DataAccess.con.Close()
'تم استعراض التاريخ الموجود فى قاعدة البيانات
'وعند عمل قادة البيانات يتم عمل اول صف ويشمل على خانة التاريخ خالية
'فى حالة ان التاريخ يكون فارغ يتم الاتى
If datess = "" Then
'فى حالة انه فارغ يتم اضافة تاريخ اليوم وهذا التاريخ عندما يتم تشغيل البرنامج الاول مرة
Dim idtest As String = "1"
If Not DataAccess.con.State = ConnectionState.Open Then
DataAccess.con.Open()
End If
DataAccess.cmd.Connection = DataAccess.con
DataAccess.cmd.CommandText = "UPDATE testing_pro SET datess='" & datenaw & "' WHERE id=" & idtest
DataAccess.cmd.ExecuteNonQuery()
DataAccess.con.Close()
'فى حالة ان التاريخ موجود يكون استخدم البرنام من قبل
'يتم اضافة سطر جديد
ElseIf datess >= Date.Today.ToString("yyyy/MM/dd") Then
If Not DataAccess.con.State = ConnectionState.Open Then
DataAccess.con.Open()
End If
DataAccess.cmd.Connection = DataAccess.con
DataAccess.cmd.CommandText = "INSERT INTO testing_pro( datess)" & _
" VALUES ( '" & datenaw & "')"
DataAccess.cmd.ExecuteNonQuery()
DataAccess.con.Close()
'بعد ذلك يتم احتساب عدد الايام المستخدمة للبرنامج عن طريق حساب عدد الايام من التواريخ الموجود فى قاعدة البيانات
Dim dateend As DateTime
If Not DataAccess.con.State = ConnectionState.Open Then
DataAccess.con.Open()
End If
Dim da2 As New OleDbDataAdapter("SELECT * from testing_pro order by id ", DataAccess.con)
Dim dt2 As New DataTable
da2.Fill(dt2)
dateend = dt2.Rows(0).Item("datess").ToString
DataAccess.con.Close()
Dim danew As Integer
danew = DateDiff(DateInterval.Day, CDate(dateend), CDate(datenaw))
'فى حالة ان عدد الايام 15 ايام يتم الاتى
If danew = "15" Then
'ويتم هنا اضافة قيمة فى نسخة الويندوز
Value = inwin1
Registry.SetValue(KeyName, valueName, Value)
MsgBox("انتهت الفترة التجريبية للبرنامج")
Me.Close()
Return
'فى حالة ان عدد الايام أكبر 16 ايام يتم الاتى
ElseIf danew > "16" Then
'ويتم هنا اضافة قيمة فى نسخة الويندوز
Value = inwin1
Registry.SetValue(KeyName, valueName, Value)
MsgBox("انتهت الفترة التجريبية للبرنامج")
Me.Close()
Return
' عندما يقوم العميل بتغيير التاريخ الى اقل من التاريخ الاول يتم الاتى
ElseIf danew < "0" Then
'ويتم هنا اضافة قيمة فى نسخة الويندوز
Value = inwin1
Registry.SetValue(KeyName, valueName, Value)
MsgBox("انتهت الفترة التجريبية للبرنامج")
Me.Close()
Return
ElseIf danew < "15" Then
'الان يجد البرنامج ان عدد الايام اقل من 15 يوما
'واجهتى مشكلة هنا انه عندما يقوم العميل باعادة تغير التاريخ قبل تشغيل البرنامج
'يستطيع تشغيل البرنامج اكثر من 15 يوما
'تم هنا الحماية ايضا عن طريق عدد مرات تشغيل البرنامج
'من خلال احتساب عدد مراة العمل الافتراضية للبرنامج
Dim countdate As Integer = "0"
If Not DataAccess.con.State = ConnectionState.Open Then
DataAccess.con.Open()
End If
Dim da3 As New OleDbDataAdapter("SELECT COUNT(datess) AS datess FROM testing_pro ", DataAccess.con)
Dim dt3 As New DataTable
da3.Fill(dt3)
countdate = dt3.Rows(0).Item("datess").ToString
DataAccess.con.Close()
'تم احتساب مجموع عمليات الدخول على البرنامج من خلال جمع عدد التاوريخ الموجود فى قاعدة البيانات
'وليكون عدد الدخول على البرنامج 3مرات فى اليوم يكون المجموع مرات الدخول اسناء الفترة التجريبية 45مرة
If countdate = "45" Then
Value = inwin1
Registry.SetValue(KeyName, valueName, Value)
MsgBox("انتهت الفترة التجريبية للبرنامج")
Me.Close()
Application.Exit()
ElseIf countdate < "30" Then
MsgBox(countdate)
Form1.Show()
Me.Hide()
End If
End If
End If
lodeng.Close()
ElseIf inwin = "Micros" Then
MsgBox(" عفوا تم استخدام النسخة التجريبية من قبل")
Application.Exit()
إقتباس : Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'اولا يتم عمل ملف فى نسخة الويندوز ويتم قراءة هذا الكود بهذة الطريقة
Dim KeyName As String = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
Dim valueName As String = "manduh"
Dim inwin1 As String = "in"
Dim Value As Object = inwin
inwin = Registry.GetValue(KeyName, valueName, Value.ToString())
'اذا لم يكن هناك ملف فىالنسخة يتم الاتى
If inwin = "" Then
'هنا تم عمل تاريخ نهاية النسخة بعد 15يوما
Dim MpTryApi As String = Now.AddDays(15D)
'تم عمل جدول فى قاعدة البيانات يتم تخزين فية التاريخ
Dim datess As String
If Not DataAccess.con.State = ConnectionState.Open Then
DataAccess.con.Open()
End If
Dim da1 As New OleDbDataAdapter("SELECT * from testing_pro where (id=1) ", DataAccess.con)
Dim dt1 As New DataTable
da1.Fill(dt1)
datess = dt1.Rows(0).Item("datess").ToString
DataAccess.con.Close()
'تم استعراض التاريخ الموجود فى قاعدة البيانات
'وعند عمل قادة البيانات يتم عمل اول صف ويشمل على خانة التاريخ خالية
'فى حالة ان التاريخ يكون فارغ يتم الاتى
If datess = "" Then
'فى حالة انه فارغ يتم اضافة تاريخ اليوم وهذا التاريخ عندما يتم تشغيل البرنامج الاول مرة
Dim idtest As String = "1"
If Not DataAccess.con.State = ConnectionState.Open Then
DataAccess.con.Open()
End If
DataAccess.cmd.Connection = DataAccess.con
DataAccess.cmd.CommandText = "UPDATE testing_pro SET datess='" & datenaw & "' WHERE id=" & idtest
DataAccess.cmd.ExecuteNonQuery()
DataAccess.con.Close()
'فى حالة ان التاريخ موجود يكون استخدم البرنام من قبل
'يتم اضافة سطر جديد
ElseIf datess >= Date.Today.ToString("yyyy/MM/dd") Then
If Not DataAccess.con.State = ConnectionState.Open Then
DataAccess.con.Open()
End If
DataAccess.cmd.Connection = DataAccess.con
DataAccess.cmd.CommandText = "INSERT INTO testing_pro( datess)" & _
" VALUES ( '" & datenaw & "')"
DataAccess.cmd.ExecuteNonQuery()
DataAccess.con.Close()
'بعد ذلك يتم احتساب عدد الايام المستخدمة للبرنامج عن طريق حساب عدد الايام من التواريخ الموجود فى قاعدة البيانات
Dim dateend As DateTime
If Not DataAccess.con.State = ConnectionState.Open Then
DataAccess.con.Open()
End If
Dim da2 As New OleDbDataAdapter("SELECT * from testing_pro order by id ", DataAccess.con)
Dim dt2 As New DataTable
da2.Fill(dt2)
dateend = dt2.Rows(0).Item("datess").ToString
DataAccess.con.Close()
Dim danew As Integer
danew = DateDiff(DateInterval.Day, CDate(dateend), CDate(datenaw))
'فى حالة ان عدد الايام 15 ايام يتم الاتى
If danew = "15" Then
'ويتم هنا اضافة قيمة فى نسخة الويندوز
Value = inwin1
Registry.SetValue(KeyName, valueName, Value)
MsgBox("انتهت الفترة التجريبية للبرنامج")
Me.Close()
Return
'فى حالة ان عدد الايام أكبر 16 ايام يتم الاتى
ElseIf danew > "16" Then
'ويتم هنا اضافة قيمة فى نسخة الويندوز
Value = inwin1
Registry.SetValue(KeyName, valueName, Value)
MsgBox("انتهت الفترة التجريبية للبرنامج")
Me.Close()
Return
' عندما يقوم العميل بتغيير التاريخ الى اقل من التاريخ الاول يتم الاتى
ElseIf danew < "0" Then
'ويتم هنا اضافة قيمة فى نسخة الويندوز
Value = inwin1
Registry.SetValue(KeyName, valueName, Value)
MsgBox("انتهت الفترة التجريبية للبرنامج")
Me.Close()
Return
ElseIf danew < "15" Then
'الان يجد البرنامج ان عدد الايام اقل من 15 يوما
'واجهتى مشكلة هنا انه عندما يقوم العميل باعادة تغير التاريخ قبل تشغيل البرنامج
'يستطيع تشغيل البرنامج اكثر من 15 يوما
'تم هنا الحماية ايضا عن طريق عدد مرات تشغيل البرنامج
'من خلال احتساب عدد مراة العمل الافتراضية للبرنامج
Dim countdate As Integer = "0"
If Not DataAccess.con.State = ConnectionState.Open Then
DataAccess.con.Open()
End If
Dim da3 As New OleDbDataAdapter("SELECT COUNT(datess) AS datess FROM testing_pro ", DataAccess.con)
Dim dt3 As New DataTable
da3.Fill(dt3)
countdate = dt3.Rows(0).Item("datess").ToString
DataAccess.con.Close()
'تم احتساب مجموع عمليات الدخول على البرنامج من خلال جمع عدد التاوريخ الموجود فى قاعدة البيانات
'وليكون عدد الدخول على البرنامج 3مرات فى اليوم يكون المجموع مرات الدخول اسناء الفترة التجريبية 45مرة
If countdate = "45" Then
Value = inwin1
Registry.SetValue(KeyName, valueName, Value)
MsgBox("انتهت الفترة التجريبية للبرنامج")
Me.Close()
Application.Exit()
ElseIf countdate < "30" Then
MsgBox(countdate)
Form1.Show()
Me.Hide()
End If
End If
End If
lodeng.Close()
ElseIf inwin = "Micros" Then
MsgBox(" عفوا تم استخدام النسخة التجريبية من قبل")
Application.Exit()
End If
End Sub
ملحوظة :-
بسم الله الرحمان الرحيم
الله يزيدك علم انشاء الله
بس حاي اسال الحين هذا الكود احطه في الفورم لود ام ان احطه في مكان ثاني
وثاني شي هل انسخ الكود كما هو او اشيل الكلام العربي الي فيه ولو تقدر اخوي صمم ليه على 7 ايام وعطني الكود جاهز اذا ما عليك امر وشكرا
Dim T As Boolean
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
T = False
Dim RegX As Microsoft.Win32.RegistryKey
RegX = Microsoft.Win32.Registry.CurrentUser
Dim S As String() = RegX.GetSubKeyNames
For Each A As String In S
If A = "smp3" Then
T = True
End If
Next
If T = True Then RegX = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("smp3", True)
Dim x As Integer = RegX.GetValue("val")
x = x + 1
RegX.SetValue("val", x)
If x = 5 Or x > 5 Then
MsgBox("لقد انتهت مدتك لاستخدام البرنامج , يرجى الاتصال بفريق الدعم لمعرفة كيفية الشراء")
Application.Exit()
Else
RegX = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("smp3")
RegX.SetValue("val", 1)
End If
regKey = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\MyAppvBsQ", "TRI", Nothing)
If (regKey Is Nothing) Then
Dim MpTryApi As String = Now.AddSeconds(30S)
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\MyAppvBsQ", "TRI", MpTryApi)
ElseIf regKey = Date.Now Then
MsgBox("انتهت الفترة التجريبية للبرنامج")
Me.Close()
End If
لو تلاحض اني غيرات AddDays الى AddSeconds وحطيت بدال m حطيت s والكود طلع بدون اخطاء لاكن مافي مفعول وتاكدت من المكتبه ولا فاد وش الحل ضروري
أنصحك أن تبتعد عن استخدام الريجستري.....تماما
لأنه و غالبا .....هذا هو اول مكان يبحث فيه الهاكرز
هناك فكرة أفضل لحماية البرامج
و هي أن تستخدم ملف تحفظ فيه البيانات و هذا ما يفعله الجميع الأن
و النقطة الهامة هي :
أنك تنسخ من هذا الملف اكتر من نسخة في اكتر من مكان علي جهاز العميل
و هذه النسخ ستعمل بمثابة Shadow للنسخة الاصلية من الملف
و بالتالي تستطيع أن تتأكد أكثر من مرة أن برنامجك تم تفعيله بشكل جيد.
أو أن البرنامج صلاحيته قد انتهت و بالتالي تقوم بإغلاق البرنامج الخاص بك
أما بخصوص الصلاحية المؤقتة عليك أن تسترجع الوقت او التاريخ الذي تم فيه إنشاء Directory الذي سيكون فيه برنامجك
ثم تضيف له وقت معين أنت تحدده
فإن كان الوقت الاجمالي رقم معين يمكن حينها ان تفعل ما تشاء
إما تغلق البرنامج أو ترسل رسالة للمستخدم أو ما تراه مناسبا لك في حينها
regKey = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\MyAppvBsQ", "TRI", Nothing)
If (regKey Is Nothing) Then
Dim MpTryApi As String = Now.AddSeconds(30S)
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\MyAppvBsQ", "TRI", MpTryApi)
ElseIf regKey = Date.Now Then
MsgBox("انتهت الفترة التجريبية للبرنامج")
Me.Close()
End If
لو تلاحض اني غيرات AddDays الى AddSeconds وحطيت بدال m حطيت s والكود طلع بدون اخطاء لاكن مافي مفعول وتاكدت من المكتبه ولا فاد وش الحل ضروري
خطأ بسيط في المقارنة فقط هنا
E
إقتباس :lseIf regKey = Date.Now Then
بدله الى
إقتباس : ElseIf regKey > Now Then
وهو مقارنة التاريخ المسجل للبرنامج إذا وجده اكبر من تاريخ اليوم سوف ينهي عمل البرنامج