www.pudn.com > NeroSDK-v1.05.zip > NeroPluginUtil.cpp


/****************************************************************************** 
|* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
|* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
|* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
|* PARTICULAR PURPOSE. 
|*  
|* Copyright 1995-2004 Ahead Software AG. All Rights Reserved. 
|*----------------------------------------------------------------------------- 
|* NeroSDK / AudioPluginManager 
|* 
|* FILE: NeroPluginUtil.cpp 
|* 
|* PURPOSE: Implementation of auxiliary helper functions for Nero plugins 
******************************************************************************/ 
 
#include "stdafx.h" 
#include "NeroPluginUtil.h" 
#include "afxinet.h"		// URL parsing 
 
bool reg_SetPluginParam(const char *szVendor, const char *szProduct, 
						const char *szPlugin, const char *szGroup, 
						const char *szParam, DWORD dwValue) 
{ 
	if(!(szVendor && szProduct && szPlugin && szParam)) 
	{ 
		ASSERT(FALSE); 
 
		return false; 
	} 
 
	HKEY hKey = NULL; 
 
	if(!szGroup) 
		szGroup = ""; 
 
	try 
	{ 
		CString csSubKey; 
		csSubKey.Format("Software\\%s\\%s\\%s\\%s", 
						szVendor, szProduct, szPlugin, szGroup); 
 
		if(RegOpenKey(HKEY_CURRENT_USER, csSubKey, &hKey) != ERROR_SUCCESS && 
			RegCreateKey(HKEY_CURRENT_USER, csSubKey, &hKey) != ERROR_SUCCESS) 
				throw false; 
 
		if(RegSetValueEx(hKey, szParam, NULL, REG_DWORD, 
							(BYTE*)&dwValue, sizeof(DWORD)) != ERROR_SUCCESS) 
			throw false; 
 
		throw true; 
	} 
	catch(bool b) 
	{ 
		if(hKey) 
			RegCloseKey(hKey); 
 
		return b; 
	} 
} 
 
bool reg_GetPluginParam(const char *szVendor, const char *szProduct, 
						const char *szPlugin, const char *szGroup, 
						const char *szParam, DWORD &dwValue) 
{ 
	if(!(szVendor && szProduct && szPlugin && szParam)) 
	{ 
		ASSERT(FALSE); 
 
		return false; 
	} 
 
	HKEY hKey = NULL; 
 
	if(!szGroup) 
		szGroup = ""; 
 
	try 
	{ 
		CString csSubKey; 
		csSubKey.Format("Software\\%s\\%s\\%s\\%s", 
						szVendor, szProduct, szPlugin, szGroup); 
 
		if(RegOpenKey(HKEY_CURRENT_USER, csSubKey, &hKey) != ERROR_SUCCESS) 
			throw false; 
 
		DWORD	dwType	= 0, 
				dwSize	= sizeof(DWORD); 
 
		if(RegQueryValueEx(hKey, szParam, NULL, &dwType, 
							(BYTE*)&dwValue, &dwSize) != ERROR_SUCCESS) 
			throw false; 
 
		throw true; 
	} 
	catch(bool b) 
	{ 
		if(hKey) 
			RegCloseKey(hKey); 
 
		return b; 
	} 
} 
 
bool reg_SetPluginParam(const char *szVendor, const char *szProduct, 
						const char *szPlugin, const char *szGroup, 
						const char *szParam, const char *szValue) 
{ 
	if(!(szVendor && szProduct && szPlugin && szParam)) 
	{ 
		ASSERT(FALSE); 
 
		return false; 
	} 
 
	HKEY hKey = NULL; 
 
	if(!szGroup) 
		szGroup = ""; 
 
	try 
	{ 
		CString csSubKey; 
		csSubKey.Format("Software\\%s\\%s\\%s\\%s", 
						szVendor, szProduct, szPlugin, szGroup); 
 
		if(RegOpenKey(HKEY_CURRENT_USER, csSubKey, &hKey) != ERROR_SUCCESS && 
			RegCreateKey(HKEY_CURRENT_USER, csSubKey, &hKey) != ERROR_SUCCESS) 
				throw false; 
 
		if(RegSetValueEx(hKey, szParam, NULL, REG_SZ, 
							(BYTE*)szValue, 
							strlen(szValue) + 1) != ERROR_SUCCESS) 
			throw false; 
 
		throw true; 
	} 
	catch(bool b) 
	{ 
		if(hKey) 
			RegCloseKey(hKey); 
 
		return b; 
	} 
} 
 
