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