Reintegrate header branch
[reactos.git] / reactos / dll / win32 / 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, 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 BOOL WINAPI ILGetDisplayName(
38 LPCITEMIDLIST pidl,
39 LPVOID path);
40
41 /* type parameter for ILGetDisplayNameEx() */
42 #define ILGDN_FORPARSING 0
43 #define ILGDN_NORMAL 1
44 #define ILGDN_INFOLDER 2
45
46 BOOL WINAPI ILGetDisplayNameEx(
47 LPSHELLFOLDER psf,
48 LPCITEMIDLIST pidl,
49 LPVOID path,
50 DWORD type);
51
52 LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl);
53 void WINAPI ILGlobalFree(LPITEMIDLIST pidl);
54 LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPCSTR lpszPath); //FIXME
55 LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPCWSTR lpszPath);
56
57 HRESULT WINAPI SHILCreateFromPathA (
58 LPCSTR path,
59 LPITEMIDLIST * ppidl,
60 DWORD *attributes);
61
62 HRESULT WINAPI SHILCreateFromPathW (
63 LPCWSTR path,
64 LPITEMIDLIST * ppidl,
65 DWORD *attributes);
66
67 /*
68 string functions
69 */
70 BOOL WINAPI StrRetToStrNA(LPSTR,DWORD,LPSTRRET,const ITEMIDLIST*);
71 BOOL WINAPI StrRetToStrNW(LPWSTR,DWORD,LPSTRRET,const ITEMIDLIST*);
72
73 /****************************************************************************
74 * Shell Common Dialogs
75 */
76
77 /* RunFileDlg flags */
78 #define RFF_NOBROWSE 0x01
79 #define RFF_NODEFAULT 0x02
80 #define RFF_CALCDIRECTORY 0x04
81 #define RFF_NOLABEL 0x08
82 #define RFF_NOSEPARATEMEM 0x20 /* NT only */
83
84 #define DE_SAMEFILE 0x71
85
86 /* RunFileFlg notification structure */
87 typedef struct
88 {
89 NMHDR hdr;
90 LPCSTR lpFile;
91 LPCSTR lpDirectory;
92 int nShow;
93 } NM_RUNFILEDLG, * LPNM_RUNFILEDLG;
94
95 /* RunFileDlg notification return values */
96 #define RF_OK 0x00
97 #define RF_CANCEL 0x01
98 #define RF_RETRY 0x02
99
100 void WINAPI RunFileDlg(
101 HWND hwndOwner,
102 HICON hIcon,
103 LPCSTR lpstrDirectory,
104 LPCSTR lpstrTitle,
105 LPCSTR lpstrDescription,
106 UINT uFlags);
107
108 void WINAPI ExitWindowsDialog(HWND hwndOwner);
109
110 BOOL WINAPI SHFindComputer(
111 LPCITEMIDLIST pidlRoot,
112 LPCITEMIDLIST pidlSavedSearch);
113
114 void WINAPI SHHandleDiskFull(HWND hwndOwner,
115 UINT uDrive);
116
117 int WINAPI SHOutOfMemoryMessageBox(
118 HWND hwndOwner,
119 LPCSTR lpCaption,
120 UINT uType);
121
122 DWORD WINAPI SHNetConnectionDialog(
123 HWND hwndOwner,
124 LPCWSTR lpstrRemoteName,
125 DWORD dwType);
126
127 /****************************************************************************
128 * Memory Routines
129 */
130
131 /* The Platform SDK's shlobj.h header defines similar functions with a
132 * leading underscore. However those are unusable because of the leading
133 * underscore, because they have an incorrect calling convention, and
134 * because these functions are not exported by name anyway.
135 */
136 HANDLE WINAPI SHAllocShared(
137 LPVOID pv,
138 ULONG cb,
139 DWORD pid);
140
141 BOOL WINAPI SHFreeShared(
142 HANDLE hMem,
143 DWORD pid);
144
145 LPVOID WINAPI SHLockShared(
146 HANDLE hMem,
147 DWORD pid);
148
149 BOOL WINAPI SHUnlockShared(LPVOID pv);
150
151 /****************************************************************************
152 * Cabinet Window Messages
153 */
154
155 #define CWM_SETPATH (WM_USER + 2)
156 #define CWM_WANTIDLE (WM_USER + 3)
157 #define CWM_GETSETCURRENTINFO (WM_USER + 4)
158 #define CWM_SELECTITEM (WM_USER + 5)
159 #define CWM_SELECTITEMSTR (WM_USER + 6)
160 #define CWM_GETISHELLBROWSER (WM_USER + 7)
161 #define CWM_TESTPATH (WM_USER + 9)
162 #define CWM_STATECHANGE (WM_USER + 10)
163 #define CWM_GETPATH (WM_USER + 12)
164
165 /* CWM_TESTPATH types */
166 #define CWTP_ISEQUAL 0
167 #define CWTP_ISCHILD 1
168
169 /* CWM_TESTPATH structure */
170 typedef struct
171 {
172 DWORD dwType;
173 ITEMIDLIST idl;
174 } CWTESTPATHSTRUCT,* LPCWTESTPATHSTRUCT;
175
176 /****************************************************************************
177 * System Imagelist Routines
178 */
179
180 int WINAPI Shell_GetCachedImageIndexA(
181 LPCSTR lpszFileName,
182 int nIconIndex,
183 UINT bSimulateDoc);
184
185 BOOL WINAPI Shell_GetImageLists(
186 HIMAGELIST *lphimlLarge,
187 HIMAGELIST *lphimlSmall);
188
189 HICON WINAPI SHGetFileIcon(
190 DWORD dwReserved,
191 LPCSTR lpszPath,
192 DWORD dwFileAttributes,
193 UINT uFlags);
194
195 BOOL WINAPI FileIconInit(BOOL bFullInit);
196
197 /****************************************************************************
198 * File Menu Routines
199 */
200 /* FileMenu_Create nSelHeight constants */
201 #define FM_DEFAULT_SELHEIGHT -1
202 #define FM_FULL_SELHEIGHT 0
203
204 /* FileMenu_Create flags */
205 #define FMF_SMALL_ICONS 0x00
206 #define FMF_LARGE_ICONS 0x08
207 #define FMF_NO_COLUMN_BREAK 0x10
208
209 HMENU WINAPI FileMenu_Create(
210 COLORREF crBorderColor,
211 int nBorderWidth,
212 HBITMAP hBorderBmp,
213 int nSelHeight,
214 UINT uFlags);
215
216 void WINAPI FileMenu_Destroy(HMENU hMenu);
217
218 /* FileMenu_AppendItem constants */
219 #define FM_SEPARATOR (LPCSTR)1
220 #define FM_BLANK_ICON -1
221 #define FM_DEFAULT_HEIGHT 0
222
223 BOOL WINAPI FileMenu_AppendItem(
224 HMENU hMenu,
225 LPCSTR lpszText,
226 UINT uID,
227 int iIcon,
228 HMENU hMenuPopup,
229 int nItemHeight);
230
231 /* FileMenu_InsertUsingPidl flags */
232 #define FMF_NO_EMPTY_ITEM 0x01
233 #define FMF_NO_PROGRAM_GROUPS 0x04
234
235 /* FileMenu_InsertUsingPidl callback function */
236 typedef void (CALLBACK *LPFNFMCALLBACK)(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlFile);
237
238 int WINAPI FileMenu_InsertUsingPidl(
239 HMENU hMenu,
240 UINT uID,
241 LPCITEMIDLIST pidl,
242 UINT uFlags,
243 UINT uEnumFlags,
244 LPFNFMCALLBACK lpfnCallback);
245
246 int WINAPI FileMenu_ReplaceUsingPidl(
247 HMENU hMenu,
248 UINT uID,
249 LPCITEMIDLIST pidl,
250 UINT uEnumFlags,
251 LPFNFMCALLBACK lpfnCallback);
252
253 void WINAPI FileMenu_Invalidate(HMENU hMenu);
254
255 HMENU WINAPI FileMenu_FindSubMenuByPidl(
256 HMENU hMenu,
257 LPCITEMIDLIST pidl);
258
259 BOOL WINAPI FileMenu_TrackPopupMenuEx(
260 HMENU hMenu,
261 UINT uFlags,
262 int x,
263 int y,
264 HWND hWnd,
265 LPTPMPARAMS lptpm);
266
267 BOOL WINAPI FileMenu_GetLastSelectedItemPidls(
268 UINT uReserved,
269 LPCITEMIDLIST *ppidlFolder,
270 LPCITEMIDLIST *ppidlItem);
271
272 LRESULT WINAPI FileMenu_MeasureItem(
273 HWND hWnd,
274 LPMEASUREITEMSTRUCT lpmis);
275
276 LRESULT WINAPI FileMenu_DrawItem(
277 HWND hWnd,
278 LPDRAWITEMSTRUCT lpdis);
279
280 BOOL WINAPI FileMenu_InitMenuPopup(HMENU hMenu);
281
282 void WINAPI FileMenu_AbortInitMenu(void);
283
284 LRESULT WINAPI FileMenu_HandleMenuChar(
285 HMENU hMenu,
286 WPARAM wParam);
287
288 BOOL WINAPI FileMenu_DeleteAllItems(HMENU hMenu);
289
290 BOOL WINAPI FileMenu_DeleteItemByCmd(
291 HMENU hMenu,
292 UINT uID);
293
294 BOOL WINAPI FileMenu_DeleteItemByIndex(
295 HMENU hMenu,
296 UINT uPos);
297
298 BOOL WINAPI FileMenu_DeleteMenuItemByFirstID(
299 HMENU hMenu,
300 UINT uID);
301
302 BOOL WINAPI FileMenu_DeleteSeparator(HMENU hMenu);
303
304 BOOL WINAPI FileMenu_EnableItemByCmd(
305 HMENU hMenu,
306 UINT uID,
307 BOOL bEnable);
308
309 DWORD WINAPI FileMenu_GetItemExtent(
310 HMENU hMenu,
311 UINT uPos);
312
313 int WINAPI FileMenu_AppendFilesForPidl(
314 HMENU hMenu,
315 LPCITEMIDLIST pidl,
316 BOOL bAddSeparator);
317
318 int WINAPI FileMenu_AddFilesForPidl(
319 HMENU hMenu,
320 UINT uReserved,
321 UINT uID,
322 LPCITEMIDLIST pidl,
323 UINT uFlags,
324 UINT uEnumFlags,
325 LPFNFMCALLBACK lpfnCallback);
326
327 /****************************************************************************
328 * Drag And Drop Routines
329 */
330
331 HRESULT WINAPI SHRegisterDragDrop(
332 HWND hWnd,
333 LPDROPTARGET lpDropTarget);
334
335 HRESULT WINAPI SHRevokeDragDrop(HWND hWnd);
336
337 BOOL WINAPI DAD_DragEnter(HWND hWnd);
338
339 BOOL WINAPI DAD_SetDragImageFromListView(
340 HWND hWnd,
341 POINT pt);
342
343 BOOL WINAPI DAD_ShowDragImage(BOOL bShow);
344
345 /****************************************************************************
346 * Path Manipulation Routines
347 */
348
349 BOOL WINAPI PathAppendAW(LPVOID lpszPath1, LPCVOID lpszPath2);
350
351 LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile);
352
353 LPVOID WINAPI PathAddBackslashAW(LPVOID path);
354
355 LPVOID WINAPI PathBuildRootAW(LPVOID lpszPath, int drive);
356
357 LPVOID WINAPI PathFindExtensionAW(LPCVOID path);
358
359 LPVOID WINAPI PathFindFileNameAW(LPCVOID path);
360
361 LPVOID WINAPI PathGetExtensionAW(LPCVOID lpszPath, DWORD void1, DWORD void2);
362
363 LPVOID WINAPI PathGetArgsAW(LPVOID lpszPath);
364
365 BOOL WINAPI PathRemoveFileSpecAW(LPVOID lpszPath);
366
367 void WINAPI PathRemoveBlanksAW(LPVOID lpszPath);
368
369 VOID WINAPI PathQuoteSpacesAW(LPVOID path);
370
371 void WINAPI PathUnquoteSpacesAW(LPVOID lpszPath);
372
373 BOOL WINAPI PathIsUNCAW(LPCVOID lpszPath);
374
375 BOOL WINAPI PathIsRelativeAW(LPCVOID lpszPath);
376
377 BOOL WINAPI PathIsRootAW(LPCVOID x);
378
379 BOOL WINAPI PathIsExeAW(LPCVOID lpszPath);
380
381 BOOL WINAPI PathIsDirectoryAW(LPCVOID lpszPath);
382
383 BOOL WINAPI PathFileExistsAW(LPCVOID lpszPath);
384
385 BOOL WINAPI PathMatchSpecAW(LPVOID lpszPath, LPVOID lpszSpec);
386
387 BOOL WINAPI PathMakeUniqueNameAW(
388 LPVOID lpszBuffer,
389 DWORD dwBuffSize,
390 LPCVOID lpszShortName,
391 LPCVOID lpszLongName,
392 LPCVOID lpszPathName);
393
394 BOOL WINAPI PathYetAnotherMakeUniqueName(
395 LPWSTR lpszBuffer,
396 LPCWSTR lpszPathName,
397 LPCWSTR lpszShortName,
398 LPCWSTR lpszLongName);
399
400 BOOL WINAPI PathQualifyA(LPCSTR path);
401 BOOL WINAPI PathQualifyW(LPCWSTR path);
402 #define PathQualify WINELIB_NAME_AW(PathQualify)
403 BOOL WINAPI PathQualifyAW(LPCVOID path);
404
405
406 /* PathResolve flags */
407 #define PRF_CHECKEXISTANCE 0x01
408 #define PRF_EXECUTABLE 0x02
409 #define PRF_QUALIFYONPATH 0x04
410 #define PRF_WINDOWS31 0x08
411
412 BOOL WINAPI PathResolveAW(LPVOID lpszPath, LPCVOID *alpszPaths, DWORD dwFlags);
413
414 VOID WINAPI PathSetDlgItemPathAW(HWND hDlg, int nIDDlgItem, LPCVOID lpszPath);
415
416 /* PathProcessCommand flags */
417 #define PPCF_QUOTEPATH 0x01 /* implies PPCF_INCLUDEARGS */
418 #define PPCF_INCLUDEARGS 0x02
419 //#define PPCF_NODIRECTORIES 0x10 move to shlobj
420 #define PPCF_DONTRESOLVE 0x20
421 #define PPCF_PATHISRELATIVE 0x40
422
423 HRESULT WINAPI PathProcessCommandAW(LPCVOID lpszPath, LPVOID lpszBuff,
424 DWORD dwBuffSize, DWORD dwFlags);
425
426 void WINAPI PathStripPathAW(LPVOID lpszPath);
427
428 BOOL WINAPI PathStripToRootAW(LPVOID lpszPath);
429
430 void WINAPI PathRemoveArgsAW(LPVOID lpszPath);
431
432 void WINAPI PathRemoveExtensionAW(LPVOID lpszPath);
433
434 int WINAPI PathParseIconLocationAW(LPVOID lpszPath);
435
436 BOOL WINAPI PathIsSameRootAW(LPCVOID lpszPath1, LPCVOID lpszPath2);
437
438 BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID *sOtherDirs);
439
440 /****************************************************************************
441 * Shell Namespace Routines
442 */
443
444 /* Generic structure used by several messages */
445 typedef struct
446 {
447 DWORD dwReserved;
448 DWORD dwReserved2;
449 LPCITEMIDLIST pidl;
450 LPDWORD lpdwUser;
451 } SFVCBINFO, * LPSFVCBINFO;
452 typedef const SFVCBINFO * LPCSFVCBINFO;
453
454 /* SFVCB_SELECTIONCHANGED structure */
455 typedef struct
456 {
457 UINT uOldState;
458 UINT uNewState;
459 LPCITEMIDLIST pidl;
460 LPDWORD lpdwUser;
461 } SFVSELECTSTATE, * LPSFVSELECTSTATE;
462 typedef const SFVSELECTSTATE * LPCSFVSELECTSTATE;
463
464 /* SFVCB_COPYHOOKCALLBACK structure */
465 typedef struct
466 {
467 HWND hwnd;
468 UINT wFunc;
469 UINT wFlags;
470 LPCSTR pszSrcFile;
471 DWORD dwSrcAttribs;
472 LPCSTR pszDestFile;
473 DWORD dwDestAttribs;
474 } SFVCOPYHOOKINFO, * LPSFVCOPYHOOKINFO;
475 typedef const SFVCOPYHOOKINFO * LPCSFVCOPYHOOKINFO;
476
477 /* SFVCB_GETDETAILSOF structure */
478 typedef struct
479 {
480 LPCITEMIDLIST pidl;
481 int fmt;
482 int cx;
483 STRRET lpText;
484 } SFVCOLUMNINFO, * LPSFVCOLUMNINFO;
485
486 /****************************************************************************
487 * Misc Stuff
488 */
489
490 /* SHWaitForFileToOpen flags */
491 #define SHWFF_ADD 0x01
492 #define SHWFF_REMOVE 0x02
493 #define SHWFF_WAIT 0x04
494
495 BOOL WINAPI SHWaitForFileToOpen(
496 LPCITEMIDLIST pidl,
497 DWORD dwFlags,
498 DWORD dwTimeout);
499
500 WORD WINAPI ArrangeWindows(
501 HWND hwndParent,
502 DWORD dwReserved,
503 LPCRECT lpRect,
504 WORD cKids,
505 CONST HWND * lpKids);
506
507 /* RegisterShellHook types */
508 #define RSH_DEREGISTER 0
509 #define RSH_REGISTER 1
510 #define RSH_REGISTER_PROGMAN 2
511 #define RSH_REGISTER_TASKMAN 3
512
513 BOOL WINAPI RegisterShellHook(
514 HWND hWnd,
515 DWORD dwType);
516
517 /* SHCreateDefClassObject callback function */
518 typedef HRESULT (CALLBACK *LPFNCDCOCALLBACK)(
519 LPUNKNOWN pUnkOuter,
520 REFIID riidObject,
521 LPVOID *ppvObject);
522
523 HRESULT WINAPI SHCreateDefClassObject(
524 REFIID riidFactory,
525 LPVOID *ppvFactory,
526 LPFNCDCOCALLBACK lpfnCallback,
527 LPDWORD lpdwUsage,
528 REFIID riidObject);
529
530 void WINAPI SHFreeUnusedLibraries(void);
531
532 /* SHCreateLinks flags */
533 #define SHCLF_PREFIXNAME 0x01
534 #define SHCLF_CREATEONDESKTOP 0x02
535
536 HRESULT WINAPI SHCreateLinks(
537 HWND hWnd,
538 LPCSTR lpszDir,
539 LPDATAOBJECT lpDataObject,
540 UINT uFlags,
541 LPITEMIDLIST *lppidlLinks);
542
543 DWORD WINAPI CheckEscapesA(LPSTR string, DWORD len);
544 DWORD WINAPI CheckEscapesW(LPWSTR string, DWORD len);
545
546 /* policy functions */
547 BOOL WINAPI SHInitRestricted(LPCVOID unused, LPCVOID inpRegKey);
548
549 /* Shell Desktop functions */
550
551 #define WM_GETISHELLBROWSER (WM_USER+7)
552
553 BOOL WINAPI SHDesktopMessageLoop(HANDLE);
554
555 #define CSIDL_FOLDER_MASK 0x00ff
556
557 #ifdef __cplusplus
558 } /* extern "C" */
559 #endif /* defined(__cplusplus) */
560
561 #endif /* __WINE_UNDOCSHELL_H */