C#winfrom中应用程序只启动一次代码
2013-06-19 13:36
453 查看
static class Program
{
private const int WS_SHOWNORMAL = 1;
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Process instance = GetRunningInstance();
if (instance==null)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Login());
}
else
{
HandleRunningInstance(instance);
}
}
public static Process GetRunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
//遍历正在有相同名字运行的例程
foreach (Process process in processes)
{
//忽略现有的例程
if (process.Id != current.Id)
//确保例程从EXE文件运行
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("/" , "\\") == current.MainModule.FileName )
return process;
}
return null;
}
/// <summary>
/// 激活原有的进程。
/// </summary>
/// <param name="instance"></param>
public static void HandleRunningInstance(Process instance)
{
ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL);
SetForegroundWindow(instance.MainWindowHandle);
}
}
看了评论,学习了新的方法。
void Mian()
{
bool isStart;
Mutex MyMutex = new Mutex(true, "RunOne", out isStart);
if (isStart)
{
启动程序
Application.Run(new Form());
}
else{
//程序已经启动
}
}
{
private const int WS_SHOWNORMAL = 1;
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Process instance = GetRunningInstance();
if (instance==null)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Login());
}
else
{
HandleRunningInstance(instance);
}
}
public static Process GetRunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
//遍历正在有相同名字运行的例程
foreach (Process process in processes)
{
//忽略现有的例程
if (process.Id != current.Id)
//确保例程从EXE文件运行
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("/" , "\\") == current.MainModule.FileName )
return process;
}
return null;
}
/// <summary>
/// 激活原有的进程。
/// </summary>
/// <param name="instance"></param>
public static void HandleRunningInstance(Process instance)
{
ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL);
SetForegroundWindow(instance.MainWindowHandle);
}
}
看了评论,学习了新的方法。
void Mian()
{
bool isStart;
Mutex MyMutex = new Mutex(true, "RunOne", out isStart);
if (isStart)
{
启动程序
Application.Run(new Form());
}
else{
//程序已经启动
}
}
相关文章推荐
- C# winfrom 模拟ftp文件管理实现代码
- C#只允许启动一个WinFrom进程的两种方法
- winform窗体中嵌入网页(DHTML代码和winfrom应用程序交互)
- winform窗体中嵌入网页(DHTML代码和winfrom应用程序交互)
- C# winfrom 长时间检查不到操作,自动关闭应用程序
- C# winfrom下即时显示输出信息 ,比如for循环不等执行完一次输出
- [C# FAQ]C#代码中如何启动另一个应用程序或批处理程序?
- C# winfrom 长时间检查不到操作,自动关闭应用程序
- C#Winfrom中,窗体加载时会自动执行一次控件的textchange事件,怎么让它不执行?
- winform窗体中嵌入网页(DHTML代码和winfrom应用程序交互)
- C# winfrom 长时间检查不到操作,自动关闭应用程序
- C#.NET WINFORM应用程序中控制应用程序只启动一次
- WinForm+C#代码实现控制应用程序自启动功能
- winform窗体中嵌入网页(DHTML代码和winfrom应用程序交互)
- winform窗体中嵌入网页(DHTML代码和winfrom应用程序交互)
- C#.NET WINFORM应用程序中控制应用程序只启动一次
- C#只允许启动一个WinFrom进程
- WinForm+C#代码实现控制应用程序自启动功能
- c# winfrom资源文件的调用和路径全解
- C# 实现程序只启动一次(多次运行激活第一个实例,使其获得焦点,并在最前端显示)