Programas padrão

Use Programas Padrão para definir a experiência do usuário padrão. Os usuários podem acessar programas padrão de Painel de Controle ou diretamente no menu Iniciar. Definir a ferramenta SPAD (Acesso ao Programa e Padrões de Computador), a principal experiência de padrões para usuários no Windows XP, agora faz parte dos Programas Padrão.

Importante

Este tópico não se aplica a Windows 10. A maneira como as associações de arquivo padrão funcionam foi alterada em Windows 10. Para obter mais informações, consulte a seção Sobre alterações em como Windows 10 lida com aplicativos padrãonesta postagem.

 

Quando um usuário define padrões de programa usando Programas Padrão, a configuração padrão se aplica somente a esse usuário e não a outros usuários que podem usar o mesmo computador. Os Programas Padrão fornecem um conjunto de APIs (preteridas em Windows 8) que permitem que ISVs (fornecedores independentes de software) incluam seus programas ou aplicativos no sistema padrão. O conjunto de API também ajuda os ISVs a gerenciar melhor seus status como padrões.

Este tópico é organizado da seguinte maneira:

Os Programas Padrão são projetados principalmente para aplicativos que usam tipos de arquivo padrão, como .mp3 ou arquivos .jpg ou protocolos padrão, como HTTP ou mailto. Os aplicativos que usam seus próprios protocolos proprietários e associações de arquivos normalmente não usam a funcionalidade Programas Padrão .

Depois de registrar um aplicativo para a funcionalidade programas padrão, as seguintes opções e funcionalidades estão disponíveis usando o conjunto de APIs:

  • Restaure todos os padrões registrados para um aplicativo. Preterido para Windows 8.
  • Restaure um único padrão registrado para um aplicativo. Preterido para Windows 8.
  • Consulte o proprietário de um padrão específico em uma única chamada em vez de pesquisar o registro. Você pode consultar o padrão de uma associação de arquivo, protocolo ou verbo canônico do menu Iniciar .
  • Inicie uma interface do usuário para um aplicativo específico em que um usuário pode definir padrões individuais.
  • Remova todas as associações por usuário.

Os Programas Padrão também fornecem uma interface do usuário que permite registrar um aplicativo para fornecer informações adicionais ao usuário. Por exemplo, um aplicativo assinado digitalmente pode incluir uma URL para a home page do fabricante.

O uso do conjunto de APIs associado pode ajudar uma função de aplicativo corretamente sob o recurso de controle de conta de usuário (UAC) introduzido no Windows Vista. Em UAC, um administrador aparece no sistema como um usuário padrão, de modo que o administrador normalmente não pode gravar na subárvore HKEY_LOCAL_MACHINE . Essa restrição é um recurso de segurança que impede que um processo atue como administrador sem o conhecimento do administrador.

A instalação de um programa por um usuário normalmente é executada como um processo elevado. No entanto, as tentativas de um aplicativo de modificar comportamentos de associação padrão em um nível de computador após a instalação não serão bem-sucedidas. Em vez disso, os padrões devem ser registrados em um nível por usuário, o que impede que vários usuários substituam os padrões uns dos outros.

A estrutura de registro hierárquica para associações de arquivo e protocolo dá precedência a padrões por usuário sobre padrões de nível de computador. Alguns aplicativos incluem pontos em seu código que elevam temporariamente seus direitos quando declaram padrões registrados em HKEY_LOCAL_MACHINE. Esses aplicativos poderão apresentar resultados inesperados se outro aplicativo já estiver registrado como o padrão por usuário. O uso de Programas Padrão impede essa ambiguidade e garante os resultados esperados em um nível por usuário.

Registrando um aplicativo para uso com programas padrão

Esta seção mostra as subchaves e os valores do Registro necessários para registrar um aplicativo com Programas Padrão. Ele inclui um exemplo completo.

Esta seção contém os seguintes tópicos:

