次の方法で共有


SetAdditionalForegroundBoostProcesses 関数 (Winuser.h)

SetAdditionalForegroundBoostProcesses は、データまたはレンダリングとして、複数のプロセスがフォアグラウンド エクスペリエンスに寄与するマルチプロセス アプリケーション モデルを使用するアプリケーションを支援するパフォーマンス 支援 API です。 たとえば、ブラウザー (ブラウザー マネージャーまたはフレーム、タブ、プラグインなど、さまざまなプロセスでホストされている) と IDE (コンパイルやその他のタスクのプロセスを生成する) などがあります。

アプリケーションはこの API を使用して、メイン アプリケーションのサポートに役立つワーカー プロセスにフォアグラウンド優先度のブーストを提供できます。 このようなアプリケーションは、アプリケーションの最上位ウィンドウがフォアグラウンドにある場合に、すべての構成プロセスに適用される一様な優先度ブーストを持つことができます。

構文

BOOL SetAdditionalForegroundBoostProcesses(
  HWND   topLevelWindow,
  DWORD  processHandleCount,
  HANDLE *processHandleArray
);

パラメーター

topLevelWindow

アプリケーションの最上位ウィンドウ (HWND) へのハンドル。

processHandleCount

processHandleArray 内のプロセス ハンドルの数。 この関数は、最大 32 個のハンドルで一度に呼び出すことができます。 このパラメーターを 0 に設定し、 processHandleArrayNULL に設定して、以前のブースト構成をクリアします。

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アクセス権が必要です。つまり、プロセス内のすべてのウィンドウを完全に制御する必要があります。 一部の外部コンポーネントがフォアグラウンドを取るウィンドウを挿入した場合、またはダイアログ ボックスが表示された場合は、ブーストが失われます。

最上位のウィンドウが 2 つある場合は、それぞれに対してこの関数を呼び出す必要があります。

SetAdditionalForegroundBoostProcesses が呼び出されたときに、渡された最上位レベル HWND が既にフォアグラウンドにある場合、processHandleArray 内のすべてのプロセスがすぐに昇格されます。

ハンドルが processHandleArray 内にあるプロセスは、最上位の HWND がフォアグラウンド ウィンドウになった場合にのみフォアグラウンド ブーストを受け取ります。

追加のフォアグラウンド ブーストは、次の場合にのみ適用されます。

  1. フォアグラウンド ウィンドウが変更されるか、または
  2. ウィンドウがフォアグラウンドにあり、新しいリストにプロセス ハンドルがある間にこの関数が呼び出された場合、またはリストにプロセス ハンドルが以前に含まれていたときに含まれていない場合。

最上位の 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
Header Winuser.h (Windows.h を含む)
Library User32.lib
[DLL] User32.dll

こちらもご覧ください

SetForegroundWindow