首页 > 编程语言 >【C#】重新拉起程序并显示在最前面

【C#】重新拉起程序并显示在最前面

时间:2024-09-27 09:36:27浏览次数:1  
标签:IntPtr const 前面 C# SW 程序 int 窗口 public

1.封装windows API类

 /// <summary>
 /// 封装Windows API的类
 /// </summary>
 public class WindowAPIMethodsUtility
 {
     public const int WM_USER = 0x400;
     public const int WM_SHOWMYMAINWINDOW = WM_USER + 1;
     public const int HWND_BROADCAST = 0xffff;
     #region 窗体显示
     //隐藏窗口并激活另一个窗口
     public const int SW_HIDE = 0;
     //激活并显示窗口。 如果窗口最小化、最大化或排列,系统会将其还原到其原始大小和位置
     public const int WS_SHOWNORMAL = 1;
     //激活窗口并将其显示为最小化窗口
     public const int SW_SHOWMINIMIZED = 2;
     //激活窗口并显示最大化的窗口
     public const int SW_SHOWMAXIMIZED = 3;
     //以最近的大小和位置显示窗口
     public const int SW_SHOWNOACTIVATE = 4;
     //激活窗口并以当前大小和位置显示窗口
     public const int SW_SHOW = 5;
     //最小化指定的窗口,并按 Z 顺序激活下一个顶级窗口
     public const int SW_MINIMIZE = 6;
     //将窗口显示为最小化窗口。 此值类似于 SW_SHOWMINIMIZED,但窗口未激活
     public const int SW_SHOWMINNOACTIVE = 7;
     //以当前大小和位置显示窗口。 此值类似于 SW_SHOW,只是窗口未激活
     public const int SW_SHOWNA = 8;
     //激活并显示窗口。 如果窗口最小化、最大化或排列,系统会将其还原到其原始大小和位置
     public const int SW_RESTORE = 9;
     //根据启动应用程序的程序传递给 CreateProcess 函数的 STARTUPINFO 结构中指定的SW_值设置显示状态
     public const int SW_SHOWDEFAULT = 10;
     //最小化窗口,即使拥有窗口的线程没有响应。 仅当最小化不同线程的窗口时,才应使用此标志。
     public const int SW_FORCEMINIMIZE = 11;
     #endregion

     [DllImport("user32.dll")]
     public static extern bool PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

     [DllImport("user32.dll", SetLastError = true)]
     public static extern IntPtr FindWindow(string? lpClassName, string lpWindowName);

     [DllImport("user32.dll ")]
     //设置窗体置顶
     public static extern bool SetForegroundWindow(IntPtr hWnd);

     [DllImport("User32.dll")]
     public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

     [DllImport("User32.dll")]
     public static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
 }

2.拉起软件并显示在窗体最前面

//软件进程名称
string MutexName="Demo";
/// <summary>
/// 有程序运行,设置焦点
/// </summary>
private void Focus()
{
    foreach (Process process in Process.GetProcesses())
    {
        try
        {
            if (process.ProcessName.ToLower() != MutexName.ToLower())
                continue;
            IntPtr hwnd = process.MainWindowHandle;
            if (hwnd != IntPtr.Zero)
            {
                //重新拉起程序并显示最前
                WindowAPIMethodsUtility.ShowWindow(hwnd, WindowAPIMethodsUtility.SW_SHOWMAXIMIZED);
                WindowAPIMethodsUtility.SetForegroundWindow(hwnd);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

标签:IntPtr,const,前面,C#,SW,程序,int,窗口,public
From: https://www.cnblogs.com/qiutian-hao/p/18435022

相关文章

  • PbootCMS如何输出当前页面的完整url
    在PBootCMS中,输出当前页面的完整URL可以通过组合使用一些内置标签来实现。以下是如何输出当前页面的完整URL的具体方法:方法一:使用 {pboot:httpurl} 和 {content:link}如果你需要输出当前页面的完整URL,可以结合使用 {pboot:httpurl} 和 {content:link} 标签。具体示例如下......
  • 纷享销客生态伙伴大会西安站圆满落幕,共话CRM新纪元
    9月19日,以“智享未来,领创CRM新纪元”为主题的纷享销客生态伙伴大会在西安成功举办。本次会议汇聚了SaaS领域、软件行业以及TOB市场的杰出代表、行业领袖以及技术前沿专家,共同探讨SaaSCRM行业的当前发展趋势,并就AI在CRM领域的创新应用及未来发展进行了深入交流与研讨。纷享销客联......
  • pbootcms常用标签代码集合
    内容整理成表格的形式,便于查阅和使用:功能标签参数示例说明模板文件嵌套引用{includefile=***.html}无{includefile=head.html}可以嵌套使用,如:index.html 嵌套 head.html,同时 head.html 中嵌套 comm.html。支持使用子目录。时间格式化标签[list:date]<......
  • pbootcms模板调用友情链接标签代码
    在PBootCMS中,调用友情链接标签非常方便,可以根据不同的需求进行定制化展示。以下是如何使用{pboot:link}标签来调用友情链接的具体示例和解释:友情链接列表示例假设我们需要在一个页面上展示指定分组(如分组ID为1)的友情链接,并且限制显示数量为3个:{pboot:linknum=3gid=1}......
  • C语言入门到精通(第六版)——第七章
    7.1、循环语句    C语言中程序可以通过判断、检验条件做出选择,帮我们解决很多问题,除此之外,程序还可以执行重复,直到满足条件为止,例如,while、do...while和for语句。7.2、while语句    使用while语句可以解决某个条件满足时需要反复执行某个循环体的问题,表达式......
  • Pbootcms一级栏目下的二级三级栏目高亮
    你的代码确实可以实现对当前浏览的二级或三级栏目的高亮显示。以下是你提供的代码,并添加了高亮逻辑:{pboot:navparent={sort:tcode}}<ahref="[nav:link]">{nav:name}{pboot:2navparent=[nav:scode]}-<ahref="[2nav:link]"{pboot:if('[2nav:sc......
  • ABC262G 题解
    LISwithStack观察到\(n\le50\),考虑区间dp。设\(dp(l,r,x,y)\)表示区间\([l,r]\)中选出的子序列的最小值\(\gex\),最大值\(\ley\)的方案数。根据栈的性质,设元素\(x\)入栈的时间为\(in_x\),出栈时间为\(out_x\),那么所有元素构成的区间\([in_x,out_x]\)两......
  • pbootcms被挂马终极解决方案
    当PBootCMS网站被黑客攻击并挂马时,需要采取一系列措施来修复和防止再次被攻击。以下是一些具体的步骤和建议:解决方案替换核心文件替换apps和core文件夹的内容。如果本地没有备份,可以选择升级到最新版本,因为官方通常会修复已知的安全漏洞。修改robots.txt文件在robots......
  • 融云音视频RTC介绍
    融云提供的实时音视频(RTC)服务是基于WebRTC技术构建的,它允许开发者将实时音视频功能集成到他们的Web和移动应用程序中。融云的RTC服务支持多种平台,包括移动设备(Android、iOS、Flutter、uni-app、ReactNative)、Web(Javascript)和桌面(Electron)。融云的RTC服务具有以下特点和优势:......
  • IPSec VPN
    IPsecVPN是一种基于IPsec(InternetProtocolSecurity)协议来实现远程接入或站点到站点连接的虚拟专用网络(VirtualPrivateNetwork,VPN)技术。IPsec全称为InternetProtocolSecurity,是由InternetEngineeringTaskForce(IETF)定义的一套为IP网络提供安全性的协议和服务的......