تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] شرح عمل امتداد خاص لبرامجك وجعل برنامجك يقرأ هذة الملفات
#1
Star 




>>> شرح عمل امتداد خاص لبرامجك وجعل برنامجك يقرأ هذة الملفات<<<
في بداية الامر احب ان تقومو بتحميل هذا البرنامج الذى برمجته ليكون مثال عملي للتجربه حمله من الرابط التالي
http://hulkload.com/1v8u7cw6u3ue

في هذا المثال ستري برنامج مثل المفكره وهو لتحرير الملفات النصيه ولاكن لها امتداد خاص بالبرنامج
وعند الضغط على اي ملف يحمل هذا الامتداد يقوم الجهاز بفتح برنامجك ويقوم برنامجك بقرائه هذا الملف
وهذة صور توضح المثال


في هذة الصورة هي للمثال السابق اثناء الكتابه فيه


فى هذة الصورة هي اثناء الحفظ للملف الكتابي الذى يحمل الامتداد الجديد الخاص ببرنامجي


انظهر كيف اخذ الملف شكل الايكونه الخاص ببرنامجي وكيف التعليق الموجود على الملف


وهذا الملف بعد الضغط علية وفتح ما بداخله فى برنامجي


>>> طريقة العمل <<<
فى البدايه احب ان اوضح طريقة عمل هذا الامتداد . ففي هذا الدرس الشرح ينقسم لفرعين اثنين
الفرع الاول وهو لخلق امتداد جديد فى الجهاز الذي سيعمل عليه برنامجك وهي تم عن طريق سجل النظام
والفرع الثاني هو لجعل برنامجك يقرأ الملفات التي ستمرر عليه من الامتداد الجديد الذى خلقته

>>> شرح الجزء الاول <<<
اولاً كوننا مبرمجون يجعلنا لا نكتفي بمعرفة الكود اللازم لتسجيل نوع جديد ولكن يتوجب علينا فهم طبيعة ما يحدث عندما يقوم المستخدم بالنقر المزدوج على احد الملفات الى ان يتم فتح الملف بواسطة البرنامج المحدد والطريقة في الواقع بسيطة حيث انك اذا نقرت على احد ملفات الورد (ذات الامتداد doc) فانه اولاً يقوم نظام التشغيل بالبحث في الريجيستري عن لاحقة الملف الذي تم النقر عليه ويكون البحث منصباً على المفتاح الاساسي HKEY_CLSSSES_ROOT وذلك بالبحث عن مفتاح يكون اسمه "doc." ...... واذا لم يجد هذا المفتاح فانه مباشرة يعرض مربع الحوار (فتح بواسطة) .... اما اذا وجد المفتاح فانه ينظر في القيمة التي داخله واذا كان برنامج الورد الذي تستخدمه هو من النوع xp كما في حالتي انا فسوف يجد ان قميته هي "Word.Document.8" والتي تعني ان بيانات الملف الذي يفتح هذا النوع من الملفات doc موجودة في المفتاح Word.Document.8 فيقوم نظام التشغيل بالبحث عن هذا المفتاح كي يتعرف على البرنامج الذي يجب ان يشغله لفتح هذا النوع من الملفات وعندما يجده يبدء بقرائة البيانات من داخله واليك بعض التفصيل فيما يجب ان يحتويه هذا المفتاح ....

ان افضل طريقة لفهم ما يتم شرحه هنا ان تقوم بفتح الريجيستري وتتبع الخطوات التي اوضحها هنا فمثلاً ابحث عن المفتاح .doc وسوف تجد بمجرد ان تختارة انه يعرض لك في القائمة اليمنى من الريجيستري اسم المفتاح الذي يجب ان تبحث فيه وهو في مثالنا Word.Document.8 ثم قم بالنقر على هذا المفتاح ماذا ستجد ؟ ... سوف تجد مباشرة في يمين الشاشة في القيمة المسماه (Defalut) او القيمة الافتراضية عبارة كهذة "مستند Microsoft Word" وهذة العبارة هي التي تظهر عندما تقوم بالنقر على اي ملف ثم اختيار خصائص فانه سوف يتم عرض نوع الملف وبجواره هذا التعليق والذي يفيد بان نوع هذا الملف هو ملف ورد وكذلك الحال بالنسبة لاي نوع آخر من الملفات كملفات الرسام تجد ان نوعها يوجد به تعليق مثل "صورة نقطية" وبهذا نكون قد عرفنا اين يمكن وضع تعليق على نوع ملفاتك الجديد ويمكنك جعلها مثلاً "برنامج محمد لتحرير النصوص" ....

