青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

啤酒

一個空白者

 

帶有界面的“讀取日志”! 不知道哪位會作分析,算法不會呀!只讀沒意思呀

// Read_EventDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Read_Event.h"
#include "Read_EventDlg.h"
#include "DescriptionDiaLog.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////
//int event_auditsucceed_num;??//記錄審核成功記錄的個數
//int event_info_num;????//記錄信息記錄的個數
//int event_error_num;????//記錄錯誤記錄的個數?
//int event_warn_num;????//記錄警告記錄的個數
//int event_auditdefeat_num;??//記錄審核失敗的個數

//char *event_category;?????//事件類
//char *event_sourcename=NULL;???//事件來源
//char *event_computername=NULL;??//事件計算機名
//char *event_descriptive_msg=NULL;??//事件描述
//char event_el_user[257];????//事件用戶
//char event_el_domain[257];???//事件域
//char host_final_out_msg[1024];??//最后輸出的信息

FILE *fp;????????//保存的文件
int hh=0;????????//記錄類型的標志,用于位圖的選擇
int event_record=0;??????//事件記錄的個數
os_el el[1];
int nItem=0;???????//對于索引記錄的當前標志
int istype=0;???????//用于事件類型的標志
BOOL issub;????????//一個開關項
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
?CAboutDlg();

// Dialog Data
?//{{AFX_DATA(CAboutDlg)
?enum { IDD = IDD_ABOUTBOX };
?//}}AFX_DATA

?// ClassWizard generated virtual function overrides
?//{{AFX_VIRTUAL(CAboutDlg)
?protected:
?virtual void DoDataExchange(CDataExchange* pDX);??? // DDX/DDV support
?//}}AFX_VIRTUAL

// Implementation
protected:
?//{{AFX_MSG(CAboutDlg)
?//}}AFX_MSG
?DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
?//{{AFX_DATA_INIT(CAboutDlg)
?//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
?CDialog::DoDataExchange(pDX);
?//{{AFX_DATA_MAP(CAboutDlg)
?//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
?//{{AFX_MSG_MAP(CAboutDlg)
??// No message handlers
?//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRead_EventDlg dialog

CRead_EventDlg::CRead_EventDlg(CWnd* pParent /*=NULL*/)
?: CDialog(CRead_EventDlg::IDD, pParent)
{
?//{{AFX_DATA_INIT(CRead_EventDlg)
?m_mm_host_state = _T("");
?//}}AFX_DATA_INIT
?// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
?m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CRead_EventDlg::DoDataExchange(CDataExchange* pDX)
{
?CDialog::DoDataExchange(pDX);
?//{{AFX_DATA_MAP(CRead_EventDlg)
?DDX_Control(pDX, IDC_LIST, m_mm_host_ListCtrl);
?DDX_Text(pDX, IDC_STATE, m_mm_host_state);
?//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CRead_EventDlg, CDialog)
?//{{AFX_MSG_MAP(CRead_EventDlg)
?ON_WM_SYSCOMMAND()
?ON_WM_PAINT()
?ON_WM_QUERYDRAGICON()
?ON_BN_CLICKED(IDC_SECURE, OnSecure)
?ON_BN_CLICKED(IDC_SYSTEM, OnSystem)
?ON_BN_CLICKED(IDC_APPLICATION, OnApplication)
?ON_NOTIFY(NM_CLICK, IDC_LIST, OnClickList)
?ON_BN_CLICKED(IDC_DELETE, OnDelete)
?ON_BN_CLICKED(IDC_DETAIL, OnDetail)
?ON_BN_CLICKED(IDC_SAVE, OnSave)
?ON_BN_CLICKED(IDC_SAVEHARD, OnSave_Hard)
?//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRead_EventDlg message handlers

BOOL CRead_EventDlg::OnInitDialog()
{
?CDialog::OnInitDialog();

?// Add "About..." menu item to system menu.

?// IDM_ABOUTBOX must be in the system command range.
?ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
?ASSERT(IDM_ABOUTBOX < 0xF000);

?CMenu* pSysMenu = GetSystemMenu(FALSE);
?if (pSysMenu != NULL)
?{
??CString strAboutMenu;
??strAboutMenu.LoadString(IDS_ABOUTBOX);
??if (!strAboutMenu.IsEmpty())
??{
???pSysMenu->AppendMenu(MF_SEPARATOR);
???pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
??}
?}

?// Set the icon for this dialog.? The framework does this automatically
?//? when the application's main window is not a dialog
?SetIcon(m_hIcon, TRUE);???// Set big icon
?SetIcon(m_hIcon, FALSE);??// Set small icon
?
?// TODO: Add extra initialization here
?

//////////////////////////我加的///////////////////////

?issub=false;
?//給各項事件數目初始化
?Set_EventNum();???????

?m_mm_host_ListCtrl.SetRedraw(FALSE);
??? //更新內容
??? m_mm_host_ListCtrl.SetRedraw(TRUE);
??? m_mm_host_ListCtrl.Invalidate();
??? m_mm_host_ListCtrl.UpdateWindow();
?//刪除所有的列
?m_mm_host_ListCtrl.DeleteAllItems();


?//給圖表初始化
?Init_ImageList();
?//設置m_mm_host_ListCtrl風格
?LONG lStyle;
??? lStyle = GetWindowLong(m_mm_host_ListCtrl.m_hWnd, GWL_STYLE);//獲取當前窗口style
??? lStyle &= ~LVS_TYPEMASK; //清除顯示方式位
??? lStyle |= LVS_REPORT; //設置style
??? SetWindowLong(m_mm_host_ListCtrl.m_hWnd, GWL_STYLE, lStyle);//設置style
?
??? DWORD dwStyle = m_mm_host_ListCtrl.GetExtendedStyle();
??? dwStyle |= LVS_EX_FULLROWSELECT;//選中某行使整行高亮(只適用與report風格的listctrl)
??? dwStyle |= LVS_EX_GRIDLINES;//網格線(只適用與report風格的listctrl)
??? dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
?dwStyle |=LVS_EX_HEADERDRAGDROP;
?dwStyle |=LVS_EX_SUBITEMIMAGES;
??? m_mm_host_ListCtrl.SetExtendedStyle(dwStyle); //設置擴展風格


?//插入列
?m_mm_host_ListCtrl.InsertColumn(0,"日志序號",LVCFMT_CENTER,60,0);
?m_mm_host_ListCtrl.InsertColumn(1,"分類",LVCFMT_CENTER,80,4);
?m_mm_host_ListCtrl.InsertColumn(2,"來源",LVCFMT_CENTER,80,1);
?m_mm_host_ListCtrl.InsertColumn(3,"日期",LVCFMT_CENTER,80,2);
?m_mm_host_ListCtrl.InsertColumn(4,"時間",LVCFMT_CENTER,80,3);
?m_mm_host_ListCtrl.InsertColumn(5,"ID",LVCFMT_CENTER,50,5);
?m_mm_host_ListCtrl.InsertColumn(6,"用戶",LVCFMT_CENTER,120,6);
?m_mm_host_ListCtrl.InsertColumn(7,"計算機",LVCFMT_CENTER,120,7);
?m_mm_host_ListCtrl.InsertColumn(8,"描述",LVCFMT_CENTER,250,7);
//////////////////////////我加的///////////////////////


?return TRUE;? // return TRUE? unless you set the focus to a control
}

void CRead_EventDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
?if ((nID & 0xFFF0) == IDM_ABOUTBOX)
?{
??CAboutDlg dlgAbout;
??dlgAbout.DoModal();
?}
?else
?{
??CDialog::OnSysCommand(nID, lParam);
?}
}

// If you add a minimize button to your dialog, you will need the code below
//? to draw the icon.? For MFC applications using the document/view model,
//? this is automatically done for you by the framework.

void CRead_EventDlg::OnPaint()
{
?if (IsIconic())
?{
??CPaintDC dc(this); // device context for painting

??SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

??// Center icon in client rectangle
??int cxIcon = GetSystemMetrics(SM_CXICON);
??int cyIcon = GetSystemMetrics(SM_CYICON);
??CRect rect;
??GetClientRect(&rect);
??int x = (rect.Width() - cxIcon + 1) / 2;
??int y = (rect.Height() - cyIcon + 1) / 2;

??// Draw the icon
??dc.DrawIcon(x, y, m_hIcon);
?}
?else
?{
??CDialog::OnPaint();
?}
}

// The system calls this to obtain the cursor to display while the user drags
//? the minimized window.

HCURSOR CRead_EventDlg::OnQueryDragIcon()
{
?return (HCURSOR) m_hIcon;
}
///////////////////////////////////////////////////////////
void CRead_EventDlg::OnSecure()
{
?// TODO: Add your control notification handler code here
?UpdateData(TRUE);
?Set_EventNum();
?m_mm_host_state=_T("安全日志列表");
?Win_startel("Security");
?istype=1;
?UpdateData(FALSE);
}
////////////////////////////////////////////////////////////
void CRead_EventDlg::OnSystem()
{
?// TODO: Add your control notification handler code here
?UpdateData(TRUE);
?Set_EventNum();
?m_mm_host_state=_T("系統日志列表");
?Win_startel("System");
?istype=2;
?UpdateData(FALSE);
}
///////////////////////////////////////////////////////////
void CRead_EventDlg::OnApplication()
{
?// TODO: Add your control notification handler code here
?UpdateData(TRUE);
?Set_EventNum();
?m_mm_host_state=_T("應用日志列表");
?Win_startel("Application");
?istype=3;
?UpdateData(FALSE);
}
////////////////////////////////////////////////////////////
char* CRead_EventDlg::El_GetCategory(int category_id)
{
?//得到事件記錄的類型并且返回
?char *cat;
?if(!issub)
?{
??switch(category_id)
??{
???case EVENTLOG_AUDIT_SUCCESS:
????cat = "審核成功";
????event_auditsucceed_num++;
????hh=1;
????break;
???case EVENTLOG_INFORMATION_TYPE:
????cat = "信息";
????event_info_num++;
????hh=2;
????break;
???case EVENTLOG_ERROR_TYPE:
????cat = "錯誤";
????event_error_num++;
????hh=3;
????break;
???case EVENTLOG_WARNING_TYPE:
????cat = "警告";
????event_warn_num++;
????hh=4;
????break;
???case EVENTLOG_AUDIT_FAILURE:
????cat = "審核失敗";
????event_auditdefeat_num++;
????hh=5;
????break;
???default:
????cat = "Unknown";
????break;
??}
?}
?else
?{
??switch(category_id)
??{
???case EVENTLOG_AUDIT_SUCCESS:
????cat = "審核成功";
????hh=1;
????break;
???case EVENTLOG_INFORMATION_TYPE:
????cat = "信息";
????hh=2;
????break;
???case EVENTLOG_ERROR_TYPE:
????cat = "錯誤";
????hh=3;
????break;
???case EVENTLOG_WARNING_TYPE:
????cat = "警告";
????hh=4;
????break;
???case EVENTLOG_AUDIT_FAILURE:
????cat = "審核失敗";
????hh=5;
????break;
???default:
????cat = "Unknown";
????break;
??}
?}
???
??? return(cat);
}
////////////////////////////////////////////////////////////////
int CRead_EventDlg::El_getEventDLL(char *evt_name, char *event_sourcename1, char *event)
{
?HKEY key;
??? DWORD ret;
??? char keyname[256];


??? keyname[255] = '\0';

??? _snprintf(keyname, 254,
??????????? "System\\CurrentControlSet\\Services\\EventLog\\%s\\%s",
??????????? evt_name,
??????????? event_sourcename1);

??? // 打開注冊表Opening registry ????
??? if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyname, 0, KEY_ALL_ACCESS, &key)
??????????? != ERROR_SUCCESS)
??? {
??????? return(0);???
??? }


