#ifndef _WINE_SHLOBJ_H #define _WINE_SHLOBJ_H #include "shell.h" #include "ole.h" #include "ole2.h" #include "compobj.h" #define STDMETHOD(xfn) HRESULT (CALLBACK *fn##xfn) #define STDMETHOD_(type,xfn) type (CALLBACK *fn##xfn) #define PURE #define FAR #define THIS_ THIS, typedef LPVOID LPBC; /* *IBindCtx really */ /* * shell32 classids */ DEFINE_SHLGUID(CLSID_ShellDesktop, 0x00021400L, 0, 0); DEFINE_SHLGUID(CLSID_ShellLink, 0x00021401L, 0, 0); /* * shell32 Interface ids */ DEFINE_SHLGUID(IID_IContextMenu, 0x000214E4L, 0, 0); DEFINE_SHLGUID(IID_IShellFolder, 0x000214E6L, 0, 0); DEFINE_SHLGUID(IID_IShellExtInit, 0x000214E8L, 0, 0); DEFINE_SHLGUID(IID_IShellPropSheetExt, 0x000214E9L, 0, 0); DEFINE_SHLGUID(IID_IExtractIcon, 0x000214EBL, 0, 0); DEFINE_SHLGUID(IID_IShellLink, 0x000214EEL, 0, 0); DEFINE_SHLGUID(IID_IShellCopyHook, 0x000214EFL, 0, 0); DEFINE_SHLGUID(IID_IFileViewer, 0x000214F0L, 0, 0); DEFINE_SHLGUID(IID_IEnumIDList, 0x000214F2L, 0, 0); DEFINE_SHLGUID(IID_IFileViewerSite, 0x000214F3L, 0, 0); #define STRRET_WSTR 0x0000 #define STRRET_OFFSET 0x0001 #define STRRET_CSTR 0x0002 typedef struct _STRRET { UINT32 uType; /* STRRET_xxx */ union { LPWSTR pOleStr; /* OLESTR that will be freed */ UINT32 uOffset; /* Offset into SHITEMID (ANSI) */ char cStr[MAX_PATH]; /* Buffer to fill in */ } DUMMYUNIONNAME; } STRRET,*LPSTRRET; typedef struct { WORD cb; /* nr of bytes in this item */ BYTE abID[1];/* first byte in this item */ } SHITEMID,*LPSHITEMID; typedef struct { SHITEMID mkid; /* first itemid in list */ } ITEMIDLIST,*LPITEMIDLIST,*LPCITEMIDLIST; /***************************************************************************** * IEnumIDList interface */ #define THIS LPENUMIDLIST this typedef struct IEnumIDList IEnumIDList,*LPENUMIDLIST; typedef struct IEnumIDList_VTable { /* *** IUnknown methods *** */ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /* *** IEnumIDList methods *** */ STDMETHOD(Next) (THIS_ ULONG celt, LPITEMIDLIST *rgelt, ULONG *pceltFetched) PURE; STDMETHOD(Skip) (THIS_ ULONG celt) PURE; STDMETHOD(Reset) (THIS) PURE; STDMETHOD(Clone) (THIS_ IEnumIDList **ppenum) PURE; } IEnumIDList_VTable,*LPENUMIDLIST_VTABLE; struct IEnumIDList { LPENUMIDLIST_VTABLE lpvtbl; DWORD ref; }; #undef THIS /************************************************************************ * The IShellFolder interface ... the basic interface for a lot of stuff */ #define THIS LPSHELLFOLDER this /* IShellFolder::GetDisplayNameOf/SetNameOf uFlags */ typedef enum { SHGDN_NORMAL = 0, /* default (display purpose) */ SHGDN_INFOLDER = 1, /* displayed under a folder (relative)*/ SHGDN_FORPARSING = 0x8000 /* for ParseDisplayName or path */ } SHGNO; /* IShellFolder::EnumObjects */ typedef enum tagSHCONTF { SHCONTF_FOLDERS = 32, /* for shell browser */ SHCONTF_NONFOLDERS = 64, /* for default view */ SHCONTF_INCLUDEHIDDEN = 128 /* for hidden/system objects */ } SHCONTF; /* from oleidl.h */ #define DROPEFFECT_NONE 0 #define DROPEFFECT_COPY 1 #define DROPEFFECT_MOVE 2 #define DROPEFFECT_LINK 4 #define DROPEFFECT_SCROLL 0x80000000 /* IShellFolder::GetAttributesOf flags */ #define SFGAO_CANCOPY DROPEFFECT_COPY /* Objects can be copied */ #define SFGAO_CANMOVE DROPEFFECT_MOVE /* Objects can be moved */ #define SFGAO_CANLINK DROPEFFECT_LINK /* Objects can be linked */ #define SFGAO_CANRENAME 0x00000010L /* Objects can be renamed */ #define SFGAO_CANDELETE 0x00000020L /* Objects can be deleted */ #define SFGAO_HASPROPSHEET 0x00000040L /* Objects have property sheets */ #define SFGAO_DROPTARGET 0x00000100L /* Objects are drop target */ #define SFGAO_CAPABILITYMASK 0x00000177L #define SFGAO_LINK 0x00010000L /* Shortcut (link) */ #define SFGAO_SHARE 0x00020000L /* shared */ #define SFGAO_READONLY 0x00040000L /* read-only */ #define SFGAO_GHOSTED 0x00080000L /* ghosted icon */ #define SFGAO_DISPLAYATTRMASK 0x000F0000L #define SFGAO_FILESYSANCESTOR 0x10000000L /* It contains file system folder */ #define SFGAO_FOLDER 0x20000000L /* It's a folder. */ #define SFGAO_FILESYSTEM 0x40000000L /* is a file system thing (file/folder/root) */ #define SFGAO_HASSUBFOLDER 0x80000000L /* Expandable in the map pane */ #define SFGAO_CONTENTSMASK 0x80000000L #define SFGAO_VALIDATE 0x01000000L /* invalidate cached information */ #define SFGAO_REMOVABLE 0x02000000L /* is this removeable media? */ typedef struct tagSHELLFOLDER *LPSHELLFOLDER,IShellFolder; typedef struct IShellFolder_VTable { /* *** IUnknown methods *** */ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /* *** IShellFolder methods *** */ STDMETHOD(ParseDisplayName) (THIS_ HWND32 hwndOwner, LPBC pbcReserved, LPOLESTR32 lpszDisplayName, ULONG * pchEaten, LPITEMIDLIST * ppidl, ULONG *pdwAttributes) PURE; STDMETHOD(EnumObjects) ( THIS_ HWND32 hwndOwner, DWORD grfFlags, LPENUMIDLIST * ppenumIDList) PURE; STDMETHOD(BindToObject) (THIS_ LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) PURE; STDMETHOD(BindToStorage) (THIS_ LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD(CompareIDs) (THIS_ LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE; STDMETHOD(CreateViewObject) (THIS_ HWND32 hwndOwner, REFIID riid, LPVOID * ppvOut) PURE; STDMETHOD(GetAttributesOf) (THIS_ UINT32 cidl, LPCITEMIDLIST * apidl, ULONG * rgfInOut) PURE; STDMETHOD(GetUIObjectOf) (THIS_ HWND32 hwndOwner, UINT32 cidl, LPCITEMIDLIST * apidl, REFIID riid, UINT32 * prgfInOut, LPVOID * ppvOut) PURE; STDMETHOD(GetDisplayNameOf) (THIS_ LPCITEMIDLIST pidl, DWORD uFlags, LPSTRRET lpName) PURE; STDMETHOD(SetNameOf) (THIS_ HWND32 hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR32 lpszName, DWORD uFlags, LPITEMIDLIST * ppidlOut) PURE; } *LPSHELLFOLDER_VTABLE,IShellFolder_VTable; struct tagSHELLFOLDER { LPSHELLFOLDER_VTABLE lpvtbl; DWORD ref; }; #undef THIS /**************************************************************************** * IShellLink interface */ #define THIS LPSHELLLINK this /* IShellLink::Resolve fFlags */ typedef enum { SLR_NO_UI = 0x0001, SLR_ANY_MATCH = 0x0002, SLR_UPDATE = 0x0004 } SLR_FLAGS; /* IShellLink::GetPath fFlags */ typedef enum { SLGP_SHORTPATH = 0x0001, SLGP_UNCPRIORITY = 0x0002 } SLGP_FLAGS; typedef struct IShellLink IShellLink,*LPSHELLLINK; typedef struct IShellLink_VTable { /* *** IUnknown methods *** */ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD(GetPath)(THIS_ LPSTR pszFile, INT32 cchMaxPath, WIN32_FIND_DATA32A *pfd, DWORD fFlags) PURE; STDMETHOD(GetIDList)(THIS_ LPITEMIDLIST * ppidl) PURE; STDMETHOD(SetIDList)(THIS_ LPCITEMIDLIST pidl) PURE; STDMETHOD(GetDescription)(THIS_ LPSTR pszName, int cchMaxName) PURE; STDMETHOD(SetDescription)(THIS_ LPCSTR pszName) PURE; STDMETHOD(GetWorkingDirectory)(THIS_ LPSTR pszDir, int cchMaxPath) PURE; STDMETHOD(SetWorkingDirectory)(THIS_ LPCSTR pszDir) PURE; STDMETHOD(GetArguments)(THIS_ LPSTR pszArgs, int cchMaxPath) PURE; STDMETHOD(SetArguments)(THIS_ LPCSTR pszArgs) PURE; STDMETHOD(GetHotkey)(THIS_ WORD *pwHotkey) PURE; STDMETHOD(SetHotkey)(THIS_ WORD wHotkey) PURE; STDMETHOD(GetShowCmd)(THIS_ INT32 *piShowCmd) PURE; STDMETHOD(SetShowCmd)(THIS_ INT32 iShowCmd) PURE; STDMETHOD(GetIconLocation)(THIS_ LPSTR pszIconPath, INT32 cchIconPath, INT32 *piIcon) PURE; STDMETHOD(SetIconLocation)(THIS_ LPCSTR pszIconPath, INT32 iIcon) PURE; STDMETHOD(SetRelativePath)(THIS_ LPCSTR pszPathRel, DWORD dwReserved) PURE; STDMETHOD(Resolve)(THIS_ HWND32 hwnd, DWORD fFlags) PURE; STDMETHOD(SetPath)(THIS_ LPCSTR pszFile) PURE; } IShellLink_VTable,*LPSHELLLINK_VTABLE; struct IShellLink { LPSHELLLINK_VTABLE lpvtbl; DWORD ref; }; #undef THIS #ifdef __WINE__ extern LPSHELLFOLDER IShellFolder_Constructor(); extern LPSHELLLINK IShellLink_Constructor(); extern LPENUMIDLIST IEnumIDList_Constructor(); #endif DWORD WINAPI SHELL32_DllGetClassObject(LPCLSID,REFIID,LPVOID*); #undef PURE #undef FAR #undef THIS #undef THIS_ #undef STDMETHOD #undef STDMETHOD_ #endif /*_WINE_SHLOBJ_H*/