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

أريد شرح للمثال Yomna File Association Example

مغلق
بدأه SSR2007 في 16 مايو 2007 · 11 رد · 1,077 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اولا انا جديد في المنتدى وسبق لي وان طرحت سؤال وكان سؤالي

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

msayed2004

ودلني بهذا المثال وبصراحة لم افهمة

Yomna File Association Example

لاني اريد استخدامة ع الفورم وليس ميدي فورم

ولكم جزيل الشكر

#2

الطريقة تستخدم فى اى فورم وتعتمد على مسجل النظام لتسجيل اماكن الايكونة ( التى سيعرضها الاكسبلورر على الملف )

الرسائل Wm التى يبعثها ال Explorer لبرنامجك لكى يفتح الملف

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

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

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

#3

هنبدأ بالجزء الأول و هو تحديد أذا كان البرنامج شغال أساسا و لا لأ :

الأصل فى الـ VB6 هو أستعمال دالة App.PrevInstance و هى تعود زى ماهو موجود بموضوع البرنامج الأساسى بـ True أن كان البرنامج شغال قبل كده لكن مع الأسف ممكن تعود بـ True حتى لو البرنامج مش شغال و حسب وصف أحد عمالقة الـ VB ( أن ديه مشكلة فى البرامج اللى بدايتها "Start Up" بتاخد وقت ).

فى مجموعة حلول لكن مع الأسف هتلاقى اللى مش دقيق و اللى بياخد وقت لكن بعد بحث وجد حل ممتاز يتمثل فى ما يسمى بالـ Mutex و دى حاجة أتعملت أساسا علشان الـ Services لضمان عدم تشغيلها أكتر من مرة.

تخيل أن أحنا بنعين قيمة ما خاصة بالبرنامج (فى بداية تشغيله) فى النظام و نحررها عند الأغلاق و القيمة دى لا يمكن لبرنامج آخر ( سواء هو نفسه أو غيره ) تعيينها مرة تانية و يحدث خطأ ( طبعا الأخطاء على مستوى الـ APIs اللى هى بتعمل الحكاية دى لا تكون بصورة Run Time Error و بالتالى البرنامج مش هيحصله حاجة و أنما تكون فى صورة قيمة تعود بها دالة الـ API ).

بمشروعى Yomna File Association هتلاقى Class Module عاملها واحد أسمه Hesham A. Amin و أسمها clsMutex.cls

أضف الـ Class ده لمشروعك و Module و Form أسمها مثلا Form1

فى جزء الـ Declaration بالـ Module أكتب :

Public Mut As New clsMutex

ثم :

Public Sub Main()
	Set Mut = New clsMutex
	If Mut.CheckMutex("YomnaFAE") = False Then
			MsgBox "البرنامج يعمل من قبل"
			Exit Sub
		Else
			MsgBox "لا توجد نسخ أخرى من البرنامج تعمل"
			Form1.Show
	End If
End Sub

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

من قائمة Project أختر الـ Properties و أجعل البرنامج يبدأ بـ Sub Main

لا تجرب الطريقة دى من الـ VB نفسه و لكن أعمل Compile للمشروع و جربه كـ EXE و السبب هو أن داخل الـ VB IDE قيمة الـ Mutex ستتعين للـ VB IDE نفسه.

هكمل بكره أن شاء الله.

تم تعديل هذه المشاركة بواسطة msayed2004 في 16 مايو 2007 في 02:54

#4

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

#5

لسة مخلصش

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

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

#6

الجزء الثانى : الحصول على مقبض النافذة المفتوحة مسبقا لتنشيطها و التعامل معاها.

فى حالة ما أذا كان البرنامج مفتوح مسبقا نستخدم الدالة FindWindow للحصول على مقبض النافذة المفتوحة.

دالة FindWindow تعتمد على تمرير 2 Parameters لها و هم الـ Class Name أو الـ Window Name و يمكن الأستغناء عن أحدهم و أستبداله بـ vbNullString و الـ Window Name هو الـ Title أو الـ Caption الخاص بالنافذة و يجب ككتابته كما هو بمسافاته و علاماته و كل شئ.

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

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

أذا أردنا تنشيط النافذة يعنى نخليها فى وش المستخدم فهنشوف الأول هل هى مصغرة و لا لأ Minimized or not و ده بالدالة IsIconic و أن كانت نبعتلها رسالة WM_SYSCOMMAND و يكون الـ wParam بتاعها SC_RESTORE و بعدين نستخدم الدالتين SetForegroundWindow و BringWindowToTop و أن لم تكن النافذة مصغرة نكتفى بالدالتين SetForegroundWindow و BringWindowToTop فقط.

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

#7

انت طول عمرك معقد يا محمد

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

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

#8

الموضوع باين علية شوي فية صعوبة بس بحاول

#9

ماشى يا أحمد أما أقفشك بس على الياهو.

اقتباس
الموضوع باين علية شوي فية صعوبة بس بحاول
حاول تطبق معايا و هتلاقيه سهل جدا.
#10

ما فهمة قصدك شو تقصد بهذا

أذا أردنا تنشيط النافذة يعنى نخليها فى وش المستخدم فهنشوف الأول هل هى مصغرة و لا لأ Minimized or not و ده بالدالة IsIconic و أن كانت نبعتلها رسالة WM_SYSCOMMAND و يكون الـ wParam بتاعها SC_RESTORE و بعدين نستخدم الدالتين SetForegroundWindow و BringWindowToTop و أن لم تكن النافذة مصغرة نكتفى بالدالتين SetForegroundWindow و BringWindowToTop فقط.

#11
اقتباس
ماشى يا أحمد أما أقفشك بس على الياهو.

مش هتشوفنى الا 10/6 واحتمال كمان متشفنيش فى المنتدى

وبعدين انت مبتذاكرش ليه هما بتوع الطب كلهم كدة وانا الى كنت فاكرهم دحاحين !!!! ههههههههههههههههههههههه

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

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

#12

الحمد لله واخيرا ضبطت معي شكرا أخي

msayed2004

على المساعدة

:lol:

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

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