using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Reflection;
namespace SmsSoft
{
static class Program
{
/// <summary>
/// 该函数设置由不同线程产生的窗口的显示状态。
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="cmdShow">指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分。</param>
/// <returns>如果函数原来可见,返回值为非零;如果函数原来被隐藏,返回值为零。</returns>
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
/// <summary>
/// 该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。
/// </summary>
/// <param name="hWnd">将被激活并被调入前台的窗口句柄。</param>
/// <returns>如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零。</returns>
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
//Application.EnableVisualStyles();
//Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Process instance = RunningInstance();
if (instance == null)
{
//Form1 frm = new Form1();
Application.Run(new Form1());
}
else
{
HandleRunningInstance(instance);
}
}
/// <summary>
/// 获取正在运行的实例,没有运行的实例返回null;
/// </summary>
public 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;
}
/// <summary>
/// 显示已运行的程序。
/// </summary>
public static void HandleRunningInstance(Process instance)
{
ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); //显示,可以注释掉
SetForegroundWindow(instance.MainWindowHandle); //放到前端
}
}
}
分享到:
相关推荐
c# 只允许运行一个实例 代码 和 可运行程序
C#程序只允许运行一个实例的解决方案
只许一个实例运行,防止多个实例运行
VB源代码,已调试通过。只允许运行程序的一个实例。
本文和大家讲一下如何使用C#来创建系统中只能有该程序的一个实例运行。要实现程序的互斥,通常有下面几种方式,下面用 C# 语言来实现:方法一:使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例.把program.cs...
ATL只允许一个实例运行
MFC编写的控制MFC程序,判断只能运行一次,编译成功,能够直接用
本文主要介绍WinFrom程序中只允许运行一个实例的方法,并有完整的代码示例,希望能给需要的朋友一些帮助。
VC++ 只运行一个程序实例
主要介绍了Python实现保证只能运行一个脚本实例,本文直接给出实现代码,需要的朋友可以参考下
program OnlyOne; uses Forms, Windows, Dialogs, UnitMain in 'UnitMain.pas' {Form1}; resourcestring FMutex = 'MUTEX_ONLY_ONE'; //互斥对象名 {$R *.res} var hMutex:HWND; iRet:Integer;...begin
一台电脑上只允许运行一个程序实例,再次重复打开程序打不开。
NULL 博文链接:https://emonkey.iteye.com/blog/1618703
InnoSetup只能运行一个实例&唯一进程
1、使用用互斥量(System.Threading.Mutex) 2、将以运行实例窗体置顶
+增加同个目录只允许运行一个实例的自动处理; *修正开启服务过程中碰到异常时,没有修改实例状态的错误; +支持强制使用默认实例,也就是使用1433端口和空实例名。 ps:升级了tools目录下的makesql和runsql,均...
当应用程序已经在运行, 再次运行该应用程序时,通常只是把该应用程序的窗口提到前面来,把新的命令行参数传递给第一个运行实例,而第二个实例退出。这在传统的单进程多线程的手机 平台中,实现是简单而直接的,而在...
程序浏览图像用的是GDI+库。 程序默认打开时会播放内置的一个Gif动态图片,窗口形状根据图片动态调整。...程序只允许运行一个实例。注册了两个热键:Shift+F8和Shift+F9。 有问题联系:hastings1986@163.com