標籤:啟用 color 執行個體 else int 檔案路徑 was render ace
static
class
Program
{
/// <summary>
/// 應用程式的主進入點。
/// </summary>
[STAThread]
static
void
Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(
false
);
//1.這裡判定是否已經有執行個體在運行
//只運行一個執行個體
Process instance = RunningInstance();
if
(instance ==
null
)
{
//1.1 沒有執行個體在運行
Application.Run(
new
frmMain());
}
else
{
//1.2 已經有一個執行個體在運行
HandleRunningInstance(instance);
}
//Application.Run(new frmMain());
}
//2.在進程中尋找是否已經有執行個體在運行
#region 確保程式只運行一個執行個體
private
static
Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
//遍曆與當前進程名稱相同的進程列表
foreach
(Process process
in
processes)
{
//如果執行個體已經存在則忽略當前進程
if
(process.Id != current.Id)
{
//保證要開啟的進程同已經存在的進程來自同一檔案路徑
if
(Assembly.GetExecutingAssembly().Location.Replace(
"/"
,
"\\"
) == current.MainModule.FileName)
{
//返回已經存在的進程
return
process;
}
}
}
return
null
;
}
//3.已經有了就把它啟用,並將其視窗放置最前端
private
static
void
HandleRunningInstance(Process instance)
{
ShowWindowAsync(instance.MainWindowHandle, 1);
//調用api函數,正常顯示視窗
SetForegroundWindow(instance.MainWindowHandle);
//將視窗放置最前端
}
[DllImport(
"User32.dll"
)]
private
static
extern
bool
ShowWindowAsync(System.IntPtr hWnd,
int
cmdShow);
[DllImport(
"User32.dll"
)]
private
static
extern
bool
SetForegroundWindow(System.IntPtr hWnd);
#endregion
} 轉載 http://www.jb51.net/article/82124.htm
C# WinForm 判斷程式是否已經在運行,且只允許運行一個執行個體