??? ret = MAX_PATH -1;?
??? if (RegQueryValueEx(key, "EventMessageFile", NULL,
??????????????? NULL, (LPBYTE)event, &ret) != ERROR_SUCCESS)
??? {
??????? event[0] = '\0';?
??????? return(0);
??? }

??? RegCloseKey(key);
??? return(1);
}
////////////////////////////////////////////////////////////////
char* CRead_EventDlg::El_GetMessage(EVENTLOGRECORD *er, char *event_name, char *event_sourcename2, LPTSTR *el_sstring)
{
?DWORD fm_flags = 0;
??? char tmp_str[257];
??? char event[MAX_PATH +1];
??? char *curr_str;
??? char *next_str;
??? LPSTR message = NULL;

??? HMODULE hevt;

??? // Initializing variables
??? event[MAX_PATH] = '\0';
??? tmp_str[256] = '\0';

??? //Flags for format event
??? fm_flags |= FORMAT_MESSAGE_FROM_HMODULE;
??? fm_flags |= FORMAT_MESSAGE_ALLOCATE_BUFFER;
??? fm_flags |= FORMAT_MESSAGE_ARGUMENT_ARRAY;

??? //Get the file name from the registry (stored on event)
??? if(!El_getEventDLL(event_name, event_sourcename2, event))
??? {
??????? return(NULL);????
??? }????

??? curr_str = event;

??? // If our event has multiple libraries, try each one of them?
??? while((next_str = strchr(curr_str, ';')))
??? {
??????? *next_str = '\0';
??????? next_str++;

??????? ExpandEnvironmentStrings(curr_str, tmp_str, 255);
??????? hevt = LoadLibraryEx(tmp_str, NULL, DONT_RESOLVE_DLL_REFERENCES);
??????? if(hevt)
??????? {
??????????? if(!FormatMessage(fm_flags, hevt, er->EventID,
??????????????????????? 0,
??????????????????????? (LPTSTR) &message, 0, el_sstring))
??????????? {
??????????????? message = NULL;???
??????????? }
??????????? FreeLibrary(hevt);

??????????? /* If we have a message, we can return it */
??????????? if(message)
??????????????? return(message);
??????? }

??????? curr_str = next_str;??
??? }

??? ExpandEnvironmentStrings(curr_str, tmp_str, 255);
??? hevt = LoadLibraryEx(tmp_str, NULL, DONT_RESOLVE_DLL_REFERENCES);
??? if(hevt)
??? {
??????? int hr;???
??????? if(!(hr = FormatMessage(fm_flags, hevt, er->EventID,
??????????????????????? 0,
??????????????????????? (LPTSTR) &message, 0, el_sstring)))
??????? {
??????????? message = NULL;???
??????? }
??????? FreeLibrary(hevt);

??????? /* If we have a message, we can return it */
??????? if(message)
??????????? return(message);
??? }

??? return(NULL);
}
/////////////////////////////////////////////////////////////////
BOOL CRead_EventDlg::Init_ImageList()
{
?//給圖表初始化設置
??HIMAGELIST hList = ImageList_Create(32,32, ILC_COLOR8 |ILC_MASK , 6, 1);
??m_cImageListNormal.Attach(hList);
?
??hList = ImageList_Create(16, 16, ILC_COLOR8 | ILC_MASK, 6, 1);
??m_cImageListSmall.Attach(hList);

??// Load the large icons
??CBitmap cBmp;
?
??cBmp.LoadBitmap(IDB_BITMAP1);
??m_cImageListNormal.Add(&cBmp, RGB(255,0, 255));
??cBmp.DeleteObject();
?
??// Load the small icons
??cBmp.LoadBitmap(IDB_BITMAP2);
??m_cImageListSmall.Add(&cBmp, RGB(255,0, 255));
?
??// Attach them
??m_mm_host_ListCtrl.SetImageList(&m_cImageListNormal, LVSIL_NORMAL);
??m_mm_host_ListCtrl.SetImageList(&m_cImageListSmall, LVSIL_SMALL);
?
??return TRUE;
}
///////////////////////////////////////////////////////////////
void CRead_EventDlg::Insert_Record()
{
?//在列表中插入列表項
?CString str;?
?LVITEM lvi;

?lvi.mask =? LVIF_TEXT;
?lvi.iItem = event_record;
?str.Format(_T("%d"),event_record+1);
?lvi.iSubItem = 0;
?lvi.pszText = (LPTSTR)(LPCTSTR)(str);
?m_mm_host_ListCtrl.InsertItem(&lvi);


?str.Format(_T("%s"), event_category);
?lvi.iSubItem = 1;
?lvi.mask =? LVIF_IMAGE | LVIF_TEXT;
?lvi.pszText = (LPTSTR)(LPCTSTR)(str);
?//選擇位圖??
?switch(hh)
?{
?case 0:
??lvi.iImage = 0;?
??break;
?case 1:
??lvi.iImage = 1;
??break;
?case 2:
??lvi.iImage = 2;
??break;
?case 3:
??lvi.iImage = 3;
??break;
?case 4:
??lvi.iImage = 4;
??break;
?default:
??lvi.iImage = 5;
??break;
?}
?
?m_mm_host_ListCtrl.SetItem(&lvi);

?//輸出來源??
?str.Format(_T("%s"),event_sourcename);
?lvi.iSubItem = 2;
?lvi.mask = LVIF_TEXT;
?lvi.pszText = (LPTSTR)(LPCTSTR)(str);
?m_mm_host_ListCtrl.SetItem(&lvi);
?//輸出日期??
?tm? *event_time = localtime((const? long? *)&el->er->TimeWritten);
?str.Format(_T("%4hd-%2hd-%2hd"),event_time->tm_year + 1900,event_time->tm_mon + 1,event_time->tm_mday);
?lvi.iSubItem = 3;
?lvi.pszText = (LPTSTR)(LPCTSTR)(str);
?m_mm_host_ListCtrl.SetItem(&lvi);
?//輸出時間??
?str.Format(_T("%.2hd:%.2hd:%.2hd"),event_time->tm_hour,event_time->tm_min,event_time->tm_sec);
?lvi.iSubItem = 4;
?lvi.pszText = (LPTSTR)(LPCTSTR)(str);
?m_mm_host_ListCtrl.SetItem(&lvi);

?//輸出ID
?str.Format(_T("%d"),(WORD)el->er->EventID);
?lvi.iSubItem = 5;
?lvi.pszText = (LPTSTR)(LPCTSTR)(str);
?m_mm_host_ListCtrl.SetItem(&lvi);
?//輸出用戶??
?str.Format(_T("%s/%s"),event_el_domain,event_el_user);
?lvi.iSubItem = 6;
?lvi.pszText = (LPTSTR)(LPCTSTR)(str);
?m_mm_host_ListCtrl.SetItem(&lvi);
?//輸出計算機??
?str.Format(_T("%s"),event_computername);
?lvi.iSubItem = 7;
?lvi.pszText = (LPTSTR)(LPCTSTR)(str);
?m_mm_host_ListCtrl.SetItem(&lvi);
?//輸出描述
?str.Format(_T("%s"),event_descriptive_msg);
?lvi.iSubItem = 8;
?lvi.pszText = (LPTSTR)(LPCTSTR)(str);
?m_mm_host_ListCtrl.SetItem(&lvi);
}
///////////////////////////////////////////////////////////////////////
void CRead_EventDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult)
{
?//當鼠標在類別中點擊時,返回被點中的記錄號
?// TODO: Add your control notification handler code here
?nItem = -1;
?LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR;

?if(lpNMItemActivate != NULL)
?{
??nItem = lpNMItemActivate->iItem+1;
?}
?
?*pResult = 0;
}
//////////////////////////////////////////////////////////////
void CRead_EventDlg::OnDelete()
{
?//刪除被選中的記錄
?// TODO: Add your control notification handler code here
?//判斷是否選擇了日志類型,如果沒有退出
?if ((istype!=1)&&(istype!=2)&&(istype!=3))
?{
??MessageBox("請選擇日志類型!","警告!",MB_OK|MB_ICONEXCLAMATION);
??return ;
?}
?//判斷是否選中了記錄,如果沒有退出
?if (nItem==0)
?{
??MessageBox("請選擇日志記錄!","警告!",MB_OK|MB_ICONEXCLAMATION);
??return ;
?}

?int i,iState;
?int nItemSelected=m_mm_host_ListCtrl.GetSelectedCount();//得到所選表項數
?int nItemCount=m_mm_host_ListCtrl.GetItemCount();//得到表項總數
?
?//如果沒有選中,退出
?if(nItemSelected<1)
?{
??MessageBox("請選擇日志記錄!","警告!",MB_OK|MB_ICONEXCLAMATION);?
??return; ?
?}

?//對選中的記錄進行刪除
?for(i=nItemCount-1;i>=0;i--)
?{

??iState=m_mm_host_ListCtrl.GetItemState(i,LVIS_SELECTED);

??if(iState!=0)
??{
???m_mm_host_ListCtrl.DeleteItem(i);
???nItem=0;
??}??
?}
?
?if (((istype!=1)&&(istype!=2)&&(istype!=3)))
?{
??MessageBox("請選擇日志類型!","警告!",MB_OK|MB_ICONEXCLAMATION);
??return ;
?}


}
//////////////////////////////////////////////////////////////////////
void CRead_EventDlg::OnDetail()
{
?//按鈕響應函數
?//判斷是否選中類型,沒有就退出
?if ((istype!=1)&&(istype!=2)&&(istype!=3))
?{
??MessageBox("請選擇日志類型!","警告!",MB_OK|MB_ICONEXCLAMATION);
??return ;
?}
?//判斷選中記錄,沒有就退出
?if (nItem==0)
?{
??MessageBox("請選擇日志記錄!","警告!",MB_OK|MB_ICONEXCLAMATION);
??return ;
?}
?//如果選中類型就調用DescriptionDiaLog對話框
?if ((istype==1)||(istype==2)||(istype==3))
?{
??DescriptionDiaLog DescriptionDlg;
??DescriptionDlg.DoModal();
?}
?
?else
?{
??MessageBox("請選擇日志類型!","警告!",MB_OK|MB_ICONINFORMATION);

??return ;
?}

?// TODO: Add your control notification handler code here

}
/////////////////////////////////////////////////////////////////////
void CRead_EventDlg::OnSave()
{
?// TODO: Add your control notification handler code here
?//對日志進行列表保存
?//判斷列表是否有記錄
?switch(istype)
?{
?case 1:
??break;
?case 2:
??break;
?case 3:
??break;
?default:
??MessageBox("請選擇日志類型","警告!",MB_OK|MB_ICONEXCLAMATION);
??return;
? ?}
?//得到列表中記錄的總數
?event_record=m_mm_host_ListCtrl.GetItemCount();
?//對日志進行保存
?//保存單個記錄
?CString sFileName;
?sFileName.Format("");

?CFileDialog dlg(FALSE, "txt", sFileName,
?????OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY,
?????"文本文件(*.txt)|*.txt|文本文件(*.doc)|*.doc||", this);?
?if (nItem!=0)
?{
??if(IDCANCEL == (MessageBox("您確定要保存一個日志記錄?","提示!",MB_OKCANCEL|MB_ICONQUESTION)))
??{
???nItem=0;
???return;
??}
??if (dlg.DoModal() == IDOK)
??{
???dlg.m_ofn.lpstrTitle = _T("保存日志記錄");
???CString fileName = dlg.GetPathName();
???fp = fopen(fileName,"w");
???Save_Single_Record(nItem);

??}
??nItem=0;
??return ;
?}

?///////////////////////////////////
?//保存整個列表記錄
?if(IDCANCEL==(MessageBox("您確定要保存日志文件?","提示!",MB_OKCANCEL|MB_ICONQUESTION)))
?{
??nItem=0;
??return;
?}


?if (dlg.DoModal() == IDOK)
?{
??dlg.m_ofn.lpstrTitle = _T("保存日志文件");
??CString fileName = dlg.GetPathName();

??fp = fopen(fileName,"w");
??switch(istype)
??{
??case 1:
???Save_Security();
???break;
??case 2:
???Save_System();
???break;
??case 3:
???Save_Application();
???break;
??default:
???MessageBox("請選擇日志類型","警告!",MB_OK|MB_ICONEXCLAMATION);
???return;
? ??}

?}
}
//////////////////////////////////////////////////////////////////////
void CRead_EventDlg::Read_event(os_el *el, int printit)
{
?//讀取日志
?DWORD nstr;
??? DWORD user_size;
??? DWORD domain_size;
??? DWORD read, needed;
??? int size_left;
??? int str_size;

??? char *mbuffer[BUFFER_SIZE];
??? LPSTR sstr = NULL;
?//int i=0;
?char *tmp_str = NULL;


?char el_string[1025];
??? LPSTR el_sstring[57];

??? //Er must point to the mbuffer
??? el->er = (EVENTLOGRECORD *) &mbuffer;

??? /* Zeroing the last values */
??? el_string[1024] = '\0';
??? event_el_user[256] = '\0';
??? event_el_domain[256] = '\0';
??? host_final_out_msg[1023] = '\0';
??? el_sstring[56] = NULL;
?//判斷是否有記錄
?if( my_host_IsListCtrl == true)
?{
??my_host_IsListCtrl = false;
??m_mm_host_ListCtrl.DeleteAllItems();
?}

??? //讀日志記錄???
??? while(ReadEventLog(el->h,
??????????????? EVENTLOG_FORWARDS_READ | EVENTLOG_SEQUENTIAL_READ,
??????????????? 0,
??????????????? el->er, BUFFER_SIZE -1, &read, &needed))
??? {

??????? while(read > 0)
??????? {


???//得到事件的類型
??????????? event_category = El_GetCategory(el->er->EventType);
???//得到事件來源
??????????? event_sourcename = (LPSTR) ((LPBYTE) el->er + sizeof(EVENTLOGRECORD));
???//得到計算機名
??????????? event_computername = event_sourcename + strlen(event_sourcename) + 1;
???//給描述信息初始化
??????????? event_descriptive_msg = NULL;


??????????? // 初始化domain/user尺寸
??????????? user_size = 255; domain_size = 255;
??????????? event_el_domain[0] = '\0';
??????????? event_el_user[0] = '\0';

???
??????????? // 設置事件的一些描述
??????????? if(el->er->NumStrings)
??????????? {?
??????????????? size_left = 1020;?

??????????????? sstr = (LPSTR)((LPBYTE)el->er + el->er->StringOffset);
??????????????? el_string[0] = '\0';

??????????????? for (nstr = 0;nstr < el->er->NumStrings;nstr++)
??????????????? {
??????????????????? str_size = strlen(sstr);?
??????????????????? strncat(el_string, sstr, size_left);

??????????????????? tmp_str= strchr(el_string, '\0');
??????????????????? if(tmp_str)
??????????????????? {
??????????????????????? *tmp_str = ' ';??
??????????????????????? tmp_str++; *tmp_str = '\0';
??????????????????? }
??????????????????? size_left-=str_size + 1;

??????????????????? if(nstr <= 54)
??????????????????????? el_sstring[nstr] = (LPSTR)sstr;

??????????????????? sstr = strchr( (LPSTR)sstr, '\0');
??????????????????? sstr++;
?????
??????????????? }

??????????????? // 得到事件描述
??????????????? event_descriptive_msg = El_GetMessage(el->er, el->event_name, event_sourcename, el_sstring);
??????????????? if(event_descriptive_msg != NULL)
??????????????? {
?????????????????
??????????????????? tmp_str = event_descriptive_msg;???
??????????????????? while((tmp_str = strchr(tmp_str, '\n')))
??????????????????? {
??????????????????????? *tmp_str = ' ';
??????????????????????? tmp_str++;?????????
??????????????????? }???

??????????????????? tmp_str = event_descriptive_msg;???
??????????????????? while((tmp_str = strchr(tmp_str, '\r')))
??????????????????? {
??????????????????????? *tmp_str = ' ';
??????????????????????? tmp_str++;
??????//strchr(tmp_str, '\n');
??????????????????? }???
??????????????? }
??????????? }
??????????? else
??????????? {
??????????????? strncpy(el_string, "(no message)", 1020);?
??????????? }
??????????? // 得到username
??????????? if (el->er->UserSidLength)
??????????? {
??????????????? SID_NAME_USE account_type;
??????????????? if(!LookupAccountSid(NULL, (SID *)((LPSTR)el->er + el->er->UserSidOffset),
??????????????????????????? event_el_user, &user_size, event_el_domain, &domain_size, &account_type))??
??????????????? {
??????????????????? strncpy(event_el_user, "(no user)", 255);
??????????????????? strncpy(event_el_domain, "no domain", 255);
??????????????? }

??????????? }

??????????? else
??????????? {
??????????????? strncpy(event_el_user, "A", 255);?
??????????????? strncpy(event_el_domain, "N", 255);?
??????????? }
???
???/////////////////////////////////////
???//插入列表
???Insert_Record();
???////////////////////////////////////
???
??????????? if(event_descriptive_msg != NULL)
??????????????? LocalFree(event_descriptive_msg);

??????????? // Changing the point to the er
???//i++;
???event_record++;
??????????? read -= el->er->Length;
??????????? el->er = (EVENTLOGRECORD *)((LPBYTE) el->er + el->er->Length);
???
??????? }?
??my_host_IsListCtrl = true;
??
??CString strlove;
??//輸出事件個數
??strlove.Format("%d",event_record);
??GetDlgItem(IDC_EVENTNUM)->SetWindowText(strlove);
??//輸出事件錯誤個數
??strlove.Format("%d",event_error_num);
??GetDlgItem(IDC_ERRORNUM)->SetWindowText(strlove);
??//輸出事件信息個數
??strlove.Format("%d",event_info_num);
??GetDlgItem(IDC_INFONUM)->SetWindowText(strlove);
??//輸出事件警告個數
??strlove.Format("%d",event_warn_num);
??GetDlgItem(IDC_WARNNUM)->SetWindowText(strlove);
??//輸出事件審核成功個數??
??strlove.Format("%d",event_auditsucceed_num);
??GetDlgItem(IDC_AUDITSUCCEEDNUM)->SetWindowText(strlove);
??//輸出事件審核失敗個數??
??strlove.Format("%d",event_auditdefeat_num);
??GetDlgItem(IDC_AUDITDEFEATNUM)->SetWindowText(strlove);

??????? // Setting er to the beginning of the buffer?
??????? el->er = (EVENTLOGRECORD *)&mbuffer;??
??? }
?event_record=0;
}
///////////////////////////////////////////////////////////////////////////
void CRead_EventDlg::Set_EventNum()
{?
?//給記錄數字初始化
?event_record=0;
?event_auditsucceed_num=0;
?event_info_num=0;
?event_error_num=0;
?event_warn_num=0;
?event_auditdefeat_num=0;

}
///////////////////////////////////////////////////////////////////
int CRead_EventDlg::Start_EL(char *app, os_el *el)
{

?el->h = OpenEventLog(NULL, app);
??? if(!el->h)
??? {
??????? return(0);????
??? }

??? el->event_name = app;
??? GetOldestEventLogRecord(el->h, &el->record);

??? return(1);
}
////////////////////////////////////////////////////////////////////////
void CRead_EventDlg::Win_startel(char *eventlog)
{
?Start_EL(eventlog,el);
??? Read_event(el,1);
}
////////////////////////////////////////////////////////////////////
void CRead_EventDlg::Save_event(os_el *el, int printit)
{
?event_record=0;
?DWORD nstr;
??? DWORD user_size;
??? DWORD domain_size;
??? DWORD read, needed;
??? int size_left;
??? int str_size;

??? char *mbuffer[BUFFER_SIZE];
??? LPSTR sstr = NULL;
?//int i=0;
?char *tmp_str = NULL;
?
??? char el_string[1025];
??? char final_out_msg[1024];??//最后輸出的信息
??? LPSTR el_sstring[57];

??? /* Er must point to the mbuffer */
??? el->er = (EVENTLOGRECORD *) &mbuffer;

??? // Zeroing the last values
??? el_string[1024] = '\0';
??? event_el_user[256] = '\0';
??? event_el_domain[256] = '\0';
??? final_out_msg[1023] = '\0';
??? el_sstring[56] = NULL;

??? // Reading the event log ????
??? while(ReadEventLog(el->h,
??????????????? EVENTLOG_FORWARDS_READ | EVENTLOG_SEQUENTIAL_READ,
??????????????? 0,
??????????????? el->er, BUFFER_SIZE -1, &read, &needed))
??? {
??????? while(read > 0)
??????? {
???//得到事件的類型
??????????? event_category = El_GetCategory(el->er->EventType);
???//得到事件來源
??????????? event_sourcename = (LPSTR) ((LPBYTE) el->er + sizeof(EVENTLOGRECORD));
???//得到計算機名
??????????? event_computername = event_sourcename + strlen(event_sourcename) + 1;
???//給描述信息初始化
??????????? event_descriptive_msg = NULL;


??????????? //初始化domain/user尺寸
??????????? user_size = 255; domain_size = 255;
??????????? event_el_domain[0] = '\0';
??????????? event_el_user[0] = '\0';


??????????? // 設置事件的一些描述
??????????? if(el->er->NumStrings)
??????????? {?
??????????????? size_left = 1020;?

??????????????? sstr = (LPSTR)((LPBYTE)el->er + el->er->StringOffset);
??????????????? el_string[0] = '\0';

??????????????? for (nstr = 0;nstr < el->er->NumStrings;nstr++)
??????????????? {
??????????????????? str_size = strlen(sstr);?
??????????????????? strncat(el_string, sstr, size_left);

??????????????????? tmp_str= strchr(el_string, '\0');
??????????????????? if(tmp_str)
??????????????????? {
??????????????????????? *tmp_str = ' ';??
??????????????????????? tmp_str++; *tmp_str = '\0';
??????????????????? }
??????????????????? size_left-=str_size + 1;

??????????????????? if(nstr <= 54)
??????????????????????? el_sstring[nstr] = (LPSTR)sstr;

??????????????????? sstr = strchr( (LPSTR)sstr, '\0');
??????????????????? sstr++;
?????
??????????????? }

??????????????? //Get a more descriptive message (if available)
??????????????? event_descriptive_msg = El_GetMessage(el->er, el->event_name, event_sourcename, el_sstring);
??????????????? if(event_descriptive_msg != NULL)
??????????????? {
??????????????????? // Remove any \n or \r
??????????????????? tmp_str = event_descriptive_msg;???
??????????????????? while((tmp_str = strchr(tmp_str, '\n')))
??????????????????? {
??????????????????????? *tmp_str = ' ';
??????????????????????? tmp_str++;
???????????
??????????????????? }???

??????????????????? tmp_str = event_descriptive_msg;???
??????????????????? while((tmp_str = strchr(tmp_str, '\r')))
??????????????????? {
??????????????????????? *tmp_str = ' ';
??????????????????????? tmp_str++;
??????//strchr(tmp_str, '\n');

??????????????????? }???
??????????????? }
??????????? }
??????????? else
??????????? {
??????????????? strncpy(el_string, "(no message)", 1020);?
??????????? }


??????????? // 得到username
??????????? if (el->er->UserSidLength)
??????????? {
??????????????? SID_NAME_USE account_type;
??????????????? if(!LookupAccountSid(NULL, (SID *)((LPSTR)el->er + el->er->UserSidOffset),
??????????????????????????? event_el_user, &user_size, event_el_domain, &domain_size, &account_type))??
??????????????? {
??????????????????? strncpy(event_el_user, "(no user)", 255);
??????????????????? strncpy(event_el_domain, "no domain", 255);
??????????????? }

??????????? }

??????????? else
??????????? {
??????????????? strncpy(event_el_user, "A", 255);?
??????????????? strncpy(event_el_domain, "N", 255);?
??????????? }

??????????? if(printit)
??????????? {
??????????????? tm?? *event_time?? =?? localtime((const?? long?? *)&el->er->TimeWritten);

??????????????? _snprintf(final_out_msg, 1022,
??????????????????????? "事件記錄序號:%d\n事件:%s\n日期:%.4hd-%2hd-%2hd\n時間:%.2hd:%.2hd:%.2hd\n事件類型:%s\n事件來源:%s\n事件ID:(%u)\n用戶:%s/%s\n計算機:%s\n描述:\n%s\n\n\n",
??????event_record,
??????el->event_name,
??????event_time->tm_year + 1900,
??????event_time->tm_mon + 1,
??????event_time->tm_mday,
??????event_time->tm_hour,
??????event_time->tm_min,
??????event_time->tm_sec,?
??????
??????????????????????? event_category,
??????event_sourcename,
???????????????????????
??????????????????????? (WORD)el->er->EventID,
??????????????????????? event_el_domain,
??????????????????????? event_el_user,
???????????????????????
??????event_computername,
??????????????????????? event_descriptive_msg != NULL?event_descriptive_msg:el_string);?
??????????????
??????? ?fprintf(fp, "%s\n", final_out_msg);?
??????????? }

??????????? if(event_descriptive_msg != NULL)
??????????????? LocalFree(event_descriptive_msg);

??????????? // Changing the point to the er
??????????? read -= el->er->Length;
??????????? el->er = (EVENTLOGRECORD *)((LPBYTE) el->er + el->er->Length);
???event_record++;
??????? }??

??????? // Setting er to the beginning of the buffer ?
??????? el->er = (EVENTLOGRECORD *)&mbuffer;
??
??? }
}
//////////////////////////////////////////////////////////////////////

