私はC++シェル拡張dllを持っています。 メソッドの初期化は、エクスプローラウィンドウの左ペインのツリービューフォルダをクリックすると2回呼び出されます。しかし、エクスプローラウィンドウの右ペインで任意のフォルダをクリックすると、Initializeメソッドが一度呼び出されます。Windows 7 - シェル拡張dllエクスプローラの左ペインで2回呼び出される初期化メソッド
左ペインのツリービューをクリックすると、新しく追加されたメニュー項目がコンテキストメニューに2回表示されるという問題があります。
私は窓の機能ですか? 私は以下のコードですべての私の実装をコメントしてテストした:私は左ペインをクリックすると
IFACEMETHODIMP CMyContextMenu::QueryContextMenu(HMENU hmenu, UINT /*uIndex*/, UINT cmdFirst, UINT /*uidCmdLast*/, UINT /*uFlags*/)
{
UINT cmdId = uidCmdFirst;
OutputDebugString(L"QueryContextMenu");
return MAKE_HRESULT (SEVERITY_SUCCESS, FACILITY_NULL, cmdId - mdFirst);
}
IFACEMETHODIMP CMyContextMenu::Initialize(LPCITEMIDLIST pidlFolder, LPDATAOBJECT pDO, HKEY /*hkeyProgID*/)
{
OutputDebugString(L"Initialize");
return S_OK;
}
、DebugViewr出力は次のとおりです。
初期
QueryContextMenu
初期化
クエリコンテキストメニュー
NoRemove Directory
{
NoRemove Background
{
NoRemove ShellEx
{
NoRemove ContextMenuHandlers
{
ForceRemove myContext = s '{AE843198-3C5D-4EA6-B74F-7A41FC91D7FF}'
}
}
}
}
NoRemove Directory
{
NoRemove ShellEx
{
NoRemove ContextMenuHandlers
{
ForceRemove myContext = s '{AE843198-3C5D-4EA6-B74F-7A41FC91D7FF}'
}
}
}
上記のレジストリエントリはWindows 7でこの問題を引き起こしています。「NoRemove Background」を削除すると、コンテキストメニューがツリービューで1回表示されます。しかし、空の領域をクリックするとInitializeメソッドが呼び出されません。
私はあなたのコンテキストメニューシェル拡張について話していると仮定します。もしそうなら、それは間違いなく正しいWindowsの機能です。いくつかのコードを投稿できますか? – Flot2011
初期化(LPCITEMIDLIST pidlFolder、LPDATAOBJECT pDO、HKEY/* hkeyProgID * /)。私はこの方法でメニューの母集団をやっています。この関数にログメッセージを追加しました。初期化メソッドのように2回呼び出します。 – kanden
署名だけでなく、コードを投稿できますか?さもなければそれはちょうど推測ゲームです。 – Flot2011