« VB6アプリでマウスホイールを使う。 | トップページ | シェル拡張-エクスプローラのコンテキストメニューを拡張 [2] »

2009年4月 9日 (木)

シェル拡張-エクスプローラのコンテキストメニューを拡張 [1]

Platform SDKのサンプルプログラム ShellExt のソースを流用することによりエクスプローラのコンテキストメニューを拡張する方法を調べてみた。
サンプルプログラムはプロパティシートやアイコンハンドラの拡張もしているが、ここではコンテキストメニューの拡張に対象を限る。

利用したPlatform SDK は "Microsoft Platform SDK September 1999 Edition"
開発環境は Windows2000Pro + Visual C++ 6.0


1.VC++にてプロジェクトの新規作成
"Win32 Dynamic-Link Library" - 空のDLLプロジェクト

2.SDKサンプル ShellExt から以下のファイルをコピーし、新プロジェクトに追加
 Priv.h
 ShellExt.h
 ShellExt.cpp
 CtxMenu.cpp
 ShExInit.cpp
 ShellExt.def

3.ShellExt.h の修正
 (1) GUIDを再生成して、CLSID_ShellExtension の定義を書き換える。
  GUIDの生成にはたとえばVC++6付属の GUIDGEN.EXE を利用。
 
 (2) クラスCShellExt の定義の修正
  ・IContextMenuIShellExtInit だけを継承する。
  ・IExtraction/IPersistFile/IShellPropSheetExt/ICopyHookのメソッド定義を削除
  ・GetCommandStringメソッドの第一引数の型を UINT_PTR から UINT に変更
   (これをしないとコンパイルエラー「GetCommandStringの宣言を確認してください」)

4.ShellExt.cpp の修正
 (1) CShellExt::QueryInterface メソッドの修正
  ・IDD_IExtraction/IID_IPersistFile/IID_IShellPropSheetExt/IID_IShellCopyHook に対する処理の部分(else if の羅列)を削除
 
5.CtxMenu.cpp の修正
 (1) CShellExt::GetCommandString メソッドの修正
  ・第一引数の型を UINT_PTR から UINT に変更

6.ShellExt.def の修正
 (1) LIBRARY をDLL名に


コンテキストメニューは元々のサンプルのままだが以上でコンパイルはOK

ページを改めてレジストリの設定について...

« VB6アプリでマウスホイールを使う。 | トップページ | シェル拡張-エクスプローラのコンテキストメニューを拡張 [2] »

ソフトウエア」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: シェル拡張-エクスプローラのコンテキストメニューを拡張 [1]:

« VB6アプリでマウスホイールを使う。 | トップページ | シェル拡張-エクスプローラのコンテキストメニューを拡張 [2] »