亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? shellext.cpp

?? FastCopy 利用緩沖技術(shù)加快文件拷貝
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
static char *shellext_id = 
	"@(#)Copyright (C) H.Shirouzu 2005   shellext.cpp	Ver1.21";
/* ========================================================================
	Project  Name			: Shell Extension for Fast Copy
	Create					: 2005-01-23(Sun)
	Update					: 2005-07-06(Wed)
	Copyright				: H.Shirouzu
	Reference				: 
	======================================================================== */

#include "..\tlib.h"
#include <olectl.h>
#include "resource.h"

#pragma data_seg(".text")
#define INITGUID
#include <initguid.h>
#include <shlguid.h>
#include "shellext.h"
#pragma data_seg()

ShellExtSystem	*SysObj = NULL;

// 儗僕僗僩儕搊榐僉乕乮Ref: tortoise subversion乯
char	*DllRegKeys[] = {
	"*\\shellex\\ContextMenuHandlers",
	"*\\shellex\\DragDropHandlers",
	"Folder\\shellex\\ContextMenuHandlers",
	"Folder\\shellex\\DragDropHandlers",
	"Directory\\shellex\\ContextMenuHandlers",
	"Directory\\Background\\shellex\\ContextMenuHandlers",
	"Directory\\shellex\\DragDropHandlers",
	"Drive\\shellex\\ContextMenuHandlers",
	"Drive\\shellex\\DragDropHandlers",
	"InternetShortcut\\shellex\\ContextMenuHandlers",
	"lnkfile\\shellex\\ContextMenuHandlers",
	NULL
};

UINT (WINAPI *DragQueryFileV)(HDROP, UINT, void *, UINT);
BOOL (WINAPI *SHGetPathFromIDListV)(LPCITEMIDLIST, void *);
int (*strlenV)(const void *);
int (WINAPI *wsprintfV)(void *, const void *,...);
int (*MakePathV)(void *, const void *, const void *);
int		CHAR_LEN_V;
BOOL	IS_WINNT_V;
void	*EMPTY_STR_V;
void	*FMT_TOSTR_V;

/*=========================================================================
  僋儔僗 丗 ShellExt
  奣  梫 丗 僔僃儖奼挘僋儔僗
  愢  柧 丗 
  拲  堄 丗 
=========================================================================*/
ShellExt::ShellExt(void)
{
	cmdFirst = cmdLast = 0;
	refCnt = 0;
	dataObj = NULL;
	if (SysObj)
		SysObj->DllRefCnt++;
}

ShellExt::~ShellExt()
{
	if (dataObj)
		dataObj->Release();
	if (SysObj)
		SysObj->DllRefCnt--;
}

STDMETHODIMP ShellExt::Initialize(const ITEMIDLIST *pIDFolder, IDataObject *pDataObj, HKEY hRegKey)
{
	srcArray.Init();
	dstArray.Init();

	if (dataObj)
		dataObj->Release();

	if (!pDataObj)
		return E_FAIL;

	dataObj = pDataObj;
	pDataObj->AddRef();

	STGMEDIUM	medium;
	FORMATETC	fe = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };

	if (pDataObj->GetData(&fe, &medium) < 0)
		return E_INVALIDARG;

	WCHAR	path[MAX_PATH_EX];

	HDROP	hDrop = (HDROP)::GlobalLock(medium.hGlobal);
	int max = DragQueryFileV(hDrop, 0xffffffff, NULL, 0);

	for (int i=0; i < max; i++) {
		DragQueryFileV(hDrop, i, path, sizeof(path) / CHAR_LEN_V);
		srcArray.RegisterPath(path);
	}
	::GlobalUnlock(medium.hGlobal);
	::ReleaseStgMedium(&medium);

	if (pIDFolder && SHGetPathFromIDListV(pIDFolder, path)) {
		dstArray.RegisterPath(path);
	}

	return	NOERROR;
}

STDMETHODIMP ShellExt::QueryInterface(REFIID riid, void **ppv)
{
	*ppv = NULL;

	if (IsEqualIID(riid, IID_IShellExtInit) || IsEqualIID(riid, IID_IUnknown)) {
		*ppv = (IShellExtInit *)this;
	}
	else if (IsEqualIID(riid, IID_IContextMenu)) {
		*ppv = (IContextMenu *)this;
	}

	if (*ppv) {
		AddRef();
		return NOERROR;
	}

	return E_NOINTERFACE;
}

