Usando o objeto Da Área de Trabalho Ativa
[Esse recurso só tem suporte no Windows XP ou anterior. ]
Este artigo contém informações sobre o objeto ActiveDesktop que faz parte da API do Shell do Windows. Esse objeto, por meio de sua interface IActiveDesktop , permite adicionar, remover e alterar itens na área de trabalho.
Visão geral da interface da área de trabalho ativa
- Acessando a Área de Trabalho Ativa
- Adicionando um item da área de trabalho
- Enumerando os itens da área de trabalho
A Área de Trabalho Ativa é um recurso introduzido com o Microsoft Internet Explorer 4.0 que permite incluir documentos e itens HTML (como controles Microsoft ActiveX e miniaplicativos Java) diretamente para sua área de trabalho. A interface IActiveDesktop , que faz parte da API do Shell do Windows, é usada para adicionar, remover e modificar programaticamente os itens na área de trabalho. Os itens da Área de Trabalho Ativa também podem ser adicionados usando um arquivo CDF (Formato de Definição de Canal).
Acessando a Área de Trabalho Ativa
Para acessar a Área de Trabalho Ativa, um aplicativo cliente precisaria criar uma instância do objeto ActiveDesktop (CLSID_ActiveDesktop) com a função CoCreateInstance e recuperar um ponteiro para a interface IActiveDesktop do objeto.
O exemplo a seguir mostra como recuperar um ponteiro para a interface 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();
Adicionando um item da área de trabalho
Há três métodos que você pode usar para adicionar um item da área de trabalho: IActiveDesktop::AddDesktopItem, IActiveDesktop::AddDesktopItemWithUI e IActiveDesktop::AddUrl. Cada item da área de trabalho adicionado à Área de Trabalho Ativa deve ter uma URL de origem diferente.
Os métodos IActiveDesktop::AddDesktopItemWithUI e IActiveDesktop::AddUrl fornecem a opção de exibir as várias interfaces do usuário que podem ser exibidas antes de adicionar um item da área de trabalho à Área de Trabalho Ativa. As interfaces verificam se os usuários desejam adicionar o item da área de trabalho à área de trabalho ativa. As interfaces também notificam os usuários sobre quaisquer riscos de segurança que são garantidos pelas configurações da zona de segurança da URL e perguntam aos usuários se eles gostariam de criar uma assinatura para este item da área de trabalho. Ambos os métodos também fornecem uma maneira de suprimir as interfaces do usuário. O método IActiveDesktop::AddDesktopItem requer uma chamada para IActiveDesktop::ApplyChanges para atualizar o registro. Para iActiveDesktop::AddDesktopItemWithUI, o aplicativo cliente deve liberar imediatamente a interface IActiveDesktop e, em seguida, usar a função CoCreateInstance para recuperar uma interface para uma instância do objeto ActiveDesktop que inclui o item de área de trabalho recém-adicionado.
O método IActiveDesktop::AddDesktopItem adiciona o item de área de trabalho especificado à Área de Trabalho Ativa sem nenhuma interface do usuário, a menos que as configurações da zona de segurança da URL o impeçam. Se as configurações da zona de segurança da URL não permitirem que o item da área de trabalho seja adicionado sem avisar o usuário, o método falhará. IActiveDesktop::AddDesktopItem também requer uma chamada para IActiveDesktop::ApplyChanges para atualizar o registro.
O exemplo a seguir demonstra como adicionar um item de área de trabalho com o método 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);
Enumerando os itens da área de trabalho
Para enumerar os itens da área de trabalho atualmente instalados na Área de Trabalho Ativa, o aplicativo cliente precisa recuperar o número total de itens da área de trabalho instalados usando o método IActiveDesktop::GetDesktopItemCount e, em seguida, criar um loop que recupera a estrutura COMPONENT para cada item da área de trabalho chamando o método IActiveDesktop::GetDesktopItem usando o índice de item da área de trabalho.
O exemplo a seguir demonstra uma maneira de enumerar os itens da área de trabalho.
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();