SetForegroundWindow 函数 (winuser.h)
将创建指定窗口的线程引入前台并激活窗口。 键盘输入将定向到窗口,并为用户更改各种视觉提示。 系统为创建前台窗口的线程分配的优先级略高于其他线程。
语法
BOOL SetForegroundWindow(
[in] HWND hWnd
);
参数
[in] hWnd
类型:HWND
应激活并带到前台的窗口的句柄。
返回值
类型: BOOL
如果窗口已带到前台,则返回值为非零值。
如果未将窗口带到前台,则返回值为零。
注解
系统限制哪些进程可以设置前台窗口。 仅当以下项时,进程才能通过调用 SetForegroundWindow 来设置前台窗口:
- 以下所有条件均为 true:
- 调用进程属于桌面应用程序,而不是针对 Windows 8 或 8.1 设计的 UWP 应用或 Windows 应用商店应用。
- 前台进程尚未通过对 LockSetForegroundWindow 函数的先前调用来禁用对 SetForegroundWindow 的 调用。
- 前台锁超时已过期, (在 SystemParametersInfo) 中看到SPI_GETFOREGROUNDLOCKTIMEOUT。
- 没有活动菜单。
- 此外,至少满足以下条件之一:
- 调用进程是前台进程。
- 调用进程由前台进程启动。
- 当前没有前台窗口,因此没有前台进程。
- 调用进程收到了最后一个输入事件。
- 正在调试前台进程或调用进程。
即使进程满足这些条件,也有可能拒绝设置前台窗口的权利。
当用户使用另一个窗口时,应用程序无法将窗口强制到前台。 相反,Windows 会闪烁窗口的任务栏按钮来通知用户。
可以设置前台窗口的进程可以通过调用 AllowSetForegroundWindow 函数使另一个进程能够设置前台窗口。 由 AllowSetForegroundWindow 的 dwProcessId 参数指定的进程将失去在用户下次生成输入时设置前台窗口的能力,除非输入定向到该进程,或进程下次调用 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 ( |
另请参阅
概念性
引用