Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

771 lines
30 KiB

#ifndef _SHELLP_H_
#define _SHELLP_H_
//
// Define API decoration for direct importing of DLL references.
//
#ifndef WINSHELLAPI
#if !defined(_SHELL32_)
#define WINSHELLAPI DECLSPEC_IMPORT
#else
#define WINSHELLAPI
#endif
#endif // WINSHELLAPI
//
// shell private header
//
#ifndef RC_INVOKED
#pragma pack(1) /* Assume byte packing throughout */
#endif /* !RC_INVOKED */
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */
#endif /* __cplusplus */
//===========================================================================
#ifndef _SHSEMIP_H_
// Handle to property sheet extension array
DECLARE_HANDLE( HPSXA );
#endif // _SHSEMIP_H_
//===========================================================================
// Shell restrictions. (Parameter for SHRestriction)
typedef enum
{
REST_NONE = 0x00000000,
REST_NORUN = 0x00000001,
REST_NOCLOSE = 0x00000002,
REST_NOSAVESET = 0x00000004,
REST_NOFILEMENU = 0x00000008,
REST_NOSETFOLDERS = 0x00000010,
REST_NOSETTASKBAR = 0x00000020,
REST_NODESKTOP = 0x00000040,
REST_NOFIND = 0x00000080,
REST_NODRIVES = 0x00000100,
REST_NODRIVEAUTORUN = 0x00000200,
REST_NODRIVETYPEAUTORUN = 0x00000400,
REST_NONETHOOD = 0x00000800,
REST_STARTBANNER = 0x00001000,
REST_RESTRICTRUN = 0x00002000,
REST_NOPRINTERTABS = 0x00004000,
REST_NOPRINTERDELETE = 0x00008000,
REST_NOPRINTERADD = 0x00010000,
REST_NOSTARTMENUSUBFOLDERS = 0x00020000,
REST_MYDOCSONNET = 0x00040000,
REST_NOEXITTODOS = 0x00080000,
} RESTRICTIONS;
WINSHELLAPI HRESULT WINAPI CIDLData_CreateFromIDArray(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST apidl[], LPDATAOBJECT * ppdtobj);
WINSHELLAPI BOOL WINAPI SHIsBadInterfacePtr(LPCVOID pv, UINT cbVtbl);
//
// Stream API
//
WINSHELLAPI LPSTREAM WINAPI OpenRegStream(HKEY hkey, LPCSTR pszSubkey, LPCSTR pszValue, DWORD grfMode);
WINSHELLAPI LPSTREAM WINAPI OpenFileStream(LPCSTR szFile, DWORD grfMode);
//
// OLE ripoffs of Drag and Drop related API
//
WINSHELLAPI HRESULT WINAPI SHRegisterDragDrop(HWND hwnd, LPDROPTARGET pdtgt);
WINSHELLAPI HRESULT WINAPI SHRevokeDragDrop(HWND hwnd);
WINSHELLAPI HRESULT WINAPI SHDoDragDrop(HWND hwndOwner, LPDATAOBJECT pdata, LPDROPSOURCE pdsrc, DWORD dwEffect, LPDWORD pdwEffect);
//
// Special folder
//
WINSHELLAPI LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwndOwner, int nFolder, BOOL fCreate);
WINSHELLAPI BOOL WINAPI SHGetSpecialFolderPath(HWND hwndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate);
// DiskFull
WINSHELLAPI void WINAPI SHHandleDiskFull(HWND hwnd, int idDrive);
//
// File Search APIS
//
WINSHELLAPI BOOL WINAPI SHFindFiles(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlSaveFile);
WINSHELLAPI BOOL WINAPI SHFindComputer(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlSaveFile);
//
//
WINSHELLAPI void WINAPI PathGetShortPath(LPSTR pszLongPath);
WINSHELLAPI BOOL WINAPI PathFindOnPath(LPSTR szFile, LPCSTR FAR * ppszOtherDirs);
WINSHELLAPI BOOL WINAPI PathYetAnotherMakeUniqueName(LPSTR pszUniqueName, LPCSTR pszPath, LPCSTR pszShort, LPCSTR pszFileSpec);
//
WINSHELLAPI BOOL WINAPI Win32CreateDirectory(LPCSTR lpszPath, LPSECURITY_ATTRIBUTES lpsa);
WINSHELLAPI BOOL WINAPI Win32RemoveDirectory(LPCSTR lpszPath);
WINSHELLAPI BOOL WINAPI Win32DeleteFile(LPCSTR lpszPath);
// Convert an IDList into a logical IDList so that desktop folders
// appear at the right spot in the tree
WINSHELLAPI LPITEMIDLIST WINAPI SHLogILFromFSIL(LPCITEMIDLIST pidlFS);
// Convert an ole string.
WINSHELLAPI BOOL WINAPI StrRetToStrN(LPSTR szOut, UINT uszOut, LPSTRRET pStrRet, LPCITEMIDLIST pidl);
WINSHELLAPI DWORD WINAPI SHWaitForFileToOpen(LPCITEMIDLIST pidl,
UINT uOptions, DWORD dwtimeout);
WINSHELLAPI HRESULT WINAPI SHGetRealIDL(LPSHELLFOLDER psf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST FAR* ppidlReal);
WINSHELLAPI void WINAPI SetAppStartingCursor(HWND hwnd, BOOL fSet);
#define DECLAREWAITCURSOR HCURSOR hcursor_wait_cursor_save
#define SetWaitCursor() hcursor_wait_cursor_save = SetCursor(LoadCursor(NULL, IDC_WAIT))
#define ResetWaitCursor() SetCursor(hcursor_wait_cursor_save)
WINSHELLAPI DWORD WINAPI SHRestricted(RESTRICTIONS rest);
WINSHELLAPI LPVOID WINAPI SHGetHandlerEntry(LPCSTR szHandler, LPCSTR szProcName, HINSTANCE *lpModule);
WINSHELLAPI STDAPI SHCoCreateInstance(LPCSTR pszCLSID, const CLSID FAR * lpclsid,
LPUNKNOWN pUnkOuter, REFIID riid, LPVOID FAR* ppv);
WINSHELLAPI BOOL WINAPI SignalFileOpen(LPCITEMIDLIST pidl);
WINSHELLAPI LPITEMIDLIST WINAPI SHSimpleIDListFromPath(LPCSTR pszPath);
WINSHELLAPI int WINAPI SHCreateDirectory(HWND hwnd, LPCSTR pszPath);
WINSHELLAPI HPSXA SHCreatePropSheetExtArray( HKEY hKey, PCSTR pszSubKey, UINT max_iface );
WINSHELLAPI void SHDestroyPropSheetExtArray( HPSXA hpsxa );
WINSHELLAPI UINT SHAddFromPropSheetExtArray( HPSXA hpsxa, LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam );
WINSHELLAPI UINT SHReplaceFromPropSheetExtArray( HPSXA hpsxa, UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam );
WINSHELLAPI DWORD SHNetConnectionDialog(HWND hwnd, LPSTR pszRemoteName, DWORD dwType) ;
WINSHELLAPI STDAPI SHLoadOLE(LPARAM lParam);
WINSHELLAPI void WINAPI Desktop_UpdateBriefcaseOnEvent(HWND hwnd, UINT uEvent);
WINSHELLAPI HRESULT WINAPI SHCreateStdEnumFmtEtc(UINT cfmt, const FORMATETC afmt[], LPENUMFORMATETC * ppenumFormatEtc);
// Shell create link API
#define SHCL_USETEMPLATE 0x0001
#define SHCL_USEDESKTOP 0x0002
#define SHCL_CONFIRM 0x0004
WINSHELLAPI HRESULT WINAPI SHCreateLinks(HWND hwnd, LPCSTR pszDir, IDataObject *pDataObj, UINT fFlags, LPITEMIDLIST* ppidl);
//
// Interface pointer validation
//
#define IsBadInterfacePtr(pitf, ITF) SHIsBadInterfacePtr(pitf, sizeof(ITF##Vtbl))
//===========================================================================
// Image dragging API (definitely private)
//===========================================================================
// stuff for doing auto scrolling
#define NUM_POINTS 3
typedef struct { // asd
int iNextSample;
DWORD dwLastScroll;
BOOL bFull;
POINT pts[NUM_POINTS];
DWORD dwTimes[NUM_POINTS];
} AUTO_SCROLL_DATA;
#define DAD_InitScrollData(pad) (pad)->bFull = FALSE, (pad)->iNextSample = 0, (pad)->dwLastScroll = 0
WINSHELLAPI BOOL WINAPI DAD_SetDragImage(HIMAGELIST him, POINT FAR* pptOffset);
WINSHELLAPI BOOL WINAPI DAD_DragEnter(HWND hwndTarget);
WINSHELLAPI BOOL WINAPI DAD_DragEnterEx(HWND hwndTarget, const POINT ptStart);
WINSHELLAPI BOOL WINAPI DAD_ShowDragImage(BOOL fShow);
WINSHELLAPI BOOL WINAPI DAD_DragMove(POINT pt);
WINSHELLAPI BOOL WINAPI DAD_DragLeave(void);
WINSHELLAPI BOOL WINAPI DAD_AutoScroll(HWND hwnd, AUTO_SCROLL_DATA *pad, const POINT *pptNow);
WINSHELLAPI BOOL WINAPI DAD_SetDragImageFromListView(HWND hwndLV, POINT ptOffset);
//===========================================================================
// Another block of private API
//===========================================================================
// indexes into the shell image lists (Shell_GetImageList) for default images
#define II_DOCNOASSOC 0 // document (blank page) (not associated)
#define II_DOCUMENT 1 // document (with stuff on the page)
#define II_APPLICATION 2 // application (exe, com, bat)
#define II_FOLDER 3 // folder (plain)
#define II_FOLDEROPEN 4 // folder (open)
// Startmenu images.
#define II_STPROGS 19
#define II_STDOCS 20
#define II_STSETNGS 21
#define II_STFIND 22
#define II_STHELP 23
#define II_STRUN 24
#define II_STSUSPD 25
#define II_STEJECT 26
#define II_STSHUTD 27
// More startmenu image.
#define II_STCPANEL 35
#define II_STSPROGS 36
#define II_STPRNTRS 37
#define II_STFONTS 38
#define II_STTASKBR 39
WINSHELLAPI BOOL WINAPI Shell_GetImageLists(HIMAGELIST FAR *phiml, HIMAGELIST FAR *phimlSmall);
WINSHELLAPI void WINAPI Shell_SysColorChange(void);
WINSHELLAPI int WINAPI Shell_GetCachedImageIndex(LPCSTR pszIconPath, int iIconIndex, UINT uIconFlags);
WINSHELLAPI LRESULT WINAPI SHShellFolderView_Message(HWND hwndMain, UINT uMsg, LPARAM lParam);
// A usefull function in Defview for mapping idlist into index into system
// image list. Optionally it can also look up the index of the selected
// icon.
WINSHELLAPI int WINAPI SHMapPIDLToSystemImageListIndex(LPSHELLFOLDER pshf, LPCITEMIDLIST pidl, int *piIndexSel);
//
// OLE string
//
WINSHELLAPI int WINAPI OleStrToStrN(LPSTR, int, LPCOLESTR, int);
WINSHELLAPI int WINAPI StrToOleStrN(LPOLESTR, int, LPCSTR, int);
WINSHELLAPI int WINAPI OleStrToStr(LPSTR, LPCOLESTR);
WINSHELLAPI int WINAPI StrToOleStr(LPOLESTR, LPCSTR);
//===========================================================================
// Useful macros
//===========================================================================
#define ResultFromShort(i) ResultFromScode(MAKE_SCODE(SEVERITY_SUCCESS, 0, (USHORT)(i)))
#define ShortFromResult(r) (short)SCODE_CODE(GetScode(r))
// Tray CopyData Messages
#define TCDM_APPBAR 0x00000000
#define TCDM_NOTIFY 0x00000001
#define TCDM_LOADINPROC 0x00000002
//===========================================================================
// IShellFolder::UIObject helper
//===========================================================================
STDAPI SHCreateDefExtIconKey(HKEY hkey, LPCSTR pszModule, int iIcon, int iIconOpen, UINT uFlags, LPEXTRACTICON FAR* pxiconOut);
STDAPI SHCreateDefExtIcon(LPCSTR pszModule, int iIcon, int iIconOpen, UINT uFlags, LPEXTRACTICON FAR* pxiconOut);
//
// BUGBUG: lParam for DFM_INVOKECOMMAND needs to be changed
// now it contains "args" but it should just contain the LPCMINVOKECOMMANDINFO
// uMsg wParam lParam
#define DFM_MERGECONTEXTMENU 1 // uFlags LPQCMINFO
#define DFM_INVOKECOMMAND 2 // idCmd pszArgs
#define DFM_ADDREF 3 // 0 0
#define DFM_RELEASE 4 // 0 0
#define DFM_GETHELPTEXT 5 // idCmd,cchMax pszText
#define DFM_WM_MEASUREITEM 6 // ---from the message---
#define DFM_WM_DRAWITEM 7 // ---from the message---
#define DFM_WM_INITMENUPOPUP 8 // ---from the message---
#define DFM_VALIDATECMD 9 // idCmd 0
#define DFM_MERGECONTEXTMENU_TOP 10 // uFlags LPQCMINFO
// Commands from DFM_INVOKECOMMAND when strings are passed in
#define DFM_CMD_DELETE ((WPARAM)-1)
#define DFM_CMD_MOVE ((WPARAM)-2)
#define DFM_CMD_COPY ((WPARAM)-3)
#define DFM_CMD_LINK ((WPARAM)-4)
#define DFM_CMD_PROPERTIES ((WPARAM)-5)
#define DFM_CMD_NEWFOLDER ((WPARAM)-6)
#define DFM_CMD_PASTE ((WPARAM)-7)
#define DFM_CMD_VIEWLIST ((WPARAM)-8)
#define DFM_CMD_VIEWDETAILS ((WPARAM)-9)
#define DFM_CMD_PASTELINK ((WPARAM)-10)
#define DFM_CMD_PASTESPECIAL ((WPARAM)-11)
#define DFM_CMD_MODALPROP ((WPARAM)-12)
typedef struct _QCMINFO // qcm
{
HMENU hmenu; // in
UINT indexMenu; // in
UINT idCmdFirst; // in/out
UINT idCmdLast; // in
} QCMINFO, FAR* LPQCMINFO;
typedef HRESULT (CALLBACK FAR* LPFNDFMCALLBACK)(LPSHELLFOLDER psf,
HWND hwndOwner,
LPDATAOBJECT pdtobj,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
STDAPI CDefFolderMenu_Create(LPCITEMIDLIST pidlFolder,
HWND hwndOwner,
UINT cidl, LPCITEMIDLIST FAR* apidl,
LPSHELLFOLDER psf,
LPFNDFMCALLBACK lpfn,
HKEY hkeyProgID, HKEY hkeyBaseProgID,
LPCONTEXTMENU FAR* ppcm);
void PASCAL CDefFolderMenu_MergeMenu(HINSTANCE hinst, UINT idMainMerge, UINT idPopupMerge,
LPQCMINFO pqcm);
void PASCAL Def_InitFileCommands(ULONG dwAttr, HMENU hmInit, UINT idCmdFirst,
BOOL bContext);
void PASCAL Def_InitEditCommands(ULONG dwAttr, HMENU hmInit, UINT idCmdFirst,
LPDROPTARGET pdtgt, UINT fContext);
void NEAR PASCAL _SHPrettyMenu(HMENU hm);
//===========================================================================
// Default IShellView for IShellFolder
//===========================================================================
WINSHELLAPI HRESULT WINAPI SHCreateShellFolderView(LPSHELLFOLDER pshf, LPCITEMIDLIST pidl, LONG lEvent, LPSHELLVIEW FAR* ppsv);
// Menu ID's
#ifdef BUG_23171_FIXED
#define SFVIDM_FIRST (FCIDM_SHVIEWLAST-0x0fff)
#else
// MENUEX currently cannot handle subtraction in the ID's, so we need
// to subtract for it.
#if (FCIDM_SHVIEWLAST != 0x7fff)
#error FCIDM_SHVIEWLAST has changed, so shellp.h needs to also
#endif
#define SFVIDM_FIRST (0x7000)
#endif
#define SFVIDM_LAST (FCIDM_SHVIEWLAST)
// Popup menu ID's used in merging menus
#define SFVIDM_MENU_ARRANGE (SFVIDM_FIRST + 0x0001)
#define SFVIDM_MENU_VIEW (SFVIDM_FIRST + 0x0002)
#define SFVIDM_MENU_SELECT (SFVIDM_FIRST + 0x0003)
// TBINFO flags
#define TBIF_APPEND 0
#define TBIF_PREPEND 1
#define TBIF_REPLACE 2
typedef struct _TBINFO
{
UINT cbuttons; // out
UINT uFlags; // out (one of TBIF_ flags)
} TBINFO, FAR * LPTBINFO;
typedef struct _COPYHOOKINFO
{
HWND hwnd;
DWORD wFunc;
DWORD wFlags;
LPCSTR pszSrcFile;
DWORD dwSrcAttribs;
LPCSTR pszDestFile;
DWORD dwDestAttribs;
} COPYHOOKINFO, *LPCOPYHOOKINFO;
typedef struct _DETAILSINFO
{
LPCITEMIDLIST pidl; // pidl to get details of
// Note: do not change the order of these fields until IShellDetails
// has gone away!
int fmt; // LVCFMT_* value (header only)
int cxChar; // Number of "average" characters (header only)
STRRET str; // String information
} DETAILSINFO, *PDETAILSINFO;
// uMsg wParam lParam
#define DVM_MERGEMENU 1 // uFlags LPQCMINFO
#define DVM_INVOKECOMMAND 2 // idCmd 0
#define DVM_GETHELPTEXT 3 // idCmd,cchMax pszText
#define DVM_GETTOOLTIPTEXT 4 // idCmd,cchMax pszText
#define DVM_GETBUTTONINFO 5 // 0 LPTBINFO
#define DVM_GETBUTTONS 6 // idCmdFirst,cbtnMax LPTBBUTTON
#define DVM_INITMENUPOPUP 7 // idCmdFirst,nIndex hmenu
#define DVM_SELCHANGE 8 // idCmdFirst,nItem PDVSELCHANGEINFO
#define DVM_DRAWITEM 9 // idCmdFirst pdis
#define DVM_MEASUREITEM 10 // idCmdFirst pmis
#define DVM_EXITMENULOOP 11 // - -
#define DVM_RELEASE 12 // - lSelChangeInfo (ShellFolder private)
#define DVM_GETCCHMAX 13 // pidlItem pcchMax
#define DVM_FSNOTIFY 14 // LPITEMIDLIST* lEvent
#define DVM_WINDOWCREATED 15 // hwnd PDVSELCHANGEINFO
#define DVM_WINDOWDESTROY 16 // hwnd PDVSELCHANGEINFO
#define DVM_REFRESH 17 // - lSelChangeInfo
#define DVM_SETFOCUS 18 // - lSelChangeInfo
#define DVM_KILLFOCUS 19 // - -
#define DVM_QUERYCOPYHOOK 20 // - -
#define DVM_NOTIFYCOPYHOOK 21 // - LPCOPYHOOKINFO
#define DVM_NOTIFY 22 // idFrom LPNOTIFY
#define DVM_GETDETAILSOF 23 // iColumn PDETAILSINFO
#define DVM_COLUMNCLICK 24 // iColumn -
#define DVM_QUERYFSNOTIFY 25 // - FSNotifyEntry *
#define DVM_DEFITEMCOUNT 26 // - PINT
#define DVM_DEFVIEWMODE 27 // - PFOLDERVIEWMODE
#define DVM_UNMERGEMENU 28 // uFlags
#define DVM_INSERTITEM 29 // pidl PDVSELCHANGEINFO
#define DVM_DELETEITEM 30 // pidl PDVSELCHANGEINFO
#define DVM_UPDATESTATUSBAR 31 // - lSelChangeInfo
#define DVM_BACKGROUNDENUM 32
#define DVM_GETWORKINGDIR 33
#define DVM_GETCOLSAVESTREAM 34 // flags IStream **
#define DVM_SELECTALL 35 // lSelChangeInfo
#define DVM_DIDDRAGDROP 36 // dwEffect IDataObject *
typedef struct _DVSELCHANGEINFO {
UINT uOldState;
UINT uNewState;
LPARAM lParamItem;
LPARAM* plParam;
} DVSELCHANGEINFO, *PDVSELCHANGEINFO;
typedef HRESULT (CALLBACK FAR* LPFNVIEWCALLBACK)(LPSHELLVIEW psvOuter,
LPSHELLFOLDER psf,
HWND hwndMain,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
// SHCreateShellFolderViewEx struct
typedef struct _CSFV
{
UINT cbSize;
LPSHELLFOLDER pshf;
LPSHELLVIEW psvOuter;
LPCITEMIDLIST pidl;
LONG lEvents;
LPFNVIEWCALLBACK pfnCallback; // No callback if NULL
FOLDERVIEWMODE fvm;
} CSFV, FAR * LPCSFV;
// Tell the FolderView to rearrange. The lParam will be passed to
// IShellFolder::CompareIDs
#define SFVM_REARRANGE 0x00000001
#define ShellFolderView_ReArrange(_hwnd, _lparam) \
(BOOL)SHShellFolderView_Message(_hwnd, SFVM_REARRANGE, _lparam)
// Get the last sorting parameter given to FolderView
#define SFVM_GETARRANGEPARAM 0x00000002
#define ShellFolderView_GetArrangeParam(_hwnd) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_GETARRANGEPARAM, 0L)
// Add an OBJECT into the view (May need to add insert also)
#define SFVM_ADDOBJECT 0x00000003
#define ShellFolderView_AddObject(_hwnd, _pidl) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_ADDOBJECT, (LPARAM)_pidl)
// Gets the count of objects in the view
#define SFVM_GETOBJECTCOUNT 0x00000004
#define ShellFolderView_GetObjectCount(_hwnd) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_GETOBJECTCOUNT, (LPARAM)0)
// Returns a pointer to the Idlist associated with the specified index
// Returns NULL if at end of list.
#define SFVM_GETOBJECT 0x00000005
#define ShellFolderView_GetObject(_hwnd, _iObject) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_GETOBJECT, _iObject)
// Remove an OBJECT into the view (This works by pidl, may need index also);
#define SFVM_REMOVEOBJECT 0x00000006
#define ShellFolderView_RemoveObject(_hwnd, _pidl) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_REMOVEOBJECT, (LPARAM)_pidl)
// updates an object by passing in pointer to two PIDLS, the first
// is the old pidl, the second one is the one with update information.
#define SFVM_UPDATEOBJECT 0x00000007
#define ShellFolderView_UpdateObject(_hwnd, _ppidl) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_UPDATEOBJECT, (LPARAM)_ppidl)
// Sets the redraw mode for the window that is displaying the information
#define SFVM_SETREDRAW 0x00000008
#define ShellFolderView_SetRedraw(_hwnd, fRedraw) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_SETREDRAW, (LPARAM)fRedraw)
// Returns an array of the selected IDS to the caller.
// lparam is a pointer to receive the idlists into
// return value is the count of items in the array.
#define SFVM_GETSELECTEDOBJECTS 0x00000009
#define ShellFolderView_GetSelectedObjects(_hwnd, ppidl) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_GETSELECTEDOBJECTS, (LPARAM)ppidl)
// Checks if the current drop is on the view window
// lparam is unused
// return value is TRUE if the current drop is upon the background of the
// view window, FALSE otherwise
#define SFVM_ISDROPONSOURCE 0x0000000a
#define ShellFolderView_IsDropOnSource(_hwnd, _pdtgt) \
(BOOL)SHShellFolderView_Message(_hwnd, SFVM_ISDROPONSOURCE, (LPARAM)_pdtgt)
// Moves the selected icons in the listview
// lparam is a pointer to a drop target
// return value is unused
#define SFVM_MOVEICONS 0x0000000b
#define ShellFolderView_MoveIcons(_hwnd, _pdt) \
(void)SHShellFolderView_Message(_hwnd, SFVM_MOVEICONS, (LPARAM)(LPDROPTARGET)_pdt)
// Gets the start point of a drag-drop
// lparam is a pointer to a point
// return value is unused
#define SFVM_GETDRAGPOINT 0x0000000c
#define ShellFolderView_GetDragPoint(_hwnd, _ppt) \
(BOOL)SHShellFolderView_Message(_hwnd, SFVM_GETDRAGPOINT, (LPARAM)(LPPOINT)_ppt)
// Gets the end point of a drag-drop
// lparam is a pointer to a point
// return value is unused
#define SFVM_GETDROPPOINT 0x0000000d
#define ShellFolderView_GetDropPoint(_hwnd, _ppt) \
SHShellFolderView_Message(_hwnd, SFVM_GETDROPPOINT, (LPARAM)(LPPOINT)_ppt)
#define ShellFolderView_GetAnchorPoint(_hwnd, _fStart, _ppt) \
(BOOL)((_fStart) ? ShellFolderView_GetDragPoint(_hwnd, _ppt) : ShellFolderView_GetDropPoint(_hwnd, _ppt))
typedef struct _SFV_SETITEMPOS
{
LPCITEMIDLIST pidl;
POINT pt;
} SFV_SETITEMPOS, FAR *LPSFV_SETITEMPOS;
// Sets the position of an item in the viewer
// lparam is a pointer to a SVF_SETITEMPOS
// return value is unused
#define SFVM_SETITEMPOS 0x0000000e
#define ShellFolderView_SetItemPos(_hwnd, _pidl, _x, _y) \
{ SFV_SETITEMPOS _sip = {_pidl, {_x, _y}}; \
SHShellFolderView_Message(_hwnd, SFVM_SETITEMPOS, (LPARAM)(LPSFV_SETITEMPOS)&_sip);}
// Determines if a given drop target interface is the one being used for
// the background of the ShellFolderView (as opposed to an object in the
// view)
// lparam is a pointer to a drop target interface
// return value is TRUE if it is the background drop target, FALSE otherwise
#define SFVM_ISBKDROPTARGET 0x0000000f
#define ShellFolderView_IsBkDropTarget(_hwnd, _pdptgt) \
(BOOL)SHShellFolderView_Message(_hwnd, SFVM_ISBKDROPTARGET, (LPARAM)(LPDROPTARGET)_pdptgt)
// Notifies a ShellView when one of its objects get put on the clipboard
// as a result of a menu command.
//
// called by defcm.c when it does a copy/cut
//
// lparam is the dwEffect (DROPEFFECT_MOVE, DROPEFFECT_COPY)
// return value is void.
#define SFVM_SETCLIPBOARD 0x00000010
#define ShellFolderView_SetClipboard(_hwnd, _dwEffect) \
(void)SHShellFolderView_Message(_hwnd, SFVM_SETCLIPBOARD, (LPARAM)(DWORD)(_dwEffect))
// sets auto arrange
#define SFVM_AUTOARRANGE 0x00000011
#define ShellFolderView_AutoArrange(_hwnd) \
(void)SHShellFolderView_Message(_hwnd, SFVM_AUTOARRANGE, 0)
// sets snap to grid
#define SFVM_ARRANGEGRID 0x00000012
#define ShellFolderView_ArrangeGrid(_hwnd) \
(void)SHShellFolderView_Message(_hwnd, SFVM_ARRANGEGRID, 0)
#define SFVM_GETAUTOARRANGE 0x00000013
#define ShellFolderView_GetAutoArrange(_hwnd) \
(BOOL)SHShellFolderView_Message(_hwnd, SFVM_GETAUTOARRANGE, 0)
#define SFVM_GETSELECTEDCOUNT 0x00000014
#define ShellFolderView_GetSelectedCount(_hwnd) \
(BOOL)SHShellFolderView_Message(_hwnd, SFVM_GETSELECTEDCOUNT, 0)
typedef struct {
int cxSmall;
int cySmall;
int cxLarge;
int cyLarge;
} ITEMSPACING, *LPITEMSPACING;
#define SFVM_GETITEMSPACING 0x00000015
#define ShellFolderView_GetItemSpacing(_hwnd, lpis) \
(BOOL)SHShellFolderView_Message(_hwnd, SFVM_GETITEMSPACING, (LPARAM)lpis)
// Causes an object to be repainted
#define SFVM_REFRESHOBJECT 0x00000016
#define ShellFolderView_RefreshObject(_hwnd, _ppidl) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_REFRESHOBJECT, (LPARAM)_ppidl)
#define SFVM_SETPOINTS 0x00000017
#define ShellFolderView_SetPoints(_hwnd, _pdtobj) \
(void)SHShellFolderView_Message(_hwnd, SFVM_SETPOINTS, (LPARAM)_pdtobj)
// SVM_SELECTANDPOSITIONITEM lParam
typedef struct
{
LPCITEMIDLIST pidl; // relative pidl to the view
UINT uSelectFlags; // select flags
BOOL fMove; // if true, we should also move it to point pt
POINT pt;
} SFM_SAP;
// shell view messages
#define SVM_SELECTITEM (WM_USER + 1)
#define SVM_MOVESELECTEDITEMS (WM_USER + 2)
#define SVM_GETANCHORPOINT (WM_USER + 3)
#define SVM_GETITEMPOSITION (WM_USER + 4)
#define SVM_SELECTANDPOSITIONITEM (WM_USER + 5)
// Heap tracking stuff.
#ifdef MEMMON
#ifndef INC_MEMMON
#define INC_MEMMON
#define LocalAlloc SHLocalAlloc
#define LocalFree SHLocalFree
#define LocalReAlloc SHLocalReAlloc
WINSHELLAPI HLOCAL WINAPI SHLocalAlloc(UINT uFlags, UINT cb);
WINSHELLAPI HLOCAL WINAPI SHLocalReAlloc(HLOCAL hOld, UINT cbNew, UINT uFlags);
WINSHELLAPI HLOCAL WINAPI SHLocalFree(HLOCAL h);
#endif
#endif
//===========================================================================
// CDefShellFolder members (for easy subclassing)
//===========================================================================
// Single instance members
STDMETHODIMP_(ULONG) CSIShellFolder_AddRef(LPSHELLFOLDER psf) ;
STDMETHODIMP_(ULONG) CSIShellFolder_Release(LPSHELLFOLDER psf);
// Default implementation (no dependencies to the instance data)
STDMETHODIMP CDefShellFolder_QueryInterface(LPSHELLFOLDER psf, REFIID riid, LPVOID FAR* ppvObj);
STDMETHODIMP CDefShellFolder_BindToStorage(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPBC pbc,
REFIID riid, LPVOID FAR* ppvOut);
STDMETHODIMP CDefShellFolder_BindToObject(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, LPVOID FAR* ppvOut);
STDMETHODIMP CDefShellFolder_GetAttributesOf(LPSHELLFOLDER psf, UINT cidl, LPCITEMIDLIST FAR* apidl, ULONG FAR* rgfOut);
STDMETHODIMP CDefShellFolder_SetNameOf(LPSHELLFOLDER psf, HWND hwndOwner,
LPCITEMIDLIST pidl, LPCOLESTR lpszName, DWORD dwReserved, LPITEMIDLIST FAR* ppidlOut);
// File Search APIS
WINSHELLAPI LPCONTEXTMENU WINAPI SHFind_InitMenuPopup(HMENU hmenu, HWND hwndOwner, UINT idCmdFirst, UINT idCmdLast);
WINSHELLAPI void WINAPI Control_RunDLL(HWND hwndStub, HINSTANCE hAppInstance, LPSTR lpszCmdLine, int nCmdShow);
// to add 16 bit pages to 32bit things. hGlobal can be NULL
WINSHELLAPI UINT WINAPI SHAddPages16(HGLOBAL hGlobal, LPCSTR pszDllEntry, LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam);
WINSHELLAPI HRESULT WINAPI SHCreateShellFolderViewEx(LPCSFV pcsfv, LPSHELLVIEW FAR* ppsv);
//===========================================================================
// Defview related API and interface
//
// Notes: At this point, we have no plan to publish this mechanism.
//===========================================================================
typedef struct _SHELLDETAILS
{
int fmt; // LVCFMT_* value (header only)
int cxChar; // Number of "average" characters (header only)
STRRET str; // String information
} SHELLDETAILS, FAR *LPSHELLDETAILS;
#undef INTERFACE
#define INTERFACE IShellDetails
DECLARE_INTERFACE_(IShellDetails, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IShellDetails methods ***
STDMETHOD(GetDetailsOf)(THIS_ LPCITEMIDLIST pidl, UINT iColumn, LPSHELLDETAILS pDetails) PURE;
STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE;
};
//
// Private QueryContextMenuFlag passed from DefView
//
#define CMF_DVFILE 0x00010000 // "File" pulldown
//
// Functions to help the cabinets sync to each other
// uOptions parameter to SHWaitForFileOpen
//
#define WFFO_WAITTIME 10000L
#define WFFO_ADD 0x0001
#define WFFO_REMOVE 0x0002
#define WFFO_WAIT 0x0004
// Common strings
#define STR_DESKTOPCLASS "Progman"
//===========================================================================
// Helper functions for pidl allocation using the task allocator.
//
WINSHELLAPI HRESULT WINAPI SHILClone(LPCITEMIDLIST pidl, LPITEMIDLIST * ppidlOut);
WINSHELLAPI HRESULT WINAPI SHILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2, LPITEMIDLIST * ppidlOut);
#define SHILFree(pidl) SHFree(pidl)
WINSHELLAPI HRESULT WINAPI SHDllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID FAR* ppv);
#include <fsmenu.h>
//===========================================================================
//----------------------------------------------------------------------------
#define IsLFNDriveORD 119
WINSHELLAPI BOOL WINAPI IsLFNDrive(LPCSTR pszPath);
WINSHELLAPI int WINAPI SHOutOfMemoryMessageBox(HWND hwndOwner, LPSTR pszTitle, UINT fuStyle);
WINSHELLAPI BOOL WINAPI SHWinHelp(HWND hwndMain, LPCSTR lpszHelp, UINT usCommand, DWORD ulData);
WINSHELLAPI BOOL WINAPI RLBuildListOfPaths(void);
#define SHValidateUNCORD 173
#define VALIDATEUNC_NOUI 0x0002 // dont bring up stinking UI!
#define VALIDATEUNC_CONNECT 0x0001 // connect a drive letter
#define VALIDATEUNC_PRINT 0x0004 // validate as print share instead of disk share
#define VALIDATEUNC_VALID 0x0007 // valid flags
WINSHELLAPI BOOL WINAPI SHValidateUNC(HWND hwndOwner, LPSTR pszFile, UINT fConnect);
//----------------------------------------------------------------------------
#define OleStrToStrNORD 78
#define SHCloneSpecialIDListORD 89
#define SHDllGetClassObjectORD 128
#define SHLogILFromFSILORD 95
#define SHMapPIDLToSystemImageListIndexORD 77
#define SHShellFolderView_MessageORD 73
#define Shell_GetImageListsORD 71
#define SHGetSpecialFolderPathORD 175
#define StrToOleStrNORD 79
#define ILCloneORD 18
#define ILCloneFirstORD 19
#define ILCombineORD 25
#define ILCreateFromPathORD 157
#define ILFindChildORD 24
#define ILFreeORD 155
#define ILGetNextORD 153
#define ILGetSizeORD 152
#define ILIsEqualORD 21
#define ILRemoveLastIDORD 17
#define PathAddBackslashORD 32
#define PathCombineORD 37
#define PathIsExeORD 43
#define PathMatchSpecORD 46
#define SHGetSetSettingsORD 68
#define SHILCreateFromPathORD 28
#define SHFreeORD 195
#define MemMon_FreeORD 123
//
// Storage name of a scrap/bookmark item
//
#define WSTR_SCRAPITEM L"\003ITEM000"
//
// PifMgr Thunked APIs (in SHELL.DLL)
//
extern int WINAPI PifMgr_OpenProperties(LPCSTR lpszApp, LPCSTR lpszPIF, int hInf, int flOpt);
extern int WINAPI PifMgr_GetProperties(int hProps, LPCSTR lpszGroup, LPVOID lpProps, int cbProps, int flOpt);
extern int WINAPI PifMgr_SetProperties(int hProps, LPCSTR lpszGroup, const VOID FAR *lpProps, int cbProps, int flOpt);
extern int WINAPI PifMgr_CloseProperties(int hProps, int flOpt);
//
// exported from SHSCRAP.DLL
//
#define SCRAP_CREATEFROMDATAOBJECT "Scrap_CreateFromDataObject"
typedef HRESULT (WINAPI FAR * LPFNSCRAPCREATEFROMDATAOBJECT)(LPCSTR pszPath, LPDATAOBJECT pDataObj, BOOL fLink, LPSTR pszNewFile);
extern HRESULT WINAPI Scrap_CreateFromDataObject(LPCSTR pszPath, LPDATAOBJECT pDataObj, BOOL fLink, LPSTR pszNewFile);
WINSHELLAPI void WINAPI SHSetInstanceExplorer(IUnknown *punk);
// Always use TerminateThreadEx.
BOOL APIENTRY TerminateThreadEx(HANDLE hThread, DWORD dwExitCode, BOOL bCleanupFlag);
#define TerminateThread(hThread, dwExitCode) TerminateThreadEx(hThread, dwExitCode, TRUE)
//===========================================================================
#ifdef __cplusplus
}
#endif /* __cplusplus */
#ifndef RC_INVOKED
#pragma pack()
#endif /* !RC_INVOKED */
#endif // _SHELLP_H_