千家信息网

Win32程序在启动时怎么激活前一个启动程序的窗口

发表于:2025-02-12 作者:千家信息网编辑
千家信息网最后更新 2025年02月12日,这篇文章主要介绍了Win32程序在启动时怎么激活前一个启动程序的窗口,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。UWP 程序天生单实
千家信息网最后更新 2025年02月12日Win32程序在启动时怎么激活前一个启动程序的窗口

这篇文章主要介绍了Win32程序在启动时怎么激活前一个启动程序的窗口,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

UWP 程序天生单实例。当然,新 API (10.0.17134)开始也提供了多实例功能。不过,传统 Win32 程序可就要自己来控制单实例了。

激活之前进程的窗口

我们可以通过进程名称找到此前已经启动过的进程实例,如果发现,就激活它的窗口。

[STAThread]static void Main(string[] args){  var current = Process.GetCurrentProcess();  var process = Process.GetProcessesByName(current.ProcessName).FirstOrDefault(x => x.Id != current.Id);  if (process != null)  {    var hwnd = process.MainWindowHandle;    ShowWindow(hwnd, 9);    return;  }  // 启动自己的主窗口,此部分代码省略。}[DllImport("user32.dll")]private static extern int ShowWindow(IntPtr hwnd, uint nCmdShow);

你一定觉得那个 9 很奇怪,它是多个不同的 nCmdShow 的值:

Hide
Minimized
Maximized
Restore

另外,找到的窗口此时可能并不处于激活状态。例如在 Windows 10 中,此窗口可能在其他桌面上。那么我们需要添加额外的代码将其显示出来。

在前面的 ShowWindow 之后,再调用一下 SetForegroundWindow 即可将其激活到最前面来。如果在其他桌面,则会切换到对应的桌面。

[DllImport("USER32.DLL")]public static extern bool SetForegroundWindow(IntPtr hWnd);var hwnd = process.MainWindowHandle;ShowWindow(hwnd, 9);SetForegroundWindow(hwnd);

找到并激活窗口

以上方法适用于普通的主窗口。然而当窗口并不是进程的主窗口,或者 ShowInTaskBar 设为了 false 的时候就不生效了(此时窗口句柄会改变)。

于是,我们需要改用其他的方式来查找窗口。

[STAThread]static void Main(string[] args){  var hwnd = FindWindow(null, "那个窗口的标题栏文字");  if (hwnd != IntPtr.Zero)  {    ShowWindow(hwnd, 9);    return;  }  // 启动自己的主窗口,此部分代码省略。}[DllImport("user32.dll", CharSet = CharSet.Unicode)]public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

感谢你能够认真阅读完这篇文章,希望小编分享的"Win32程序在启动时怎么激活前一个启动程序的窗口"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

激活 程序 实例 篇文章 进程 代码 桌面 部分 不同 普通 价值 传统 兴趣 功能 句柄 可以通过 同时 名称 多个 文字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发在武汉的发展前景 csgo服务器怎么设置参数 西安管理软件开发费用多少 国家网络安全管理局副局长 软件开发公司的质量认证 中班网络安全教育课后反思 忘忧网络技术公司 谷饶提花系统软件开发商 全球电信运营商网络安全市场 网络安全审计系统说明 重庆税控服务器管理系统 天气app连接不上苹果服务器 网络安全是什么专业类别 校园网络安全的主题活动内容 嘉兴应用软件开发 西部数据库驱动 数据库最简单的问题 数据库没有写权限设置 深圳市易畅网络技术有限公司 软件开发人员数量泡沫 搜索 连接服务器是什么 西藏线下生鲜配送软件开发 举个实例说明网络技术的应用 java如何进行软件开发 云表服务器移植到别的电脑 电子邮箱数据库怎么输入 越秀软件开发哪里好 怎么将系统安装到服务器硬盘内 订单号数据库中的类型 杭州然趣网络技术有限公司杨锐
0