Os Programas Padrão exigem que cada aplicativo registre explicitamente as associações de arquivo, associações MIME e protocolos para os quais o aplicativo deve ser listado como um possível padrão. Registre as associações usando os seguintes elementos do Registro, que são explicados detalhadamente mais adiante neste tópico em Subchave de Registro e Descrições de Valor:

HKEY_LOCAL_MACHINE
   %ApplicationCapabilityPath%
      ApplicationDescription
      ApplicationName
      Hidden
      FileAssociations
         .file-extension1
         .file-extension2
         ...
         .file-extensionX
      MIMEAssociations
         MIME
      Startmenu
         StartmenuInternet
         Mail
      UrlAssociations
         url-scheme
   SOFTWARE
      RegisteredApplications
         Unique Application Name = %ApplicationCapabilityPath%

O exemplo a seguir mostra as entradas do Registro para um navegador contoso fictício chamado WebBrowser:

HKEY_LOCAL_MACHINE
   SOFTWARE
      Contoso
         WebBrowser
            Capabilities
               ApplicationDescription = This award-winning Contoso browser is better than ever. Search the Internet and find exactly what you want in just seconds. Use integrated tabs and new phishing detectors to enhance your Internet experience.
               FileAssociations
                  .htm = ContosoHTML
                  .html = ContosoHTML
                  .shtml = ContosoHTML
                  .xht = ContosoHTML
                  .xhtml = ContosoHTML
               Startmenu
                  StartmenuInternet = Contoso.exe
               UrlAssociations
                  http = Contoso.Url.Http
                  https = Contoso.Url.Https
                  ftp = Contoso.Url.ftp
   SOFTWARE
      RegisteredApplications
         Contoso.WebBrowser.1.06 = SOFTWARE\Contoso\WebBrowser\Capabilities

Progids

Um aplicativo deve fornecer um ProgID específico. Certifique-se de incluir todas as informações que normalmente são gravadas na subchave padrão genérica para a extensão. Por exemplo, o player de mídia litware fictício fornece a subchaveLitwarePlayer11.AssocFile.MP3classes\de SOFTWARE\HKEY_LOCAL_MACHINE\ específicas do aplicativo. Essa subchave inclui todas as informações na subchave padrão genérica HKEY_LOCAL_MACHINE\Classes\ deSOFTWARE\.mp3 mais as informações adicionais que você deseja que o aplicativo registre. Isso garante que, se o usuário restaurar a associação .mp3 para o player litware, as informações do player da Litware estarão intactas e não serão substituídas por outro aplicativo. (A substituição poderá ocorrer se a subchave padrão for a única fonte dessas informações.)

Quando você mapeia um ProgID para uma extensão ou protocolo de nome de arquivo, um aplicativo pode mapear um para um ou um para muitos. No exemplo da Contoso, ContosoHTML aponta para um único ProgID que fornece informações de shellexecute para as extensões .htm, .html, .shtml, .xht e .xhtml. Como existe um ProgID diferente para cada protocolo, quando você usa protocolos, permite que cada protocolo tenha sua própria cadeia de caracteres de execução.

Quando o tipo MIME pode ser exibido embutido em um navegador, o ProgID para o tipo MIME deve conter a subchave CLSID que usa o CLSID (identificador de classe) do aplicativo correspondente. Esse CLSID é usado em uma pesquisa em relação ao CLSID no banco de dados MIME armazenado em HKEY_LOCAL_MACHINE\tipo de conteúdo debanco\ de dadosMIME\ declasses\de SOFTWARE\. Se o tipo MIME não se destina a ser exibido embutido em um navegador, essa etapa pode ser omitida.

Subchave de registro e descrições de valor

Esta seção descreve as subchaves e valores individuais do Registro usados no registro de um aplicativo com Programas Padrão, conforme ilustrado anteriormente.

Funcionalidades

A subchave Capabilities contém todas as informações de Programas Padrão para um aplicativo específico. O espaço reservado %ApplicationCapabilityPath% refere-se ao caminho do Registro de HKEY_CURRENT_USER ou HKEY_LOCAL_MACHINE à subchave Funcionalidades do aplicativo. Essa subchave contém os valores significativos mostrados na tabela a seguir.

