나는 C++ 셸 확장 DLL을 가지고 있습니다. 초기화 메서드는 탐색기 창 왼쪽의 트리 트리 뷰 폴더를 클릭하면 두 번 호출됩니다. 그러나 탐색기 창 오른쪽 창에서 폴더를 클릭하면 Initialize 메서드가 한 번 호출됩니다.Windows 7 - 셸 확장 dll 탐색기 왼쪽 창에서 두 번 호출되는 메서드 초기화
왼쪽 창 트리보기를 클릭하면 새로 추가 된 메뉴 항목이 컨텍스트 메뉴에 두 번 표시됩니다.
궁금한 점은 창 기능입니까? 나는 아래의 코드 내 모든 구현을 주석하고 테스트 한 : 나는 왼쪽 창을 클릭하면
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 상황
초기화
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"를 제거하면 상황에 맞는 메뉴가 트리보기에 한 번 표시됩니다. 하지만 폴더 빈 영역을 클릭하면 Initialize 메서드가 호출되지 않습니다.
난 당신이 상황에 맞는 메뉴 셸 확장에 대해 말하기한다고 가정합니다. 그렇다면 확실히 올바른 Windows 기능이 아닙니다. 코드를 게시 할 수 있습니까? – Flot2011
초기화 (LPCITEMIDLIST pidlFolder, LPDATAOBJECT pDO, HKEY/* hkeyProgID * /). 이 방법으로 내 메뉴 채우기를하고 있습니다. 이 함수에 로그 메시지가 추가되었으며 초기화 메소드가 두 번 호출하는 것처럼 보입니다. – kanden
서명뿐만 아니라 코드를 게시 할 수 있습니까? 그렇지 않으면 추측 게임 일뿐입니다. – Flot2011