IFileIsInUse インターフェイス (shobjidl_core.h)
別のアプリケーションで使用されているファイルに関する情報を取得または閉じるために呼び出すことができるメソッドを公開します。 アプリケーションがファイルへのアクセスを試み、既に使用されているファイルを検出すると、このインターフェイスの メソッドを使用して、ダイアログ ボックスでユーザーに表示する情報を収集できます。
継承
IFileIsInUse インターフェイスは、IUnknown インターフェイスから継承されます。 IFileIsInUse には、次の種類のメンバーもあります。
メソッド
IFileIsInUse インターフェイスには、これらのメソッドがあります。
IFileIsInUse::CloseFile 現在使用中のファイルを閉じます。 |
IFileIsInUse::GetAppName ファイルを使用しているアプリケーションの名前を取得します。 |
IFileIsInUse::GetCapabilities ファイルを閉じることができるかどうか、および UI がファイルを使用しているアプリケーションのウィンドウに切り替えることができるかどうかを判断します。 |
IFileIsInUse::GetSwitchToHWND ファイルを使用しているアプリケーションの最上位ウィンドウのハンドルを取得します。 |
IFileIsInUse::GetUsage 使用中のファイルの使用方法を示す値を取得します。 |
注釈
Windows Vista より前のバージョンの Windows では、ユーザーが別のアプリケーションで開いているファイルにアクセスしようとすると、ファイルが既に開かれていることを示すメッセージが表示されたダイアログ ボックスが表示されます。 メッセージは、ユーザーが他のアプリケーションを閉じても、それを識別しなかったことを指示しました。 その提案以外に、ダイアログ ボックスには状況に対処するためのユーザー アクションが表示されていませんでした。 このインターフェイスには、ユーザーが直接アクションを実行できるより有益なダイアログ ボックスにつながる可能性があるメソッドが用意されています。
実行中のオブジェクト テーブル
アプリケーションがファイルを開くと、そのアプリケーションは、インスタンス化された IFileIsInUse オブジェクトを実行中のオブジェクト テーブル (ROT) に挿入してファイルを登録します。 ROT は、現在実行中のオブジェクトを追跡する、グローバルにアクセス可能な参照テーブルです。 これらのオブジェクトはモニカーによって識別できます。 クライアントがモニカーをオブジェクトにバインドしようとすると、モニカーは ROT をチェックして、オブジェクトが既に実行されているかどうかを判断します。 これにより、モニカーは新しいインスタンスを読み込むのではなく、現在のインスタンスにバインドできます。ROT にファイルを追加するには、次の手順を実行します。
- GetRunningObjectTable 関数を呼び出して、IRunningObjectTable のインスタンスを取得します。
- 現在使用されているファイルの IFileIsInUse オブジェクトを作成します。
- 現在使用されているファイルの IMoniker オブジェクトを作成します。
- IRunningObjectTable::Register を呼び出して、IFileIsInUse オブジェクトと IMoniker オブジェクトを ROT に挿入します。
Register の呼び出しで、ROTFLAGS_ALLOWANYCLIENT フラグを指定します。 これにより、ROT エントリはセキュリティ境界を越えて機能します。 このフラグを使用するには、呼び出し元のアプリケーションに明示的なアプリケーション ユーザー モデル ID (AppUserModelID) (System.AppUserModel.ID) が必要です。 明示的な AppUserModelID を使用すると、コンポーネント オブジェクト モデル (COM) でアプリケーションのセキュリティ設定を検査できます。 ROTFLAGS_ALLOWANYCLIENTで Register を呼び出そうとしても、明示的な AppUserModelID は失敗しません。 ROTFLAGS_ALLOWANYCLIENT フラグを指定せずに Register を 呼び出すと、アプリケーションは正常に動作しますが、それ自体のセキュリティ レベル内でのみ動作します。
Register メソッドの [out] パラメーターで取得された値は、後の呼び出しでエントリを識別して ROT から取得または削除するために使用されます。
実装するタイミング
他のアプリケーションで開くことができるファイルの種類を開くアプリケーションでは、 IFileIsInUse を実装する必要があります。 このインターフェイスのアプリケーションの実装により、Windows エクスプローラーは共有エラーの原因を検出できます。これにより、ユーザーはそれらのエラーによって失敗した操作に対処して再試行できます。使用するタイミング
アプリケーションは IFileIsInUse を呼び出して他のアプリケーションと通信し、共有エラーを解決します。 これらのエラーは、ファイル システムのユーザー アクションに応答して発生します。 たとえば、そのフォルダー内のファイルがアプリケーションで開かれているときにユーザーがフォルダーの名前を変更しようとすると、名前の変更操作は失敗します。 Windows エクスプローラーでは、ユーザーが競合を特定してこの問題を解決できるように、そのアプリケーションの IFileIsInUse の実装を呼び出すことができます。サンプル
IFileIsInUse を実装し、ROT にファイルを登録する方法を示すファイルが使用されているサンプルを参照してください。 次に、[使用中 のファイル ] ダイアログをカスタマイズして、アプリケーションで現在開いているファイルの追加情報とオプションを表示する方法を示します。要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | shobjidl_core.h (Shobjidl.h を含む) |