الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Yomna File Association Example

مغلق
بدأه msayed2004 في 9 أبريل 2007 · 41 رد · 5,386 مشاهدة · في قسم برامج الأعضاء
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

ناس كتير سألت كن كيفية عمل أمتداد خاص بالبرنامج و لو أن البرنامج بيفتح ملف معين و نادينا ملف تانى من نفس النوع أزاى نخليه يفتح فى نفس النافذة الأولى , الموضوع ده فيه كل اللى أحنا عايزينه.

مبدأيا فى مشروع مماثل على موقع 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

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

و السلام عليكم و رحمة الله و بركاته

#2

و ممكن نضيف دعم للسحب و الأفلات علشان يبقى كله تمام , ده أحسن مثال : File Drag/Drop Loading

#3

ايه يا عم يعنى محدش عبر موضوعك بكلمة لولاى كان زماله وصل لاخر صفحة فى المنتدى

لكن فعلا موضوع مهم وربنا يوفقك فيه لان المنتدى كان ناقصة

وبعدين انت فى القاهرة ومتقوليش ده يبقى عيب انت فين فى القاهرة؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#4

شكرا بس أنا رجعت خلاص طنطا , كنت بمدينة نصر عند يمنى ;) , و بعدين خير كنت هتغدينى عندكم و لا حاجة ;) :lol:

أتمنى أن المثال يكون كويس و يكون خالى من الأخطاء و شكرا على مرورك.

#5

فعلا موضوع جميل ومطلوب مشكور اخي ونرجو المزيد من اهدائاتك ومفاجئاتك

at4re1.png

at4re2.png

#6

صح كنت بتقول على السب الخاص بتغيير الايكونة خطر ليه

واسال انت ميكروسوفت وجاوب علينا :lol:

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#7
حريف برمجة كتب:
صح كنت بتقول على السب الخاص بتغيير الايكونة خطر ليه

يعنى بخلص زمتى من ربنا و علشان محدش يجى يقللى ألحقنى كودك عمل و سوى بالجهاز.

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

حريف برمجة كتب:
واسال انت ميكروسوفت وجاوب علينا :lol:

الكود شغال بجهازى تمام و لكن جربته بجهاز والد يمنى وجدت أنه ينجح بتعيين الأمتداد و لكن لا ينجح بتحديث الأيقونة مباشرة و الفرق بين أجهزتنا من حيث الـ Software أن هو Win XP SP1 و أنا Win XP SP2 , يعنى تقريبا ملوش علاقة بكودى و بالتالى لا أعرف ما السبب بفشل الكود و لكن كالعادة بعيب على مايكروسوفت عدم وضعها دوال مباشرة لموضوع زى ده و أجبار المبرمجين على أستعمال طرق ودنك منين يا جحا :wacko:

#8

بعدين المثال خالى من الاخطاء وخلالى النظام مخلى

النظام خرب خالص انت عملت ايه يا عم انت

اقتباس
شكرا بس أنا رجعت خلاص طنطا , كنت بمدينة نصر عند يمنى

سلمتلى عليها؟؟

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#9

يا ريت انا مش فاهم الس الخاص بتسجيل ايكونة جديدة فى الريجسترى

انت سجلت قيمة فى المفتاح windowmetrix صح لكن بيعمل ايه وازاى بتحط ايكونة جديدة فى النظام بتديله عنوان الايكونة وهو يسجلها عنده

ولا بتديله ملف الايكونة binaary وهو يسجلها عنده يعنى مثلا من الريسورسز

على فكرة انا امتحنت النهاردة تخيل رايح على اساس امتحان واحد افاجا ان فى امتحانين

يعنى الامتحان الاول عكيت فيه

والتانى مكنتش عارف فيه حاجة

تخيل مادة شفت ورقتها كانى شايف طلاسم

تم تعديل هذه المشاركة بواسطة حريف برمجة في 10 أبريل 2007 في 22:19

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#10

لوضع أيقونه تانية أنا ستعملت الـ Resources و بالتالى البرنامج بقى ليه ايقونتين , عنوان التانية هى مسار الملف مضاف اليه

