Leaked source code of windows server 2003
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.
 
 
 
 
 
 

157 lines
4.7 KiB

#pragma once
#ifndef _SHCUT_DLL_H
#define _SHCUT_DLL_H
#include <objbase.h>
#include <windows.h>
#include <shlobj.h>
#include "refcount.hpp"
#include "fusenet.h"
// Shortcut flags
typedef enum _fusshcutflags
{
FUSSHCUT_FL_NOTDIRTY = 0x0000,
FUSSHCUT_FL_DIRTY = 0x0001,
ALL_FUSSHCUT_FLAGS //= FUSSHCUT_FL_DIRTY
}
FUSSHCUTFLAGS;
#define DEFAULTSHOWCMD SW_NORMAL
// BUGBUG?: revise length restrictions
#define DISPLAYNAMESTRINGLENGTH 26
#define TYPESTRINGLENGTH 20
#define MAX_URL_LENGTH 2084 // same as INTERNET_MAX_URL_LENGTH+1 from wininet.h
// Clases and interfaces
class CFusionShortcutClassFactory : public IClassFactory
{
public:
CFusionShortcutClassFactory ();
// IUnknown Methods
STDMETHOD_ (ULONG, AddRef) ();
STDMETHOD_ (ULONG, Release) ();
STDMETHOD (QueryInterface) (REFIID, void **);
// IClassFactory Moethods
STDMETHOD (LockServer) (BOOL);
STDMETHOD (CreateInstance) (IUnknown*,REFIID,void**);
protected:
long _cRef;
};
// Shortcut Shell extension
class CFusionShortcut : public RefCount,
public IExtractIcon,
public IPersistFile,
public IShellExtInit,
public IShellLink,
public IShellPropSheetExt,
public IQueryInfo
{
public:
CFusionShortcut(void);
~CFusionShortcut(void);
// IUnknown methods
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, PVOID *ppvObj);
ULONG STDMETHODCALLTYPE AddRef(void);
ULONG STDMETHODCALLTYPE Release(void);
// IExtractIcon methods
HRESULT STDMETHODCALLTYPE GetIconLocation(UINT uFlags, LPWSTR pwzIconFile, UINT ucchMax, PINT pniIcon, PUINT puFlags);
HRESULT STDMETHODCALLTYPE Extract(LPCWSTR pcwzFile, UINT uIconIndex, HICON* phiconLarge, HICON* phiconSmall, UINT ucIconSize);
// IPersist method
HRESULT STDMETHODCALLTYPE GetClassID(CLSID* 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);
// IShellExtInit method
HRESULT STDMETHODCALLTYPE Initialize(LPCITEMIDLIST pcidlFolder, IDataObject* pidobj, HKEY hkeyProgID);
// IShellLink methods
HRESULT STDMETHODCALLTYPE SetPath(LPCWSTR pcwzPath);
HRESULT STDMETHODCALLTYPE GetPath(LPWSTR pwzFile, int ncFileBufLen, PWIN32_FIND_DATA pwfd, DWORD dwFlags);
HRESULT STDMETHODCALLTYPE SetRelativePath(LPCWSTR pcwzRelativePath, DWORD dwReserved);
HRESULT STDMETHODCALLTYPE SetIDList(LPCITEMIDLIST pcidl);
HRESULT STDMETHODCALLTYPE GetIDList(LPITEMIDLIST *ppidl);
HRESULT STDMETHODCALLTYPE SetDescription(LPCWSTR pcwzDescription);
HRESULT STDMETHODCALLTYPE GetDescription(LPWSTR pwzDescription, int ncDesciptionBufLen);
HRESULT STDMETHODCALLTYPE SetArguments(LPCWSTR pcwzArgs);
HRESULT STDMETHODCALLTYPE GetArguments(LPWSTR pwzArgs, int ncArgsBufLen);
HRESULT STDMETHODCALLTYPE SetWorkingDirectory(LPCWSTR pcwzWorkingDirectory);
HRESULT STDMETHODCALLTYPE GetWorkingDirectory(LPWSTR pwzWorkingDirectory, 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(LPCWSTR pcwzIconFile, int niIcon);
HRESULT STDMETHODCALLTYPE GetIconLocation(LPWSTR pwzIconFile, 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);
// IQueryInfo methods
HRESULT STDMETHODCALLTYPE GetInfoFlags(DWORD *pdwFlags);
HRESULT STDMETHODCALLTYPE GetInfoTip(DWORD dwFlags, LPWSTR *ppwszTip);
// other get/set methods (used by prop sheet)
HRESULT STDMETHODCALLTYPE SetCodebase(LPCWSTR pcwzCodebase);
HRESULT STDMETHODCALLTYPE GetCodebase(LPWSTR pwzCodebase, int ncbLen);
// other methods
HRESULT STDMETHODCALLTYPE GetAssemblyIdentity(LPASSEMBLY_IDENTITY* ppAsmId);
HRESULT STDMETHODCALLTYPE GetCurFile(LPWSTR pwzFile, UINT ucbLen);
HRESULT STDMETHODCALLTYPE Dirty(BOOL bDirty);
private:
DWORD m_dwFlags;
LPWSTR m_pwzShortcutFile;
LPWSTR m_pwzPath;
LPWSTR m_pwzDesc;
LPWSTR m_pwzIconFile;
int m_niIcon;
LPWSTR m_pwzWorkingDirectory;
int m_nShowCmd;
WORD m_wHotkey;
LPWSTR m_pwzCodebase;
LPASSEMBLY_IDENTITY m_pIdentity;
};
extern const GUID CLSID_FusionShortcut;
#endif // _SHCUT_DLL_H