📄 otherfunctions.cpp
字号:
if (regkey.QueryStringValue("OldIcon", rbuffer, &maxsize) == ERROR_SUCCESS)
{
regkey.SetStringValue(0, rbuffer);
regkey.DeleteValue("OldIcon");
}
}
regkey.Close();
}
int GetMaxConnections() {
OSVERSIONINFOEX osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if(!GetVersionEx((OSVERSIONINFO*)&osvi)) {
//if OSVERSIONINFOEX doesn't work, try OSVERSIONINFO
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if(!GetVersionEx((OSVERSIONINFO*)&osvi))
return -1; //shouldn't ever happen
}
if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) // Windows NT product family
return -1; //no limits
if(osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { // Windows 95 product family
if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) { //old school 95
HKEY hKey;
DWORD dwValue;
DWORD dwLength = sizeof(dwValue);
LONG lResult;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Services\\VxD\\MSTCP",
0, KEY_QUERY_VALUE, &hKey);
lResult = RegQueryValueEx(hKey, TEXT("MaxConnections"), NULL, NULL,
(LPBYTE)&dwValue, &dwLength);
RegCloseKey(hKey);
if(lResult != ERROR_SUCCESS || lResult < 1)
return 100; //the default for 95 is 100
return dwValue;
} else { //98 or ME
HKEY hKey;
TCHAR szValue[32];
DWORD dwLength = sizeof(szValue);
LONG lResult;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Services\\VxD\\MSTCP",
0, KEY_QUERY_VALUE, &hKey);
lResult = RegQueryValueEx(hKey, TEXT("MaxConnections"), NULL, NULL,
(LPBYTE)szValue, &dwLength);
RegCloseKey(hKey);
LONG lMaxConnections;
if(lResult != ERROR_SUCCESS || (lMaxConnections = atoi(szValue)) < 1)
return 100; //the default for 98/ME is 100
return lMaxConnections;
}
}
return -1; //give the user the benefit of the doubt, most use NT+ anyway
}
WORD DetectWinVersion()
{
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if(!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*)&osvi)))
{
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(!GetVersionEx((OSVERSIONINFO*)&osvi))
return FALSE;
}
switch(osvi.dwPlatformId)
{
case VER_PLATFORM_WIN32_NT:
if(osvi.dwMajorVersion <= 4)
return _WINVER_NT4_;
if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
return _WINVER_2K_;
if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)
return _WINVER_XP_;
break;
case VER_PLATFORM_WIN32_WINDOWS:
if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
return _WINVER_95_;
if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
return _WINVER_98_;
if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
return _WINVER_ME_;
break;
default:
break;
}
return _WINVER_95_; // there should'nt be anything lower than this
}
_int64 GetFreeDiskSpaceX(PCHAR pDirectory)
{
BOOL (WINAPI *pGetDiskFreeSpaceEx)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);
(FARPROC&)pGetDiskFreeSpaceEx = GetProcAddress(GetModuleHandle("kernel32.dll"), "GetDiskFreeSpaceExA");
if(pGetDiskFreeSpaceEx)
{
ULARGE_INTEGER nFreeDiskSpace;
ULARGE_INTEGER dummy;
pGetDiskFreeSpaceEx(pDirectory, &nFreeDiskSpace, &dummy, &dummy);
return nFreeDiskSpace.QuadPart;
}
else
{
char cDrive[16];
char *p = strchr(pDirectory, '\\');
if(p)
{
memcpy(cDrive, pDirectory, p-pDirectory);
cDrive[p-pDirectory] = '\0';
}
else
strcpy(cDrive, pDirectory);
DWORD dwSectPerClust, dwBytesPerSect, dwFreeClusters, dwDummy;
GetDiskFreeSpace(cDrive, &dwSectPerClust, &dwBytesPerSect, &dwFreeClusters, &dwDummy);
return (dwFreeClusters * dwSectPerClust * dwBytesPerSect);
}
return 0;
}
//For Rate File //
CString GetRateString(uint16 rate) {
switch (rate){
case 0:
return GetResString(IDS_CMT_NOTRATED);
break;
case 1:
return GetResString(IDS_CMT_FAKE);
break;
case 2:
return GetResString(IDS_CMT_POOR);
break;
case 3:
return GetResString(IDS_CMT_GOOD);
break;
case 4:
return GetResString(IDS_CMT_FAIR);
break;
case 5:
return GetResString(IDS_CMT_EXCELLENT);
break;
}
return GetResString(IDS_CMT_NOTRATED);
}
//end rate File//
// Returns a BASE32 encoded byte array
//
// [In]
// buffer: Pointer to byte array
// bufLen: Lenght of buffer array
//
// [Return]
// CString object with BASE32 encoded byte array
CString EncodeBase32(const unsigned char* buffer, unsigned int bufLen)
{
CString Base32Buff;
unsigned int i, index;
unsigned char word;
int pos = 0;
for(i = 0, index = 0; i < bufLen;) {
// Is the current word going to span a byte boundary?
if (index > 3) {
word = (buffer[i] & (0xFF >> index));
index = (index + 5) % 8;
word <<= index;
if (i < bufLen - 1)
word |= buffer[i + 1] >> (8 - index);
i++;
} else {
word = (buffer[i] >> (8 - (index + 5))) & 0x1F;
index = (index + 5) % 8;
if (index == 0)
i++;
}
Base32Buff += (char) base32Chars[word];
}
return Base32Buff;
}
// Returns a BASE16 encoded byte array
//
// [In]
// buffer: Pointer to byte array
// bufLen: Lenght of buffer array
//
// [Return]
// CString object with BASE16 encoded byte array
CString EncodeBase16(const unsigned char* buffer, unsigned int bufLen)
{
CString Base16Buff;
for(unsigned int i = 0; i < bufLen; i++) {
Base16Buff += base16Chars[buffer[i] >> 4];
Base16Buff += base16Chars[buffer[i] & 0xf];
}
return Base16Buff;
}
// Decodes a BASE16 string into a byte array
//
// [In]
// base16Buffer: String containing BASE16
// base16BufLen: Lenght BASE16 coded string's length
//
// [Out]
// buffer: byte array containing decoded string
void DecodeBase16(const char *base16Buffer, unsigned int base16BufLen, byte *buffer)
{
memset(buffer, 0, DecodeLengthBase16(base16BufLen));
for(unsigned int i = 0; i < base16BufLen; i++) {
int lookup = toupper(base16Buffer[i]) - '0';
// Check to make sure that the given word falls inside a valid range
byte word = 0;
if ( lookup < 0 || lookup >= BASE16_LOOKUP_MAX)
word = 0xFF;
else
word = base16Lookup[lookup][1];
if(i % 2 == 0) {
buffer[i/2] = word << 4;
} else {
buffer[(i-1)/2] |= word;
}
}
}
// Calculates length to decode from BASE16
//
// [In]
// base16Length: Actual length of BASE16 string
//
// [Return]
// New length of byte array decoded
int DecodeLengthBase16(int base16Length)
{
return base16Length / 2;
}
void UpdateURLMenu(CMenu &menu,int &counter){
counter=0;
theApp.webservices.RemoveAll();
CString name,url,sbuffer;
char buffer[1024];
int lenBuf = 1024;
FILE* readFile= fopen(CString(theApp.glob_prefs->GetAppDir())+"webservices.dat", "r");
if (readFile!=NULL) {
while (!feof(readFile)) {
if (fgets(buffer,lenBuf,readFile)==0) break;
sbuffer=buffer;
// ignore comments & too short lines
if (sbuffer.GetAt(0) == '#' || sbuffer.GetAt(0) == '/' || sbuffer.GetLength()<5)
continue;
int pos=sbuffer.Find(',');
if (pos>0) {
counter++;
menu.AppendMenu(MF_STRING,MP_WEBURL+(counter-1), sbuffer.Left(pos).Trim() );
theApp.webservices.Add(sbuffer.Right(sbuffer.GetLength()-pos-1).Trim() );
}
}
fclose(readFile);
}
}
void RunURL(CAbstractFile* file, CString urlpattern)
{
if (file!=NULL) {
// Convert hash to hexadecimal text and add it to the URL
urlpattern.Replace("#hashid", EncodeBase16(file->GetFileHash(), 16));
// Add file size to the URL
CString temp;
temp.Format("%u",file->GetFileSize());
urlpattern.Replace("#filesize", temp);
// add filename to the url
urlpattern.Replace("#filename",URLEncode(file->GetFileName()));
}
// Open URL
ShellExecute(NULL, NULL, urlpattern, NULL, theApp.glob_prefs->GetAppDir(), SW_SHOWDEFAULT);
}
bool SelectDir(HWND myHwnd,char* outdir, CString titletext)
{
CoInitialize(0);
bool done;
char* buffer = new char[MAX_PATH];
BROWSEINFO bi = { myHwnd, 0, buffer, titletext, BIF_VALIDATE | BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS | BIF_SHAREABLE | BIF_DONTGOBELOWDOMAIN, 0, 0, 0};
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
delete[] buffer;
done = SHGetPathFromIDList(pidl,outdir);
LPMALLOC ppMalloc;
if(SHGetMalloc(&ppMalloc) == NOERROR)
ppMalloc->Free(pidl);
CoUninitialize();
return done;
}
void MakeFoldername(char* path){
CString string(path);
if (string.GetLength()>0) if (string.Right(1)=='\\') string=string.Left(string.GetLength()-1);
sprintf(path,"%s",string);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -