⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shellext.h

📁 FastCopy 利用缓冲技术加快文件拷贝
💻 H
字号:
/* static char *shellext_id = 
	"@(#)Copyright (C) H.Shirouzu 2005   shellext.h	Ver1.12"; */
/* ========================================================================
	Project  Name			: Fast/Force copy file and directory
	Create					: 2005-01-23(Sun)
	Update					: 2005-05-10(Tue)
	Copyright				: H.Shirouzu
	Reference				: 
	======================================================================== */

#ifndef SHELLEXT_H
#define SHELLEXT_H

// Current CLSID for all file	// {72FF462B-AB7D-427a-A268-E22E414933D7}
DEFINE_GUID(CLSID_FcShellExtID1, 0x72ff462b, 0xab7d, 0x427a, 0xa2, 0x68, 0xe2, 0x2e, 0x41, 0x49, 0x33, 0xd7);
// Current CLSID for .lnk file	{19FD02CE-C890-4c90-A591-CEF8BE893DFC}
DEFINE_GUID(CLSID_FcShellExtLinkID1, 0x19fd02ce, 0xc890, 0x4c90, 0xa5, 0x91, 0xce, 0xf8, 0xbe, 0x89, 0x3d, 0xfc);

#define CURRENT_SHEXT_CLSID		CLSID_FcShellExtID1
#define CURRENT_SHEXTLNK_CLSID	CLSID_FcShellExtLinkID1

int AddDllRef(int incr);
int GetDllRef(void);

#define FASTCOPY		"FastCopy"
#define SHELLEXT1_DLL	"FastCopy_shext.dll"
#define SHELLEXT2_DLL	"FastCopy_shext2.dll"
#define SHELLEXT3_DLL	"FastCopy_shext3.dll"
#define SHELLEXT4_DLL	"FastCopy_shext4.dll"
#define FCSHELLEXT1_DLL	"FastExt1.dll"
#define FASTCOPY_EXE	"FastCopy.exe"
#define SHELLEXT_OPT	"/fc_shell_ext1"

#define MENU_FLAGS			"FastCopyMenuFlags"
#define OLDMENU_FLAGS		"MenuFlags"
#define SHEXT_RIGHT_COPY	0x00000001
#define SHEXT_RIGHT_DELETE	0x00000002
#define SHEXT_DD_COPY		0x00000010
#define SHEXT_DD_MOVE		0x00000020
#define SHEXT_SUBMENU_RIGHT	0x00001000
#define SHEXT_SUBMENU_DD	0x00002000
#define SHEXT_SUBMENU_NOSEP	0x00004000

#define SHEXT_RIGHT_MENUS	(SHEXT_RIGHT_COPY|SHEXT_RIGHT_DELETE)
#define SHEXT_DD_MENUS		(SHEXT_DD_COPY|SHEXT_DD_MOVE)

int MakePath(char *dest, const char *dir, const char *file);
int MakePathW(WCHAR *dest, const WCHAR *dir, const WCHAR *file);
BOOL GetClsId(REFIID cls_name, char *cls_id, int size);
BOOL WINAPI SetMenuFlags(int flags);
int WINAPI GetMenuFlags(void);
BOOL WINAPI IsRegistServer(void);

class PathArray {
protected:
	int		num;
	int		totalLen;
	void	**pathArray;

public:
	PathArray(void);
	~PathArray();
	void	Init(void);
	void	*Path(int idx) { return idx < num ? pathArray[idx] : NULL; }
	int		GetMultiPath(void *multi_path, int max_len);
	int		GetMultiPathLen();
	int		Num(void) { return	num; }
	BOOL	RegisterPath(const void *path);
};

class ShellExt : public IContextMenu, IShellExtInit
{
protected:
	ULONG		refCnt;
	IDataObject	*dataObj;
	PathArray	srcArray;
	PathArray	dstArray;
	UINT		cmdFirst;
	UINT		cmdLast;

public:
	ShellExt(void);
	~ShellExt();

	BOOL	DeleteMenu(UINT *del_idx);

