다음을 통해 공유


활성 데스크톱 개체 사용

[이 기능은 Windows XP 이하에서만 지원됩니다. ]

이 문서에는 Windows Shell API의 일부인 ActiveDesktop 개체에 대한 정보가 포함되어 있습니다. 이 개체는 IActiveDesktop 인터페이스를 통해 데스크톱에서 항목을 추가, 제거 및 변경할 수 있습니다.

활성 데스크톱 인터페이스 개요

Active Desktop은 Microsoft Internet Explorer 4.0에서 도입된 기능으로, HTML 문서 및 항목(예: Microsoft ActiveX 컨트롤 및 Java 애플릿)을 데스크톱에 직접 포함할 수 있습니다. Windows 셸 API의 일부인 IActiveDesktop 인터페이스는 데스크톱에서 항목을 프로그래밍 방식으로 추가, 제거 및 수정하는 데 사용됩니다. 활성 데스크톱 항목은 CDF(채널 정의 형식) 파일을 사용하여 추가할 수도 있습니다.

활성 데스크톱에 액세스

Active Desktop에 액세스하려면 클라이언트 애플리케이션이 CoCreateInstance 함수를 사용하여 ActiveDesktop 개체(CLSID_ActiveDesktop)의 instance 만들고 개체의 IActiveDesktop 인터페이스에 대한 포인터를 검색해야 합니다.

다음 샘플에서는 IActiveDesktop 인터페이스에 대한 포인터를 검색하는 방법을 보여줍니다.

HRESULT hr;
IActiveDesktop *pActiveDesktop;

//Create an instance of the Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
                      IID_IActiveDesktop, (void**)&pActiveDesktop);

//Insert code to call the IActiveDesktop methods

// Call the Release method
pActiveDesktop->Release();

데스크톱 항목 추가

데스크톱 항목을 추가하는 데 사용할 수 있는 세 가지 방법은 IActiveDesktop::AddDesktopItem, IActiveDesktop::AddDesktopItemWithUIIActiveDesktop::AddUrl입니다. 활성 데스크톱에 추가된 각 데스크톱 항목에는 다른 원본 URL이 있어야 합니다.

IActiveDesktop::AddDesktopItemWithUIIActiveDesktop::AddUrl 메서드는 모두 데스크톱 항목을 활성 데스크톱에 추가하기 전에 표시할 수 있는 다양한 사용자 인터페이스를 표시하는 옵션을 제공합니다. 인터페이스는 사용자가 자신의 활성 데스크톱에 데스크톱 항목을 추가할지 여부를 확인합니다. 또한 인터페이스는 URL 보안 영역 설정으로 보증되는 보안 위험을 사용자에게 알리고 사용자에게 이 데스크톱 항목에 대한 구독을 만들 것인지 묻습니다. 두 방법 모두 사용자 인터페이스를 표시하지 않는 방법도 제공합니다. 레지스트리를 업데이트하려면 IActiveDesktop::AddDesktopItem 메서드를 사용하려면 IActiveDesktop::ApplyChanges 를 호출해야 합니다. IActiveDesktop::AddDesktopItemWithUI의 경우 클라이언트 애플리케이션은 IActiveDesktop 인터페이스를 즉시 해제한 다음, CoCreateInstance 함수를 사용하여 새로 추가된 데스크톱 항목을 포함하는 ActiveDesktop 개체의 instance 대한 인터페이스를 검색해야 합니다.

URL 보안 영역 설정에서 차단하지 않는 한 IActiveDesktop::AddDesktopItem 메서드는 사용자 인터페이스 없이 지정된 데스크톱 항목을 활성 데스크톱에 추가합니다. URL 보안 영역 설정에서 사용자에게 메시지를 표시하지 않고 데스크톱 항목을 추가할 수 없으면 메서드가 실패합니다. 또한 레지스트리를 업데이트하려면 IActiveDesktop::AddDesktopItem에서 IActiveDesktop::ApplyChanges를 호출해야 합니다.

다음 샘플에서는 IActiveDesktop::AddDesktopItem 메서드를 사용하여 데스크톱 항목을 추가하는 방법을 보여 줍니다.

HRESULT hr;
IActiveDesktop *pActiveDesktop;
COMPONENT compDesktopItem;

//Create an instance of the Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
                      IID_IActiveDesktop, (void**)&pActiveDesktop);

// Initialize the COMPONENT structure
compDesktopItem.dwSize = sizeof(COMPONENT);

// Insert code that adds the information about the desktop item 
// to the COMPONENT structure

// Add the desktop item
pActiveDesktop->AddDesktopItem(&compDesktopItem,0);

// Save the changes to the registry
pActiveDesktop->ApplyChanges(AD_APPLY_ALL);

데스크톱 항목 열거

현재 Active Desktop에 설치된 데스크톱 항목을 열거하려면 클라이언트 애플리케이션이 IActiveDesktop::GetDesktopItemCount 메서드를 사용하여 설치된 데스크톱 항목의 총 수를 검색한 다음 데스크톱 항목 인덱스를 사용하여 IActiveDesktop::GetDesktopItem 메서드를 호출하여 각 데스크톱 항목에 대한 COMPONENT 구조를 검색하는 루프를 만들어야 합니다.

다음 샘플에서는 데스크톱 항목을 열거하는 한 가지 방법을 보여 줍니다.

HRESULT hr;
IActiveDesktop *pActiveDesktop;
COMPONENT compDesktopItem;
int intCount;
int intIndex = 0;

//Create an instance of the Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
                      IID_IActiveDesktop, (void**)&pActiveDesktop);

pActiveDesktop->GetDesktopItemCount(&intCount,0);

compDesktopItem.dwSize = sizeof(COMPONENT);

while(intIndex<=(intCount-1))
{
    //get the COMPONENT structure for the current desktop item
    pActiveDesktop->GetDesktopItem(intIndex, &compDesktopItem,0);

    //Insert code that processes the structure

    //Increment the index
    intIndex++;

    //Insert code to clean-up structure for next component
}

// Call the Release method
pActiveDesktop->Release();