WinForms) 如何强制某窗体获得焦点?

文章正文
发布时间:2025-07-30 12:07

有两个API函数
[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr GetForegroundWindow(); //获得当前活动窗体的句柄
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
public static extern bool SetForegroundWindow(IntPtr hWnd);//设置此窗体句柄的窗体为活动窗体

因为每个窗体的句柄都是唯一的,所以你先保存下你窗体的句柄(this.IntPtr获得),然后用一个Timer,设置间隔为1秒或者自己定个时间。
然后你用Api函数GetForegroundWindow(),此函数返回一个当前活动窗体的句柄,你和自己窗体的句柄比较,如果相同什么也不做。如果不同,则用SetForegroundWindow(this.IntPtr)设置自己为活动窗体,如果还嫌不够可以去看下SendMessage API函数发一个消息把前一个窗体最小化或者关了。

活动窗体就是当前具有输入焦点,或者说用户正在使用的窗体。

首页
评论
分享
Top