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

برنامج يشتغل اكثر من مره بعدد الضغطات

بدأه ADEL29 في 19 أكتوبر 2013 · 4 رد · 468 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

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

 

كيف استطيع ان امنع البرنامج  ان يشتغل اكثر من مره

#2

أنشيء mutex عند تشغيل البرنامج أوّل مرة بعدها يمكنك استخدامها لمعرفة وجود نسخة من البرنامج مع عدمه، انظر لهذا المقال: إنشاء تطبيق لاتعمل منه الا نسخة واحدة

 

هذا مثال بـC# على برنامج رسومي، فقط اضف مابين التعليقات \****\ وغير ما أشرت إليه:

 

using System;
using System.Collections.Generic;
using System.Windows.Forms;

/*******************************************************/
using System.Runtime.InteropServices; // DllImport
using System.Threading; // Mutex
/*******************************************************/


namespace SingleInstanceApp
{

    static class Program
    {

        /*******************************************************/
        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool SetForegroundWindow(IntPtr hWnd);
        /*******************************************************/


        [STAThread]
        static void Main()
        {
            /*******************************************************/
            Mutex mutex;

            try {
                mutex = Mutex.OpenExisting("MyMutex"); // غيره اسم الميوتكس لماتريد
                IntPtr hConsoleWindow = FindWindow(null, "Form1"); // غيره لاسم نافذة برنامجك
                SetForegroundWindow(hConsoleWindow);
                System.Environment.Exit(0);
            } catch (WaitHandleCannotBeOpenedException) {
                mutex = new Mutex(false, "MyMutex");
            }
            /*******************************************************/

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

        }
    }
}
#3

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

شكرا لك استاذي واخي

تم تعديل هذه المشاركة بواسطة ADEL29 في 19 أكتوبر 2013 في 09:30

#4

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

 

لكن  في بعض الاحيان  اغلق البرنامج  ثم  اضغط على الايقونه لتشغيله مره ثانيه فيرفض بحجه ان البرنامج شغال 

فقمت  بالذهاب windous task manager  فوجدت process   باسم برنامجي

 

اذا كيف اقوم بقتل هذا process اذا اغلقت البرنامج

#5

عند إغلاق البرنامج قم باستخدام على زر الاغلاق أو في Form_Closing طبعا للفورم الرئيسي فقط

Application.Exit();

||***************************************************||


 ||بسم الله الذي لا يعلو على اسمه شيء في الارض ولا في السماء وهو العلي العظيم ||


||***************************************************||


 ||                             اللهم إن لم يكن بك غضب علي فلا ابالي                       ||


||***************************************************||


في المنتديات العلمية استخدام التقييم rep_up.png  rep_down.png  يرفع من قيمة الموضوع واهمية الرد

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

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

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

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

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