Valor Type Significado
ApplicationDescription REG_SZ ou REG_EXPAND_SZ Obrigatório. Para permitir que um usuário faça uma escolha de atribuição padrão informada, um aplicativo deve fornecer uma cadeia de caracteres que descreva os recursos do aplicativo. Embora o exemplo anterior da Contoso atribua a descrição diretamente ao valor ApplicationDescription, os aplicativos normalmente fornecem a descrição como um recurso inserido em um arquivo .dll para facilitar a localização. Se ApplicationDescription não for fornecido, o aplicativo não aparecerá em listas de interface do usuário de possíveis programas padrão.
ApplicationName REG_SZ ou REG_EXPAND_SZ Opcional. O nome pelo qual o programa aparece na interface do usuário de Programas Padrão. Se esses dados não forem fornecidos pelo aplicativo, o nome do programa executável associado ao primeiro ProgID registrado para o aplicativo será usado na interface do usuário. ApplicationName sempre deve corresponder ao nome registrado em RegisteredApplications. Você pode usar ApplicationName se quiser diferentes tipos de aplicativo, como um navegador e um cliente de email, para apontar para o mesmo arquivo executável enquanto eles aparecem como nomes diferentes.
Hidden REG_DWORD Opcional. Defina esse valor como 1 para suprimir o aplicativo da lista de programas na caixa de diálogo Definir seus programas padrão . Se esse valor for 0 ou não estiver presente, o aplicativo aparecerá na lista normalmente.

 

FileAssociations

A subchave FileAssociations contém associações de arquivo específicas que são reivindicadas pelo aplicativo. Essas declarações são armazenadas como valores, com um valor para cada extensão. As associações apontam para um ProgID específico do aplicativo em vez de um ProgID genérico. No entanto, todas as associações não são necessárias para apontar para o mesmo ProgID.

MIMEAssociations

A subchave MIMEAssociations contém tipos MIME específicos que são reivindicados pelo aplicativo. Essas declarações são armazenadas como valores, com um valor para cada tipo MIME. O nome do valor para cada tipo MIME deve corresponder exatamente ao nome MIME armazenado no banco de dados MIME. O valor também deve ser atribuído a um ProgID específico do aplicativo que contém o CLSID correspondente do aplicativo.

Startmenu

A subchave Startmenu está associada às entradas de Internet e email atribuíveis ao usuário no menu Iniciar . Um aplicativo deve se registrar separadamente como um candidato para essas entradas. Para obter mais informações, consulte Registrando programas com tipos de cliente.

Observação

A partir do Windows 7, não há mais entradas de Internet e email no menu Iniciar . Os dados do Registro associados à entrada de email ainda são usados para o cliente MAPI padrão, mas os dados do Registro associados à entrada da Internet não são usados pelo Windows.

 

Ao associar o registro de menu Iniciar de um aplicativo ao registro de Programas Padrão , o aplicativo aparece como um padrão potencial na interface do usuário Definir associações . Se o usuário tiver escolhido o aplicativo como o padrão e optar por restaurar todos os padrões de aplicativo posteriormente, o aplicativo será restaurado para sua posição de menu Iniciar para esse usuário. Para obter mais informações e uma ilustração, consulte a seção Interface do usuário de Programas Padrão mais adiante neste tópico.

A subchave Startmenu tem duas entradas: StartMenuInternet e Mail, que correspondem às posições canônicas de Internet e Email no menu Iniciar . Um aplicativo atribui a StartMenuInternet ou Mail um valor igual ao nome da subchave registrada do aplicativo emHKEY_LOCAL_MACHINE\ Clientesde SOFTWARE\\ StartMenuInternet ou HKEY_LOCAL_MACHINE\Software\Clients\Mail (conforme descrito em Registrando programas com tipos de cliente).