void CRead_EventDlg::Save_Application()
{
?//從列表中保存應用日志
?if(!fp)
?{
??MessageBox("怎么沒打開呢!","警告!",MB_OK|MB_ICONEXCLAMATION);
??exit(1);
?}
?else
?{
??MessageBox("應用日志文件打開了!","信息!",MB_OK|MB_ICONINFORMATION);
?}

?fprintf(fp, "\n\n***********應用日志列表***********\n\n\n");
?Save_List(1,event_record);

?fclose(fp);
?if(fclose(fp))
?{
??MessageBox("應用日志文件關閉了!","信息!",MB_OK|MB_ICONINFORMATION);?
?}
?else
?{
??MessageBox("還開著呢了,,抓緊關它吧!","錯誤!",MB_OK|MB_ICONSTOP);??

?}

}
//////////////////////////////////////////////////////////////////

void CRead_EventDlg::Save_Security()
{
?//從列表中保存安全日志
?if(!fp)
?{
??MessageBox("怎么沒打開呢!","警告!",MB_OK|MB_ICONEXCLAMATION);

??exit(1);
?}
?else
?{
??
??MessageBox("安全日志文件打開了!","信息!",MB_OK|MB_ICONINFORMATION);

?}


?fprintf(fp, "\n\n***********安全日志列表***********\n\n\n");?

?Save_List(1,event_record);

?fclose(fp);
?if(fclose(fp))
?{
??MessageBox("安全日志文件關閉了!","信息!",MB_OK|MB_ICONINFORMATION);
?}
?else
?{
??MessageBox("還開著呢了,,抓緊關它吧!","錯誤!",MB_OK|MB_ICONSTOP);
?}

}
////////////////////////////////////////////////////
void CRead_EventDlg::Save_System()
{
?//從列表中保存系統日志
?if(!fp)
?{
??MessageBox("怎么沒打開呢!","警告!",MB_OK|MB_ICONEXCLAMATION);
??exit(1);
?}
?else
?{
??MessageBox("系統日志文件打開了!","信息!",MB_OK|MB_ICONINFORMATION);
?}
?fprintf(fp, "\n\n***********系統日志列表***********\n\n\n");?

?Save_List(1,event_record);

?fclose(fp);
?if(fclose(fp))
?{
??MessageBox("系統日志文件關閉了!","信息!",MB_OK|MB_ICONINFORMATION);??
?}
?else
?{
??MessageBox("還開著呢了,,抓緊關它吧!","錯誤!",MB_OK|MB_ICONSTOP);
?}

}
/////////////////////////////////////////////////////////////////////////
void CRead_EventDlg::Save_Single_Record(int single_record)
{
?//從列表中保存單個記錄
?if(!fp)
?{
??MessageBox("怎么沒打開呢!","警告!",MB_OK|MB_ICONEXCLAMATION);??
??exit(1);
?}
?else
?{
??MessageBox("一個記錄正要保存了!","信息!",MB_OK|MB_ICONINFORMATION);??
?}

?fprintf(fp, "\n\n***********第%d記錄***********\n\n\n",nItem);
?
?Save_List(single_record,single_record);


?fclose(fp);
?if(fclose(fp))
?{
??MessageBox("日志記錄關閉了!","信息!",MB_OK|MB_ICONINFORMATION);?
?}
?else
?{
??MessageBox("還有一個記錄開著呢!","錯誤!",MB_OK|MB_ICONSTOP);??
?}
}
/////////////////////////////////////////////////////////////////////
void CRead_EventDlg::Save_List(int record_initialize, int record_num)
{
?//保存列表記錄
?CString save_event_record;
?CString save_event_category;
?CString save_event_sourcename;
?CString save_event_date;
?CString save_event_time;
?CString save_event_id;
?CString save_event_user;
?CString save_event_computername;
?CString save_event_descriptive_msg;
?CString save_event_name;
?
?switch(istype)
?{
?case 1:
??save_event_name="Security";
??break;
?case 2:
??save_event_name="System";
??break;
?case 3:
??save_event_name="Application";
??break;
?default:
??return;
? ?}

?for(int i=record_initialize-1;i<record_num;i++)
?{
??save_event_record=m_mm_host_ListCtrl.GetItemText(i,0);
??save_event_category=m_mm_host_ListCtrl.GetItemText(i,1);
??save_event_sourcename=m_mm_host_ListCtrl.GetItemText(i,2);
??save_event_date=m_mm_host_ListCtrl.GetItemText(i,3);
??save_event_time=m_mm_host_ListCtrl.GetItemText(i,4);
??save_event_id=m_mm_host_ListCtrl.GetItemText(i,5);
??save_event_user=m_mm_host_ListCtrl.GetItemText(i,6);
??save_event_computername=m_mm_host_ListCtrl.GetItemText(i,7);
??save_event_descriptive_msg=m_mm_host_ListCtrl.GetItemText(i,8);
??fprintf(fp, "事件記錄序號:%s\n事件:%s\n日期:%s\n時間:%s\n類型:%s\n事件來源:%s\n事件ID:%s\n用戶:%s\n計算機:%s\n描述:\n%s\n\n\n\n",
????save_event_record,
????save_event_name,
????save_event_date,
????save_event_time,
????save_event_category,
????save_event_sourcename,
????save_event_id,
????save_event_user,
????save_event_computername,
????save_event_descriptive_msg);

?}

}
////////////////////////////////////////////////////
void CRead_EventDlg::Save_Hard_Application()
{
?//從系統中保存應用日志
?if(!fp)
?{
??MessageBox("怎么沒打開呢!","警告!",MB_OK|MB_ICONEXCLAMATION);
??exit(1);
?}
?else
?{
??MessageBox("應用日志文件打開了!","信息!",MB_OK|MB_ICONINFORMATION);
?}

?fprintf(fp, "\n\n***********應用日志列表***********\n\n\n");
?
?Start_EL("application",el);
?Save_event(el, 1);
?
?fclose(fp);
?if(fclose(fp))
?{
??MessageBox("應用日志文件關閉了!","信息!",MB_OK|MB_ICONINFORMATION);?
?}
?else
?{
??MessageBox("還開著呢了,,抓緊關它吧!","錯誤!",MB_OK|MB_ICONSTOP);??

?}

}
////////////////////////////////////////////////////////////////////


