网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > .Net >

C# 保持程序唯一性打开的一种方式

时间:2024-11-21 17:08

人气:

作者:admin

标签:

导读:概述 之前在博客园找了好久,就这么一个小功能,卡了好几天没解决就只能暂时放弃,直到半年后才偶然看到同事写的,感觉挺好的,记录一下顺便分享。有用可以点个赞。转载请注明...
  • 概述

    之前在博客园找了好久,就这么一个小功能,卡了好几天没解决就只能暂时放弃,直到半年后才偶然看到同事写的,感觉挺好的,记录一下顺便分享。有用可以点个赞。转载请注明出处,谢谢。

 

  • 代码:查看程序是否已经运行

/// <summary>
/// 查看程序是否已经运行
/// </summary>
/// <returns></returns>
public static Process GetExistProcess()
{
    Process currentProcess = Process.GetCurrentProcess();//当前程序
    foreach (Process process1 in Process.GetProcessesByName(currentProcess.ProcessName))
    {
        //同名程序有2个或者2个以上
        if (process1.Id != currentProcess.Id)
        {
            return process1;//返回另外一个同名程序的进程
        }
    }
    return null;
}

 

  • 代码:调用

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

        var runningProcess = GetExistProcess();
        if (runningProcess != null) //同名程序已经在运行
        {
            IntPtr mainWindowHandle1 = runningProcess.MainWindowHandle;
            if (mainWindowHandle1 == IntPtr.Zero)//窗口被隐藏了
            {
                //目标窗体的 Text 属性中的字符串
                mainWindowHandle1 = FindWindow(null, "唯一程序");
            }
            ShowWindowAsync(mainWindowHandle1, 1);
            SetForegroundWindow(mainWindowHandle1);
        }
        else
        {
            Application.Run(new MainForm());
        }

    }
}

 

 

代码:Win32API

//根据任务栏应用程序显示的名称找窗口的名称
[DllImport("User32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

/// <summary>
/// 该函数设置由不同线程产生的窗口的显示状态
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="nCmdShow">指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分</param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);

/// <summary>
/// 该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。
/// </summary>
/// <param name="hWnd"></param>
/// <returns>如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零</returns>
[DllImport("user32.dll ")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信