منتدى الكتب و المقالات

 اسم العضو:zahrah  الأحد,13/شعبان/1428 هـ,08:20 صباحاً
[SIZE=4][COLOR=blue][ALIGN=center] الشرح الكامل التفصيلي المصور لمعرفة نسخة الأكسيس وتخفيض الأمان برمجيا[/ALIGN][/COLOR][/SIZE] اخواني الكرام السلام عليكم ورحمة الله وبركاته سنقوم بشرح آلية عمل برنامج تخفيض مستوى الأمان في جميع نسخ برنامج الأكسيس برمجيا وبدون اي ملفات اضافية وسيكون ذلك عن طريق الأكواد فقط . نبذه عن نسخ برنامج الأكسيس كلنا يعلم ان اي نسخة من برنامج الأكسيس لها رقم خاص يميزها عن غيرها من النسخ فمثلا : نسخة الأكسيس 97 نجد انها تأخذ الرقم 8.0 نسخة الأكسيس 2000 نجد انها تأخذ الرقم 9.0 نسخة الأكسيس 2002 وهي نسخة الـ XP نجد انها تأخذ الرقم 10.0 نسخة الأكسيس 2003 نجد انها تأخذ الرقم 11.0 نسخة الأكسيس 2007 نجد انها تأخذ الرقم 12.0 كيف تتعرف على نسخ الأكسيس الموجوده لديك كل ما عليك هو اتباع هذه الطريقة : 1. من الويندوز اضغط على ابدأ 2. اختر تشغيل واكتب فيه RegEdit [IMG]http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-15367-1188131398.gif[/IMG] اتبع المسار التالي حتى تصل الى المجلد Office [CODE]HKEY_CURRENT_USER\Software\Microsoft\Office[/CODE] وستجد جميع ارقام نسخ الأكسيس المثبته على جهازك [IMG]http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-15367-1188131452.gif[/IMG] بعد ان عرفنا ارقام نسخ الأكسيس والمسار الخاص بها نريد ان يقوم الكود برمجيا بمعرفة النسخة التي تم فتحها . لهذا سوف نستخدم هذه الوظيفة سواء في وحدة نمطية جديده او توضع مباشرة في الـ VBA ( محرر الفيجول بيسك للتطبيقات ) للنموذج ومن ثم استدعاؤها . كود معرفة نسخة الأكسيس المستخدمة حاليا [CODE]Function GetVersion() As String GetVersion = SysCmd(acSysCmdAccessVer) End Function[/CODE] تخفيض أمان برنامج الأكسيس الغرض كلنا يقوم بتصميم برامج سواء كانت خاصة او لأغراض ربحيه ولكن احيانا يواجه المستخدمين الذين ليس لهم دراية او معرفة مسبقه بطريقة تخفيض امان الأكسيس ولهذا تظهر لهم بين الحين والآخر الرسائل المزعجة الخاصة بتحذيرات امان الأكسيس لهذا سنقوم بكتابة وظيفة مهمتها تخفيض أمان برنامج الأكسيس الذي يعمل وقت فتح البرنامج وتتم هذه العملية لمرة واحده فقط ومن بعدها سوف يستمر برنامج الأكسيس منخفضا امانه مهما فتحت من قواعد بيانات . الطريقة العادية لتخفيض أمان برنامج الأكسيس لتخفيض أمان برنامج الأكسيس من النسخة 97 وحتى النسخة 2003 فهو بإتباع هذه الطريقة : 1. الذهاب الى اشرطة قوائم الأكسيس 2. ثم اختيار ادوات 3. ثم اختيار ماكرو 4. ثم اختيار الأمان [IMG]http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-15367-1188131581.gif[/IMG] ومن ثم وضع الإشارة على الإختيار الأخير وهو " منخفض " ثم موافق [IMG]http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-15367-1188131632.gif[/IMG] اما في برنامج الأكسيس 2007 فيتم خفض الأمان يدويا بهذه الطريقة 1. الذهاب للقائمة الرئيسية واختيار خيارات الأكسيس . [IMG]http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-15367-1188131678.gif[/IMG] 2. من الخيارات اختر مركز التوثيق ثم اختر اعدادات مركز التوثيق . [IMG]http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-15367-1188131716.gif[/IMG] 3. اختر اعدادات الماكرو ثم ضع الأختيار على اخر اختيار وهو " تمكين كافة وحدات الماكرو " [IMG]http://www.arabteam2000-forum.com/uploads/monthly_08_2007/post-15367-1188131757.gif[/IMG] ولكن ليس من المعقول ان نقوم بهذه الخطوات في كل مره او ان نقوم بإبلاغ المستخدمين لهذه الخطوات عندما تظهر لديهم تحذير الأمان لهذا نريد ان يتم ذلك برمجيا بدون تدخل المستخدم . لهذا يجب ان نحصل اولا على المفاتيح الخاصة بهذه العملية من خلال الريجستري الخاص بالويندوز . في الخطوة السابقة لتخفيض أمان الأكسيس يدويا قمنا بوضعه على منخفض لهذا دعونا نرى كيف تم عمل ذلك في الريجستري . لو قمنا بفتح الريجستري وتتبع المسار التالي الخاص بالأكسيس فسنجده بهذه الطريقة : جميع النسخ من 97 وحتى 2003 تأخذ هذا المسار مع اختلاف الرقم في نسخة الأكسيس وهي هنا رقم 11.0 وتعني نسخة اكسيس 2003 للمستخدم هو: [CODE][HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Access\Security][/CODE] وللنظام هو : [CODE][HKEY_LOCAL_MACHINE\Software\Microsoft\Office\11.0\Access\Security][/CODE] وسنجد ان المفتاح الفرعي لها جميعا بعد تخفيض الأمان يدويا هو [CODE]"Level"=dword:00000001[/CODE] اما في الأكسيس 2007 فالوضع مختلف قليلا [CODE][HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\Access\Security][/CODE] حيث يكون المفتاح الفرعي له كالتالي فقط [CODE]"VBAWarnings"=dword:00000001[/CODE] وظيفة SaveRegLong حفظ قيمة في الريجستري عبر مفتاح فرعي من نوع Dword [CODE]Option Compare Database Option Explicit Enum RegHive HKEY_CLASSES_ROOT = &H80000000 HK_CR = &H80000000 HKEY_CURRENT_USER = &H80000001 HK_CU = &H80000001 HKEY_LOCAL_MACHINE = &H80000002 HK_LM = &H80000002 HKEY_USERS = &H80000003 HK_US = &H80000003 HKEY_CURRENT_CONFIG = &H80000005 HK_CC = &H80000005 HKEY_DYN_DATA = &H80000006 HK_DD = &H80000006 End Enum Enum RegType REG_SZ = 1 REG_BINARY = 3 REG_DWORD = 4 End Enum Public Const ERROR_SUCCESS = 0& Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Public Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long Public Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long Public Function CreateRegKey(hKey As RegHive, strPath As String) Dim hCurKey As Long Dim lRegResult As Long lRegResult = RegCreateKey(hKey, strPath, hCurKey) If lRegResult <> ERROR_SUCCESS Then 'there is a problem End If lRegResult = RegCloseKey(hCurKey) End Function Public Function SaveRegLong(ByVal hKey As RegHive, ByVal strPath As String, ByVal strValue As String, ByVal lData As Long) Dim hCurKey As Long Dim lRegResult As Long lRegResult = RegCreateKey(hKey, strPath, hCurKey) lRegResult = RegSetValueEx(hCurKey, strValue, 0&, REG_DWORD, lData, 4) If lRegResult <> ERROR_SUCCESS Then End If lRegResult = RegCloseKey(hCurKey) End Function[/CODE] سنقوم الآن بإستدعاء هذه الوظيفة من خلال الكود الموجود في حدث عند عداد الوقت لنموذج الشاشة الإفتتاحية للبرنامج وسيكون لجميع نسخ الأكسيس بهذه الطريقة [CODE]Private Sub Form_Timer() Dim Version As String Dim strVer As String Dim strValueM As String Dim strValueU As String Version = GetVersion() If Version = "8.0" Then strValueM = SaveRegLong(HKEY_LOCAL_MACHINE, "Software\Microsoft\Office\8.0\Access\Security", "Level", 1) strValueU = SaveRegLong(HKEY_CURRENT_USER, "Software\Microsoft\Office\8.0\Access\Security", "Level", 1) ElseIf Version = "9.0" Then strValueM = SaveRegLong(HKEY_LOCAL_MACHINE, "Software\Microsoft\Office\9.0\Access\Security", "Level", 1) strValueU = SaveRegLong(HKEY_CURRENT_USER, "Software\Microsoft\Office\9.0\Access\Security", "Level", 1) ElseIf Version = "10.0" Then strValueM = SaveRegLong(HKEY_LOCAL_MACHINE, "Software\Microsoft\Office\10.0\Access\Security", "Level", 1) strValueU = SaveRegLong(HKEY_CURRENT_USER, "Software\Microsoft\Office\10.0\Access\Security", "Level", 1) ElseIf Version = "11.0" Then strValueM = SaveRegLong(HKEY_LOCAL_MACHINE, "Software\Microsoft\Office\11.0\Access\Security", "Level", 1) strValueU = SaveRegLong(HKEY_CURRENT_USER, "Software\Microsoft\Office\11.0\Access\Security", "Level", 1) ElseIf Version = "12.0" Then strValueU = SaveRegLong(HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\Access\Security", "VBAWarnings", 1) End If DoCmd.Close DoCmd.OpenForm "form" End Sub[/CODE] حيث ان الوظيفة الإساسية SaveRegLong تأخذ هذه القيم [CODE]SaveRegLong(hKey,strPath,strValue,lData)[/CODE] حيث hKey يمثل نوع المفتاح الرئيسي وهو اما HKEY_LOCAL_MACHINE او HKEY_CURRENT_USER strPath يمثل المسار كاملا للمفتاح الفرعي Software\Microsoft\Office\11.0\Access\Security strValue اسم المفتاح وهو في الأكسيس من 97 الى 2003 يكون Level اما في الأكسيس 2007 فيكون VBAWarnings lData هي القيمة المطلوب كتابتها لهذا المفتاح وهي في جميع النسخ الرقم 1 نهاية الشرح بعد تنفيذ هذه الخطوات ووضعها في اي قاعدة بيانات نرغب في تخفيض الأمان لبرنامج الأكسيس سنجد ان الكود سيقوم بهذه الخطوات في الخفاء بدون ان يشعر المستخدم وبدون اي تدخل منه. بإمكانك تجربة وضع أمان الأكسيس يدويا على عالي او متوسط ثم تشغيل البرنامج وستجد ان البرنامج بعد هذه الخطوات سيقوم بتخفيض الأمان الى اقل ما يمكن ولجميع نسخ الأكسيس بدون استثناء عندما يتم فتح البرنامج حسب النسخة المطلوبه فقد يفتح شخص ما البرنامج بواسطة اكسيس 2007 وآخر بواسطة أكسيس 2003 وهكذا سنجد ان البرنامج سيتعرف اولا على رقم نسخة الأكسيس ومن ثم يقوم يقوم بتخفيض الأمان لها مباشرة خلال اقل من جزء من الثانية . وهذا هو البرنامج كاملا ( والكمال لله وحده ). [URL=http://www.arabteam2000-forum.com/index.php?act=attach&type=post&id=50902]zaAllAccesVersionAndSecurityLowLevel-Pro[/URL] ختاما لكم مني خالص الشكر والتقدير  

 اسم العضو:MAHERBADAWEY  الأحد,13/شعبان/1428 هـ,08:47 صباحاً
