[RSHELL]
[reactos.git] / include / psdk / shlobj_undoc.h
1 /*
2 * ReactOS undocumented shell interface
3 *
4 * Copyright 2009 Andrew Hill <ash77 at domain reactos.org>
5 * Copyright 2013 Dominik Hornung
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22 #ifndef __SHLOBJ_UNDOC__H
23 #define __SHLOBJ_UNDOC__H
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif /* defined(__cplusplus) */
28
29 #ifdef __cplusplus
30 #define IID_PPV_ARG(Itype, ppType) IID_##Itype, reinterpret_cast<void**>((static_cast<Itype**>(ppType)))
31 #else
32 #define IID_PPV_ARG(Itype, ppType) IID_##Itype, (void**)(ppType)
33 #endif
34
35 /*****************************************************************************
36 * New shellstate structure
37 */
38 struct SHELLSTATE2
39 {
40 SHELLSTATE oldState;
41 long newState1;
42 long newState2;
43 };
44
45 /*****************************************************************************
46 * Header for persisted view state in cabinet windows
47 */
48 struct persistState
49 {
50 long dwSize;
51 long browseType;
52 long alwaysZero;
53 long browserIndex;
54 CLSID persistClass;
55 ULONG pidlSize;
56 };
57
58 /*****************************************************************************
59 * IInitializeObject interface
60 */
61 #undef INTERFACE
62 #define INTERFACE IInitializeObject
63
64 DECLARE_INTERFACE_(IInitializeObject, IUnknown)//, "4622AD16-FF23-11d0-8D34-00A0C90F2719")
65 {
66 STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
67 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
68 STDMETHOD_(ULONG,Release) (THIS) PURE;
69
70 STDMETHOD(Initialize)(THIS) PURE;
71 };
72 #undef INTERFACE
73 #if !defined(__cplusplus) || defined(CINTERFACE)
74 #define IInitializeObject_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
75 #define IInitializeObject_AddRef(T) (T)->lpVtbl->AddRef(T)
76 #define IInitializeObject_Release(T) (T)->lpVtbl->Release(T)
77 #define IInitializeObject_Initialize(T) (T)->lpVtbl->Initialize(T)
78 #endif
79
80
81 /*****************************************************************************
82 * IBanneredBar interface
83 */
84 enum
85 {
86 BMICON_LARGE = 0,
87 BMICON_SMALL
88 };
89 #define INTERFACE IBanneredBar
90 DECLARE_INTERFACE_(IBanneredBar, IUnknown)//, "596A9A94-013E-11d1-8D34-00A0C90F2719")
91 {
92 STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
93 STDMETHOD_(ULONG,AddRef) (THIS) PURE;
94 STDMETHOD_(ULONG,Release) (THIS) PURE;
95
96 STDMETHOD(SetIconSize)(THIS_ DWORD iIcon) PURE;
97 STDMETHOD(GetIconSize)(THIS_ DWORD* piIcon) PURE;
98 STDMETHOD(SetBitmap)(THIS_ HBITMAP hBitmap) PURE;
99 STDMETHOD(GetBitmap)(THIS_ HBITMAP* phBitmap) PURE;
100
101 };
102 #undef INTERFACE
103
104 #if !defined(__cplusplus) || defined(CINTERFACE)
105 #define IBanneredBar_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
106 #define IBanneredBar_AddRef(T) (T)->lpVtbl->AddRef(T)
107 #define IBanneredBar_Release(T) (T)->lpVtbl->Release(T)
108 #define IBanneredBar_SetIconSize(T,a) (T)->lpVtbl->SetIconSize(T,a)
109 #define IBanneredBar_GetIconSize(T,a) (T)->lpVtbl->GetIconSize(T,a)
110 #define IBanneredBar_SetBitmap(T,a) (T)->lpVtbl->SetBitmap(T,a)
111 #define IBanneredBar_GetBitmap(T,a) (T)->lpVtbl->GetBitmap(T,a)
112 #endif
113
114 /*****************************************************************************
115 * IGlobalFolderSettings interface
116 */
117 struct DEFFOLDERSETTINGS
118 {
119 long offset0;
120 };
121
122 #undef INTERFACE
123 #define INTERFACE IGlobalFolderSettings
124 DECLARE_INTERFACE_(IGlobalFolderSettings, IUnknown)
125 {
126 /*** IUnknown ***/
127 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
128 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
129 STDMETHOD_(ULONG,Release)(THIS) PURE;
130 /*** IGlobalFolderSettings ***/
131 STDMETHOD(Get)(THIS_ struct DEFFOLDERSETTINGS *buffer, int theSize) PURE;
132 STDMETHOD(Set)(THIS_ const struct DEFFOLDERSETTINGS *buffer, int theSize, unsigned int param14) PURE;
133 };
134 #undef INTERFACE
135
136 /*****************************************************************************
137 * IStartMenuCallback interface
138 */
139 #define INTERFACE IStartMenuCallback
140 DECLARE_INTERFACE_(IStartMenuCallback, IOleWindow)
141 {
142 /*** IUnknown ***/
143 STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
144 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
145 STDMETHOD_(ULONG,Release)(THIS) PURE;
146 /*** IOleWindow methods ***/
147 STDMETHOD_(HRESULT,GetWindow)(THIS_ HWND*) PURE;
148 STDMETHOD_(HRESULT,ContextSensitiveHelp)(THIS_ BOOL) PURE;
149 /*** IStartMenuCallback ***/
150 STDMETHOD_(HRESULT,Execute)(THIS_ IShellFolder*,LPCITEMIDLIST) PURE;
151 STDMETHOD_(HRESULT,Unknown)(THIS_ PVOID,PVOID,PVOID,PVOID) PURE;
152 STDMETHOD_(HRESULT,AppendMenu)(THIS_ HMENU*) PURE;
153 };
154 #undef INTERFACE
155
156 #ifdef COBJMACROS
157 #define IStartMenuCallback_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
158 #define IStartMenuCallback_AddRef(T) (T)->lpVtbl->AddRef(T)
159 #define IStartMenuCallback_Release(T) (T)->lpVtbl->Release(T)
160 #define IStartMenuCallback_GetWindow(T,a) (T)->lpVtbl->GetWindow(T,a)
161 #define IStartMenuCallback_ContextSensitiveHelp(T,a) (T)->lpVtbl->ContextSensitiveHelp(T,a)
162 #define IStartMenuCallback_Execute(T,a,b) (T)->lpVtbl->Execute(T,a,b)
163 #define IStartMenuCallback_Unknown(T,a,b,c,d) (T)->lpVtbl->Unknown(T,a,b,c,d)
164 #define IStartMenuCallback_AppendMenu(T,a) (T)->lpVtbl->AppendMenu(T,a)
165 #endif
166
167 /*****************************************************************************
168 * IBandSiteStreamCallback interface
169 */
170 #define INTERFACE IBandSiteStreamCallback
171 DECLARE_INTERFACE_(IBandSiteStreamCallback, IUnknown)
172 {
173 /*** IUnknown ***/
174 STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
175 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
176 STDMETHOD_(ULONG,Release)(THIS) PURE;
177 /*** IBandSiteStreamCallback ***/
178 STDMETHOD_(HRESULT,OnLoad)(THIS_ IStream *pStm, REFIID riid, PVOID *pvObj) PURE;
179 STDMETHOD_(HRESULT,OnSave)(THIS_ IUnknown *pUnk, IStream *pStm) PURE;
180 };
181 #undef INTERFACE
182
183 #ifdef COBJMACROS
184 #define IBandSiteStreamCallback_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
185 #define IBandSiteStreamCallback_AddRef(T) (T)->lpVtbl->AddRef(T)
186 #define IBandSiteStreamCallback_Release(T) (T)->lpVtbl->Release(T)
187 #define IBandSiteStreamCallback_OnLoad(T,a,b,c) (T)->lpVtbl->OnLoad(T,a,b,c)
188 #define IBandSiteStreamCallback_OnSave(T,a,b) (T)->lpVtbl->OnSave(T,a,b)
189 #endif
190
191 /*****************************************************************************
192 * IShellDesktopTray interface
193 */
194 #define INTERFACE IShellDesktopTray
195 DECLARE_INTERFACE_(IShellDesktopTray, IUnknown)
196 {
197 /*** IUnknown ***/
198 STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
199 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
200 STDMETHOD_(ULONG,Release)(THIS) PURE;
201 /*** IShellDesktopTray ***/
202 STDMETHOD_(ULONG,GetState)(THIS) PURE;
203 STDMETHOD(GetTrayWindow)(THIS_ HWND*) PURE;
204 STDMETHOD(RegisterDesktopWindow)(THIS_ HWND) PURE;
205 STDMETHOD(Unknown)(THIS_ DWORD,DWORD) PURE;
206 };
207 #undef INTERFACE
208
209 #ifdef COBJMACROS
210 #define IShellDesktopTray_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
211 #define IShellDesktopTray_AddRef(T) (T)->lpVtbl->AddRef(T)
212 #define IShellDesktopTray_Release(T) (T)->lpVtbl->Release(T)
213 #define IShellDesktopTray_GetState(T) (T)->lpVtbl->GetState(T)
214 #define IShellDesktopTray_GetTrayWindow(T,a) (T)->lpVtbl->GetTrayWindow(T,a)
215 #define IShellDesktopTray_RegisterDesktopWindow(T,a) (T)->lpVtbl->RegisterDesktopWindow(T,a)
216 #define IShellDesktopTray_Unknown(T,a,b) (T)->lpVtbl->Unknown(T,a,b)
217 #endif
218
219 /*****************************************************************************
220 * INscTree interface
221 */
222 #define INTERFACE INscTree
223 DECLARE_INTERFACE_(INscTree, IUnknown)
224 {
225 /*** IUnknown ***/
226 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
227 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
228 STDMETHOD_(ULONG,Release)(THIS) PURE;
229 /*** INscTree ***/
230 STDMETHOD(CreateTree)(THIS_ long paramC, long param10, long param14) PURE;
231 STDMETHOD(Initialize)(THIS_ long paramC, long param10, long param14) PURE;
232 STDMETHOD(ShowWindow)(THIS_ long paramC) PURE;
233 STDMETHOD(Refresh)(THIS) PURE;
234 STDMETHOD(GetSelectedItem)(THIS_ long paramC, long param10) PURE;
235 STDMETHOD(SetSelectedItem)(THIS_ long paramC, long param10, long param14, long param18) PURE;
236 STDMETHOD(GetNscMode)(THIS_ long paramC) PURE;
237 STDMETHOD(SetNscMode)(THIS_ long paramC) PURE;
238 STDMETHOD(GetSelectedItemName)(THIS_ long paramC, long param10) PURE;
239 STDMETHOD(BindToSelectedItemParent)(THIS_ long paramC, long param10, long param14) PURE;
240 STDMETHOD(InLabelEdit)(THIS) PURE;
241 STDMETHOD(RightPaneNavigationStarted)(THIS_ long paramC) PURE;
242 STDMETHOD(RightPaneNavigationFinished)(THIS_ long paramC) PURE;
243 };
244 #undef INTERFACE
245
246 #ifdef COBJMACROS
247 #define INscTree_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
248 #define INscTree_AddRef(T) (T)->lpVtbl->AddRef(T)
249 #define INscTree_Release(T) (T)->lpVtbl->Release(T)
250 #define INscTree_CreateTree(T,a,b,c) (T)->lpVtbl->CreateTree(T,a,b,c)
251 #define INscTree_Initialize(T,a,b,c) (T)->lpVtbl->Initialize(T,a,b,c)
252 #define INscTree_ShowWindow(T,a) (T)->lpVtbl->ShowWindow(T,a)
253 #define INscTree_Refresh(T) (T)->lpVtbl->Refresh(T)
254 #define INscTree_GetSelectedItem(T,a,b) (T)->lpVtbl->GetSelectedItem(T,a,b)
255 #define INscTree_SetSelectedItem(T,a,b,c,d) (T)->lpVtbl->SetSelectedItem(T,a,b,c,d)
256 #define INscTree_GetNscMode(T,a) (T)->lpVtbl->GetNscMode(T,a)
257 #define INscTree_SetNscMode(T,a) (T)->lpVtbl->SetNscMode(T,a)
258 #define INscTree_GetSelectedItemName(T,a,b) (T)->lpVtbl->GetSelectedItemName(T,a,b)
259 #define INscTree_BindToSelectedItemParent(T,a,b,c) (T)->lpVtbl->BindToSelectedItemParent(T,a,b,c)
260 #define INscTree_InLabelEdit(T) (T)->lpVtbl->InLabelEdit(T)
261 #define INscTree_RightPaneNavigationStarted(T,a) (T)->lpVtbl->RightPaneNavigationStarted(T,a)
262 #define INscTree_RightPaneNavigationFinished(T,a) (T)->lpVtbl->RightPaneNavigationFinished(T,a)
263 #endif
264
265 /*****************************************************************************
266 * INscTree2 interface
267 */
268 #define INTERFACE INscTree2
269 DECLARE_INTERFACE_(INscTree2, INscTree)
270 {
271 /*** IUnknown ***/
272 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
273 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
274 STDMETHOD_(ULONG,Release)(THIS) PURE;
275 /*** INscTree ***/
276 STDMETHOD(CreateTree)(THIS_ long paramC, long param10, long param14) PURE;
277 STDMETHOD(Initialize)(THIS_ long paramC, long param10, long param14) PURE;
278 STDMETHOD(ShowWindow)(THIS_ long paramC) PURE;
279 STDMETHOD(Refresh)(THIS) PURE;
280 STDMETHOD(GetSelectedItem)(THIS_ long paramC, long param10) PURE;
281 STDMETHOD(SetSelectedItem)(THIS_ long paramC, long param10, long param14, long param18) PURE;
282 STDMETHOD(GetNscMode)(THIS_ long paramC) PURE;
283 STDMETHOD(SetNscMode)(THIS_ long paramC) PURE;
284 STDMETHOD(GetSelectedItemName)(THIS_ long paramC, long param10) PURE;
285 STDMETHOD(BindToSelectedItemParent)(THIS_ long paramC, long param10, long param14) PURE;
286 STDMETHOD(InLabelEdit)(THIS) PURE;
287 STDMETHOD(RightPaneNavigationStarted)(THIS_ long paramC) PURE;
288 STDMETHOD(RightPaneNavigationFinished)(THIS_ long paramC) PURE;
289 /*** INscTree2 ***/
290 STDMETHOD(CreateTree2)(THIS_ long paramC, long param10, long param14, long param18) PURE;
291 };
292 #undef INTERFACE
293
294 #ifdef COBJMACROS
295 #define INscTree2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
296 #define INscTree2_AddRef(T) (T)->lpVtbl->AddRef(T)
297 #define INscTree2_Release(T) (T)->lpVtbl->Release(T)
298 #define INscTree2_CreateTree(T,a,b,c) (T)->lpVtbl->CreateTree(T,a,b,c)
299 #define INscTree2_Initialize(T,a,b,c) (T)->lpVtbl->Initialize(T,a,b,c)
300 #define INscTree2_ShowWindow(T,a) (T)->lpVtbl->ShowWindow(T,a)
301 #define INscTree2_Refresh(T) (T)->lpVtbl->Refresh(T)
302 #define INscTree2_GetSelectedItem(T,a,b) (T)->lpVtbl->GetSelectedItem(T,a,b)
303 #define INscTree2_SetSelectedItem(T,a,b,c,d) (T)->lpVtbl->SetSelectedItem(T,a,b,c,d)
304 #define INscTree2_GetNscMode(T,a) (T)->lpVtbl->GetNscMode(T,a)
305 #define INscTree2_SetNscMode(T,a) (T)->lpVtbl->SetNscMode(T,a)
306 #define INscTree2_GetSelectedItemName(T,a,b) (T)->lpVtbl->GetSelectedItemName(T,a,b)
307 #define INscTree2_BindToSelectedItemParent(T,a,b,c) (T)->lpVtbl->BindToSelectedItemParent(T,a,b,c)
308 #define INscTree2_InLabelEdit(T) (T)->lpVtbl->InLabelEdit(T)
309 #define INscTree2_RightPaneNavigationStarted(T,a) (T)->lpVtbl->RightPaneNavigationStarted(T,a)
310 #define INscTree2_RightPaneNavigationFinished(T,a) (T)->lpVtbl->RightPaneNavigationFinished(T,a)
311 #define INscTree2_CreateTree2(T,a,b,c,d) (T)->lpVtbl->CreateTree2(T,a,b,c,d)
312 #endif
313
314 /*****************************************************************************
315 * IAddressEditBox interface
316 */
317 #define INTERFACE IAddressEditBox
318 DECLARE_INTERFACE_(IAddressEditBox, IUnknown)
319 {
320 /*** IUnknown ***/
321 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
322 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
323 STDMETHOD_(ULONG,Release)(THIS) PURE;
324 /*** IAddressEditBox ***/
325 STDMETHOD(Init)(THIS_ HWND comboboxEx, HWND editControl, long param14, IUnknown *param18) PURE;
326 STDMETHOD(SetCurrentDir)(THIS_ long paramC) PURE;
327 STDMETHOD(ParseNow)(THIS_ long paramC) PURE;
328 STDMETHOD(Execute)(THIS_ long paramC) PURE;
329 STDMETHOD(Save)(THIS_ long paramC) PURE;
330 };
331 #undef INTERFACE
332
333 #ifdef COBJMACROS
334 #define IAddressEditBox_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
335 #define IAddressEditBox_AddRef(T) (T)->lpVtbl->AddRef(T)
336 #define IAddressEditBox_Release(T) (T)->lpVtbl->Release(T)
337 #define IAddressEditBox_Init(T,a,b,c,d) (T)->lpVtbl->Init(T,a,b,c,d)
338 #define IAddressEditBox_SetCurrentDir(T,a) (T)->lpVtbl->SetCurrentDir(T,a)
339 #define IAddressEditBox_ParseNow(T,a) (T)->lpVtbl->ParseNow(T,a)
340 #define IAddressEditBox_Execute(T,a) (T)->lpVtbl->Execute(T,a)
341 #define IAddressEditBox_Save(T,a) (T)->lpVtbl->Save(T,a)
342 #endif
343
344 /*****************************************************************************
345 * IBandProxy interface
346 */
347 #define INTERFACE IBandProxy
348 DECLARE_INTERFACE_(IBandProxy, IUnknown)
349 {
350 /*** IUnknown ***/
351 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
352 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
353 STDMETHOD_(ULONG,Release)(THIS) PURE;
354 /*** IBandProxy ***/
355 STDMETHOD(SetSite)(THIS_ IUnknown *paramC) PURE;
356 STDMETHOD(CreateNewWindow)(THIS_ long paramC) PURE;
357 STDMETHOD(GetBrowserWindow)(THIS_ IUnknown **paramC) PURE;
358 STDMETHOD(IsConnected)(THIS) PURE;
359 STDMETHOD(NavigateToPIDL)(THIS_ LPCITEMIDLIST pidl) PURE;
360 STDMETHOD(NavigateToURL)(THIS_ long paramC, long param10) PURE;
361 };
362 #undef INTERFACE
363
364 #ifdef COBJMACROS
365 #define IBandProxy_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
366 #define IBandProxy_AddRef(T) (T)->lpVtbl->AddRef(T)
367 #define IBandProxy_Release(T) (T)->lpVtbl->Release(T)
368 #define IBandProxy_SetSite(T,a) (T)->lpVtbl->SetSite(T,a)
369 #define IBandProxy_CreateNewWindow(T,a) (T)->lpVtbl->CreateNewWindow(T,a)
370 #define IBandProxy_GetBrowserWindow(T,a) (T)->lpVtbl->GetBrowserWindow(T,a)
371 #define IBandProxy_IsConnected(T) (T)->lpVtbl->IsConnected(T)
372 #define IBandProxy_NavigateToPIDL(T,a) (T)->lpVtbl->NavigateToPIDL(T,a)
373 #define IBandProxy_NavigateToURL(T,a,b) (T)->lpVtbl->NavigateToURL(T,a,b)
374 #endif
375
376 /*****************************************************************************
377 * IExplorerToolbar interface
378 */
379 #define INTERFACE IExplorerToolbar
380 DECLARE_INTERFACE_(IExplorerToolbar, IUnknown)
381 {
382 /*** IUnknown ***/
383 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
384 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
385 STDMETHOD_(ULONG,Release)(THIS) PURE;
386 /*** IExplorerToolbar ***/
387 STDMETHOD(SetCommandTarget)(THIS_ IUnknown *theTarget, GUID *category, long param14) PURE;
388 STDMETHOD(Unknown1)(THIS) PURE;
389 STDMETHOD(AddButtons)(THIS_ const GUID *pguidCmdGroup, long buttonCount, TBBUTTON *buttons) PURE;
390 STDMETHOD(AddString)(THIS_ const GUID *pguidCmdGroup, HINSTANCE param10, LPCTSTR param14, long *param18) PURE;
391 STDMETHOD(GetButton)(THIS_ const GUID *paramC, long param10, long param14) PURE;
392 STDMETHOD(GetState)(THIS_ const GUID *pguidCmdGroup, long commandID, long *theState) PURE;
393 STDMETHOD(SetState)(THIS_ const GUID *pguidCmdGroup, long commandID, long theState) PURE;
394 STDMETHOD(AddBitmap)(THIS_ const GUID *pguidCmdGroup, long param10, long buttonCount, TBADDBITMAP *lParam, long *newIndex, COLORREF param20) PURE;
395 STDMETHOD(GetBitmapSize)(THIS_ long *paramC) PURE;
396 STDMETHOD(SendToolbarMsg)(THIS_ const GUID *pguidCmdGroup, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *result) PURE;
397 STDMETHOD(SetImageList)(THIS_ const GUID *pguidCmdGroup, HIMAGELIST param10, HIMAGELIST param14, HIMAGELIST param18) PURE;
398 STDMETHOD(ModifyButton)(THIS_ const GUID *paramC, long param10, long param14) PURE;
399 };
400 #undef INTERFACE
401
402 #ifdef COBJMACROS
403 #define IExplorerToolbar_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
404 #define IExplorerToolbar_AddRef(T) (T)->lpVtbl->AddRef(T)
405 #define IExplorerToolbar_Release(T) (T)->lpVtbl->Release(T)
406 #define IExplorerToolbar_SetCommandTarget(T,a,b,c) (T)->lpVtbl->SetCommandTarget(T,a,b,c)
407 #define IExplorerToolbar_Unknown1(T) (T)->lpVtbl->Unknown1(T)
408 #define IExplorerToolbar_AddButtons(T,a,b,c) (T)->lpVtbl->AddButtons(T,a,b,c)
409 #define IExplorerToolbar_AddString(T,a,b,c,d) (T)->lpVtbl->AddString(T,a,b,c,d)
410 #define IExplorerToolbar_GetButton(T,a,b,c) (T)->lpVtbl->GetButton(T,a,b,c)
411 #define IExplorerToolbar_GetState(T,a,b,c) (T)->lpVtbl->GetState(T,a,b,c)
412 #define IExplorerToolbar_SetState(T,a,b,c) (T)->lpVtbl->SetState(T,a,b,c)
413 #define IExplorerToolbar_AddBitmap(T,a,b,c,d,e,f) (T)->lpVtbl->AddBitmap(T,a,b,c,d,e,f)
414 #define IExplorerToolbar_GetBitmapSize(T,a) (T)->lpVtbl->GetBitmapSize(T,a)
415 #define IExplorerToolbar_SendToolbarMsg(T,a,b,c,d,e) (T)->lpVtbl->SendToolbarMsg(T,a,b,c,d,e)
416 #define IExplorerToolbar_SetImageList(T,a,b,c,d) (T)->lpVtbl->SetImageList(T,a,b,c,d)
417 #define IExplorerToolbar_ModifyButton(T,a,b,c) (T)->lpVtbl->ModifyButton(T,a,b,c)
418 #endif
419
420 /*****************************************************************************
421 * IRegTreeOptions interface
422 */
423 typedef enum tagWALK_TREE_CMD
424 {
425 WALK_TREE_OPTION0 = 0,
426 WALK_TREE_OPTION1 = 1,
427 WALK_TREE_OPTION2 = 2,
428 WALK_TREE_OPTION3 = 3
429 } WALK_TREE_CMD;
430
431 #define INTERFACE IRegTreeOptions
432 DECLARE_INTERFACE_(IRegTreeOptions, IUnknown)
433 {
434 /*** IUnknown ***/
435 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
436 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
437 STDMETHOD_(ULONG,Release)(THIS) PURE;
438 /*** IRegTreeOptions ***/
439 STDMETHOD(InitTree)(THIS_ HWND paramC, HKEY param10, char const *param14, char const *param18) PURE;
440 STDMETHOD(WalkTree)(THIS_ WALK_TREE_CMD paramC) PURE;
441 STDMETHOD(ToggleItem)(THIS_ HTREEITEM paramC) PURE;
442 STDMETHOD(ShowHelp)(THIS_ HTREEITEM paramC, unsigned long param10) PURE;
443 };
444 #undef INTERFACE
445
446 #ifdef COBJMACROS
447 #define IRegTreeOptions_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
448 #define IRegTreeOptions_AddRef(T) (T)->lpVtbl->AddRef(T)
449 #define IRegTreeOptions_Release(T) (T)->lpVtbl->Release(T)
450 #define IRegTreeOptions_InitTree(T,a,b,c,d) (T)->lpVtbl->InitTree(T,a,b,c,d)
451 #define IRegTreeOptions_WalkTree(T,a) (T)->lpVtbl->WalkTree(T,a)
452 #define IRegTreeOptions_ToggleItem(T,a) (T)->lpVtbl->ToggleItem(T,a)
453 #define IRegTreeOptions_ShowHelp(T,a,b) (T)->lpVtbl->ShowHelp(T,a,b)
454 #endif
455
456 /*****************************************************************************
457 * IBandNavigate interface
458 */
459 #define INTERFACE IBandNavigate
460 DECLARE_INTERFACE_(IBandNavigate, IUnknown)
461 {
462 /*** IUnknown ***/
463 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
464 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
465 STDMETHOD_(ULONG,Release)(THIS) PURE;
466 /*** IBandNavigate ***/
467 STDMETHOD(Select)(THIS_ long paramC) PURE;
468 };
469 #undef INTERFACE
470
471 #ifdef COBJMACROS
472 #define IBandNavigate_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
473 #define IBandNavigate_AddRef(T) (T)->lpVtbl->AddRef(T)
474 #define IBandNavigate_Release(T) (T)->lpVtbl->Release(T)
475 #define IBandNavigate_Select(T,a) (T)->lpVtbl->Select(T,a)
476 #endif
477
478 /*****************************************************************************
479 * INamespaceProxy interface
480 */
481 #define INTERFACE INamespaceProxy
482 DECLARE_INTERFACE_(INamespaceProxy, IUnknown)
483 {
484 /*** IUnknown ***/
485 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
486 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
487 STDMETHOD_(ULONG,Release)(THIS) PURE;
488 /*** INamespaceProxy ***/
489 STDMETHOD(GetNavigateTarget)(THIS_ long paramC, long param10, long param14) PURE;
490 STDMETHOD(Invoke)(THIS_ long paramC) PURE;
491 STDMETHOD(OnSelectionChanged)(THIS_ long paramC) PURE;
492 STDMETHOD(RefreshFlags)(THIS_ long paramC, long param10, long param14) PURE;
493 STDMETHOD(CacheItem)(THIS_ long paramC) PURE;
494 };
495 #undef INTERFACE
496
497 #ifdef COBJMACROS
498 #define INamespaceProxy_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
499 #define INamespaceProxy_AddRef(T) (T)->lpVtbl->AddRef(T)
500 #define INamespaceProxy_Release(T) (T)->lpVtbl->Release(T)
501 #define INamespaceProxy_GetNavigateTarget(T,a,b,c) (T)->lpVtbl->GetNavigateTarget(T,a,b,c)
502 #define INamespaceProxy_Invoke(T,a) (T)->lpVtbl->Invoke(T,a)
503 #define INamespaceProxy_OnSelectionChanged(T,a) (T)->lpVtbl->OnSelectionChanged(T,a)
504 #define INamespaceProxy_RefreshFlags(T,a,b,c) (T)->lpVtbl->RefreshFlags(T,a,b,c)
505 #define INamespaceProxy_CacheItem(T,a) (T)->lpVtbl->CacheItem(T,a)
506 #endif
507
508 /*****************************************************************************
509 * IShellMenu2 interface
510 */
511 #define INTERFACE IShellMenu2
512 DECLARE_INTERFACE_(IShellMenu2, IShellMenu)
513 {
514 /*** IUnknown ***/
515 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
516 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
517 STDMETHOD_(ULONG,Release)(THIS) PURE;
518 /*** IShellMenu ***/
519 STDMETHOD(Initialize)(THIS_ IShellMenuCallback *psmc, UINT uId, UINT uIdAncestor, DWORD dwFlags) PURE;
520 STDMETHOD(GetMenuInfo)(THIS_ IShellMenuCallback **ppsmc, UINT *puId, UINT *puIdAncestor, DWORD *pdwFlags) PURE;
521 STDMETHOD(SetShellFolder)(THIS_ IShellFolder *psf, LPCITEMIDLIST pidlFolder, HKEY hKey, DWORD dwFlags) PURE;
522 STDMETHOD(GetShellFolder)(THIS_ DWORD *pdwFlags, LPITEMIDLIST *ppidl, REFIID riid, void **ppv) PURE;
523 STDMETHOD(SetMenu)(THIS_ HMENU hmenu, HWND hwnd, DWORD dwFlags) PURE;
524 STDMETHOD(GetMenu)(THIS_ HMENU *phmenu, HWND *phwnd, DWORD *pdwFlags) PURE;
525 STDMETHOD(InvalidateItem)(THIS_ LPSMDATA psmd, DWORD dwFlags) PURE;
526 STDMETHOD(GetState)(THIS_ LPSMDATA psmd) PURE;
527 STDMETHOD(SetMenuToolbar)(THIS_ IUnknown *punk, DWORD dwFlags) PURE;
528 /*** IShellMenu2 ***/
529 STDMETHOD(GetSubMenu)(THIS) PURE;
530 STDMETHOD(SetToolbar)(THIS) PURE;
531 STDMETHOD(SetMinWidth)(THIS) PURE;
532 STDMETHOD(SetNoBorder)(THIS) PURE;
533 STDMETHOD(SetTheme)(THIS) PURE;
534 };
535 #undef INTERFACE
536
537 #ifdef COBJMACROS
538 #define IShellMenu2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
539 #define IShellMenu2_AddRef(T) (T)->lpVtbl->AddRef(T)
540 #define IShellMenu2_Release(T) (T)->lpVtbl->Release(T)
541 #define IShellMenu2_Initialize(T,a,b,c,d) (T)->lpVtbl->Initialize(T,a,b,c,d)
542 #define IShellMenu2_GetMenuInfo(T,a,b,c,d) (T)->lpVtbl->GetMenuInfo(T,a,b,c,d)
543 #define IShellMenu2_SetShellFolder(T,a,b,c,d) (T)->lpVtbl->SetShellFolder(T,a,b,c,d)
544 #define IShellMenu2_GetShellFolder(T,a,b,c,d) (T)->lpVtbl->GetShellFolder(T,a,b,c,d)
545 #define IShellMenu2_SetMenu(T,a,b,c) (T)->lpVtbl->SetMenu(T,a,b,c)
546 #define IShellMenu2_GetMenu(T,a,b,c) (T)->lpVtbl->GetMenu(T,a,b,c)
547 #define IShellMenu2_InvalidateItem(T,a,b) (T)->lpVtbl->InvalidateItem(T,a,b)
548 #define IShellMenu2_GetState(T,a) (T)->lpVtbl->GetState(T,a)
549 #define IShellMenu2_SetMenuToolbar(T,a,b) (T)->lpVtbl->SetMenuToolbar(T,a,b)
550 #define IShellMenu2_GetSubMenu(T) (T)->lpVtbl->GetSubMenu(T)
551 #define IShellMenu2_SetToolbar(T) (T)->lpVtbl->SetToolbar(T)
552 #define IShellMenu2_SetMinWidth(T) (T)->lpVtbl->SetMinWidth(T)
553 #define IShellMenu2_SetNoBorder(T) (T)->lpVtbl->SetNoBorder(T)
554 #define IShellMenu2_SetTheme(T) (T)->lpVtbl->SetTheme(T)
555 #endif
556
557 /*****************************************************************************
558 * IWinEventHandler interface
559 */
560 #define INTERFACE IWinEventHandler
561 DECLARE_INTERFACE_(IWinEventHandler, IUnknown)
562 {
563 /*** IUnknown ***/
564 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
565 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
566 STDMETHOD_(ULONG,Release)(THIS) PURE;
567 /*** IWinEventHandler ***/
568 STDMETHOD(OnWinEvent)(THIS_ HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult) PURE;
569 STDMETHOD(IsWindowOwner)(THIS_ HWND hWnd) PURE;
570 };
571 #undef INTERFACE
572
573 #ifdef COBJMACROS
574 #define IWinEventHandler_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
575 #define IWinEventHandler_AddRef(T) (T)->lpVtbl->AddRef(T)
576 #define IWinEventHandler_Release(T) (T)->lpVtbl->Release(T)
577 #define IWinEventHandler_OnWinEvent(T,a,b,c,d,e) (T)->lpVtbl->OnWinEvent(T,a,b,c,d,e)
578 #define IWinEventHandler_IsWindowOwner(T,a) (T)->lpVtbl->IsWindowOwner(T,a)
579 #endif
580
581 /*****************************************************************************
582 * IAddressBand interface
583 */
584 #define INTERFACE IAddressBand
585 DECLARE_INTERFACE_(IAddressBand, IUnknown)
586 {
587 /*** IUnknown ***/
588 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
589 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
590 STDMETHOD_(ULONG,Release)(THIS) PURE;
591 /*** IAddressBand ***/
592 STDMETHOD(FileSysChange)(THIS_ long param8, long paramC) PURE;
593 STDMETHOD(Refresh)(THIS_ long param8) PURE;
594 };
595 #undef INTERFACE
596
597 #ifdef COBJMACROS
598 #define IAddressBand_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
599 #define IAddressBand_AddRef(T) (T)->lpVtbl->AddRef(T)
600 #define IAddressBand_Release(T) (T)->lpVtbl->Release(T)
601 #define IAddressBand_FileSysChange(T,a,b) (T)->lpVtbl->FileSysChange(T,a,b)
602 #define IAddressBand_Refresh(T,a) (T)->lpVtbl->Refresh(T,a)
603 #endif
604
605 /*****************************************************************************
606 * IShellMenuAcc interface
607 */
608 #define INTERFACE IShellMenuAcc
609 DECLARE_INTERFACE_(IShellMenuAcc, IUnknown)
610 {
611 /*** IUnknown ***/
612 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
613 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
614 STDMETHOD_(ULONG,Release)(THIS) PURE;
615 /*** IShellMenuAcc ***/
616 STDMETHOD(GetTop)(THIS) PURE;
617 STDMETHOD(GetBottom)(THIS) PURE;
618 STDMETHOD(GetTracked)(THIS) PURE;
619 STDMETHOD(GetParentSite)(THIS) PURE;
620 STDMETHOD(GetState)(THIS) PURE;
621 STDMETHOD(DoDefaultAction)(THIS) PURE;
622 STDMETHOD(GetSubMenu)(THIS) PURE;
623 STDMETHOD(IsEmpty)(THIS) PURE;
624 };
625 #undef INTERFACE
626
627 #ifdef COBJMACROS
628 #define IShellMenuAcc_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
629 #define IShellMenuAcc_AddRef(T) (T)->lpVtbl->AddRef(T)
630 #define IShellMenuAcc_Release(T) (T)->lpVtbl->Release(T)
631 #define IShellMenuAcc_GetTop(T) (T)->lpVtbl->GetTop(T)
632 #define IShellMenuAcc_GetBottom(T) (T)->lpVtbl->GetBottom(T)
633 #define IShellMenuAcc_GetTracked(T) (T)->lpVtbl->GetTracked(T)
634 #define IShellMenuAcc_GetParentSite(T) (T)->lpVtbl->GetParentSite(T)
635 #define IShellMenuAcc_GetState(T) (T)->lpVtbl->GetState(T)
636 #define IShellMenuAcc_DoDefaultAction(T) (T)->lpVtbl->DoDefaultAction(T)
637 #define IShellMenuAcc_GetSubMenu(T) (T)->lpVtbl->GetSubMenu(T)
638 #define IShellMenuAcc_IsEmpty(T) (T)->lpVtbl->IsEmpty(T)
639 #endif
640
641 /*****************************************************************************
642 * IAddressBand interface
643 */
644 #define INTERFACE IBandSiteHelper
645 DECLARE_INTERFACE_(IBandSiteHelper, IUnknown)
646 {
647 /*** IUnknown ***/
648 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
649 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
650 STDMETHOD_(ULONG,Release)(THIS) PURE;
651 /*** IBandSiteHelper ***/
652 STDMETHOD(LoadFromStreamBS)(THIS_ IStream *, REFGUID, void **) PURE;
653 STDMETHOD(SaveToStreamBS)(THIS_ IUnknown *, IStream *) PURE;
654 };
655 #undef INTERFACE
656
657 #ifdef COBJMACROS
658 #define IBandSiteHelper_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
659 #define IBandSiteHelper_AddRef(T) (T)->lpVtbl->AddRef(T)
660 #define IBandSiteHelper_Release(T) (T)->lpVtbl->Release(T)
661 #define IBandSiteHelper_LoadFromStreamBS(T,a,b) (T)->lpVtbl->LoadFromStreamBS(T,a,b)
662 #define IBandSiteHelper_SaveToStreamBS(T,a,b) (T)->lpVtbl->SaveToStreamBS(T,a,b)
663 #endif
664
665 /*****************************************************************************
666 * IAddressBand interface
667 */
668 #define INTERFACE IShellBrowserService
669 DECLARE_INTERFACE_(IShellBrowserService, IUnknown)
670 {
671 /*** IUnknown ***/
672 STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
673 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
674 STDMETHOD_(ULONG,Release)(THIS) PURE;
675 /*** IShellBrowserService ***/
676 STDMETHOD(GetPropertyBag)(THIS_ long flags, REFIID riid, void **ppvObject) PURE;
677 };
678 #undef INTERFACE
679
680 #ifdef COBJMACROS
681 #define IShellBrowserService_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
682 #define IShellBrowserService_AddRef(T) (T)->lpVtbl->AddRef(T)
683 #define IShellBrowserService_Release(T) (T)->lpVtbl->Release(T)
684 #define IShellBrowserService_GetPropertyBag(T,a,b,c) (T)->lpVtbl->GetPropertyBag(T,a,b,c)
685 #endif
686
687 /*****************************************************************************
688 * ITrayPriv interface
689 */
690 #define INTERFACE ITrayPriv
691 DECLARE_INTERFACE_(ITrayPriv, IUnknown)
692 {
693 /*** IUnknown ***/
694 STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
695 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
696 STDMETHOD_(ULONG,Release)(THIS) PURE;
697 /*** IOleWindow methods ***/
698 STDMETHOD_(HRESULT,GetWindow)(THIS_ HWND*) PURE;
699 STDMETHOD_(HRESULT,ContextSensitiveHelp)(THIS_ BOOL) PURE;
700 /*** ITrayPriv ***/
701 STDMETHOD_(HRESULT,Execute)(THIS_ IShellFolder*,LPCITEMIDLIST) PURE;
702 STDMETHOD_(HRESULT,Unknown)(THIS_ PVOID,PVOID,PVOID,PVOID) PURE;
703 STDMETHOD_(HRESULT,AppendMenu)(THIS_ HMENU*) PURE;
704 };
705 #undef INTERFACE
706
707 #ifdef COBJMACROS
708 #define ITrayPriv_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
709 #define ITrayPriv_AddRef(T) (T)->lpVtbl->AddRef(T)
710 #define ITrayPriv_Release(T) (T)->lpVtbl->Release(T)
711 #define ITrayPriv_GetWindow(T,a) (T)->lpVtbl->GetWindow(T,a)
712 #define ITrayPriv_ContextSensitiveHelp(T,a) (T)->lpVtbl->ContextSensitiveHelp(T,a)
713 #define ITrayPriv_Execute(T,a,b) (T)->lpVtbl->Execute(T,a,b)
714 #define ITrayPriv_Unknown(T,a,b,c,d) (T)->lpVtbl->Unknown(T,a,b,c,d)
715 #define ITrayPriv_AppendMenu(T,a) (T)->lpVtbl->AppendMenu(T,a)
716 #endif
717
718 /*****************************************************************************
719 * Shell32 resources
720 */
721 // these resources are in shell32.dll
722 #define IDB_GOBUTTON_NORMAL 0x0e6
723 #define IDB_GOBUTTON_HOT 0x0e7
724
725 // band ids in internet toolbar
726 #define ITBBID_MENUBAND 1
727 #define ITBBID_BRANDBAND 5
728 #define ITBBID_TOOLSBAND 2
729 #define ITBBID_ADDRESSBAND 4
730
731 // commands in the CGID_PrivCITCommands command group handled by the internet toolbar
732 // there seems to be some support for hiding the menubar and an auto hide feature that are
733 // unavailable in the UI
734 #define ITID_TEXTLABELS 3
735 #define ITID_TOOLBARBANDSHOWN 4
736 #define ITID_ADDRESSBANDSHOWN 5
737 #define ITID_LINKSBANDSHOWN 6
738 #define ITID_MENUBANDSHOWN 12
739 #define ITID_AUTOHIDEENABLED 13
740 #define ITID_CUSTOMIZEENABLED 20
741 #define ITID_TOOLBARLOCKED 27
742
743 // commands in the CGID_BrandCmdGroup command group handled by the brand band
744 #define BBID_STARTANIMATION 1
745 #define BBID_STOPANIMATION 2
746
747 // undocumented flags for IShellMenu::SetShellFolder
748 #define SMSET_UNKNOWN08 0x08
749 #define SMSET_UNKNOWN10 0x10
750
751 BOOL WINAPI ILGetDisplayNameEx(IShellFolder *psf, LPCITEMIDLIST pidl, LPVOID path, DWORD type);
752
753 /* type parameter for ILGetDisplayNameEx() */
754 #define ILGDN_FORPARSING 0
755 #define ILGDN_NORMAL 1
756 #define ILGDN_INFOLDER 2
757
758 BOOL WINAPI FileIconInit(BOOL bFullInit);
759 void WINAPI ShellDDEInit(BOOL bInit);
760 DWORD WINAPI WinList_Init(void);
761
762 HANDLE WINAPI SHCreateDesktop(IShellDesktopTray*);
763 BOOL WINAPI SHDesktopMessageLoop(HANDLE);
764
765 #define WM_GETISHELLBROWSER (WM_USER+7)
766 BOOL WINAPI SetShellWindow(HWND);
767 BOOL WINAPI SetShellWindowEx(HWND, HWND);
768 BOOL WINAPI RegisterShellHook(HWND, DWORD);
769 IStream* WINAPI SHGetViewStream(LPCITEMIDLIST, DWORD, LPCTSTR, LPCTSTR, LPCTSTR);
770 BOOL WINAPI SHIsEmptyStream(IStream*);
771
772 typedef struct tagCREATEMRULISTA
773 {
774 DWORD cbSize;
775 DWORD nMaxItems;
776 DWORD dwFlags;
777 HKEY hKey;
778 LPCSTR lpszSubKey;
779 PROC lpfnCompare;
780 } CREATEMRULISTA, *LPCREATEMRULISTA;
781 typedef struct tagCREATEMRULISTW
782 {
783 DWORD cbSize;
784 DWORD nMaxItems;
785 DWORD dwFlags;
786 HKEY hKey;
787 LPCWSTR lpszSubKey;
788 PROC lpfnCompare;
789 } CREATEMRULISTW, *LPCREATEMRULISTW;
790
791 #define MRU_STRING 0x0
792 #define MRU_BINARY 0x1
793 #define MRU_CACHEWRITE 0x2
794
795 HANDLE WINAPI CreateMRUListW(LPCREATEMRULISTW);
796 HANDLE WINAPI CreateMRUListA(LPCREATEMRULISTA);
797 INT WINAPI AddMRUData(HANDLE,LPCVOID,DWORD);
798 INT WINAPI FindMRUData(HANDLE,LPCVOID,DWORD,LPINT);
799 VOID WINAPI FreeMRUList(HANDLE);
800
801 INT WINAPI AddMRUStringW(HANDLE hList, LPCWSTR lpszString);
802 INT WINAPI AddMRUStringA(HANDLE hList, LPCSTR lpszString);
803 BOOL WINAPI DelMRUString(HANDLE hList, INT nItemPos);
804 INT WINAPI FindMRUStringW(HANDLE hList, LPCWSTR lpszString, LPINT lpRegNum);
805 INT WINAPI FindMRUStringA(HANDLE hList, LPCSTR lpszString, LPINT lpRegNum);
806 HANDLE WINAPI CreateMRUListLazyW(const CREATEMRULISTW *lpcml, DWORD dwParam2,
807 DWORD dwParam3, DWORD dwParam4);
808 HANDLE WINAPI CreateMRUListLazyA(const CREATEMRULISTA *lpcml, DWORD dwParam2,
809 DWORD dwParam3, DWORD dwParam4);
810 INT WINAPI EnumMRUListW(HANDLE hList, INT nItemPos, LPVOID lpBuffer,
811 DWORD nBufferSize);
812 INT WINAPI EnumMRUListA(HANDLE hList, INT nItemPos, LPVOID lpBuffer,
813 DWORD nBufferSize);
814
815 #define DC_NOSENDMSG 0x2000
816 BOOL WINAPI DrawCaptionTempA(HWND,HDC,const RECT*,HFONT,HICON,LPCSTR,UINT);
817 BOOL WINAPI DrawCaptionTempW(HWND,HDC,const RECT*,HFONT,HICON,LPCWSTR,UINT);
818
819 #ifdef UNICODE
820 typedef CREATEMRULISTW CREATEMRULIST, *PCREATEMRULIST;
821 #define CreateMRUList CreateMRUListW
822 #define DrawCaptionTemp DrawCaptionTempW
823 #else
824 typedef CREATEMRULISTA CREATEMRULIST, *PCREATEMRULIST;
825 #define CreateMRUList CreateMRUListA
826 #define DrawCaptionTemp DrawCaptionTempA
827 #endif
828
829 HRESULT WINAPI SHInvokeDefaultCommand(HWND,IShellFolder*,LPCITEMIDLIST);
830
831 HRESULT WINAPI SHPropertyBag_ReadPOINTL(IPropertyBag*,LPCWSTR,POINTL*);
832
833 HRESULT WINAPI SHGetPerScreenResName(OUT LPWSTR lpResName,
834 IN INT cchResName,
835 IN DWORD dwReserved);
836
837 HRESULT WINAPI SHPropertyBag_ReadStream(IPropertyBag*,LPCWSTR,IStream**);
838
839 HWND WINAPI SHCreateWorkerWindowA(LONG wndProc, HWND hWndParent, DWORD dwExStyle,
840 DWORD dwStyle, HMENU hMenu, LONG z);
841
842 HWND WINAPI SHCreateWorkerWindowW(LONG wndProc, HWND hWndParent, DWORD dwExStyle,
843 DWORD dwStyle, HMENU hMenu, LONG z);
844 #ifdef UNICODE
845 #define SHCreateWorkerWindow SHCreateWorkerWindowW
846 #else
847 #define SHCreateWorkerWindow SHCreateWorkerWindowA
848 #endif
849
850 /*****************************************************************************
851 * Shell Link
852 */
853 #include <pshpack1.h>
854
855 typedef struct tagSHELL_LINK_HEADER
856 {
857 /* The size of this structure (always 0x0000004C) */
858 DWORD dwSize;
859 /* CLSID = class identifier (always 00021401-0000-0000-C000-000000000046) */
860 CLSID clsid;
861 /* Flags (SHELL_LINK_DATA_FLAGS) */
862 DWORD dwFlags;
863 /* Informations about the link target: */
864 DWORD dwFileAttributes;
865 FILETIME ftCreationTime;
866 FILETIME ftLastAccessTime;
867 FILETIME ftLastWriteTime;
868 DWORD nFileSizeLow; /* only the least significant 32 bits */
869 /* The index of an icon (signed?) */
870 DWORD nIconIndex;
871 /* The expected window state of an application launched by the link */
872 DWORD nShowCommand;
873 /* The keystrokes used to launch the application */
874 WORD wHotKey;
875 /* Reserved (must be zero) */
876 WORD wReserved1;
877 DWORD dwReserved2;
878 DWORD dwReserved3;
879 } SHELL_LINK_HEADER, *LPSHELL_LINK_HEADER;
880
881 /*****************************************************************************
882 * SHELL_LINK_INFOA/W
883 * If cbHeaderSize == 0x0000001C then use SHELL_LINK_INFOA
884 * If cbHeaderSize >= 0x00000024 then use SHELL_LINK_INFOW
885 */
886 typedef struct tagSHELL_LINK_INFOA
887 {
888 /* Size of the link info data */
889 DWORD cbSize;
890 /* Size of this structure (ANSI: = 0x0000001C) */
891 DWORD cbHeaderSize;
892 /* Specifies which fields are present/populated (SLI_*) */
893 DWORD dwFlags;
894 /* Offset of the VolumeID field (SHELL_LINK_INFO_VOLUME_ID) */
895 DWORD cbVolumeIDOffset;
896 /* Offset of the LocalBasePath field (ANSI, NULL-terminated string) */
897 DWORD cbLocalBasePathOffset;
898 /* Offset of the CommonNetworkRelativeLink field (SHELL_LINK_INFO_CNR_LINK) */
899 DWORD cbCommonNetworkRelativeLinkOffset;
900 /* Offset of the CommonPathSuffix field (ANSI, NULL-terminated string) */
901 DWORD cbCommonPathSuffixOffset;
902 } SHELL_LINK_INFOA, *LPSHELL_LINK_INFOA;
903
904 typedef struct tagSHELL_LINK_INFOW
905 {
906 /* Size of the link info data */
907 DWORD cbSize;
908 /* Size of this structure (Unicode: >= 0x00000024) */
909 DWORD cbHeaderSize;
910 /* Specifies which fields are present/populated (SLI_*) */
911 DWORD dwFlags;
912 /* Offset of the VolumeID field (SHELL_LINK_INFO_VOLUME_ID) */
913 DWORD cbVolumeIDOffset;
914 /* Offset of the LocalBasePath field (ANSI, NULL-terminated string) */
915 DWORD cbLocalBasePathOffset;
916 /* Offset of the CommonNetworkRelativeLink field (SHELL_LINK_INFO_CNR_LINK) */
917 DWORD cbCommonNetworkRelativeLinkOffset;
918 /* Offset of the CommonPathSuffix field (ANSI, NULL-terminated string) */
919 DWORD cbCommonPathSuffixOffset;
920 /* Offset of the LocalBasePathUnicode field (Unicode, NULL-terminated string) */
921 DWORD cbLocalBasePathUnicodeOffset;
922 /* Offset of the CommonPathSuffixUnicode field (Unicode, NULL-terminated string) */
923 DWORD cbCommonPathSuffixUnicodeOffset;
924 } SHELL_LINK_INFOW, *LPSHELL_LINK_INFOW;
925
926 /* VolumeID, LocalBasePath, LocalBasePathUnicode(cbHeaderSize >= 0x24) are present */
927 #define SLI_VALID_LOCAL 0x00000001
928 /* CommonNetworkRelativeLink is present */
929 #define SLI_VALID_NETWORK 0x00000002
930
931 /*****************************************************************************
932 * SHELL_LINK_INFO_VOLUME_IDA/W
933 * If cbVolumeLabelOffset != 0x00000014 (should be 0x00000010) then use
934 * SHELL_LINK_INFO_VOLUME_IDA
935 * If cbVolumeLabelOffset == 0x00000014 then use SHELL_LINK_INFO_VOLUME_IDW
936 */
937 typedef struct tagSHELL_LINK_INFO_VOLUME_IDA
938 {
939 /* Size of the VolumeID field (> 0x00000010) */
940 DWORD cbSize;
941 /* Drive type of the drive the link target is stored on (DRIVE_*) */
942 DWORD dwDriveType;
943 /* Serial number of the volume the link target is stored on */
944 DWORD nDriveSerialNumber;
945 /* Offset of the volume label (ANSI, NULL-terminated string).
946 Must be != 0x00000014 (see tagSHELL_LINK_INFO_VOLUME_IDW) */
947 DWORD cbVolumeLabelOffset;
948 } SHELL_LINK_INFO_VOLUME_IDA, *LPSHELL_LINK_INFO_VOLUME_IDA;
949
950 typedef struct tagSHELL_LINK_INFO_VOLUME_IDW
951 {
952 /* Size of the VolumeID field (> 0x00000010) */
953 DWORD cbSize;
954 /* Drive type of the drive the link target is stored on (DRIVE_*) */
955 DWORD dwDriveType;
956 /* Serial number of the volume the link target is stored on */
957 DWORD nDriveSerialNumber;
958 /* Offset of the volume label (ANSI, NULL-terminated string).
959 If the value of this field is 0x00000014, ignore it and use
960 cbVolumeLabelUnicodeOffset! */
961 DWORD cbVolumeLabelOffset;
962 /* Offset of the volume label (Unicode, NULL-terminated string).
963 If the value of the VolumeLabelOffset field is not 0x00000014,
964 this field must be ignored (==> it doesn't exists ==> ANSI). */
965 DWORD cbVolumeLabelUnicodeOffset;
966 } SHELL_LINK_INFO_VOLUME_IDW, *LPSHELL_LINK_INFO_VOLUME_IDW;
967
968 /*****************************************************************************
969 * SHELL_LINK_INFO_CNR_LINKA/W (CNR = Common Network Relative)
970 * If cbNetNameOffset == 0x00000014 then use SHELL_LINK_INFO_CNR_LINKA
971 * If cbNetNameOffset > 0x00000014 then use SHELL_LINK_INFO_CNR_LINKW
972 */
973 typedef struct tagSHELL_LINK_INFO_CNR_LINKA
974 {
975 /* Size of the CommonNetworkRelativeLink field (>= 0x00000014) */
976 DWORD cbSize;
977 /* Specifies which fields are present/populated (SLI_CNR_*) */
978 DWORD dwFlags;
979 /* Offset of the NetName field (ANSI, NULL\96terminated string) */
980 DWORD cbNetNameOffset;
981 /* Offset of the DeviceName field (ANSI, NULL\96terminated string) */
982 DWORD cbDeviceNameOffset;
983 /* Type of the network provider (WNNC_NET_* defined in winnetwk.h) */
984 DWORD dwNetworkProviderType;
985 } SHELL_LINK_INFO_CNR_LINKA, *LPSHELL_LINK_INFO_CNR_LINKA;
986
987 typedef struct tagSHELL_LINK_INFO_CNR_LINKW
988 {
989 /* Size of the CommonNetworkRelativeLink field (>= 0x00000014) */
990 DWORD cbSize;
991 /* Specifies which fields are present/populated (SLI_CNR_*) */
992 DWORD dwFlags;
993 /* Offset of the NetName field (ANSI, NULL\96terminated string) */
994 DWORD cbNetNameOffset;
995 /* Offset of the DeviceName field (ANSI, NULL\96terminated string) */
996 DWORD cbDeviceNameOffset;
997 /* Type of the network provider (WNNC_NET_* defined in winnetwk.h) */
998 DWORD dwNetworkProviderType;
999 /* Offset of the NetNameUnicode field (Unicode, NULL\96terminated string) */
1000 DWORD cbNetNameUnicodeOffset;
1001 /* Offset of the DeviceNameUnicode field (Unicode, NULL\96terminated string) */
1002 DWORD cbDeviceNameUnicodeOffset;
1003 } SHELL_LINK_INFO_CNR_LINKW, *LPSHELL_LINK_INFO_CNR_LINKW;
1004
1005 /* DeviceName is present */
1006 #define SLI_CNR_VALID_DEVICE 0x00000001
1007 /* NetworkProviderType is present */
1008 #define SLI_CNR_VALID_NET_TYPE 0x00000002
1009
1010 /*****************************************************************************
1011 * Shell Link Extra Data (IShellLinkDataList)
1012 */
1013 typedef struct tagEXP_TRACKER
1014 {
1015 /* .cbSize = 0x00000060, .dwSignature = 0xa0000003 */
1016 DATABLOCK_HEADER dbh;
1017 /* Length >= 0x00000058 */
1018 DWORD nLength;
1019 /* Must be 0x00000000 */
1020 DWORD nVersion;
1021 /* NetBIOS name (ANSI, unused bytes are set to zero) */
1022 CHAR szMachineID[16]; /* "variable" >= 16 (?) */
1023 /* Some GUIDs for the Link Tracking service (from the FS?) */
1024 GUID guidDroidVolume;
1025 GUID guidDroidObject;
1026 GUID guidDroidBirthVolume;
1027 GUID guidDroidBirthObject;
1028 } EXP_TRACKER, *LPEXP_TRACKER;
1029
1030 typedef struct tagEXP_SHIM
1031 {
1032 /* .cbSize >= 0x00000088, .dwSignature = 0xa0000008 */
1033 DATABLOCK_HEADER dbh;
1034 /* Name of a shim layer to apply (Unicode, unused bytes are set to zero) */
1035 WCHAR szwLayerName[64]; /* "variable" >= 64 */
1036 } EXP_SHIM, *LPEXP_SHIM;
1037
1038 typedef struct tagEXP_KNOWN_FOLDER
1039 {
1040 /* .cbSize = 0x0000001c, .dwSignature = 0xa000000b */
1041 DATABLOCK_HEADER dbh;
1042 /* A GUID value that identifies a known folder */
1043 GUID guidKnownFolder;
1044 /* Specifies the location of the ItemID of the first child
1045 segment of the IDList specified by guidKnownFolder */
1046 DWORD cbOffset;
1047 } EXP_KNOWN_FOLDER, *LPEXP_KNOWN_FOLDER;
1048
1049 typedef struct tagEXP_VISTA_ID_LIST
1050 {
1051 /* .cbSize >= 0x0000000a, .dwSignature = 0xa000000c */
1052 DATABLOCK_HEADER dbh;
1053 /* Specifies an alternate IDList that can be used instead
1054 of the "normal" IDList (SLDF_HAS_ID_LIST) */
1055 /* LPITEMIDLIST pIDList; (variable) */
1056 } EXP_VISTA_ID_LIST, *LPEXP_VISTA_ID_LIST;
1057
1058 #define EXP_TRACKER_SIG 0xa0000003
1059 #define EXP_SHIM_SIG 0xa0000008
1060 #define EXP_KNOWN_FOLDER_SIG 0xa000000b
1061 #define EXP_VISTA_ID_LIST_SIG 0xa000000c
1062
1063 #include <poppack.h>
1064
1065 #ifdef __cplusplus
1066 } /* extern "C" */
1067 #endif /* defined(__cplusplus) */
1068
1069 #endif // __SHLOBJ_UNDOC__H