STDMETHODIMP ShellExt::QueryContextMenu(HMENU hMenu, UINT iMenu, UINT _cmdFirst, UINT _cmdLast, UINT flg)
{
	HMENU	hTargetMenu = hMenu;
	BOOL	is_dd = dstArray.Num();
	int		menu_flags = GetMenuFlags();
	int		mask_menu_flags = (menu_flags & (is_dd ? SHEXT_DD_MENUS : SHEXT_RIGHT_MENUS));
	BOOL	is_submenu = (menu_flags & (is_dd ? SHEXT_SUBMENU_DD : SHEXT_SUBMENU_RIGHT));
	BOOL	is_separator = (menu_flags & SHEXT_SUBMENU_NOSEP) ? FALSE : TRUE;

	if (!is_dd && (flg == CMF_NORMAL) || (flg & (CMF_VERBSONLY|CMF_DEFAULTONLY))) {
		return	ResultFromScode(MAKE_SCODE(SEVERITY_SUCCESS, 0, 0));
	}

	cmdFirst = cmdLast = _cmdFirst;
	// 儊僯儏乕傾僀僥儉偺捛壛
	if (mask_menu_flags && srcArray.Num() > 0) {
		if (!is_dd && is_separator)
			::InsertMenu(hMenu, iMenu++, MF_SEPARATOR|MF_BYPOSITION, 0, 0);

		if (is_separator)
			::InsertMenu(hMenu, iMenu, MF_SEPARATOR|MF_BYPOSITION, 0, 0);

		if (is_submenu) {
			hTargetMenu = ::CreatePopupMenu();
			::InsertMenu(hMenu, iMenu, MF_POPUP|MF_BYPOSITION, (UINT)hTargetMenu, FASTCOPY);
			iMenu = 0;
		}
		if (mask_menu_flags & (SHEXT_RIGHT_COPY|SHEXT_DD_COPY)) {
			::InsertMenu(hTargetMenu, iMenu++, MF_STRING|MF_BYPOSITION, cmdLast, is_dd ? GetLoadStr(IDS_DDCOPY) : GetLoadStr(IDS_RIGHTCOPY));
		}
		cmdLast++;

		if (mask_menu_flags & (SHEXT_RIGHT_DELETE|SHEXT_DD_MOVE)) {
			::InsertMenu(hTargetMenu, iMenu++, MF_STRING|MF_BYPOSITION, cmdLast, is_dd ? GetLoadStr(IDS_DDMOVE) : GetLoadStr(IDS_RIGHTDEL));
		}
		cmdLast++;
	}

	return	ResultFromScode(MAKE_SCODE(SEVERITY_SUCCESS, 0, cmdLast - cmdFirst));
}

STDMETHODIMP ShellExt::InvokeCommand(CMINVOKECOMMANDINFO *info)
{
	int		cmd = LOWORD(info->lpVerb);

	if (cmd >= 0 && cmd <= 1 && srcArray.Num() > 0) {
		HANDLE	hRead, hWrite;
		SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), 0, TRUE };

		::CreatePipe(&hRead, &hWrite, &sa, 0);
		::DuplicateHandle(::GetCurrentProcess(), hWrite, ::GetCurrentProcess(), &hWrite, 0, FALSE, DUPLICATE_CLOSE_SOURCE|DUPLICATE_SAME_ACCESS);

		STARTUPINFO			st_info;
		memset(&st_info, 0, sizeof(st_info));
		st_info.cb = sizeof(st_info);
		st_info.dwFlags = STARTF_USESTDHANDLES;
		st_info.hStdInput = hRead;
		st_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE);
		st_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE);

		BOOL	is_dd = dstArray.Num();
		char	arg[MAX_PATH_EX];
		PROCESS_INFORMATION	pr_info;

		wsprintf(arg, "\"%s\" %s %s", SysObj->ExeName, cmd == 1 ? is_dd ? "/cmd=move" : "/cmd=delete" : "", SHELLEXT_OPT);
		BOOL ret = ::CreateProcess(SysObj->ExeName, arg, 0, 0, TRUE, CREATE_DEFAULT_ERROR_MODE, 0, 0, &st_info, &pr_info);
		::CloseHandle(hRead);

		if (ret) {
			DWORD	len = srcArray.GetMultiPathLen();
			WCHAR	*buf = new WCHAR[max(len, MAX_PATH_EX)];
			// dstArray 偑柍偄応崌偼丄\0 傑偱弌椡
			len = srcArray.GetMultiPath(buf, len) + (!is_dd ? 1 : 0);
			::WriteFile(hWrite, buf, len * CHAR_LEN_V, &len, 0);

			if (is_dd) {
				WCHAR	dir[MAX_PATH_EX];
				MakePathV(dir, dstArray.Path(0), EMPTY_STR_V);	// 枛旜偵 \\ 傪晅梌
				len = wsprintfV(buf, FMT_TOSTR_V, dir) + 1;
				::WriteFile(hWrite, buf, len * CHAR_LEN_V, &len, 0);
			}
			delete [] buf;
			::CloseHandle(pr_info.hProcess);
			::CloseHandle(pr_info.hThread);
		}
		::CloseHandle(hWrite);
		return NOERROR;
	}
	return	E_INVALIDARG;
}