استاذتنا زهرة منورة منتدى المحيط العربى وكل المنتديات بصراحه اينما توجهتى كلك خير تحياتى اليكى ورمضان مبارك مقدما 

 اسم العضو:عبد الله الثبيتي  الأحد,13/شعبان/1428 هـ,10:28 صباحاً
أهلا وسهلا بالأستاذة الجليلة ......... زهــــــــــرة ......... دائما وأبدا الإبداع لمساتك وفقك الله وجزاك الله خيرا على ماقدمتي من معلومات قيمة ننتظر دائما جديدك دمتي بخير 

 اسم العضو:ابو حسام  الأحد,13/شعبان/1428 هـ,12:57 مساءً
بالفعل هذه الروائع لا تخرج الا من المبدعه دائما الست زهرة جزاك الله كل خير ولا تحرمي اعضاء المحيط العربي من هذا العمل ودائما نطمع في المزيد والتواجد في منتدانا الغالي 

 اسم العضو:alsajy  الأحد,13/شعبان/1428 هـ,01:34 مساءً
الحقيقه رائعه جداً باقي شغله وحده بس أكيد حلها عندك هي عندما أقوم بربط قاعدة بيانات بأخرى وعند فتحها تظهر الرسالة التالية: [IMG]http://www.arabmoheet.net/forum/Members_Upload_Pics/25641/warningmsg.JPG[/IMG] فهل يوجد كود لإلغاء هذه الرسالة المزعجة؟؟ شكراً لك على الموضوع  

 اسم العضو:sandanet  الأحد,13/شعبان/1428 هـ,06:48 مساءً
