Win32程序在启动时怎么激活前一个启动程序的窗口
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,这篇文章主要介绍了Win32程序在启动时怎么激活前一个启动程序的窗口,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。UWP 程序天生单实
千家信息网最后更新 2025年12月04日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安全错误
数据库的锁怎样保障安全
电梯优迈服务器怎么用
原神ps5无法连接服务器
dba分布式数据库
浪潮英信服务器硬盘插槽
计算机网络技术的专业岗位
登录mysql服务器的方法
张店计划管理软件开发
数据库服务器名称忘了咋办
小白怎么才能入门网络安全
计算机网络安全04751资料
徐州财经计算机网络技术代码
c 软件开发经理面试题
普法进行时网络安全第三章
统一软件开发过程博客
阿里云服务器流量攻击
班会培养网络安全意识小结
迅雷服务器怎么收费
怎么删除数据库表中的数据
福州海西科技园服务器公司叫什么
网络技术都有什么模式
软件开发学习什么
软件开发的费用计入什么科目
windows登陆服务器
开源软件扫描数据库漏洞
服务器硬盘100%
搜索儿童网络安全手抄报
山西正规软件开发服务以客为尊
gs360数据库
微信小程序 访问阿里云数据库
谷歌互联网科技有公司