void CRead_EventDlg::Save_Hard_Security()
{
?//從系統中保存安全記錄
?if(!fp)
?{
??MessageBox("怎么沒打開呢!","警告!",MB_OK|MB_ICONEXCLAMATION);

??exit(1);
?}
?else
?{
??
??MessageBox("安全日志文件打開了!","信息!",MB_OK|MB_ICONINFORMATION);

?}


?fprintf(fp, "\n\n***********安全日志列表***********\n\n\n");?

?Start_EL("Security",el);
?Save_event(el, 1);

?fclose(fp);
?if(fclose(fp))
?{
??MessageBox("安全日志文件關閉了!","信息!",MB_OK|MB_ICONINFORMATION);
?}
?else
?{
??MessageBox("還開著呢了,,抓緊關它吧!","錯誤!",MB_OK|MB_ICONSTOP);
?}
}
//////////////////////////////////////////////////////////////
void CRead_EventDlg::Save_Hard_System()
{
?//從系統中保存系統日志
?if(!fp)
?{
??MessageBox("怎么沒打開呢!","警告!",MB_OK|MB_ICONEXCLAMATION);
??exit(1);
?}
?else
?{
??MessageBox("系統日志文件打開了!","信息!",MB_OK|MB_ICONINFORMATION);
?}

?fprintf(fp, "\n\n***********系統日志列表***********\n\n\n");?

?Start_EL("System",el);
?Save_event(el, 1);

?fclose(fp);
?if(fclose(fp))
?{
??MessageBox("系統日志文件關閉了!","信息!",MB_OK|MB_ICONINFORMATION);??
?}
?else
?{
??MessageBox("還開著呢了,,抓緊關它吧!","錯誤!",MB_OK|MB_ICONSTOP);
?}

}
/////////////////////////////////////////////////////////////////

