SetAdditionalForegroundBoostProcesses 函数 (Winuser.h)
SetAdditionalForegroundBoostProcesses 是一种性能辅助 API,可帮助应用程序使用多进程应用程序模型,其中多个进程作为数据或呈现为前台体验做出贡献。 示例包括浏览器 (,浏览器管理器或框架、选项卡、插件等托管在不同进程中) 和 IDE (生成编译进程和其他任务) 。
应用程序可以使用此 API 为辅助进程提供前台优先级提升,从而帮助支持main应用程序。 当应用程序的顶级窗口位于前台时,此类应用程序可以对其所有构成进程应用统一优先级提升。
语法
BOOL SetAdditionalForegroundBoostProcesses(
HWND topLevelWindow,
DWORD processHandleCount,
HANDLE *processHandleArray
);
参数
topLevelWindow
顶级窗口的句柄 (应用程序的 HWND) 。
processHandleCount
processHandleArray 中的进程句柄数。 此函数一次最多可以调用 32 个句柄。 将此参数设置为 0 ,同时将 processHandleArray 设置为 NULL 以清除先前的提升配置。
processHandleArray
要提升前台或取消提升的一组进程句柄。 将此参数设置为 NULL ,同时将 processHandleCount 设置为 0 以清除先前的提升配置。
返回值
如果调用成功提升应用程序,则返回 TRUE ;否则返回 FALSE 。 SetAdditionalForegroundBoostProcesses 设置最后一个错误代码,因此,如果调用失败,应用程序可以调用 GetLastError () 以获取扩展信息 (例如ERROR_INVALID_PARAMETER、ERROR_NOT_ENOUGH_MEMORY或ERROR_ACCESS_DENIED) 。
注解
此函数采用一组进程句柄,当传入的顶级 HWND 分别移动到前台或后台时,所有进程句柄都会得到前台提升或取消提升。 每当传入的顶级 HWND 成为前台窗口时,前台提升也将应用于句柄数组中传递的进程。 当顶级 HWND 移动到后台时,会发生类似的解除提升。
传递给此函数的顶级 HWND 必须由调用进程拥有。 调用进程应该对 processHandleArray 中的进程句柄具有PROCESS_SET_INFORMATION访问权限 - 换句话说,你必须完全控制进程中的每个窗口。 如果某个外部组件注入了采用前景的窗口,或者如果出现对话框,则会失去提升。
如果有两个顶级窗口,则需要为每个窗口调用此函数。
如果在调用 SetAdditionalForegroundBoostProcesses 时,传入的顶级 HWND 已在前台,则 processHandleArray 中的所有进程都会立即提升。
仅当顶级 HWND 成为前台窗口时,其句柄位于 processHandleArray 中的进程才会获得前台提升。
仅当出现时,才应用其他前台提升:
- 前台窗口更改,或者
- 如果在窗口位于前台且新列表具有进程句柄时调用此函数,或者该列表在以前包含时不包含进程句柄。
当拥有顶级 HWND 的进程退出或终止时,额外的提升关系将中断,辅助进程不会收到任何其他前台提升。
主进程的顶级 HWND 将继续保留对辅助进程的引用,直到主进程的顶级 HWND 清除其分组提升状态,或销毁 HWND。
示例
在此简单方案中,应用程序在创建顶级窗口时设置其前台进程提升配置。 处理WM_CREATE时,使用 lParam 中的句柄和 wParam 中的句柄计数调用函数。 当 m_AppWindow 移入和移出前台窗口时,这些进程将提升前台或后台优先级。 如果在调用函数时 m_AppWindow 为前台窗口,则进程还将立即获得前台优先级提升。
case WM_CREATE:
//
// Configure the passed in worker processes (handles) in lParam, to get foreground priority boost when m_AppWindow moves in and
// out of the foreground.
//
HANDLE *pMyHandles = retinterpret_cast<HANDLE*>(lParam);
DWORD cHandles = reinterpret_cast<DWORD>(wParam);
If (!SetAdditionalForegroundBoostProcesses(m_AppWindow, cHandles, pMyHandles))
{
printf(“SetAdditionalForegroundBoostProcesses() setup failed with error code : %d\n”, GetLastError());
}
break;
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 11内部版本 22621 |
标头 | Winuser.h(包括 Windows.h) |
Library | User32.lib |
DLL | User32.dll |