CoAllowSetForegroundWindow 함수(objbase.h)

이 함수는 전경 권한(포그라운드 창을 설정하는 권한)을 한 프로세스에서 다른 프로세스로 전달합니다. 포그라운드 권한이 있는 프로세스는 이 함수를 호출하여 해당 권한을 로컬 COM 서버 프로세스에 전달할 수 있습니다. CoAllowSetForegroundWindow를 호출하면 권한만 부여됩니다. 포그라운드 창 자체를 설정하지 않습니다. 포그라운드 및 포커스는 대상 COM 서버가 SetForegroundWindow 또는 간접적으로 수행하는 다른 API를 호출할 때만 클라이언트 애플리케이션에서 제거됩니다.

구문

HRESULT CoAllowSetForegroundWindow(
  [in] IUnknown *pUnk,
  [in] LPVOID   lpvReserved
);

매개 변수

[in] pUnk

대상 COM 서버의 프록시에 있는 IUnknown 인터페이스에 대한 포인터입니다.

[in] lpvReserved

이 매개 변수는 예약되어 있으며 NULL이어야 합니다.

반환 값

이 함수는 다음 값을 반환할 수 있습니다.

반환 코드 Description
S_OK
메서드를 성공적으로 수행했습니다.
E_INVALIDARG
lpvReserved 매개 변수가 NULL이 아닙니다.
E_NOINTERFACE
pUnk 매개 변수는 포그라운드 창 컨트롤을 지원하지 않습니다.
E_ACCESSDENIED
호출 프로세스에는 현재 포그라운드 권한이 없습니다.

설명

시스템은 SetForegroundWindowAllowSetForegroundWindow 함수를 호출하여 포그라운드 창을 설정할 수 있는 프로세스를 제한합니다. 따라서 사용자가 상호 작용하는 경우에도 애플리케이션이 다른 애플리케이션에서 포커스를 도용하지 못하도록 차단됩니다. CoAllowSetForegroundWindow를 사용하여 아직 없는 프로세스에 포그라운드 권한을 전달합니다. 이 작업은 전이적으로 수행할 수 있습니다. 한 프로세스에서 다른 프로세스로 권한을 전달한 다음 다른 프로세스에 권한을 전달하는 등의 작업을 수행할 수 있습니다.

CoAllowSetForegroundWindow 를 사용하면 사용자 지정 인터페이스가 있는 사용자가 창 변경이 예상되는 OLE 인터페이스에 대해 발생하는 동작과 동일한 동작을 가져올 수 있습니다(주로 연결 및 포함과 연결됨).

백그라운드에서 IForegroundTransfer 인터페이스는 프로세스 간에 포그라운드 창을 생성하는 데 사용됩니다. 표준 COM 제공 프록시는 이미 IForegroundTransfer를 구현하므로 표준 프록시를 사용하는 경우 추가 작업을 수행할 필요가 없습니다. CoAllowSetForegroundWindow를 호출하여 전경 권한을 out-of-process COM 개체로 전송하기만 하면 됩니다.

예제

다음 예제에서는 클라이언트 프로세스가 로컬 COM 서버를 만들고, CoAllowSetForegroundWindow 를 호출하여 포그라운드 권한을 전송한 다음, COM 서버에서 직접 또는 간접적으로 SetForegroundWindow를 호출하는 함수를 호출하는 방법을 보여 줍니다.

Microsoft::WRL::ComPtr<IExampleInterface> exampleLocalServer;

ThrowIfFailed(::CoCreateInstance(CLSID_ExampleLocalServer,
	nullptr, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&exampleLocalServer)));

// You can adapt to success or failure, but don't automatically throw. Don’t make the
// opening of a window dependent on successfully passing privilege (and taking foreground),
// because the window will signal to the user that it is ready to take focus.
HRESULT hr = ::CoAllowSetForegroundWindow(exampleLocalServer.Get(), nullptr);

// Call an example method that itself calls ::SetForegroundWindow(HWND).
hr = exampleLocalServer->FunctionThatSetsForegroundWindow();

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 objbase.h
라이브러리 Ole32.lib
DLL Ole32.dll
API 세트 ext-ms-win-com-ole32-l1-1-1(Windows 8.1 소개)

추가 정보

IForegroundTransfer