طبعاً هذا فقط عبارة نوع الملف ولكن يوجد الكثير داخل المفتاح Word.Document.8 قم الان بالنقر على علامة + الموجودة بجواره لتمديده ورؤية المفاتيح التي بداخله سوف تجد مفاتيح عدة والتي تهمنا منها اتنان هما المفتاح Default Icon و المفتاح Shell ...

>>> المفتاح Default Icon :<<<
يحتوي على مسار الملف الذي يملك ايقونة برنامجك بحيث تصبح مفاتك لها ايقونة خاصة وهذا مهم جداً فمثلاً ترى ان ملفات الصوت لها يونة خاصة بينما ملفات قواعد بيانات الاكسس لها ايقونة مميزة لها وبلذلك يسهل تمييز الملفات من ايقوناتها مباشرة ... وملف الايقونة يمكن ان يكون احد ثلاثة انواع اما ملف Ico عادي ويوجد الكثير منها ويمكن ان تكون ملف DLL حيث ان هذة الملفات يمكن ان تحتوي على اكثر من ايقونة واحدة ويتم تحديد الايقونة التي نريدها عن طريق الرقم مثلاً :
PHP كود :
C:\Windows\System32\Shell32.dll,
ويعني السطر السابق ان ايقونةالبرنامج موجودة في الملف Shell32.dll في الموقع الرابع لان الترقيم يبدء من الصفر ...
واما الطريقة الثالثة للتحديد ايقونة وهي التي سوف نستخدمها هنا هي مسار ملفك التنفيدي فاذا كان برنامجك هو Test.exe فان القيمة سوف تكون عنوان ملفك التنفيدي والايقونة التي سوف تظهر هي الايقونة الاولى في ملف المصادر Resoures داخل برنامجك او ايقونة الفورم الاولى في البرنامج .....

هذا كان لتحديد ايقونة لمفاتك اما الان سوف نستعرض محتويات المفتاح Shell وهي الاهم ..
نلاحظ جميعاً اننا اذا نقرنا على اي ملف بالزر الايمن فان تظهر قائمة تحتوي على اوامر ثابثة في كل الملفات وهي في الجزء الاسفل كالامر حذف و اعادة تسمية وخصائص و ... و .... و .... بينما القسم الاعلى نجد فيه اوامر تختلف من ملف الى آخر مثلاً نجد في ملفات الرسام الامر فتح و عرض وطباعة بينما نجد في ملفات الصوت wav امر جديد مثل تسجيل و تشغيل وهناك اشياء ثابتة ايضاً .... وكل ذلك موجود في القسم shell حيث انك اذا فتحته

>>> تجد مفاتيح اخرى مثل : <<<
open وقميتة "فتح"
Print وقيمته "طباعة"
وغيرها اي ان الاسم Open هو اسمة في الريجيستري اما الاسم فتح فهو الذي سوف يظهر في القائمة اليمنى يعني كتجربة بسيطة غير الكلمة فتح الى العبارة "سبحان الذي هدانا لهذا" ثم اذهب الى اي ملف ورد في جهازك وانقر بالزر الايمن وسوف ترى ان الامر فتح اختفى واصبح مكانه العبارة التي كتبناها واذا نقرت عليها يتم فتح الورد كما كان الامر سابقاً اي ان الذي غيرناه هو الاسم فقط وانما العمل ظل كما كان سابقاً ... (قم الان باعادة الوضع كما كان سابقاً واعيد الكلمة فتح) ...

لاحظ الان ان داخل كل مفتاح من المفاتيح المحتواه داخل Shell يوجد بها مفتاح باسم Command اي انه داخل المفتاح Open يوجد مفتاح command وكذلك الحال داخل المفتاح Print يوجد ايضا command ووظيفة هذا المفتاح ان يحتوي على القيمة التي تدل على البرنامج الذي نريد تشغيله اي انه ماذا نريد ان يحصل اذا نقرنا على الامر فتح .... مباشرة يتم تشغيل البرنامج الموجود داخل الـ Command التابع للمفتاح Open .... واذا نظرنا في قمية الكوماند التابع للفتاح open في مثالنا (برنامج الورد) فاننا سوف نجد فيه مسار برنامج الورد متبوعاً بالعلامة %1 وهي علامة مهمة جداً واذا حذفتها فان الملف لن يعمل ....

طبعاً كل ماسبق هو لمعرفة اين يتم التخزين واذا وجدت اي صعوبة في شرح الامر يمكنك الاعتماد على الريجستري وتجربة النتائج التي تحصل وانصح بالتجربة على ملفات txt واذا حصل اي خطأ ولم تتمكن بعده من فتح الملفات النصية بالشكل السليم عندها قم بالضغط على الزر shift اثناء الضغط على الزر الايمن للماوس فوق احد الملفات النصية وسوف تظهر لك القائمة المعهودة ولكن باضافة الامر فتح بواسطة اخترة ثم اختار بنامج المفكرة notepad وحدد الخيار الذي يجعل المفكرة هي التي تفتح الملفات النصية txt دائماً ....