STDMETHODIMP ShellExt::GetCommandString(UINT cmd, UINT flg, UINT *, char *name, UINT cchMax)
{
	BOOL	is_dd = dstArray.Num();

	if (flg == GCS_HELPTEXT) {
		switch (cmd) {
		case 0:
			strncpy(name, is_dd ? GetLoadStr(IDS_DDCOPY) : GetLoadStr(IDS_RIGHTCOPY), cchMax);
			return	S_OK;
		case 1:
			strncpy(name, is_dd ? GetLoadStr(IDS_DDMOVE) : GetLoadStr(IDS_RIGHTDEL), cchMax);
			return	S_OK;
		}
	}
    return E_INVALIDARG;
}

STDMETHODIMP_(ULONG) ShellExt::AddRef()
{
	return ++refCnt;
}

STDMETHODIMP_(ULONG) ShellExt::Release()
{
	if (--refCnt)
		return refCnt;

	delete this;
	return	0;
}


/*=========================================================================
  僋儔僗 丗 ShellExtClassFactory
  奣  梫 丗 僔僃儖奼挘僋儔僗
  愢  柧 丗 
  拲  堄 丗 
=========================================================================*/
ShellExtClassFactory::ShellExtClassFactory(void)
{
	refCnt = 0;
	if (SysObj)
		SysObj->DllRefCnt++;
}

ShellExtClassFactory::~ShellExtClassFactory()
{
	if (SysObj)
		SysObj->DllRefCnt--;
}

STDMETHODIMP ShellExtClassFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObj)
{
	*ppvObj = NULL;

	if (pUnkOuter)
		return CLASS_E_NOAGGREGATION;

	ShellExt *shellExt = new ShellExt;
	if (NULL == shellExt)
		return E_OUTOFMEMORY;

	return shellExt->QueryInterface(riid, ppvObj);
}

STDMETHODIMP ShellExtClassFactory::LockServer(BOOL fLock)
{
	return NOERROR;
}

STDMETHODIMP ShellExtClassFactory::QueryInterface(REFIID riid, void **ppv)
{
	*ppv = NULL;

	if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory)) {
		*ppv = (IClassFactory *)this;
		AddRef();
		return NOERROR;
	}
	return E_NOINTERFACE;
}

STDMETHODIMP_(ULONG) ShellExtClassFactory::AddRef()
{
	return ++refCnt;
}

