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

📄 otherfunctions.cpp

📁 电驴的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	if (SHGetMalloc(&pShlMalloc) == NOERROR)
	{
		BROWSEINFO BrsInfo = {0};
		BrsInfo.hwndOwner = hWnd;
		BrsInfo.lpszTitle = (pszTitle != NULL) ? pszTitle : pszDlgTitle;
		BrsInfo.ulFlags = BIF_VALIDATE | BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS | BIF_SHAREABLE | BIF_DONTGOBELOWDOMAIN;

		BROWSEINIT BrsInit = {0};
		if (pszPath != NULL || pszTitle != NULL || pszDlgTitle != NULL){
			// Need the 'BrowseCallbackProc' to set those strings
			BrsInfo.lpfn = BrowseCallbackProc;
			BrsInfo.lParam = (LPARAM)&BrsInit;
			BrsInit.pszDlgTitle = (pszDlgTitle != NULL) ? pszDlgTitle : NULL/*pszTitle*/;
			BrsInit.pszInitialDir = pszPath;
		}

		LPITEMIDLIST pidlBrowse;
		if ((pidlBrowse = SHBrowseForFolder(&BrsInfo)) != NULL){
			if (SHGetPathFromIDList(pidlBrowse, pszPath))
				bResult = TRUE;
			pShlMalloc->Free(pidlBrowse);
		}
		pShlMalloc->Release();
	}
	CoUninitialize();
	return bResult;
}

void MakeFoldername(TCHAR* path){
//	CString string(path);
//	if (string.GetLength()>0) if (string.Right(1)=='\\') string=string.Left(string.GetLength()-1);
//	sprintf(path,"%s",string);
	CString strPath(path);
	PathCanonicalize(path, strPath);
	PathRemoveBackslash(path);
}

CString StringLimit(CString in,uint16 length){
	if (in.GetLength()<=length || length<10) return in;

	return (in.Left(length-8) + _T("...") + in.Right(8));
}

BOOL DialogBrowseFile(CString& rstrPath, LPCTSTR pszFilters, LPCTSTR pszDefaultFileName, DWORD dwFlags,bool openfilestyle) {
    CFileDialog myFileDialog(openfilestyle,NULL,pszDefaultFileName,
							 dwFlags | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, pszFilters, NULL, 
							 0/*automatically use explorer style open dialog on systems which support it*/);
    if (myFileDialog.DoModal() != IDOK)
		return FALSE;
	rstrPath = myFileDialog.GetPathName();
	return TRUE;
}

void md4str(const uchar* hash, TCHAR* pszHash)
{
    static const TCHAR _acHexDigits[] = _T("0123456789ABCDEF");
    for (int i = 0; i < 16; i++){
		*pszHash++ = _acHexDigits[hash[i] >> 4];
		*pszHash++ = _acHexDigits[hash[i] & 0xf];
	}
	*pszHash = _T('\0');
}

CString md4str(const uchar* hash)
{
	TCHAR szHash[MAX_HASHSTR_SIZE];
	md4str(hash, szHash);
	return CString(szHash);
}

void md4strA(const uchar* hash, CHAR* pszHash)
{
    static const CHAR _acHexDigits[] = "0123456789ABCDEF";
    for (int i = 0; i < 16; i++){
		*pszHash++ = _acHexDigits[hash[i] >> 4];
		*pszHash++ = _acHexDigits[hash[i] & 0xf];
	}
	*pszHash = '\0';
}

CStringA md4strA(const uchar* hash)
{
	CHAR szHash[MAX_HASHSTR_SIZE];
	md4strA(hash, szHash);
	return CStringA(szHash);
}

bool strmd4(const char* pszHash, uchar* hash)
{
	memset(hash, 0, 16);
	for (int i = 0; i < 16; i++)
	{
		char byte[3];
		byte[0] = pszHash[i*2+0];
		byte[1] = pszHash[i*2+1];
		byte[2] = '\0';

		UINT b;
		if (sscanf(byte, "%x", &b) != 1)
			return false;
		hash[i] = b;
	}
	return true;
}

