من الأخ المسلم (أسامه عبد الصادق)
لدى إن شاء الله طريقة جديدة لحماية برنامجك من إستخدام غير العملاء أو المصرح لهم بالإستخدام :
وهى معتمدة على سيريال نمبير الإسطوانة فلكل إسطوانة سيريال نمبير ولكن يتغير بعد نسخ الإسطوانة فى كل مرة نسخ ويمكن التغلب على هذه المشكلة بقفل
الإسطوانة من النسخ .
ولكن ممكن للمستخدم أن ينزل البرنامج على الجهاز ويشغل البرنامج من على الجهاز مباشرة إن كان البرنامج لا يعمل إلا على إسطوانة واحد وهى الإسطوانة
الأصلية ــ التى نسختها أنت كمبرمج ــ ولحل هذه المشكلة نستخدم الكود الذى يمنع تشغيل البرنامج إلى من خلال إسطوانة فقط .
وبالتالى المستخدم لا يستطيع تشغيل البرنامج إلا من خلال الإسطوانة الأصلية التى نسخها المبرمج (أو) من على الجهاز نفسه وهذا أيضا غير ممكن .
وأظن أن هذه الطريقة تكون ذا جدوى كبيرة مع ملفات الــ EXE بدون مرفقات مثل قاعدة بيانات ..... إلخ
إلا إذا طور أحد الأعضاء هذه الطريقة وإليكم ...
الأكواد :
أولا : كود معرفة سيريال نمبير الإسطوانة
اكتب فى Module الكود التالى :
Declare Function GetVolumeInformation Lib "kernel32.dll" Alias _ "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal _ lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, _ lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _ lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal _ nFileSystemNameSize As Long) As Long
ثم اكتب فى التعريفات العامة للفورمة الأولى للبرنامج كود التالى :
Function GetSerialNumber(strDrive As String) As Long Dim SerialNum As Long Dim res As Long Dim Temp1 As String Dim Temp2 As String Temp1 = String$(255, Chr$(0)) Temp2 = String$(255, Chr$(0)) res = GetVolumeInformation(strDrive, Temp1, _ Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2)) GetSerialNumber = SerialNum End Function
ثم اكتب الكود التالى فى الفورم لوود للفورمة الأولى للبرنامج
Private Sub Form_Load()
Dim S As Long
S = GetSerialNumber("h:\")
Text1.Text = S
If Not Val(Text1.Text) = "رقم سيريال الإسطوانة بعد نسخ البرنامج عليها" Then
MsgBox "عفوا البرنامج لن يعمل"
End
End If
End Subوالكود الذى يمنع البرنامج من العمل إلا من على قرص مدمج فقط و لاعمل من على الهارد هو
اكتب فى التعريفات العامة الكود التالى
Private Declare Function GetDriveType Lib "kernel32.dll" Alias "GetDriveTypeA" _ (ByVal nDrive As String) As Long
واكتب فى الفورم لوود للفورمة الأولى للبرنامج الكود التالى
Dim driveType As Long driveType = GetDriveType(Mid(App.Path, 1, 3)) If driveType <> 5 Then البرنامج سيقف إذا لم يكن يعمل من على قرص مدمج End End If
وطبعا سيأتى سؤال تلقائى كيف أعرف سيريال نمبير الإسطوانة بعد نسخ البرنامج عليها وأضعه فى البرنامج والبرنامج أصلا موجود على الإسطوانة :
أنت ممكن تجعل البرنامج ينسخ أول سيريال نمبير قرأه وهو بذلك لا يعمل إلا على إسطوانة واحده .
والسورس كود سوف أرفقه قريبا بعد الإنتهاء منه
وأرجو منكم الردود .....
مع تحيات / الأخ المسلم (أسامه عبد الصادق)

