Iwao Dev

気付いたことをメモしています.

この画面は、簡易表示です

2012年3月13日

Shell Extension InfoTip の追加

Shell Extension の作成 InfoTip

1.プロジェクトの作成
 MFC App Wizard(dll)
  「スタティックライブラリを使用した DLL」を選択
  「オートメーション」のサポート
2.クラスファクトリの作成
 Class Wizard で,クラスの新規作成
  基本クラスは CCmdTarget
  「タイプ ID で作成」
3.ヘッダ部に INTERFACE_PART の追加
 BEGIN_INTERFACE_PART(QueryInfoT,IQueryInfo)
  STDMETHOD (GetInfoFlags) (DWORD* pdwFlags) ;
  STDMETHOD (GetInfoTip ) (DWORD dwFlags,LPWSTR* ppwszTip) ;
 END_INTERFACE_PART (QueryInfoT)
 …
 BEGIN_INTERFACE_PART(PersistFile,IPersistFile)
 …
4.必要な変数を追加
 InfoTip の場合,FileName など
5.ソースに INTERFACE_MAP の追加
 BEGIN_INTERFACE_MAP(CI_ShellExt,CCmdTarget)
  INTERFACE_PART (CI_ShellExt,IID_IQueryInfo,QueryInfoT)
  INTERFACE_PART (CI_ShellExt,IID_IPersistFile,PersistFile)
 END_INTERFACE_MAP ()
6.CI_ShellExt::XQueryInfoT::~ の実装
 幾つかはある程度決まったコードになる.
CI_ShellExt::XQueryInfoT::GetInfoTipは,ppwszTipに表示する文字列を返す.


METHOD_PROLOGUE pThisでCCmdTargetの派生クラスにアクセス可能になる.


レジストリへの登録
[HKEY_CURRENT_USER\Software\Classes\CLSID\{56D044C5-9F47-4CD3-B130-9E52BE7460F3}]
@=”I.ShellExt”

[HKEY_CURRENT_USER\Software\Classes\CLSID\{56D044C5-9F47-4CD3-B130-9E52BE7460F3}\InProcServer32]
@=”C:\\Documents and Settings\\All Users\\Documents\\VC_TEST\\IShlExt\\Release\\I_Shl_E.dll”
“ThreadingModel”=”Apartment”

[HKEY_CURRENT_USER\Software\Classes\CLSID\{56D044C5-9F47-4CD3-B130-9E52BE7460F3}\ProgID]
@=”I.ShellExt”

拡張子の登録例
[HKEY_CURRENT_USER\Software\Classes\.Test_ShellExt\ShellEx\{00021500-0000-0000-C000-000000000046}]
@=”{56D044C5-9F47-4CD3-B130-9E52BE7460F3}”


{56D044C5-9F47-4CD3-B130-9E52BE7460F3} の部分は,ソースの IMPLEMENT_OLECREATE の前の行のコメントより


今回使用したコードは,IShlExt.zip


参考にしたのは,
Debugging with the Shell

MSDN Magazine 2000/04 新しいinfotip,アイコンオーバーレイ,シェルエクステンション
Windows 2000 UI Innovations: Enhance Your User’s Experience with New Infotip and Icon Overlay Shell Extensions

MSDN Magazine 2000/07 ハイパーテキストテンプレートファイルのカスタマイズによるエクスプローラの表示の拡張

Windows 95 ユーザーインターフェイス プログラミング


ExtractImage を実装してエラーになった場合
I_ShlExt.obj:error LNK2001:外部シンボル “_IID_IExtractImage” は未解決です
#include <initguid.h> を I_ShlExt.cpp の StdAfx.h の次に追加.

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ

  • Categories:


    top

    %d人のブロガーが「いいね」をつけました。