我工作例如。在 Firefox 中,我的 C#.NET 应用程序将其窗口置于最前面。没关系,但是当我使用 SendToBack() 隐藏表单时,它不会激活 Firefox 的窗口,所以尽管 Firefox 在前台,我必须单击窗口才能滚动,等等。如何激活C# 中先前聚焦的窗口?
我试过这些:
[DllImport("User32")]
private static extern int SetForegroundWindow(IntPtr hwnd);
[DllImport("user32.dll")]
static extern bool AllowSetForegroundWindow(int dwProcessId);
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[...]
AllowSetForegroundWindow(System.Diagnostics.Process.GetCurrentProcess().Id);
SendToBack();
SetForegroundWindow(GetForegroundWindow());
我希望在将我的窗口发回后,GetForegroundWindow 会返回上一个,但它不起作用。
其次,我尝试覆盖 WndProc,并处理 WM_ACTIVATE 消息以从 lParam 获取前一个窗口,但如果我使用 SetForegroundWindow() 和此句柄,它也不起作用。
protected override void WndProc(ref Message msg) {
if (msg.Msg == 0x0006) {
prevWindow = msg.LParam;
}
base.WndProc(ref msg);
}
[...]
SetForegroundWindow(prevWindow);