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
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
|