	STDMETHODIMP Initialize(const ITEMIDLIST *pIDFolder, IDataObject *pDataObj, HKEY hRegKey);
	STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
	STDMETHODIMP QueryContextMenu(HMENU hMenu, UINT iMenu, UINT cmdFirst, UINT cmdLast, UINT flg);
	STDMETHODIMP InvokeCommand(CMINVOKECOMMANDINFO *info);
	STDMETHODIMP GetCommandString(UINT cmd, UINT flg, UINT *, char *name, UINT cchMax);
	STDMETHODIMP_(ULONG) AddRef();
	STDMETHODIMP_(ULONG) Release();
};

class ShellExtClassFactory : public IClassFactory
{
protected:
	ULONG	refCnt;

public:
	ShellExtClassFactory(void);
	~ShellExtClassFactory();

	STDMETHODIMP CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObj);
	STDMETHODIMP LockServer(BOOL fLock);
	STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
	STDMETHODIMP_(ULONG) AddRef();
	STDMETHODIMP_(ULONG) Release();
};

class TShellExtRegistry : public TRegistry {
public:
	char	clsId[MAX_PATH];

	TShellExtRegistry(REFIID cls_name=CURRENT_SHEXT_CLSID);
	BOOL CreateClsKey() { return CreateKey(clsId); }
	BOOL OpenClsKey() { return OpenKey(clsId); }
};

class ShellExtSystem {
public:
	HINSTANCE	HInstance;
	int			DllRefCnt;
	char		*DllName;
	char		*ExeName;
	char		*MenuFlgRegKey;
	ShellExtSystem(HINSTANCE hI);
};

// for VC4
#ifndef CMF_NOVERBS
#define CMF_NOVERBS             0x00000008
#define CMF_CANRENAME           0x00000010
#define CMF_NODEFAULT           0x00000020
#define CMF_INCLUDESTATIC       0x00000040
#endif

DEFINE_GUID(CLSID_ShellExtID1, 0x9bc20d5, 0x3ebc, 0x4f43, 0x89, 0x6b, 0xa1, 0x76, 0xba, 0x63, 0x64, 0x6f);	// OLD1 CLSID	{09BC20D5-3EBC-4f43-896B-A176BA63646F}
DEFINE_GUID(CLSID_ShellExtID2, 0x644aad22, 0x704b, 0x4b2d, 0x93, 0x50, 0xfe, 0x94, 0xfe, 0x66, 0xae, 0x54);	// OLD2 CLSID for all file	{644AAD22-704B-4b2d-9350-FE94FE66AE54}
DEFINE_GUID(CLSID_ShellExtLinkID2, 0xd52ba7ce, 0xe594, 0x4542, 0xb0, 0x42, 0xb1, 0xed, 0x70, 0x8f, 0xe6, 0x4);	// OLD2 CLSID for .lnk file	{D52BA7CE-E594-4542-B042-B1ED708FE604}

DEFINE_GUID(CLSID_ShellExtID3, 0x18edb5af, 0xa764, 0x4079, 0xa2, 0xd7, 0x8c, 0x30, 0x89, 0xd4, 0x38, 0x46);	// OLD3 CLSID for all file	{18EDB5AF-A764-4079-A2D7-8C3089D43846}
DEFINE_GUID(CLSID_ShellExtLinkID3, 0x95f3be2f, 0xdd53, 0x4bb3, 0xb1, 0xd1, 0x83, 0xc1, 0xc8, 0x40, 0x40, 0x97);	// OLD3 CLSID for .lnk file	{95F3BE2F-DD53-4bb3-B1D1-83C1C8404097}

DEFINE_GUID(CLSID_ShellExtID4, 0xa17026e8, 0x7c80, 0x48a5, 0xb6, 0x44, 0xbd, 0xb7, 0xf, 0x92, 0xd1, 0x24);	// OLD4 CLSID for all file	{A17026E8-7C80-48a5-B644-BDB70F92D124}
DEFINE_GUID(CLSID_ShellExtLinkID4, 0x915def58, 0x5635, 0x4cff, 0x86, 0xf9, 0x83, 0x11, 0x4f, 0xdc, 0x66, 0xc8);	// OLD4 CLSID for .lnk file	{A17026E8-7C80-48a5-B644-BDB70F92D124}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -