IShellView
COM公式ドキュメント
Windows エクスプローラーまたはフォルダー ウィンドウ内にビューを表示するメソッドを公開します。
解説(Remarks)
IShellView を公開するオブジェクトは、通常 IShellFolder::CreateViewObject メソッドの呼び出しによって作成されます。これにより、ビュー オブジェクトと Windows エクスプローラーの最も外側のフレーム ウィンドウとの間の通信チャネルが提供されます。この通信には、メッセージの変換、フレーム ウィンドウの状態(アクティブまたは非アクティブ)、ドキュメント ウィンドウの状態(アクティブまたは非アクティブ)、およびメニューとツールバー項目のマージが含まれます。
このインターフェイスは、Windows エクスプローラーの名前空間内に自身を表示する名前空間拡張機能によって実装されます。このオブジェクトは、ビューをホストする IShellFolder オブジェクトによって作成されます。
これらのメソッドは、Shell ビューの Windows エクスプローラー ウィンドウが、オブジェクトがアクティブな間にそれらを操作するために使用します。
IShellView は IOleWindow から派生しています。ここに記載されているメソッドは IShellView に固有のものです。
既定の Shell フォルダー ビュー オブジェクトとして知られる IShellView の特別なインスタンスは、SHCreateShellFolderView または SHCreateShellFolderViewEx を呼び出すことで作成できます。このインスタンスは、IID_CDefView IID を使用して IShellView オブジェクトに対して QueryInterface を呼び出すことで、標準の実装と区別できます。この呼び出しは、既定の Shell フォルダー ビュー オブジェクトに対して行われた場合にのみ成功します。
メソッド 11
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
名前空間拡張機能のビューがフォーカスを持っているときに、キーボード ショートカット(アクセラレータ)のキー ストロークを変換します。
| pmsg | MSG* | in | 変換対象のメッセージのアドレス。 |
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合は COM で定義されたエラー値を返します。
ビューが S_OK を返す場合、それはメッセージが変換済みであり、Windows エクスプローラーによる変換やディスパッチを行うべきではないことを示します。
解説(Remarks)
このメソッドは、ビューが自身のキーボード ショートカットを変換できるように Windows エクスプローラーによって呼び出されます。
呼び出し側アプリケーションへの注意事項
ビューがフォーカスを持っている場合、Windows エクスプローラーは他のどの変換よりも先にこのメソッドを呼び出します。ビューがフォーカスを持っていない場合は、Windows エクスプローラーが自身のキーボード ショートカットを変換した後に呼び出されます。実装者への注意事項
既定では、Windows エクスプローラーが自身のキーボード ショートカット変換または通常のメニュー ディスパッチを実行できるように、ビューは S_FALSE を返すべきです。ビューは、メッセージをキーボード ショートカットとして処理済みであり、Windows エクスプローラーにそれ以上処理させたくない場合にのみ S_OK を返すべきです。モードレス ダイアログ ボックスを有効または無効にします。このメソッドは現在実装されていません。
| fEnable | BOOL | in | モードレス ダイアログ ボックス ウィンドウを有効にする場合は 0 以外、無効にする場合は 0。 |
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合は COM で定義されたエラー値を返します。
Shell ビュー自身が原因ではないイベントによってビュー ウィンドウのアクティブ化状態が変更されたときに呼び出されます。たとえば、ツリーがフォーカスを持っているときに TAB キーが押された場合、ビューにフォーカスを与える必要があります。
| uState | DWORD | in | ウィンドウのアクティブ化状態を指定するフラグ。このパラメーターには、次のいずれかの値を指定できます。 SVUIA_ACTIVATE_FOCUSWindows エクスプローラーが入力フォーカスを持つビュー ウィンドウを作成したばかりです。これは、Shell ビューがフォーカス状態に適したメニュー項目を設定できるべきであることを意味します。 SVUIA_ACTIVATE_NOFOCUSShell ビューが入力フォーカスを失っているか、入力フォーカスなしで作成されたばかりです。Shell ビューは、非フォーカス状態に適したメニュー項目を設定できるべきです。これは、選択に固有の項目を追加すべきではないことを意味します。 SVUIA_DEACTIVATEWindows エクスプローラーが Shell ビュー ウィンドウを破棄しようとしています。Shell ビューは、すべての拡張ユーザー インターフェイスを削除する必要があります。これらは通常、マージされたメニューやマージされたモードレス ポップアップ ウィンドウです。 SVUIA_INPLACEACTIVATEShell ビューはフォーカスなしでアクティブです。このフラグは、UIActivate が IShellView2 インターフェイスを通じて公開される場合にのみ使用されます。 |
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合は COM で定義されたエラー値を返します。
解説(Remarks)
メニュー項目を再マージする前に、Shell ビューは通常 WM_SETFOCUS メッセージをフックし、OnViewWindowActive メソッドを呼び出します。Shell ビューは、メニュー項目を再マージするために NM_KILLFOCUS メッセージをフックすべきではありません。
呼び出し側アプリケーションへの注意事項
アクティブ化状態の変更をビューに通知するには、このメソッドを呼び出します。実装者への注意事項
このメソッドを使用して、アクティブ化状態を追跡し、必要に応じて動作を変更します。ユーザー入力に応じてビューの内容を更新します。
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合は COM で定義されたエラー値を返します。
解説(Remarks)
ビューに対して、保持しているビュー情報を再検証しながら内容を更新するよう指示します。
呼び出し側アプリケーションへの注意事項
Windows エクスプローラーは、既に開いているビューで F5 キーが押されたときにこのメソッドを呼び出します。実装者への注意事項
内容を格納している基盤ストレージにアクセスして、ビューを再度満たします。ビュー ウィンドウを作成します。これは、Windows エクスプローラーの右ペインか、フォルダー ウィンドウのクライアント ウィンドウのいずれかになります。
| psvPrevious | IShellView* | in | 終了しようとしているビュー ウィンドウの IShellView インターフェイスのアドレス。ビューは、このパラメーターを使用して同じ実装の以前のビューと通信できます。このインターフェイスは、類似したビュー間の参照を最適化するために使用できます。このポインターは NULL の場合があります。 |
| pfs | FOLDERSETTINGS* | in | FOLDERSETTINGS 構造体のアドレス。ビューは、自身のビューを作成する際にこれを使用する必要があります。 |
| psb | IShellBrowser* | in | IShellBrowser インターフェイスの現在のインスタンスのアドレス。ビューは、Windows エクスプローラー ウィンドウとの通信を可能にするために、このインターフェイスの AddRef メソッドを呼び出し、インターフェイス ポインターを保持する必要があります。 |
| prcView | RECT* | in | 新しいビューの寸法(クライアント座標)。 |
| phWnd | HWND* | out | 作成されるウィンドウ ハンドルのアドレス。 |
戻り値
型: HRESULT
成功した場合は成功コードを、それ以外の場合は COM エラー コードを返します。操作が成功したか失敗したかを判断するには、SUCCEEDED および FAILED マクロを使用します。
解説(Remarks)
呼び出し側アプリケーションへの注意事項
ビューを作成する必要があるときに、このメソッドを呼び出します。実装者への注意事項
ビュー ウィンドウを作成し、GetViewStateStream メソッドを呼び出して、永続化された状態を復元します。IShellBrowser ポインターを保存して、後で使用できるようにします。ビュー ウィンドウを破棄します。
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合は COM で定義されたエラー値を返します。
解説(Remarks)
Windows エクスプローラーは、フォルダー ウィンドウまたは Windows エクスプローラーが閉じられようとしているときに、このメソッドを呼び出します。
実装者への注意事項
ウィンドウやその他の関連リソースを含め、ビューを表すすべての状態をクリーンアップします。現在のフォルダー設定を取得します。
| pfs | FOLDERSETTINGS* | out | 設定を受け取る FOLDERSETTINGS 構造体のアドレス。 |
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合は COM で定義されたエラー値を返します。
解説(Remarks)
Windows エクスプローラーは、標準設定をビューに問い合わせるためにこのメソッドを使用します。
呼び出し側アプリケーションへの注意事項
このメソッドは、ビューの現在のビュー設定を取得するために使用されます。実装者への注意事項
該当する設定をできる限り多く返します。これは、ユーザーがビューからビューへ移動する際に同じ基本設定を維持することを目的としています。たとえば、ユーザーが詳細表示を設定した場合、Windows エクスプローラー モードであるフォルダーから別のフォルダーへ移動しても、その表示が維持されるべきです。ビューが、表示メニューのオプション プロパティ シートにページを追加できるようにします。
| dwReserved | DWORD | in | 予約済み。 |
| pfn | LPFNSVADDPROPSHEETPAGE | in | ページを追加するために使用するコールバック関数のアドレス。 |
| lparam | LPARAM | in | コールバック関数の lparam パラメーターとして渡す必要がある値。 |
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合は COM で定義されたエラー値を返します。
解説(Remarks)
実装者への注意事項
Windows エクスプローラーは、表示メニューから オプション プロパティ シートを開くときにこのメソッドを呼び出します。ビューは、ページを作成し、そのページ ハンドルを指定してコールバック関数を呼び出すことでページを追加できます。後続の参照セッション中に現在の状態を復元できるように、Shell のビュー設定を保存します。
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合は COM で定義されたエラー値を返します。
解説(Remarks)
Shell ビューは、GetViewStateStream メソッドを呼び出してビュー ストリームを取得し、現在のビュー状態をそのストリームに格納します。
呼び出し側アプリケーションへの注意事項
Windows エクスプローラーは、ビューのビュー状態を保存したいときにこのメソッドを呼び出します。実装者への注意事項
ストリームに格納するデータの形式は、実装の異なるバージョンでもエラーなく読み取れるように十分に堅牢なものにしてください。Shell ビュー ウィンドウ内の 1 つ以上の項目の選択状態を変更します。
| pidlItem | ITEMIDLIST* | in | ITEMIDLIST 構造体のアドレス。 |
| uFlags | DWORD | in | 適用する選択の種類を指定する _SVSIF 定数のいずれか。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
ビューに表示されているデータを参照するインターフェイスを取得します。
| uItem | DWORD | in | ビューのある側面を参照する定数。このパラメーターには、_SVGIO 定数のいずれかを指定できます。 |
| riid | GUID* | in | 要求している COM インターフェイスの識別子。 |
| ppv | void** | out | インターフェイス ポインターを受け取るアドレス。エラーが発生した場合、返されるポインターは NULL でなければなりません。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
コモン ダイアログ ボックスが、ビューから選択された項目を取得するために使用します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IShellView "{000214E3-0000-0000-C000-000000000046}" #usecom global IShellView IID_IShellView "{}" #comfunc global IShellView_TranslateAccelerator 5 var #comfunc global IShellView_EnableModeless 6 int #comfunc global IShellView_UIActivate 7 int #comfunc global IShellView_Refresh 8 #comfunc global IShellView_CreateViewWindow 9 sptr,var,sptr,var,sptr #comfunc global IShellView_DestroyViewWindow 10 #comfunc global IShellView_GetCurrentInfo 11 var #comfunc global IShellView_AddPropertySheetPages 12 int,sptr,sptr #comfunc global IShellView_SaveViewState 13 #comfunc global IShellView_SelectItem 14 var,int #comfunc global IShellView_GetItemObject 15 int,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IShellView "{000214E3-0000-0000-C000-000000000046}" #usecom global IShellView IID_IShellView "{}" #comfunc global IShellView_TranslateAccelerator 5 sptr #comfunc global IShellView_EnableModeless 6 int #comfunc global IShellView_UIActivate 7 int #comfunc global IShellView_Refresh 8 #comfunc global IShellView_CreateViewWindow 9 sptr,sptr,sptr,sptr,sptr #comfunc global IShellView_DestroyViewWindow 10 #comfunc global IShellView_GetCurrentInfo 11 sptr #comfunc global IShellView_AddPropertySheetPages 12 int,sptr,sptr #comfunc global IShellView_SaveViewState 13 #comfunc global IShellView_SelectItem 14 sptr,int #comfunc global IShellView_GetItemObject 15 int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。