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

ازاي اغلق برنامج قبل فتح نسخة جديدة منه

بدأه محترف الهواة في 3 سبتمبر 2008 · 10 رد · 1,175 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كل عام وأنتم بخير

أعاده الله عليكم باليمن والخير والبركات

سؤالي

عندي برنامج و البرنامج يفتح تلقائيا مع الأوتورن

ايه الكود اللي يخلي برنامجي لو مفتوح نسخة منه يقفلها ثم يفتح النسخة الجديدة

وليس اذا وجد نسخة مفتوحة منه لا يفتح هو

وجزاكم الله خيرا

#2

لأغلاق برنامج تستخدم دالتين الأولى FindWindow تجلب لك مقبض بأسم النافذة المفتوحة ،والثانية PostMessage لتستخدمها لأغلاق النافذة بمعرفة المقبض السابق ،وهذا مثال لك :

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_CLOSE = &H10

-----------------------------------------------------------------------------------------------

Private Sub Command1_Click()

Dim handle As Long

	handle = FindWindow(vbNullString, "أسم نافذة برنامجك الظاهر في أدارة المهام")

	If handle <> 0 Then PostMessage handle, WM_CLOSE, 0&, 0&   'إذا وجده يغلق البرنامج

End Sub

بالتوفيق ..

تم تعديل هذه المشاركة بواسطة عبد العزيز اليوسفي في 3 سبتمبر 2008 في 18:04

#3

السلام عليكم

اخي العزيز ما هي المكتبة الخاصة بـ FindWindow

ممكن مثال لما ذكرته

وشكراً

#4
اقتباس
ممكن مثال لما ذكرته
هو الذي ذكرته ليس بالمثال :blink:
اقتباس
ما هي المكتبة الخاصة بـ FindWindow
اقتباس
Function FindWindow Lib "user32.dll"
#5

جزاك الله خير أخي عبد العزيز

ولكن

وضعت الكود الأول في الجنرال للفورم

والثاني في زر الأمر

فعندما أضغط يغلق البرنامج نفسه

ولو وضعت كود زر الأمر في

form load

لا يفتح البرنامج لأنه أول ما يفتح الكود يغلقه

فما الحل

ممكن تعطينا برنامج مكون من فورم واحد وبيه الكود للتوضيح

وجزاك الله خير

#6
    

If App.PrevInstance = True Then       

MsgBox "There is already a copy running of the program"


End

End If

هذا هو ماتريد ضعه في الـ Form_Load

تم تعديل هذه المشاركة بواسطة COMFORT في 14 سبتمبر 2008 في 04:38

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#7

أخي COMFORT

اقتباس
ايه الكود اللي يخلي برنامجي لو مفتوح نسخة منه يقفلها ثم يفتح النسخة الجديدة

وليس اذا وجد نسخة مفتوحة منه لا يفتح هو

الأخ محترف الهواة هو أنت لازم تغير عنوان نافذة البرنامج الجديد لكي تقوم الدالة بأغلاق النافذة القديمة ،تفضل هذا مثال لك:

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_CLOSE = &H10

Private Sub Form_Load()
Dim str As String, handle As Long
	If App.PrevInstance = True Then
		str = App.Title
		App.Title = "NewName"
			handle = FindWindow(vbNullString, str)
			If handle <> 0 Then PostMessage handle, WM_CLOSE, 0&, 0&
		App.Title = str
	End If
End Sub

أيضاً للمعلومة يمكن أستخدام الدالة SendMessage بنفس البارمترات بدل PostMessage ولكن الأخيرة ...Post على ماأعتقد تقوم بأغلاق البرنامج فوراً بدون أن ينتهي تنفيذ كوده.

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
#8

أسف لتأخري في الرد

يبدو أني لم أوضح سؤالي

سؤالي كان

صممت برنامج اسمه

النورمثلا

فإذا فتحت برنامج النور وقمت وتركته مفتوح وأتي شخص أخر

وفتح برنامج النورمرة ثانية فإن البرنامج يغلق الذي فتحته أنا قبل أن يفتح مرة أخري أرجو أن أكون قد أوضحت

#9

سؤالك مفهوم وبالطريقة السابقة تستطيع أغلاق البرنامج السابق عند فتح الجديد

#10
عبد العزيز اليوسفي كتب:
أيضاً للمعلومة يمكن أستخدام الدالة SendMessage بنفس البارمترات بدل PostMessage ولكن الأخيرة ...Post على ماأعتقد تقوم بأغلاق البرنامج فوراً بدون أن ينتهي تنفيذ كوده.

انتبه إلى هذه النقطة أنا غير متأكد لأني لا أستعمل هذه اللغة إلا عند الإجابة على شئ ما، WM_CLOSE المرسلة من خلال PostMessage أو SendMessage لو كانت مرتبطة بكتلة معالجة وكانت موجودة فسيتم تنفيذ الجزء الخاص بتلك الكتلة بمعنى لو مثلاً عند إغلاق برنامج تظهر رسالة تأكيد "هل تريد الإغلاق" فاستخدامها سيؤدي إلى إظهار تلك الرسالة وبكل الأحوال ستعمل النسخة الثانية حينها لأن التنفيذ لم يكتمل بعد للبرنامج الأول. هذه الطريقة ليست termination تماماً.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#11

PostMessage : سترسل الرسالة و لا تنتظر إستجابة البرنامج المتلقى.

SendMessage : سترسل الرسالة و تنتظر الرد, لا أنصح بها.

SendMessageTimeout : سترسل الرسالة و تنتظر لوقت محدد (الأفضل فى حالتك).

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…