C# 激活窗口

C# 激活窗口

窗体启动后,再次启动时判断进程是否存在,如果已经存在则直接拉起当前进程,前置显示并聚焦窗口。

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    Process instance = RunningInstance();
    if (instance == null)
    {
        Application.Run(new Form1(args));
    }
    else
    {
        HandleRunningInstance(instance, args);
    }
}

private 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;
}

private static void HandleRunningInstance(Process instance, string[] args)
{
    //ShowWindowAsync(instance.MainWindowHandle, 1); //调用api函数,正常显示窗口
    //SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端
    IntPtr handle = FindWindow(null, WindowUtils.getWindowTitle(args[7]));
    if (handle == IntPtr.Zero)
    {
        return;
    }
    SwitchToThisWindow(handle, true);
}       
posted @   txwtech  阅读(1312)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
历史上的今天:
2020-05-05 c++逻辑与或非优先级
点击右上角即可分享
微信分享提示