SetForegroundWindow 関数 (winuser.h)

指定したウィンドウを作成したスレッドをフォアグラウンドに移動し、ウィンドウをアクティブにします。 キーボード入力がウィンドウに送られ、ユーザーのさまざまな視覚的な手掛かりが変更されます。 システムは、フォアグラウンド ウィンドウを作成したスレッドに、他のスレッドよりも少し高い優先度を割り当てます。

構文

BOOL SetForegroundWindow(
  [in] HWND hWnd
);

パラメーター

[in] hWnd

型: HWND

アクティブ化してフォアグラウンドに移動する必要があるウィンドウへのハンドル。

戻り値

種類: BOOL

ウィンドウが前景に移動された場合、戻り値は 0 以外です。

ウィンドウが前景に移動されなかった場合、戻り値は 0 になります。

注釈

フォアグラウンド ウィンドウを設定できるプロセスが制限されます。 プロセスは、次の場合にのみ SetForegroundWindow を 呼び出すことによってフォアグラウンド ウィンドウを設定できます。

  • 次の条件はすべて当てはまります。
    • 呼び出しプロセスはデスクトップ アプリケーションに属し、UWP アプリや、Windows 8 または 8.1 用に設計された Windows ストア アプリには属していません。
    • 前景プロセスでは、 LockSetForegroundWindow 関数の以前の呼び出しによって SetForegroundWindow の呼び出しが無効にされていません。
    • フォアグラウンド ロックタイムアウトの有効期限が切れています (「SystemParametersInfoSPI_GETFOREGROUNDLOCKTIMEOUT」を参照してください)。
    • アクティブなメニューはありません。
  • さらに、次の条件の少なくとも 1 つが当てはまります。
    • 呼び出し元のプロセスがフォアグラウンド プロセスです。
    • 呼び出し元のプロセスは、フォアグラウンド プロセスによって開始されました。
    • 現在、フォアグラウンド ウィンドウがないため、フォアグラウンド プロセスはありません。
    • 呼び出し元のプロセスは、最後の入力イベントを受信しました。
    • フォアグラウンド プロセスまたは呼び出し元プロセスのいずれかがデバッグ中です。

これらの条件を満たしていても、フォアグラウンド ウィンドウを設定する権限をプロセスが拒否される可能性があります。

ユーザーが別のウィンドウを操作している間は、アプリケーションでウィンドウをフォアグラウンドに強制することはできません。 代わりに、Windows によってウィンドウのタスク バー ボタンがフラッシュされ、ユーザーに通知されます。

フォアグラウンド ウィンドウを設定できるプロセスでは、 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 セット ext-ms-win-ntuser-window-l1-1-0 (Windows 8 で導入)

こちらもご覧ください

AllowSetForegroundWindow

概念

FlashWindowEx

GetForegroundWindow

LockSetForegroundWindow

リファレンス

SetActiveWindow

Windows