void CRead_EventDlg::OnSave_Hard()
{
?//從系統中保存記錄的響應函數
?// TODO: Add your control notification handler code here
?switch(istype)
?{
?case 1:
??break;
?case 2:
??break;
?case 3:
??break;
?default:
??MessageBox("請選擇日志類型","警告!",MB_OK|MB_ICONEXCLAMATION);
??return;
? ?}

?CString sFileName;
?sFileName.Format("");

?CFileDialog dlg(FALSE, "txt", sFileName,
?????OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY,
?????"文本文件(*.txt)|*.txt|文本文件(*.doc)|*.doc||", this);?

?/////////////////////////////////////////
?//從系統中保存整個日志
?if(IDCANCEL==(MessageBox("您確定要從系統中保存日志文件?","提示!",MB_OKCANCEL|MB_ICONQUESTION)))
?{
??nItem=0;
??return;
?}

?if (dlg.DoModal() == IDOK)
?{
??dlg.m_ofn.lpstrTitle = _T("從系統中保存日志文件");
??CString fileName = dlg.GetPathName();

??fp = fopen(fileName,"w");
??switch(istype)
??{
??case 1:
???Save_Hard_Security();
???break;
??case 2:
???Save_Hard_System();
???break;
??case 3:
???Save_Hard_Application();
???break;
??default:
???MessageBox("請選擇日志類型","警告!",MB_OK|MB_ICONEXCLAMATION);
???return;
? ??}
?}
?nItem=0;
?
}
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
// DescriptionDiaLog.cpp : implementation file
//

