int csidl = 0;
IShellMenu *pShellMenu;
+#if USE_SYSTEM_MENUBAND
+ hr = CoCreateInstance(CLSID_MenuBand,
+ NULL,
+ CLSCTX_INPROC_SERVER,
+ IID_PPV_ARG(IShellMenu, &pShellMenu));
+#else
hr = CMenuBand_Constructor(IID_PPV_ARG(IShellMenu, &pShellMenu));
+#endif
if (FAILED_UNEXPECTEDLY(hr))
return hr;
HRESULT OnExec(LPSMDATA psmd)
{
+ // H H A CCC K K ! ! !
+ // H H A A C C K K ! ! !
+ // HHHHH AAAAA C KKK ! ! !
+ // H H A A C C K K ! ! !
+ // H H A A CCC K K . . .
+ //
+ // HACK: Instead of running explorer.exe with the path, we should be using ShellExecute to "open" the path directly!
+ // Remove once ShellExecute can handle CLSID path components.
+
if (psmd->uId == IDM_CONTROLPANEL)
- ShellExecuteW(NULL, L"open", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}", NULL, NULL, 1);
+ ShellExecuteW(NULL, NULL, L"explorer.exe", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}", NULL, SW_SHOWNORMAL);
else if (psmd->uId == IDM_NETWORKCONNECTIONS)
- ShellExecuteW(NULL, L"open", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}", NULL, NULL, 1);
+ ShellExecuteW(NULL, NULL, L"explorer.exe", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}", NULL, SW_SHOWNORMAL);
else if (psmd->uId == IDM_PRINTERSANDFAXES)
- ShellExecuteW(NULL, L"open", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{2227A280-3AEA-1069-A2DE-08002B30309D}", NULL, NULL, 1);
+ {}/* FIXME: crashes: ShellExecuteW(NULL, NULL, L"explorer.exe", L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{2227A280-3AEA-1069-A2DE-08002B30309D}", NULL, SW_SHOWNORMAL);*/
else
PostMessageW(m_hwndTray, WM_COMMAND, psmd->uId, 0);
IBandSite* pBandSite,
IDeskBar* pDeskBar)
{
- m_pShellMenu.Attach(pShellMenu);
- m_pBandSite.Attach(pBandSite);
- m_pDeskBar.Attach(pDeskBar);
+ m_pShellMenu = pShellMenu;
+ m_pBandSite = pBandSite;
+ m_pDeskBar = pDeskBar;
}
~CShellMenuCallback()
{
- m_pShellMenu.Release();
- m_pBandSite.Release();
- m_pDeskBar.Release();
}
HRESULT _SetProgramsFolder(IShellFolder * psf, LPITEMIDLIST pidl)
HRESULT WINAPI
CStartMenu_Constructor(REFIID riid, void **ppv)
{
- IShellMenu* pShellMenu;
- IBandSite* pBandSite;
- IDeskBar* pDeskBar;
+ CComPtr<IShellMenu> pShellMenu;
+ CComPtr<IBandSite> pBandSite;
+ CComPtr<IDeskBar> pDeskBar;
HRESULT hr;
IShellFolder * psf;
LPITEMIDLIST pidlPrograms;
CComPtr<IShellFolder> psfPrograms;
+#if USE_SYSTEM_MENUBAND
+ hr = CoCreateInstance(CLSID_MenuBand,
+ NULL,
+ CLSCTX_INPROC_SERVER,
+ IID_PPV_ARG(IShellMenu, &pShellMenu));
+#else
hr = CMenuBand_Constructor(IID_PPV_ARG(IShellMenu, &pShellMenu));
+#endif
if (FAILED_UNEXPECTEDLY(hr))
return hr;
+#if USE_SYSTEM_MENUSITE
+ hr = CoCreateInstance(CLSID_MenuBandSite,
+ NULL,
+ CLSCTX_INPROC_SERVER,
+ IID_PPV_ARG(IBandSite, &pBandSite));
+#else
hr = CMenuSite_Constructor(IID_PPV_ARG(IBandSite, &pBandSite));
+#endif
if (FAILED_UNEXPECTEDLY(hr))
return hr;
+#if USE_SYSTEM_MENUDESKBAR
+ hr = CoCreateInstance(CLSID_MenuDeskBar,
+ NULL,
+ CLSCTX_INPROC_SERVER,
+ IID_PPV_ARG(IDeskBar, &pDeskBar));
+#else
hr = CMenuDeskBar_Constructor(IID_PPV_ARG(IDeskBar, &pDeskBar));
+#endif
if (FAILED_UNEXPECTEDLY(hr))
return hr;