[ALIGN=center][IMG]http://www.arabmoheet.net/forum/pics/bsmla.gif[/IMG][/ALIGN] [ALIGN=center]معلمتنا الفاضلة الأخت زهرة تحية طيبة لك أينما كنتي ... هذا بالفعل ما كنت أتمناه وهذا ما أسميه بالفعل الإحتراف والإبداع البرمجي وهذا ما سألتك عنه في مشاركتي في منتديات الفريق العربي للبرمجة ... وفقك الله أينما كنتي وجعل جميع أعمالك في ميزان حسناتك وحفظك الله من كل مكروه أنتي وأبنائك وعائلتك بإذن الله .. ولي طلب لو تكرمتي وهو تحويل مثالك لنسخة ACCESS 2000 وارفاقه إن أمكن أخوك بالله SANDANET [/ALIGN] والسلام عليكم ورحمة الله وبركاته 

 اسم العضو:MAXXIN  الاثنين,14/شعبان/1428 هـ,11:21 صباحاً
مشكورة ، اختنا الكريمة. انت دائما سباقة في تقديم المعلومة. بارك الله فيك. 

 اسم العضو:startnet  الاثنين,14/شعبان/1428 هـ,02:57 مساءً
السلام عليكم ورحمة الله وبركاتة تحيه طيبة لكم جميعا وبعد شكرا على الشرح الرائع من الاستاذة زهره وجعله الله في ميزان حسناتها 

 اسم العضو:عبدالمانع  الأربعاء,16/شعبان/1428 هـ,11:54 صباحاً
