[C#] |
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; |
} |
[VB.NET] |
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 |
Dim process As Process |
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. |
Return process |
End If |
End If |
Next process |
'No other instance was found, return null. |
Return Nothing |
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 |