Reactos
1/*
2 * PROJECT: ReactOS shell32
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Copy as Path Menu implementation
5 * COPYRIGHT: Copyright 2024 Whindmar Saksit <whindsaks@proton.me>
6 * Copyright 2024 Thamatip Chitpong <thamatip.chitpong@reactos.org>
7 */
8
9#pragma once
10
11class CCopyAsPathMenu :
12 public CComCoClass<CCopyAsPathMenu, &CLSID_CopyAsPathMenu>,
13 public CComObjectRootEx<CComMultiThreadModelNoCS>,
14 public IContextMenu,
15 public IShellExtInit
16{
17private:
18 CComPtr<IDataObject> m_pDataObject;
19
20 HRESULT DoCopyAsPath(IDataObject *pdto);
21
22public:
23 CCopyAsPathMenu();
24 ~CCopyAsPathMenu();
25
26 // IContextMenu
27 STDMETHODIMP QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) override;
28 STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) override;
29 STDMETHODIMP GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen) override;
30
31 // IShellExtInit
32 STDMETHODIMP Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID) override;
33
34 DECLARE_REGISTRY_RESOURCEID(IDR_COPYASPATHMENU)
35 DECLARE_NOT_AGGREGATABLE(CCopyAsPathMenu)
36
37 DECLARE_PROTECT_FINAL_CONSTRUCT()
38
39 BEGIN_COM_MAP(CCopyAsPathMenu)
40 COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu)
41 COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit)
42 END_COM_MAP()
43};