Click here to Skip to main content
15,886,799 members
Articles / Programming Languages / C++

WindowsNT Event Log Viewer

Rate me:
Please Sign up or sign in to vote.
3.38/5 (12 votes)
30 Nov 19992 min read 265.1K   5.6K   39  
#include "SysMain.h"
#include "_GlobalVars.h"
#include "_Constants.h"
#include "_Utils.h"
#include "_ExtraResources.h"

LRESULT CALLBACK
SysMain_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	LRESULT lResult = 0;
	
	switch(uMsg)
	{
		case WM_CREATE:
			OnCreate(hWnd, wParam, lParam, &lResult);
			break;

		case WM_SYSCOMMAND:
			ComboBox_ShowDropdown(g_hComboToolbarWnd, FALSE);
			lResult = DefFrameProc(hWnd, g_hMDIClientWnd, uMsg, wParam, lParam);
			break;

		case WM_MDIACTIVATE:		
			break;

		case WM_MDICREATE:
			break;

		case WM_LBUTTONDBLCLK:
			SendMessage(g_hToolBarWnd, TB_CUSTOMIZE, 0L, 0L);
			break;

		case WM_CLOSE:
			OnClose(hWnd, &lResult);
			return lResult;
			break;

		case WM_SIZE:
			if(g_hToolBarWnd)
				lResult = SendMessage(g_hToolBarWnd, TB_AUTOSIZE, 0L, 0L);
			OnSize(hWnd, wParam, lParam, &lResult);
			break;

		case WM_COMMAND:
			OnCommand(hWnd, wParam, lParam, &lResult);
			break;

		case WM_NOTIFY:
			OnNotify(hWnd, wParam, lParam, &lResult);
			break;

		default:
			OnIdle(hWnd, &lResult);
			lResult = DefFrameProc(hWnd, g_hMDIClientWnd, uMsg, wParam, lParam);
			break;
	}
	
	return lResult;
}

LRESULT *
OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam, LRESULT *plResult)
{
	OnCreateMDIClient(hWnd, plResult);
	return plResult;

	_UNREFERENCED_PARAMETER_(wParam);
	_UNREFERENCED_PARAMETER_(lParam);
}

LRESULT *
OnSize(HWND hWnd, WPARAM wParam, LPARAM lParam, LRESULT *plResult)
{
	RECT rc, rcTlb;

	if(g_hToolBarWnd)
		GetWindowRect(g_hToolBarWnd, &rcTlb);
	else
		rcTlb.left = rcTlb.top = rcTlb.right = rcTlb.bottom = 0;

	GetClientRect(hWnd, &rc);
	MoveWindow
		(
			g_hMDIClientWnd, 
			rc.left, 
			rc.top + (rcTlb.bottom - rcTlb.top), 
			rc.right - rc.left, 
			rc.bottom - rc.top - (rcTlb.bottom - rcTlb.top) - 4,
			TRUE
		);

	*plResult = 0;
	return plResult;

	_UNREFERENCED_PARAMETER_(wParam);
	_UNREFERENCED_PARAMETER_(lParam);
}

LRESULT *
OnCreateMDIClient(HWND hWnd, LRESULT *plResult)
{
	CLIENTCREATESTRUCT  ccs;
	RECT rc;

	GetClientRect(hWnd, &rc);

	ccs.hWindowMenu = GetSubMenu(GetMenu(hWnd), IDM_WINDOWMENU);
	ccs.idFirstChild = IDM_MDICHILD;

	g_hMDIClientWnd = 
		CreateWindowEx
			(
				0L, 
				g_lpcszMDIClientWindowClassName, 
				0,
				WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL, 
				0,
				0,
				rc.right - rc.left,
				rc.bottom - rc.top,
				hWnd, 
				(HMENU)IDW_MDICLIENT, 
				g_hInstance, 
				(LPSTR)&ccs
			);

	ShowWindow(g_hMDIClientWnd, SW_SHOW);
	UpdateWindow(g_hMDIClientWnd);

	*plResult = 0;
	return plResult;
}

LRESULT*
OnClose(HWND hWnd, LRESULT *plResult)
{
	*plResult = 0;
	PostQuitMessage(0);
	return plResult;

	_UNREFERENCED_PARAMETER_(hWnd);
}

LRESULT*
OnCloseAll(HWND hWnd, LRESULT *plResult)
{
	HWND hWndTemp;

	hWnd = hWnd;

	ShowWindow(g_hMDIClientWnd, SW_HIDE);
	do
	{
		hWndTemp = GetWindow(g_hMDIClientWnd, GW_CHILD);
		
		if(!hWndTemp)
			break;

		SendMessage(g_hMDIClientWnd, WM_MDIDESTROY, (WPARAM)hWndTemp, 0);

	}while(hWndTemp);

	ShowWindow(g_hMDIClientWnd, SW_SHOW);

	*plResult = 0;
	return plResult;
}

LRESULT *
OnCommand(HWND hWnd, WPARAM wParam, LPARAM lParam, LRESULT *plResult)
{
	WORD wCode = LOWORD(wParam);

	switch(wCode)
	{
		// toolbar messages
		case ID_TBCMD_APPLICATION:
			OnApplication(hWnd, plResult);
			break;
		case ID_TBCMD_SYSTEM:
			OnSystem(hWnd, plResult);
			break;
		case ID_TBCMD_SECURITY:
			OnSecurity(hWnd, plResult);
			break;
		case ID_TBCMD_CUSTOM:
			OnCustom(hWnd, plResult);
			break;
		case ID_TBCMD_OPEN:
			OnOpen(hWnd, plResult);
			break;
		case ID_TBCMD_SAVE:
			OnSave(hWnd, plResult);
			break;
		case ID_TBCMD_BACKUP:
			OnBackup(hWnd, plResult);
			break;

		// menu messages
		case IDM_WINDOW_TILEHORZ:
			SendMessage(g_hMDIClientWnd, WM_MDITILE, (WPARAM)MDITILE_HORIZONTAL, 0);
			break;
		case IDM_WINDOW_TILEVERT:
			SendMessage(g_hMDIClientWnd, WM_MDITILE, (WPARAM)MDITILE_VERTICAL, 0);
			break;
		case IDM_WINDOW_CASCADE:
			SendMessage(g_hMDIClientWnd, WM_MDICASCADE, 0, 0);
			break;
		case IDM_WINDOW_ARRANGEICONS:
			SendMessage(g_hMDIClientWnd, WM_MDIICONARRANGE, 0, 0);
			break;
		case IDM_WINDOW_CLOSEALL:
			OnCloseAll(hWnd, plResult);
			break;
		case IDM_WINDOW_DATAWINDOW:
			if(g_hDataWnd)
				SendMessage(g_hMDIClientWnd, WM_MDIACTIVATE, (WPARAM)g_hDataWnd, 0);
			break;

		default:
			*plResult = DefFrameProc(hWnd, g_hMDIClientWnd, WM_COMMAND, wParam, lParam);
			break;
	}

	return plResult;
}

LRESULT *
OnNotify(HWND hWnd, WPARAM wParam, LPARAM lParam, LRESULT *plResult)
{
	UINT uNotifyCode = ((LPNMHDR)lParam)->code;

	switch(uNotifyCode)
	{
		//	Toolbar
		case TTN_NEEDTEXT:
			OnNeedText(hWnd, lParam, plResult);
			*plResult = 0;
			break;

        case TBN_QUERYDELETE:
            *plResult = 1;
            break;

        case TBN_GETBUTTONINFO:
            *plResult = 0;
            break;

        case TBN_QUERYINSERT:
            *plResult = 1;
            break;

        case TBN_CUSTHELP:
            break;

		case TBN_TOOLBARCHANGE:
			*plResult = SendMessage(g_hToolBarWnd, TB_AUTOSIZE, 0L, 0L);
			break;

		default:
			*plResult = 0;
			break;
	}

	return plResult;

	_UNREFERENCED_PARAMETER_(wParam);
}

LRESULT *
OnNeedText(HWND hWnd, LPARAM lParam, LRESULT *plResult)
{
    ((LPTOOLTIPTEXT)lParam)->hinst = g_hInstance;
    ((LPTOOLTIPTEXT)lParam)->lpszText = (LPTSTR)((LPTOOLTIPTEXT)lParam)->hdr.idFrom;

	*plResult = 0;
	return plResult;

	_UNREFERENCED_PARAMETER_(hWnd);
}

LRESULT *
OnApplication(HWND hWnd, LRESULT *plResult)
{
	*plResult = 0;
	g_fApplication = !g_fApplication;
	
	if(g_fApplication)
	{
		g_fApplication	= TRUE;
		g_fSystem		= FALSE;
		g_fSecurity		= FALSE;
		g_fCustom		= FALSE;

		AdjustTypeEventToolbarButtons();
	}
	
	return plResult;

	_UNREFERENCED_PARAMETER_(hWnd);
}

LRESULT *
OnSystem(HWND hWnd, LRESULT *plResult)
{
	*plResult = 0;
	g_fSystem = !g_fSystem;
	
	if(g_fSystem)
	{
		g_fApplication	= FALSE;
		g_fSystem		= TRUE;
		g_fSecurity		= FALSE;
		g_fCustom		= FALSE;

		AdjustTypeEventToolbarButtons();
	}
	
	return plResult;

	_UNREFERENCED_PARAMETER_(hWnd);
}

LRESULT *
OnSecurity(HWND hWnd, LRESULT *plResult)
{
	*plResult = 0;
	g_fSecurity = !g_fSecurity;
	
	if(g_fSecurity)
	{
		g_fApplication	= FALSE;
		g_fSystem		= FALSE;
		g_fSecurity		= TRUE;
		g_fCustom		= FALSE;

		AdjustTypeEventToolbarButtons();
	}
	
	return plResult;

	_UNREFERENCED_PARAMETER_(hWnd);
}

LRESULT *
OnCustom(HWND hWnd, LRESULT *plResult)
{
	*plResult = 0;
	g_fCustom = !g_fCustom;
	
	if(g_fCustom)
	{
		g_fApplication	= FALSE;
		g_fSystem		= FALSE;
		g_fSecurity		= FALSE;
		g_fCustom		= TRUE;

		AdjustTypeEventToolbarButtons();
	}

	return plResult;

	_UNREFERENCED_PARAMETER_(hWnd);
}

LRESULT*
OnOpen(HWND hWnd, LRESULT *plResult)
{
	MDICREATESTRUCT mdics;
	HWND hWndChild; 
	TCHAR lpszBuffer[_MAX_PATH + 1], lpszCaption[_MAX_PATH + 1], lpszMachineName[_MAX_PATH + 1], *lpszFileName = 0;
	BOOL fHasPrec = FALSE, fCreated = TRUE;

	ComboBox_GetLBText(g_hComboToolbarWnd, ComboBox_GetCurSel(g_hComboToolbarWnd), lpszMachineName);

	_stprintf(lpszCaption, "Event Log on %s - ", lpszMachineName);
	if(g_fApplication)
	{
		_stprintf(lpszBuffer, "%s%s", fHasPrec ? ", " : "", "Application"); 
		_tcscat(lpszCaption, lpszBuffer);
		fHasPrec = TRUE;
	}
	if(g_fSecurity)
	{
		_stprintf(lpszBuffer, "%s%s", fHasPrec ? ", " : "", "Security"); 
		_tcscat(lpszCaption, lpszBuffer);
		fHasPrec = TRUE;
	}
	if(g_fSystem)
	{
		_stprintf(lpszBuffer, "%s%s", fHasPrec ? ", " : "", "System"); 
		_tcscat(lpszCaption, lpszBuffer);
		fHasPrec = TRUE;
	}
	if(g_fCustom)
	{
		_stprintf(lpszBuffer, "%s%s", fHasPrec ? ", " : "", "Custom"); 
		_tcscat(lpszCaption, lpszBuffer);
		fHasPrec = TRUE;

		MessageBox(hWnd, _T("This feature is currently under construction and not(yet) available."), 0, MB_OK | MB_ICONINFORMATION);

		return plResult;

		fCreated = GetCustomLogFileName((TCHAR **)&lpszFileName);
	}

	mdics.szClass	= g_lpcszChildWindowClassName;
	mdics.szTitle	= lpszCaption;
	mdics.x			= CW_USEDEFAULT;
	mdics.y			= CW_USEDEFAULT;
	mdics.cx		= CW_USEDEFAULT;
	mdics.cy		= CW_USEDEFAULT;
	mdics.hOwner	= g_hInstance;
	mdics.style		= g_hWndActiveChild && IsZoomed(g_hWndActiveChild) ? WS_MAXIMIZE : 0;

	if(!g_fCustom)
		mdics.lParam = 0;
	else
	{
		if(!fCreated)
		{
			*plResult = 1;
			return plResult;
		}

		mdics.lParam = (LPARAM)(LPCTSTR)lpszFileName;
	}

	hWndChild = (HWND)SendMessage(g_hMDIClientWnd, WM_MDICREATE, 0, (LPARAM)(LPMDICREATESTRUCT)&mdics);
	if(hWndChild)
	{
		g_hWndActiveChild = hWndChild;
		SendMessage(g_hMDIClientWnd, WM_MDIACTIVATE, (WPARAM)hWndChild, 0);
	}

	*plResult = 0;
	return plResult;

	_UNREFERENCED_PARAMETER_(hWnd);
}

