シェル拡張-エクスプローラのコンテキストメニューを拡張 [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 の定義の修正
・IContextMenu と IShellExtInit だけを継承する。
・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] »
「ソフトウエア」カテゴリの記事
- PIC18用Cコンパイラ(PCH)メモ (3) 【const修飾子】(2015.05.10)
- PIC18用Cコンパイラ(PCH)メモ (2) 【関数ポインタ】(2015.05.10)
- PIC18用Cコンパイラ(PCH)メモ (1)(2015.05.06)
- PIC用Cコンパイラを開発元から直接購入(2015.05.04)
- オライリー「JavaScript」(2014.01.16)
« VB6アプリでマウスホイールを使う。 | トップページ | シェル拡張-エクスプローラのコンテキストメニューを拡張 [2] »
コメント