Share via


Interfaccia IFileIsInUse (shobjidl_core.h)

Espone i metodi che possono essere chiamati per ottenere informazioni su o chiudere un file in uso da un'altra applicazione. Quando un'applicazione tenta di accedere a un file e trova che il file è già in uso, può usare i metodi di questa interfaccia per raccogliere informazioni da presentare all'utente in una finestra di dialogo.

Ereditarietà

L'interfaccia IFileIsInUse eredita dall'interfaccia IUnknown . IFileIsInUse include anche questi tipi di membri:

Metodi

L'interfaccia IFileIsInUse include questi metodi.

 
IFileIsInUse::CloseFile

Chiude il file attualmente in uso.
IFileIsInUse::GetAppName

Recupera il nome dell'applicazione che usa il file.
IFileIsInUse::GetCapabilities

Determina se il file può essere chiuso e se l'interfaccia utente è in grado di passare alla finestra dell'applicazione che usa il file.
IFileIsInUse::GetSwitchToHWND

Recupera l'handle della finestra di primo livello dell'applicazione che usa il file.
IFileIsInUse::GetUsage

Ottiene un valore che indica come viene usato il file in uso.

Commenti

Nelle versioni di Windows prima di Windows Vista, quando un utente tentava di accedere a un file aperto in un'altra applicazione, l'utente riceveva semplicemente una finestra di dialogo con un messaggio che indica che il file era già aperto. Il messaggio ha indicato che l'utente chiude l'altra applicazione, ma non l'ha identificata. Oltre a questo suggerimento, la finestra di dialogo non ha fornito alcuna azione utente per risolvere la situazione. Questa interfaccia fornisce metodi che possono portare a una finestra di dialogo più informativa da cui l'utente può eseguire azioni dirette.

Tabella oggetto running

Quando un'applicazione apre un file, l'applicazione registra il file inserendo l'oggetto IFileIsInUse creato nell'oggetto in esecuzione (ROT). Rot è una tabella di ricerca accessibile a livello globale che tiene traccia degli oggetti attualmente in esecuzione. Questi oggetti possono essere identificati da un moniker. Quando un client tenta di associare un moniker a un oggetto, il moniker controlla il rot per determinare se l'oggetto è già in esecuzione. In questo modo il moniker può essere associato all'istanza corrente anziché caricare una nuova istanza.

Eseguire questa procedura per aggiungere un file al ROT:

  1. Chiamare la funzione GetRunningObjectTable per recuperare un'istanza di IRunningObjectTable.
  2. Creare un oggetto IFileIsInUse per il file attualmente in uso.
  3. Creare un oggetto IMoniker per il file attualmente in uso.
  4. Inserire gli oggetti IFileIsInUse e IMoniker nel ROT chiamando IRunningObjectTable::Register.

Nella chiamata a Registra specificare il flag ROTFLAGS_ALLOWANYCLIENT . Ciò consente alla voce ROT di funzionare tra limiti di sicurezza. L'uso di questo flag richiede che l'applicazione chiamante disponga di un ID modello utente applicazione esplicito (AppUserModelID) (System.AppUserModel.ID). AppUserModelID esplicito consente al modello a oggetti componente (COM) di controllare le impostazioni di sicurezza dell'applicazione. Un tentativo di chiamare Registra con ROTFLAGS_ALLOWANYCLIENT e non avrà esito negativo AppUserModelID esplicito. È possibile chiamare Register senza il flag di ROTFLAGS_ALLOWANYCLIENT e l'applicazione funzionerà correttamente, ma solo all'interno del proprio livello di sicurezza.

Il valore recuperato nel parametro [out] del metodo Register viene usato per identificare la voce nelle chiamate successive per recuperare o rimuoverlo dal ROT.

Quando implementare

Le applicazioni che possono aprire tipi di file che possono essere aperte da altre applicazioni devono implementare IFileIsInUse. L'implementazione di un'applicazione di questa interfaccia consente a Esplora windows di individuare l'origine degli errori di condivisione, che consente agli utenti di risolvere e ripetere le operazioni che hanno esito negativo a causa di tali errori.

Quando usare

Un'applicazione chiama IFileIsInUse per comunicare con altre applicazioni per risolvere gli errori di condivisione. Questi errori si verificano in risposta all'azione dell'utente nel file system. Ad esempio, quando un utente tenta di rinominare una cartella mentre un file in tale cartella è aperto in un'applicazione, l'operazione di ridenominazione ha esito negativo. Esplora risorse può chiamare l'implementazione dell'applicazione di IFileIsInUse per aiutare l'utente a identificare il conflitto e risolvere questo problema.

Esempio

Vedere l'esempio File Is in Use , che illustra come implementare IFileIsInUse e registrare un file con ROT. Viene quindi illustrato come personalizzare la finestra di dialogo File in uso per visualizzare informazioni e opzioni aggiuntive per i file attualmente aperti in un'applicazione.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione shobjidl_core.h (include Shobjidl.h)

Vedi anche

ID modello utente applicazione (AppUserModelIDs)