26-08-13, 03:02 AM
السلام عليكم ورحمة الله
قمت بعمل كود للنسخة التجريبية والحمد لله الكود يعمل معى ولكن احببت ان اعرضة للمناقشة حتى يستفيد منه الاعضاء واستفاد من اخطائى فكل الناس تخطأ ولكن المهم ان استفيد من خطئى
وهذا الكود مع الشرح
ملحوظة :-
وانا اسف اذا كان الكود كبير وذلك للتأكد من الحماية ممن يقوم بسرقة العمل
فالبرنامج يتم العمل فية لأوقات كبيرة وتفكير كثير ولكن من يريد السرقة لا يفكر فى هذا المجهود الكبير
قمت بعمل كود للنسخة التجريبية والحمد لله الكود يعمل معى ولكن احببت ان اعرضة للمناقشة حتى يستفيد منه الاعضاء واستفاد من اخطائى فكل الناس تخطأ ولكن المهم ان استفيد من خطئى
وهذا الكود مع الشرح
كود :
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
وانا اسف اذا كان الكود كبير وذلك للتأكد من الحماية ممن يقوم بسرقة العمل
فالبرنامج يتم العمل فية لأوقات كبيرة وتفكير كثير ولكن من يريد السرقة لا يفكر فى هذا المجهود الكبير