Index: src/chext/DropMenuExt.cpp =================================================================== diff -u -N -rd2b121c78f510b5384b8ef0ca80afbfd7f77fef7 -rd0fdcc905035e648382256101a3d99f429af6d56 --- src/chext/DropMenuExt.cpp (.../DropMenuExt.cpp) (revision d2b121c78f510b5384b8ef0ca80afbfd7f77fef7) +++ src/chext/DropMenuExt.cpp (.../DropMenuExt.cpp) (revision d0fdcc905035e648382256101a3d99f429af6d56) @@ -20,6 +20,8 @@ #include "chext.h" #include "DropMenuExt.h" #include "clipboard.h" +#include "chext-utils.h" + ///////////////////////////////////////////////////////////////////////////// // CDropMenuExt @@ -30,8 +32,28 @@ #define DE_SPECIAL 2 #define DE_AUTO 3 +CDropMenuExt::CDropMenuExt() : + m_piShellExtControl(NULL) +{ + CoCreateInstance(CLSID_CShellExtControl, NULL, CLSCTX_ALL, IID_IShellExtControl, (void**)&m_piShellExtControl); +} + +CDropMenuExt::~CDropMenuExt() +{ + if(m_piShellExtControl) + { + m_piShellExtControl->Release(); + m_piShellExtControl = NULL; + } +} + STDMETHODIMP CDropMenuExt::QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT /*idCmdLast*/, UINT /*uFlags*/) { + // check options + HRESULT hResult = IsShellExtEnabled(m_piShellExtControl); + if(FAILED(hResult) || hResult == S_FALSE) + return hResult; + // find CH's window HWND hWnd; hWnd=::FindWindow(_T("Copy Handler Wnd Class"), _T("Copy handler")); @@ -106,6 +128,14 @@ STDMETHODIMP CDropMenuExt::GetCommandString(UINT_PTR idCmd, UINT uFlags, UINT* /*pwReserved*/, LPSTR pszName, UINT cchMax) { + // check options + HRESULT hResult = IsShellExtEnabled(m_piShellExtControl); + if(FAILED(hResult) || hResult == S_FALSE) + { + pszName[0] = _T('\0'); + return hResult; + } + if (uFlags == GCS_HELPTEXTW) { USES_CONVERSION; @@ -170,6 +200,10 @@ STDMETHODIMP CDropMenuExt::Initialize(LPCITEMIDLIST pidlFolder, LPDATAOBJECT lpdobj, HKEY /*hkeyProgID*/) { // OTF2("Initialize cdropmenuext\r\n"); + HRESULT hResult = IsShellExtEnabled(m_piShellExtControl); + if(FAILED(hResult) || hResult == S_FALSE) + return hResult; + // find window HWND hWnd=::FindWindow(_T("Copy Handler Wnd Class"), _T("Copy handler")); if (hWnd == NULL) @@ -306,6 +340,10 @@ STDMETHODIMP CDropMenuExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpici) { + HRESULT hResult = IsShellExtEnabled(m_piShellExtControl); + if(FAILED(hResult) || hResult == S_FALSE) + return hResult; + // find window HWND hWnd=::FindWindow(_T("Copy Handler Wnd Class"), _T("Copy handler")); if (hWnd == NULL)