Share via


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:

  1. Chame a função GetRunningObjectTable para recuperar uma instância de IRunningObjectTable.
  2. Crie um objeto IFileIsInUse para o arquivo que está em uso no momento.
  3. Crie um objeto IMoniker para o arquivo que está em uso no momento.
  4. 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)

Confira também

IDs do modelo de usuário do aplicativo (AppUserModelIDs)