bool strmd4(const CString& rstr, uchar* hash)
{
	memset(hash, 0, 16);
	if (rstr.GetLength() != 16*2)
		return false;
	for (int i = 0; i < 16; i++)
	{
		char byte[3];
		byte[0] = rstr[i*2+0];
		byte[1] = rstr[i*2+1];
		byte[2] = '\0';

		UINT b;
		if (sscanf(byte, "%x", &b) != 1)
			return false;
		hash[i] = b;
	}
	return true;
}

CString CleanupFilename(CString filename)
{
	filename = URLDecode(filename);
	filename.MakeLower();

	//remove substrings, defined in the preferences (.ini)
	CString strlink = thePrefs.GetFilenameCleanups().MakeLower();
	int curPos = 0;
	CString resToken = strlink.Tokenize(_T("|"), curPos);
	while (!resToken.IsEmpty())
	{
		filename.Replace(resToken, _T(""));
		resToken = strlink.Tokenize(_T("|"), curPos);
	}

	// Replace "." with spaces - except the last one (extension-dot)
	int extpos = filename.ReverseFind(_T('.'));
	if (extpos > 0)
	{
		for (int i = 0; i < extpos; i++)
		{
			if (filename.GetAt(i) != _T('.'))
				continue;
			if (i > 0 && i < filename.GetLength()-1 && _istdigit(filename.GetAt(i-1)) && _istdigit(filename.GetAt(i+1)))
				continue;
			filename.SetAt(i, _T(' '));
		}
	}

	// replace space-holders with spaces
	filename.Replace(_T('_'), _T(' '));
	filename.Replace(_T('+'), _T(' '));
	filename.Replace(_T('='), _T(' '));

	// replace invalid filename characters
	filename.Replace(_T("\\"), _T(""));
	filename.Replace(_T("\""), _T(""));
	filename.Replace(_T("/"), _T(""));
	filename.Replace(_T(":"), _T(""));
	filename.Replace(_T("*"), _T(""));
	filename.Replace(_T("?"), _T(""));
	filename.Replace(_T("<"), _T(""));
	filename.Replace(_T(">"), _T(""));
	filename.Replace(_T("|"), _T(""));

	CString tempStr;
	int pos1 = -1;
	for (;;)
	{
		pos1 = filename.Find(_T('['), pos1+1);
		if (pos1 == -1)
			break;
		int pos2 = filename.Find(_T(']'), pos1);
		if (pos1 > -1 && pos2 > pos1)
		{
			if (pos2 - pos1 > 1)
			{
				tempStr = filename.Mid(pos1+1, pos2-pos1-1);
				int numcount = 0;
				for (int i = 0; i < tempStr.GetLength(); i++)
				{
					if (_istdigit(tempStr.GetAt(i)))
						numcount++;
				}
				if (numcount > tempStr.GetLength()/2)
					continue;
			}
			filename = filename.Left(pos1) + filename.Right(filename.GetLength()-pos2-1);
			pos1--;
		}
		else
			break;
	}

	// additional formatting
	filename.Replace(_T("()"), _T(""));
	filename.Replace(_T("  "), _T(" "));
	filename.Replace(_T(" ."), _T("."));
	filename.Replace(_T("( "), _T("("));
	filename.Replace(_T(" )"), _T(")"));
	filename.Replace(_T("()"), _T(""));
	filename.Replace(_T("{ "), _T("{"));
	filename.Replace(_T(" }"), _T("}"));
	filename.Replace(_T("{}"), _T(""));

	// Make leading Caps 
	if (filename.GetLength() > 1)
	{
		tempStr = filename.GetAt(0);
		tempStr.MakeUpper();
		filename.SetAt(0, tempStr.GetAt(0));

		int topos = filename.ReverseFind(_T('.')) - 1;
		if (topos < 0)
			topos = filename.GetLength() - 1;

		for (int ix = 0; ix < topos; ix++)
		{
			if (!IsCharAlpha(filename.GetAt(ix)))
			{
				if (ix < filename.GetLength()-2 && _istdigit(filename.GetAt(ix+2)))
					continue;

				tempStr = filename.GetAt(ix+1);
				tempStr.MakeUpper();
				filename.SetAt(ix+1, tempStr.GetAt(0));
			}
		}
	}
	filename.Trim();
	return filename;
}

