//--------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation 1991-1994 // // File: shlobj.h // // Definitions of IShellUI interface. Eventually this file should be merged // into COMMUI.H. // // History: // 12-30-92 SatoNa Created. // 01-06-93 SatoNa Added this comment block. // 01-13-93 SatoNa Added DragFilesOver & DropFiles // 01-27-93 SatoNa Created by combining shellui.h and handler.h // 01-28-93 SatoNa OLE 2.0 beta 2 // 03-12-93 SatoNa Removed IFileDropTarget (we use IDropTarget) // //--------------------------------------------------------------------------- #ifndef _SHLOBJ_H_ #define _SHLOBJ_H_ #include #include #include #ifndef INITGUID #include #endif typedef void const FAR* LPCVOID; //---------------------------------------------------------------------------- // // Shell Extension API // //---------------------------------------------------------------------------- // // Task allocator // // All the shell extensions MUST use this allocator when they allocate // or free memory objects that are passed across any shell interface // boundary. // // REVIEW: // It would be really nice if we can guarantee that shell's task // allocator and OLE's task allocator is always the same. it is, // however, not so easy to do, because: // // 1. We don't want to load COMPOBJ unless a shell extension DLL // loads it. We need to be notified when COMPOBJ is loaded. // 2. We need to register our task allocator to the COMPOBJ // if one of shell extension DLLs loads it into the shell // process. // 3. We need to get the task allocator from the COMPOBJ, if // the shell dll is loaded by non-shell process that registers // the task allocator to the COMPOBJ. // LPVOID WINAPI SHAlloc(ULONG cb); LPVOID WINAPI SHRealloc(LPVOID pv, ULONG cbNew); ULONG WINAPI SHGetSize(LPVOID pv); void WINAPI SHFree(LPVOID pv); // // Helper macro definitions // #define S_BOOL(f) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_NULL, f) //---------------------------------------------------------------------------- // // Interface: IContextMenu // // History: // 02-24-93 SatoNa Created. // //---------------------------------------------------------------------------- #undef INTERFACE #define INTERFACE IContextMenu #define CMF_DEFAULTONLY 0x00000001 DECLARE_INTERFACE_(IContextMenu, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD(QueryContextMenu)(THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) PURE; STDMETHOD(InvokeCommand)(THIS_ HWND hwndParent, LPCSTR pszWorkingDir, LPCSTR pszCmd, LPCSTR pszParam, int iShowCmd) PURE; STDMETHOD(GetCommandString)(THIS_ UINT idCmd, UINT wReserved, UINT FAR * pwReserved, LPSTR pszName, UINT cchMax) PURE; }; typedef IContextMenu FAR* LPCONTEXTMENU; // GetIconLocation() input flags #define GIL_OPENICON 0x0001 // allows containers to specify an "open" look // return FALSE to get the standard look // GetIconLocation() return flags #define GIL_SIMULATEDOC 0x0001 // simulate this document icon for this #define GIL_PERINSTANCE 0x0002 // icons from this class are per instance (each file has its own) #define GIL_PERCLASS 0x0004 // icons from this class per class (shared for all files of this type) #include // Browser extension interfaces are defined in FCEXT.H //========================================================================== // Helper macro for C programmers //#ifdef WIN32 #define LPTONP(p) (p) //#else //#define LPTONP(p) OFFSETOF(p) //#endif // WIN32 #define _IOffset(class, itf) ((UINT)&(((class *)0)->itf)) #define IToClass(class, itf, pitf) ((class FAR *)(((LPSTR)pitf)-_IOffset(class, itf))) #define IToClassN(class, itf, pitf) ((class *)LPTONP(((LPSTR)pitf)-_IOffset(class, itf))) //=========================================================================== HRESULT STDAPICALLTYPE Link_CreateInstance(LPUNKNOWN punkOuter, REFIID riid, LPVOID FAR* ppvOut); // // Helper functions for component object DLLs // //=========================================================================== typedef HRESULT (CALLBACK FAR * LPFNCREATEINSTANCE)( LPUNKNOWN pUnkOuter, REFIID riid, LPVOID FAR* ppvObject); STDAPI Shell_CreateDefClassObject(REFIID riid, LPVOID FAR* ppv, LPFNCREATEINSTANCE lpfn, UINT FAR * pcRefDll, REFIID riidInstance); //=========================================================================== // // Interface: IShellExtInit // // This interface is used to initialize shell extension objects. // //=========================================================================== #undef INTERFACE #define INTERFACE IShellExtInit DECLARE_INTERFACE_(IShellExtInit, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellExtInit methods *** STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST pidlFolder, LPDATAOBJECT lpdobj, HKEY hkeyProgID) PURE; }; typedef IShellExtInit FAR* LPSHELLEXTINIT; #undef INTERFACE #define INTERFACE IShellPropSheetExt DECLARE_INTERFACE_(IShellPropSheetExt, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellPropSheetExt methods *** STDMETHOD(AddPages)(THIS_ LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam) PURE; }; typedef IShellPropSheetExt FAR* LPSHELLPROPSHEETEXT; //=========================================================================== // // IPersistFolder Interface // // This interface is used by the Folder implementation of // IMoniker::BindToObject when it is initializing a folder object. // //=========================================================================== #undef INTERFACE #define INTERFACE IPersistFolder DECLARE_INTERFACE_(IPersistFolder, IPersist) // fld { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IPersist methods *** STDMETHOD(GetClassID) (THIS_ LPCLSID lpClassID) PURE; // *** IPersistFolder methods *** STDMETHOD(Initialize) (THIS_ LPCITEMIDLIST pidl) PURE; }; typedef IPersistFolder FAR* LPPERSISTFOLDER; // // IExtractIcon interface // #undef INTERFACE #define INTERFACE IExtractIcon DECLARE_INTERFACE_(IExtractIcon, IUnknown) // exic { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IExtractIcon methods *** STDMETHOD(GetIconLocation)(THIS_ UINT uFlags, LPSTR szIconFile, UINT cchMax, int FAR * piIndex, UINT FAR * pwFlags) PURE; STDMETHOD(ExtractIcon)(THIS_ LPCSTR pszFile, UINT nIconIndex, HICON FAR *phiconLarge, HICON FAR *phiconSmall, UINT nIcons) PURE; }; typedef IExtractIcon FAR* LPEXTRACTICON; //=========================================================================== // Network resource array handle //=========================================================================== typedef HANDLE HNRES; typedef struct _NETRESOURCE FAR *LPNETRESOURCE; UINT WINAPI SHGetNetResource(HNRES hnres, UINT iItem, LPNETRESOURCE pnres, UINT cbMax); // // IShellLink Interface // #undef INTERFACE #define INTERFACE IShellLink DECLARE_INTERFACE_(IShellLink, IUnknown) // sl { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD(IsLinkToFile)(THIS) PURE; STDMETHOD(GetSubject)(THIS_ LPSTR pszFile, int cchMaxPath, WIN32_FIND_DATA *pfd, UINT fFlags) PURE; STDMETHOD(SetSubject)(THIS_ LPCSTR pszFile, const WIN32_FIND_DATA *pfd) 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_ int *piShowCmd) PURE; STDMETHOD(SetShowCmd)(THIS_ int iShowCmd) PURE; STDMETHOD(GetIconLocation)(THIS_ LPSTR pszIconPath, int cchIconPath, int *piIcon) PURE; STDMETHOD(SetIconLocation)(THIS_ LPCSTR pszIconPath, int iIcon) PURE; STDMETHOD(Resolve)(THIS_ HWND hwnd, UINT fFlags) PURE; STDMETHOD(Update)(THIS_ UINT fFlags) PURE; }; #endif // _SHELLUI_H_