,1

لتعين الأيقونة بنسجلها بمفتاح HKEY_CLASSES_ROOT\YTF\DefaultIcon

طبعا الويندوز الأول بيبحث عن مفتاح أسمه زى أمتداد الملف ( مضاف اليه النقطه بأوله ) , و بعدين يعرف أسم المفتاح اللى مسجل بالقيمة Default و يتوجه اليها , و بعدين المفتاح DefaultIcon و بعدين مسار الأيقونة بالقيمة Default

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

أما عن تحديث الأيقونات فى الحال ( دون أعادة تشغيل النظام ) فهو كان معضله لحد ما عرفت أن فى و احد تتبع عمل برنامج ما يقوم بتغيير الأيقونات فوجد أنه بيبعت رسالة WM_SETTINGCHANGE لكل النوافذ مرتين و قبلهم بيغير فى قيمة الـ Shell Icon Size و بعدين بيرجعها بينهم.

يبقى معنى كده أن لما الـ Explorer بيستقبل الرسالة دى لا يراجع مسارات الأيقونات الا لو وجد تغيير بالقيمة Shell Icon Size و طبعا بعد التغيير أحنا بنرجعها تانى علشان مش كل مره هنغيرها و نلخبط الدنيا.

أهلا بك بعالم Microsoft Windows :lol:

#11

على العموم انا مش فاهم حاجة لان دماغى متدربكة بسبب الامتحانات

بس ليا قاعدة معاك

المهم تكون قاعد كوس على مستوى القاعدة

انا مش فاهم عشان مش قاعد على مستوى القاعدة

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#12

انا فتحت المفتاح HKEY_CLASSES_ROOT\YTF\DefaultIcon

ملقتش غير امتداد الملف بتاعك YTF فين بقى مسار الايكونة

ومسار البرنامج الى بيفتحها الى هو البرنامج بتاعك

وضح اصل انا مش ناقص

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#13

H:\MS\My work\VB Projects\Yomna File Association Example\Yomna File Association Example.exe,1

ده مسار الأيقونه داخل الـ EXE , لأن أنت ممكن تحدد ايقونه من ملف ICO أو EXE أو DLL ويمكن من غيرهم كمان.

تعديل : المسار اللى أنا كاتبه ده مسار البرنامج فى جهازى.

تم تعديل هذه المشاركة بواسطة msayed2004 في 10 أبريل 2007 في 23:11

#14

انا عندى متعدل جاهز لان شغلى مطلخبط وبرنامج على الديسك توب

على العموم ملف الايكونة بتاعة البرنامج بتاعك غير الايكونة الى ظهرت عندى على الملف

اقتباس
H:\MS\My work\VB Projects\Yomna File Association Example\Yomna File Association Example.exe,1

ورقم واحد الى فى الاخر بيعنى ان الايكونة فى ملف exe

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

يعنى عايز اديله بيانات الايكونة بينرى

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#15

دالة LockWindowUpdate

ودالة GetDesktopWindow الى اعتقد بتجيب مقبض نافذة الاكسبلورر

بس الولى بتعمل ايه

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#16

جهد مشكور عليه أخي محمد ، هو أنت لماذا لم تعرف مانيو الحفظ والفتح

معليش البرنامج شغال بس عندما عملت له تحديث الايقونات خربطلي أيقونات سطح المكتب كلها

ويمكن تجعله يفتح الملف الجديد بنفس الملف القديم

شكراً..

#17
حريف برمجة كتب:
بس الولى بتعمل ايه

ايه الولى ده :blink: ؟

عبد العزيز اليوسفي كتب:
جهد مشكور عليه أخي محمد ، هو أنت لماذا لم تعرف مانيو الحفظ والفتح

معليش البرنامج شغال بس عندما عملت له تحديث الايقونات خربطلي أيقونات سطح المكتب كلها

ويمكن تجعله يفتح الملف الجديد بنفس الملف القديم

شكراً..

