保证应用程序只有一个实例在运行

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

[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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航