#include "stdafx.h"
#include "Read_Event.h"
#include "DescriptionDiaLog.h"
#include "Read_EventDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern int istype;
extern int nItem;
extern int event_record;
extern CString m_mm_host_state;
extern os_el el[1];
extern BOOL issub;
BOOL isShow=FALSE;
/////////////////////////////////////////////////////////////////////////////
// DescriptionDiaLog dialog


DescriptionDiaLog::DescriptionDiaLog(CWnd* pParent /*=NULL*/)
?: CDialog(DescriptionDiaLog::IDD, pParent)
{
?//{{AFX_DATA_INIT(DescriptionDiaLog)
?m_sub_event_computername = _T("");
?//}}AFX_DATA_INIT
}


void DescriptionDiaLog::DoDataExchange(CDataExchange* pDX)
{
?CDialog::DoDataExchange(pDX);
?//{{AFX_DATA_MAP(DescriptionDiaLog)
?DDX_Text(pDX, IDC_SBUEVENTCOMPUTERNAME, m_sub_event_computername);
?//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(DescriptionDiaLog, CDialog)
?//{{AFX_MSG_MAP(DescriptionDiaLog)
?ON_BN_CLICKED(IDC_SHOW, OnShow)
?ON_BN_CLICKED(IDC_PRESHOW, OnPreshow)
?ON_BN_CLICKED(IDC_NEXTSHOW, OnNextshow)
?//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// DescriptionDiaLog message handlers

BOOL DescriptionDiaLog::OnInitDialog()
{
?CDialog::OnInitDialog();
?
?// TODO: Add extra initialization here
?issub=true;
?return TRUE;? // return TRUE unless you set the focus to a control
?????????????? // EXCEPTION: OCX Property Pages should return FALSE
}
//////////////////////////////////////////////////////////
void DescriptionDiaLog::Sub_Prepare()
{

?char *m_sub_cTemp;
?switch(istype)
?{
?case 1:
??m_sub_cTemp ="Security";
??break;
?case 2:
??m_sub_cTemp ="System";
??break;
?default:
??m_sub_cTemp ="application";
?}
?Sub_Show(nItem);
}
///////////////////////////////////////////////////////
void DescriptionDiaLog::OnShow()
{
?//顯示記錄內容
?// TODO: Add your control notification handler code here
?//判斷是否有記錄被選中
?if (nItem==0)
?{
??MessageBox("錯了!","錯誤!",MB_OK|MB_ICONSTOP);
??CDialog::OnOK();
?}
?//如果是選中的是列表中第一條記錄,向前觀察按鈕失效
?if(nItem==1)
?{
??GetDlgItem(IDC_PRESHOW)->EnableWindow(FALSE);
??GetDlgItem(IDC_NEXTSHOW)->EnableWindow(TRUE);
?}
?//如果是選中的是列表中最后一條記錄,向后觀察按鈕失效
?if(nItem==event_record)
?{
??GetDlgItem(IDC_PRESHOW)->EnableWindow(TRUE);
??GetDlgItem(IDC_NEXTSHOW)->EnableWindow(FALSE);
?}
?Sub_Prepare();
?isShow=TRUE;
}
///////////////////////////////////////////////////////////
void DescriptionDiaLog::OnPreshow()
{?
?//向前觀察按鈕響應函數
?// TODO: Add your control notification handler code here
?if (!isShow)
?{
??MessageBox("請回去選擇記錄!","警告!",MB_OK|MB_ICONEXCLAMATION);
??CDialog::OnOK();
?}
?nItem--;
?//如果是選中的是列表中第一條記錄,向前觀察按鈕失效
?if(nItem==1)
?{
??GetDlgItem(IDC_PRESHOW)->EnableWindow(FALSE);
?}
?GetDlgItem(IDC_NEXTSHOW)->EnableWindow(TRUE);
?Sub_Prepare();

}
//////////////////////////////////////////////////////////////////
void DescriptionDiaLog::OnNextshow()
{?
?//向后觀察按鈕
?// TODO: Add your control notification handler code here
?nItem++;
?//如果是選中的是列表中最后一條記錄,向后觀察按鈕失效
?if(nItem==event_record)
?{
??GetDlgItem(IDC_NEXTSHOW)->EnableWindow(FALSE);
?}
?GetDlgItem(IDC_PRESHOW)->EnableWindow(TRUE);
?Sub_Prepare();

}
//////////////////////////////////////////////////////////////

void DescriptionDiaLog::OnOK()
{
?// TODO: Add extra validation here
?nItem=0;
?CDialog::OnOK();
}

void DescriptionDiaLog::OnCancel()
{
?// TODO: Add extra cleanup here
?nItem=0;
?CDialog::OnCancel();
}
////////////////////////////////////////////////////////////////
void DescriptionDiaLog::Sub_Show(int sub_nItem)
{
?//顯示詳細記錄按鈕的響應函數
?CRead_EventDlg* dlg = (CRead_EventDlg *)AfxGetMainWnd();
?CString sub_event;

?//事件序列
?sub_event=dlg->m_mm_host_ListCtrl.GetItemText(sub_nItem-1,0);
?GetDlgItem(IDC_SBUEVENTRECORD)->SetWindowText(sub_event);
?//事件類型
?sub_event=dlg->m_mm_host_ListCtrl.GetItemText(sub_nItem-1,1);
?GetDlgItem(IDC_SBUEVENTCATEGORY)->SetWindowText(sub_event);
?//事件來源
?sub_event=dlg->m_mm_host_ListCtrl.GetItemText(sub_nItem-1,2);
?GetDlgItem(IDC_SUBEVENTSOURCENAME)->SetWindowText(sub_event);
?//事件日期
?sub_event=dlg->m_mm_host_ListCtrl.GetItemText(sub_nItem-1,3);
?GetDlgItem(IDC_SUBEVENTDATA)->SetWindowText(sub_event);
?//事件時間
?sub_event=dlg->m_mm_host_ListCtrl.GetItemText(sub_nItem-1,4);
?GetDlgItem(IDC_SBUEVENTTIME)->SetWindowText(sub_event);
?//事件ID
?sub_event=dlg->m_mm_host_ListCtrl.GetItemText(sub_nItem-1,5);
?GetDlgItem(IDC_SBUEVENTID)->SetWindowText(sub_event);
?//用戶
?sub_event=dlg->m_mm_host_ListCtrl.GetItemText(sub_nItem-1,6);
?GetDlgItem(IDC_SBUEVENTUSERNAME)->SetWindowText(sub_event);
?//計算機
?sub_event=dlg->m_mm_host_ListCtrl.GetItemText(sub_nItem-1,7);
?GetDlgItem(IDC_SBUEVENTCOMPUTERNAME)->SetWindowText(sub_event);
?//詳細描述
?sub_event=dlg->m_mm_host_ListCtrl.GetItemText(sub_nItem-1,8);
?GetDlgItem(IDC_EDIT_SBUEVENTMESSAGE)->SetWindowText(sub_event);
?
?switch(istype)
?{
?case 1:
??sub_event="Security";
??break;
?case 2:
??sub_event="System";
??break;
?case 3:
??sub_event="Application";
??break;
?default:
??MessageBox("請選擇日志類型!","警告!",MB_OK|MB_ICONEXCLAMATION);
??return;
? ?}
?//事件
?GetDlgItem(IDC_SUBEVENT)->SetWindowText(sub_event);

}
/////////////////////////////////////////////////////////////////

posted on 2006-09-07 14:37 啤酒 閱讀(827) 評論(0)  編輯 收藏 引用

導航

統計

常用鏈接

留言簿(2)

隨筆檔案

收藏夾

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产激情| 欧美国产精品久久| 欧美一区二区精品| 亚洲一区二区免费在线| 国产精品日产欧美久久久久| 亚洲欧美日韩中文播放| 亚洲欧美影院| 国产亚洲一本大道中文在线| 欧美一级免费视频| 久久久久在线观看| 日韩视频在线观看| 在线视频你懂得一区| 国产一区二区看久久| 欧美成人一区二区| 欧美精品尤物在线| 欧美一激情一区二区三区| 久热精品视频在线免费观看 | 在线综合+亚洲+欧美中文字幕| 亚洲黑丝在线| 国产精品裸体一区二区三区| 欧美一区二区黄| 久久av一区| 欧美日韩国产欧| 久久在线免费观看| 国产精品亚洲精品| 亚洲激情黄色| 亚洲国产一区视频| 欧美主播一区二区三区美女 久久精品人 | 一区二区三区欧美激情| 国模吧视频一区| 午夜欧美视频| 亚洲一区二区三区久久| 欧美精品久久99久久在免费线| 久久精品免费看| 国产伦精品一区| 欧美一区二区三区久久精品 | 最新成人av网站| 亚洲裸体在线观看| 欧美三级韩国三级日本三斤| 亚洲国产综合在线看不卡| 亚洲黄色三级| 欧美日韩高清在线一区| 99在线观看免费视频精品观看| 99精品视频免费在线观看| 欧美区在线播放| 亚洲视频一二| 欧美 日韩 国产精品免费观看| 在线电影欧美日韩一区二区私密| 久久国产欧美日韩精品| 亚洲电影免费观看高清| 亚洲欧美激情一区| 伊人久久噜噜噜躁狠狠躁 | 99re66热这里只有精品4| 亚洲国产mv| 欧美四级伦理在线| 久久国产精品99国产| 91久久精品久久国产性色也91| 一区二区三区 在线观看视| 国产精品专区h在线观看| 久久嫩草精品久久久精品一| 99国产精品视频免费观看一公开| 久久精品女人| 亚洲校园激情| 一本色道久久综合亚洲精品婷婷| 国产人成一区二区三区影院| 欧美第一黄色网| 久久久99精品免费观看不卡| 一本到高清视频免费精品| 美乳少妇欧美精品| 欧美在线国产| 亚洲伊人一本大道中文字幕| 亚洲免费观看高清在线观看 | 亚洲国产精品va在线观看黑人| 亚洲欧美日本日韩| 亚洲视频你懂的| 亚洲网站在线观看| 亚洲视频第一页| 亚洲少妇自拍| 欧美一级久久久久久久大片| 午夜精品999| 欧美影视一区| 久久黄色小说| 欧美刺激性大交免费视频 | 欧美日韩精品二区| 欧美日韩久久久久久| 欧美吻胸吃奶大尺度电影| 欧美一区二区黄色| 欧美性大战久久久久久久| 亚洲婷婷在线| 欧美大片免费久久精品三p | 伊人久久大香线蕉综合热线 | 蜜乳av另类精品一区二区| 日韩视频―中文字幕| 久久综合给合久久狠狠狠97色69| 欧美中文字幕视频| 亚洲人成艺术| 久久成人一区| 欧美激情精品久久久久久变态| 亚洲精品日日夜夜| 香蕉久久久久久久av网站| 欧美成人精品一区二区三区| 国产精品av久久久久久麻豆网| 国产欧美日韩一区二区三区| 亚洲精品色婷婷福利天堂| 欧美在线视频一区| 日韩视频不卡| 欧美成人精品| 一区二区亚洲精品国产| 欧美一区二区成人| 宅男精品导航| 国产精品99一区| 亚洲一区www| 一区二区三区欧美日韩| 欧美日本中文字幕| 99re66热这里只有精品4| 欧美成人精品影院| 久久精品99无色码中文字幕| 国产精品三上| 亚洲欧美日韩在线综合| 中文亚洲欧美| 国产精品海角社区在线观看| 日韩视频不卡| 中文亚洲视频在线| 国产欧美精品xxxx另类| 久久国产日韩| 亚洲午夜一区二区| 亚洲天堂av综合网| 国产伦精品一区二区三区四区免费 | 国产精品爱啪在线线免费观看 | 欧美mv日韩mv国产网站| 久久精品综合网| 亚洲第一精品影视| 亚洲精品一区二区三区婷婷月| 欧美日韩三级在线| 欧美一级片一区| 欧美福利视频在线观看| 午夜精品www| 欧美v日韩v国产v| 午夜激情亚洲| 欧美成人一区二区三区片免费| 亚洲一区www| 欧美激情网站在线观看| 欧美在线3区| 欧美激情一二三区| 久久精精品视频| 欧美午夜不卡在线观看免费| 免费成人av资源网| 国产欧美一区二区视频| 最新成人在线| 亚洲春色另类小说| 香蕉成人伊视频在线观看| 亚洲一区二区精品在线| 欧美大片第1页| 欧美激情在线观看| 亚洲电影欧美电影有声小说| 欧美亚洲自偷自偷| 午夜精品区一区二区三| 欧美日韩精品一区二区| 亚洲国产精品成人久久综合一区| 韩国一区二区三区在线观看| 亚洲女爱视频在线| 午夜精品国产更新| 日韩一级裸体免费视频| 亚洲国产成人av好男人在线观看| 午夜视频一区在线观看| 欧美一区二区三区日韩| 国产精品美女999| 午夜精品福利一区二区三区av| 欧美一区二区三区四区视频| 亚洲精品久久久久久久久| 午夜日韩电影| 久久精品国产一区二区电影| 国产综合色在线| 美日韩丰满少妇在线观看| 亚洲国产精品悠悠久久琪琪| 日韩视频永久免费观看| 欧美午夜片在线观看| 亚洲一区二区三区中文字幕| 久久精品视频99| 亚洲黄一区二区三区| 欧美日韩国产综合视频在线观看| 一本色道婷婷久久欧美| 鲁大师影院一区二区三区| 亚洲美女一区| 国产午夜精品全部视频播放| 欧美www视频| 久久aⅴ国产欧美74aaa| 亚洲国产精品久久| 欧美一级日韩一级| 一本久道久久综合狠狠爱| 国产一区二区三区日韩| 欧美视频免费在线| 蜜桃av综合| 欧美专区第一页| 亚洲宅男天堂在线观看无病毒| 免费亚洲一区二区| 美日韩免费视频| 久久综合伊人| 欧美在线一二三| 亚洲淫片在线视频|