SetForegroundWindow 函数 (winuser.h)

将创建指定窗口的线程引入前台并激活窗口。 键盘输入将定向到窗口,并为用户更改各种视觉提示。 系统为创建前台窗口的线程分配的优先级略高于其他线程。

语法

BOOL SetForegroundWindow(
  [in] HWND hWnd
);

参数

[in] hWnd

类型:HWND

应激活并带到前台的窗口的句柄。

返回值

类型: BOOL

如果窗口已带到前台,则返回值为非零值。

如果未将窗口带到前台,则返回值为零。

注解

系统限制哪些进程可以设置前台窗口。 仅当以下项时,进程才能通过调用 SetForegroundWindow 来设置前台窗口:

  • 以下所有条件均为 true:
  • 此外,至少满足以下条件之一:
    • 调用进程是前台进程。
    • 调用进程由前台进程启动。
    • 当前没有前台窗口,因此没有前台进程。
    • 调用进程收到了最后一个输入事件。
    • 正在调试前台进程或调用进程。

即使进程满足这些条件,也有可能拒绝设置前台窗口的权利。

当用户使用另一个窗口时,应用程序无法将窗口强制到前台。 相反,Windows 会闪烁窗口的任务栏按钮来通知用户。

可以设置前台窗口的进程可以通过调用 AllowSetForegroundWindow 函数使另一个进程能够设置前台窗口。 由 AllowSetForegroundWindowdwProcessId 参数指定的进程将失去在用户下次生成输入时设置前台窗口的能力,除非输入定向到该进程,或进程下次调用 AllowSetForegroundWindow 时,除非指定了与上次对 AllowSetForegroundWindow 的调用相同的进程。

前台进程可以通过调用 LockSetForegroundWindow 函数来禁用对 SetForegroundWindow 的 调用。

示例

下面的代码示例演示如何使用 SetForegroundWindow

// If the window is invisible we will show it and make it topmost without the
// foreground focus. If the window is visible it will also be made the
// topmost window without the foreground focus. If wParam is TRUE then
// for both cases the window will be forced into the foreground focus
if (uMsg == m_ShowStageMessage) {
    BOOL bVisible = IsWindowVisible(hwnd);
    SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0,
                    SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW |
                    (bVisible ? SWP_NOACTIVATE : 0));
    // Should we bring the window to the foreground
    if (wParam == TRUE) {
        SetForegroundWindow(hwnd);
    }
    return (LRESULT) 1;
}

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll
API 集 在 Windows 8) 中引入的 ext-ms-win-ntuser-window-l1-1-0 (

另请参阅

AllowSetForegroundWindow

概念性

FlashWindowEx

GetForegroundWindow

LockSetForegroundWindow

引用

SetActiveWindow

Windows