في إطار خطة إيصال المعلومات إلى غاية عندكم و تماشيا مع إقتراحي السابق أقدم لكم هذا الكود الذي أعجبني كثيرا و لم أرد
تفويت الفرصة عليكم .
هذا الكود يمنع البرنامج من أن يشتغل مرتين في نفس الوقت .
ملاحظة : هذا الموضوع قمت بنسخه من موقع و هو للكاتب محمد حلبي جازاه الله خيرا .
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
class AppMain
{
[DllImport("user32.dll")] private static extern
bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")] private static extern
bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")] private static extern
bool IsIconic(IntPtr hWnd);
private const int SW_HIDE = 0;
private const int SW_SHOWNORMAL = 1;
private const int SW_SHOWMINIMIZED = 2;
private const int SW_SHOWMAXIMIZED = 3;
private const int SW_SHOWNOACTIVATE = 4;
private const int SW_RESTORE = 9;
private const int SW_SHOWDEFAULT = 10;
static void Main()
{
// جلب اسم البرنامج
string proc=Process.GetCurrentProcess().ProcessName;
// جلب كل البرامج التي تعمل الان
Process[] processes=Process.GetProcessesByName(proc);
// اذا كان هنالك اكثر من برنامح واحد يعمل...
if (processes.Length > 1)
{
// جلب اسم البرنامج
Process p=Process.GetCurrentProcess();
int n=0; // assume the other process is at index 0
// اذا كان معرف البرنامج هو معرف برنامجنا...
if (processes[0].Id==p.Id)
{
n=1;
}
// جلب قابض "handle" النافذة
IntPtr hWnd=processes[n].MainWindowHandle;
if (IsIconic(hWnd))
{
ShowWindowAsync(hWnd, SW_RESTORE);
}
// عرض النسخة الاولى وجلبها للامام
SetForegroundWindow(hWnd);
// الخروج من النسخة الحالية
return;
}
// اكتب باقي شيفرة برنامجك........
}
}أتمنى أني قد أفدتكم ، والله ولي التوفيق
