SHCoCreateInstance is now documented (spotted by Francois Gouget).
[wine] / dlls / shell32 / undocshell.h
1 /*
2  * Copyright 1999, 2000 Juergen Schmied
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19 #ifndef __WINE_UNDOCSHELL_H
20 #define __WINE_UNDOCSHELL_H
21
22 #include <stdarg.h>
23
24 #include "windef.h"
25 #include "winbase.h"
26 #include "winuser.h"
27 #include "commctrl.h"
28 #include "shlobj.h"
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif /* defined(__cplusplus) */
33
34 /****************************************************************************
35  *      IDList Functions
36  */
37 LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl);
38 LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl);
39
40 LPITEMIDLIST WINAPI ILCombine(
41         LPCITEMIDLIST iil1,
42         LPCITEMIDLIST iil2);
43
44 DWORD WINAPI ILGetSize(LPCITEMIDLIST pidl);
45
46 LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl);
47 LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl);
48 BOOL WINAPI ILRemoveLastID(LPCITEMIDLIST pidl);
49
50 LPITEMIDLIST WINAPI ILFindChild(
51         LPCITEMIDLIST pidl1,
52         LPCITEMIDLIST pidl2);
53
54 LPITEMIDLIST WINAPI ILAppendID(
55         LPITEMIDLIST pidl,
56         LPCSHITEMID lpItemID,
57         BOOL bAddToEnd);
58
59 BOOL WINAPI ILIsEqual(
60         LPCITEMIDLIST pidl1,
61         LPCITEMIDLIST pidl2);
62
63 BOOL WINAPI ILIsParent(
64         LPCITEMIDLIST pidlParent,
65         LPCITEMIDLIST pidlChild,
66         BOOL bImmediate);
67
68 BOOL WINAPI ILGetDisplayName(
69         LPCITEMIDLIST pidl,
70         LPVOID path);
71
72 /* type parameter for ILGetDisplayNameEx() */
73 #define ILGDN_FORPARSING  0
74 #define ILGDN_NORMAL      1
75 #define ILGDN_INFOLDER    2
76
77 BOOL WINAPI ILGetDisplayNameEx(
78         LPSHELLFOLDER psf,
79         LPCITEMIDLIST pidl,
80         LPVOID path,
81         DWORD type);
82
83 DWORD WINAPI ILFree(LPITEMIDLIST pidl);
84
85 HRESULT WINAPI ILSaveToStream(
86         LPSTREAM pstrm,
87         LPCITEMIDLIST pidl);
88
89 HRESULT WINAPI ILLoadFromStream(
90         LPSTREAM pstrm,
91         LPITEMIDLIST *ppidl);
92
93 LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl);
94 void WINAPI ILGlobalFree(LPITEMIDLIST pidl);
95
96 LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPCSTR lpszPath);
97 LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPCWSTR lpszPath);
98 LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW (LPCVOID lpszPath);
99
100 HRESULT WINAPI SHILCreateFromPathA (
101         LPCSTR path,
102         LPITEMIDLIST * ppidl,
103         DWORD *attributes);
104
105 HRESULT WINAPI SHILCreateFromPathW (
106         LPCWSTR path,
107         LPITEMIDLIST * ppidl,
108         DWORD *attributes);
109
110 HRESULT WINAPI SHILCreateFromPathAW (
111         LPCVOID path,
112         LPITEMIDLIST * ppidl,
113         DWORD *attributes);
114
115 LPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR path);
116 LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path);
117 LPITEMIDLIST WINAPI ILCreateFromPathAW(LPCVOID path);
118
119 /*
120         string functions
121 */
122 HRESULT WINAPI StrRetToStrNA (
123         LPVOID dest,
124         DWORD len,
125         LPSTRRET src,
126         const ITEMIDLIST *pidl);
127
128 HRESULT WINAPI StrRetToStrNW (
129         LPVOID dest,
130         DWORD len,
131         LPSTRRET src,
132         const ITEMIDLIST *pidl);
133
134 HRESULT WINAPI StrRetToStrNAW (
135         LPVOID dest,
136         DWORD len,
137         LPSTRRET src,
138         const ITEMIDLIST *pidl);
139
140
141 /****************************************************************************
142 * SHChangeNotifyRegister API
143 */
144 #define SHCNRF_InterruptLevel           0x0001
145 #define SHCNRF_ShellLevel               0x0002
146 #define SHCNRF_RecursiveInterrupt       0x1000  /* Must be combined with SHCNRF_InterruptLevel */
147 #define SHCNRF_NewDelivery              0x8000  /* Messages use shared memory */
148
149 /****************************************************************************
150  * Shell Common Dialogs
151  */
152
153 BOOL WINAPI PickIconDlg(
154         HWND hwndOwner,
155         LPSTR lpstrFile,
156         DWORD nMaxFile,
157         LPDWORD lpdwIconIndex);
158
159 /* RunFileDlg flags */
160 #define RFF_NOBROWSE       0x01
161 #define RFF_NODEFAULT      0x02
162 #define RFF_CALCDIRECTORY  0x04
163 #define RFF_NOLABEL        0x08
164 #define RFF_NOSEPARATEMEM  0x20  /* NT only */
165
166 /* RunFileFlg notification structure */
167 typedef struct
168 {
169   NMHDR   hdr;
170   LPCSTR  lpFile;
171   LPCSTR  lpDirectory;
172   int     nShow;
173 } NM_RUNFILEDLG, * LPNM_RUNFILEDLG;
174
175 /* RunFileDlg notification return values */
176 #define RF_OK      0x00
177 #define RF_CANCEL  0x01
178 #define RF_RETRY   0x02
179
180 void WINAPI RunFileDlg(
181         HWND hwndOwner,
182         HICON hIcon,
183         LPCSTR lpstrDirectory,
184         LPCSTR lpstrTitle,
185         LPCSTR lpstrDescription,
186         UINT uFlags);
187
188 void WINAPI ExitWindowsDialog(HWND hwndOwner);
189
190 int  WINAPI RestartDialog(
191         HWND hwndOwner,
192         LPCSTR lpstrReason,
193         UINT uFlags);
194
195 BOOL WINAPI GetFileNameFromBrowse(
196         HWND hwndOwner,
197         LPSTR lpstrFile,
198         DWORD nMaxFile,
199         LPCSTR lpstrInitialDir,
200         LPCSTR lpstrDefExt,
201         LPCSTR lpstrFilter,
202         LPCSTR lpstrTitle);
203
204 BOOL WINAPI SHFindFiles(
205         LPCITEMIDLIST pidlRoot,
206         LPCITEMIDLIST pidlSavedSearch);
207
208 BOOL WINAPI SHFindComputer(
209         LPCITEMIDLIST pidlRoot,
210         LPCITEMIDLIST pidlSavedSearch);
211
212 /* SHObjectProperties flags */
213 #define OPF_PRINTERNAME  0x01
214 #define OPF_PATHNAME     0x02
215
216 BOOL WINAPI SHObjectProperties(
217         HWND hwndOwner,
218         UINT uFlags,
219         LPCSTR lpstrName,
220         LPCSTR lpstrParameters);
221
222 void WINAPI SHHandleDiskFull(HWND hwndOwner,
223         UINT uDrive);
224
225 int  WINAPI SHOutOfMemoryMessageBox(
226         HWND hwndOwner,
227         LPCSTR lpCaption,
228         UINT uType);
229
230 DWORD WINAPI SHNetConnectionDialog(
231         HWND hwndOwner,
232         LPCSTR lpstrRemoteName,
233         DWORD dwType);
234
235 int WINAPIV ShellMessageBoxA(
236         HINSTANCE hInstance,
237         HWND hWnd,
238         LPCSTR lpText,
239         LPCSTR lpCaption,
240         UINT uType,
241         ...);
242
243 int WINAPIV ShellMessageBoxW(
244         HINSTANCE hInstance,
245         HWND hWnd,
246         LPCWSTR lpText,
247         LPCWSTR lpCaption,
248         UINT uType,
249         ...);
250
251 #define ShellMessageBox WINELIB_NAME_AW(ShellMessageBox)
252
253 /****************************************************************************
254  * Memory Routines
255  */
256
257 LPVOID WINAPI SHAlloc(ULONG cb);
258 void WINAPI SHFree(LPVOID pv);
259
260 HANDLE WINAPI SHAllocShared(
261         LPVOID pv,
262         ULONG cb,
263         DWORD pid);
264
265 BOOL WINAPI SHFreeShared(
266         HANDLE hMem,
267         DWORD pid);
268
269 LPVOID WINAPI SHLockShared(
270         HANDLE hMem,
271         DWORD pid);
272
273 BOOL WINAPI SHUnlockShared(LPVOID pv);
274
275 /****************************************************************************
276  * Cabinet Window Messages
277  */
278
279 #define CWM_SETPATH           (WM_USER + 2)
280 #define CWM_WANTIDLE          (WM_USER + 3)
281 #define CWM_GETSETCURRENTINFO (WM_USER + 4)
282 #define CWM_SELECTITEM        (WM_USER + 5)
283 #define CWM_SELECTITEMSTR     (WM_USER + 6)
284 #define CWM_GETISHELLBROWSER  (WM_USER + 7)
285 #define CWM_TESTPATH          (WM_USER + 9)
286 #define CWM_STATECHANGE       (WM_USER + 10)
287 #define CWM_GETPATH           (WM_USER + 12)
288
289 /* CWM_TESTPATH types */
290 #define CWTP_ISEQUAL  0
291 #define CWTP_ISCHILD  1
292
293 /* CWM_TESTPATH structure */
294 typedef struct
295 {
296         DWORD dwType;
297         ITEMIDLIST idl;
298 } CWTESTPATHSTRUCT,* LPCWTESTPATHSTRUCT;
299
300 /****************************************************************************
301  * System Imagelist Routines
302  */
303
304 int WINAPI Shell_GetCachedImageIndex(
305         LPCSTR lpszFileName,
306         UINT nIconIndex,
307         BOOL bSimulateDoc);
308
309 BOOL WINAPI Shell_GetImageLists(
310         HIMAGELIST *lphimlLarge,
311         HIMAGELIST *lphimlSmall);
312
313 HICON WINAPI SHGetFileIcon(
314         DWORD dwReserved,
315         LPCSTR lpszPath,
316         DWORD dwFileAttributes,
317         UINT uFlags);
318
319 int WINAPI SHMapPIDLToSystemImageListIndex(
320         LPSHELLFOLDER psf,
321         LPCITEMIDLIST pidl,
322         UINT * pOpenIndex);
323
324 BOOL WINAPI FileIconInit(BOOL bFullInit);
325
326 /****************************************************************************
327  * File Menu Routines
328  */
329 /* FileMenu_Create nSelHeight constants */
330 #define FM_DEFAULT_SELHEIGHT  -1
331 #define FM_FULL_SELHEIGHT     0
332
333 /* FileMenu_Create flags */
334 #define FMF_SMALL_ICONS      0x00
335 #define FMF_LARGE_ICONS      0x08
336 #define FMF_NO_COLUMN_BREAK  0x10
337
338 HMENU WINAPI FileMenu_Create(
339         COLORREF crBorderColor,
340         int nBorderWidth,
341         HBITMAP hBorderBmp,
342         int nSelHeight,
343         UINT uFlags);
344
345 void WINAPI FileMenu_Destroy(HMENU hMenu);
346
347 /* FileMenu_AppendItem constants */
348 #define FM_SEPARATOR       (LPCSTR)1
349 #define FM_BLANK_ICON      -1
350 #define FM_DEFAULT_HEIGHT  0
351
352 BOOL WINAPI FileMenu_AppendItem(
353         HMENU hMenu,
354         LPCSTR lpszText,
355         UINT uID,
356         int iIcon,
357         HMENU hMenuPopup,
358         int nItemHeight);
359
360 /* FileMenu_InsertUsingPidl flags */
361 #define FMF_NO_EMPTY_ITEM      0x01
362 #define FMF_NO_PROGRAM_GROUPS  0x04
363
364 /* FileMenu_InsertUsingPidl callback function */
365 typedef void (CALLBACK *LPFNFMCALLBACK)(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlFile);
366
367 int WINAPI FileMenu_InsertUsingPidl(
368         HMENU hMenu,
369         UINT uID,
370         LPCITEMIDLIST pidl,
371         UINT uFlags,
372         UINT uEnumFlags,
373         LPFNFMCALLBACK lpfnCallback);
374
375 int WINAPI FileMenu_ReplaceUsingPidl(
376         HMENU hMenu,
377         UINT uID,
378         LPCITEMIDLIST pidl,
379         UINT uEnumFlags,
380         LPFNFMCALLBACK lpfnCallback);
381
382 void WINAPI FileMenu_Invalidate(HMENU hMenu);
383
384 HMENU WINAPI FileMenu_FindSubMenuByPidl(
385         HMENU hMenu,
386         LPCITEMIDLIST pidl);
387
388 BOOL WINAPI FileMenu_TrackPopupMenuEx(
389         HMENU hMenu,
390         UINT uFlags,
391         int x,
392         int y,
393         HWND hWnd,
394         LPTPMPARAMS lptpm);
395
396 BOOL WINAPI FileMenu_GetLastSelectedItemPidls(
397         UINT uReserved,
398         LPCITEMIDLIST *ppidlFolder,
399         LPCITEMIDLIST *ppidlItem);
400
401 LRESULT WINAPI FileMenu_MeasureItem(
402         HWND hWnd,
403         LPMEASUREITEMSTRUCT lpmis);
404
405 LRESULT WINAPI FileMenu_DrawItem(
406         HWND hWnd,
407         LPDRAWITEMSTRUCT lpdis);
408
409 BOOL WINAPI FileMenu_InitMenuPopup(HMENU hMenu);
410
411 void WINAPI FileMenu_AbortInitMenu(void);
412
413 LRESULT WINAPI FileMenu_HandleMenuChar(
414         HMENU hMenu,
415         WPARAM wParam);
416
417 BOOL WINAPI FileMenu_DeleteAllItems(HMENU hMenu);
418
419 BOOL WINAPI FileMenu_DeleteItemByCmd(
420         HMENU hMenu,
421         UINT uID);
422
423 BOOL WINAPI FileMenu_DeleteItemByIndex(
424         HMENU hMenu,
425         UINT uPos);
426
427 BOOL WINAPI FileMenu_DeleteMenuItemByFirstID(
428         HMENU hMenu,
429         UINT uID);
430
431 BOOL WINAPI FileMenu_DeleteSeparator(HMENU hMenu);
432
433 BOOL WINAPI FileMenu_EnableItemByCmd(
434         HMENU hMenu,
435         UINT uID,
436         BOOL bEnable);
437
438 DWORD WINAPI FileMenu_GetItemExtent(
439         HMENU hMenu,
440         UINT uPos);
441
442 int WINAPI FileMenu_AppendFilesForPidl(
443         HMENU hMenu,
444         LPCITEMIDLIST pidl,
445         BOOL bAddSeparator);
446
447 int WINAPI FileMenu_AddFilesForPidl(
448         HMENU hMenu,
449         UINT uReserved,
450         UINT uID,
451         LPCITEMIDLIST pidl,
452         UINT uFlags,
453         UINT uEnumFlags,
454         LPFNFMCALLBACK lpfnCallback);
455
456 /****************************************************************************
457  * Drag And Drop Routines
458  */
459 HRESULT WINAPI SHLoadOLE(DWORD dwFlags);
460
461 HRESULT WINAPI SHRegisterDragDrop(
462         HWND hWnd,
463         LPDROPTARGET lpDropTarget);
464
465 HRESULT WINAPI SHRevokeDragDrop(HWND hWnd);
466
467 HRESULT WINAPI SHDoDragDrop(
468         HWND hWnd,
469         LPDATAOBJECT lpDataObject,
470         LPDROPSOURCE lpDropSource,
471         DWORD dwOKEffect,
472         LPDWORD pdwEffect);
473
474 BOOL WINAPI DAD_DragEnter(HWND hWnd);
475
476 BOOL WINAPI DAD_DragEnterEx(
477         HWND hWnd,
478         POINT pt);
479
480 BOOL WINAPI DAD_DragMove(POINT pt);
481
482 /* DAD_AutoScroll return values */
483 #define DAD_SCROLL_UP    1
484 #define DAD_SCROLL_DOWN  2
485 #define DAD_SCROLL_LEFT  4
486 #define DAD_SCROLL_RIGHT 8
487
488 /* DAD_AutoScroll sample structure */
489 typedef struct
490 {
491         DWORD  dwCount;
492         DWORD  dwLastTime;
493         BOOL   bWrapped;
494         POINT  aptPositions[3];
495         DWORD  adwTimes[3];
496 } SCROLLSAMPLES, *LPSCROLLSAMPLES;
497
498 DWORD WINAPI DAD_AutoScroll(HWND hWnd,
499         LPSCROLLSAMPLES lpSamples,
500         LPPOINT lppt);
501
502 BOOL WINAPI DAD_DragLeave();
503
504 BOOL WINAPI DAD_SetDragImageFromListView(
505         HWND hWnd,
506         POINT pt);
507
508 BOOL WINAPI DAD_SetDragImage(
509         HIMAGELIST himlTrack,
510         LPPOINT lppt);
511
512 BOOL WINAPI DAD_ShowDragImage(BOOL bShow);
513
514 HRESULT WINAPI SHCreateStdEnumFmtEtc(
515         DWORD cFormats,
516         const FORMATETC *lpFormats,
517         LPENUMFORMATETC *ppenumFormatetc);
518
519 HRESULT WINAPI CIDLData_CreateFromIDArray(
520         LPCITEMIDLIST pidlFolder,
521         DWORD cpidlFiles,
522         LPCITEMIDLIST *lppidlFiles,
523         LPDATAOBJECT *ppdataObject);
524
525 /****************************************************************************
526  * Path Manipulation Routines
527  */
528
529 BOOL WINAPI PathAppendAW(LPVOID lpszPath1, LPCVOID lpszPath2);
530
531 LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile);
532
533 LPVOID  WINAPI PathAddBackslashAW(LPVOID path);
534
535 LPVOID WINAPI PathBuildRootAW(LPVOID lpszPath, int drive);
536
537 LPVOID WINAPI PathFindExtensionAW(LPCVOID path);
538
539 LPVOID WINAPI PathFindFileNameAW(LPCVOID path);
540
541 LPVOID WINAPI PathGetExtensionAW(LPCVOID lpszPath,  DWORD void1, DWORD void2);
542
543 LPVOID WINAPI PathGetArgsAW(LPVOID lpszPath);
544
545 BOOL WINAPI PathRemoveFileSpecAW(LPVOID lpszPath);
546
547 LPVOID WINAPI PathGetShortPathAW(LPVOID lpszPath);
548
549 void WINAPI PathRemoveBlanksAW(LPVOID lpszPath);
550
551 VOID  WINAPI PathQuoteSpacesAW(LPVOID path);
552
553 void WINAPI PathUnquoteSpacesAW(LPVOID lpszPath);
554
555 BOOL WINAPI PathIsUNCAW(LPCVOID lpszPath);
556
557 BOOL WINAPI PathIsRelativeAW(LPCVOID lpszPath);
558
559 BOOL WINAPI PathIsRootAW(LPCVOID x);
560
561 BOOL WINAPI PathIsExeAW(LPCVOID lpszPath);
562
563 BOOL WINAPI PathIsDirectoryAW(LPCVOID lpszPath);
564
565 BOOL WINAPI PathFileExistsAW(LPCVOID lpszPath);
566
567 BOOL WINAPI PathMatchSpecAW(LPVOID lpszPath, LPVOID lpszSpec);
568
569 BOOL WINAPI PathMakeUniqueNameAW(
570         LPVOID lpszBuffer,
571         DWORD dwBuffSize,
572         LPCVOID lpszShortName,
573         LPCVOID lpszLongName,
574         LPCVOID lpszPathName);
575
576 BOOL WINAPI PathYetAnotherMakeUniqueNameA(
577         LPSTR lpszBuffer,
578         LPCSTR lpszPathName,
579         LPCSTR lpszShortName,
580         LPCSTR lpszLongName);
581
582 /* PathCleanupSpec return values */
583 #define PCS_REPLACEDCHARS  0x00000001
584 #define PCS_REMOVEDCHARS   0x00000002
585 #define PCS_SHORTENED      0x00000004
586 #define PCS_PATHTOOLONG    0x80000008
587
588 DWORD WINAPI PathCleanupSpecAW(LPCVOID lpszPath, LPVOID lpszFile);
589
590 BOOL WINAPI PathQualifyA(LPCSTR path);
591 BOOL WINAPI PathQualifyW(LPCWSTR path);
592 #define PathQualify WINELIB_NAME_AW(PathQualify)
593 BOOL  WINAPI PathQualifyAW(LPCVOID path);
594
595
596 /* PathResolve flags */
597 #define PRF_CHECKEXISTANCE  0x01
598 #define PRF_EXECUTABLE      0x02
599 #define PRF_QUALIFYONPATH   0x04
600 #define PRF_WINDOWS31       0x08
601
602 BOOL WINAPI PathResolveAW(LPVOID lpszPath, LPCVOID *alpszPaths, DWORD dwFlags);
603
604 VOID WINAPI PathSetDlgItemPathAW(HWND hDlg, int nIDDlgItem, LPCVOID lpszPath);
605
606 /* PathProcessCommand flags */
607 #define PPCF_QUOTEPATH        0x01 /* implies PPCF_INCLUDEARGS */
608 #define PPCF_INCLUDEARGS      0x02
609 #define PPCF_NODIRECTORIES    0x10
610 #define PPCF_DONTRESOLVE      0x20
611 #define PPCF_PATHISRELATIVE   0x40
612
613 HRESULT WINAPI PathProcessCommandAW(LPCVOID lpszPath, LPVOID lpszBuff,
614                                 DWORD dwBuffSize, DWORD dwFlags);
615
616 void WINAPI PathStripPathAW(LPVOID lpszPath);
617
618 BOOL WINAPI PathStripToRootAW(LPVOID lpszPath);
619
620 void WINAPI PathRemoveArgsAW(LPVOID lpszPath);
621
622 void WINAPI PathRemoveExtensionAW(LPVOID lpszPath);
623
624 int WINAPI PathParseIconLocationAW(LPVOID lpszPath);
625
626 BOOL WINAPI PathIsSameRootAW(LPCVOID lpszPath1, LPCVOID lpszPath2);
627
628 BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID sOtherDirs);
629
630 /****************************************************************************
631  * Shell Namespace Routines
632  */
633
634 /* SHCreateShellFolderViewEx callback function */
635 typedef HRESULT (CALLBACK *LPFNSFVCALLBACK)(
636         DWORD dwUser,
637         LPSHELLFOLDER pshf,
638         HWND hWnd,
639         UINT uMsg,
640         WPARAM wParam,
641         LPARAM lParam);
642
643 /* SHCreateShellFolderViewEx structure */
644 typedef struct
645 {
646   DWORD            dwSize;
647   LPSHELLFOLDER    pshf;
648   DWORD            dwUser;
649   LPCITEMIDLIST    pidlFolder;
650   DWORD            dwEventId;
651   LPFNSFVCALLBACK  lpfnCallback;
652   UINT             uViewMode;
653 } SHELLFOLDERVIEWINFO, * LPSHELLFOLDERVIEWINFO;
654 typedef const SHELLFOLDERVIEWINFO * LPCSHELLFOLDERVIEWINFO;
655
656 HRESULT WINAPI SHCreateShellFolderViewEx(
657         LPCSHELLFOLDERVIEWINFO pshfvi,
658         LPSHELLVIEW *ppshv);
659
660 /* SHCreateShellFolderViewEx callback messages */
661 #define SFVCB_ADDTOMENU           0x0001
662 #define SFVCB_INVOKECOMMAND       0x0002
663 #define SFVCB_GETMENUHELP         0x0003
664 #define SFVCB_GETTOOLBARTIP       0x0004
665 #define SFVCB_GETTOOLBARINFO      0x0005
666 #define SFVCB_ADDTOOLBARITEMS     0x0006
667 #define SFVCB_INITMENUPOPUP       0x0007
668 #define SFVCB_SELECTIONCHANGED    0x0008
669 #define SFVCB_DRAWMENUITEM        0x0009
670 #define SFVCB_MEASUREMENUITEM     0x000A
671 #define SFVCB_EXITMENULOOP        0x000B
672 #define SFVCB_VIEWRELEASE         0x000C
673 #define SFVCB_GETNAMELENGTH       0x000D
674 #define SFVCB_CHANGENOTIFY        0x000E
675 #define SFVCB_WINDOWCREATED       0x000F
676 #define SFVCB_WINDOWCLOSING       0x0010
677 #define SFVCB_LISTREFRESHED       0x0011
678 #define SFVCB_WINDOWFOCUSED       0x0012
679 #define SFVCB_REGISTERCOPYHOOK    0x0014
680 #define SFVCB_COPYHOOKCALLBACK    0x0015
681 #define SFVCB_GETDETAILSOF        0x0017
682 #define SFVCB_COLUMNCLICK         0x0018
683 #define SFVCB_GETCHANGENOTIFYPIDL 0x0019
684 #define SFVCB_GETESTIMATEDCOUNT   0x001A
685 #define SFVCB_ADJUSTVIEWMODE      0x001B
686 #define SFVCB_REMOVEFROMMENU      0x001C
687 #define SFVCB_ADDINGOBJECT        0x001D
688 #define SFVCB_REMOVINGOBJECT      0x001E
689 #define SFVCB_UPDATESTATUSBAR     0x001F
690 #define SFVCB_ISSLOWREFRESH       0x0020
691 #define SFVCB_GETCOMMANDDIR       0x0021
692 #define SFVCB_GETCOLUMNSTREAM     0x0022
693 #define SFVCB_CANSELECTALL        0x0023
694 #define SFVCB_DRAGSUCCEEDED       0x0024
695 #define SFVCB_ISSTRICTREFRESH     0x0025
696 #define SFVCB_ISCHILDOBJECT       0x0026
697
698 /* Generic structure used by several messages */
699 typedef struct
700 {
701   DWORD          dwReserved;
702   DWORD          dwReserved2;
703   LPCITEMIDLIST  pidl;
704   LPDWORD        lpdwUser;
705 } SFVCBINFO, * LPSFVCBINFO;
706 typedef const SFVCBINFO * LPCSFVCBINFO;
707
708 /* SFVCB_ADDTOMENU structure */
709 typedef struct
710 {
711   HMENU  hMenu;
712   UINT   indexMenu;
713   UINT   idCmdFirst;
714   UINT   idCmdLast;
715 } SFVMENUINFO, * LPSFVMENUINFO;
716
717 /* SFVCB_GETTOOLBARINFO structure */
718 typedef struct
719 {
720   UINT  nButtons;
721   UINT  uFlags;
722 } SFVTOOLBARINFO, * LPSFVTOOLBARINFO;
723
724 /* SFVTOOLBARINFO flags */
725 typedef enum
726 {
727   SFVTI_ADDTOEND   = 0,
728   SFVTI_ADDTOFRONT = 1,
729   SFVTI_OVERWRITE  = 2
730 } SFVTIF;
731
732 /* SFVCB_SELECTIONCHANGED structure */
733 typedef struct
734 {
735   UINT           uOldState;
736   UINT           uNewState;
737   LPCITEMIDLIST  pidl;
738   LPDWORD        lpdwUser;
739 } SFVSELECTSTATE, * LPSFVSELECTSTATE;
740 typedef const SFVSELECTSTATE * LPCSFVSELECTSTATE;
741
742 /* SFVCB_COPYHOOKCALLBACK structure */
743 typedef struct
744 {
745   HWND    hwnd;
746   UINT    wFunc;
747   UINT    wFlags;
748   LPCSTR  pszSrcFile;
749   DWORD   dwSrcAttribs;
750   LPCSTR  pszDestFile;
751   DWORD   dwDestAttribs;
752 } SFVCOPYHOOKINFO, * LPSFVCOPYHOOKINFO;
753 typedef const SFVCOPYHOOKINFO * LPCSFVCOPYHOOKINFO;
754
755 /* SFVCB_GETDETAILSOF structure */
756 typedef struct
757 {
758   LPCITEMIDLIST  pidl;
759   int            fmt;
760   int            cx;
761   STRRET         lpText;
762 } SFVCOLUMNINFO, * LPSFVCOLUMNINFO;
763
764 int WINAPI SHShellFolderView_Message(
765         HWND hwndCabinet,
766         DWORD dwMessage,
767         DWORD dwParam);
768
769 /* SHShellFolderView_Message messages */
770 #define SFVM_REARRANGE          0x0001
771 #define SFVM_GETARRANGECOLUMN   0x0002
772 #define SFVM_ADDOBJECT          0x0003
773 #define SFVM_GETITEMCOUNT       0x0004
774 #define SFVM_GETITEMPIDL        0x0005
775 #define SFVM_REMOVEOBJECT       0x0006
776 #define SFVM_UPDATEOBJECT       0x0007
777 #define SFVM_SETREDRAW          0x0008
778 #define SFVM_GETSELECTEDOBJECTS 0x0009
779 #define SFVM_ISDROPONSOURCE     0x000A
780 #define SFVM_MOVEICONS          0x000B
781 #define SFVM_GETDRAGPOINT       0x000C
782 #define SFVM_GETDROPPOINT       0x000D
783 #define SFVM_SETOBJECTPOS       0x000E
784 #define SFVM_ISDROPONBACKGROUND 0x000F
785 #define SFVM_CUTOBJECTS         0x0010
786 #define SFVM_TOGGLEAUTOARRANGE  0x0011
787 #define SFVM_LINEUPICONS        0x0012
788 #define SFVM_GETAUTOARRANGE     0x0013
789 #define SFVM_GETSELECTEDCOUNT   0x0014
790 #define SFVM_GETITEMSPACING     0x0015
791 #define SFVM_REFRESHOBJECT      0x0016
792 #define SFVM_SETCLIPBOARDPOINTS 0x0017
793
794 /****************************************************************************
795  * Misc Stuff
796  */
797
798 /* SHWaitForFileToOpen flags */
799 #define SHWFF_ADD     0x01
800 #define SHWFF_REMOVE  0x02
801 #define SHWFF_WAIT    0x04
802
803 BOOL WINAPI SHWaitForFileToOpen(
804         LPCITEMIDLIST pidl,
805         DWORD dwFlags,
806         DWORD dwTimeout);
807
808 WORD WINAPI ArrangeWindows(
809         HWND hwndParent,
810         DWORD dwReserved,
811         LPCRECT lpRect,
812         WORD cKids,
813         CONST HWND * lpKids);
814
815 /* RegisterShellHook types */
816 #define RSH_DEREGISTER        0
817 #define RSH_REGISTER          1
818 #define RSH_REGISTER_PROGMAN  2
819 #define RSH_REGISTER_TASKMAN  3
820
821 BOOL WINAPI RegisterShellHook(
822         HWND hWnd,
823         DWORD dwType);
824
825 /* SHCreateDefClassObject callback function */
826 typedef HRESULT (CALLBACK *LPFNCDCOCALLBACK)(
827         LPUNKNOWN pUnkOuter,
828         REFIID riidObject,
829         LPVOID *ppvObject);
830
831 HRESULT WINAPI SHCreateDefClassObject(
832         REFIID riidFactory,
833         LPVOID *ppvFactory,
834         LPFNCDCOCALLBACK lpfnCallback,
835         LPDWORD lpdwUsage,
836         REFIID riidObject);
837
838 DWORD WINAPI SHCLSIDFromStringA (LPCSTR clsid, CLSID *id);
839 DWORD WINAPI SHCLSIDFromStringW (LPCWSTR clsid, CLSID *id);
840
841 void WINAPI SHFreeUnusedLibraries();
842
843 /* SHCreateLinks flags */
844 #define SHCLF_PREFIXNAME       0x01
845 #define SHCLF_CREATEONDESKTOP  0x02
846
847 HRESULT WINAPI SHCreateLinks(
848         HWND hWnd,
849         LPCSTR lpszDir,
850         LPDATAOBJECT lpDataObject,
851         UINT uFlags,
852         LPITEMIDLIST *lppidlLinks);
853
854 /* SHGetNewLinkInfo flags */
855 #define SHGNLI_PIDL        0x01
856 #define SHGNLI_PREFIXNAME  0x02
857 #define SHGNLI_NOUNIQUE    0x04
858
859 BOOL WINAPI SHGetNewLinkInfoA(
860         LPCSTR pszLinkTo,
861         LPCSTR pszDir,
862         LPSTR pszName,
863         BOOL *pfMustCopy,
864         UINT uFlags);
865
866 BOOL WINAPI SHGetNewLinkInfoW(
867         LPCWSTR pszLinkTo,
868         LPCWSTR pszDir,
869         LPWSTR pszName,
870         BOOL *pfMustCopy,
871         UINT uFlags);
872 #define SHGetNewLinkInfo WINELIB_NAME_AW(SHGetNewLinkInfo)
873
874 DWORD WINAPI CheckEscapesA(LPSTR string, DWORD len);
875 DWORD WINAPI CheckEscapesW(LPWSTR string, DWORD len);
876
877 /* policy functions */
878 BOOL WINAPI SHInitRestricted(LPCVOID unused, LPCVOID inpRegKey);
879
880 /* cabinet functions */
881
882 #include "pshpack1.h"
883
884 typedef struct {
885     WORD cLength;
886     WORD nVersion;
887     BOOL fFullPathTitle:1;
888     BOOL fSaveLocalView:1;
889     BOOL fNotShell:1;
890     BOOL fSimpleDefault:1;
891     BOOL fDontShowDescBar:1;
892     BOOL fNewWindowMode:1;
893     BOOL fShowCompColor:1;
894     BOOL fDontPrettyNames:1;
895     BOOL fAdminsCreateCommonGroups:1;
896     UINT fUnusedFlags:7;
897     UINT fMenuEnumFilter;
898 } CABINETSTATE;
899
900 #include "poppack.h"
901
902 BOOL WINAPI ReadCabinetState(CABINETSTATE *, int);
903 BOOL WINAPI WriteCabinetState(CABINETSTATE *);
904
905 #ifdef __cplusplus
906 } /* extern "C" */
907 #endif /* defined(__cplusplus) */
908
909 #endif /* __WINE_UNDOCSHELL_H */