public static Process RunningInstance() |
Process current = Process.GetCurrentProcess(); |
Process[] processes = Process.GetProcessesByName (current.ProcessName);
|
//Loop through the running processes in with the same name |
foreach (Process process in processes) |
//Ignore the current process |
if (process.Id != current.Id) |
//Make sure that the process is running from the exe file. |
if (Assembly.GetExecutingAssembly().Location.Replace("/", "//") == current.MainModule.FileName) |
//Return the other process instance. |
//No other instance was found, return null. |
Public Shared Function RunningInstance() As Process |
Dim current As Process = Process.GetCurrentProcess() |
Dim processes As Process() = Process.GetProcessesByName(current.ProcessName) |
'Loop through the running processes in with the same name |
For Each process In processes |
'Ignore the current process |
If process.Id <> current.Id Then |
'Make sure that the process is running from the exe file. |
If [Assembly].GetExecutingAssembly().Location.Replace("/", "/") = current.MainModule.FileName Then |
'Return the other process instance. |
'No other instance was found, return null. |
End Function 'RunningInstance |
如果检测到已有窗体实例,将此实例显示出来参考:
[STAThread] static void Main() { //Get the running instance. Process instance = RunningInstance(); if (instance == null) { //There isn't another instance, show our form. Application.Run (new Form2()); } else { //There is another instance of this process. HandleRunningInstance(instance); } } public static Process RunningInstance() { Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName (current.ProcessName); //Loop through the running processes in with the same name foreach (Process process in processes) { //Ignore the current process if (process.Id != current.Id) { //Make sure that the process is running from the exe file. if (Assembly.GetExecutingAssembly().Location.Replace("/", "//") ==current.MainModule.FileName) { //Return the other process instance. return process; } } } //No other instance was found, return null. return null; } public static void HandleRunningInstance(Process instance) { //Make sure the window is not minimized or maximized ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL); //Set the real intance to foreground window SetForegroundWindow (instance.MainWindowHandle); } [DllImport("User32.dll")] private static extern bool ShowWindowAsync( IntPtr hWnd, int cmdShow); [DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); private const int WS_SHOWNORMAL = 1 |
来源:http://blog.csdn.net/acewang/archive/2004/02/05/17627.aspx