Ich habe eine C++ Shell-Erweiterung dll. Die Initialize Methode wird zweimal aufgerufen, wenn ich auf die Explorer-Fenster linken Fensterbaumansichtsordner klicke. Wenn ich jedoch im rechten Fensterbereich des Explorerfensters auf einen Ordner klicke, wird die Initialize-Methode einmal aufgerufen.Windows 7 - Shell Extension dll Initialize-Methode aufgerufen zweimal im Explorer linken Bereich
Das Problem ist meine neu hinzugefügte Menüpunkte zweimal im Kontextmenü zeigt, wenn ich dann auf der linken Baumansicht klicken.
Ich frage mich, ist es eine Fensterfunktion? Ich habe alle meine Implementierung und getestet mit dem folgenden Code kommentiert:
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;
}
Wenn ich auf linken Bereich klicken, wird der DebugViewr Ausgabe lautet:
initialisieren
QueryContextMenu
initialisieren
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}'
}
}
}
Der obige Registrierungseintrag verursacht dieses Problem in Win 7, Wenn ich „NoRemove Hintergrund“ entfernen, wird das Kontextmenü einmal in der Baumansicht angezeigt. Aber wenn ich auf Ordner leeren Bereich klicke, wird die Initialize-Methode nicht aufgerufen.
Ich nehme an, Sie über ein Kontextmenü Shell-Erweiterung sprechen. Wenn ja, ist es definitiv keine korrekte Windows-Funktionalität. Kannst du etwas Code posten? – Flot2011
Initialisieren (LPCITEMIDLIST pidlFolder, LPDATAOBJECT pDO, HKEY/* hkeyProgID * /). Ich mache meine Menüpopulation in dieser Methode. Ich habe log message in dieser Funktion hinzugefügt und es sieht aus wie Initialisierungsmethode, die zweimal aufruft. – kanden
Können Sie bitte den Code und nicht nur die Signatur posten? Ansonsten ist es nur ein Ratespiel. – Flot2011