板 1- 前 次 新 レス
管理人の雑記
[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
lukewarm.s101.xrea
サイズ: 1521 bytes
前 次