Partager via


Interface IFileIsInUse (shobjidl_core.h)

Expose les méthodes qui peuvent être appelées pour obtenir des informations sur ou fermer un fichier utilisé par une autre application. Lorsqu’une application tente d’accéder à un fichier et trouve ce fichier déjà utilisé, elle peut utiliser les méthodes de cette interface pour collecter des informations à présenter à l’utilisateur dans une boîte de dialogue.

Héritage

L’interface IFileIsInUse hérite de l’interface IUnknown. IFileIsInUse possède également les types de membres suivants :

Méthodes

L’interface IFileIsInUse possède ces méthodes.

 
IFileIsInUse ::CloseFile

Ferme le fichier en cours d’utilisation.
IFileIsInUse ::GetAppName

Récupère le nom de l’application qui utilise le fichier.
IFileIsInUse ::GetCapabilities

Détermine si le fichier peut être fermé et si l’interface utilisateur est capable de basculer vers la fenêtre de l’application qui utilise le fichier.
IFileIsInUse ::GetSwitchToHWND

Récupère le handle de la fenêtre de niveau supérieur de l’application qui utilise le fichier.
IFileIsInUse ::GetUsage

Obtient une valeur qui indique comment le fichier utilisé est utilisé.

Remarques

Dans les versions de Windows antérieures à Windows Vista, lorsqu’un utilisateur tentait d’accéder à un fichier ouvert dans une autre application, l’utilisateur recevait simplement une boîte de dialogue avec un message indiquant que le fichier était déjà ouvert. Le message indique que l’utilisateur ferme l’autre application, mais ne l’identifie pas. En dehors de cette suggestion, la boîte de dialogue ne fournissait aucune action de l’utilisateur pour résoudre la situation. Cette interface fournit des méthodes qui peuvent conduire à une boîte de dialogue plus informative à partir de laquelle l’utilisateur peut effectuer une action directe.

Table d’objets en cours d’exécution

Lorsqu’une application ouvre un fichier, cette application inscrit le fichier en insérant l’objet IFileIsInUse instancié dans la table d’objets en cours d’exécution (ROT). Le ROT est une table de recherche globalement accessible qui effectue le suivi des objets en cours d’exécution. Ces objets peuvent être identifiés par un moniker. Lorsqu’un client tente de lier un moniker à un objet, celui-ci vérifie le ROT pour déterminer si l’objet est déjà en cours d’exécution. Cela permet au moniker de se lier au instance actuel au lieu de charger une nouvelle instance.

Procédez comme suit pour ajouter un fichier au ROT :

  1. Appelez la fonction GetRunningObjectTable pour récupérer un instance de IRunningObjectTable.
  2. Créez un objet IFileIsInUse pour le fichier actuellement utilisé.
  3. Créez un objet IMoniker pour le fichier actuellement utilisé.
  4. Insérez les objets IFileIsInUse et IMoniker dans le ROT en appelant IRunningObjectTable ::Register.

Dans l’appel à Inscrire, spécifiez l’indicateur ROTFLAGS_ALLOWANYCLIENT . Cela permet à l’entrée ROT de fonctionner au-delà des limites de sécurité. L’utilisation de cet indicateur nécessite que l’application appelante ait un ID de modèle utilisateur d’application explicite (AppUserModelID) (System.AppUserModel.ID). Un AppUserModelID explicite permet au modèle objet de composant (COM) d’inspecter les paramètres de sécurité de l’application. Une tentative d’appel de Register avec ROTFLAGS_ALLOWANYCLIENT et aucun AppUserModelID explicite échoue. Vous pouvez appeler Register sans l’indicateur ROTFLAGS_ALLOWANYCLIENT et l’application fonctionnera correctement, mais uniquement dans son propre niveau de sécurité.

La valeur récupérée dans le paramètre [out] de la méthode Register est utilisée pour identifier l’entrée dans les appels ultérieurs afin de la récupérer ou de la supprimer du ROT.

Quand implémenter

Les applications qui ouvrent des types de fichiers qui peuvent être ouverts par d’autres applications doivent implémenter IFileIsInUse. L’implémentation de cette interface par une application permet à Windows Explorer de découvrir la source des erreurs de partage, ce qui permet aux utilisateurs de traiter et de réessayer des opérations qui échouent en raison de ces erreurs.

Quand utiliser

Une application appelle IFileIsInUse pour communiquer avec d’autres applications afin de résoudre les erreurs de partage. Ces erreurs se produisent en réponse à l’action de l’utilisateur dans le système de fichiers. Par exemple, lorsqu’un utilisateur tente de renommer un dossier alors qu’un fichier de ce dossier est ouvert dans une application, l’opération de renommage échoue. Les Explorer Windows peuvent appeler l’implémentation d’IFileIsInUse de cette application pour aider l’utilisateur à identifier le conflit et à résoudre ce problème.

Échantillon

Consultez l’exemple Fichier est en cours d’utilisation , qui montre comment implémenter IFileIsInUse et inscrire un fichier auprès du ROT. Il montre ensuite comment personnaliser la boîte de dialogue Fichier en cours d’utilisation pour afficher des informations et des options supplémentaires pour les fichiers actuellement ouverts dans une application.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau uniquement]
Plateforme cible Windows
En-tête shobjidl_core.h (inclure Shobjidl.h)

Voir aussi

ID de modèle utilisateur d’application (AppUserModelIDs)