315 lines
9.8 KiB
C
315 lines
9.8 KiB
C
//---------------------------------------------------------------------------
|
|
//
|
|
// 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 <ole2.h>
|
|
#include <prsht.h>
|
|
#include <shell2.h>
|
|
|
|
#ifndef INITGUID
|
|
#include <shlguid.h>
|
|
#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 <fcext.h> // 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_
|