No caso da posição canônica email no menu Iniciar , ele representa o cliente MAPI padrão e, portanto, é considerado capaz de entregar chamadas MAPI. No Windows 7, embora não haja mais uma posição canônica de email no menu Iniciar , essa subchave continua sendo usada para o cliente MAPI padrão. Um aplicativo que reivindica o padrão de email deve se registrar como um manipulador MAPI na seguinte subchave:

HKEY_LOCAL_MACHINE
   SOFTWARE
      Clients
         Mail
            CanonicalName

Se um cliente de email não puder dar suporte a MAPI, mas ainda quiser lutar pela posição canônica de email do menu Iniciar, ele poderá registrar uma linha de comando na seguinte subchave:

HKEY_LOCAL_MACHINE
   SOFTWARE
      Clients
         Mail
            CanonicalName
               shell
                  open
                     command

Além disso, em HKEY_LOCAL_MACHINE\Clientes\de SOFTWARE\Mail\CanonicalName, adicione um valor padrão com o nome do aplicativo.

Essas entradas permitem que o aplicativo seja iniciado na posição email do menu Iniciar. Observe que as chamadas MAPI ainda são feitas para o aplicativo e se enquadram no manipulador MAPI anterior ou falham se nenhum manipulador MAPI tiver sido definido. Para obter mais informações, consulte Registrando programas com tipos de cliente.

UrlAssociations

A subchave UrlAssociations contém os protocolos de URL específicos que são reivindicados pelo aplicativo. Essas declarações são armazenadas como valores, com um valor para cada protocolo. Cada protocolo deve apontar para um ProgID específico do aplicativo em vez de para um ProgID genérico. Conforme mencionado no exemplo da Contoso, você pode usar um ProgID diferente para cada protocolo para que cada um tenha sua própria cadeia de caracteres de execução.

RegisteredApplications

A subchave completa para RegisteredApplications é:

HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications

Essa subchave fornece ao sistema operacional o local do registro das informações de Programas Padrão para o aplicativo. O local é armazenado como um valor cujo nome deve corresponder ao nome do aplicativo.

Exemplo de registro completo

Este exemplo mostra as subchaves e os valores usados no registro do player de mídia litware fictício. O exemplo inclui as entradas ProgID para mostrar como tudo se encaixa.

A subchave a seguir mostra o ProgID específico do aplicativo para o tipo MIME .mp3:

HKEY_LOCAL_MACHINE
   SOFTWARE
      Classes
         LitwarePlayer11.MIME.MP3
            CLSID
               (Default) = {CD3AFA76-B84F-48F0-9393-7EDC34128127}

Em seguida, é o ProgID específico do aplicativo que associa o programa Litware à extensão de nome de arquivo .mp3.

HKEY_LOCAL_MACHINE
   SOFTWARE
      Classes
         LitwarePlayer11.AssocFile.MP3
            (Default) = MP3 Format Sound
            DefaultIcon
               (Default) = %ProgramFiles%\Litware\litware.dll, 0
            shell
               open
                  command
                     (Default) = %ProgramFiles%\Litware\litware.exe

As próximas entradas mostram o ProgID combinado para o tipo MIME .mpeg e a extensão de nome de arquivo.

HKEY_LOCAL_MACHINE
   SOFTWARE
      Classes
         LitwarePlayer11.AssocFile.MPG
            (Default) = Movie Clip
            CLSID
               (Default) = {D92B76F4-CFA0-4b93-866B-7730FEB4CD7B}
            DefaultIcon
               (Default) = %ProgramFiles%\Litware\litware.dll, 0
            shell
               open
                  command
                     (Default) = %ProgramFiles%\Litware\litware.exe

As próximas entradas registram o programa Litware em Programas Padrão e usam os ProgIDs registrados anteriormente

HKEY_LOCAL_MACHINE
   SOFTWARE
      Litware
         LitwarePlayer
            Capabilities
               ApplicationDescription = The new Litware Media Player breaks new ground in exciting fictional programs.
               FileAssociations
                  .mp3 = LitwarePlayer11.AssocFile.MP3
                  .mpeg = LitwarePlayer11.AssocFile.MPG
               MimeAssociations
                  audio/mp3 = LitwarePlayer11.MIME.MP3
                  audio/mpeg = LitwarePlayer11.AssocFile.MPG

