|
|
/*
* intshcut.hpp - Internet Shortcut class implementation description. */
/* Types
********/
// InternetShortcut flags
typedef enum _intshcutflags { INTSHCUT_FL_DIRTY = 0x0001,
ALL_INTSHCUT_FLAGS = INTSHCUT_FL_DIRTY } INTSHCUTFLAGS;
// InternetShortcut Shell extension
class InternetShortcut : public RefCount, public IDataObject, public IExtractIcon, public INewShortcutHook, public IPersistFile, public IPersistStream, public IShellExecuteHook, public IShellExtInit, public IShellLink, public IShellPropSheetExt, public IUniformResourceLocator { private: DWORD m_dwFlags; PSTR m_pszFile; PSTR m_pszURL; PSTR m_pszIconFile; int m_niIcon; PSTR m_pszWorkingDirectory; int m_nShowCmd; PSTR m_pszFolder; WORD m_wHotkey;
// data transfer methods
DWORD STDMETHODCALLTYPE GetFileContentsSize(void); HRESULT STDMETHODCALLTYPE TransferUniformResourceLocator(PFORMATETC pfmtetc, PSTGMEDIUM pstgmed); HRESULT STDMETHODCALLTYPE TransferText(PFORMATETC pfmtetc, PSTGMEDIUM pstgmed); HRESULT STDMETHODCALLTYPE TransferFileGroupDescriptor(PFORMATETC pfmtetc, PSTGMEDIUM pstgmed); HRESULT STDMETHODCALLTYPE TransferFileContents(PFORMATETC pfmtetc, PSTGMEDIUM pstgmed);
// protocol registration methods
HRESULT STDMETHODCALLTYPE RegisterProtocolHandler(HWND hwndParent, PSTR pszAppBuf, UINT ucAppBufLen);
public: InternetShortcut(void); ~InternetShortcut(void);
// IDataObject methods
HRESULT STDMETHODCALLTYPE GetData(PFORMATETC pfmtetcIn, PSTGMEDIUM pstgmed); HRESULT STDMETHODCALLTYPE GetDataHere(PFORMATETC pfmtetc, PSTGMEDIUM pstgpmed); HRESULT STDMETHODCALLTYPE QueryGetData(PFORMATETC pfmtetc); HRESULT STDMETHODCALLTYPE GetCanonicalFormatEtc(PFORMATETC pfmtetcIn, PFORMATETC pfmtetcOut); HRESULT STDMETHODCALLTYPE SetData(PFORMATETC pfmtetc, PSTGMEDIUM pstgmed, BOOL bRelease); HRESULT STDMETHODCALLTYPE EnumFormatEtc(DWORD dwDirection, PIEnumFORMATETC *ppienumFormatEtc); HRESULT STDMETHODCALLTYPE DAdvise(PFORMATETC pfmtetc, DWORD dwAdviseFlags, PIAdviseSink piadvsink, PDWORD pdwConnection); HRESULT STDMETHODCALLTYPE DUnadvise(DWORD dwConnection); HRESULT STDMETHODCALLTYPE EnumDAdvise(PIEnumSTATDATA *ppienumStatData);
// IExtractIcon methods
HRESULT STDMETHODCALLTYPE GetIconLocation(UINT uFlags, PSTR pszIconFile, UINT ucchMax, PINT pniIcon, PUINT puFlags); HRESULT STDMETHODCALLTYPE Extract(PCSTR pcszFile, UINT uIconIndex, PHICON phiconLarge, PHICON phiconSmall, UINT ucIconSize);
// INewShortcutHook methods
HRESULT STDMETHODCALLTYPE SetReferent(PCSTR pcszReferent, HWND hwndParent); HRESULT STDMETHODCALLTYPE GetReferent(PSTR pszReferent, int ncReferentBufLen); HRESULT STDMETHODCALLTYPE SetFolder(PCSTR pcszFolder); HRESULT STDMETHODCALLTYPE GetFolder(PSTR pszFolder, int ncFolderBufLen); HRESULT STDMETHODCALLTYPE GetName(PSTR pszName, int ncNameBufLen); HRESULT STDMETHODCALLTYPE GetExtension(PSTR pszExtension, int ncExtensionBufLen);
// IPersist methods
HRESULT STDMETHODCALLTYPE GetClassID(PCLSID pclsid);
// IPersistFile methods
HRESULT STDMETHODCALLTYPE IsDirty(void); HRESULT STDMETHODCALLTYPE Save(LPCOLESTR pcwszFileName, BOOL bRemember); HRESULT STDMETHODCALLTYPE SaveCompleted(LPCOLESTR pcwszFileName); HRESULT STDMETHODCALLTYPE Load(LPCOLESTR pcwszFileName, DWORD dwMode); HRESULT STDMETHODCALLTYPE GetCurFile(LPOLESTR *ppwszFileName);
// IPersistStream methods
HRESULT STDMETHODCALLTYPE Save(PIStream pistr, BOOL bClearDirty); HRESULT STDMETHODCALLTYPE Load(PIStream pistr); HRESULT STDMETHODCALLTYPE GetSizeMax(PULARGE_INTEGER pcbSize);
// IShellExecuteHook methods
HRESULT STDMETHODCALLTYPE Execute(PSHELLEXECUTEINFO pei);
// IShellExtInit methods
HRESULT STDMETHODCALLTYPE Initialize(PCITEMIDLIST pcidlFolder, PIDataObject pidobj, HKEY hkeyProgID);
// IShellLink methods
HRESULT STDMETHODCALLTYPE SetPath(PCSTR pcszPath); HRESULT STDMETHODCALLTYPE GetPath(PSTR pszFile, int ncFileBufLen, PWIN32_FIND_DATA pwfd, DWORD dwFlags); HRESULT STDMETHODCALLTYPE SetRelativePath(PCSTR pcszRelativePath, DWORD dwReserved); HRESULT STDMETHODCALLTYPE SetIDList(LPCITEMIDLIST pcidl); HRESULT STDMETHODCALLTYPE GetIDList(LPITEMIDLIST *ppidl); HRESULT STDMETHODCALLTYPE SetDescription(PCSTR pcszDescription); HRESULT STDMETHODCALLTYPE GetDescription(PSTR pszDescription, int ncDesciptionBufLen); HRESULT STDMETHODCALLTYPE SetArguments(PCSTR pcszArgs); HRESULT STDMETHODCALLTYPE GetArguments(PSTR pszArgs, int ncArgsBufLen); HRESULT STDMETHODCALLTYPE SetWorkingDirectory(PCSTR pcszWorkingDirectory); HRESULT STDMETHODCALLTYPE GetWorkingDirectory(PSTR pszWorkingDirectory, int ncbLen); HRESULT STDMETHODCALLTYPE SetHotkey(WORD wHotkey); HRESULT STDMETHODCALLTYPE GetHotkey(PWORD pwHotkey); HRESULT STDMETHODCALLTYPE SetShowCmd(int nShowCmd); HRESULT STDMETHODCALLTYPE GetShowCmd(PINT pnShowCmd); HRESULT STDMETHODCALLTYPE SetIconLocation(PCSTR pcszIconFile, int niIcon); HRESULT STDMETHODCALLTYPE GetIconLocation(PSTR pszIconFile, int ncbLen, PINT pniIcon); HRESULT STDMETHODCALLTYPE Resolve(HWND hwnd, DWORD dwFlags);
// IShellPropSheetExt methods
HRESULT STDMETHODCALLTYPE AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam); HRESULT STDMETHODCALLTYPE ReplacePage(UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplaceWith, LPARAM lParam);
// IUniformResourceLocator methods
HRESULT STDMETHODCALLTYPE SetURL(PCSTR pcszURL, DWORD dwFlags); HRESULT STDMETHODCALLTYPE GetURL(PSTR *ppszURL); HRESULT STDMETHODCALLTYPE InvokeCommand(PURLINVOKECOMMANDINFO purlici);
// IUnknown methods
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, PVOID *ppvObj); ULONG STDMETHODCALLTYPE AddRef(void); ULONG STDMETHODCALLTYPE Release(void);
// other methods
HRESULT STDMETHODCALLTYPE SaveToFile(PCSTR pcszFile, BOOL bRemember); HRESULT STDMETHODCALLTYPE LoadFromFile(PCSTR pcszFile, BOOL bRemember); HRESULT STDMETHODCALLTYPE GetCurFile(PSTR pszFile, UINT ucbLen); HRESULT STDMETHODCALLTYPE Dirty(BOOL bDirty);
#ifdef DEBUG
void STDMETHODCALLTYPE Dump(void);
#endif
// friends
#ifdef DEBUG
friend BOOL IsValidPCInternetShortcut(const InternetShortcut *pcintshcut);
#endif
}; DECLARE_STANDARD_TYPES(InternetShortcut);
/* Global Constants
*******************/
// intshcut.cpp
extern const int g_nDefaultShowCmd;
/* Prototypes
*************/
// intshcut.cpp
extern HRESULT IsProtocolRegistered(PCSTR pcszProtocol); extern HRESULT ValidateURL(PCSTR pcszURL); extern HRESULT ValidateWorkingDirectory(PCSTR pcszWorkingDirectory);
|