1 // MyExplorerCommand.h 2 3 #ifndef ZIP7_INC_MY_EXPLORER_COMMAND_H 4 #define ZIP7_INC_MY_EXPLORER_COMMAND_H 5 6 #if _MSC_VER >= 1910 7 #define USE_SYS_shobjidl_core 8 #endif 9 10 #ifdef USE_SYS_shobjidl_core 11 12 // #include <shobjidl_core.h> 13 14 #else 15 16 /* IShellItem is defined: 17 ShObjIdl.h : old Windows SDK 18 ShObjIdl_core.h : new Windows 10 SDK */ 19 20 #ifndef Z7_OLD_WIN_SDK 21 #include <ShObjIdl.h> 22 #endif 23 24 #ifndef __IShellItem_INTERFACE_DEFINED__ 25 #define __IShellItem_INTERFACE_DEFINED__ 26 27 // For MINGW we define IShellItem 28 29 // #error Stop_Compiling__NOT_DEFINED__IShellItem_INTERFACE_DEFINED__ 30 31 typedef 32 enum 33 { SIGDN_NORMALDISPLAY = 0, 34 SIGDN_PARENTRELATIVEPARSING = 0x80018001, 35 SIGDN_PARENTRELATIVEFORADDRESSBAR = 0x8001c001, 36 SIGDN_DESKTOPABSOLUTEPARSING = 0x80028000, 37 SIGDN_PARENTRELATIVEEDITING = 0x80031001, 38 SIGDN_DESKTOPABSOLUTEEDITING = 0x8004c000, 39 SIGDN_FILESYSPATH = 0x80058000, 40 SIGDN_URL = 0x80068000 41 } SIGDN; 42 43 44 typedef DWORD SICHINTF; 45 typedef ULONG SFGAOF; 46 47 struct IShellItem : public IUnknown 48 { 49 virtual HRESULT STDMETHODCALLTYPE BindToHandler(IBindCtx *pbc, REFGUID rbhid, REFIID riid, void **ppvOut) = 0; 50 virtual HRESULT STDMETHODCALLTYPE GetParent(IShellItem **ppsi) = 0; 51 virtual HRESULT STDMETHODCALLTYPE GetDisplayName(SIGDN sigdnName, LPOLESTR *ppszName) = 0; 52 virtual HRESULT STDMETHODCALLTYPE GetAttributes(SFGAOF sfgaoMask, SFGAOF *psfgaoAttribs) = 0; 53 virtual HRESULT STDMETHODCALLTYPE Compare(IShellItem *psi, SICHINTF hint, int *piOrder) = 0; 54 }; 55 56 #endif // __IShellItem_INTERFACE_DEFINED__ 57 58 59 60 #ifndef __IShellItemArray_INTERFACE_DEFINED__ 61 #define __IShellItemArray_INTERFACE_DEFINED__ 62 63 // propsys.h 64 65 typedef /* [v1_enum] */ 66 enum GETPROPERTYSTOREFLAGS 67 { 68 GPS_DEFAULT = 0, 69 GPS_HANDLERPROPERTIESONLY = 0x1, 70 GPS_READWRITE = 0x2, 71 GPS_TEMPORARY = 0x4, 72 GPS_FASTPROPERTIESONLY = 0x8, 73 GPS_OPENSLOWITEM = 0x10, 74 GPS_DELAYCREATION = 0x20, 75 GPS_BESTEFFORT = 0x40, 76 GPS_NO_OPLOCK = 0x80, 77 GPS_PREFERQUERYPROPERTIES = 0x100, 78 GPS_EXTRINSICPROPERTIES = 0x200, 79 GPS_EXTRINSICPROPERTIESONLY = 0x400, 80 GPS_VOLATILEPROPERTIES = 0x800, 81 GPS_VOLATILEPROPERTIESONLY = 0x1000, 82 GPS_MASK_VALID = 0x1fff 83 } GETPROPERTYSTOREFLAGS; 84 85 // DEFINE_ENUM_FLAG_OPERATORS(GETPROPERTYSTOREFLAGS) 86 87 88 #ifndef PROPERTYKEY_DEFINED 89 #define PROPERTYKEY_DEFINED 90 91 typedef 92 struct 93 { 94 GUID fmtid; 95 DWORD pid; 96 } PROPERTYKEY; 97 98 #endif // PROPERTYKEY_DEFINED 99 100 // propkeydef.h 101 #define REFPROPERTYKEY const PROPERTYKEY & 102 103 #ifdef INITGUID 104 #define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY DECLSPEC_SELECTANY name = { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid } 105 #else 106 #define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY name 107 #endif // INITGUID 108 109 110 // <shobjidl_core.h> 111 typedef /* [v1_enum] */ 112 enum SIATTRIBFLAGS 113 { 114 SIATTRIBFLAGS_AND = 0x1, 115 SIATTRIBFLAGS_OR = 0x2, 116 SIATTRIBFLAGS_APPCOMPAT = 0x3, 117 SIATTRIBFLAGS_MASK = 0x3, 118 SIATTRIBFLAGS_ALLITEMS = 0x4000 119 } SIATTRIBFLAGS; 120 121 // DEFINE_ENUM_FLAG_OPERATORS(SIATTRIBFLAGS) 122 123 124 // MIDL_INTERFACE("70629033-e363-4a28-a567-0db78006e6d7") 125 DEFINE_GUID(IID_IEnumShellItems, 0x70629033, 0xe363, 0xe363, 0xa5, 0x67, 0x0d, 0xb7, 0x80, 0x06, 0xe6, 0xd7); 126 127 struct IEnumShellItems : public IUnknown 128 { 129 STDMETHOD (Next) (ULONG celt, IShellItem **rgelt, ULONG *pceltFetched) = 0; 130 STDMETHOD (Skip) (ULONG celt) = 0; 131 STDMETHOD (Reset) (void) = 0; 132 STDMETHOD (Clone) (IEnumShellItems **ppenum) = 0; 133 }; 134 135 136 // MIDL_INTERFACE("b63ea76d-1f85-456f-a19c-48159efa858b") 137 DEFINE_GUID(IID_IShellItemArray, 0xb63ea76d, 0x1f85, 0x456f, 0xa1, 0x9c, 0x48, 0x15, 0x9e, 0xfa, 0x85, 0x8b); 138 139 struct IShellItemArray : public IUnknown 140 { 141 STDMETHOD (BindToHandler) (IBindCtx *pbc, REFGUID bhid, REFIID riid, void **ppvOut) = 0; 142 STDMETHOD (GetPropertyStore) (GETPROPERTYSTOREFLAGS flags, REFIID riid, void **ppv) = 0; 143 STDMETHOD (GetPropertyDescriptionList) (REFPROPERTYKEY keyType, REFIID riid, void **ppv) = 0; 144 STDMETHOD (GetAttributes) ( SIATTRIBFLAGS AttribFlags, SFGAOF sfgaoMask, SFGAOF *psfgaoAttribs) = 0; 145 STDMETHOD (GetCount) (DWORD *pdwNumItems) = 0; 146 STDMETHOD (GetItemAt) (DWORD dwIndex, IShellItem **ppsi) = 0; 147 STDMETHOD (EnumItems) (IEnumShellItems **ppenumShellItems) = 0; 148 }; 149 150 151 #ifndef __IEnumExplorerCommand_INTERFACE_DEFINED__ 152 #define __IEnumExplorerCommand_INTERFACE_DEFINED__ 153 154 struct IExplorerCommand; 155 156 // MIDL_INTERFACE("a88826f8-186f-4987-aade-ea0cef8fbfe8") 157 DEFINE_GUID(IID_IEnumExplorerCommand , 0xa88826f8, 0x186f, 0x4987, 0xaa, 0xde, 0xea, 0x0c, 0xef, 0x8f, 0xbf, 0xe8); 158 159 struct IEnumExplorerCommand : public IUnknown 160 { 161 STDMETHOD (Next) (ULONG celt, IExplorerCommand **pUICommand, ULONG *pceltFetched) = 0; 162 STDMETHOD (Skip) (ULONG celt) = 0; 163 STDMETHOD (Reset) (void) = 0; 164 STDMETHOD (Clone) (IEnumExplorerCommand **ppenum) = 0; 165 }; 166 167 168 enum _EXPCMDSTATE 169 { 170 ECS_ENABLED = 0, 171 ECS_DISABLED = 0x1, 172 ECS_HIDDEN = 0x2, 173 ECS_CHECKBOX = 0x4, 174 ECS_CHECKED = 0x8, 175 ECS_RADIOCHECK = 0x10 176 }; 177 178 typedef DWORD EXPCMDSTATE; 179 180 /* [v1_enum] */ 181 enum _EXPCMDFLAGS 182 { 183 ECF_DEFAULT = 0, 184 ECF_HASSUBCOMMANDS = 0x1, 185 ECF_HASSPLITBUTTON = 0x2, 186 ECF_HIDELABEL = 0x4, 187 ECF_ISSEPARATOR = 0x8, 188 ECF_HASLUASHIELD = 0x10, 189 ECF_SEPARATORBEFORE = 0x20, 190 ECF_SEPARATORAFTER = 0x40, 191 ECF_ISDROPDOWN = 0x80, 192 ECF_TOGGLEABLE = 0x100, 193 ECF_AUTOMENUICONS = 0x200 194 }; 195 typedef DWORD EXPCMDFLAGS; 196 197 198 // MIDL_INTERFACE("a08ce4d0-fa25-44ab-b57c-c7b1c323e0b9") 199 DEFINE_GUID(IID_IExplorerCommand, 0xa08ce4d0, 0xfa25, 0x44ab, 0xb5, 0x7c, 0xc7, 0xb1, 0xc3, 0x23, 0xe0, 0xb9); 200 201 struct IExplorerCommand : public IUnknown 202 { 203 STDMETHOD (GetTitle) (IShellItemArray *psiItemArray, LPWSTR *ppszName) = 0; 204 STDMETHOD (GetIcon) (IShellItemArray *psiItemArray, LPWSTR *ppszIcon) = 0; 205 STDMETHOD (GetToolTip) (IShellItemArray *psiItemArray, LPWSTR *ppszInfotip) = 0; 206 STDMETHOD (GetCanonicalName) (GUID *pguidCommandName) = 0; 207 STDMETHOD (GetState) (IShellItemArray *psiItemArray, BOOL fOkToBeSlow, EXPCMDSTATE *pCmdState) = 0; 208 STDMETHOD (Invoke) (IShellItemArray *psiItemArray, IBindCtx *pbc) = 0; 209 STDMETHOD (GetFlags) (EXPCMDFLAGS *pFlags) = 0; 210 STDMETHOD (EnumSubCommands) (IEnumExplorerCommand **ppEnum) = 0; 211 }; 212 213 #endif // IShellItemArray 214 #endif // __IEnumExplorerCommand_INTERFACE_DEFINED__ 215 #endif // USE_SYS_shobjidl_core 216 217 #endif // __MY_EXPLORER_COMMAND_H 218