واكرر انك اذا لم تكن واثقاً مما تفعل انصح بتجاهل الجزء السابق لاننا سوف نقوم بكل ماسبق برمجياً دون الحاجة الى فتح الريجستري وقد كان ذلك للفائدة فقط ...

>>> شرح الجزء الثاني <<<
الجزء السابق كان الجزء الخاص بخلق امتداد جديد في الجهاز . فاصبح الان عند الضغط على اي ملف يحمل الامتداد الذى خلقته سوف يقوم الجهاز بفتح برنامجك
ولاكن يبقي شيئ وهو كيف تجعل برنامجك يتعرف على الملف ويقرأ محتواه داخل برنامجك
فهذا يتم عن طريق داله موجودة فى جميع برامج البرمجه وكل لغات البرمجه بما فيها برنامج الاوتوبلاى
والفيجوال باسيك وسي شارب وسي بلص وغيرهم الكثيير ...
هذة الداله وهي اسمها
CommandLineArgs
في الحقيقه هذة الداله او هذا الامر غير معروف لدي الكثير من المبرمجيين لانه ليس له اثر واضح ولاكنه امر هام جدا
فهذة الداله هى التي تقرأ سطر الاوامر التي بها مسار الملف الذى قمت بالضغط عليه
فعند ضغطك على الملف الذى يحمل امتدادك الجديد سيفتح برنامجك ويقوم برنامجك بقرأة مسار هذا الملف
عن طريق الداله السابقه . لذلك فهي هامة جدا لدي المبرمجيين اصحاب البرامج العملاقه والفعاله

نأتي الان الى الجزء العملي الذي سوف نقوم به لبرنامجك
في الحقيقة كل ماسبق هو مجرد لفهم واستيعاب ما يحدث لبرنامجك وامتدادك ومسار العمليه
اما الان سنقوم بعمل كل ما سبق شرحه عن طريق الاكواد من داخل برنامجك

اولا في حدث تحميل الفورم Form_Load
قم بلصق هذا الكود وهو الكود الخاص بخلق امتداد جديد على الجهاز الذي سيعمل فيه برنامجك

PHP كود :
My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\.GMY""""Gmyfile")
        
My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\gmyfile\DefaultIcon"""Application.ExecutablePath " ,0")
        
My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\gmyfile\shell\open\command"""Application.ExecutablePath " %1")
        
My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\gmyfile\shell\Edit\command"""Application.ExecutablePath " %1"

هذا الكود يقوم بتنزيل مجموعة قيم في سجل النظام وهو ما يسمي بالريجيستري - وبمكنك بدل من ان تقوم بوضعة في Form_Load يمكنك ان تضعة مع برنامج التحزيم اثناء تحزيم برنامجك

حيث ان هذا الكود يمكن ان نستخدمة مرة واحدة فقط ولا نجعل البرنامج يستخدمة مرة اخري
لانة يقوم بتسجيل قيم في الريجيستري ولا حاجة لتسجيلها مرة ثانية ولا يحدث ضرر اذا تم تسجيلها مرة اخري . فلا تقلق اذا وضعتها في Form_Load اثناء تحميل الفورم كل مرة


الان يفضل كوود بسيط وهو كود جعل برنامجك يقرأ الامتداد الموجود فى سطر الاوامر وهو عن طريق الداله التى سبق شرحها

من اعدادت المشروع اضغط على view application events
كما في الصورة التالية

قم بوضع الكود التالي في حدث Startup للمشروع

PHP كود :
Dim inputExtension As String ""
            
Dim inputName As String ""
            
For Each s As String In My.Application.CommandLineArgs
                inputName 
System.IO.Path.GetFullPath(s)
                
inputExtension System.IO.Path.GetExtension(s)
            
Next

            
If inputName <> "" Then
                Form1
.RichTextBox1.LoadFile(inputNameRichTextBoxStreamType.RichText)
                
Form1.curentfile inputName
                Form1
.RichTextBox1.Modified False
                Form1
.Text "GmyPad - " System.IO.Path.GetFileName(inputName)

            
End If 
كما في الصورة التالية