struct SED2KFileType
{
	LPCTSTR pszExt;
	EED2KFileType iFileType;
} _aED2KFileTypes[] = 
{
    { _T(".669"),   ED2KFT_AUDIO },
    { _T(".aac"),   ED2KFT_AUDIO },
    { _T(".aif"),   ED2KFT_AUDIO },
    { _T(".aiff"),  ED2KFT_AUDIO },
    { _T(".amf"),   ED2KFT_AUDIO },
    { _T(".ams"),   ED2KFT_AUDIO },
    { _T(".ape"),   ED2KFT_AUDIO },
    { _T(".au"),    ED2KFT_AUDIO },
    { _T(".dbm"),   ED2KFT_AUDIO },
    { _T(".dmf"),   ED2KFT_AUDIO },
    { _T(".dsm"),   ED2KFT_AUDIO },
    { _T(".far"),   ED2KFT_AUDIO },
    { _T(".flac"),  ED2KFT_AUDIO },
    { _T(".it"),    ED2KFT_AUDIO },
    { _T(".mdl"),   ED2KFT_AUDIO },
    { _T(".med"),   ED2KFT_AUDIO },
    { _T(".mid"),   ED2KFT_AUDIO },
    { _T(".midi"),  ED2KFT_AUDIO },
    { _T(".mod"),   ED2KFT_AUDIO },
    { _T(".mol"),   ED2KFT_AUDIO },
    { _T(".mp1"),   ED2KFT_AUDIO },
    { _T(".mp2"),   ED2KFT_AUDIO },
    { _T(".mp3"),   ED2KFT_AUDIO },
    { _T(".mp4"),   ED2KFT_AUDIO },
    { _T(".mpa"),   ED2KFT_AUDIO },
    { _T(".mpc"),   ED2KFT_AUDIO },
    { _T(".mpp"),   ED2KFT_AUDIO },
    { _T(".mtm"),   ED2KFT_AUDIO },
    { _T(".nst"),   ED2KFT_AUDIO },
    { _T(".ogg"),   ED2KFT_AUDIO },
    { _T(".okt"),   ED2KFT_AUDIO },
    { _T(".psm"),   ED2KFT_AUDIO },
    { _T(".ptm"),   ED2KFT_AUDIO },
    { _T(".ra"),    ED2KFT_AUDIO },
    { _T(".rmi"),   ED2KFT_AUDIO },
    { _T(".s3m"),   ED2KFT_AUDIO },
    { _T(".stm"),   ED2KFT_AUDIO },
    { _T(".ult"),   ED2KFT_AUDIO },
    { _T(".umx"),   ED2KFT_AUDIO },
    { _T(".wav"),   ED2KFT_AUDIO },
    { _T(".wma"),   ED2KFT_AUDIO },
    { _T(".wow"),   ED2KFT_AUDIO },
    { _T(".xm"),    ED2KFT_AUDIO },

    { _T(".asf"),   ED2KFT_VIDEO },
    { _T(".avi"),   ED2KFT_VIDEO },
    { _T(".divx"),  ED2KFT_VIDEO },
    { _T(".m1v"),   ED2KFT_VIDEO },
    { _T(".m2v"),   ED2KFT_VIDEO },
    { _T(".mkv"),   ED2KFT_VIDEO },
    { _T(".mov"),   ED2KFT_VIDEO },
    { _T(".mp1v"),  ED2KFT_VIDEO },
    { _T(".mp2v"),  ED2KFT_VIDEO },
    { _T(".mpe"),   ED2KFT_VIDEO },
    { _T(".mpeg"),  ED2KFT_VIDEO },
    { _T(".mpg"),   ED2KFT_VIDEO },
    { _T(".mps"),   ED2KFT_VIDEO },
    { _T(".mpv"),   ED2KFT_VIDEO },
    { _T(".mpv1"),  ED2KFT_VIDEO },
    { _T(".mpv2"),  ED2KFT_VIDEO },
    { _T(".ogm"),   ED2KFT_VIDEO },
    { _T(".qt"),    ED2KFT_VIDEO },
    { _T(".ram"),   ED2KFT_VIDEO },
    { _T(".rm"),    ED2KFT_VIDEO },
    { _T(".rv"),    ED2KFT_VIDEO },
    { _T(".rv9"),   ED2KFT_VIDEO },
    { _T(".ts"),    ED2KFT_VIDEO },
    { _T(".vivo"),  ED2KFT_VIDEO },
    { _T(".vob"),   ED2KFT_VIDEO },
    { _T(".wmv"),   ED2KFT_VIDEO },
    { _T(".xvid"),  ED2KFT_VIDEO },

    { _T(".bmp"),   ED2KFT_IMAGE },
    { _T(".dcx"),   ED2KFT_IMAGE },
    { _T(".emf"),   ED2KFT_IMAGE },
    { _T(".gif"),   ED2KFT_IMAGE },
    { _T(".ico"),   ED2KFT_IMAGE },
    { _T(".jpeg"),  ED2KFT_IMAGE },
    { _T(".jpg"),   ED2KFT_IMAGE },
    { _T(".pct"),   ED2KFT_IMAGE },
    { _T(".pcx"),   ED2KFT_IMAGE },
    { _T(".pic"),   ED2KFT_IMAGE },
    { _T(".pict"),  ED2KFT_IMAGE },
    { _T(".png"),   ED2KFT_IMAGE },
    { _T(".psd"),   ED2KFT_IMAGE },
    { _T(".psp"),   ED2KFT_IMAGE },
    { _T(".tga"),   ED2KFT_IMAGE },
    { _T(".tif"),   ED2KFT_IMAGE },
    { _T(".tiff"),  ED2KFT_IMAGE },
    { _T(".wmf"),   ED2KFT_IMAGE },
    { _T(".xif"),   ED2KFT_IMAGE },

    { _T(".7z"),	ED2KFT_ARCHIVE },
    { _T(".ace"),   ED2KFT_ARCHIVE },
    { _T(".arj"),   ED2KFT_ARCHIVE },
    { _T(".bz2"),   ED2KFT_ARCHIVE },
    { _T(".cab"),   ED2KFT_ARCHIVE },
    { _T(".gz"),    ED2KFT_ARCHIVE },
    { _T(".hqx"),   ED2KFT_ARCHIVE },
    { _T(".lha"),   ED2KFT_ARCHIVE },
    { _T(".msi"),   ED2KFT_ARCHIVE },
    { _T(".rar"),   ED2KFT_ARCHIVE },
    { _T(".sea"),   ED2KFT_ARCHIVE },
    { _T(".sit"),   ED2KFT_ARCHIVE },
    { _T(".tar"),   ED2KFT_ARCHIVE },
    { _T(".tgz"),   ED2KFT_ARCHIVE },
    { _T(".uc2"),   ED2KFT_ARCHIVE },
    { _T(".zip"),   ED2KFT_ARCHIVE },

    { _T(".bat"),   ED2KFT_PROGRAM },
    { _T(".cmd"),   ED2KFT_PROGRAM },
    { _T(".com"),   ED2KFT_PROGRAM },
    { _T(".exe"),   ED2KFT_PROGRAM },

    { _T(".bin"),   ED2KFT_CDIMAGE },
    { _T(".bwa"),   ED2KFT_CDIMAGE },
    { _T(".bwi"),   ED2KFT_CDIMAGE },
    { _T(".bws"),   ED2KFT_CDIMAGE },
    { _T(".bwt"),   ED2KFT_CDIMAGE },
    { _T(".ccd"),   ED2KFT_CDIMAGE },
    { _T(".cue"),   ED2KFT_CDIMAGE },
    { _T(".dmg"),   ED2KFT_CDIMAGE },
    { _T(".dmz"),   ED2KFT_CDIMAGE },
    { _T(".img"),   ED2KFT_CDIMAGE },
    { _T(".iso"),   ED2KFT_CDIMAGE },
    { _T(".mdf"),   ED2KFT_CDIMAGE },
    { _T(".mds"),   ED2KFT_CDIMAGE },
    { _T(".nrg"),   ED2KFT_CDIMAGE },
    { _T(".sub"),   ED2KFT_CDIMAGE },
    { _T(".toast"), ED2KFT_CDIMAGE },

    { _T(".chm"),   ED2KFT_DOCUMENT },
    { _T(".css"),   ED2KFT_DOCUMENT },
    { _T(".diz"),   ED2KFT_DOCUMENT },
    { _T(".doc"),   ED2KFT_DOCUMENT },
    { _T(".dot"),   ED2KFT_DOCUMENT },
    { _T(".hlp"),   ED2KFT_DOCUMENT },
    { _T(".htm"),   ED2KFT_DOCUMENT },
    { _T(".html"),  ED2KFT_DOCUMENT },
    { _T(".nfo"),   ED2KFT_DOCUMENT },
    { _T(".pdf"),   ED2KFT_DOCUMENT },
    { _T(".pps"),   ED2KFT_DOCUMENT },
    { _T(".ppt"),   ED2KFT_DOCUMENT },
    { _T(".ps"),    ED2KFT_DOCUMENT },
    { _T(".rtf"),   ED2KFT_DOCUMENT },
    { _T(".wri"),   ED2KFT_DOCUMENT },
    { _T(".txt"),   ED2KFT_DOCUMENT },
    { _T(".xls"),   ED2KFT_DOCUMENT },
    { _T(".xlt"),   ED2KFT_DOCUMENT }
};

