📄 otherfunctions.cpp
字号:
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 + -