[SHELL32]
[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 #ifdef __cplusplus
23 extern "C" {
24 #endif /* defined(__cplusplus) */
25
26 /****************************************************************************
27 * IDList Functions
28 */
29 BOOL WINAPI ILGetDisplayName(
30 LPCITEMIDLIST pidl,
31 LPVOID path);
32
33 /* type parameter for ILGetDisplayNameEx() */
34 #define ILGDN_FORPARSING 0
35 #define ILGDN_NORMAL 1
36 #define ILGDN_INFOLDER 2
37
38 BOOL WINAPI ILGetDisplayNameEx(
39 LPSHELLFOLDER psf,
40 LPCITEMIDLIST pidl,
41 LPVOID path,
42 DWORD type);
43
44 LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl);
45 void WINAPI ILGlobalFree(LPITEMIDLIST pidl);
46 LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPCSTR lpszPath); //FIXME
47 LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPCWSTR lpszPath);
48
49 HRESULT WINAPI SHILCreateFromPathA (
50 LPCSTR path,
51 LPITEMIDLIST * ppidl,
52 DWORD *attributes);
53
54 HRESULT WINAPI SHILCreateFromPathW (
55 LPCWSTR path,
56 LPITEMIDLIST * ppidl,
57 DWORD *attributes);
58
59 /*
60 string functions
61 */
62 BOOL WINAPI StrRetToStrNA(LPSTR,DWORD,LPSTRRET,const ITEMIDLIST*);
63 BOOL WINAPI StrRetToStrNW(LPWSTR,DWORD,LPSTRRET,const ITEMIDLIST*);
64
65
66 /****************************************************************************
67 * SHChangeNotifyRegister API
68 */
69 #define SHCNRF_InterruptLevel 0x0001
70 #define SHCNRF_ShellLevel 0x0002
71 #define SHCNRF_RecursiveInterrupt 0x1000 /* Must be combined with SHCNRF_InterruptLevel */
72 #define SHCNRF_NewDelivery 0x8000 /* Messages use shared memory */
73
74
75 /****************************************************************************
76 * Shell Common Dialogs
77 */
78
79 /* RunFileDlg flags */
80 #define RFF_NOBROWSE 0x01
81 #define RFF_NODEFAULT 0x02
82 #define RFF_CALCDIRECTORY 0x04
83 #define RFF_NOLABEL 0x08
84 #define RFF_NOSEPARATEMEM 0x20 /* NT only */
85
86 #define DE_SAMEFILE 0x71
87 #define DE_DESTSAMETREE 0x7D
88
89 /* RunFileFlg notification structure */
90 typedef struct
91 {
92 NMHDR hdr;
93 LPCSTR lpFile;
94 LPCSTR lpDirectory;
95 int nShow;
96 } NM_RUNFILEDLG, * LPNM_RUNFILEDLG;
97
98 /* RunFileDlg notification return values */
99 #define RF_OK 0x00
100 #define RF_CANCEL 0x01
101 #define RF_RETRY 0x02
102
103 void WINAPI RunFileDlg(
104 HWND hwndOwner,
105 HICON hIcon,
106 LPCWSTR lpstrDirectory,
107 LPCWSTR lpstrTitle,
108 LPCWSTR lpstrDescription,
109 UINT uFlags);
110
111 void WINAPI ExitWindowsDialog(HWND hwndOwner);
112
113 BOOL WINAPI SHFindComputer(
114 LPCITEMIDLIST pidlRoot,
115 LPCITEMIDLIST pidlSavedSearch);
116
117 void WINAPI SHHandleDiskFull(HWND hwndOwner,
118 UINT uDrive);
119
120 int WINAPI SHOutOfMemoryMessageBox(
121 HWND hwndOwner,
122 LPCSTR lpCaption,
123 UINT uType);
124
125 DWORD WINAPI SHNetConnectionDialog(
126 HWND hwndOwner,
127 LPCWSTR lpstrRemoteName,
128 DWORD dwType);
129
130 /****************************************************************************
131 * Memory Routines
132 */
133
134 /* The Platform SDK's shlobj.h header defines similar functions with a
135 * leading underscore. However those are unusable because of the leading
136 * underscore, because they have an incorrect calling convention, and
137 * because these functions are not exported by name anyway.
138 */
139 HANDLE WINAPI SHAllocShared(
140 LPVOID pv,
141 ULONG cb,
142 DWORD pid);
143
144 BOOL WINAPI SHFreeShared(
145 HANDLE hMem,
146 DWORD pid);
147
148 LPVOID WINAPI SHLockShared(
149 HANDLE hMem,
150 DWORD pid);
151
152 BOOL WINAPI SHUnlockShared(LPVOID pv);
153
154 /****************************************************************************
155 * Cabinet Window Messages
156 */
157
158 #define CWM_SETPATH (WM_USER + 2)
159 #define CWM_WANTIDLE (WM_USER + 3)
160 #define CWM_GETSETCURRENTINFO (WM_USER + 4)
161 #define CWM_SELECTITEM (WM_USER + 5)
162 #define CWM_SELECTITEMSTR (WM_USER + 6)
163 #define CWM_GETISHELLBROWSER (WM_USER + 7)
164 #define CWM_TESTPATH (WM_USER + 9)
165 #define CWM_STATECHANGE (WM_USER + 10)
166 #define CWM_GETPATH (WM_USER + 12)
167
168 /* CWM_TESTPATH types */
169 #define CWTP_ISEQUAL 0
170 #define CWTP_ISCHILD 1
171
172 /* CWM_TESTPATH structure */
173 typedef struct
174 {
175 DWORD dwType;
176 ITEMIDLIST idl;
177 } CWTESTPATHSTRUCT,* LPCWTESTPATHSTRUCT;
178
179 /****************************************************************************
180 * System Imagelist Routines
181 */
182
183 int WINAPI Shell_GetCachedImageIndexA(
184 LPCSTR lpszFileName,
185 int nIconIndex,
186 UINT bSimulateDoc);
187
188 BOOL WINAPI Shell_GetImageLists(
189 HIMAGELIST *lphimlLarge,
190 HIMAGELIST *lphimlSmall);
191
192 HICON WINAPI SHGetFileIcon(
193 DWORD dwReserved,
194 LPCSTR lpszPath,
195 DWORD dwFileAttributes,
196 UINT uFlags);
197
198 BOOL WINAPI FileIconInit(BOOL bFullInit);
199
200 /****************************************************************************
201 * File Menu Routines
202 */
203 /* FileMenu_Create nSelHeight constants */
204 #define FM_DEFAULT_SELHEIGHT -1
205 #define FM_FULL_SELHEIGHT 0
206
207 /* FileMenu_Create flags */
208 #define FMF_SMALL_ICONS 0x00
209 #define FMF_LARGE_ICONS 0x08
210 #define FMF_NO_COLUMN_BREAK 0x10
211
212 HMENU WINAPI FileMenu_Create(
213 COLORREF crBorderColor,
214 int nBorderWidth,
215 HBITMAP hBorderBmp,
216 int nSelHeight,
217 UINT uFlags);
218
219 void WINAPI FileMenu_Destroy(HMENU hMenu);
220
221 /* FileMenu_AppendItem constants */
222 #define FM_SEPARATOR (LPCSTR)1
223 #define FM_BLANK_ICON -1
224 #define FM_DEFAULT_HEIGHT 0
225
226 BOOL WINAPI FileMenu_AppendItem(
227 HMENU hMenu,
228 LPCSTR lpszText,
229 UINT uID,
230 int iIcon,
231 HMENU hMenuPopup,
232 int nItemHeight);
233
234 /* FileMenu_InsertUsingPidl flags */
235 #define FMF_NO_EMPTY_ITEM 0x01
236 #define FMF_NO_PROGRAM_GROUPS 0x04
237
238 /* FileMenu_InsertUsingPidl callback function */
239 typedef void (CALLBACK *LPFNFMCALLBACK)(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlFile);
240
241 int WINAPI FileMenu_InsertUsingPidl(
242 HMENU hMenu,
243 UINT uID,
244 LPCITEMIDLIST pidl,
245 UINT uFlags,
246 UINT uEnumFlags,
247 LPFNFMCALLBACK lpfnCallback);
248
249 int WINAPI FileMenu_ReplaceUsingPidl(
250 HMENU hMenu,
251 UINT uID,
252 LPCITEMIDLIST pidl,
253 UINT uEnumFlags,
254 LPFNFMCALLBACK lpfnCallback);
255
256 void WINAPI FileMenu_Invalidate(HMENU hMenu);
257
258 HMENU WINAPI FileMenu_FindSubMenuByPidl(
259 HMENU hMenu,
260 LPCITEMIDLIST pidl);
261
262 BOOL WINAPI FileMenu_TrackPopupMenuEx(
263 HMENU hMenu,
264 UINT uFlags,
265 int x,
266 int y,
267 HWND hWnd,
268 LPTPMPARAMS lptpm);
269
270 BOOL WINAPI FileMenu_GetLastSelectedItemPidls(
271 UINT uReserved,
272 LPCITEMIDLIST *ppidlFolder,
273 LPCITEMIDLIST *ppidlItem);
274
275 LRESULT WINAPI FileMenu_MeasureItem(
276 HWND hWnd,
277 LPMEASUREITEMSTRUCT lpmis);
278
279 LRESULT WINAPI FileMenu_DrawItem(
280 HWND hWnd,
281 LPDRAWITEMSTRUCT lpdis);
282
283 BOOL WINAPI FileMenu_InitMenuPopup(HMENU hMenu);
284
285 void WINAPI FileMenu_AbortInitMenu(void);
286
287 LRESULT WINAPI FileMenu_HandleMenuChar(
288 HMENU hMenu,
289 WPARAM wParam);
290
291 BOOL WINAPI FileMenu_DeleteAllItems(HMENU hMenu);
292
293 BOOL WINAPI FileMenu_DeleteItemByCmd(
294 HMENU hMenu,
295 UINT uID);
296
297 BOOL WINAPI FileMenu_DeleteItemByIndex(
298 HMENU hMenu,
299 UINT uPos);
300
301 BOOL WINAPI FileMenu_DeleteMenuItemByFirstID(
302 HMENU hMenu,
303 UINT uID);
304
305 BOOL WINAPI FileMenu_DeleteSeparator(HMENU hMenu);
306
307 BOOL WINAPI FileMenu_EnableItemByCmd(
308 HMENU hMenu,
309 UINT uID,
310 BOOL bEnable);
311
312 DWORD WINAPI FileMenu_GetItemExtent(
313 HMENU hMenu,
314 UINT uPos);
315
316 int WINAPI FileMenu_AppendFilesForPidl(
317 HMENU hMenu,
318 LPCITEMIDLIST pidl,
319 BOOL bAddSeparator);
320
321 int WINAPI FileMenu_AddFilesForPidl(
322 HMENU hMenu,
323 UINT uReserved,
324 UINT uID,
325 LPCITEMIDLIST pidl,
326 UINT uFlags,
327 UINT uEnumFlags,
328 LPFNFMCALLBACK lpfnCallback);
329
330 /****************************************************************************
331 * Drag And Drop Routines
332 */
333
334 HRESULT WINAPI SHRegisterDragDrop(
335 HWND hWnd,
336 LPDROPTARGET lpDropTarget);
337
338 HRESULT WINAPI SHRevokeDragDrop(HWND hWnd);
339
340 BOOL WINAPI DAD_DragEnter(HWND hWnd);
341
342 BOOL WINAPI DAD_SetDragImageFromListView(
343 HWND hWnd,
344 POINT pt);
345
346 BOOL WINAPI DAD_ShowDragImage(BOOL bShow);
347
348 /****************************************************************************
349 * Path Manipulation Routines
350 */
351
352 BOOL WINAPI PathAppendAW(LPVOID lpszPath1, LPCVOID lpszPath2);
353
354 LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile);
355
356 LPVOID WINAPI PathAddBackslashAW(LPVOID path);
357
358 LPVOID WINAPI PathBuildRootAW(LPVOID lpszPath, int drive);
359
360 LPVOID WINAPI PathFindExtensionAW(LPCVOID path);
361
362 LPVOID WINAPI PathFindFileNameAW(LPCVOID path);
363
364 LPVOID WINAPI PathGetExtensionAW(LPCVOID lpszPath, DWORD void1, DWORD void2);
365
366 LPVOID WINAPI PathGetArgsAW(LPVOID lpszPath);
367
368 BOOL WINAPI PathRemoveFileSpecAW(LPVOID lpszPath);
369
370 void WINAPI PathRemoveBlanksAW(LPVOID lpszPath);
371
372 VOID WINAPI PathQuoteSpacesAW(LPVOID path);
373
374 void WINAPI PathUnquoteSpacesAW(LPVOID lpszPath);
375
376 BOOL WINAPI PathIsUNCAW(LPCVOID lpszPath);
377
378 BOOL WINAPI PathIsRelativeAW(LPCVOID lpszPath);
379
380 BOOL WINAPI PathIsRootAW(LPCVOID x);
381
382 BOOL WINAPI PathIsExeAW(LPCVOID lpszPath);
383
384 BOOL WINAPI PathIsDirectoryAW(LPCVOID lpszPath);
385
386 BOOL WINAPI PathFileExistsAW(LPCVOID lpszPath);
387
388 BOOL WINAPI PathMatchSpecAW(LPVOID lpszPath, LPVOID lpszSpec);
389
390 BOOL WINAPI PathMakeUniqueNameAW(
391 LPVOID lpszBuffer,
392 DWORD dwBuffSize,
393 LPCVOID lpszShortName,
394 LPCVOID lpszLongName,
395 LPCVOID lpszPathName);
396
397 BOOL WINAPI PathYetAnotherMakeUniqueName(
398 LPWSTR lpszBuffer,
399 LPCWSTR lpszPathName,
400 LPCWSTR lpszShortName,
401 LPCWSTR lpszLongName);
402
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 */