شكرا على مرورك أخى , بالنسبة لموضوع القائمة ده أنا بس كنت بعما مثال مش Editor كامل.

أنا آسف على اللى حصل لأيقونات سطح المكتب :^) بس ممكن توضحلى ايه اللى حصل بالضبط :unsure: ؟

بالنسبة لفتح الملف الجديد بالقديم أنت تقصد بنفس النافذة و تكون SDI مش MDI ؟ زى ما قلت أنا بس كنت حابب أعمل مثال مش حاجة معينه يعنى و ده اللى جه فى دماغى :unsure:

تعديل :

حريف برمجة كتب:
على العموم ملف الايكونة بتاعة البرنامج بتاعك غير الايكونة الى ظهرت عندى على الملف

ورقم واحد الى فى الاخر بيعنى ان الايكونة فى ملف exe

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

يعنى عايز اديله بيانات الايكونة بينرى

ايوه أيقونة الملفات غير بتاعة الـ EXE الأساسية , شوفها داخل الـ VB بمحرر الـ Resources

أما عن تحديد الأيقونات فعن طريق الـ Index الخاص بالأيقونة داخل الملف.

تم تعديل هذه المشاركة بواسطة msayed2004 في 11 أبريل 2007 في 00:21

#18

طب الاندكس عنك فى الريسورس -_- 101 وانت كتب فى الريجسترى الرقم واحد ليه بقى :rolleyes:

اقتباس
ايه الولى ده :blink: ؟

الدوال يا سيدى وانت عارف ان انا اقصد كدة بتعمل ايه :angry:

تم تعديل هذه المشاركة بواسطة حريف برمجة في 11 أبريل 2007 في 01:26

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#19

الـ Icon Index اللى جوه الـ EXE غير بتاع الـ Resources

و أنا فعلا لم أفهم المقصود بكلمة الولى , على العموم هنقتبس من الـ API Guide

اقتباس
The LockWindowUpdate function disables drawing in the given window. Only one window can be locked at a time.
اقتباس
The GetDesktopWindow function returns the handle of the Windows desktop window. The desktop window covers the entire screen. The desktop window is the area on top of which all icons and other windows are painted.
#20

طب السؤال الى بعد كدة انت بتقفلها ليه

وايه الفرق بين الاندكس الايكون و رقم الايكونة فى الريسورس

ولو حطيط اكتر من ايكونة ايه الى هيختاره الاكسبلورر

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#21

فى حاجة لسة عاملها دلةقتى

دخلت ايكونة جديدة على الريسورس وغير ال id بتاعها ل 101 وعملت اسوشيات من تانى اتغيرت الايكونة ايه علاقة الاى دى بالاندكس

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#22

علشان ما ( ترعشش ) كتير أثناء التحديث.

و الـ Icon Index مشابه للـ Item Index بالقوائم و خلافها , من 0 لما فوق.

أما الـ Index الخاص بالـ Resources فالغرض الأساسى منه تحديده فى حالة ما أذا كنا هنحتاج نخرج الملف اللى بالـ Resources

#23
حريف برمجة كتب:
فى حاجة لسة عاملها دلةقتى

دخلت ايكونة جديدة على الريسورس وغير ال id بتاعها ل 101 وعملت اسوشيات من تانى اتغيرت الايكونة ايه علاقة الاى دى بالاندكس

مش متأكد بس فى الغالب هتلاقى الـ Index بتاع الأيقونه اللى أنا كنت حاططها بقى 2

#24

فين الاندكس ده يا محمد انا مش شايف اى اندكس فى الريسورس ولا انت بتقصد الترتيب بتاع اليكوانت يعنى 101 تبقى اول ايكونة و 102 تبقى التانية وهكذا

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

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#25

ياسيدى 101 ممكن تخليها أى حاجة براحتك , لكن ترتيب الأيقونات اللى بناديها من النظام ملهاش علاقة بالـ Index بالـ Resources و بعدين أسمه ID و ليس Index

هذا الموضوع مغلق.

مواضيع مشابهة