// LogViewView.cpp : CLogViewView Ŭ·¡½ºÀÇ ±¸Çö // #include "stdafx.h" #include "LogView.h" #include "LogViewDoc.h" #include "LogViewView.h" #include "PathData.h" #include "LogManager.h" #include "MemoryManager.h" #include "LogViewOption.h" #include "PathSettingDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CLogViewView IMPLEMENT_DYNCREATE(CLogViewView, CFormView) BEGIN_MESSAGE_MAP(CLogViewView, CFormView) ON_WM_CREATE() ON_WM_DESTROY() ON_WM_TIMER() ON_BN_CLICKED(IDC_CHECK_AutoScroll, &CLogViewView::OnBnClickedCheckAutoscroll) ON_CBN_SELCHANGE(IDC_COMBO_ViewLevel, &CLogViewView::OnCbnSelchangeComboViewlevel) ON_COMMAND(ID_Option_LogSave, &CLogViewView::OnOptionLogsave) ON_BN_CLICKED(IDC_Button_MapSave, &CLogViewView::OnBnClickedButtonMapsave) ON_COMMAND(ID_LogPathSetting, &CLogViewView::OnLogpathsetting) ON_CBN_SELCHANGE(IDC_COMBO_LogID, &CLogViewView::OnCbnSelchangeComboLogid) ON_WM_SIZE() END_MESSAGE_MAP() // CLogViewView »ý¼º/¼Ò¸ê CLogViewView::CLogViewView() : CFormView(CLogViewView::IDD) , m_bAutoScroll(TRUE) , m_nViewLevel(0) , m_bKillTimer(false) , m_nListPrintCount(100) , m_nViewLogIndex(0) , m_ComboViewLastLogID(0) { //¸â¹ö º¯¼ö ÃʱâÈ­ m_nIndex = 0; m_nLogSaveDelay = 1000; m_nMemoryMapReadDelay = 10; m_nCommandReadDelay = 1000; m_nProcessID = 0; m_nLogSaveLevel = 4; m_pPathData = new CPathData(); /*for( int i = 0; i < LV_FCOUNT; i++) { m_nLogID[i] = -1; m_strLogPath[i] = _T(""); m_strLogName[i] = _T(""); }*/ m_strDefaultPath = _T(""); } CLogViewView::~CLogViewView() { //·Î±× View ¼Ò¸ê if(m_pLogManager != NULL) delete m_pLogManager; m_pLogManager = NULL; if(m_pPathData != NULL) delete m_pPathData; m_pPathData = NULL; //·Î±× ¸Þ¸ð¸® Å¥ ¼Ò¸ê for(int i = 0; i < LV_FCOUNT; i++) { if(m_pMemoryManager[i] != NULL) delete m_pMemoryManager[i]; m_pMemoryManager[i] = NULL; } } // CLogViewView Áø´Ü #ifdef _DEBUG void CLogViewView::AssertValid() const { CFormView::AssertValid(); } void CLogViewView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } CLogViewDoc* CLogViewView::GetDocument() const // µð¹ö±×µÇÁö ¾ÊÀº ¹öÀüÀº ÀζóÀÎÀ¸·Î ÁöÁ¤µË´Ï´Ù. { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLogViewDoc))); return (CLogViewDoc*)m_pDocument; } #endif //_DEBUG // CLogViewView ¸Þ½ÃÁö 󸮱â int CLogViewView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFormView::OnCreate(lpCreateStruct) == -1) return -1; return 0; } void CLogViewView::OnDestroy() { CFormView::OnDestroy(); // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if( m_hDupCheck != NULL) ::CloseHandle(m_hDupCheck); //°øÀ¯¸Þ¸ð¸®¸¦ Àоî¿À´Â ŸÀ̸Ӹ¦ ¼Ò¸êÇÕ´Ï´Ù. KillTimer(READ_SHAREDMAP); //³²¾ÆÀÖ´Â ·Î±×¸¦ ÀúÀåÇÕ´Ï´Ù. for( int i = 0; i < LV_FCOUNT; i++) m_pMemoryManager[i]->SaveLog(); Sleep(50); //·Î±× ÆÄÀÏÀ» ÀúÀåÇϴ ŸÀ̸Ӹ¦ ¼Ò¸êÇÕ´Ï´Ù. KillTimer(SAVE_LOGFILE); //Ä¿¸Çµå¸¦ Àоî¿À´Â ŸÀ̸Ӹ¦ ¼Ò¸êÇÕ´Ï´Ù. KillTimer(READ_COMMAND); //SaveOptionFile(); SaveINIFile(); } void CLogViewView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); DDX_Control(pDX, IDC_List_Log, m_ListLogViewer); DDX_Check(pDX, IDC_CHECK_AutoScroll, m_bAutoScroll); DDX_CBIndex(pDX, IDC_COMBO_ViewLevel, m_nViewLevel); DDX_Control(pDX, IDC_COMBO_ViewLevel, m_ComboViewLevel); DDX_CBIndex(pDX, IDC_COMBO_LogID, m_nViewLogIndex); DDX_Control(pDX, IDC_COMBO_LogID, m_ComboViewLogID); } BOOL CLogViewView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: CREATESTRUCT cs¸¦ ¼öÁ¤ÇÏ¿© ¿©±â¿¡¼­ // Window Ŭ·¡½º ¶Ç´Â ½ºÅ¸ÀÏÀ» ¼öÁ¤ÇÕ´Ï´Ù. return CFormView::PreCreateWindow(cs); } void CLogViewView::OnInitialUpdate() { CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); ReadINIFile(); //m_strMemoryMap = _T("LOGVIEWER"); //½ÇÇàµÇ°í ÀÖ´Â ÇÁ·Î±×·¥ÀÌ ÀÖ´ÂÁö È®ÀÎÇϰí ProcessID¸¦ ¾ò¾î¿É´Ï´Ù. //ÀÌ¹Ì ½ÇÇàµÇ¾î ÀÖ´Â LogView°¡ ÀÖ´Ù¸é 0,1,2,3.. ¼ø¼­·Î ProcessID°¡ Áõ°¡ÇÕ´Ï´Ù. //GetProcessID´Â À̺¥Æ® °´Ã¼¸¦ »ç¿ëÇÏ¿© ÀÌ¹Ì ½ÇÇàµÇ¾î ÀÖ´Â LogView¸¦ üũÇÕ´Ï´Ù. //m_nProcessID = GetProcessID((TCHAR*)(LPCTSTR)MemoryMapName); //¸¸ÀÏ ÁöÁ¤µÈ ½ÇÇà°³¼ö¸¦ ÃʰúÇϸé.. //if( m_nProcessID == 0xff) // { // AfxMessageBox(_T("·Î±×View¸¦ 2°³ ÀÌ»ó ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù.")); // PostQuitMessage(0); // } if(true == CheckDup((TCHAR*)(LPCTSTR)m_strMemoryMap)) { AfxMessageBox(_T("ÇÁ·Î±×·¥ÀÌ Áߺ¹½ÇÇà µÇ¾ú½À´Ï´Ù.")); PostQuitMessage(0); } m_nProcessID = 0; //¸Þ¸ð¸®¸Ê dll¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¸Þ¸ð¸® ¸Ê À̸§ÀÌ ÇÊ¿äÇÕ´Ï´Ù. //ÀоîµéÀÌ´Â ·Î±×¸¦ Àд ÂÊÀÇ LogID´Â Ç×»ó 0ÀÔ´Ï´Ù. m_pLogManager = new CLogManager(0,(TCHAR*)(LPCTSTR)m_strMemoryMap); //Àоî¿Â ·Î±×¸¦ ¸Þ¸ð¸®¿¡ ÀúÀåÇÏ´Â ¸Þ¸ð¸® Å¥¸¦ °ü¸®Çϴ Ŭ·¡½º ÀÔ´Ï´Ù. //LOG_MEMORY_SIZEÀÇ °ªÀ» º¯°æÇÒ¶§ MemoryManager.h¿¡ ÀÖ´Â TLOGSIZE °ªµµ º¯°æÇØ¾ß ÇÕ´Ï´Ù. for(int i = 0; i < LV_FCOUNT; i++) m_pMemoryManager[i] = new CMemoryManager(LOG_MEMORY_COUNT, LOG_MEMORY_SIZE, m_pPathData->GetIDFromIndex(i),m_pPathData->GetPathFromIndex(i), m_pPathData->GetNameFromIndex(i)); //¸®½ºÆ® ÄÁÆ®·Ñ ÃʱâÈ­ if(m_ListLogViewer.GetHeaderCtrl()->GetItemCount() <= 0) { m_ListLogViewer.InsertColumn(0,_T("Level : Index"), LVCFMT_LEFT,100); m_ListLogViewer.InsertColumn(1,_T("LogID"), LVCFMT_LEFT,70); m_ListLogViewer.InsertColumn(2,_T("Time"), LVCFMT_LEFT,100); m_ListLogViewer.InsertColumn(3,_T("Log"), LVCFMT_LEFT,1000); } //·Î±× ¸®½ºÆ®¿¡ ·¹º§ Á¦ÇÑÀ» À§ÇØ ÄÞº¸¸®½ºÆ®¿¡ ¹®ÀÚ¿­À» Ãß°¡ÇÕ´Ï´Ù. m_ComboViewLevel.AddString(_T(" Level 0")); m_ComboViewLevel.AddString(_T(" Level 1")); m_ComboViewLevel.AddString(_T(" Level 2")); m_ComboViewLevel.AddString(_T(" Level 3")); m_ComboViewLevel.AddString(_T(" Level 4")); CString LogID = _T(""); int nLogID = -1; for(int i = 0; i < LV_FCOUNT; i++) { nLogID = m_pPathData->GetIDFromIndex(i); if( nLogID != -1) { LogID = _T(""); LogID.Format(_T("%d"), nLogID); m_ComboViewLogID.AddString(LogID); } } m_ComboViewLogID.AddString(_T("¸ðµÎÃâ·Â")); m_ComboViewLastLogID = m_ComboViewLogID.GetCount(); m_ComboViewLastLogID--; m_nViewLevel = 4; m_nViewLogIndex = 0;//m_ComboViewLastLogID; UpdateData(false); //¸Þ¸ð¸® ¸ÊÀ» Àд ŸÀÌ¸Ó »ý¼º SetTimer(READ_SHAREDMAP,m_nMemoryMapReadDelay,0); //·Î±× ÆÄÀÏÀ» ÀúÀåÇϴ ŸÀÌ¸Ó »ý¼º SetTimer(SAVE_LOGFILE,m_nLogSaveDelay,0); //Ä¿¸Çµå¸¦ Àд ŸÀÌ¸Ó »ý¼º SetTimer(READ_COMMAND,m_nCommandReadDelay,0); //1ÀÏ 1ȸ ÇÑ´ÞÀü ·Î±× »èÁ¦ SetTimer(DELETE_LOG,86400000,0); UpdateData(false); DeleteLog(); } void CLogViewView::OnTimer(UINT_PTR nIDEvent) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. if(!m_bKillTimer) { switch(nIDEvent) { case READ_SHAREDMAP: //ÁÖ±âÀûÀ¸·Î ¸Þ¸ð¸® ¸Ê ÆÄÀÏÀ» Àоî¿É´Ï´Ù. ReadSharedMemoryMap(); break; case SAVE_LOGFILE: //ÁÖ±âÀûÀ¸·Î ·Î±×ÆÄÀÏ¿¡ ÀúÀåÇÕ´Ï´Ù. SaveLogFile(); break; case READ_COMMAND: //ÁÖ±âÀûÀ¸·Î Ä¿¸Çµå°¡ ÀÖ´ÂÁö È®ÀÎÇÕ´Ï´Ù. ReadCommand(); break; case DELETE_LOG: DeleteLog(); break; } } CFormView::OnTimer(nIDEvent); } void CLogViewView::ReadSharedMemoryMap(void) { static unsigned int CurIndex; static unsigned int ListIndex = 0; unsigned int curLevel; int curLogID; unsigned int curProcess; SYSTEMTIME curTime; TCHAR strMessage[LOG_MEMORY_SIZE] = {0}; CString Temp; bool Result = false; CurIndex = m_pLogManager->GetIndex(); int LogIndex = -1; //40Àº APP°¡ ´Ù¿îµÇ¾ú´Ù°¡ ´Ù½Ã ½ÇÇàµÉ¶§ 0À¸·Î ÃʱâÈ­ µÇ¹Ç·Î //±× Â÷°¡ 40ÀÌ»óÀ̸é viewerµµ À妽º¸¦ ¶È°°ÀÌ ¸ÂÃß°Ô µË´Ï´Ù. if( (CurIndex - m_nIndex) > 400 ) m_nIndex = CurIndex; while( m_nIndex < CurIndex) { //m_nListPrintCountÀº Çѹø¿¡ ¸®½ºÆ®¿¡ Ãâ·ÂÇÏ´Â °¹¼ö¸¦ ³ªÅ¸³À´Ï´Ù. //m_nListPrintCount¿¡ ÁöÁ¤µÈ °³¼ö°¡ ³ÑÀ¸¸é ¸®½ºÆ®¸¦ ÃʱâÈ­ ÇÕ´Ï´Ù. if( 0 == ListIndex % m_nListPrintCount) { ListIndex = 0; m_ListLogViewer.DeleteAllItems(); } m_pLogManager->ReadLog(strMessage, m_nIndex, &curLogID, &curLevel,&curProcess,&curTime); LogIndex = m_pPathData->GetIndexFromID(curLogID); if(LogIndex == m_nViewLogIndex || m_nViewLogIndex == m_ComboViewLastLogID) { //¸®½ºÆ®¿¡ Ãâ·ÂÇÏ´Â ·Î±×·¹º§¿¡ ÇØ´çÇϸé if(curLevel <= m_nViewLevel) { //¸®½ºÆ®Ã¢¿¡ ·Î±×¸¦ Ãâ·ÂÇÑ´Ù. Temp = _T(""); Temp.Format(_T("L%02d:%09d"),curLevel,m_nIndex); m_ListLogViewer.InsertItem( ListIndex, Temp, 0); Temp = _T(""); Temp.Format(_T("%02d"),curLogID); m_ListLogViewer.SetItemText( ListIndex, 1, Temp); Temp = _T(""); Temp.Format(_T("[%02d:%02d:%02d.%03d]"), curTime.wHour,curTime.wMinute,curTime.wSecond,curTime.wMilliseconds); m_ListLogViewer.SetItemText( ListIndex, 2, Temp); m_ListLogViewer.SetItemText( ListIndex, 3, strMessage); //ÀÚµ¿ ½ºÅ©·ÑÀÌ µÇ¾îÀÖ´Ù¸é.. if(m_bAutoScroll) m_ListLogViewer.EnsureVisible(ListIndex,-1); ListIndex++; } } //¸¸ÀÏ ·Î±× ÆÄÀÏ¿¡ ÀúÀåÇÒ ·¹º§¿¡ ÇØ´çÇϸé if(curLevel <= m_nLogSaveLevel) { if(LogIndex >= 0 && LogIndex < LV_FCOUNT ) //Àоî¿Â ·Î±×¸¦ ¸Þ¸ð¸®¿¡ ÀúÀåÇÏ¿© ½×¾Æ³õ´Â´Ù. m_pMemoryManager[LogIndex]->PushLog(strMessage, &m_nIndex, &curLevel, &curProcess, &curTime); } m_nIndex++; } } void CLogViewView::SaveLogFile(void) { //Å¥¿¡ ½×¿©ÀÖ´Â ·Î±×µéÀ» ÆÄÀÏ¿¡ ÀúÀåÇÑ´Ù. for(int i = 0; i < LV_FCOUNT; i++) m_pMemoryManager[i]->SaveLog(); } void CLogViewView::ReadCommand(void) { static unsigned char Command = 0; //º¯°æµÈ Ä¿¸Çµå°¡ ÀÖ´ÂÁö üũÇÑ´Ù. m_pLogManager->GetFirstCommand(&Command); //¸¸ÀÏ Ä¿¸Çµå °ªÀÌ 1À̸é ÇÁ·Î±×·¥ º¯¼ö°ªÀ» ´ã°í ÀÖ´Â //¸ÊÀ» ÀúÀåÇØ¾ßÇÔ if(Command ==1) { CString Path; //ÇöÀç ÇÁ·Î±×·¥ ½ÇÇà °æ·Î¸¦ ¾Ë¾Æ¿Â´Ù. //¸ÊÆÄÀÏÀ» ÀúÀåÇÑ´Ù. m_pLogManager->SaveBinary((TCHAR*)(LPCTSTR)m_strDefaultPath); Command = 0; m_pLogManager->SetFirstCommand(0); } } //ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ´Â ÇöÀç°æ·Î¸¦ ¾Ë¾Æ¿À´Â ÇÔ¼ö void CLogViewView::GetModulePath(CString &Temp) { TCHAR szBuffer[MAX_PATH]; memset(szBuffer,0x00,MAX_PATH*sizeof(TCHAR)); ::GetModuleFileName(NULL,szBuffer,MAX_PATH); for(int i = lstrlen(szBuffer) -1; i>=0; --i) { if(szBuffer[i] == '\\') { int j = lstrlen(szBuffer)-1; for(;j>=i;--j) { szBuffer[j] = NULL; } if(szBuffer[j] == ';') szBuffer[j+1] = '\\'; szBuffer[j+1] = '\\'; Temp = szBuffer; return; } } } void CLogViewView::OnBnClickedCheckAutoscroll() { UpdateData(); } void CLogViewView::OnCbnSelchangeComboViewlevel() { UpdateData(); //¸®½ºÆ®¿¡ Ãâ·ÂÇÏ´Â ·Î±×·¹º§ÀÌ º¯°ßµÇ¸é ±× °ªÀ» °¡Á®¿Â´Ù. //m_nViewLevel; } void CLogViewView::OnOptionLogsave() { //ȯ°æ¼³Á¤ ¸Þ´º¸¦ ¼±ÅÃÇÏ¿´À»¶§... CLogViewOption LogSaveOption; //ÀÌ¹Ì ÀúÀåµÇ¾î ÀÖ´Â °ªÀ» ´ÙÀ̾ó·Î±×¿¡ Ç¥½ÃÇÑ´Ù. LogSaveOption.m_nOptionLogSaveDelay = m_nLogSaveDelay; //·Î±× ÀúÀå ÁÖ±â LogSaveOption.m_nOptionCommandReadDelay = m_nCommandReadDelay; //Ä¿¸Çµå¸¦ üũÇÏ´Â ÁÖ±â LogSaveOption.m_nOptionMemoryMapDelay = m_nMemoryMapReadDelay; //¸Þ¸ð¸® ¸ÊÀ» Àоî¿À´Â ÁÖ±â LogSaveOption.m_nOptionLogSaveLevel = m_nLogSaveLevel; //·Î±×¸¦ ÀúÀåÇÏ´Â ·¹º§ LogSaveOption.m_nOptionListPrintCount = m_nListPrintCount; //¸®½ºÆ® Ãâ·Â ÁÙ¼ö INT_PTR nResult = LogSaveOption.DoModal(); //´ÙÀ̾ó ·Î±×¿¡¼­ ¿É¼Ç°ªÀ» ¸ðµÎ ÀúÀåÇÏ¿´À»¶§.. if(nResult == IDOK) { //´ÙÀ̾ó·Î±×¿¡ ÀúÀåµÈ ·Î±×ÀúÀå ·¹º§À» Àоî¿Â´Ù. m_nLogSaveLevel = LogSaveOption.m_nOptionLogSaveLevel; //´ÙÀ̾ó·Î±×¿¡ ÀúÀåµÈ ¸®½ºÆ® Ãâ·Â ÁÙ¼ö¸¦ °¡Á®¿Â´Ù. m_nListPrintCount = LogSaveOption.m_nOptionListPrintCount; //¸¸ÀÏ ±âÁ¸ÀÇ ¸Þ¸ð¸® ¸Ê Àоî¿À´Â ÁֱⰡ º¯°æµÇ¾ú´Ù¸é.. if(m_nMemoryMapReadDelay != LogSaveOption.m_nOptionMemoryMapDelay) { //ŸÀ̸Ӹ¦ Á×À̱â Àü¿¡ º¸È£ÄÚµå.. m_bKillTimer = true; Sleep(10); //ŸÀ̸Ӹ¦ Á×À̰í.. KillTimer(READ_SHAREDMAP); m_nMemoryMapReadDelay = LogSaveOption.m_nOptionMemoryMapDelay; //»õ·Î ¼³Á¤µÈ ÁÖ±â·Î »õ·Î ŸÀ̸Ӹ¦ »ý¼ºÇÑ´Ù. SetTimer(READ_SHAREDMAP,m_nMemoryMapReadDelay,0); m_bKillTimer = false; } if(m_nCommandReadDelay != LogSaveOption.m_nOptionCommandReadDelay) { //ŸÀ̸Ӹ¦ Á×À̱â Àü¿¡ º¸È£ÄÚµå.. m_bKillTimer = true; Sleep(10); //ŸÀ̸Ӹ¦ Á×À̰í.. KillTimer(READ_COMMAND); m_nCommandReadDelay = LogSaveOption.m_nOptionCommandReadDelay; //»õ·Î ¼³Á¤µÈ ÁÖ±â·Î »õ·Î ŸÀ̸Ӹ¦ »ý¼ºÇÑ´Ù. SetTimer(READ_COMMAND,m_nCommandReadDelay,0); m_bKillTimer = false; } if(m_nLogSaveDelay != LogSaveOption.m_nOptionLogSaveDelay) { //ŸÀ̸Ӹ¦ Á×À̱â Àü¿¡ º¸È£ÄÚµå.. m_bKillTimer = true; Sleep(10); //ŸÀ̸Ӹ¦ Á×À̰í.. KillTimer(SAVE_LOGFILE); m_nLogSaveDelay = LogSaveOption.m_nOptionLogSaveDelay; //»õ·Î ¼³Á¤µÈ ÁÖ±â·Î »õ·Î ŸÀ̸Ӹ¦ »ý¼ºÇÑ´Ù. SetTimer(SAVE_LOGFILE,m_nLogSaveDelay,0); m_bKillTimer = false; } } } void CLogViewView::ReadINIFile(void) { CString NameOfINIFile = _T(""); CString Path; CString DefaultName = _T("DefaultLog"); GetModulePath(Path); m_strDefaultPath = Path; NameOfINIFile.Format(_T("%sLogView.ini"),Path); //ȯ°æ¼³Á¤¿¡¼­ ¸Þ¸ð¸®¸ÊÀ» Àоî¿À´Â ÁֱⰪÀ» ºÒ·¯¿É´Ï´Ù. m_nMemoryMapReadDelay = GetPrivateProfileInt(_T("SAVE_OPTION"),_T("MEMORYMAP_DERAY"),10,NameOfINIFile); //ȯ°æ¼³Á¤¿¡¼­ ¸Þ¸ð¸®¸ÊÀ» Àоî¿À´Â ÁֱⰪÀ» ºÒ·¯¿É´Ï´Ù. m_nCommandReadDelay = GetPrivateProfileInt(_T("SAVE_OPTION"),_T("COMMAND_DERAY"),1000,NameOfINIFile); //ȯ°æ¼³Á¤¿¡¼­ ·Î±×¸¦ ÀúÀåÇÏ´Â ÁֱⰪÀ» ºÒ·¯¿É´Ï´Ù. m_nLogSaveDelay = GetPrivateProfileInt(_T("SAVE_OPTION"),_T("LOGSAVE_DERAY"),1000,NameOfINIFile); //ȯ°æ¼³Á¤¿¡¼­ ·Î±×¸¦ ÀúÀåÇÏ´Â ·Î±×·¹º§°ªÀ» ºÒ·¯¿É´Ï´Ù. m_nLogSaveLevel = GetPrivateProfileInt(_T("SAVE_OPTION"),_T("LOGSAVE_LEVEL"),4,NameOfINIFile); //ȯ°æ¼³Á¤¿¡¼­ ¸®½ºÆ®¿¡ Ãâ·ÂÇÏ´Â °³¼ö¸¦ ºÒ·¯¿É´Ï´Ù. m_nListPrintCount = GetPrivateProfileInt(_T("VIEW_OPTION"),_T("LIST_PRINTCOUNT"),100,NameOfINIFile); //ȯ°æ¼³Á¤¿¡¼­ ¸®½ºÆ®¿¡ Ãâ·ÂÇÏ´Â ·Î±×·¹º§°ªÀ» ºÒ·¯¿É´Ï´Ù. m_nViewLevel = GetPrivateProfileInt(_T("VIEW_OPTION"),_T("LIST_VIEWLEVEL"),4,NameOfINIFile); TCHAR LogPath[128] = {0}; TCHAR LogName[128] = {0}; CString TempStr = _T(""); CString strLogPath = _T(""); CString strLogName = _T(""); int LogID = -1; for(int i = 0; i < LV_FCOUNT; i++) { TempStr = _T(""); TempStr.Format(_T("LOG_ID%02d"),i); LogID = GetPrivateProfileInt(_T("SAVE_OPTION"),((LPCTSTR)TempStr),-1,NameOfINIFile); TempStr = _T(""); TempStr.Format(_T("LOG_PATH%02d"),i); //·Î±× ÀúÀå °æ·Î¸¦ Àоî¿Â´Ù. ::GetPrivateProfileString(_T("SAVE_OPTION"),((LPCTSTR)TempStr), ((LPCTSTR)Path), (LPWSTR)LogPath,64,((LPCTSTR)NameOfINIFile)); strLogPath = _T(""); strLogPath.Format(_T("%s"),LogPath); TempStr = _T(""); TempStr.Format(_T("LOG_Name%02d"),i); //·Î±× ÀúÀå °æ·Î¸¦ Àоî¿Â´Ù. ::GetPrivateProfileString(_T("SAVE_OPTION"),((LPCTSTR)TempStr), ((LPCTSTR)DefaultName),(LPWSTR)LogName,64,((LPCTSTR)NameOfINIFile)); strLogName = _T(""); strLogName.Format(_T("%s"),LogName); m_pPathData->InsertPathData(LogID, strLogName, strLogPath); } TCHAR MemoryMapName[128] = {0}; CString DefaultMapName = _T("LOGVIEW"); //·Î±× ÀúÀå °æ·Î¸¦ Àоî¿Â´Ù. ::GetPrivateProfileString(_T("SW_SETTING"),_T("MEMORYMAP_NAME"), ((LPCTSTR)DefaultMapName), MemoryMapName,64,((LPCTSTR)NameOfINIFile)); m_strMemoryMap.Format(_T("%s"),MemoryMapName); } void CLogViewView::SaveINIFile(void) { CString NameOfINIFile = _T(""); CString Path; GetModulePath(Path); NameOfINIFile.Format(_T("%sLogView.ini"),Path); WritePrivateProfileString(_T("SW_SETTING"),_T("MEMORYMAP_NAME"), m_strMemoryMap,NameOfINIFile); //ȯ°æ¼³Á¤¿¡¼­ ¸Þ¸ð¸®¸ÊÀ» Àд Áֱ⸦ ÀúÀåÇÕ´Ï´Ù. CString ValueOfSetting; ValueOfSetting = _T(""); ValueOfSetting.Format(_T("%d"),m_nMemoryMapReadDelay); WritePrivateProfileString(_T("SAVE_OPTION"),_T("MEMORYMAP_DERAY"),ValueOfSetting,NameOfINIFile); //ȯ°æ¼³Á¤¿¡¼­ Ä¿¸Çµå¸¦ Àд Áֱ⸦ ÀúÀåÇÕ´Ï´Ù. ValueOfSetting = _T(""); ValueOfSetting.Format(_T("%d"),m_nCommandReadDelay); WritePrivateProfileString(_T("SAVE_OPTION"),_T("COMMAND_DERAY"),ValueOfSetting,NameOfINIFile); //ȯ°æ¼³Á¤¿¡¼­ ·Î±×ÆÄÀÏÀ» ÀúÀåÇÏ´Â Áֱ⸦ ÀúÀåÇÕ´Ï´Ù. ValueOfSetting = _T(""); ValueOfSetting.Format(_T("%d"),m_nLogSaveDelay); WritePrivateProfileString(_T("SAVE_OPTION"),_T("LOGSAVE_DERAY"),ValueOfSetting,NameOfINIFile); //ȯ°æ¼³Á¤¿¡¼­ ·Î±×ÆÄÀÏ¿¡ ÀúÀåÇÒ ·Î±×·¹º§ °ªÀ» ÀúÀåÇÕ´Ï´Ù. ValueOfSetting = _T(""); ValueOfSetting.Format(_T("%d"),m_nLogSaveLevel); WritePrivateProfileString(_T("SAVE_OPTION"),_T("LOGSAVE_LEVEL"),ValueOfSetting,NameOfINIFile); //ȯ°æ¼³Á¤¿¡¼­ ¸®½ºÆ®ÄÁÆ®·Ñ¿¡ Ãâ·ÂÇÏ´Â °³¼ö¸¦ ÀúÀåÇÕ´Ï´Ù. ValueOfSetting = _T(""); ValueOfSetting.Format(_T("%d"),m_nListPrintCount); WritePrivateProfileString(_T("VIEW_OPTION"),_T("LIST_PRINTCOUNT"),ValueOfSetting,NameOfINIFile); //ȯ°æ¼³Á¤¿¡¼­ ¸®½ºÆ®¿¡ º¸¿©ÁÖ´Â ·Î±×·¹º§°ªÀ» ÀúÀåÇÕ´Ï´Ù. ValueOfSetting = _T(""); ValueOfSetting.Format(_T("%d"),m_nViewLevel); WritePrivateProfileString(_T("VIEW_OPTION"),_T("LIST_VIEWLEVEL"),ValueOfSetting,NameOfINIFile); CString TempStr; CString strLogPath = _T(""); CString strLogName = _T(""); int LogID = -1; for( int i = 0; i < LV_FCOUNT; i++) { TempStr = _T(""); TempStr.Format(_T("LOG_ID%02d"),i); ValueOfSetting = _T(""); ValueOfSetting.Format(_T("%d"),m_pPathData->GetIDFromIndex(i)); WritePrivateProfileString(_T("SAVE_OPTION"),((LPCTSTR)TempStr),ValueOfSetting,NameOfINIFile); TempStr = _T(""); TempStr.Format(_T("LOG_PATH%02d"),i); //·Î±×ÆÄÀÏ ÀúÀå °æ·Î ¼³Á¤ WritePrivateProfileString(_T("SAVE_OPTION"),((LPCTSTR)TempStr), m_pPathData->GetPathFromIndex(i),NameOfINIFile); TempStr = _T(""); TempStr.Format(_T("LOG_Name%02d"),i); //·Î±×ÆÄÀÏ ÀúÀå °æ·Î ¼³Á¤ WritePrivateProfileString(_T("SAVE_OPTION"),((LPCTSTR)TempStr), m_pPathData->GetNameFromIndex(i),NameOfINIFile); } } unsigned int CLogViewView::GetProcessID(TCHAR* MemoryMapName) { //À̺¥Æ® °´Ã¼¸¦ ÀÌ¿ëÇÏ¿© µ¿ÀÏÇÑ °øÀ¯¸Þ¸ð¸®¸¦ °¡Áø //ÇÁ·Î¼¼½º°¡ »ý¼ºµÇ´Â °ÍÀ» ¹æÁöÇÑ´Ù. CString EventName = _T(""); unsigned int index = 0; //À̺¥Æ® »ý¼º °³¼ö´Â 10°³ À̳»·Î ÁöÁ¤ÇÑ´Ù. //for( index = 0; index < 1; index++) { EventName = _T(""); //EventName.Format(_T("%sEVENT%02d"),MemoryMapName,index); EventName.Format(_T("%sEVENT"),MemoryMapName); m_hDupCheck = ::CreateEvent(NULL, FALSE, FALSE, EventName); if(::GetLastError() == ERROR_ALREADY_EXISTS) { //continue; return 0xff; } else return index; } //return 0xff; } //·Î±×View¿¡¼­ ¸ÊÆÄÀÏ ÀúÀå void CLogViewView::OnBnClickedButtonMapsave() { m_pLogManager->SaveBinary((TCHAR*)(LPCTSTR)m_strDefaultPath); } //ÇÑ´ÞÀÌ Áö³­ ·Î±×ÆÄÀÏÀº »èÁ¦ÇÑ´Ù. void CLogViewView::DeleteLog(void) { SYSTEMTIME st; GetLocalTime(&st); GetDeleteDay(st, 30); //ÇÁ·Î¼¼½º ¾ÆÀ̵ð¿Í ³¯Â¥ÀÇ Á¶ÇÕÀ¸·Î ·Î±×ÆÄÀÏ »ý¼º TCHAR strFileName[MAX_PATH]; for(int i = 0; i < LV_FCOUNT; i++) { memset(strFileName, 0x00, MAX_PATH*sizeof(TCHAR)); _stprintf_s(strFileName, _T("%s\\%s%02d_%d%02d%02d.log"), m_pPathData->GetPathFromIndex(i),m_pPathData->GetNameFromIndex(i), st.wYear, st.wMonth, st.wDay); DeleteFile(strFileName); } } void CLogViewView::GetDeleteDay(SYSTEMTIME& Today, DWORD DiffDay) { DWORD DeleteDay = SystemToAbsDay(Today); DeleteDay -= DiffDay; AbsDayToSystemTime(DeleteDay, Today); } DWORD CLogViewView::SystemToAbsDay(SYSTEMTIME& st) { INT64 i64; FILETIME fst; st.wHour = 0; st.wMinute = 0; st.wMilliseconds = 0; st.wSecond = 0; st.wDayOfWeek = 0; SystemTimeToFileTime(&st,&fst); i64 = (((INT64)fst.dwHighDateTime) << 32) + fst.dwLowDateTime; i64 = i64/864000000000; return (DWORD)i64; } void CLogViewView::AbsDayToSystemTime(DWORD AbsDay, SYSTEMTIME& st) { INT64 i64; FILETIME fst; i64 = AbsDay*864000000000; fst.dwHighDateTime = (DWORD)(i64>>32); fst.dwLowDateTime = (DWORD)(i64&0xffffffff); FileTimeToSystemTime(&fst,&st); } void CLogViewView::OnLogpathsetting() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. /* CString strSelectPath; BROWSEINFO BInfo; TCHAR szBuffer[512]; ::ZeroMemory(&BInfo, sizeof(BROWSEINFO)); ::ZeroMemory(szBuffer, 512); BInfo.hwndOwner = GetSafeHwnd(); BInfo.lpszTitle = _T("°ü¸® Æú´õ¸¦ ¼±ÅÃÇϼ¼¿ä."); BInfo.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX | BIF_RETURNONLYFSDIRS; LPITEMIDLIST pItemidList = ::SHBrowseForFolder(&BInfo); if( pItemidList == NULL) GetModulePath(m_strDefaultPath); ::SHGetPathFromIDList(pItemidList, szBuffer); // m_strLogPath[0] = szBuffer; // m_strLogPath[0] +=_T("\\"); */ CPathSettingDlg PathSettingDlg; PathSettingDlg.Init(m_pPathData); //PathSettingDlg.InitList(); PathSettingDlg.DoModal(); } bool CLogViewView::CheckDup(TCHAR* MemoryMapName) { //À̺¥Æ® °´Ã¼¸¦ ÀÌ¿ëÇÏ¿© µ¿ÀÏÇÑ °øÀ¯¸Þ¸ð¸®¸¦ °¡Áø //ÇÁ·Î¼¼½º°¡ »ý¼ºµÇ´Â °ÍÀ» ¹æÁöÇÑ´Ù. CString EventName = _T(""); unsigned int index = 0; EventName = _T(""); EventName.Format(_T("%sEVENT"),MemoryMapName); m_hDupCheck = ::CreateEvent(NULL, FALSE, FALSE, EventName); if(::GetLastError() == ERROR_ALREADY_EXISTS) { //(_T("ÇÁ·Î±×·¥ÀÌ Áߺ¹½ÇÇà µÇ¾ú½À´Ï´Ù.")); return true; } return false; } void CLogViewView::OnCbnSelchangeComboLogid() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. UpdateData(); m_ComboViewLastLogID = m_ComboViewLogID.GetCount(); m_ComboViewLastLogID -= 1; } void CLogViewView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if(m_ListLogViewer) { m_ListLogViewer.SetWindowPos(NULL, 0, 0, cx - 20, cy - 38, SWP_NOSENDCHANGING | SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE); } }