السلام عليكم ورحمه الله ،،، شكرا لك استاذه / زهره وبالتوفيق للجميع 

 اسم العضو:alasomed  الثلاثاء,12/شوال/1428 هـ,06:44 مساءً
نورت أستاذتي الغالية ... شكرا على المعلومة جعلها الله في ميزان حسناتك وعظم بها أجرك آمين أبو تماضر 

 اسم العضو:aram  الأربعاء,13/شوال/1428 هـ,02:52 صباحاً
[ALIGN=center][IMG]http://www.arabmoheet.net/forum/pics/bsmla.gif[/IMG][/ALIGN] السلام عليكم ورحمة الله وبركاته انت اكثر من رائعة وبارك الله فيك والى الامام  

 اسم العضو:alzaeem911  الأربعاء,09/ربيع الأول/1433 هـ,07:49 مساءً
مشكورررر ويعطيك الف عافية 

 اسم العضو:hamdynose  الثلاثاء,23/شوال/1435 هـ,10:33 صباحاً
نشكر لك هذا الجهد الكبير 

 اسم العضو:hamdynose  الثلاثاء,23/ذو الحجة/1436 هـ,11:49 صباحاً
شكرا لك 

جميع الحقوق محفوظة لـمنتديات المحيط العربي 2004 - 2020