パスワードを忘れた? アカウント作成
199109 journal

Claybirdの日記: IContextMenu::GetCommandString()

日記 by Claybird

Windowsのシェル拡張による右クリックメニューについて、追加したはずのメニューが表示されないバグがあった。これまでIContextMenu::QueryContextMenu()内で問題があると考え、InsertMenuItem()の呼び方が悪いのか、とか、OSの仕様なのか、とかいろいろ試していた。

が、http://blogs.msdn.com/oldnewthing/archive/2004/10/06/238630.aspxを読んでいて、QueryContextMenu()は正常で、GetCommandString()に問題があった事に気づいた。

ドキュメントなどを読むと、どうやら、GetCommandString()がメニューの存在確認も行っているらしい、と言うか、このメソッドで前に追加された古いメニューを消して良い物かどうかの判定をしているらしい。メソッドの名前からは想像しにくい機能だ。

GetCommandString()呼び出し時のフラグに GCS_VALIDATEA / GCS_VALIDATEW があると、存在確認らしいので、適当にS_OKなどを返しておかないと勝手にメニューが消されてしまう。

このあたりのコードを修正すると、今まで動かなかったコードが動くようになった。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家

読み込み中...