we wish that it will show up the window of program being executed instead of forking a new program.
To achieve that, we just need to check the status in program.cs:
static void Main(){
if (frmMain.AlreadyRunning())
{
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
The function AlreadyRunning() is declared in frmMain.cs.public static bool AlreadyRunning()
{
/*
const int SW_HIDE = 0;
const int SW_SHOWNORMAL = 1;
const int SW_SHOWMINIMIZED = 2;
const int SW_SHOWMAXIMIZED = 3;
const int SW_SHOWNOACTIVATE = 4;
const int SW_RESTORE = 9;
const int SW_SHOWDEFAULT = 10;
*/
const int swRestore = 9;
var me = Process.GetCurrentProcess();
var arrProcesses = Process.GetProcessesByName(me.ProcessName);
if (arrProcesses.Length > 1)
{
for (var i = 0; i < arrProcesses.Length; i++)
{
if (arrProcesses[i].Id != me.Id)
{
// get the window handle
IntPtr hWnd = arrProcesses[i].MainWindowHandle;
// if iconic, we need to restore the window
//if (IsIconic(hWnd))
{
MessageBox.Show("Already running", "", MessageBoxButtons.OK);
ShowWindowAsync(hWnd, swRestore);
}
// bring it to the foreground
SetForegroundWindow(hWnd);
break;
}
}
return true;
}
return false;
}
沒有留言:
張貼留言