Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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) |