在没有焦点的情况下将窗户带到前面

时间:2012-08-22 16:38:03

标签: .net windows winforms winapi windows-7

我的.NET应用程序在后台运行,偶尔会创建并显示一个表单。表单应该在所有其他窗口上方可见,但没有焦点。

我的第一种方法是设置表单的TopMost属性,但在许多情况下由于我无法解释的原因而失败。

然后我尝试在Shown事件处理程序中调用BringToFront,但是没有做任何事情。

我还尝试了BringWindowToTop API,它返回true(=成功),但没有结果。

现在我遇到了SetForegroundWindow,它可以工作,但也可以将焦点放在窗口上(应该如此)。

任何建议都将不胜感激。

(另外,我可以毫无问题地偷走焦点是正常的吗?)

1 个答案:

答案 0 :(得分:2)

这可能会对您有所帮助:

[DllImport("user32.dll")]
public static extern bool SetWindowPos (IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
void Exmpl() {
    IntPtr HWND_TOPMOST = new IntPtr(-1);
    uint SWP_NOACTIVATE = 0x0010;
    uint SWP_NOMOVE = 0x0002;
    uint SWP_NOSIZE = 0x0001;
    SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}