XREA.COM Logo XREA.COM Ad

管理人の雑記

32管理人 ★:2007/03/13(火) 09:46:32
ファイルのコンテキストメニューを表示

関数のポインタを指定して呼び出せるようになったので、IContextMenuを使ってコンテキストメニューを表示してみることに。
SHGetDesktopFolderでルートフォルダを取得後、ParseDisplayNameでファイルの親フォルダのアイテムIDリストを取得し、BindToObjectで新たなIShellFolderを取得、更にParseDisplayNameでファイルのアイテムIDリストを取得、GetUIObjectOfでIContextMenuを取得、CreatePopupMenuで作ったメニューにQueryContextMenuでメニューを追加しTrackPopupMenuで表示しコマンドIDを得てInvokeCommandで実行というような手順らしい。
インターフェイスのIDを指定するGUID構造体というのが面倒くさそうだったが、CLSIDFromStringというAPIで文字列から変換できることが分かった。

とりあえず大体動作したが、「送る」メニューが正しく表示されない。
IContextMenu2というインターフェイスなら表示できるらしいが、WM_INITMENUPOPUPなどのメッセージをIContextMenu2のHandleMenuMsgメソッドに送ってやる必要があるらしい。
しかし、TrackPopupMenuでメニューを表示している間は処理が停止するという仕組みのせいか、OnMessageでメッセージを乗っ取ろうとしてもうまくいかない。
事前にメニューのハンドルとかを取得してHandleMenuMsgを呼び出しておけばいいような気がするが、メニューの表示が遅くなるし、面倒なんであきらめた。

投稿ファイル名: FileContextMenu.zip
http://lukewarm.s101.xrea.com/bbs/file/1146398137_32.zip
サイズ: 1521 bytes
101KB
名前: E-mail:
ファイル:
0ch BBS 2005-10-08