Por fim, este exemplo registra o local do registro de Programas Padrão da Litware.

HKEY_LOCAL_MACHINE
   SOFTWARE
      RegisteredApplications
         Litware Player = Software\Litware\LitwarePlayer\Capabilities

Tornando-se o navegador padrão

O registro do navegador deve seguir as práticas recomendadas descritas neste tópico. Quando o navegador é instalado, o Windows pode apresentar ao usuário uma notificação do sistema por meio da qual o usuário pode selecionar o navegador como o padrão do sistema. Essa notificação é mostrada quando essas condições são atendidas:

  • O instalador do navegador chama SHChangeNotify com o sinalizador SHCNE_ASSOCCHANGED para informar ao Windows que novos manipuladores de protocolo foram registrados.
  • O Windows detecta que um ou mais novos aplicativos se registraram para lidar com protocolos http:// e https://, e o usuário ainda não foi notificado. Em outras palavras, nenhum dos seguintes itens foi mostrado ao usuário: uma notificação do sistema anunciando o aplicativo, um submenu OpenWith que contém o aplicativo ou a página definir padrões de usuário (SUD) Painel de Controle para o aplicativo.

O exemplo a seguir mostra o código de registro recomendado que o instalador do navegador deve executar depois de gravar suas chaves do Registro.

SHChangeNotify primeiro notifica o sistema de que novas opções de associação estão disponíveis. A chamada SHChangeNotify é necessária para garantir o funcionamento adequado dos padrões do sistema.

Em seguida, uma instrução Sleep permite tempo para os processos do sistema lidarem com a notificação.

void NotifySystemOfNewRegistration()
{
    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_DWORD | SHCNF_FLUSH, nullptr, nullptr);
    Sleep(1000);
}

Se o usuário ignorar ou ignorar a notificação ou submenu resultante sem fazer uma nova seleção padrão do navegador, o navegador padrão permanecerá inalterado. Observe que o usuário também pode alterar o navegador padrão a qualquer momento por meio de outros mecanismos, incluindo Definir Padrões de Usuário no Painel de Controle.

Interface do usuário de Programas Padrão

As ilustrações nesta seção mostram a interface do usuário para Programas Padrão , conforme visto pelo usuário.

A ilustração a seguir mostra a janela Main Programas Padrão no Painel de Controle.

captura de tela da página de entrada de programas padrão

Quando um usuário escolhe a opção Definir seus programas padrão , a janela a seguir é exibida. Os usuários podem usar esta página para atribuir um programa padrão para todos os tipos de arquivo e protocolos para os quais o programa é um padrão possível. Conforme mostrado na ilustração a seguir, todos os programas registrados e o ícone do programa aparecem na caixa Programas à esquerda.

captura de tela da página definir seus programas padrão

Quando o usuário seleciona um programa na lista, o ícone do programa e o provedor são exibidos. Se a URL estiver inserida no certificado assinado digitalmente do programa, o programa também poderá exibir uma URL. Os programas que não são assinados digitalmente não podem exibir uma URL.

O texto descritivo, que é fornecido pelo programa durante o registro, também é exibido. Este texto é necessário. Abaixo da caixa de descrição há uma indicação de quantos padrões o programa está atribuído no momento fora do número completo que está registrado para manipular.

Para atribuir ou restaurar um programa como o padrão para todos os arquivos e protocolos para os quais ele está registrado, o usuário clica na opção Definir este programa como padrão .

Para atribuir tipos de arquivo individuais e protocolos a um programa, o usuário clica na opção Escolher padrões para este programa , que exibe uma janela Definir associações para um programa como a da ilustração a seguir.

Observação

Recomendamos que você chame as associações Set para um programa usando IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI.

 

captura de tela das associamentos definidas para uma página de programa

