• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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