السلام عليكم و رحمة الله تعالى و بركاته,,,
واجهة مستخدم ويندوز المسماة Shell تمكن البرامج المثبتة على النظام من التحاور مع هذه الواجهة بطرق عديدة و متنوعة لا يمكن حصرها في موضوع واحد. هذا الموضوع سيكون الجزء الأول لدراسة كيفية زيادة عنوان على القائمة التي يظهرها مستكشف ويندوز عند النقر على ملف بالزر الأيمن للفأرة كما هو مبين على الصورة أذناه. هذا الجزء سنتكلم فيه عن الطريقة القديمة لزيادة عناوين على القائمة. الجزء الثاني من هذا الموضوع سوف يتطرق لموضوع Context Menu Handlers الذي باستعمال تقنيات COM سنتمكن من التحكم أكثر في العمليات التي نريد إتاحتها للمستخدم للقيام بها على الملفات عن طريق مستكشف ويندوز و غيره.
الطريقة الأولى لزيادة عنوان على قائمة مستكشف ويندوز المخصصة لنوع من أنواع الملفات المعرفة على نظام التشغيل تستعمل مسجل النظام لتحديد معلومات العنوان الجديد. المعلومات التي تحتاجها واجهة Shell على مسجل النظام لزيادة العنوان على القائمة هي :
- إسم تعريف الملف على مسجل النظام على المفتاح الجذر HKEY_CLASSES_ROOT. مثال jpegfile, txtfile, rtffile,... اسم تعريف الملف على مسجل النظام عادة ما يكون معرفا بامتداد نوع الملف زيادة على الكلمة file. فمثلا إذا كنا نستهدف ملفات الصور من نوع jpeg, سيكون اسم التعريف للملف هو jpegfile.
- معرف العنوان الجديد على قائمة خيارات المستخدم المخصصة لنوع الملف. هذا العنوان سيمثل في مسجل النظام عن طريق مفتاح داخل المفتاح المعرف لنوع الملف المستهدف. تتم زيادة معرف العنوان مثلا لنوع jpegfile على المسار التالي على مسجل النظام \HKEY_CLASSES_ROOT\jpegfile\shell\menu_name حيث menu_name هو معرف العنوان. معرف العنوان ليس هو من يظهر على قائمة مستكشف ويندوز و إنما الإسم المدون كقيمة افتراضية للمعرف.
- العنوان الذي يظهر للمستخدم على القائمة يمثل بقيمة مفتاح معرف العنوان. هذه القيمة يجب أن تمثل بنص مقروء حتى يتمكن المستخدم من فهم وضيفة العنوان.
بعد ذلك نقوم بتحديد الأمر الواجب تنفيذه عند اختيار المستخدم للعنوان من على القائمة. أذكر أننا مازلنا داخل المفتاح المعرف للعنوان على المسار \HKEY_CLASSES_ROOT\jpegfile\shell\menu_name على مسجل النظام. الأمر يمثل بمفتاح داخل معرف العنوان اسمه command و بداخله نحدد نص الأمر على القيمة الافتراضية للمفتاح. هذا الأمر يكون بصيغة نص أمر يمكن لنظام التشغيل فهمه و تنفيذه. في الغالب يكون الأمر ممثلا باسم ملف تنفيذي يمرر له نظام التشغيل اسم و مسار الملف المختار. فمثلا لفتح ملف عن طريق البرنامج notepad, سيكون محتوى المفتاح command هو notepade.exe %L حيث %L ستتم ترجمتها باسم و مسار الملف وقت تشغيل البرنامج و تمريرها إليه حتى يقوم بعمله على الملف المذكور.
و ألخص شجرة العنوان الجديد بسيناريو محرر مسجل النظام كالتالي :
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\Copy path] @="Copy path to clipboard" [HKEY_CLASSES_ROOT\*\shell\Copy path\command] @="shellcontextmenu.exe %L"
ستلاحظون معي في السيناريو أعلاه أن معرف نوع الملف محدد في الرسم *. إذا تم تحديد معرف الملف في * فهذا يعني أن العنوان سيظهر على كل القوائم المخصصة للملفات مهما كان نوعها. معرف العنوان هو Copy path أما النص الذي سيظهر على القائمة فهو Copy path to clipboard. أما الأمر الذي سينفذ عند اختيار العنوان من على القائمة فهو shellcontextmenu.exe %L و هذا يعني أنه عند اختيار العنوان سيتم تشغيل الملف التنفيذي shellcontextmenu.exe و يمرر إليه اسم و مسار الملف.
البرنامج shellcontextmenu.exe هو المشروع المرفق بهذا الموضوع. هذا البرنامج عند تشغيله بدون تمرير بارامترز سيقوم بإظهار واجهة مستخدم لتسجيله على واجهة Shell لنوع الملفات الذي نريد كما هو مبين على الصورة أذناه. أما إذا تم تمرير بارامترز فسيقوم بنسخها على Clipboard معتبرا إياها اسم و مسار ملف تم اختياره عن طريق عنوان على القائمة المخصصة لملف ما على مستكشف ويندوز. يمكن هذا البرنامج أيضا من سحب و إلغاء التسجيل أيضا.
سنقوم باستعراض وشرح كود تسجيل العنوان و إلغاء التسجيل, لأن الكود الباقي خارج عن نطاق الموضوع. واجهة مستخدم البرنامج تهيئ لنا مربعات نص لإدخال المعلومات اللازمة لتسجيل عنوان على قائمة نوع من الملفات كما ذكرنا سالفا. و هذا ملخص للمعلومات :
File type menu : اسم معرف نوع الملفات على مسجل النظام.
Menu key name : معرف العنوان على المفتاح المعرف لنوع الملفات على مسجل النظام.
Menu item text : النص الذي سيظهر للمستخدم على القائمة.
Menu item command : الأمر التنفيذي الذي سيتم تنفيذه عند اختيار العنوان من القائمة.
سيحتاج البرنامج لهذه المعلومات في كلتا حالتي تسجيل العنوان و إلغاء تسجيله. تسجيل العنوان يتم عن طريق الزر Register و إلغاء التسجيل يتم عن طريق الزر Unregister.
لتسجيل العنوان برمجيا سنقوم باتباع الخطوات التالية :
نقوم هنا بتجميع اسم و مسار معرف العنوان على جذر الشجرة HKEY_CLASSES_ROOT.
Dim key As String = String.Format("{0}\shell\{1}", FileTypeTextBox.Text, MenuKeyNameTextBox.Text)إنشاء المفتاح الممثل لمعرف العنوان على سجل النظام على الجذر HKEY_CLASSES_ROOT.
Dim rkMenu As RegistryKey = Registry.ClassesRoot.CreateSubKey(key)
تحديد النص الذي سيظهر على قائمة نوع الملف.
rkMenu.SetValue(Nothing, MenuItemTextTextBox.Text)
بعد ذلك, نقوم بزيادة المفتاح المحدد للأمر التنفيذي للعنوان عند اختياره.
Dim rkCmd As RegistryKey = rkMenu.CreateSubKey("command")نحدد على المفتاح نص الأمر التنفيذي على القيمة الافتراضية للمفتاح command.
rkCmd.SetValue(Nothing, CommandTextBox.Text)
و أخير, لا ننسى غلق المفتاحين الذين تم فتحهما عند عملية الإنشاء.
rkCmd.Close() rkMenu.Close()
عملية إلغاء التسجيل بسيطة للغاية. يكفي حذف مسار معرف العنوان من سجل النظام حتى يختفي العنوان من القائمة المخصصة لنوع الملف. و للقيام بالعملية كما يجب, يحتاج البرنامج لتحديد معرف العنوان إضافة إلى معرف نوع الملف الذي تم تسجيل اشتراك العنوان عليه.
يقوم البرنامج أولا بتجميع مسار معرف العنوان في السطر الأول ثم يقوم بحذف المفتاح من على سجل النظام.
Dim key As String = String.Format("{0}\shell\{1}", FileTypeTextBox.Text, MenuKeyNameTextBox.Text)
Registry.ClassesRoot.DeleteSubKeyTree(key)هذه الطريقة سهلة و بسيطة لزيادة عنوان على القائمة المخصصة لنوع من أنواع الملفات المعرفة على نظام التشغيل. ويمكن أيضا زيادة عنوان إلى القائمة المخصصة للمجلدات بنفس الطريقة و ذلك بتحديد معرف الملف في Directory. كما يمكن أيضا فعل ذلك بالنسبة لوحدات التخزين و ذلك بتحديد معرف الملف في Drive.
هذه الطريقة ببساطتها فهي محدودة إلى حد ما. الطريقة الأخرى التي سنتحدث عنها في موضوع لاحق تمكننا من التغلغل في أغوار واجهة Shell و القيام بتعاملات متقدمة مع مستكشف ويندوز كما تفعل البرامج التجارية المشهورة.
الملف المرفق يحتوى على مشروع صغير به البرنامج shellcontextmenu الذي تكلمنا عنه سابقا. بقي شيء تجدر الإشارة إليه و هو أن البرنامج يحتاج لأذونات مدير النظام للعمل. لتسجيل عنوان على القائمة المخصصة لملف, مجلد أو وحدة تخزين, نقوم بتشغيل البرنامج من دون بارامترز و ذلك عن طريق النقر على أيقونة الملف التنفيدي بالزر الأيمن للفأرة و اختيار العنوان Run as an administrator. و الحال الحال, لا أتحمل أي مسؤولية من أي نوع كان في حالة حدوث أخطاء مباشرة أو غير مباشرة على نظام التشغيل الخاص بكم من جراء استخدام البرنامج أو الكود المرفقين ;)

