بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
ناس كتير سألت كن كيفية عمل أمتداد خاص بالبرنامج و لو أن البرنامج بيفتح ملف معين و نادينا ملف تانى من نفس النوع أزاى نخليه يفتح فى نفس النافذة الأولى , الموضوع ده فيه كل اللى أحنا عايزينه.
مبدأيا فى مشروع مماثل على موقع vbAccelerator.com و انا فعلا أستفدت منه فى جزء ما فى مشروعى , بس أنا حاسس أنه معقد قوى و بالتالى أنا شايف أن مشروعى أبسط و بيقوم بالغرض.
أول حاجة هى تعين برنامج لفتح ملف معين و بتتم عن طريق الريجيسترى , و لاحظوا أنى وضعت تحذير فوق الجزء الخاص بتحديث أيقونات النظام , من قائمة Options تتبع الكود اللى بيناديه الـ Item المسمى Associate me with *.ytf
تانى حاجة نمنع البرنامج من أنه يفتح أكتر من مره , الطريقة الموجودة بالـ VB وهى App.PrevInstance و هى بتدى True لو كان البرنامج يعمل من قبل بس الطريقة دى بتدى نتائج خطأ كتير و Steve McMahon بيقول ان ده بيحصل فى البرامج اللى بدايتها بتاخد وقت و بالتالى كانت الحاجة لطريقة أخرى و من أفضل الطرق هى أستعمال الـ Mutex و لما يجى البرنامج يفتح تانى هيلاقى الـ Mutex موجود فيغل نفسه بعد أرسال مسار الملف للنسخة العاملة من البرنامج.
و بعدين مطلوب تنشيط النسخة اللى شغاله أساسا و هنا تيجى المشكلة و هى أن دالة AppActivate بتفشل كتير خصوصا لو البرنامج بيتصغر للـ System tray و حتى دالة FindWindow مش كويسه علشان لو النافذة بيتغير أسمها زى فى مثالى لأنى بستعمل MDI Form بس تقليلا للتعقيدات أنا أستعملت الدالة دى و منعت الـ MDI Child Forms من أنها تكبر نفسها Maximize , طب هل فى حل للمشكلة دى : ايوه و مش صعب قوى و هو هنا : Find Applications of a Specific Class or Window Title
آخر جزء و هو أرسال مسار الملف المطلوب فتحه لنسخة البرنامج الشغالة علشان تفتحه و ده بيتم عن طريق أرسال رسالة WM_COPYDATA حاملة مسار الملف بـ Structure مسمى COPYDATASTRUCT
المشروع : Yomna_File_Association_Example.rar
أرحب بأى أستفسار بس هجاوب بالليل علشان أنا حاليا بالقاهرة و مسافر بعد شوية.
و السلام عليكم و رحمة الله و بركاته



