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