SetForegroundWindow 함수(winuser.h)
지정된 창을 만든 스레드를 포그라운드로 가져와 창을 활성화합니다. 키보드 입력은 창으로 이동되며 사용자에 대한 다양한 시각적 신호가 변경됩니다. 시스템은 포그라운드 창을 만든 스레드에 다른 스레드보다 약간 더 높은 우선 순위를 할당합니다.
구문
BOOL SetForegroundWindow(
[in] HWND hWnd
);
매개 변수
[in] hWnd
형식: HWND
활성화되어 포그라운드로 가져와야 하는 창에 대한 핸들입니다.
반환 값
형식: BOOL
창이 전경으로 가져온 경우 반환 값은 0이 아닌 값입니다.
창이 포그라운드로 가져오지 않은 경우 반환 값은 0입니다.
설명
시스템은 포그라운드 창을 설정할 수 있는 프로세스를 제한합니다. 프로세스는 다음과 같은 경우에만 SetForegroundWindow 를 호출하여 포그라운드 창을 설정할 수 있습니다.
- 다음 조건은 모두 true입니다.
- 호출 프로세스는 UWP 앱이나 Windows 8 또는 8.1용으로 설계된 Windows 스토어 앱이 아닌 데스크톱 애플리케이션에 속합니다.
- 전경 프로세스는 LockSetForegroundWindow 함수에 대한 이전 호출로 SetForegroundWindow에 대한 호출을 사용하지 않도록 설정하지 않았습니다.
- 포그라운드 잠금 제한 시간이 만료되었습니다(SystemParametersInfo의 SPI_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 도입) |
추가 정보
개념
참조