في هذا الكود تم استعمال المسار الخاص بالملف المرر على برنامجك فى قرائة ما بداخله الى الريتش تيكست
ويمكنك تغيير المهمة على حسب طبيعة برنامجك
فقط تذكر ان مسار الملف المقروء يكون فى المتغير الموجود فى الكود السابق وهو inputName وسيقوم البرنامج بقرائة
مسار الملف الذي ضغط عليه المستخدم

وهذا ملف مفتوح للمثال الذي فى اعلي الموضوع وهو لتجربة والتعديل عليه كما تريد

http://hulkload.com/h2v09kto5f54

واي استفسار يمكنك مراسلتي على الفيس بوك عبر الرابط التالي
[b]www.facebook.com/MohammedGamal381[/b]




مع تحياتى محمد جمال محمود
واى استفسار انا موجود



الرد }}}
#2
شكرا شكرا شكرا على هذا المجهود الرائع
الرد }}}
تم الشكر بواسطة:
#3
بارك الله فيك
الرد }}}
تم الشكر بواسطة:
#4
السلام عليكم ورحمة الله
اخي محمد شرح رائع جدا
اسئل الله لك التوفيق والسداد
واتمني الا تتوقف ولا تحرمنا من ابداعاتك
وجزاك الله خيرا
الرد }}}
تم الشكر بواسطة:
#5
شكرا لمروركم جميعا

(10-11-13, 11:24 AM)ali.alfoly كتب : السلام عليكم ورحمة الله
اخي محمد شرح رائع جدا
اسئل الله لك التوفيق والسداد
واتمني الا تتوقف ولا تحرمنا من ابداعاتك
وجزاك الله خيرا
شكرا اخي على - اتمني ان يكون الشرح مفهوم ووافي - تحميل موفق
الرد }}}
تم الشكر بواسطة:
#6
شرح مميز ووافي ,, بالتوفيق
سبحان الله وبحمده سبحان الله العظيم

الرد }}}
تم الشكر بواسطة: mohammed_gamal381
#7
(10-11-13, 04:35 PM)Abdullah0991 كتب : شرح مميز ووافي ,, بالتوفيق

شكرا لك اخي عبدالله
الرد }}}
تم الشكر بواسطة:
#8
تسلم أيدك على الشرح

+ تم التحميل للدعمBig Grin

هذا hulkload اعرفه منزمان ويمكن ارجع اشتغل معاه

هل يدفع حتى الان او نصب ؟؟
الرد }}}
تم الشكر بواسطة:
#9
(10-11-13, 05:04 PM)الشاكي لله كتب : تسلم أيدك على الشرح

+ تم التحميل للدعمBig Grin

هذا hulkload اعرفه منزمان ويمكن ارجع اشتغل معاه

هل يدفع حتى الان او نصب ؟؟

Heart هههههههههه تسلم ايدك عالدعم
والله انا ماختش منةاي فلوس خالص - بس عندي ملفات علية كتير وسهل في التحميل والرفع
عشان كدة مستمر علية Big Grin

.
الرد }}}
تم الشكر بواسطة: الشاكي لله
#10
شكرا

مجهود رائع
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف تتعامل مع برنامج الإكسيل من برنامجك rinawi 7 6,628 12-11-22, 12:11 AM
آخر رد: خالد العصاوي
  ابسط كود لرفع الملفات عن طريق سيرفر FTP Basil Abdallah 2 3,957 20-11-20, 07:21 PM
آخر رد: walihn
Lightbulb [مقال] التعامل مع اختصارات الملفات Shortcuts Magic Sword 2 4,415 01-10-20, 11:36 AM
آخر رد: abomo3ath
  طريقة استخدام مكتبة internet download manager في برنامجك kslawy 3 5,360 30-07-19, 07:06 AM
آخر رد: سعود
  كيف تجعل برنامجك عالميا و يدعم أكثر من لغة silverlight 6 5,585 29-05-19, 10:32 PM
آخر رد: egbest2
  شرح انشاء برنامج تحويل صيغ الملفات الصوتيه CLARO 10 6,959 16-11-18, 04:41 PM
آخر رد: anassss
Brick جعل برنامجك يعمل بوضعية المدير أو المسؤول - Administrator YousefOkasha 2 2,897 24-10-18, 02:58 PM
آخر رد: حريف برمجة
  تشفير الملفات التنفيذية silverlight 2 6,339 02-10-18, 08:57 AM
آخر رد: sendbad100
  حصرياً ( إطبع على الوورد من خلال برنامجك ) ( شرح بالصور ) m.sami.ak 21 12,534 23-02-18, 11:04 AM
آخر رد: احمد نعمة عبد السلام
  التعامل مع الملفات الصوتية ........دردشة برمجية RaggiTech 8 10,375 28-11-17, 11:23 PM
آخر رد: ahmed4240

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم