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

📄 embolog.cpp

📁 1,wince下做的导入注册表的程序.
💻 CPP
字号:
// Logger.cpp: implementation of the EmboLog class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "EmboLog.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////



EmboLog::~EmboLog()
{
}

void EmboLog::Write(const char *format, ...)
{
	char	buf1[1024]= {0};	
	char	buf2[1024]= {0};	

	if(!m_bLogEnable)
	{
		return;
	}

	va_list ap;        
	va_start(ap, format);
	// 取得格式串
	_vsnprintf(buf1, sizeof(buf1)/sizeof(char)-1, format, ap);	
	buf1[sizeof(buf1)/sizeof(char)-1]=0;

	// 将Log信息加上模块名
	if(m_szModuleName)			
	{						
		sprintf(buf2,"%s::", m_szModuleName);
		buf2[sizeof(buf2)/sizeof(char)-1]=0;
	}

	if(strlen(buf1) + strlen(buf2) < sizeof(buf1)/sizeof(char))
	{
		strcat(buf2, buf1);
	}
	else
	{
		strcpy(buf2, buf1);
	}

	// 写文件
	WriteToIO(buf2, strlen(buf2));
	va_end(ap);
}

void EmboLog::WriteToIO(char *content, DWORD dwNumOfByteToWrite)
{
	DWORD dwNumOfByteWritten	= 0;
	HANDLE	hLogFile			= 0;	

	if(!content || dwNumOfByteToWrite == 0)
	{
		return;
	}

	if((hLogFile = ::CreateFile(m_szLogFileName, GENERIC_WRITE | GENERIC_READ, 
		FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,
		FILE_FLAG_WRITE_THROUGH, 0))
		== INVALID_HANDLE_VALUE)
	{
		return;
	}

	// 将文件指针移动到文件尾
	::SetFilePointer(hLogFile, 0, 0, FILE_END);	
	::WriteFile(hLogFile, (LPCVOID)content, dwNumOfByteToWrite, 			
		&dwNumOfByteWritten, NULL);

	::FlushFileBuffers(hLogFile);

	CloseHandle(hLogFile);
}

BOOL EmboLog::GetRegLogEnable(BOOL *dwLogEnable)
{
	HKEY	hKey			= 0;
	DWORD	dwSize			= 8;
	DWORD	dwType			= 0;
	DWORD	dwLenOfBuf		= 0;	
	char	szbBuffer[8]	= {0};
	
	if(!dwLogEnable)
	{
		return FALSE;
	}

	if(
		::RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_KEY_EMBO_LOG_KEY, 0, 0, &hKey)
		!= ERROR_SUCCESS)	   
	{
		return FALSE;
	}

	if(::RegQueryValueEx(hKey, REG_KEY_EMBO_LOG_ENABLE, NULL, &dwType, (PBYTE)szbBuffer, &dwSize)
		!= ERROR_SUCCESS)  
	{		
		return FALSE;  
	}

	::RegCloseKey(hKey);

	if(dwType != REG_DWORD)
	{
		return FALSE;
	}
	
	*dwLogEnable = (BOOL)szbBuffer[0];
	return TRUE;
}

BOOL EmboLog::CheckLogTooLarge()
{
	HANDLE	hLog			= 0;	
	DWORD	dwSizeLow		= 0;
	BOOL	bRet			= FALSE;
	
	if((hLog = ::CreateFile(m_szLogFileName, GENERIC_WRITE | GENERIC_READ, 
		FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
		FILE_FLAG_WRITE_THROUGH, 0))
		== INVALID_HANDLE_VALUE)
	{
		return TRUE;
	}
	
	dwSizeLow = GetFileSize(hLog, NULL);
	CloseHandle(hLog);

	return (BOOL)(dwSizeLow >= m_dwLogMaxSize);
}


BOOL EmboLog::GetRegLogMaxSize(DWORD *dwLogMaxSize)
{		
	HKEY	hKey			= 0;
	DWORD	dwSize			= 8;
	DWORD	dwType			= 0;
	DWORD	dwLenOfBuf		= 0;	
	char	szbBuffer[8]	= {0};
	
	if(!dwLogMaxSize)
	{
		return FALSE;
	}

	if(
		::RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_KEY_EMBO_LOG_KEY, 0, 0, &hKey)
		!= ERROR_SUCCESS)	   
	{
		return FALSE;
	}

	if(::RegQueryValueEx(hKey, REG_KEY_EMBO_LOG_MAXSIZES, NULL, &dwType, (PBYTE)szbBuffer, &dwSize)
		!= ERROR_SUCCESS)  
	{		
		return FALSE;  
	}

	::RegCloseKey(hKey);

	if(dwType != REG_DWORD)
	{
		return FALSE;
	}
	
	*dwLogMaxSize |= (DWORD)szbBuffer[0] ;
	*dwLogMaxSize |= (DWORD)szbBuffer[1] << 8;
	*dwLogMaxSize |= (DWORD)szbBuffer[2] << 16;
	*dwLogMaxSize |= (DWORD)szbBuffer[3] << 24;

	return TRUE;
}

