كل عام وأنتم بخير
أعاده الله عليكم باليمن والخير والبركات
سؤالي
عندي برنامج و البرنامج يفتح تلقائيا مع الأوتورن
ايه الكود اللي يخلي برنامجي لو مفتوح نسخة منه يقفلها ثم يفتح النسخة الجديدة
وليس اذا وجد نسخة مفتوحة منه لا يفتح هو
وجزاكم الله خيرا
كل عام وأنتم بخير
أعاده الله عليكم باليمن والخير والبركات
سؤالي
عندي برنامج و البرنامج يفتح تلقائيا مع الأوتورن
ايه الكود اللي يخلي برنامجي لو مفتوح نسخة منه يقفلها ثم يفتح النسخة الجديدة
وليس اذا وجد نسخة مفتوحة منه لا يفتح هو
وجزاكم الله خيرا
لأغلاق برنامج تستخدم دالتين الأولى 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
السلام عليكم
اخي العزيز ما هي المكتبة الخاصة بـ FindWindow
ممكن مثال لما ذكرته
وشكراً
هو الذي ذكرته ليس بالمثال :blink:اقتباسممكن مثال لما ذكرته
اقتباسما هي المكتبة الخاصة بـ FindWindow
اقتباسFunction FindWindow Lib "user32.dll"
جزاك الله خير أخي عبد العزيز
ولكن
وضعت الكود الأول في الجنرال للفورم
والثاني في زر الأمر
فعندما أضغط يغلق البرنامج نفسه
ولو وضعت كود زر الأمر في
form load
لا يفتح البرنامج لأنه أول ما يفتح الكود يغلقه
فما الحل
ممكن تعطينا برنامج مكون من فورم واحد وبيه الكود للتوضيح
وجزاك الله خير
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

أخي 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
أسف لتأخري في الرد
يبدو أني لم أوضح سؤالي
سؤالي كان
صممت برنامج اسمه
النورمثلا
فإذا فتحت برنامج النور وقمت وتركته مفتوح وأتي شخص أخر
وفتح برنامج النورمرة ثانية فإن البرنامج يغلق الذي فتحته أنا قبل أن يفتح مرة أخري أرجو أن أكون قد أوضحت
سؤالك مفهوم وبالطريقة السابقة تستطيع أغلاق البرنامج السابق عند فتح الجديد
عبد العزيز اليوسفي كتب:أيضاً للمعلومة يمكن أستخدام الدالة 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
PostMessage : سترسل الرسالة و لا تنتظر إستجابة البرنامج المتلقى.
SendMessage : سترسل الرسالة و تنتظر الرد, لا أنصح بها.
SendMessageTimeout : سترسل الرسالة و تنتظر لوقت محدد (الأفضل فى حالتك).
إقرأ معى:
----
المثقفون العرب .. المزورون العرب: تأبين محمود درويش نموذجا
ماذا خسر العالم بانحطاط المسلمين ؟!! للعلامه: أبو الحسن الندوى (كتاب هام لكل مسلم).
المنهجية ومقدمات في الطلب (لطلاب العلم الشرعى)
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…