CString reg_GetPluginParam(const char *szVendor, const char *szProduct, 
							const char *szPlugin, const char *szGroup, 
							const char *szParam) 
{ 
	CString csValue; 
 
	if(!(szVendor && szProduct && szPlugin && szParam)) 
	{ 
		ASSERT(FALSE); 
 
		return csValue; 
	} 
 
	HKEY hKey = NULL; 
 
	if(!szGroup) 
		szGroup = ""; 
 
	try 
	{ 
		CString csSubKey; 
		csSubKey.Format("Software\\%s\\%s\\%s\\%s", 
						szVendor, szProduct, szPlugin, szGroup); 
 
		if(RegOpenKey(HKEY_CURRENT_USER, csSubKey, &hKey) != ERROR_SUCCESS) 
			throw false; 
 
		char szBuf[1000]; 
 
		DWORD	dwType	= 0, 
				dwSize	= sizeof(szBuf); 
 
		if(!(RegQueryValueEx(hKey, szParam, NULL, &dwType, 
							(BYTE*)szBuf, &dwSize) == ERROR_SUCCESS && 
				dwType == REG_SZ)) 
			throw false; 
 
		csValue = szBuf; 
 
		throw true; 
	} 
	catch(bool ) 
	{ 
		if(hKey) 
			RegCloseKey(hKey); 
	} 
 
	return csValue; 
} 
 
// Returns true if the URL points to a local file. 
bool IsURLLocal(const char *szURL) 
{ 
	DWORD			dwServiceType = 0; 
	INTERNET_PORT	port; 
 
	CString			csServer, 
					csObject; 
 
	return (AfxParseURL(szURL, dwServiceType, csServer, csObject, port) && 
			(dwServiceType == AFX_INET_SERVICE_FILE)); 
} 
 
bool file_DoesExist(const char *szFile) 
{ 
	HANDLE hExist = CreateFile(szFile, 
								0, 
								FILE_SHARE_DELETE|FILE_SHARE_READ| 
									FILE_SHARE_WRITE, 
								NULL, 
								OPEN_EXISTING, 
								0, 
								NULL); 
 
	bool bExist = (hExist != INVALID_HANDLE_VALUE); 
 
	if(bExist) 
		CloseHandle(hExist); 
 
	return bExist; 
} 
 
bool file_GetTime(const char *szFile, CTime &time) 
{ 
	HANDLE hFile = CreateFile(szFile, 
								0, 
								FILE_SHARE_DELETE|FILE_SHARE_READ| 
									FILE_SHARE_WRITE, 
								NULL, 
								OPEN_EXISTING, 
								0, 
								NULL); 
 
	if(hFile == INVALID_HANDLE_VALUE) 
		return false; 
 
	FILETIME	ftCreation, 
				ftLastAccess, 
				ftLastTime; 
 
	BOOL bRet = GetFileTime(hFile, &ftCreation, &ftLastAccess, &ftLastTime); 
 
	time = ftLastAccess; 
 
	CloseHandle(hFile); 
 
	return (bRet? true: false); 
} 
 
DWORD file_GetSize(const char *szFile) 
{ 
	HANDLE hFile = CreateFile(szFile, 
								0, 
								FILE_SHARE_DELETE|FILE_SHARE_READ| 
									FILE_SHARE_WRITE, 
								NULL, 
								OPEN_EXISTING, 
								0, 
								NULL); 
 
	if(hFile == INVALID_HANDLE_VALUE) 
		return 0; 
 
	DWORD dwSize = GetFileSize(hFile, NULL); 
 
	CloseHandle(hFile); 
 
	return dwSize; 
}