다음을 통해 공유


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