LRESULT *
OnSave(HWND hWnd, LRESULT *plResult)
{
	//	save using diferent formats

	*plResult = 0;
	return plResult;

	_UNREFERENCED_PARAMETER_(hWnd);
}

LRESULT*
OnBackup(HWND hWnd, LRESULT *plResult)
{
	HANDLE hEventLog = 0;
	TCHAR lpUNCServerName[_MAX_PATH + 1], lpszEventLogSourceName[_MAX_PATH + 1], lpszComputerName[1024];
	TCHAR *szCaptionDiff;
	TCHAR *lpszBackupFileName = 0;
	TCHAR szFmt[128], szMsg[1024];

	MessageBox(hWnd, _T("This feature is currently under construction and not(yet) available."), 0, MB_OK | MB_ICONINFORMATION);
	return plResult;

	//	get computer name
	{
		GetWindowText(g_hWndActiveChild, lpszComputerName, 1024);
		szCaptionDiff = lpszComputerName + strlen(_T("Event Log on ")) * sizeof(TCHAR);
		szCaptionDiff = _tcstok(szCaptionDiff, _T(" "));
		wsprintf(lpUNCServerName, _T("\\\\%s"), szCaptionDiff);
	}

	//	get source type
	if(g_fApplication)
		_tcscpy(lpszEventLogSourceName, _T("Application"));				//	APPLICATION
	else if(g_fSystem)
		_tcscpy(lpszEventLogSourceName, _T("System"));					//	SYSTEM
	else if(g_fSecurity)
		_tcscpy(lpszEventLogSourceName, _T("Security"));				//	SECURITY
	else
		_tcscpy(lpszEventLogSourceName, _T("Application"));				//	defaulting to APPLICATION

	hEventLog = OpenEventLog((LPCTSTR)lpUNCServerName, (LPCTSTR)lpszEventLogSourceName);
	if(hEventLog)
	{
		if(GetBackupLogFileName(&lpszBackupFileName))
		{
			if(BackupEventLog(hEventLog, (LPCTSTR)lpszBackupFileName))
			{
				LoadString(g_hInstance, IDS_BACKUPFMT_SUCCESS, szFmt, 128);
				_stprintf(szMsg, szFmt, szCaptionDiff, lpszBackupFileName);
			}
			else
			{
				LoadString(g_hInstance, IDS_BACKUPFMT_FAIL, szFmt, 128);
				_stprintf(szMsg, szFmt, szCaptionDiff);
			}

			{
				TCHAR pszErrMsg[1024];
				ReportLastError(pszErrMsg, 0, TRUE);
			}

			MessageBox(0, szMsg, _T("WindowsNT Event Log"), MB_OK | MB_ICONINFORMATION);

			GlobalFree(lpszBackupFileName);
			lpszBackupFileName = 0;
		}

		CloseEventLog(hEventLog);
		hEventLog = 0;
	}

	*plResult = 0;
	return plResult;

	_UNREFERENCED_PARAMETER_(hWnd);
}

LRESULT *
OnIdle(HWND hWnd, LRESULT *plResult)
{
	OnUpdateOpen(hWnd, plResult);
	OnUpdateSave(hWnd, plResult);
	OnUpdateBackup(hWnd, plResult);

	*plResult = 0;
	return plResult;
}

LRESULT* 
OnUpdateOpen(HWND hWnd, LRESULT *plResult)
{
	BOOL fSelected;

	if(!g_hComboToolbarWnd || !g_hToolBarWnd)
	{
		*plResult = 1;
		return plResult;
	}

	fSelected = ComboBox_GetCurSel(g_hComboToolbarWnd) > 0 ? TRUE : FALSE;

	if(!g_fApplication && !g_fSystem && !g_fSecurity && !g_fCustom)
	{
		TBBUTTONINFO tbi;
		tbi.cbSize = sizeof(TBBUTTONINFO);
		tbi.dwMask = TBIF_STATE; 
		
		if(SendMessage(g_hToolBarWnd, TB_GETBUTTONINFO, (WPARAM)(int)ID_TBCMD_OPEN, (LPARAM)(LPTBBUTTONINFO)&tbi) != -1)
		{
			if(tbi.fsState & TBSTATE_ENABLED)
			{
				tbi.fsState &= ~TBSTATE_ENABLED;
				SendMessage(g_hToolBarWnd, TB_SETBUTTONINFO, (WPARAM)(int)ID_TBCMD_OPEN, (LPARAM)(LPTBBUTTONINFO)&tbi);
			}
		}
	}
	else
	{
		TBBUTTONINFO tbi;
		tbi.cbSize = sizeof(TBBUTTONINFO);
		tbi.dwMask = TBIF_STATE; 

		if(SendMessage(g_hToolBarWnd, TB_GETBUTTONINFO, (WPARAM)(int)ID_TBCMD_OPEN, (LPARAM)(LPTBBUTTONINFO)&tbi) != -1)
		{
			if(fSelected)
			{
				if(~(tbi.fsState & TBSTATE_ENABLED))
				{
					tbi.fsState |= TBSTATE_ENABLED;
					SendMessage(g_hToolBarWnd, TB_SETBUTTONINFO, (WPARAM)(int)ID_TBCMD_OPEN, (LPARAM)(LPTBBUTTONINFO)&tbi);
				}
			}
			else
			{
				if(tbi.fsState & TBSTATE_ENABLED)
				{
					tbi.fsState &= ~TBSTATE_ENABLED;
					SendMessage(g_hToolBarWnd, TB_SETBUTTONINFO, (WPARAM)(int)ID_TBCMD_OPEN, (LPARAM)(LPTBBUTTONINFO)&tbi);
				}
			}
		}
	}

	*plResult = 0;
	return plResult;

	_UNREFERENCED_PARAMETER_(hWnd);
}

