Interface IFileIsInUse (shobjidl_core.h)
Expõe métodos que podem ser chamados para obter informações sobre ou fechar um arquivo que está em uso por outro aplicativo. Quando um aplicativo tenta acessar um arquivo e localiza esse arquivo já em uso, ele pode usar os métodos dessa interface para coletar informações para apresentar ao usuário em uma caixa de diálogo.
Herança
A interface IFileIsInUse herda da interface IUnknown . IFileIsInUse também tem estes tipos de membros:
Métodos
A interface IFileIsInUse tem esses métodos.
IFileIsInUse::CloseFile Fecha o arquivo atualmente em uso. |
IFileIsInUse::GetAppName Recupera o nome do aplicativo que está usando o arquivo . |
IFileIsInUse::GetCapabilities Determina se o arquivo pode ser fechado e se a interface do usuário é capaz de alternar para a janela do aplicativo que está usando o arquivo. |
IFileIsInUse::GetSwitchToHWND Recupera o identificador da janela de nível superior do aplicativo que está usando o arquivo. |
IFileIsInUse::GetUsage Obtém um valor que indica como o arquivo em uso está sendo usado. |
Comentários
Em versões do Windows antes do Windows Vista, quando um usuário tentava acessar um arquivo que estava aberto em outro aplicativo, o usuário simplesmente recebia uma caixa de diálogo com uma mensagem informando que o arquivo já estava aberto. A mensagem instruiu que o usuário fechasse o outro aplicativo, mas não o identificasse. Além dessa sugestão, a caixa de diálogo não forneceu nenhuma ação do usuário para resolver a situação. Essa interface fornece métodos que podem levar a uma caixa de diálogo mais informativa da qual o usuário pode tomar medidas diretas.
A tabela de objetos em execução
Quando um aplicativo abre um arquivo, esse aplicativo registra o arquivo inserindo o objeto IFileIsInUse instanciado na ROT (tabela de objetos em execução). O ROT é uma tabela de pesquisa acessível globalmente que controla os objetos em execução no momento. Esses objetos podem ser identificados por um moniker. Quando um cliente tenta associar um moniker a um objeto, o moniker verifica a ROT para determinar se o objeto já está em execução. Isso permite que o moniker se associe à instância atual em vez de carregar uma nova instância.Execute estas etapas para adicionar um arquivo ao ROT:
- Chame a função GetRunningObjectTable para recuperar uma instância de IRunningObjectTable.
- Crie um objeto IFileIsInUse para o arquivo que está em uso no momento.
- Crie um objeto IMoniker para o arquivo que está em uso no momento.
- Insira os objetos IFileIsInUse e IMoniker no ROT chamando IRunningObjectTable::Register.
Na chamada para Registrar, especifique o sinalizador ROTFLAGS_ALLOWANYCLIENT . Isso permite que a entrada ROT funcione entre limites de segurança. O uso desse sinalizador exige que o aplicativo de chamada tenha uma ID explícita do Modelo de Usuário do Aplicativo (AppUserModelID) (System.AppUserModel.ID). Um AppUserModelID explícito permite que o COM (Component Object Model) inspecione as configurações de segurança do aplicativo. Uma tentativa de chamar Register com ROTFLAGS_ALLOWANYCLIENT e nenhum AppUserModelID explícito falhará. Você pode chamar Registrar sem o sinalizador ROTFLAGS_ALLOWANYCLIENT e o aplicativo funcionará corretamente, mas somente dentro de seu próprio nível de segurança.
O valor recuperado no parâmetro [out] do método Register é usado para identificar a entrada em chamadas posteriores para recuperá-la ou removê-la do ROT.
Quando implementar
Os aplicativos que abrem tipos de arquivo que podem ser abertos por outros aplicativos devem implementar IFileIsInUse. A implementação dessa interface por um aplicativo permite que o Windows Explorer descubra a origem dos erros de compartilhamento, o que permite que os usuários resolvam e repitam operações que falham devido a esses erros.Quando usar
Um aplicativo chama IFileIsInUse para se comunicar com outros aplicativos para resolve erros de compartilhamento. Esses erros ocorrem em resposta à ação do usuário no sistema de arquivos. Por exemplo, quando um usuário tenta renomear uma pasta enquanto um arquivo nessa pasta está aberto em um aplicativo, a operação de renomeação falha. O Windows Explorer pode chamar a implementação desse aplicativo de IFileIsInUse para ajudar o usuário a identificar o conflito e resolve esse problema.Amostra
Consulte o exemplo Arquivo Está em Uso , que demonstra como implementar IFileIsInUse e registrar um arquivo com o ROT. Em seguida, ele mostra como personalizar a caixa de diálogo Arquivo em Uso para exibir informações e opções adicionais para arquivos abertos atualmente em um aplicativo.Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2008 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | shobjidl_core.h (inclua Shobjidl.h) |