Share via


SetForegroundWindow 함수(winuser.h)

지정된 창을 만든 스레드를 포그라운드로 가져와 창을 활성화합니다. 키보드 입력은 창으로 이동되며 사용자에 대한 다양한 시각적 신호가 변경됩니다. 시스템은 포그라운드 창을 만든 스레드에 다른 스레드보다 약간 더 높은 우선 순위를 할당합니다.

구문

BOOL SetForegroundWindow(
  [in] HWND hWnd
);

매개 변수

[in] hWnd

형식: HWND

활성화되어 포그라운드로 가져와야 하는 창에 대한 핸들입니다.

반환 값

형식: BOOL

창이 전경으로 가져온 경우 반환 값은 0이 아닌 값입니다.

창이 포그라운드로 가져오지 않은 경우 반환 값은 0입니다.

설명

시스템은 포그라운드 창을 설정할 수 있는 프로세스를 제한합니다. 프로세스는 다음과 같은 경우에만 SetForegroundWindow 를 호출하여 포그라운드 창을 설정할 수 있습니다.

  • 다음 조건은 모두 true입니다.
    • 호출 프로세스는 UWP 앱이나 Windows 8 또는 8.1용으로 설계된 Windows 스토어 앱이 아닌 데스크톱 애플리케이션에 속합니다.
    • 전경 프로세스는 LockSetForegroundWindow 함수에 대한 이전 호출로 SetForegroundWindow에 대한 호출을 사용하지 않도록 설정하지 않았습니다.
    • 포그라운드 잠금 제한 시간이 만료되었습니다(SystemParametersInfoSPI_GETFOREGROUNDLOCKTIMEOUT 참조).
    • 활성 메뉴가 없습니다.
  • 또한 다음 조건 중 하나 이상이 true입니다.
    • 호출 프로세스는 포그라운드 프로세스입니다.
    • 호출 프로세스는 포그라운드 프로세스에 의해 시작되었습니다.
    • 현재 포그라운드 창이 없으므로 포그라운드 프로세스가 없습니다.
    • 호출 프로세스에서 마지막 입력 이벤트를 수신했습니다.
    • 포그라운드 프로세스 또는 호출 프로세스가 디버그되고 있습니다.

프로세스가 이러한 조건을 충족하더라도 전경 창을 설정할 수 있는 권한이 거부될 수 있습니다.

사용자가 다른 창으로 작업하는 동안 애플리케이션은 창을 포그라운드로 강제 적용할 수 없습니다. 대신 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 포함)
라이브러리 User32.lib
DLL User32.dll
API 세트 ext-ms-win-ntuser-window-l1-1-0(Windows 8 도입)

추가 정보

AllowSetForegroundWindow

개념

FlashWindowEx

GetForegroundWindow

LockSetForegroundWindow

참조

SetActiveWindow

Windows