LRESULT* 
OnUpdateSave(HWND hWnd, LRESULT *plResult)
{
	BOOL fEnabled;

	if(!IsWindow(g_hMDIClientWnd))
		fEnabled = FALSE;
	else
		fEnabled = GetWindow(g_hMDIClientWnd, GW_CHILD) != 0 ? TRUE : FALSE;

	if(IsWindow(g_hToolBarWnd))
	{
		TBBUTTONINFO tbi;
		tbi.cbSize = sizeof(TBBUTTONINFO);
		tbi.dwMask = TBIF_STATE; 

		if(SendMessage(g_hToolBarWnd, TB_GETBUTTONINFO, (WPARAM)(int)ID_TBCMD_SAVE, (LPARAM)(LPTBBUTTONINFO)&tbi) != -1)
		{
			if(!fEnabled)
			{
				if(tbi.fsState & TBSTATE_ENABLED)
				{
					tbi.fsState &= ~TBSTATE_ENABLED;
					SendMessage(g_hToolBarWnd, TB_SETBUTTONINFO, (WPARAM)(int)ID_TBCMD_SAVE, (LPARAM)(LPTBBUTTONINFO)&tbi);
				}
			}
			else if(~(tbi.fsState & TBSTATE_ENABLED))
			{
				tbi.fsState |= TBSTATE_ENABLED;
				SendMessage(g_hToolBarWnd, TB_SETBUTTONINFO, (WPARAM)(int)ID_TBCMD_SAVE, (LPARAM)(LPTBBUTTONINFO)&tbi);
			}
		}
	}

	*plResult = 0;
	return plResult;

	_UNREFERENCED_PARAMETER_(hWnd);
}

LRESULT*
OnUpdateBackup(HWND hWnd, LRESULT *plResult)
{
	BOOL fEnabled;

	if(!IsWindow(g_hMDIClientWnd))
		fEnabled = FALSE;
	else
		fEnabled = GetWindow(g_hMDIClientWnd, GW_CHILD) != 0 ? TRUE : FALSE;

	if(IsWindow(g_hToolBarWnd))
	{
		TBBUTTONINFO tbi;
		tbi.cbSize = sizeof(TBBUTTONINFO);
		tbi.dwMask = TBIF_STATE; 

		if(SendMessage(g_hToolBarWnd, TB_GETBUTTONINFO, (WPARAM)(int)ID_TBCMD_BACKUP, 
			(LPARAM)(LPTBBUTTONINFO)&tbi) != -1)
		{
			if(!fEnabled)
			{
				if(tbi.fsState & TBSTATE_ENABLED)
				{
					tbi.fsState &= ~TBSTATE_ENABLED;
					SendMessage(g_hToolBarWnd, TB_SETBUTTONINFO, (WPARAM)(int)ID_TBCMD_BACKUP, 
						(LPARAM)(LPTBBUTTONINFO)&tbi);
				}
			}
			else if(~(tbi.fsState & TBSTATE_ENABLED))
			{
				tbi.fsState |= TBSTATE_ENABLED;
				SendMessage(g_hToolBarWnd, TB_SETBUTTONINFO, (WPARAM)(int)ID_TBCMD_BACKUP, 
					(LPARAM)(LPTBBUTTONINFO)&tbi);
			}
		}
	}

	*plResult = 0;
	return plResult;

	_UNREFERENCED_PARAMETER_(hWnd);
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Romania Romania
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions