首页 > Windows开发 > 详细

WinForm只能运行一个实例,存在则激活

时间:2021-05-18 12:31:04      阅读:21      评论:0      收藏:0      [点我收藏+]

思路

通过Process类获取当前运行的实例,存在时通过User32.dll接口激活窗口。

MainHelper

public class MainHelper
{
    public static Process RunningInstance(string location)
    {
        var current = Process.GetCurrentProcess();
        var processes = Process.GetProcessesByName(current.ProcessName);
        foreach (Process process in processes)
        {
            if (process.Id != current.Id)
            {
                if (location.Replace("/", @"\") == current.MainModule.FileName)
                {
                    return process;
                }
            }
        }
        return null;
    }

    public static void Active(Process instance)
    {
        ShowWindowAsync(instance.MainWindowHandle, 3);
        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);
}

调用示例

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    var location = Assembly.GetExecutingAssembly().Location;
    var instance = MainHelper.RunningInstance(location);
    if (instance != null)
    {
        MainHelper.Active(instance);
    }
    else
    {
        Application.Run(new Form1());
    }
}

WinForm只能运行一个实例,存在则激活

原文:https://www.cnblogs.com/known/p/14779778.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!