BOOL EmboLog::GetRegLogFileName(TCHAR *pszLogFileName)
{
	HKEY	hKey			= 0;
	DWORD	dwSize			= MAX_PATH;
	DWORD	dwType			= 0;
	DWORD	dwLenOfBuf		= 0;	
	char	szbBuffer[MAX_PATH]	= {0};
	
	if(!pszLogFileName)
	{
		return FALSE;
	}

	if(
		::RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_KEY_EMBO_LOG_KEY, 0, 0, &hKey)
		!= ERROR_SUCCESS)	   
	{
		return FALSE;
	}

	if(::RegQueryValueEx(hKey, REG_KEY_EMBO_LOG_LOGFILE, NULL, &dwType, (PBYTE)szbBuffer, &dwSize)
		!= ERROR_SUCCESS)  
	{		
		return FALSE;  
	}

	::RegCloseKey(hKey);

	if(dwType != REG_SZ)
	{
		return FALSE;
	}

	_tcsncpy((LPTSTR)pszLogFileName, (LPTSTR)szbBuffer, MAX_PATH);
	return TRUE;
}

BOOL EmboLog::GetRegSnPath(TCHAR *pszSnPath)
{
		HKEY	hKey			= 0;
	DWORD	dwSize			= MAX_PATH;
	DWORD	dwType			= 0;
	DWORD	dwLenOfBuf		= 0;	
	char	szbBuffer[MAX_PATH]	= {0};
	
	if(!pszSnPath)
	{
		return FALSE;
	}

	if(
		::RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_KEY_EMBO_SYS_KEY, 0, 0, &hKey)
		!= ERROR_SUCCESS)	   
	{
		return FALSE;
	}

	if(::RegQueryValueEx(hKey, REG_KEY_EMBO_SNPATH, NULL, &dwType, (PBYTE)szbBuffer, &dwSize)
		!= ERROR_SUCCESS)  
	{		
		return FALSE; 
	}

	::RegCloseKey(hKey);

	if(dwType != REG_SZ)
	{
		return FALSE;
	}

	_tcsncpy((LPTSTR)pszSnPath, (LPTSTR)szbBuffer, MAX_PATH);
	return TRUE;
}

EmboLog::EmboLog(char *pszModuleName)
{
	BOOL bEnable = FALSE;
	DWORD dwMaxSize = 0;
	TCHAR szFileName[MAX_PATH];	
	memset(m_szModuleName, 0, sizeof(m_szModuleName)/sizeof(char));	

	if(pszModuleName)
	{
		
		strncpy(m_szModuleName, pszModuleName, sizeof(m_szModuleName)/sizeof(char));
		m_szModuleName[sizeof(m_szModuleName)/sizeof(char)-1]=0;
	}
	
	// 设置默认值
	// 不写Log
	m_bLogEnable = FALSE;
	// Log文件最大为1024字节	
	m_dwLogMaxSize = 1024;
	// Log文件名
	_tcscpy((LPTSTR)m_szLogFileName, TEXT("EmboLog.txt"));

	// 从注册表取出相应值
	if(GetRegLogFileName((LPTSTR)szFileName))
	{
		// 避免溢出
		_tcsncpy(m_szLogFileName, szFileName, MAX_PATH-1);
		m_szLogFileName[MAX_PATH-1] = 0;
	}

	if(GetRegLogEnable(&bEnable))
	{
		m_bLogEnable = bEnable;
	}
	
	if(GetRegLogMaxSize(&dwMaxSize))
	{
		m_dwLogMaxSize = dwMaxSize;
	}

	// 取得SNPATH
	WCHAR *buffer = _wcsdup(m_szLogFileName);

	if(GetRegSnPath(szFileName))
	{
		if(szFileName[_tcslen(szFileName)-1] == '\\')
		{
			swprintf((LPWSTR)m_szLogFileName, L"%s%s", 
				(LPWSTR)szFileName,
				(LPWSTR)buffer);
		}
		else
		{
			
			swprintf((LPWSTR)m_szLogFileName, L"%s\\%s", 
				(LPWSTR)szFileName,
				(LPWSTR)buffer);
		}
	}

	free(buffer);

	// 检查Log文件是否过大,是则删除重建
	if(CheckLogTooLarge())
	{
		DeleteFile(m_szLogFileName);
	}

}

void EmboLog::Write(const WCHAR *format, ...)
{
	WCHAR	buf1[1024]= {0};	
	char	buf2[1024]= {0};
	char	buf3[1024]= {0};
	
	if(!m_bLogEnable)
	{
		return;
	}

	va_list ap;        
	va_start(ap, format);
	// 取得格式串
	_vsnwprintf(buf1, sizeof(buf1)/sizeof(WCHAR)-1, format, ap);	
	buf1[sizeof(buf1)/sizeof(WCHAR)-1]=0;

	wcstombs(buf3, buf1, sizeof(buf1)/sizeof(char));
	buf3[sizeof(buf1)/sizeof(char)-1]=0;

	// 将Log信息加上模块名
	if(m_szModuleName)
	{		
		sprintf(buf2, "%s::", m_szModuleName);
		buf2[sizeof(buf2)/sizeof(char)-1]=0;
	}
			
	if(strlen(buf3) + strlen(buf2) < sizeof(buf3)/sizeof(char))
	{
		strcat(buf2, buf3);
	}
	else
	{
		strcpy(buf2, buf3);
	}

	// 写文件
	WriteToIO(buf2, strlen(buf2));
	va_end(ap);
}

⌨️ 快捷键说明

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