Práticas recomendadas para usar programas padrão

Esta seção fornece diretrizes de práticas recomendadas para usar Programas Padrão ao registrar aplicativos. Ele também oferece sugestões de design para criar um aplicativo que fornece aos usuários a funcionalidade de Programas Padrão ideal.

Durante a instalação

Além dos procedimentos de instalação normalmente praticados no Windows XP, um aplicativo baseado no Windows Vista ou posterior deve se registrar com o recurso Programas Padrão para aproveitar sua funcionalidade.

Execute a seguinte sequência de etapas durante a instalação. As etapas 1 a 3 correspondem às etapas que foram usadas no Windows XP; A etapa 4 era nova no Windows Vista.

  1. Instale os arquivos binários necessários.
  2. Escreva ProgIDs para HKEY_LOCAL_MACHINE. Observe que os aplicativos devem criar ProgIDs específicos do aplicativo para suas associações.
  3. Registre o aplicativo com Programas Padrão , conforme explicado anteriormente em Registrar um aplicativo para uso com programas padrão.

Após a instalação

Esta seção discute como o prompt do aplicativo deve apresentar primeiro suas opções padrão para cada usuário. Ele também discute como um aplicativo pode monitorar seu status como o padrão para suas possíveis associações e protocolos.

Experiências de Primeira Execução

Quando o aplicativo é executado por um usuário pela primeira vez, é recomendável que o aplicativo exiba a interface do usuário para o usuário que normalmente inclui essas duas opções:

  • Aceite as configurações de aplicativo padrão. Essa opção é habilitada por padrão.
  • Personalize as configurações padrão do aplicativo.

Antes de Windows 8, se o usuário aceitar as configurações padrão, seu aplicativo chamará IApplicationAssociationRegistration::SetAppAsDefaultAll, que converte todas as associações de nível de computador declaradas durante a instalação em configurações por usuário para esse usuário.

Se o usuário decidir personalizar as configurações, seu aplicativo chamará IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI para exibir a interface do usuário da associação de arquivos. A ilustração a seguir mostra essa janela para o player de mídia litware fictício.

captura de tela das associações definidas para uma página de programa para litware

A janela de associação de arquivo mostra os padrões que o aplicativo registrou e também mostra o padrão atual para outras extensões e protocolos. Depois que o usuário terminar de personalizar seus padrões, ele clicará no botão Salvar para confirmar as alterações. Se o usuário clicar em Cancelar, a janela será fechada sem salvar as alterações.

Você deve usar essa interface do usuário para seus aplicativos em vez de criar sua própria. Ao fazer isso, você salva os recursos que antes eram necessários para desenvolver a interface do usuário de associação de arquivo. Você também garante que as associações sejam salvas corretamente.

Definir um aplicativo para verificar se ele é o padrão

Observação

Isso não tem mais suporte a partir de Windows 8.

 

Os aplicativos normalmente marcar se são definidos como o padrão quando são executados. Defina seus aplicativos para tornar essa marcar chamando IApplicationAssociationRegistration::QueryAppIsDefault ou IApplicationAssociationRegistration::QueryAppIsDefaultAll.

Se o aplicativo determinar que ele não é o padrão, ele poderá apresentar a interface do usuário que pergunta ao usuário se deve aceitar a situação atual ou tornar o aplicativo o padrão. Sempre inclua uma caixa marcar nessa interface do usuário selecionada por padrão e que apresente a opção para não ser solicitada novamente.

Observação

A escolha do padrão deve ser controlada pelo usuário. Um aplicativo nunca deve recuperar um padrão sem perguntar ao usuário.

 

A ilustração a seguir mostra uma caixa de diálogo de exemplo.

captura de tela de uma caixa de diálogo de exemplo

Recursos adicionais

Práticas recomendadas para associações de arquivos

Cenário de exemplo de associação de arquivo

Diretrizes para gerenciar aplicativos padrão no Windows Vista e posterior

Definir o acesso ao programa e os padrões do computador (SPAD)