كيف نقوم بالبحث في سجل النظام - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : كيف نقوم بالبحث في سجل النظام (/showthread.php?tid=5130) |
كيف نقوم بالبحث في سجل النظام - RaggiTech - 05-10-12 كاتب الموضوع : samerselo
نحتاج أحيانا للبحث في سجل النظام عن مفتاح يحتوي على قيمة أو محتويات محددة ولهذا الغرض نستخدم الفئة Microsoft.Win32.Registry للحصول على الكائن Microsoft.Win32.RegistryKey الذي يمثل المفتاح الجذري للعش الذي نود البحث فيه في سجل النظام مستخدمين عناصر الكائن RegistryKey للتنقل عبر شجرية مفتاح السجل وتعداد عناصره وقراءة أسماء وقيم المفاتيح المحتواة في ذلك المفتاح.وهنا يجب علينا أولا الحصول على كائن RegistryKey يمثل المستوى الأساسي للتنقل عبر عناصر شجرية الكائن RegistryKey حيث تقدم لنا الفئة Registry مجموعة مؤلفة من سبعة خاصيات مشتركة تمثل المستوى الأساسي لمفاتيح سجل النظام وهي ClassesRoot HKEY_CLASSES_ROOT CurrentConfig HKEY_CURRENT_CONFIG CurrentUser HKEY_CURRENT_USER DynData HKEY_DYN_DATA LocalMachine HKEY_LOCAL_MACHINE PerformanceData HKEY_PERFORMANCE_DATA Users HKEY_USERS كما يوفر لنا الكائن My الفئة My.Computer.Registry التي تتضمن مجموعة مطابقة من الخصائص توفر نفس وظيفية الخصائص الموجودة في الفئة Microsoft.Win32.Registry وبعد حصولك على الكائن RegistryKey الجذري يمكنك التنقل عبر مفاتيحه الفرعية ولدعم هذا التنقل تمكنك الفئة RegistryKey من استخدام الطريقة GetSubKeyNames للحصول على مصفوفة نصية تحتوي على أسماء جميع المفاتيح الفرعية ثم استخدام الطريقة OpenSubKey للحصول على مرجع للمفتاح الفرعي وهي متوفرة بشكلان محملان الأول يفتح ذلك المفتاح للقراءة فقط والثاني يستقبل قيمة منطقية إن كانت True فهي تفتح ذلك المفتاح مع قابلية الكتابة أيضا. وحالما تحصل على الكائن RegistryKey يمكنك عندها إنشاء أو قراءة أو تحديث أو حتى حذف المفاتيح والقيم الفرعية باستخدام الطرائق التالية مع ملاحظة أنه عند استخدام الطرائق التي تقوم بالتعديلات على محتويات المفتاح يجب أن تكون قد حصلت على كائن RegistryKey قابل للكتابة حتى تستطيع القيام بالتغييرات المطلوبة • CreateSubKey تنشئ مفتاح فرعي باسم معين وتعيد كائن RegistryKey قابل للكتابة فإن كان ذلك المفتاح موجودا فهي تعيد مرجعا له • DeleteSubKey تقوم بحذف مفتاح باسم محدد حيث يجب أن لا يحتوي ذلك المفتاح على أية مفاتيح فرعية ويمكن ان يحتوي على قيم وفي حالة فشله فهو يطلق استثناء System.InvalidOperationException • DeleteSubKeyTree يقوم بحذف المفتاح مع جميع المفاتيح الفرعية والقيم ضمنه • DeleteValue يقوم يحذف قيمة باسم محدد في المفتاح الحالي • GetValue يعيد قيمة باسم محدد في المفتاح الحالي وتكون القيمة المعادة من النوع Object ثم يجب استخدام دوال تحويل الأنواع لتحويلها إلى نوع البيانات المطلوب وهي تعيد Nothing إن لم يتم إيجاد القيمة وهي تمتلك طريقة محملة تمكنك من تحديد القيمة الافتراضية المعادة بدلا عن Nothing • GetValueKind تعيد نوع البيانات الذي تحمله قيمة محددة في المفتاح الحالي وتكون القيمة المعادة من نوع التعداد Microsoft.Win32.RegistryValueKind • GetValueNames وهي تعيد مصفوفة نصية تحتوي على أسماء جميع القيم المحتواة في المفتاح الحالي وإن كان المفتاح يحتوي على قيمة افتراضية ممثلة بسلسلة نصية فارغة فيتم إعادة هذه السلسلة النصية الفارغة كعنصر ضمن المصفوفة المعادة • SetValue تقوم بإنشاء أو تعديل قيمة باسم محدد وهي تزودنا بطريقة محملة تمكننا من تحديد نوع البيانات المخزنة في تلك القيمة حيث تأخذ قيمة التعداد RegistryValueKind كمحدد أخير لتحديد نوع تلك القيمة وإن لم نقم بتحديد نوع هذه القيمة فيتم الاستدلال على نوعها آليا اعتمادا على نوع الكائن الممرر لضبط تلك القيمة كما أن الفئة RegistryKey تحقق الواجهة IDisposable لهذا عليك استدعاء الطريقة IDispsable.Dispose لتحرير مصادر النظام عندما تنتهي من استخدام الكائن RegistryKey. والمثال التالي يأخذ محدد سطر أوامر وحيد يقوم بالبحث عنه في العش CurrentUser باحثا عن المفاتيح التي يطابق اسمها المحدد الممرر وعندما يجد مفاتيحا مطابقة يقوم بإظهار جميع القيم النصية المحتواة فيه على شاشة الكونسول كود : Imports System كود : Registry key found : HKEY_CURRENT_USER\Environment contains 3 values |