int __cdecl CompareE2DKFileType(const void* p1, const void* p2)
{
	return _tcscmp( ((const SED2KFileType*)p1)->pszExt, ((const SED2KFileType*)p2)->pszExt );
}

EED2KFileType GetED2KFileTypeID(LPCTSTR pszFileName)
{
	LPCTSTR pszExt = _tcsrchr(pszFileName, _T('.'));
	if (pszExt == NULL)
		return ED2KFT_ANY;
	CString strExt(pszExt);
	strExt.MakeLower();

	SED2KFileType ft;
	ft.pszExt = strExt;
	ft.iFileType = ED2KFT_ANY;
	const SED2KFileType* pFound = (SED2KFileType*)bsearch(&ft, _aED2KFileTypes, ARRSIZE(_aED2KFileTypes), sizeof _aED2KFileTypes[0], CompareE2DKFileType);
	if (pFound != NULL)
		return pFound->iFileType;
	return ED2KFT_ANY;
}

// Retuns the ed2k file type term which is to be used in server searches
LPCSTR GetED2KFileTypeSearchTerm(EED2KFileType iFileID)
{
	if (iFileID == ED2KFT_AUDIO)		return ED2KFTSTR_AUDIO;
	if (iFileID == ED2KFT_VIDEO)		return ED2KFTSTR_VIDEO;
	if (iFileID == ED2KFT_IMAGE)		return ED2KFTSTR_IMAGE;
	if (iFileID == ED2KFT_DOCUMENT)		return ED2KFTSTR_DOCUMENT;
	if (iFileID == ED2KFT_PROGRAM)		return ED2KFTSTR_PROGRAM;
	// NOTE: Archives and CD-Images are published with file type "Pro"
	if (iFileID == ED2KFT_ARCHIVE)		return ED2KFTSTR_PROGRAM;
	if (iFileID == ED2KFT_CDIMAGE)		return ED2KFTSTR_PROGRAM;
	return NULL;
}

// Returns a file type which is used eMule internally only, examining the extention of the given filename
CString GetFileTypeByName(LPCTSTR pszFileName)
{
	EED2KFileType iFileType = GetED2KFileTypeID(pszFileName);
	switch (iFileType) {
		case ED2KFT_AUDIO:		return _T(ED2KFTSTR_AUDIO);
		case ED2KFT_VIDEO:		return _T(ED2KFTSTR_VIDEO);
		case ED2KFT_IMAGE:		return _T(ED2KFTSTR_IMAGE);
		case ED2KFT_DOCUMENT:	return _T(ED2KFTSTR_DOCUMENT);
		case ED2KFT_PROGRAM:	return _T(ED2KFTSTR_PROGRAM);
		case ED2KFT_ARCHIVE:	return _T(ED2KFTSTR_ARCHIVE);
		case ED2KFT_CDIMAGE:	return _T(ED2KFTSTR_CDIMAGE);
		default:				return _T("");
	}
}

// Returns a file type which is used eMule internally only (GUI)
CString GetFileTypeDisplayStrFromED2KFileType(LPCTSTR pszED2KFileType)
{
	ASSERT( pszED2KFileType != NULL );
	if (pszED2KFileType != NULL)
	{

⌨️ 快捷键说明

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