STDMETHODIMP_(ULONG) ShellExtClassFactory::Release()
{
	if (--refCnt)
		return refCnt;
	delete this;
	return 0;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂在线一区二区| 97久久超碰精品国产| 成人性色生活片| 欧美日韩国产大片| 欧美国产日韩精品免费观看| 香蕉久久一区二区不卡无毒影院 | 精品久久久久久久久久久院品网 | 日本韩国一区二区三区| 国产亚洲美州欧州综合国| 天天av天天翘天天综合网| 成人免费av在线| 久久午夜羞羞影院免费观看| 亚洲午夜在线电影| 99在线精品一区二区三区| 久久色中文字幕| 美女视频网站久久| 欧美精品三级在线观看| 亚洲精品国产精品乱码不99| 成人免费视频播放| 国产欧美日韩在线看| 久久99国产精品久久99果冻传媒| 欧美无砖砖区免费| 亚洲色图欧美偷拍| 91免费在线看| 亚洲欧美日韩综合aⅴ视频| 国产成人在线观看| 久久久99精品久久| 丁香激情综合国产| 国产免费成人在线视频| 国产精品一区二区在线播放 | 亚洲伦在线观看| 99精品国产视频| 亚洲男人天堂一区| 色综合一区二区三区| 亚洲另类春色国产| 欧美日韩午夜影院| 日韩电影在线一区| 日韩丝袜美女视频| 国产精品白丝jk黑袜喷水| 国产性色一区二区| av在线播放不卡| 亚洲国产一区二区三区青草影视 | 99热这里都是精品| 亚洲精品成a人| 欧美日韩一区久久| 美女一区二区视频| 国产精品色一区二区三区| aa级大片欧美| 香蕉久久夜色精品国产使用方法| 欧美日韩黄色影视| 久久99久久99小草精品免视看| 久久一日本道色综合| 成人免费毛片片v| 亚洲午夜激情av| 精品av久久707| 99精品1区2区| 男男成人高潮片免费网站| 精品福利一区二区三区免费视频| 成人小视频免费在线观看| 一区二区在线观看免费| 欧美精品一级二级三级| 国产一区二区美女| 亚洲免费观看高清完整版在线观看 | 91福利国产精品| 九九**精品视频免费播放| 中文字幕亚洲一区二区av在线| 欧美调教femdomvk| 国产二区国产一区在线观看| 亚洲靠逼com| 精品国产sm最大网站免费看| 一本一道波多野结衣一区二区| 青娱乐精品视频在线| 日韩理论片网站| 精品国产网站在线观看| 色国产综合视频| 国产精品 欧美精品| 午夜视频在线观看一区二区三区| 亚洲国产精品高清| 日韩一区二区免费在线电影| 91原创在线视频| 韩国女主播成人在线| 亚洲线精品一区二区三区| 国产精品久久久久影院色老大| 欧美一区二区国产| 色拍拍在线精品视频8848| 国产乱码精品1区2区3区| 亚洲一区二区三区四区在线观看 | 91麻豆免费看| 国产精品亚洲专一区二区三区| 亚洲国产成人精品视频| 国产精品久久久久7777按摩| 精品欧美一区二区久久| 欧美性淫爽ww久久久久无| 丰满岳乱妇一区二区三区| 久久国产精品免费| 美女爽到高潮91| 日本v片在线高清不卡在线观看| 亚洲精品一二三四区| 国产精品色哟哟网站| 欧美激情在线看| 国产午夜精品理论片a级大结局| 欧美一级淫片007| 欧美卡1卡2卡| 欧美日韩在线直播| 欧美日韩一二三| 91精品婷婷国产综合久久竹菊| 91老师国产黑色丝袜在线| av高清久久久| 国产v日产∨综合v精品视频| 精品亚洲国产成人av制服丝袜| 日韩av中文在线观看| 日韩电影网1区2区| 日韩av一区二区三区四区| 日韩中文欧美在线| 免费成人av在线播放| 免费日韩伦理电影| 久久99久久99精品免视看婷婷| 日韩和欧美一区二区| 视频一区二区三区在线| 日韩精品成人一区二区在线| 偷拍自拍另类欧美| 蜜臀精品久久久久久蜜臀| 日本不卡123| 国产一区三区三区| 成人av资源在线观看| 99久久99久久精品国产片果冻 | 欧美一区二区视频在线观看| 欧美一区二区三区免费视频| 2023国产精品| 国产精品高潮久久久久无| 亚洲欧美国产高清| 视频一区二区三区中文字幕| 美女高潮久久久| 国产99久久久国产精品免费看| 成人av在线影院| 在线观看视频欧美| 日韩欧美精品在线视频| 久久中文字幕电影| 成人欧美一区二区三区在线播放| 亚洲国产日韩a在线播放性色| 日韩**一区毛片| 国产精品一区久久久久| 91美女蜜桃在线| 日韩欧美精品在线视频| 国产精品成人网| 日本在线不卡一区| 成人在线一区二区三区| 欧美羞羞免费网站| 久久久噜噜噜久久人人看| 亚洲欧美日韩人成在线播放| 日日欢夜夜爽一区| 国产99一区视频免费| 欧美群妇大交群中文字幕| 久久综合av免费| 香蕉影视欧美成人| 99这里只有精品| 精品国产伦一区二区三区免费 | 男男视频亚洲欧美| 91亚洲永久精品| 欧美videossexotv100| 亚洲欧美日本韩国| 国产精品系列在线观看| 欧美老女人第四色| 一区二区三区在线观看网站| 国精产品一区一区三区mba桃花| 在线观看91精品国产入口| 精品久久久久久久久久久久久久久 | 欧美大肚乱孕交hd孕妇| 亚洲欧洲另类国产综合| 奇米四色…亚洲| 欧美性大战久久久久久久蜜臀 | caoporm超碰国产精品| 26uuu亚洲| 日韩av一区二区三区四区| 91麻豆视频网站| 国产精品每日更新在线播放网址| 青青草97国产精品免费观看| 日本二三区不卡| 亚洲欧美一区二区在线观看| 国产一区日韩二区欧美三区| 日韩一区二区电影在线| 亚洲第四色夜色| 在线视频亚洲一区| 亚洲精品国产第一综合99久久| 成人激情黄色小说| 欧美激情一区二区三区蜜桃视频| 久久99国产精品久久| 日韩一级二级三级精品视频| 亚洲成人动漫在线免费观看| 99精品视频一区二区三区| 国产精品国产三级国产aⅴ入口| 国产精品一品视频| 2024国产精品视频| 国产一区二区三区四区五区美女 | 成人国产免费视频| 欧美国产日产图区| 粉嫩av亚洲一区二区图片| 国产亚洲欧美在线| 成人精品视频.| 国产精品第一页第二页第三页|