diff --git a/HookMsg/HookMsgDlg.cpp b/HookMsg/HookMsgDlg.cpp new file mode 100644 index 0000000..9d29423 --- /dev/null +++ b/HookMsg/HookMsgDlg.cpp @@ -0,0 +1,2734 @@ +// HookMsgDlg.cpp : implementation file +// + +#include "stdafx.h" +#include "HookMsg.h" +#include "HookMsgDlg.h" +#include "FindTargetWndDlg.h" +#include "ConfigEnvDlg.h" + +#include "DlgEditTool.h" + +#include "SrvConnectDlg.h" +#include "ClientSocket.h" + +#include "WaitDlg.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// 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() + +void CHookMsgApp::OnAppAbout() +{ + CAboutDlg aboutDlg; + aboutDlg.DoModal(); +} + +///////////////////////////////////////////////////////////////////////////// +// CHookMsgDlg dialog +// +// +///////////////////////////////////////////////////////////////////////////// +CHookMsgDlg::CHookMsgDlg(CWnd* pParent /*=NULL*/) +: CDialog(CHookMsgDlg::IDD, pParent) +{ + m_bInitSuccess = FALSE; + + //{{AFX_DATA_INIT(CHookMsgDlg) + m_bInputCode1 = FALSE; + m_bInputCode2 = FALSE; + m_bInputCode3 = FALSE; + m_bInfoTickerConnect = FALSE; + //}}AFX_DATA_INIT + // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 + m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); + + m_bMonitorStatus = FALSE; + m_nTrayIconTimer = 0; + + m_pLCDlg = NULL; + + m_nSourceFrom = -1; + + g_pStockData = NULL; + + memset( m_szHotKey_JCode, NULL, sizeof(m_szHotKey_JCode) ); + +// m_pCpConclusion = NULL; +// m_pCpConclusionEvent = NULL; // <= Ãß°¡ÇÑ °ÍÀÓ + + m_nSrcJumoon_Number = 0; // ¿øÁÖ¹®¹øÈ£ ÃʱâÈ­. + m_nAutoMedoMoney = 0; // ÀÚµ¿¸Åµµ½Ã ÁÖ¹®±Ý¾× ÃʱâÈ­. + + m_bUsingStockCheckThread = FALSE; + + m_dwCallTimeLast = 0; + m_dwMonitorPauseTime = 0; + + m_pClientSocket = NULL; + m_bSvrConnect = FALSE; + m_strName = "UserID"; + m_strSvrIP = "192.168.0.1"; + m_nSvrPort = 1500; + m_strSendCommand = ""; + + m_pTickerSocket = NULL; + + DeleteFile("NewsLog.txt"); + hFile = CreateFile("NewsLog.txt", + GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); + ASSERT(hFile != INVALID_HANDLE_VALUE); +} + +CHookMsgDlg::~CHookMsgDlg() +{ +TRACE("~CHookMsgDlg() : Step 1\n"); + SAFE_DELETE( g_pStockData ); + + DWORD dwWritten; + WriteFile(hFile,"[THEEND]\n",9,&dwWritten,NULL); + CloseHandle(hFile); + +/* + try + { + if (NULL != m_pCpConclusionEvent) + { + IConnectionPointContainerPtr pCPC; + IConnectionPointPtr pCP; + pCPC = m_pCpConclusion; + pCPC->FindConnectionPoint(__uuidof(_IDibEvents), &pCP); + pCP->Unadvise(m_pCpConclusionEvent->GetCookie()); + m_pCpConclusionEvent->Destroy(); + m_pCpConclusion = 0; + } + } + catch (_com_error e) + { + MessageBox(e.ErrorMessage(), "°´Ã¼ »èÁ¦½ÇÆÐ", MB_OK|MB_ICONSTOP); + } +*/ +TRACE("~CHookMsgDlg() : return.\n"); +} + +void CHookMsgDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CHookMsgDlg) + DDX_Control(pDX, IDC_HOOKMSGDLG_CP_VALUE_STATIC, m_hCPValue); + DDX_Control(pDX, IDC_TRACE_LIST, m_hTraceListBox); + DDX_Check(pDX, IDC_HOOKMSG_HOOKSTATE_CHECK1, m_bInputCode1); + DDX_Check(pDX, IDC_HOOKMSG_HOOKSTATE_CHECK2, m_bInputCode2); + DDX_Check(pDX, IDC_HOOKMSG_HOOKSTATE_CHECK3, m_bInputCode3); + DDX_Check(pDX, IDC_SVRCONNECT_CHECK, m_bSvrConnect); + DDX_Check(pDX, IDC_INFOTICKER_CHECK, m_bInfoTickerConnect); + //}}AFX_DATA_MAP +} + +BEGIN_MESSAGE_MAP(CHookMsgDlg, CDialog) + //{{AFX_MSG_MAP(CHookMsgDlg) + ON_WM_INITMENUPOPUP() + ON_WM_CLOSE() + ON_WM_SYSCOMMAND() + ON_WM_PAINT() + ON_WM_QUERYDRAGICON() + ON_WM_TIMER() + ON_WM_COPYDATA() + ON_WM_NCHITTEST() + ON_BN_CLICKED(IDM_MONITOR_START, OnMonitorStart) + ON_UPDATE_COMMAND_UI(IDM_MONITOR_START, OnUpdateMonitorStart) + ON_BN_CLICKED(IDM_MONITOR_PAUSE, OnMonitorPause) + ON_UPDATE_COMMAND_UI(IDM_MONITOR_PAUSE, OnUpdateMonitorPause) + ON_BN_CLICKED(IDC_TARGETWND_BTN, OnTargetWndBtn) + ON_UPDATE_COMMAND_UI(IDC_TARGETWND_BTN, OnUpdateTargetWndBtn) + ON_BN_CLICKED(IDC_HOOKONOFF_CHECK, OnHookOnOffCheck) + ON_BN_CLICKED(IDC_CONFIG_ENV_BTN, OnConfigEnvBtn) + ON_BN_CLICKED(IDC_CONFIG_REJECTLIST_BTN, OnConfigRejectlistBtn) + ON_BN_CLICKED(IDC_CONFIG_PASS_LIST, OnConfigPassListBtn) + ON_WM_SIZE() + ON_WM_GETMINMAXINFO() + ON_BN_CLICKED(IDC_HOOKMSG_MEDO_BTN, OnHookmsgMedoBtn) + ON_BN_CLICKED(IDC_HOOKMSG_STOCKPRICECHECK_CHK, OnHookmsgStockpriceCheck) + ON_BN_CLICKED(IDC_CONFIG_REJECTLIST_BTN2, OnConfigRejectlistBtn2) + ON_BN_CLICKED(IDC_HOOKMSG_HOOKSTATE_CHECK1, OnHookmsgHookstateCheck1) + ON_BN_CLICKED(IDC_HOOKMSG_HOOKSTATE_CHECK2, OnHookmsgHookstateCheck2) + ON_BN_CLICKED(IDC_HOOKMSG_HOOKSTATE_CHECK3, OnHookmsgHookstateCheck3) + ON_BN_CLICKED(IDC_CONFIG_SPECIAL_LIST, OnConfigSpecialList) + ON_BN_CLICKED(IDC_CONFIG_MANUAL_LIST, OnConfigManualList) + ON_BN_CLICKED(IDC_SVRCONNECT_CHECK, OnSvrconnectCheck) + ON_BN_CLICKED(IDC_INFOTICKER_CHECK, OnInfotickerCheck) + //}}AFX_MSG_MAP + + ON_MESSAGE(WM_CPDIB_RECEIVED, OnReceived) // Ãß°¡ÇÑ °ÍÀÓ + + ON_MESSAGE(WM_HOTKEY, OnHotKey) + ON_MESSAGE(WM_ICON_NOTIFY, OnTrayNotification) + ON_MESSAGE(WM_HOOKMSG_TARGETAPP_DESTORYED, OnTargetAppDestoryed) + ON_MESSAGE(WM_START_COMMAND, OnStartCommand) + ON_MESSAGE(WM_STOP_COMMAND, OnStopCommand) + ON_MESSAGE(WM_REJECTLISTUPDATE_COMMAND, OnUpdateRejectListCommand) + + ON_MESSAGE(WM_SVRSEND_COMMAND, OnSvrSendCommand) + + ON_MESSAGE(SCM_CLOSE, OnTickerSocketClose) // Client ¼ÒÄÏ ÇØÁ¦ + ON_MESSAGE(SCM_RECEIVE, OnTickerSocketReceive) // Client ¼ÒÄÏÀ¸·Î ºÎÅÍ ¼ö½ÅµÇ´Â µ¥ÀÌÅÍ + +END_MESSAGE_MAP() + + +///////////////////////////////////////////////////////////////////////////// +// CHookMsgDlg message handlers +void CHookMsgDlg::OnInitMenuPopup(CMenu *pPopupMenu, UINT nIndex,BOOL bSysMenu) +{ + ASSERT(pPopupMenu != NULL); + // Check the enabled state of various menu items. + + CCmdUI state; + state.m_pMenu = pPopupMenu; + ASSERT(state.m_pOther == NULL); + ASSERT(state.m_pParentMenu == NULL); + + // Determine if menu is popup in top-level menu and set m_pOther to + // it if so (m_pParentMenu == NULL indicates that it is secondary popup). + HMENU hParentMenu; + if (AfxGetThreadState()->m_hTrackingMenu == pPopupMenu->m_hMenu) + state.m_pParentMenu = pPopupMenu; // Parent == child for tracking popup. + else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL) + { + CWnd* pParent = this; + // Child windows don't have menus--need to go to the top! + if (pParent != NULL && + (hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL) + { + int nIndexMax = ::GetMenuItemCount(hParentMenu); + for (int nIndex = 0; nIndex < nIndexMax; nIndex++) + { + if (::GetSubMenu(hParentMenu, nIndex) == pPopupMenu->m_hMenu) + { + // When popup is found, m_pParentMenu is containing menu. + state.m_pParentMenu = CMenu::FromHandle(hParentMenu); + break; + } + } + } + } + + state.m_nIndexMax = pPopupMenu->GetMenuItemCount(); + for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax; + state.m_nIndex++) + { + state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex); + if (state.m_nID == 0) + continue; // Menu separator or invalid cmd - ignore it. + + ASSERT(state.m_pOther == NULL); + ASSERT(state.m_pMenu != NULL); + if (state.m_nID == (UINT)-1) + { + // Possibly a popup menu, route to first item of that popup. + state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex); + if (state.m_pSubMenu == NULL || + (state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 || + state.m_nID == (UINT)-1) + { + continue; // First item of popup can't be routed to. + } + state.DoUpdate(this, TRUE); // Popups are never auto disabled. + } + else + { + // Normal menu item. + // Auto enable/disable if frame window has m_bAutoMenuEnable + // set and command is _not_ a system command. + state.m_pSubMenu = NULL; + state.DoUpdate(this, FALSE); + } + + // Adjust for menu deletions and additions. + UINT nCount = pPopupMenu->GetMenuItemCount(); + if (nCount < state.m_nIndexMax) + { + state.m_nIndex -= (state.m_nIndexMax - nCount); + while (state.m_nIndex < nCount && + pPopupMenu->GetMenuItemID(state.m_nIndex) == state.m_nID) + { + state.m_nIndex++; + } + } + state.m_nIndexMax = nCount; + } +} + +LRESULT CHookMsgDlg::OnNcHitTest(CPoint point) +{ + UINT nHitTest = CWnd::OnNcHitTest(point); + + if( nHitTest == HTCLIENT) + nHitTest = HTCAPTION; + + return nHitTest; +} + +BOOL CHookMsgDlg::OnInitDialog() +{ + TRACE("CHookMsgDlg::OnInitDialog()\n"); + CDialog::OnInitDialog(); + m_bInitSuccess = TRUE; + + /////////////////////////////////////////////////////////////////// + TraceMsg( "[ÃʱâÈ­] ȯ°æÆÄÀÏ °Ë»çÁß..." ); + CFileFind _file; + CString _strFile; + TCHAR szFilePath[_MAX_PATH]={0,}; + ::GetModuleFileName(NULL, szFilePath, _MAX_PATH); + *(strrchr( szFilePath, '\\' ) + 1) = 0; + + _strFile.Format( "%s\\Config.ini", szFilePath ); + if( !_file.FindFile( _strFile ) ) + TraceMsg( "[Config.ini] ÆÄÀÏÀÌ ¾ø½À´Ï´Ù!" ); + + _strFile.Format( "%s\\°ÅºÎ¸®½ºÆ®¾Ë¸².wav", szFilePath ); + if( !_file.FindFile( _strFile ) ) + TraceMsg( "[°ÅºÎ¸®½ºÆ®¾Ë¸².wav] ÆÄÀÏÀÌ ¾ø½À´Ï´Ù!" , CXListBox::Red, CXListBox::Yellow ); + + _strFile.Format( "%s\\Áߺ¹Á¾¸ñ¾Ë¸².wav", szFilePath ); + if( !_file.FindFile( _strFile ) ) + TraceMsg( "[Áߺ¹Á¾¸ñ¾Ë¸².wav] ÆÄÀÏÀÌ ¾ø½À´Ï´Ù!", CXListBox::Red, CXListBox::Yellow ); + + _strFile.Format( "%s\\ÀÚµ¿¸Å¼ö¾Ë¸².wav", szFilePath ); + if( !_file.FindFile( _strFile ) ) + TraceMsg( "[ÀÚµ¿¸Å¼ö¾Ë¸².wav] ÆÄÀÏÀÌ ¾ø½À´Ï´Ù!", CXListBox::Red, CXListBox::Yellow ); + + _strFile.Format( "%s\\°ø½Ã_ºÎÁ¤¹®±¸.txt", szFilePath ); + if( !_file.FindFile( _strFile ) ) + TraceMsg( "[°ø½Ã_ºÎÁ¤¹®±¸.txt] ÆÄÀÏÀÌ ¾ø½À´Ï´Ù!", CXListBox::Red, CXListBox::Yellow ); + + _strFile.Format( "%s\\°ø½Ã_±àÁ¤¹®±¸.txt", szFilePath ); + if( !_file.FindFile( _strFile ) ) + TraceMsg( "[°ø½Ã_±àÁ¤¹®±¸.txt] ÆÄÀÏÀÌ ¾ø½À´Ï´Ù!", CXListBox::Red, CXListBox::Yellow ); + + _strFile.Format( "%s\\°ø½Ã_Ưº°Á¾¸ñÄÚµå.txt", szFilePath ); + if( !_file.FindFile( _strFile ) ) + TraceMsg( "[°ø½Ã_Ưº°Á¾¸ñÄÚµå.txt] ÆÄÀÏÀÌ ¾ø½À´Ï´Ù!", CXListBox::Red, CXListBox::Yellow ); + + _strFile.Format( "%s\\°ÅºÎ_ÀüÀå°Å·¡ºÎÁøÁ¾¸ñÄÚµå.txt", szFilePath ); + if( !_file.FindFile( _strFile ) ) + TraceMsg( "[°ÅºÎ_ÀüÀå°Å·¡ºÎÁøÁ¾¸ñÄÚµå.txt] ÆÄÀÏÀÌ ¾ø½À´Ï´Ù!", CXListBox::Red, CXListBox::Yellow ); + + _strFile.Format( "%s\\´º½ºÇ÷¯½º_Ưº°¿ë_±àÁ¤¹®±¸.txt", szFilePath ); + if( !_file.FindFile( _strFile ) ) + TraceMsg( "[´º½ºÇ÷¯½º_Ưº°¿ë_±àÁ¤¹®±¸.txt] ÆÄÀÏÀÌ ¾ø½À´Ï´Ù!", CXListBox::Red, CXListBox::Yellow ); + + _strFile.Format( "%s\\´º½ºÇ÷¯½º_ÀϹݿë_±àÁ¤¹®±¸.txt", szFilePath ); + if( !_file.FindFile( _strFile ) ) + TraceMsg( "[´º½ºÇ÷¯½º_ÀϹݿë_±àÁ¤¹®±¸.txt] ÆÄÀÏÀÌ ¾ø½À´Ï´Ù!", CXListBox::Red, CXListBox::Yellow ); + + _strFile.Format( "%s\\´º½ºÇ÷¯½º_ºÎÁ¤¹®±¸.txt", szFilePath ); + if( !_file.FindFile( _strFile ) ) + TraceMsg( "[´º½ºÇ÷¯½º_ºÎÁ¤¹®±¸.txt] ÆÄÀÏÀÌ ¾ø½À´Ï´Ù!", CXListBox::Red, CXListBox::Yellow ); + /////////////////////////////////////////////////////////////////// + + g_theApp.m_strBankAccount = _T(""); + + TraceMsg( "[ÃʱâÈ­] ¾÷¹«Å°µî·Ï..." ); + + ICpTdUtilPtr _objTdUtil; + try + { + _objTdUtil.CreateInstance(CLSID_CpTdUtil); + short rv = _objTdUtil->TradeInit(0); + if( -1 == rv ) + AfxMessageBox( "¾÷¹«Å°µî·Ï : Error" ); + else if( 1 == rv ) + AfxMessageBox( "¾÷¹«Å°µî·Ï : ¾÷¹«Å°°¡ À߸øµÇ¾ú½À´Ï´Ù." ); + else if( 2 == rv ) + AfxMessageBox( "¾÷¹«Å°µî·Ï : °èÁ ºñ¹Ð¹øÈ£°¡ À߸øµÇ¾ú½À´Ï´Ù." ); + + _variant_t vtStrAccount = _objTdUtil->GetAccountNumber(); + + if( vtStrAccount.vt == (VT_BSTR | VT_ARRAY) && rv == 0 ) + { + SAFEARRAY *psa = vtStrAccount.parray; + BSTR* bstrArray; + SafeArrayAccessData( psa, (void**)&bstrArray ); + g_theApp.m_strBankAccount = *bstrArray; + SafeArrayUnaccessData( psa ); + } + else + { + _objTdUtil.Release(); + PostQuitMessage(0); + return TRUE; + } + + _objTdUtil.Release(); + } + catch( _com_error e ) + { + _objTdUtil.Release(); + AfxMessageBox("Cybos°¡ ½ÇÇàÁßÀÌ ¾Æ´Ï°Å³ª ÃʱâÈ­¿¡ ¹®Á¦°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù." ); + + PostQuitMessage(0); + return TRUE; + } + + ////////////////////////////////////////////////////////////////////// + // ÇÏÇѰ¡ ¸Å¸Å¹æÁöâ ½ÇÇà... + if( g_AppEnv.bLowmoneyInfoDlg ) + { + ::GetModuleFileName(NULL, szFilePath, _MAX_PATH); + *(strrchr( szFilePath, '\\' ) + 1) = 0; + strcat( szFilePath, "\\HLStockWindow.exe" ); + SHELLEXECUTEINFO ShExecInfo; + ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); + ShExecInfo.fMask = NULL; + ShExecInfo.hwnd = NULL; + ShExecInfo.lpVerb = NULL; + ShExecInfo.lpFile = szFilePath; + ShExecInfo.lpParameters = "-hide"; + ShExecInfo.lpDirectory = NULL; + ShExecInfo.nShow = SW_NORMAL; + ShExecInfo.hInstApp = NULL; + BOOL bSuccess = ShellExecuteEx(&ShExecInfo); + if( bSuccess ) + TraceMsg( "[ÃʱâÈ­] ÇÏÇѰ¡Ã¢ ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ¾ú½À´Ï´Ù.", CXListBox::Blue, CXListBox::White ); + else + TraceMsg( "[ÃʱâÈ­] ÇÏÇѰ¡Ã¢ ÇÁ·Î±×·¥(HLStockWindow.exe)À» ãÀ» ¼ö ¾ø½À´Ï´Ù.", CXListBox::Red, CXListBox::Yellow ); + } + + ////////////////////////////////////////////////////////////////////// + CThinThread::CreateThread( 0, 0, NULL, INFINITE ,WORD_THREAD_WITH_HOGA); + CThinThread::CreateThread( 0, 0, NULL, INFINITE ,WORD_THREAD_WITHOUT_HOGA); + + g_pStockData = new CStockData( this ); + g_pStockData->Initialize(); + g_pStockData->Open(); + +// //////////////////////////////////////////////////////////////////////////// +// if( GetOsVersion() != VER_PLATFORM_WIN32_NT ) +// { // win98, win95 °è¿­Àº ¹ÝÅõ¸íÀ©µµ¿ì API¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. +// GetDlgItem(IDC_TRANSPARENT_PERCENT_EDIT)->ShowWindow( SW_HIDE ); +// GetDlgItem(IDC_MAKETRANSPARENTWINDOW_BTN)->ShowWindow( SW_HIDE ); +// GetDlgItem(IDC_MAKETRANSPARENT_STATIC)->ShowWindow( SW_HIDE ); +// } +// //////////////////////////////////////////////////////////////////////////// + + // 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); + pSysMenu->AppendMenu(MF_SEPARATOR); + pSysMenu->AppendMenu(MF_STRING, IDM_CONFIG_ENV_MENU, "ÇÁ·Î±×·¥ ȯ°æ¼³Á¤ "); + pSysMenu->AppendMenu(MF_STRING, IDC_TARGETWND_BTN, "À©µµ¿ì ÁöÁ¤"); + pSysMenu->AppendMenu(MF_STRING, IDM_CONFIG_REJECTLIST_MENU, "°ÅºÎÁ¾¸ñ ¼³Á¤1"); + pSysMenu->AppendMenu(MF_STRING, IDM_CONFIG_REJECTLIST_MENU2, "°ÅºÎÁ¾¸ñ ¼³Á¤2"); + pSysMenu->AppendMenu(MF_SEPARATOR); + pSysMenu->AppendMenu(MF_STRING, IDM_MAINWINDOW_SHOW, "¸ÞÀÎÀ©µµ¿ì º¸À̱â"); + pSysMenu->AppendMenu(MF_STRING, IDM_TOOLWINDOW_SHOW, "»óÅÂÁ¦¾îâ º¸À̱â"); + pSysMenu->AppendMenu(MF_SEPARATOR); + pSysMenu->AppendMenu(MF_STRING, IDM_MONITOR_START, "¸ð´ÏÅÍ ½ÃÀÛ"); + pSysMenu->AppendMenu(MF_STRING, IDM_MONITOR_PAUSE, "¸ð´ÏÅÍ Áß´Ü"); + pSysMenu->AppendMenu(MF_SEPARATOR); + pSysMenu->AppendMenu(MF_STRING, ID_APP_EXIT, "ÇÁ·Î±×·¥ Á¾·á"); + } + } + + // 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 + + // Make the total in a larger font + { + VERIFY(m_LockUnlockBtnFont.CreateFont( + 18, // nHeight + 0, // nWidth + 0, // nEscapement + 0, // nOrientation + FW_BOLD, // nWeight + FALSE, // bItalic + FALSE, // bUnderline + 0, // cStrikeOut + ANSI_CHARSET, // nCharSet + OUT_DEFAULT_PRECIS, // nOutPrecision + CLIP_DEFAULT_PRECIS, // nClipPrecision + DEFAULT_QUALITY, // nQuality + DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily + "±¼¸²Ã¼")); // lpszFacename + + CButton *pButton = (CButton*)GetDlgItem(IDC_HOOKONOFF_CHECK); + pButton->SetFont(&m_LockUnlockBtnFont); + } + + TraceMsg( "[ÃʱâÈ­] ȯ°æ¼³Á¤ ÁøÇàÁß..." ); + + ////////////////////////////////////////////////////////////////////// + CHookMsgApp * pApp = (CHookMsgApp*)AfxGetApp(); + m_strSvrIP = pApp->GetProfileString("Settings", "SrvIP", "192.168.0.1"); + m_nSvrPort = pApp->GetProfileInt("Settings", "SrvPort", 1500 ); + m_strName = pApp->GetProfileString("Settings", "UserName", "È«±æµ¿"); + + ReadRegistry(); + g_Condition.Initialize(); + InstallHotKey(); + ////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////// + // Æ®·¹ÀÌ ¾ÆÀÌÄÜ µî·Ï + if (!m_TrayIcon.Create(this, WM_ICON_NOTIFY, _T("Cybos ¸ð´ÏÅ͸µ"), NULL, IDR_MAINFRAME)) + return FALSE; + // ¾ÆÀÌÄÜ ¼³Á¤ + m_TrayIcon.SetIcon(IDR_MAINFRAME); + + ////////////////////////////////////////////////////////////////////// + STARTUPINFO StartupInfo; + ::GetStartupInfo( &StartupInfo ); + if (StartupInfo.wShowWindow != SW_SHOWNORMAL) + gwndpl.showCmd = StartupInfo.wShowWindow; + ::SetWindowPlacement( m_hWnd, &gwndpl); + if( g_theApp.m_bTopmostWnd ) + SetWindowPos(&wndTopMost, 0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); + else + SetWindowPos(&wndNoTopMost, 0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); + + ////////////////////////////////////////////////////////////////////// + if( g_theApp.m_bInfoTickerConnect ) + { + m_bInfoTickerConnect = g_theApp.m_bInfoTickerConnect; + UpdateData(FALSE); + + OnInfotickerCheck(); + } + + UpdateData(FALSE); + + ShowHideLockControlDlg( g_theApp.m_bShowLockContorlDlg ); + + m_hTraceListBox.SetContextMenuId(IDR_XLISTBOX); + +#ifndef _DEBUG + GetDlgItem(IDC_HOOKMSG_MEDO_BTN)->ShowWindow( FALSE ); +#endif + + ////////////////////////////////////////////////////////////////////// + // ü°á¸Å¼ö »óȲÀ» ¼ö½ÅÇÕ. +/* DWORD dwCookie; + CRuntimeClass* prcCpDibEvent = NULL; + try + { + m_pCpConclusion.CreateInstance(__uuidof(CpConclusion)); + + prcCpDibEvent = RUNTIME_CLASS(CCpDibEvent); + m_pCpConclusionEvent = (CCpDibEvent *)prcCpDibEvent->CreateObject(); + m_pCpConclusionEvent->SetOwner(GetSafeHwnd()); + IConnectionPointContainerPtr pCPC; + IConnectionPointPtr pCP; + pCPC = m_pCpConclusion; + pCPC->FindConnectionPoint(__uuidof(_IDibEvents), &pCP); + IUnknownPtr pUnk = m_pCpConclusionEvent->GetIDispatch(TRUE); + pCP->Advise(pUnk, &dwCookie); + m_pCpConclusionEvent->SetCookie(dwCookie); + + m_pCpConclusion->Subscribe(); + } + catch (_com_error e) + { + MessageBox(e.ErrorMessage(), "CHookMsgDlg::OnInitDialog CpConclusion ÃʱâÈ­ ½ÇÆÐ", MB_OK|MB_ICONSTOP); + } +*/ + + HookInstallTargetWnd(); + + TraceMsg( "[ÃʱâÈ­] ¿Ï·á !!", CXListBox::Black, CXListBox::White, TRUE ); + return TRUE; // return TRUE unless you set the focus to a control +} + +void CHookMsgDlg::OnSysCommand(UINT nID, LPARAM lParam) +{ + if( nID == SC_CLOSE ) + { + ShowWindow( SW_HIDE ); + return; + } + + if ((nID & 0xFFF0) == IDM_ABOUTBOX) + { + CAboutDlg dlgAbout; + dlgAbout.DoModal(); + +#ifdef _DEBUG + if( m_pClientSocket ) + { + m_strSendCommand = "Å×½ºÆ® ¸Þ½ÃÁöÀÔ´Ï´Ù."; + PostMessage(WM_SVRSEND_COMMAND); + } +#endif + } + else + { + switch( nID ) + { + case IDM_CONFIG_ENV_MENU : + OnConfigEnvBtn(); + break; + case IDM_CONFIG_REJECTLIST_MENU : + OnConfigRejectlistBtn(); + break; + case IDM_CONFIG_REJECTLIST_MENU2 : + OnConfigRejectlistBtn2(); + break; + + case IDM_MAINWINDOW_SHOW : + ShowWindow( SW_SHOWNORMAL ); + break; + case IDM_TOOLWINDOW_SHOW : + { + if( m_pLCDlg ) { + if( ::IsWindow( m_pLCDlg->m_hWnd ) ) + ShowHideLockControlDlg( FALSE ); + else + ShowHideLockControlDlg( TRUE ); + } else { + ShowHideLockControlDlg( TRUE ); + } + } + break; + case IDC_TARGETWND_BTN : + OnTargetWndBtn(); + break; + + case IDM_MONITOR_START: + OnMonitorStart(); + break; + + case IDM_MONITOR_PAUSE: + OnMonitorPause(); + break; + + case ID_APP_EXIT: + PostMessage(WM_CLOSE); + break; + + default: + break; + } + + CDialog::OnSysCommand(nID, lParam); + } +} + +BOOL CHookMsgDlg::OnCommand(WPARAM wParam, LPARAM lParam) +{ + switch( (UINT)wParam ) + { + case IDM_CONFIG_ENV_MENU : + OnConfigEnvBtn(); + break; + case IDM_CONFIG_REJECTLIST_MENU : + OnConfigRejectlistBtn(); + break; + case IDM_CONFIG_REJECTLIST_MENU2 : + OnConfigRejectlistBtn2(); + break; + + case IDM_MAINWINDOW_SHOW : + ShowWindow( SW_SHOWNORMAL ); + break; + case IDM_TOOLWINDOW_SHOW : + { + if( m_pLCDlg ) { + if( ::IsWindow( m_pLCDlg->m_hWnd ) ) + ShowHideLockControlDlg( FALSE ); + else + ShowHideLockControlDlg( TRUE ); + } else { + ShowHideLockControlDlg( TRUE ); + } + } + break; + default: + break; + } + + return CDialog::OnCommand(wParam, 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 CHookMsgDlg::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 + { + CPaintDC dc(this); // device context for painting + CRect rc; + GetClientRect(&rc); + + rc.left = rc.right - ::GetSystemMetrics(SM_CXHSCROLL); + rc.top = rc.bottom - ::GetSystemMetrics(SM_CYVSCROLL); + dc.DrawFrameControl( rc, DFC_SCROLL, DFCS_SCROLLSIZEGRIP ); + + CDialog::OnPaint(); + } +} + +BOOL CHookMsgDlg::DestroyWindow() +{ +TRACE("DestroyWindow : Step 1\n"); + + CHookMsgApp * pApp = (CHookMsgApp*)AfxGetApp(); + pApp->WriteProfileInt("Settings", "SrvPort", (int)(m_nSvrPort) ); + pApp->WriteProfileString("Settings", "SrvIP", (LPSTR)(LPCTSTR)m_strSvrIP); + pApp->WriteProfileString("Settings", "UserName", (LPSTR)(LPCTSTR)m_strName); + +TRACE("DestroyWindow : Step 2\n"); + WriteRegistry(); + +TRACE("DestroyWindow : Step 3\n"); + HAPI_UninstallHook(); + + //////////////////////////////////// + // Close window smoothly... + // if( GetOsVersion() == VER_PLATFORM_WIN32_NT ) + // CloseSmoothly( m_hWnd ); + // Free user library... + if ( g_hUserDll ) + ::FreeLibrary( g_hUserDll ); + //////////////////////////////////// + +TRACE("DestroyWindow : return CDialog::DestroyWindow();\n"); + return CDialog::DestroyWindow(); +} + +void CHookMsgDlg::OnClose() +{ + OnCancel(); +} + +void CHookMsgDlg::OnCancel() +{ + UpdateData(); + + int nID = MessageBox( "HookMsg ÇÁ·Î±×·¥À» Á¾·áÇϽðڽÀ´Ï±î?", + "ÇÁ·Î±×·¥ Á¾·á", MB_YESNO|MB_ICONQUESTION ); + if( nID == IDYES ) + { + try + { + TraceMsg( "<<< ÇÁ·Î±×·¥À» Á¾·áÇÕ´Ï´Ù >>>", CXListBox::Black, CXListBox::White ); + + g_theApp.m_bInfoTickerConnect = m_bInfoTickerConnect; + + if( m_nTrayIconTimer ) + KillTimer(m_nTrayIconTimer); + +TRACE("OnCancel : Step 1\n"); + if( m_pLCDlg ) + { + m_pLCDlg->SaveWindowPlacement(); + m_pLCDlg->SendMessage(WM_CLOSE); + } + +TRACE("OnCancel : Step 2\n"); + // Connection close... + if (m_pClientSocket) + { + TraceMsg( "Logout...", CXListBox::Black, CXListBox::White ); + m_pClientSocket->ClientSignOut(); + ClientClosed(); + } + + // °Å·¡¼Ò InfoTicker connection close... + if (m_pTickerSocket) + { + TraceMsg( "InfoTicker connection close...", CXListBox::Black, CXListBox::White ); + SAFE_DELETE(m_pTickerSocket); + } + +TRACE("OnCancel : Step 3\n"); + if( g_pStockData ) + { + BOOL bUsingWaitDlg = TRUE; + if( bUsingWaitDlg ) + { + CWaitDlg dlg; + dlg.m_hWaitEvent = g_pStockData->Close(false); + dlg.DoModal(); + } + else + g_pStockData->Close(true); + } + +TRACE("OnCancel : Step 4\n"); + CThinThread::Finalize(); + +TRACE("OnCancel : Step 5\n"); + HWND hTagretWnd = ::FindWindow( "HLStockWindow_Dialog", NULL ); + if( ::IsWindow( hTagretWnd ) ) + ::SendMessage(hTagretWnd, WM_CLOSE, 0, 0); + } + catch(...) + { + + } + + CDialog::OnCancel(); +TRACE("OnCancel : return. \n"); + } +} + +// The system calls this to obtain the cursor to display while the user drags +// the minimized window. +HCURSOR CHookMsgDlg::OnQueryDragIcon() +{ + return (HCURSOR) m_hIcon; +} + +void CHookMsgDlg::OnTimer(UINT nIDEvent) +{ + if( nIDEvent == TIMEID_TRAYICON ) + { + static int nRotate = 0; + + m_TrayIcon.SetIcon( IDI_ICON1+nRotate ); + if( ++nRotate == 4 ) + nRotate = 0; + } + else if( nIDEvent == TIMEID_7121DBCLICK ) + { + if( ::IsWindow( g_theApp.m_hFindWindow[2] ) ) + { + ::PostMessage( g_theApp.m_hFindWindow[2], LB_SETCURSEL, 0, NULL ); + + ::PostMessage( g_theApp.m_hFindWindow[2], WM_LBUTTONDOWN, 0, MAKELONG(30,5) ); + ::PostMessage( g_theApp.m_hFindWindow[2], WM_LBUTTONUP, 0, MAKELONG(30,5) ); + + if( g_AppEnv.b7121DbClickStop ) // 2003.10.30 Ãß°¡. + { + OnMonitorPause(); + } + } + else + { + TraceMsg( "7121 Click Err: ÈÄÅ·À©µµ¿ìÁöÁ¤¾ÈµÊ", CXListBox::Black, CXListBox::Red ); + } + + KillTimer( nIDEvent ); + } + + CDialog::OnTimer(nIDEvent); +} + +LRESULT CHookMsgDlg::OnHotKey(WPARAM wParam, LPARAM lParam) +{ + int idHotKey = (int) wParam; // identifier of hot key + UINT fuModifiers = (UINT) LOWORD(lParam); // key-modifier flags + UINT uVirtKey = (UINT) HIWORD(lParam); // virtual-key code + + int nProg = -1; + switch (idHotKey) + { + case REGISTERHOTKEY_ID_LOCK: + OnHookOnOffCheck(); + break; + case REGISTERHOTKEY_ID_NPINPUT: + { + long nCodeIndex = atol( m_szHotKey_JCode ); + STOCKDATA * pCodeData = g_pStockData->GetStockData( nCodeIndex ); + if( pCodeData == NULL ) + { + if( m_bMonitorStatus == FALSE ) // Àá±èÀ϶§... + { + if( g_theApp.m_bHotkeyCodeInputRule1 ) // Àá°åÀ»¶§ Áߺ¹/¼öµ¿Á¾¸ñÄÚµå ÀԷ¾ÊÇÔ + { + if( pCodeData->bManualInputCode || pCodeData->bRepeated ) // Áߺ¹Á¾¸ñ, ¼öÁ¾Á¾¸ñÀº ÀԷ¾ȵǰÔÇÔ. + { + CString strMsg; + strMsg.Format("NPÁ¾¸ñÄÚµå: %s *Àá°åÀ»¶§ Áߺ¹/¼öµ¿Á¾¸ñÄÚµå ÀԷ¾ÊÇÔ.", m_szHotKey_JCode ); + TraceMsg( strMsg ); + break; + } + } + } + } + + AutoInputJongmokCode(-1, m_szHotKey_JCode ); + } + break; + default: + break; + } + + return 0; +} + +LRESULT CHookMsgDlg::OnTrayNotification(UINT wParam, LONG lParam) +{ + CMenu menu, *pSubMenu; + // ¿À¸¥ÂÊ ¸¶¿ì½º ¹öưÀÌ ´­·ÈÀ» °æ¿ì: ÄÁÅØ½ºÆ® ¸Þ´º Ãâ·Â + if (LOWORD(lParam) == WM_RBUTTONUP) + { + if (!menu.LoadMenu(IDR_TRAYPOPUP_MENU)) return 0; + if (!(pSubMenu = menu.GetSubMenu(0))) return 0; + + // SetMenuDefaultItem( menu.m_hMenu, 0, TRUE ); + + CPoint pos; + GetCursorPos(&pos); + SetForegroundWindow(); + // ÄÁÅØ½ºÆ® ¸Þ´º Ãâ·Â + pSubMenu->SetDefaultItem(IDM_MAINWINDOW_SHOW); + + BOOL bCheck = FALSE; + if( m_pLCDlg ) { bCheck = ::IsWindow( m_pLCDlg->m_hWnd ); } + pSubMenu->CheckMenuItem(IDM_TOOLWINDOW_SHOW, MF_BYCOMMAND | (bCheck?MF_CHECKED:MF_UNCHECKED) ); + + pSubMenu->TrackPopupMenu(TPM_RIGHTALIGN, pos.x, pos.y, this); + menu.DestroyMenu(); + } + + // ¿ÞÂÊ ¸¶¿ì½º ¹öưÀÌ ´õºí Ŭ¸¯µÇ¾úÀ» °æ¿ì + else if (LOWORD(lParam) == WM_LBUTTONDBLCLK) + { + ShowWindow( SW_SHOW ); + } + + return 1; +} + +void CHookMsgDlg::HookInstallTargetWnd() +{ + CButton * pHookStatWnd1 = (CButton*)GetDlgItem( IDC_HOOKMSG_HOOKSTATE_CHECK1 ); + CButton * pHookStatWnd2 = (CButton*)GetDlgItem( IDC_HOOKMSG_HOOKSTATE_CHECK2 ); + CButton * pHookStatWnd3 = (CButton*)GetDlgItem( IDC_HOOKMSG_HOOKSTATE_CHECK3 ); + pHookStatWnd1->SetCheck(FALSE); + pHookStatWnd2->SetCheck(FALSE); + pHookStatWnd3->SetCheck(FALSE); + pHookStatWnd1->EnableWindow(FALSE); + pHookStatWnd2->EnableWindow(FALSE); + pHookStatWnd3->EnableWindow(FALSE); + m_bInputCode1 = FALSE; + m_bInputCode2 = FALSE; + m_bInputCode3 = FALSE; + + HAPI_UninstallHook(); + BOOL bHook = HAPI_InstallHook( m_hWnd, + g_theApp.m_hFindWindow[0], // TK + g_theApp.m_hFindWindow[1], // NP + g_theApp.m_hFindWindow[2] ); // 7121 + if( bHook ) + { + m_bMonitorStatus = FALSE; + + if( ::IsWindow(g_theApp.m_hFindWindow[0]) ) + { + pHookStatWnd1->EnableWindow(TRUE); + pHookStatWnd1->SetCheck(TRUE); + m_bInputCode1 = TRUE; + TraceMsg( "[TK] ÈÄÅ·, Á¾¸ñÄÚµå ÀÚµ¿ÀÔ·Â ¼³Á¤µÊ.", CXListBox::Blue, CXListBox::White ); + } + if( ::IsWindow(g_theApp.m_hFindWindow[1]) ) + { + pHookStatWnd2->EnableWindow(TRUE); + pHookStatWnd2->SetCheck(TRUE); + m_bInputCode2 = TRUE; + TraceMsg( "[NP] ÈÄÅ·, Á¾¸ñÄÚµå ÀÚµ¿ÀÔ·Â ¼³Á¤µÊ.", CXListBox::Blue, CXListBox::White ); + } + if( ::IsWindow(g_theApp.m_hFindWindow[2]) ) + { + pHookStatWnd3->EnableWindow(TRUE); + pHookStatWnd3->SetCheck(TRUE); + m_bInputCode3 = TRUE; + TraceMsg( "[7121] ÈÄÅ·, Á¾¸ñÄÚµå ÀÚµ¿ÀÔ·Â ¼³Á¤µÊ.", CXListBox::Blue, CXListBox::White ); + } + } +} + +void CHookMsgDlg::OnTargetWndBtn() +{ + ShowWindow( SW_HIDE ); + + CFindTargetWndDlg dlg; + + for( int i=0; iEnable(FALSE); + else + pCmdUI->Enable(TRUE); +} + +void CHookMsgDlg::OnHookOnOffCheck() +{ + if( !m_bMonitorStatus ) + { + OnMonitorStart(); + } + else + { + OnMonitorPause(); + } +} + +void CHookMsgDlg::OnHookmsgStockpriceCheck() +{ + BOOL bEnable = ((CButton*)GetDlgItem( IDC_HOOKMSG_STOCKPRICECHECK_CHK ))->GetCheck(); + + CWaitCursor wait; + + if( bEnable ) + { + g_pStockData->Start(); + m_bUsingStockCheckThread = TRUE; + + TraceMsg("ÄÚ½º´Ú ÇöÀ簡üũ±â´É : Start"); + } + else + { + g_pStockData->Stop(); + m_bUsingStockCheckThread = FALSE; + + TraceMsg("ÄÚ½º´Ú ÇöÀ簡üũ±â´É : Stop"); + } + + wait.Restore(); +} + +void CHookMsgDlg::OnMonitorStart() +{ + m_dwCallTimeLast = 0; + + if( m_bMonitorStatus == TRUE ) + return; + + if( !::IsWindow(g_theApp.m_hFindWindow[0]) && + !::IsWindow(g_theApp.m_hFindWindow[1]) && + !::IsWindow(g_theApp.m_hFindWindow[2]) && + !m_bInfoTickerConnect ) + { + AfxMessageBox( "[À©µµ¿ìÁöÁ¤ or InfoTickerÁ¢¼Ó]À» ¸ÕÀúÇϼ¼¿ä." ); + ((CButton*)GetDlgItem( IDC_HOOKONOFF_CHECK ))->SetCheck( FALSE ); + return; + } + + int nBankAccount = g_theApp.m_strBankAccountPermitted.Find(g_theApp.m_strBankAccount); + if( nBankAccount == -1 ) + { + nBankAccount = g_theApp.m_strBankAccountPermitted.Find("Root"); + if( nBankAccount == -1 ) + { + TraceMsg( "ÇÁ·Î±×·¥ »ç¿ëÀÎÁõµÈ °èÁ¹øÈ£°¡ ¾Æ´Õ´Ï´Ù.", CXListBox::White, CXListBox::Red, TRUE ); + return; + } + } + + SetWindowText( "Ç®¸²" ); + m_bMonitorStatus = TRUE; + + ((CButton*)GetDlgItem( IDC_HOOKONOFF_CHECK ))->SetWindowText( "Ç®¸²" ); + ((CButton*)GetDlgItem( IDC_HOOKONOFF_CHECK ))->SetCheck( TRUE ); + + m_TrayIcon.SetTooltipText( "Ç®¸² »óÅÂÀÔ´Ï´Ù." ); + m_nTrayIconTimer = SetTimer( TIMEID_TRAYICON, 500, 0); + + TraceMsg( "Ç®¸²...", CXListBox::Blue, CXListBox::White ); + + ((CButton*)GetDlgItem( IDC_TARGETWND_BTN ))->EnableWindow( FALSE ); + + if( m_pLCDlg ) + m_pLCDlg->SetHookMsgState( TRUE ); + +} +void CHookMsgDlg::OnUpdateMonitorStart(CCmdUI* pCmdUI) +{ + if(m_bMonitorStatus) + pCmdUI->Enable(FALSE); + else + pCmdUI->Enable(TRUE); +} + +void CHookMsgDlg::OnMonitorPause() +{ + //~! + if( g_AppEnv.bSuccessiveBuy || m_bMonitorStatus == FALSE ) + return; + + m_dwMonitorPauseTime = ::GetTickCount(); + + SetWindowText( "Àá±è" ); + m_bMonitorStatus = FALSE; + + ((CButton*)GetDlgItem( IDC_HOOKONOFF_CHECK ))->SetWindowText( "Àá±è" ); + ((CButton*)GetDlgItem( IDC_HOOKONOFF_CHECK ))->SetCheck( FALSE ); + + m_TrayIcon.SetIcon( IDI_SPYSTATE1_ICON ); + m_TrayIcon.SetTooltipText( "Àá±è »óÅÂÀÔ´Ï´Ù." ); + + if( m_nTrayIconTimer ) + KillTimer(m_nTrayIconTimer); + m_nTrayIconTimer = 0; + + TraceMsg( "Àá±è...", CXListBox::Red, CXListBox::White ); + + ((CButton*)GetDlgItem( IDC_TARGETWND_BTN ))->EnableWindow( TRUE ); + + if( m_pLCDlg ) + m_pLCDlg->SetHookMsgState( FALSE ); + +} +void CHookMsgDlg::OnUpdateMonitorPause(CCmdUI* pCmdUI) +{ + if(!m_bMonitorStatus) + pCmdUI->Enable(FALSE); + else + pCmdUI->Enable(TRUE); +} + +void CHookMsgDlg::OnHookmsgHookstateCheck1() +{ + m_bInputCode1 = ((CButton*)GetDlgItem( IDC_HOOKMSG_HOOKSTATE_CHECK1 ))->GetCheck(); + + if( m_bInputCode1 ) + TraceMsg( "[TK] Á¾¸ñÄÚµå ÀÚµ¿ÀÔ·Â ¼³Á¤µÊ.", CXListBox::Blue, CXListBox::White ); + else + TraceMsg( "[TK] Á¾¸ñÄÚµå ÀÚµ¿ÀÔ·Â ÇØÁ¦µÊ.", CXListBox::Red, CXListBox::White ); +} + +void CHookMsgDlg::OnHookmsgHookstateCheck2() +{ + m_bInputCode2 = ((CButton*)GetDlgItem( IDC_HOOKMSG_HOOKSTATE_CHECK2 ))->GetCheck(); + + if( m_bInputCode2 ) + TraceMsg( "[NP] Á¾¸ñÄÚµå ÀÚµ¿ÀÔ·Â ¼³Á¤µÊ.", CXListBox::Blue, CXListBox::White ); + else + TraceMsg( "[NP] Á¾¸ñÄÚµå ÀÚµ¿ÀÔ·Â ÇØÁ¦µÊ.", CXListBox::Red, CXListBox::White ); +} + +void CHookMsgDlg::OnHookmsgHookstateCheck3() +{ + m_bInputCode3 = ((CButton*)GetDlgItem( IDC_HOOKMSG_HOOKSTATE_CHECK3 ))->GetCheck(); + + if( m_bInputCode3 ) + TraceMsg( "[7121] Á¾¸ñÄÚµå ÀÚµ¿ÀÔ·Â ¼³Á¤µÊ.", CXListBox::Blue, CXListBox::White ); + else + TraceMsg( "[7121] Á¾¸ñÄÚµå ÀÚµ¿ÀÔ·Â ÇØÁ¦µÊ.", CXListBox::Red, CXListBox::White ); +} + +void CHookMsgDlg::OnConfigRejectlistBtn() +{ + CDlgEditTool dlg; + dlg.SetData( "°ÅºÎ¸®½ºÆ®1" ); + if( IDOK == dlg.DoModal() ) + { + HWND hHookMsgApp = ::FindWindow( "TkrRdr_MainWnd", NULL ); + if( ::IsWindow( hHookMsgApp ) ) + ::PostMessage( hHookMsgApp, WM_REJECTLISTUPDATE_COMMAND, NULL, NULL ); + } + + g_pStockData->InitExclusionCodeFromRegistery(); +} + +void CHookMsgDlg::OnConfigRejectlistBtn2() +{ + CDlgEditTool dlg; + dlg.SetData( "°ÅºÎ¸®½ºÆ®2" ); + if( IDOK == dlg.DoModal() ) + { + + } +} + +void CHookMsgDlg::OnConfigPassListBtn() +{ + CDlgEditTool dlg(this); + dlg.SetData( "Áߺ¹¸®½ºÆ®" ); + if( IDOK == dlg.DoModal() ) + { + + } +} + +void CHookMsgDlg::OnConfigSpecialList() +{ + CDlgEditTool dlg(this); + dlg.SetData( "Ưº°Á¾¸ñ¸®½ºÆ®" ); + if( IDOK == dlg.DoModal() ) + { + + } +} + +void CHookMsgDlg::OnConfigManualList() +{ + CDlgEditTool dlg(this); + dlg.SetData( "¼öµ¿Á¾¸ñ¸®½ºÆ®" ); + if( IDOK == dlg.DoModal() ) + { + + } +} + +void CHookMsgDlg::OnConfigEnvBtn() +{ + CConfigEnvDlg dlg; + + UnregisterHotKey( m_hWnd, REGISTERHOTKEY_ID_LOCK ); + UnregisterHotKey( m_hWnd, REGISTERHOTKEY_ID_NPINPUT ); + + dlg.DoModal(); + + InstallHotKey(); + + if( g_theApp.m_bTopmostWnd ) + SetWindowPos(&wndTopMost, 0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); + else + SetWindowPos(&wndNoTopMost, 0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); +} + +//void CHookMsgDlg::OnTopMostCheckbox() +//{ +// if( g_bTopmostWnd ) +// SetWindowPos(&wndNoTopMost, 0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); +// else +// SetWindowPos(&wndTopMost, 0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); +// +// g_bTopmostWnd = !g_bTopmostWnd; +//} +//void CHookMsgDlg::OnMakeTransparentWindowBtn() +//{ +// UpdateData(); +// if( m_nTransparentPercent == 100 ) +// { +// ::SetWindowLong(m_hWnd, GWL_EXSTYLE, ::GetWindowLong(m_hWnd, GWL_EXSTYLE) & ~WS_EX_LAYERED ); +// return; +// } +// +// if( 10 <= m_nTransparentPercent && m_nTransparentPercent < 100 ) +// { +// if( g_hUserDll == NULL ) +// g_hUserDll = ::LoadLibrary(_T("USER32.dll")); +// +// //Change style to layered window style... +// ::SetWindowLong(m_hWnd, GWL_EXSTYLE, ::GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED ); +// +// SetTransparent(m_hWnd, 0, 255 * m_nTransparentPercent/100 , LWA_ALPHA ); +// } +//} + +///////////////////////////////////////////////////////////////////////////// +// WM_USER + @ Message Handler function. +// +// +///////////////////////////////////////////////////////////////////////////// + +// ¿ÜºÎ¿¡¼­ ¸ð´ÏÅ͸µ ½ÃÀÛ¸í·ÉÀ» ¹ÞÀ»½Ã... +LRESULT CHookMsgDlg::OnStartCommand(WPARAM wParam, LPARAM lParam) +{ + OnMonitorStart(); + return 0; +} + +// ¿ÜºÎ¿¡¼­ ¸ð´ÏÅ͸µ Áߴܸí·ÉÀ» ¹ÞÀ»½Ã... +LRESULT CHookMsgDlg::OnStopCommand(WPARAM wParam, LPARAM lParam) +{ +// if( 1 == wParam ) + + OnMonitorPause(); + return 0; +} + +// ¿ÜºÎ¿¡¼­ °ÅºÎ¸®½ºÆ® °»½ÅµÊÀ» ¹ÞÀ»½Ã... +LRESULT CHookMsgDlg::OnUpdateRejectListCommand(WPARAM wParam, LPARAM lParam) +{ + g_pStockData->InitExclusionCodeFromRegistery(); + return 0; +} + +LRESULT CHookMsgDlg::OnTargetAppDestoryed( WPARAM wParam, LPARAM lParam ) +{ + int nWindow = (int)wParam; + + CButton * pHookStatWnd1 = (CButton*)GetDlgItem( IDC_HOOKMSG_HOOKSTATE_CHECK1 ); + CButton * pHookStatWnd2 = (CButton*)GetDlgItem( IDC_HOOKMSG_HOOKSTATE_CHECK2 ); + CButton * pHookStatWnd3 = (CButton*)GetDlgItem( IDC_HOOKMSG_HOOKSTATE_CHECK3 ); + + switch( nWindow ) + { + case UM_HOOKOK_WND1 : + pHookStatWnd1->SetCheck(FALSE); + pHookStatWnd1->EnableWindow(FALSE); + m_bInputCode1 = FALSE; + TraceMsg( "[TK] À©µµ¿ì°¡ ´ÝÇû½À´Ï´Ù.", CXListBox::White, CXListBox::Red ); + break; + case UM_HOOKOK_WND2 : + pHookStatWnd2->SetCheck(FALSE); + pHookStatWnd2->EnableWindow(FALSE); + m_bInputCode2 = FALSE; + TraceMsg( "[NP] À©µµ¿ì°¡ ´ÝÇû½À´Ï´Ù.", CXListBox::White, CXListBox::Red ); + break; + case UM_HOOKOK_WND3 : + pHookStatWnd3->SetCheck(FALSE); + pHookStatWnd3->EnableWindow(FALSE); + m_bInputCode3 = FALSE; + TraceMsg( "[7121] À©µµ¿ì°¡ ´ÝÇû½À´Ï´Ù.", CXListBox::White, CXListBox::Red ); + break; + default: + AfxMessageBox( "°³¹ßÀÚ¿¡°Ô ¿¬¶ô¹Ù¶ø´Ï´Ù.\r\nUndefined message recved !!" ); + break; + } + + OnMonitorPause(); + return 0; +} + + +////////////////////////////////////////////////////////////////////////////////// +// < Cybos 2002 : ListBox Data Format > +//-------------------------------------------------------------------------------- +// 8092 -> 1942@A45240@´º¾¾¾Ø¾¾ @7121@&-1&01(ÁÖ)´º¾¾¾Ø¾¾ °øÁ¤°ø½Ã +// 1 |<->|2 3|<>|4 +//-------------------------------------------------------------------------------- +// 7121 -> 1239725@7121@0@2@ @1@20021204@1943@(ÁÖ)´º¾¾¾Ø¾¾ °øÁ¤°ø½Ã @°ø½Ã»çÇ×@ +// 1 2 3 4 5 6 7 8 +//-------------------------------------------------------------------------------- +////////////////////////////////////////////////////////////////////////////////// +BOOL CHookMsgDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) +{ + if( pCopyDataStruct->dwData == UM_HOOKOK_WND1 || // TK + pCopyDataStruct->dwData == UM_HOOKOK_WND2 || // NP + pCopyDataStruct->dwData == UM_HOOKOK_WND3 // 7001 + ) + { + SPYMSGDATA cpData; + memcpy(&cpData, (SPYMSGDATA*)pCopyDataStruct->lpData, sizeof(SPYMSGDATA)); // transfer data to internal variable + m_nSourceFrom = pCopyDataStruct->dwData; + + if( pCopyDataStruct->dwData == UM_HOOKOK_WND1 || // TK + pCopyDataStruct->dwData == UM_HOOKOK_WND2 ) // NP + { + memset(m_szTitle, NULL, MAX_RECEIVE_LEN); + memcpy(m_szTitle, cpData.ExtraData, strlen((char*)cpData.ExtraData) ); + } else { + + DWORD dwWritten; + + switch(cpData.lParam) { + // ½Ã°£ + case 1: + memcpy(m_szWnd3_Time, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1); + break; + // ŸÀÌÆ² + case 2: + memcpy(m_szWnd3_Title, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1); + TRACE("[2]%s\n",m_szWnd3_Title); + break; + // Á¾¸ñ¸í + case 3: + TRACE("[3]%s\n",m_szWnd3_Title); + memcpy(m_szWnd3_Name, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1); + + if(m_szWnd3_Name[0] != 0) { + WriteFile(hFile,m_szWnd3_Time,strlen(m_szWnd3_Time),&dwWritten,NULL); + WriteFile(hFile,"\n",1,&dwWritten,NULL); + WriteFile(hFile,m_szWnd3_Title,strlen(m_szWnd3_Title),&dwWritten,NULL); + WriteFile(hFile,"\n",1,&dwWritten,NULL); + WriteFile(hFile,m_szWnd3_Name,strlen(m_szWnd3_Name),&dwWritten,NULL); + WriteFile(hFile,"\n\n",2,&dwWritten,NULL); + } + break; + } + + } + + if( !m_bMonitorStatus ) + { + ////////////////////////////////////////////////////////////////////// + // Á¦¸ñ¿¡¼­ Á¾¸ñÄÚµåã±â. + CString strJCode=""; + CString strJName=""; + CString strTitle = m_szTitle; + if( _ExtractJCode( m_nSourceFrom, strTitle, strJCode, strJName ) ) + { + ////////////////////////////////////////////////////// + // Àá±è »óÅ¿¡¼­µµ Çѹø ³ª¿Â Á¾¸ñÀº ¹«Á¶°Ç [Áߺ¹Á¾¸ñ]¿¡ µî·ÏÇÔ! + g_pStockData->AddRepeatedCode( strJCode ); + } + + if( m_nSourceFrom == UM_HOOKOK_WND2 ) + { // ÇÖŰ ÀԷ½à Á¾¸ñÄÚµå ÀÔ·ÂÀ» À§ÇØ... + strncpy( m_szHotKey_JCode, (LPSTR)(LPCTSTR)strJCode.Right(6), 6 ); + GetDlgItem(IDC_HOTKEYCODE_EDIT)->SetWindowText(m_szHotKey_JCode); + } + + ////////////////////////////////////////////////////// + // 7121 ÀÚµ¿ Ŭ¸¯±â´É. + long dwDiffTime = ::GetTickCount() - m_dwMonitorPauseTime; + if( dwDiffTime <= g_AppEnv.n7121DbClickContinuePauseTime ) + { + if( m_nSourceFrom == UM_HOOKOK_WND3 && g_AppEnv.b7121DbClick ) + ::SetTimer( m_hWnd, TIMEID_7121DBCLICK, g_AppEnv.n7121Delay, NULL ); + } + + // UM_HOOKOK_WND3 ¹öÆÛ ÃʱâÈ­ +// m_szWnd3_Title[0] = 0; +// m_szWnd3_Name[0] = 0; + + return CDialog::OnCopyData(pWnd, pCopyDataStruct); + } + else + { + if(RetrieveNewsData()) { + m_pWorkEvent2->SetEvent(); + m_pWorkEvent->SetEvent(); + } + } + + return TRUE; + } + + return CDialog::OnCopyData(pWnd, pCopyDataStruct); +} + +BOOL CHookMsgDlg::_ExtractJCode( int nSrcType, CString & _strTitle, CString & strJCode, CString & strJName ) +{ + BOOL bRet = FALSE; + HRESULT hr; + ICpStockCodePtr objStockCode; + + try + { + hr = objStockCode.CreateInstance( CLSID_CpStockCode ); // Á¾¸ñÄڵ庯ȯ. + + CString strExt = ""; + int nStep = 0; + + if( nSrcType == UM_HOOKOK_WND1 ) // KOSDAQ ƼĿ. + { + _strTitle.Replace( " ", " " ); + if( _strTitle.Left(6) == "[°ø½Ã]" ) + { + while(AfxExtractSubString(strExt, _strTitle, nStep++, ' ')) + { + if(nStep == 2) + { + strExt.Replace( "(ÁÖ)", "" ); + strExt.Replace( " ", "" ); + + strJCode = (LPCSTR)objStockCode->NameToCode( (LPCSTR)strExt ); // ¿¹) "ÇÏÀ̴нº" -> "A00660" + strJName = strExt; + bRet = TRUE; + break; + } + } + } + } + else if( nSrcType == UM_HOOKOK_WND2 ) // NewsPlus. + { + long _nCode; + int n = sscanf( _strTitle, "%06d", &_nCode ); + if( n == 1 ) + { + strJCode.Format( "A%06d", _nCode ); + strJName = (LPCSTR)objStockCode->CodeToName( (LPCSTR)strJCode ); + bRet = TRUE; + } + } + else if( nSrcType == UM_HOOKOK_WND3 ) // 7121 ¸®½ºÆ®. + { + /* + // "773033@7121@0032@2@0@53250@20031001@1536@(ÁÖ)¿£¿¡½º¾ÆÀÌ ¸íÀǰ³¼­Á¤Áöµî¾È³»@ÄÚ½º´Ú@"; + // ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ + while(AfxExtractSubString(strExt, _strTitle, nStep++, '@')) + { + if(nStep == 6) + { + strJCode = strExt; + strJName = (LPCSTR)objStockCode->CodeToName( (LPCSTR)strJCode ); + } + else if( nStep == 9 ) + { + _strTitle = strExt; + bRet = TRUE; + break; + } + } + */ + //~! + + strJCode = (LPCSTR)objStockCode->NameToCode( m_szWnd3_Name ); + bRet = TRUE; + } + else if( nSrcType == UM_SRC_INFOTICKER ) + { + //------------------------------------------------------------------------------------------------------ + // 09030,20040908,131127,1102004090800005620040908000080,003160,[(ÁÖ)µð¾ÆÀÌ] ...... (k)Ÿ¹ýÀÎÃâÀÚ(ÁֽĹ×) + //------------------------------------------------------------------------------------------------------ + while(AfxExtractSubString(strExt, _strTitle, nStep++, ',')) + { + if(nStep == 1) + { + if( strExt != "09030" ) + break; + } + else if( nStep == 4 ) + { + if( strncmp((LPCSTR)strExt,"110", 3) != 0 ) + break; + } + else if(nStep == 5) + { + strJCode.Format( "A%s", strExt ); // <-- Á¾¸ñÄÚµå ±¸Çϱâ. + strJName = (LPCSTR)objStockCode->CodeToName( (LPCSTR)strJCode ); + } + else if( nStep == 6 ) + { + char szName[100]={0,}; + char szData[100]={0,}; + int n = sscanf( (LPCTSTR)strExt, "%s%s", szName, szData ); + if( n == 2 ) + { + _strTitle.Format( "%s %s", szName, szData ); // <-- °Å·¡¼Ò °ø½Ã ŸÀÌÆ² ±¸Çϱâ. + bRet = TRUE; + } + break; + } + } + } + else + { + throw "µ¥ÀÌÅÍ ¼Ò½º¸¦ ¾Ë ¼ö ¾ø½À´Ï´Ù."; + } + + objStockCode.Release(); + + strJName.Replace( " ", "" ); + strJCode.Replace( " ", "" ); + + if( strJCode.GetLength() != 7 ) + bRet = FALSE; + } + catch( _com_error e ) { + objStockCode.Release(); + } + catch( ... ) { + objStockCode.Release(); + } + + return bRet; +} + +void CHookMsgDlg::_WorkThreadProc(UINT ThreadType) +{ + ////////////////////////////////////////////////////////////////////// + // Thread local º¯¼ö·Î ÃÖ´ëÇÑ »¡¸® º¹»çÈÄ ºÐ¼®À» ÁøÇàÇÑ´Ù. ¶ôÅ·ÀÌ ÇÊ¿äÇÏÁö¸¸ ¼Óµµ¸¦ °í·ÁÇØ¼­ ¹«½ÃÇÑ´Ù. 2004/5/6 + + int _nSourceFrom = m_nSourceFrom; + + /////////////////////////////////////////////////////////////////////// + // ½ÃÀ۽ð£À» ±â·ÏÇÔ. + m_dwTickStart = ::GetTickCount(); + + ////////////////////////////////////////////////////////////////////// + // ¾²·¹µå ŸÀÔ + CString strSrc=""; + CXListBox::Color TxtColor, BgColor; + + if(WORD_THREAD_WITHOUT_HOGA == ThreadType) { + if(m_bUsingStockCheckThread != TRUE) + return; + BgColor = CXListBox::BrightGray; + strSrc = "ÀÚµ¿È£°¡ "; + } else if(WORD_THREAD_WITH_HOGA == ThreadType) { + BgColor = CXListBox::White; + strSrc = "¼öµ¿È£°¡ "; + } else { + BgColor = CXListBox::Red; + strSrc = "¾²·¹µå¿¡·¯ "; + } + + ////////////////////////////////////////////////////////////////////// + // ´º½º Ãâó + if( _nSourceFrom == UM_HOOKOK_WND1 ) // KOSDAQ ƼĿ. + { + TxtColor = CXListBox::Black; + strSrc += "[TK] "; + } + else if( _nSourceFrom == UM_HOOKOK_WND2 ) // NewsPlus. + { + if( m_pClientSocket ) + { + m_strSendCommand = "[NP] " + g_strTitle; + PostMessage(WM_SVRSEND_COMMAND); + } + + TxtColor = CXListBox::Olive; + strSrc += "[NP] "; + + // ÇÖŰ ÀԷ½à Á¾¸ñÄÚµå ÀÔ·ÂÀ» À§ÇØ... + strncpy( m_szHotKey_JCode, (LPSTR)(LPCTSTR)g_strJCode.Right(6), 6 ); + GetDlgItem(IDC_HOTKEYCODE_EDIT)->SetWindowText(m_szHotKey_JCode); + } + else if( _nSourceFrom == UM_HOOKOK_WND3 ) // 7121. + { + TxtColor = CXListBox::Blue; + strSrc += "[7121] "; + } + else if( _nSourceFrom == UM_SRC_INFOTICKER ) // °Å·¡¼Ò InfoTicker + { + TxtColor = CXListBox::Blue; + strSrc += "[InfoTicker] "; + } + + // + if(g_AppEnv_Debug.bTraceOnly) + return; + + ////////////////////////////////////////////////////// + // Á¾¸ñÄÚµåÀÇ »óŸ¦ ¾ò¾î¿È. + long nCodeIndex = atol( (LPSTR)(LPCTSTR)g_strJCode.Right(6) ); + STOCKDATA * pCodeData = g_pStockData->GetStockData( nCodeIndex ); + if( pCodeData == NULL ) + { + TraceMsg( strSrc + "[ " + g_strJCode + " ] ÀνÄÀÌ ¾ÊµÇ´Â Á¾¸ñÄÚµåÀÔ´Ï´Ù.", CXListBox::White, CXListBox::Red, TRUE ); + return ; + } + + ////////////////////////////////////////////////////// + // °ÅºÎ¸®½ºÆ® °Ë»ç. + if( pCodeData->bRejectedFromRegistery == true || // °ÅºÎÁ¾¸ñ 1. + pCodeData->bRejectedFromFile == true ) // °ÅºÎÁ¾¸ñ 2. + { + BOOL bContinueTrade = FALSE; + + if( pCodeData->bRejectedFromFile == true ) + { + if( g_AppEnv.bTradeCountCheck ) + { + if( pCodeData->lTradeCount >= g_AppEnv.lTradeCount ) + { + bContinueTrade = TRUE; + } + } + + if( g_AppEnv.bTradeMoneyCheck ) + { + if( pCodeData->lTradeMoney >= g_AppEnv.lTradeMoney ) + { + bContinueTrade = TRUE; + } + } + } + + if( bContinueTrade == FALSE ) + { + PlaySound( "./°ÅºÎ¸®½ºÆ®¾Ë¸².wav" ); + + if( pCodeData->bRejectedFromFile == true ) + TraceMsg( strSrc + "[°ÅºÎÁ¾¸ñ2 ¾Ë¸²] : " + g_strJCode +", " + g_strJName, TxtColor, BgColor, TRUE ); + else + TraceMsg( strSrc + "[°ÅºÎÁ¾¸ñ1 ¾Ë¸²] : " + g_strJCode +", " + g_strJName, TxtColor, BgColor, TRUE ); + + HLStockWindowShow( g_strJCode, "°ÅºÎ¸®½ºÆ®" ); + return ; + } + + PlaySound( "./°ÅºÎ¸®½ºÆ®¸Å¸Å¾Ë¸².wav" ); + } + + ////////////////////////////////////////////////////// + // ¼öµ¿_Á¾¸ñÄÚµå °Ë»ç. + if( pCodeData->bManualInputCode == true ) + { + if( WORD_THREAD_WITH_HOGA == ThreadType && InputCodeTypeStatus(_nSourceFrom) ) + { + TraceMsg( strSrc + "[¼öµ¿Á¾¸ñ ÀÚµ¿ÀÔ·Â] : " + g_strJCode + ", " + g_strJName, TxtColor, BgColor, TRUE ); + AutoInputJongmokCode(_nSourceFrom, g_strJCode.Right(6) ); + if( g_AppEnv.bJInputAndStop1 ) + { + OnMonitorPause(); + } + } + else + { + TraceMsg( strSrc + "[¼öµ¿Á¾¸ñ ¾Ë¸²] : " + g_strJCode +", " + g_strJName, TxtColor, BgColor, TRUE ); + } + + PlaySound( "./¼öµ¿Á¾¸ñ¾Ë¸².wav" ); + HLStockWindowShow( g_strJCode, "¼öµ¿Á¾¸ñ" ); + return ; + } + ////////////////////////////////////////////////////// + // Áߺ¹Á¾¸ñ °Ë»ç. + if( pCodeData->bRepeated == true ) + { + if( WORD_THREAD_WITH_HOGA == ThreadType && InputCodeTypeStatus(_nSourceFrom) ) + { + TraceMsg( strSrc + "[Áߺ¹Á¾¸ñ ÀÚµ¿ÀÔ·Â] : " + g_strJCode + ", " + g_strJName, TxtColor, BgColor, TRUE ); + AutoInputJongmokCode(_nSourceFrom, g_strJCode.Right(6) ); + if( g_AppEnv.bJInputAndStop1 ) + { + OnMonitorPause(); + } + } + else + { + TraceMsg( strSrc + "[Áߺ¹Á¾¸ñ ¾Ë¸²] : " + g_strJCode +", " + g_strJName, TxtColor, BgColor, TRUE ); + } + + PlaySound( "./Áߺ¹Á¾¸ñ¾Ë¸².wav" ); + HLStockWindowShow( g_strJCode, "Áߺ¹Á¾¸ñ" ); + return ; + } + + HRESULT hr; + IDibPtr objStockJpbid2; + ICpTdDibPtr objCpTd03115; + ICpTdDibPtr objCpTd03147; + + BOOL bBkColorStat = FALSE; // »ó/ÇÏÇѰ¡ ¾È³»Ã¢ÀÇ ¹è°æ»öÁöÁ¤.(»óÇÑ or ÇÏÇÑ) + BOOL bSuccess = FALSE; + CString strSuccess = ""; + CString strErrorMsg = ""; + //~! + CString strTime = ""; + TCHAR strMsg[256] = {0,}; + DWORD dwTimeTotal; + + BYTE cbStockType; // Á¾¸ñ±¸ºÐ. + long lStockPrice=0; // ÅõÀڱݾ×. + long Cur_lStockPrice=0; // ÇöÀç°¡. + long nOrder=10; // ÁÖ¹®¼ö·®. + long nCallLevel=0; // È£°¡ ·¹º§. + long nTotalBattingMoney = 0; // ¼³Á¤ÇÑ ¹èÆÃ±Ý¾×. + + ////////////////////////////////////////////////////////////////////// + // Á¦¸ñ¸¸À¸·Î Á¶°Ç°Ë»öÀ» ÁøÇàÇÔ! + HM_CONDITION_TYPE ConditionType = g_Condition.DetectConditionTitle( g_strTitle, _nSourceFrom ); + if( ConditionType != HM_CONDITION_TYPE_FALSE ) + { + try + { + if( ConditionType == HM_CONDITION_TYPE_TRUE ) + { + if( pCodeData->bSpecialCodeByPublish == true ) + { + nTotalBattingMoney = g_AppEnv.Money2; // °ø½Ã °Å·¡±Ý¾×(Ưº°). + nCallLevel = g_AppEnv.Level2-1; // °ø½Ã ¸Å¼ö·¹º§(Ưº°). + + if(g_AppEnv.bMesuUsingMacro2) + { + EmulateHotkey(g_AppEnv.MesuHotKey2.wVk, g_AppEnv.MesuHotKey2.wModifier); + TraceMsg("°ø½Ã(Ưº°) ÁÖ¹® ¸ÅÅ©·Î°¡ ½ÇÇàµÇ¾ú½À´Ï´Ù."); + goto _LAST_JOB_; + } + } + else + { + nTotalBattingMoney = g_AppEnv.Money1; // °ø½Ã °Å·¡±Ý¾×(ÀϹÝ). + nCallLevel = g_AppEnv.Level1-1; // °ø½Ã ¸Å¼ö·¹º§(ÀϹÝ). + + if(g_AppEnv.bMesuUsingMacro1) + { + EmulateHotkey(g_AppEnv.MesuHotKey1.wVk, g_AppEnv.MesuHotKey1.wModifier); + TraceMsg("°ø½Ã(ÀϹÝ) ÁÖ¹® ¸ÅÅ©·Î°¡ ½ÇÇàµÇ¾ú½À´Ï´Ù."); + goto _LAST_JOB_; + } + } + } + else if( ConditionType == HM_CONDITION_TYPE_SPECIAL ) + { + nTotalBattingMoney = g_AppEnv.Money4; // ´º½ºÇ÷¯½º °Å·¡±Ý¾×(Ưº°). + nCallLevel = g_AppEnv.Level4-1; // ´º½ºÇ÷¯½º ¸Å¼ö·¹º§(Ưº°). + + if(g_AppEnv.bMesuUsingMacro4) + { + EmulateHotkey(g_AppEnv.MesuHotKey4.wVk, g_AppEnv.MesuHotKey4.wModifier); + TraceMsg("NP(Ưº°) ÁÖ¹® ¸ÅÅ©·Î°¡ ½ÇÇàµÇ¾ú½À´Ï´Ù."); + goto _LAST_JOB_; + } + } + else if( ConditionType == HM_CONDITION_TYPE_NORMAL ) + { + nTotalBattingMoney = g_AppEnv.Money3; // ´º½ºÇ÷¯½º °Å·¡±Ý¾×(ÀϹÝ). + nCallLevel = g_AppEnv.Level3-1; // ´º½ºÇ÷¯½º ¸Å¼ö·¹º§(ÀϹÝ). + + if(g_AppEnv.bMesuUsingMacro3) + { + EmulateHotkey(g_AppEnv.MesuHotKey3.wVk, g_AppEnv.MesuHotKey3.wModifier); + TraceMsg("NP(ÀϹÝ) ÁÖ¹® ¸ÅÅ©·Î°¡ ½ÇÇàµÇ¾ú½À´Ï´Ù."); + goto _LAST_JOB_; + } + } + else + { + TraceMsg( strSrc + "À߸øµÈ ¸®ÅϰªÀÔ´Ï´Ù. °³¹ßÀÚ¿¡°Ô ¿¬·«¹Ù¶ø´Ï´Ù.", CXListBox::White, CXListBox::Red, TRUE ); + goto _LAST_JOB_; + } + + BOOL bCheckState = g_pStockData->StockVerify( nCodeIndex, Cur_lStockPrice, cbStockType ); + + if( m_bUsingStockCheckThread == TRUE && WORD_THREAD_WITHOUT_HOGA == ThreadType) + { + if( bCheckState == TRUE ) + { // È£°¡ Àç°è»ê... + lStockPrice = g_pStockData->ReCalcPrice( Cur_lStockPrice, nCallLevel ); + } + else + bCheckState = FALSE; + } + else + bCheckState = FALSE; + + strErrorMsg += "Á¾¸ñÄÚµå: " + g_strJCode + "\r\n"; + if( bCheckState == FALSE ) + { + hr = objStockJpbid2.CreateInstance( CLSID_StockJpbid2 ); // È£°¡Á¤º¸Ã³¸®. + + objStockJpbid2->SetInputValue( 0, (LPCSTR)g_strJCode ); + + DWORD dwLimitCallStart = ::GetTickCount(); + objStockJpbid2->BlockRequest(); + DWORD dwLimitCallEnd = ::GetTickCount(); + + strTime.Format("(%d ms)",dwLimitCallEnd-dwLimitCallStart); + + if( (long)(dwLimitCallEnd-dwLimitCallStart) >= g_AppEnv.LimitCall ) // 2003.10.30 Ãß°¡. + { + TraceMsg( strSrc + "È£°¡¿äû ÀÀ´äÀÌ Á¦Çѽð£À» ÃʰúÇÏ¿´½À´Ï´Ù.+strTime", CXListBox::White, CXListBox::Red, TRUE ); + PlayResource(IDR_MSGTYPE_WAVE); + + objStockJpbid2.Release(); + goto _LAST_JOB_; + } + + TraceMsg( strSrc + "[È£°¡¿äû Ok]" + g_strJName+strTime, TxtColor, BgColor, TRUE ); + + lStockPrice = objStockJpbid2->GetDataValue(0, nCallLevel); // nÂ÷ ¸ÅµµÈ£°¡. + Cur_lStockPrice = objStockJpbid2->GetDataValue(0, (long)0); // (1Â÷¸ÅµµÈ£°¡)ÇöÀç°¡. + + ///////////////////////////////////////////////////////////////////////////////////////////// + // »óÇѰ¡ / ÇÏÇѰ¡ üũ. (Æí¹ý) °Å·¡¼Ò:15%, ÄÚ½º´Ú:12% °ËÁõ¹æ½ÄÀÌ ¾Æ´Ñ 10Â÷ È£°¡¸¸À¸·Î °Ë»çÇÔ. + long _lLowCheck = objStockJpbid2->GetDataValue(1, (long)1); // 2Â÷ ¸Å¼öÈ£°¡.(ÇÏÇѰ¡ üũ). + objStockJpbid2.Release(); + + if( _lLowCheck==0 || lStockPrice==0 ) + { + HLStockWindowShow( g_strJCode, "È£°¡¿äûÈÄ" ); + + CString strErr; + strErr.Format( "\r\n2Â÷¸Å¼ö È£°¡: %d \r\n%dÂ÷¸Åµµ È£°¡: %d", _lLowCheck, nCallLevel+1, lStockPrice ); + strErrorMsg += strErr; + + TraceMsg( strSrc + strErrorMsg, TxtColor, BgColor, TRUE ); + PlayResource(IDR_MSGTYPE_WAVE); + goto _LAST_JOB_; + } + + if( g_theApp.m_bHogaLevelCalc ) // ÇöÀç°¡¹ÌÀû¿ë½Ã ¸Å¸Å´Ü°è È£°¡ÀÚµ¿°è»ê Àû¿ë. + { + // È£°¡ Àç°è»ê... + lStockPrice = g_pStockData->ReCalcPrice( Cur_lStockPrice, nCallLevel ); + } + } + else + { + if( pCodeData->bLowest == true || pCodeData->bHeigest == true ) + { + strErrorMsg += "*ÇöÀç°¡ Àû¿ëÁß*"; + + HLStockWindowShow( g_strJCode, strErrorMsg ); + + TraceMsg( strSrc + strErrorMsg, TxtColor, BgColor, TRUE ); + PlayResource(IDR_MSGTYPE_WAVE); + goto _LAST_JOB_; + } + } + + nOrder = nTotalBattingMoney / lStockPrice; + nOrder = nOrder - (nOrder%10); + + if( cbStockType == 1 ) // °Å·¡¼Ò. + { + objCpTd03115.CreateInstance( CLSID_CpTd0311 ); // °Å·¡¼Ò ¸Å¸Åó¸®. + } + else if( cbStockType == 5 ) // ÄÚ½º´Ú. + { + objCpTd03115.CreateInstance( CLSID_CpTd0315 ); // KOSDAQ ¸Å¸Åó¸®. + } + else + { + TraceMsg( strSrc + "°Å·¡¼Ò/ÄÚ½º´Ú Á¾¸ñÀÌ ¾Æ´Õ´Ï´Ù." ); + goto _LAST_JOB_; + } + + DWORD dwCallTime = ::GetTickCount(); + if( !g_AppEnv.bSuccessiveBuy && (dwCallTime-m_dwCallTimeLast) <= 30000 ) + { + m_dwCallTimeLast = dwCallTime; + + TraceMsg( strSrc + "¸¶Áö¸· ¸Å¼öÁÖ¹®ÀÌ 30Ãʸ¦ Áö³ªÁö ¾Ê¾Ò½À´Ï´Ù.", CXListBox::White, CXListBox::Red, TRUE ); + goto _LAST_JOB_; + } + + m_dwCallTimeLast = dwCallTime; + + objCpTd03115->SetInputValue( 0, (LPCSTR)"2" ); // ÁÖ¹®±¸ºÐ. + objCpTd03115->SetInputValue( 1, (LPCSTR)g_theApp.m_strBankAccount ); // °èÁ¹øÈ£. + objCpTd03115->SetInputValue( 2, (LPCSTR)"10" ); // °èÁ±¸ºÐ. + objCpTd03115->SetInputValue( 3, (LPCSTR)g_strJCode ); // Á¾¸ñÄÚµå. + objCpTd03115->SetInputValue( 4, (long)nOrder ); // ÁÖ¹®¼ö·®. + objCpTd03115->SetInputValue( 5, (long)lStockPrice ); // ÁÖ¹®´Ü°¡. + objCpTd03115->SetInputValue( 6, (LPCSTR)"00" ); // ¸Å¸Å±¸ºÐ. + + short nRet = objCpTd03115->BlockRequest(); + TraceMsg( strSrc + "[¸Å¼öÁÖ¹® Ok]", TxtColor, BgColor, TRUE ); + if( nRet != 0 ) + { + strErrorMsg = "[Åë½Å¿¡·¯] :"; + if (0 != objCpTd03115->GetDibStatus()) { + strErrorMsg += (LPSTR)objCpTd03115->GetDibMsg1(); + strErrorMsg += (LPSTR)objCpTd03115->GetDibMsg2(); + strErrorMsg.TrimRight(); + AfxMessageBox(strErrorMsg); + } + } + else + { + strSuccess += "[¸Å¼öÁÖ¹®] : "; + strSuccess += (LPSTR)objCpTd03115->GetDibMsg1(); + if( objCpTd03115->GetDibStatus() == 0 ) + bSuccess = TRUE; + } + + // long nMedoLevel = nCallLevel + g_AppEnv.LevelMedo; + // if( nMedoLevel > 9 ) nMedoLevel = 9; + // m_nAutoMedoMoney = objStockJpbid2->GetDataValue(0, nMedoLevel ); // nÂ÷ ¸ÅµµÈ£°¡. + + m_nSrcJumoon_Number = objCpTd03115->GetHeaderValue(8); // ÀÚµ¿¸Å¼ö (¿ø ÁÖ¹®¹øÈ£) ¾Ë¾Æ³»±â. + objCpTd03115.Release(); + } + catch( _com_error e ) + { + _bstr_t bstrSource(e.Source()); + _bstr_t bstrDescription(e.Description()); + + strErrorMsg.Format( + "[¸Å¼öÁÖ¹® ½ÇÇàÁß ¹®Á¦°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.]\n" + "Code = = %08lx\n" + "Code meaning = %s\n" + "Source = %s\n" + "Description = %s", e.Error(), e.ErrorMessage(), (LPCTSTR) bstrSource, (LPCTSTR) bstrDescription ); + + MessageBox( strErrorMsg, "¸Å¸Å½ÇÆÐ!", MB_OK|MB_ICONSTOP ); + } + } + else + { + HLStockWindowShow( g_strJCode, "Á¶°Ç ºÒÀÏÄ¡" ); + } + + dwTimeTotal = ::GetTickCount() - m_dwTickStart; + + if( bSuccess ) + { + strSuccess.Replace( " ", "" ); + TraceMsg( strSrc + strSuccess, TxtColor, BgColor ); + + /////////////////////////////////////////////////////////////////////////// + // ¹Ìü°á ÀÜ·® 'Àü·® Ãë¼Ò¡¯ + if( g_AppEnv.bNotContractedCancel ) + { + try + { + if( cbStockType == 1 ) // °Å·¡¼Ò. + { + hr = objCpTd03147.CreateInstance( CLSID_CpTd0314 ); // °Å·¡¼Ò Ãë¼ÒÁÖ¹®°´Ã¼. + } + else if( cbStockType == 5 ) // ÄÚ½º´Ú. + { + hr = objCpTd03147.CreateInstance( CLSID_CpTd0317 ); // KOSDAQ Ãë¼ÒÁÖ¹®°´Ã¼. + } + else + { + TraceMsg( strSrc + "°Å·¡¼Ò/ÄÚ½º´Ú Á¾¸ñÀÌ ¾Æ´Õ´Ï´Ù." ); + goto _LAST_JOB_; + } + + if (SUCCEEDED(hr)) + { + objCpTd03147->SetInputValue( 0, (LPCSTR)"2" ); // ÀÜ·® Ãë¼Ò + objCpTd03147->SetInputValue( 1, (long)m_nSrcJumoon_Number); // ÁÖ¹® ¹øÈ£ + objCpTd03147->SetInputValue( 2, (LPCSTR)g_theApp.m_strBankAccount ); // °èÁ¹øÈ£. + objCpTd03147->SetInputValue( 3, (LPCSTR)"10" ); // °èÁ±¸ºÐ. + objCpTd03147->SetInputValue( 4, (LPCSTR)g_strJCode ); // Á¾¸ñÄÚµå. + objCpTd03147->SetInputValue( 5, (long)0 ); // Ãë¼Ò¼ö·®. + + short nRet = objCpTd03147->BlockRequest(); + TraceMsg(strSrc + "[Ãë¼ÒÁÖ¹® Ok]", TxtColor, BgColor, TRUE); + + CString strMessageCancel = ""; + if( nRet != 0 ) + { + strMessageCancel += "[ÀÜ·®Ãë¼Ò Åë½Å¿¡·¯] :"; + if( objCpTd03147->GetDibStatus() != 0 ) + { + strMessageCancel += (LPSTR)objCpTd03147->GetDibMsg1(); + strMessageCancel += (LPSTR)objCpTd03147->GetDibMsg2(); + strMessageCancel.TrimRight(); + AfxMessageBox(strMessageCancel); + } + + TraceMsg( strSrc + strMessageCancel, CXListBox::White, CXListBox::Red ); + } + else + { + strMessageCancel += (LPSTR)objCpTd03147->GetDibMsg1(); + strMessageCancel += (LPSTR)objCpTd03147->GetDibMsg2(); + + if( objCpTd03147->GetDibStatus() != 0 ) + TraceMsg( strSrc + "ÀÜ·®Ãë¼Ò ½ÇÆÐ: " + strMessageCancel, CXListBox::White, CXListBox::Red ); + else + TraceMsg( strSrc + "[Ãë¼ÒÁÖ¹®] : " + strMessageCancel, TxtColor, BgColor ); + } + } + + objCpTd03147.Release(); + } + catch( _com_error e ) + { + TraceMsg( strSrc + "¹Ìü°á 'ÀÜ·®Ã³¸®'Áß¿¡ ¹®Á¦°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.(¿¬¶ô¹Ù¶÷´Ï´Ù.)", CXListBox::White, CXListBox::Red ); + } + } + else + { + TraceMsg( strSrc + "¹Ì°áÁ¦ ÀÜ·®Ãë¼Ò±â´ÉÀÌ Off»óÅÂÀÔ´Ï´Ù.", CXListBox::White, CXListBox::Red ); + } + } + else + { + if( strSuccess != "" ) + { + strSuccess.Replace( " ", "" ); + TraceMsg( strSrc + strSuccess, TxtColor, BgColor ); + + wsprintf( strMsg, "[¸Å¼ö½ÇÆÐ] ¼Ò¿ä½Ã°£:%dms ¼ö·®:%d, ´Ü°¡:%d, ·¹º§:%d, ÇöÀç°¡:%d.", + dwTimeTotal, nOrder, lStockPrice, nCallLevel, Cur_lStockPrice ); + TraceMsg( strSrc + strMsg, TxtColor, BgColor, TRUE ); + } + else + { + TraceMsg( strSrc + "[¸Å¼öÁ¶°Ç¿¡ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù.]", TxtColor, BgColor, TRUE ); + } + + PlayResource(IDR_MSGTYPE_WAVE); + } + + if( bSuccess ) + { + // ·Î±×ºÐ¼®½Ã¿¡ »ç¿ëÇÏ´Â ¹®ÀåÀ̹ǷΠ¼öÁ¤ºÒ°¡ -> "[¸Å¼ö¼º°ø] %s ..." + wsprintf( strMsg, "[¸Å¼ö¼º°ø] %s ¼Ò¿ä½Ã°£:%dms ¼ö·®:%d, ´Ü°¡:%d, ·¹º§:%d, ÇöÀç°¡:%d.", + (LPSTR)(LPCTSTR)g_strJCode, dwTimeTotal, nOrder, lStockPrice, nCallLevel, Cur_lStockPrice ); + + TraceMsg( strSrc + strMsg, TxtColor, BgColor, TRUE ); + PlaySound( "./ÀÚµ¿¸Å¼ö¾Ë¸².wav" ); + + /////////////////////////////////////////////////////////////////////////// + // ¼º¸²¾¾ ÇÁ·Î±×·¥ÀÇ µ¿ÀÛÀ» ¸ØÃß°ÔÇÔ! + HWND hTkrRdrApp = ::FindWindow( "TkrRdr_MainWnd", NULL ); + if( ::IsWindow( hTkrRdrApp ) ) + ::PostMessage( hTkrRdrApp, WM_STOP_COMMAND, NULL, NULL ); + + ////////////////////////////////////////////////////// + // ¸Å¼ö¼º°ø->ÀÚµ¿Ãë¼Ò¼º°ø½Ã È­¸éÀüȯ±â´É ¼öÇà! + AutoScreenSwitch(); + } + +_LAST_JOB_: + + ////////////////////////////////////////////////////// + // ¹«Á¶°Ç Çѹø ³ª¿Â Á¾¸ñÀº [Áߺ¹Á¾¸ñ]¿¡ µî·ÏÇÔ! + g_pStockData->AddRepeatedCode( g_strJCode ); + + ////////////////////////////////////////////////////// + // Á¾¸ñÄÚµå ÀÚµ¿ÀÔ·Â. + if( WORD_THREAD_WITH_HOGA == ThreadType && (bSuccess || InputCodeTypeStatus(_nSourceFrom)) ) + { + TraceMsg( strSrc + "[Á¾¸ñÄÚµå ÀÚµ¿ÀÔ·Â] : " + g_strJCode + ", " + g_strJName, TxtColor, BgColor, TRUE ); + AutoInputJongmokCode(_nSourceFrom, g_strJCode.Right(6) ); + + if( g_AppEnv.bJInputAndStop2 ) // 2003-11-15 ÄÚµå»èÁ¦. 2004.4.28 Ãß°¡º¯°æ. + { + OnMonitorPause(); + } + } + + return; +} + + +///////////////////////////////////////////////////////////////////////// +// override to do startup +void CHookMsgDlg::StartWork() +{ + CoInitialize(NULL); +} +///////////////////////////////////////////////////////////////////////// +// override to do work +void CHookMsgDlg::DoWork(UINT ThreadType) +{ + try + { + HANDLE hThread = GetHandle(); + int nPrevThreadPriority = ::GetThreadPriority( hThread ); + + ::SetThreadPriority(hThread, THREAD_PRIORITY_TIME_CRITICAL); + + g_pStockData->m_bRunningSkip = TRUE; + _WorkThreadProc(ThreadType); + g_pStockData->m_bRunningSkip = FALSE; + + ::SetThreadPriority(hThread, nPrevThreadPriority); + } + catch( _com_error e ) + { + ::MessageBox( NULL, "´º½º¸Å¸Å ÇÁ·Î±×·¥ ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù. ¿¡·¯ÄÚµå:001", "´º½º¸Å¸Å Main Thread", MB_ICONERROR|MB_TOPMOST ); + } + catch(...) + { + ::MessageBox( NULL, "´º½º¸Å¸Å ÇÁ·Î±×·¥ ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù. ¿¡·¯ÄÚµå:002", "´º½º¸Å¸Å Main Thread", MB_ICONERROR|MB_TOPMOST ); + } +} + +///////////////////////////////////////////////////////////////////////// +// override to do shutdown +void CHookMsgDlg::EndWork() +{ + CoUninitialize(); +} + +//////////////////////////////////////////////////////////////////////////// +// Helper function. +// +// +//////////////////////////////////////////////////////////////////////////// +void CHookMsgDlg::InstallHotKey() +{ + UINT fsModifier = 0; + if (HOTKEYF_ALT & g_AppEnv.LockUnlockHotKey.wModifier) + fsModifier |= MOD_ALT; + if (HOTKEYF_CONTROL & g_AppEnv.LockUnlockHotKey.wModifier) + fsModifier |= MOD_CONTROL; + if (HOTKEYF_SHIFT & g_AppEnv.LockUnlockHotKey.wModifier) + fsModifier |= MOD_SHIFT; + if (!RegisterHotKey(m_hWnd, REGISTERHOTKEY_ID_LOCK, + fsModifier, g_AppEnv.LockUnlockHotKey.wVk)) + { + Message_Box( " ÇÖ۵î·Ï ½ÇÆÐ - [Àá±è/Ç®¸²]", ::GetLastError() ); + TraceMsg( "HotKey µî·Ï : [Àá±è/Ç®¸²] µî·Ï½ÇÆÐ!", CXListBox::Red, CXListBox::Yellow ); + } + + fsModifier = 0; + if (HOTKEYF_ALT & g_AppEnv.NP_InputCodeHotKey.wModifier) + fsModifier |= MOD_ALT; + if (HOTKEYF_CONTROL & g_AppEnv.NP_InputCodeHotKey.wModifier) + fsModifier |= MOD_CONTROL; + if (HOTKEYF_SHIFT & g_AppEnv.NP_InputCodeHotKey.wModifier) + fsModifier |= MOD_SHIFT; + if (!RegisterHotKey(m_hWnd, REGISTERHOTKEY_ID_NPINPUT, + fsModifier, g_AppEnv.NP_InputCodeHotKey.wVk)) + { +// Message_Box( " ÇÖ۵î·Ï ½ÇÆÐ - [Àá±è¶§ NewsPlus ¼öµ¿ Á¾¸ñÄÚµåÀÔ·Â]", ::GetLastError() ); + TraceMsg( "HotKey µî·Ï : [Àá±è¶§ NewsPlus ¼öµ¿ Á¾¸ñÄÚµåÀÔ·Â] µî·Ï½ÇÆÐ!", CXListBox::Red, CXListBox::Yellow ); + } +} + +void CHookMsgDlg::EmulateHotkey( WORD wVk, WORD wModifier ) +{ + //----------------------------------------------------- + // ¸ÅÅ©·Î ÇÁ·Î±×·¥¿¡¼­ ÀÌ¹Ì µî·ÏµÈ HotKey´Â Àçµî·ÏÀÌ ¾ÊµÇ¹Ç·Î + // ³» ÇÁ·Î±×·¥¿¡¼­´Â Alt۸¦ ÇÔ²² Á¶ÇÕÇØ¼­ µî·ÏÇϰí + // ¸ÅÅ©·Î ÇÁ·Î±×·¥¿¡¼­´Â Alt۸¦ Á¶ÇÕ½ÃŰÁö¾Ê°í ³ª¸ÓÁö´Â µ¿ÀÏÇÏ°Ô µî·ÏÇØ¾ßÇÔ. + //----------------------------------------------------- +// if (HOTKEYF_ALT & wModifier) +// keybd_event(VK_MENU, 0, 0, 0); + if (HOTKEYF_CONTROL & wModifier) + keybd_event(VK_CONTROL, 0, 0, 0); + if (HOTKEYF_SHIFT & wModifier) + keybd_event(VK_SHIFT, 0, 0, 0); + +// SHORT byMbyVK = VkKeyScan(ch); +// BYTE byM = HIBYTE(byMbyVK); +// BYTE byVK = LOBYTE(byMbyVK); +// if (-1 == byM || -1 == byVK) // match not found +// return; + BYTE byScan = MapVirtualKey(wVk, 0); + keybd_event( LOBYTE(wVk), byScan, 0, 0); + + //----------------------------------------------------- +// if (HOTKEYF_ALT & wModifier) +// keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); + if (HOTKEYF_CONTROL & wModifier) + keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); + if (HOTKEYF_SHIFT & wModifier) + keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); +} + +void CHookMsgDlg::TraceMsg( CString strMsg, CXListBox::Color tc, CXListBox::Color bc, BOOL bWriteFile ) +{ + static char szTime[20]; + static SYSTEMTIME time; + GetLocalTime(&time); + + wsprintf(szTime, "[%02u:%02u:%02u:%03u] ", time.wHour, time.wMinute, time.wSecond, time.wMilliseconds); + + CString strTrace = ""; + strTrace = szTime; + strTrace += strMsg; + + m_hTraceListBox.InsertString( 0, strTrace, tc, bc ); + + if( bWriteFile ) + { + // write string, without null-terminator + strTrace.Replace( "\r\n", " " ); + strTrace += "\r\n"; + g_pLogFile->Write(strTrace, strTrace.GetLength()); + + // LogTrace(strTrace); + } +} + +void CHookMsgDlg::PlaySound( CString strWaveFile ) +{ + if( g_AppEnv.bUseSoundEffect ) + { + ::PlaySound( strWaveFile, NULL, SND_ASYNC ); + } +} + +void CHookMsgDlg::AutoInputJongmokCode(int nSrcFrom, CString strCode ) +{ + // 03XX À©µµ¿ì¿¡ Á¾¸ñÄڵ带 ÀÔ·ÂÇÏ´Â »ùÇÃÄÚµå. + LPARAM lParam = (LPARAM)(LPCTSTR)strCode; + if( ::IsWindow( g_theApp.m_hFindWindow[3] ) ) + { + ::SendMessage( g_theApp.m_hFindWindow[3], WM_SETTEXT, NULL, (LPARAM)lParam); // Á¾¸ñÄڵ带 ÀÚµ¿ÀÔ·ÂÇÔ (First). + ::SendMessage( g_theApp.m_hFindWindow[3], WM_SETFOCUS, NULL, 0 ); + ::SendMessage( g_theApp.m_hFindWindow[3], WM_CHAR, 0, 0 ); + } + if( ::IsWindow( g_theApp.m_hFindWindow[4] ) ) + { + ::SendMessage( g_theApp.m_hFindWindow[4], WM_SETTEXT, NULL, (LPARAM)lParam); // Á¾¸ñÄڵ带 ÀÚµ¿ÀÔ·ÂÇÔ(Second). + ::SendMessage( g_theApp.m_hFindWindow[4], WM_SETFOCUS, NULL, 0 ); + ::SendMessage( g_theApp.m_hFindWindow[4], WM_CHAR, 0, 0 ); + } + + ////////////////////////////////////////////////////// + // 7121 ÀÚµ¿ Ŭ¸¯±â´É. + if( nSrcFrom == UM_HOOKOK_WND3 && g_AppEnv.b7121DbClick ) + ::SetTimer( m_hWnd, TIMEID_7121DBCLICK, g_AppEnv.n7121Delay, NULL ); +} + +void CHookMsgDlg::AutoScreenSwitch() +{ + // È­¸é¹øÈ£¸¦ ÀÔ·ÂÇÏ´Â »ùÇÃÄÚµå. + if( ::IsWindow( g_theApp.m_hFindWindow[5] ) ) + { + ::SendMessage( g_theApp.m_hFindWindow[5], WM_SETTEXT, NULL, (LPARAM)"" ); // ¸Åµµ(0311)È­¸éÀ¸·Î ÀÚµ¿Àüȯ½ÃÅ´. + ::SendMessage( g_theApp.m_hFindWindow[5], WM_SETFOCUS, NULL, 0 ); + ::SendMessage( g_theApp.m_hFindWindow[5], WM_CHAR, g_AppEnv.strScreenNumber[0], 0L ); + ::SendMessage( g_theApp.m_hFindWindow[5], WM_CHAR, g_AppEnv.strScreenNumber[1], 0L ); + ::SendMessage( g_theApp.m_hFindWindow[5], WM_CHAR, g_AppEnv.strScreenNumber[2], 0L ); + ::SendMessage( g_theApp.m_hFindWindow[5], WM_CHAR, g_AppEnv.strScreenNumber[3], 0L ); + } +} + +void CHookMsgDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) +{ + CDialog::OnGetMinMaxInfo(lpMMI); + + lpMMI->ptMinTrackSize.x = 100; + lpMMI->ptMinTrackSize.y = 70; + lpMMI->ptMaxTrackSize.x= ::GetSystemMetrics(SM_CXSCREEN); + lpMMI->ptMaxTrackSize.y= ::GetSystemMetrics(SM_CYSCREEN); +} + +void CHookMsgDlg::OnSize(UINT nType, int cx, int cy) +{ + CDialog::OnSize(nType, cx, cy); + + if( m_bInitSuccess ) + { + SetDlgCtrlPosition( cx, cy ); + RedrawWindow(); + } +} + +void CHookMsgDlg::SetDlgCtrlPosition(int cx, int cy) +{ + int _nHeightCaption = ::GetSystemMetrics( SM_CYCAPTION ); + _nHeightCaption += (::GetSystemMetrics( SM_CYBORDER )*2); + + GetDlgItem(IDC_TRACE_LIST )->MoveWindow( 1, 75, cx-2, cy- _nHeightCaption -73, FALSE ); + + GetDlgItem(IDC_HOOKMSG_STOCKPRICECHECK_CHK)->MoveWindow( 5, 75+(cy- _nHeightCaption -71), 85, 18, FALSE ); + GetDlgItem(IDC_HOOKMSGDLG_CP_VALUE_STATIC )->MoveWindow( 100, 75+(cy- _nHeightCaption -70), 90, 16, FALSE ); + + GetDlgItem(IDC_HOTKEYCODE_STATIC )->MoveWindow( 200, 75+(cy- _nHeightCaption -70), 70, 16, FALSE ); + GetDlgItem(IDC_HOTKEYCODE_EDIT )->MoveWindow( 275, 75+(cy- _nHeightCaption -70), 45, 16, FALSE ); +} + +void CHookMsgDlg::OnHookmsgMedoBtn() +{ +#ifdef _DEBUG + /////////////////////////////////////////////////////////////////////////// + // ÀÚµ¿¸Åµµ ÇÁ·Î±×·¥¿¡°Ô ¸Åµµ¸Þ½ÃÁö º¸³¿. + HWND hStockAutoSaleApp = ::FindWindow( "StockAutoSale_MainWnd", NULL ); + if( ::IsWindow( hStockAutoSaleApp ) ) + { + memset( &g_AutomedoData, NULL, sizeof(AUTOMEDO_MSGDATA) ); + + strncpy( (char*)g_AutomedoData.szJCode, "A000250", 6 ); + g_AutomedoData.nMesuDanga = 2384; + g_AutomedoData.nMesuSu = 410; + + g_AutoMedoCopyDataStructure.dwData = UM_AUTOMEDO; + ::SendMessage(hStockAutoSaleApp, WM_COPYDATA, (WPARAM)m_hWnd, (LPARAM)&g_AutoMedoCopyDataStructure); + } +#endif +} + +LONG CHookMsgDlg::OnReceived(WPARAM wParam, LPARAM lParam) +{ +/* + CString strMsg=""; + + try + { + if (0 != m_pCpConclusion->GetDibStatus()) { + strMsg += m_pCpConclusion->GetDibMsg1(); + strMsg += m_pCpConclusion->GetDibMsg2(); + strMsg.TrimRight(); + MessageBox(strMsg, "MesuChkCpConclusion : ¸Å¼ö°á°ú ¼ö½Å½ÇÆÐ #1", MB_OK|MB_ICONSTOP); + return 0; + } +#ifdef _DEBUG + CString strData[9]; long lData[4]; + strData[0] = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 0 ); // 0-(string)ÁÖ¹®±¸ºÐ + strData[1] = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 1 ); // 1-(string)°èÁ¸í + strData[2] = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 2 ); // 2-(string)Á¾¸ñ¸í + lData[0] = m_pCpConclusion->GetHeaderValue( 3 ); // 3-(long)ü°á¼ö·® + lData[1] = m_pCpConclusion->GetHeaderValue( 4 ); // 4-(long)ü°á°¡°Ý + lData[2] = m_pCpConclusion->GetHeaderValue( 5 ); // 5-(long)ÁÖ¹®¹øÈ£ + lData[3] = m_pCpConclusion->GetHeaderValue( 6 ); // 6-(long¿øÁÖ¹®¹øÈ£ + strData[3] = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 7 ); // 7-(string)Á¾ÇÕ°èÁ¹øÈ£ + strData[4] = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 8 ); // 8-(string)°èÁ±¸ºÐ + strData[5] = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 9 ); // 9-(string)Á¾¸ñÄÚµå + strData[6] = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 10); // 10-(string)ü°á±¸ºÐ(1:ü°á, 2:È®ÀÎ, 3:°ÅºÎ) + strData[7] = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 11); // 11-(string)½Å¿ë±¸ºÐ + strData[8] = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 12); // 12-(string)¸Å¸Å±¸ºÐ( ü°á ±¸ºÐ¿¡¼­ 1:ü°áÀÏ ¶§¸¸ 1:¸Åµµ, 2:¸Å¼ö) + + strMsg.Format( "%d : %s,%s,%s, [%d,%d] [%d, %d] %s,%s,%s [%s,%s,%s]", + m_nSrcJumoon_Number, + (LPSTR)(LPCTSTR)strData[0], (LPSTR)(LPCTSTR)strData[1], (LPSTR)(LPCTSTR)strData[2], + lData[0], lData[1], lData[2], lData[3], + (LPSTR)(LPCTSTR)strData[3], (LPSTR)(LPCTSTR)strData[4], (LPSTR)(LPCTSTR)strData[5], (LPSTR)(LPCTSTR)strData[6], (LPSTR)(LPCTSTR)strData[7], (LPSTR)(LPCTSTR)strData[8] ); + TraceMsg( strMsg, CXListBox::White, CXListBox::Blue ); + return 0; +#endif + + CString strConclusion, strGubun; + long nNumber = (long)m_pCpConclusion->GetHeaderValue( 5 ); // 5-(long)ÁÖ¹®¹øÈ£ + + if( m_nSrcJumoon_Number == nNumber ) // ¸Å¼ö(¸Åµµ)ÁÖ¹®³½ ÁÖ¹®¹øÈ£¿Í °°À»¶§¸¸ ó¸®ÇÔ. + { + strConclusion = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 10 ); // 10-(string)ü°á±¸ºÐ(1:ü°á, 2:È®ÀÎ, 3:°ÅºÎ) + if( strConclusion == "1" ) // 1:ü°á. + { + CString strJCode; + long nCount, nPrice = 0; + + strJCode = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 9 ); // 9-(string)Á¾¸ñÄÚµå + nCount = (long)m_pCpConclusion->GetHeaderValue( 3 ); // 3-(long)ü°á¼ö·® + nPrice = (long)m_pCpConclusion->GetHeaderValue( 4 ); // 4-(long)ü°á°¡°Ý + + strGubun = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 12 ); // 12-(string)¸Å¸Å±¸ºÐ( ü°á ±¸ºÐ¿¡¼­ 1:ü°áÀÏ ¶§¸¸ 1:¸Åµµ, 2:¸Å¼ö) + if( strGubun == "2" ) // ü°á¸Å¼ö. + { + if( g_AppEnv.LevelMedo < 9 ) // ÀÚµ¿¸Åµµ±â´É »ç¿ë¿©ºÎ °Ë»ç. + { + CString strJCode; + strJCode = (LPCTSTR)(_bstr_t)m_pCpConclusion->GetHeaderValue( 9 ); // 9-(string)Á¾¸ñÄÚµå + + ICpTdDibPtr _CpTd; + + long _DummyPrice; + BYTE _cbStockType; + g_pStockData->StockVerify( strJCode.Right(5), _DummyPrice, _cbStockType ); + + if( _cbStockType == 1 ) // °Å·¡¼Ò. + { + _CpTd.CreateInstance( CLSID_CpTd0311 ); // °Å·¡¼Ò ¸Å¸Åó¸®. + } + else if( _cbStockType == 5 ) // ÄÚ½º´Ú. + { + _CpTd.CreateInstance( CLSID_CpTd0315 ); // KOSDAQ ¸Å¸Åó¸®. + } + + _CpTd->SetInputValue( 0, (LPCSTR)"1" ); // ÁÖ¹®±¸ºÐ. 1:Çö±Ý¸Åµµ, 2:Çö±Ý¸Å¼ö + _CpTd->SetInputValue( 1, (LPCSTR)g_theApp.m_strBankAccount ); // °èÁ¹øÈ£. + _CpTd->SetInputValue( 2, (LPCSTR)"10" ); // °èÁ±¸ºÐ(10:À§Å¹ÀÚ, + _CpTd->SetInputValue( 3, (LPCSTR)strJCode ); // Á¾¸ñÄÚµå. + _CpTd->SetInputValue( 4, (long)nCount ); // ÁÖ¹®¼ö·®. + _CpTd->SetInputValue( 5, (long)m_nAutoMedoMoney ); // ÁÖ¹®´Ü°¡. + _CpTd->SetInputValue( 6, (LPCSTR)"00" ); // ¸Å¸Å±¸ºÐ(00:º¸Åë°¡,03:½ÃÀå°¡) + + strMsg.Format( "¡Ú¸Å¼öü°á:[%s, %7d, ´Ü°¡:%7d]->¡ÚÀÚµ¿¸Åµµ:[´Ü°¡:%d]", strJCode, nCount, nPrice, m_nAutoMedoMoney ); + TraceMsg( strMsg, CXListBox::White, CXListBox::Blue ); + short nRet = _CpTd->BlockRequest(); // ¸Å¼ö->Ãë¼Ò->¸Åµµ! + if( nRet != 0 ) + { + if (0 != _CpTd->GetDibStatus()) + AfxMessageBox("¸Åµµ½ÇÆÐ : \r\n" + strMsg); + } + + // _CpTd->GetHeaderValue(8); // Áöµ¿¸Åµµ (¿ø ÁÖ¹®¹øÈ£) ¾Ë¾Æ³»±â. + _CpTd.Release(); + } + } + else if( strGubun == "1" ) // ü°á¸Åµµ. + { + } + } + else if( strConclusion == "2" ) // 2:È®ÀÎ + { + // TraceMsg( "<¸Å¸Å È®ÀÎ>", CXListBox::White, CXListBox::Red ); + } + else if( strConclusion == "3" ) // 3:°ÅºÎ + { + // TraceMsg( "<¸Å¸Å °ÅºÎ>", CXListBox::White, CXListBox::Red ); + } + } + } + catch (_com_error e) + { + MessageBox(e.ErrorMessage(), "MesuChkCpConclusion : ¸Å¼ö°á°ú ¼ö½Å¿¡·¯ #2", MB_OK|MB_ICONSTOP); + } +*/ + return 0; +} + +void CHookMsgDlg::OnSvrconnectCheck() +{ + UpdateData(); + + if( m_bSvrConnect ) + { + CSrvConnectDlg dlg; + dlg.m_strIP = m_strSvrIP; + dlg.m_strName = m_strName; + dlg.m_nPort = m_nSvrPort; + + if(IDOK == dlg.DoModal()) + { + m_strSvrIP = dlg.m_strIP; + m_strName = dlg.m_strName; + m_nSvrPort = dlg.m_nPort; + + // ¼­¹ö Á¢¼Ó½Ãµµ. + TraceMsg( m_strName + " >> ¼­¹ö¿¬°á ½ÃµµÇÕ´Ï´Ù.." ); + m_pClientSocket = new CClientSocket(this, m_strName); + + while(!m_pClientSocket->Connect(m_strSvrIP, m_nSvrPort)) + { + int nRet = AfxMessageBox("¼­¹ö¿¡ Á¢¼Ó ÇÒ¼ö ¾ø½À´Ï´Ù.\n¼­¹ö°¡ ½ÇÇàÁßÀÎÁö È®ÀÎÇϽʽÿÀ.");// , MB_ICONQUESTION|MB_YESNO); + TraceMsg( m_strName + " >> ¼­¹ö ¿¬°á½ÇÆÐ." ); + ClientClosed(); + return; + } + + m_bSvrConnect = TRUE; // ÀçÈ®ÀÎ ÄÚµå. (UpatateData¿¡¼­ ÀÌ¹Ì TRUEÀÓ.) + } + else + { + ClientClosed(); + } + } + else + { + // Connection close... + if (m_pClientSocket) + { + m_pClientSocket->ClientSignOut(); + TraceMsg( m_strName + " >> ¼­¹öÁ¢¼ÓÀ» Á¾·áÇÕ´Ï´Ù." ); + } + + ClientClosed(); + } +} +void CHookMsgDlg::ClientClosed() +{ + if (m_pClientSocket) + { + delete m_pClientSocket; + m_pClientSocket = NULL; + } + + m_bSvrConnect = FALSE; + UpdateData(FALSE); +} + +void CHookMsgDlg::AddClientsCom(CString strFrom, CString strMessage) +{ + TraceMsg( strFrom + " >> " + strMessage ); +} + +LRESULT CHookMsgDlg::OnSvrSendCommand(WPARAM wParam, LPARAM lParam) +{ + if( m_pClientSocket ) + m_pClientSocket->SendClientMessage(m_strSendCommand); + return 0; +} + +///////////////////////////////////////////////////////////////////// +// °Å·¡¼Ò InfoTicker ¼­¹ö¿¡ Á¢¼Ó... +void CHookMsgDlg::OnInfotickerCheck() +{ + UpdateData(); + + if( m_bInfoTickerConnect ) + { + // ¼­¹ö Á¢¼Ó½Ãµµ. + m_pTickerSocket = new CTickerSocket; + if (!m_pTickerSocket->Create("203.235.1.1", 9902, this)) + { + SAFE_DELETE( m_pTickerSocket ); + + m_bInfoTickerConnect = FALSE; + UpdateData( FALSE ); + + MessageBox("[°Å·¡¼Ò InfoTicker] ¿¬°á¿¡ ½ÇÆÐÇß½À´Ï´Ù."); + return; + } + + TraceMsg( "[°Å·¡¼Ò InfoTicker] ¼­¹ö¿Í ¿¬°áÇÕ´Ï´Ù." ); + ///////////////////////////////////////////////////////////////////////////////////////////// + // InfoTicker Á¢¼Ó ID: innovision PW: 1234 + char szSend[1024] = "09010,0214,D8AE614FB43478E837D546DAB14089B6,6048B89AA390511B,0,0,0\n"; + m_pTickerSocket->Send(szSend, strlen(szSend)); + + m_bInfoTickerConnect = TRUE; // ÀçÈ®ÀÎ ÄÚµå. (UpatateData¿¡¼­ ÀÌ¹Ì TRUEÀÓ.) + } + else + { + // Connection close... + TraceMsg( "[°Å·¡¼Ò InfoTicker] Á¢¼ÓÀ» Á¾·áÇÕ´Ï´Ù." ); + + SAFE_DELETE( m_pTickerSocket ); + } + +} +// TickerSocket ¼ÒÄÏ ÇØÁ¦ +LRESULT CHookMsgDlg::OnTickerSocketClose(WPARAM wParam, LPARAM lClient) +{ + SAFE_DELETE( m_pTickerSocket ); + + m_bInfoTickerConnect = FALSE; + UpdateData( FALSE ); + + MessageBox("[°Å·¡¼Ò InfoTicker Server]¿¡¼­ Á¢¼ÓÀ» ÇØÁ¦ ½ÃÄ×½À´Ï´Ù."); + return 0; +} +// TickerSocket ¼ÒÄÏÀ¸·Î ºÎÅÍ ¼ö½ÅµÇ´Â µ¥ÀÌÅÍ +LRESULT CHookMsgDlg::OnTickerSocketReceive(WPARAM wParam, LPARAM lClient) +{ + memset(m_szTitle, NULL, MAX_RECEIVE_LEN); + memcpy( m_szTitle, m_pTickerSocket->m_byteReceive, m_pTickerSocket->m_nReceiveLen ); + m_nSourceFrom = UM_SRC_INFOTICKER; + + TRACE1("OnTickerSocketReceive : recvlen(%d) \n", m_pTickerSocket->m_nReceiveLen); + + ////////////////////////////////////////////////////////////////////// + // Á¦¸ñ¿¡¼­ Á¾¸ñÄÚµåã±â. + CString strJCode=""; + CString strJName=""; + CString strTitle = m_szTitle; + BOOL bSuccess = _ExtractJCode( m_nSourceFrom, strTitle, strJCode, strJName ); + + if( bSuccess ) + { + if( !m_bMonitorStatus ) + { + ////////////////////////////////////////////////////// + // Àá±è »óÅ¿¡¼­µµ Çѹø ³ª¿Â Á¾¸ñÀº ¹«Á¶°Ç [Áߺ¹Á¾¸ñ]¿¡ µî·ÏÇÔ! + g_pStockData->AddRepeatedCode( strJCode ); + TRACE1("OnTickerSocketReceive : [Áߺ¹Á¾¸ñ]µî·Ï : %s \n", strJCode ); + } + else + { + TRACE2("OnTickerSocketReceive : °Ë»ç½ÃÀÛ Á¾¸ñÄÚµå(%s), ³»¿ë(%s) \n", strJCode, strTitle ); + if(RetrieveNewsData()) { + m_pWorkEvent2->SetEvent(); + m_pWorkEvent->SetEvent(); + } + } + } + else + TRACE("OnTickerSocketReceive : °Å·¡¼Ò°ø½Ã ºÐ¼®¾ÈµÊ.\n"); + + return 0; +} + +bool CHookMsgDlg::RetrieveNewsData() +{ + + DWORD dwRetStart = ::GetTickCount(); + DWORD dwRetEnd; + CString n_strTitle,n_strJName,n_strJCode; + + ////////////////////////////////////////////////////////////////////// + // ŸÀÌÆ² Á¤º¸ ÀúÀå + + if(m_nSourceFrom == UM_HOOKOK_WND1 || m_nSourceFrom == UM_HOOKOK_WND2) + n_strTitle = m_szTitle; + else if(m_nSourceFrom == UM_HOOKOK_WND3) { + // Á¾¸ñ¸íÀÌ ¾ø´Â Á¤º¸´Â ¹«½ÃÇÑ´Ù. + if(m_szWnd3_Name[0] == 0) + return false; + n_strTitle = m_szWnd3_Title; + n_strJName = m_szWnd3_Name; + } + + ////////////////////////////////////////////////////////////////////// + // µ¿ÀÏ ´º½º ½ºÅµ + + // NewsPlus -> 7001 + if(m_nSourceFrom == UM_HOOKOK_WND3 && + g_nSourceFrom == UM_HOOKOK_WND2 && + !n_strTitle.Compare(g_strTitle.Right(g_strTitle.GetLength()-6))) { + TraceMsg(n_strTitle+"[NewsPLus->7001,µ¿ÀÏ´º½º ½ºÅµ]", CXListBox::Red, CXListBox::Yellow, TRUE ); + return false; + // 7001 -> NewsPlus + } else if(m_nSourceFrom == UM_HOOKOK_WND2 && + g_nSourceFrom == UM_HOOKOK_WND3 && + !g_strTitle.Compare(n_strTitle.Right(n_strTitle.GetLength()-6))) { + TraceMsg(n_strTitle+"[7001->NewsPLus,µ¿ÀÏ´º½º ½ºÅµ]", CXListBox::Red, CXListBox::Yellow, TRUE ); + return false; + } + + ////////////////////////////////////////////////////////////////////// + // Á¦¸ñ¿¡¼­ Á¾¸ñÄÚµåã±â + if( FALSE == _ExtractJCode( m_nSourceFrom, n_strTitle, n_strJCode, n_strJName ) ) + { + // TraceMsg( "[Á¾¸ñÄÚµå¾øÀ½] : " + g_strTitle, CXListBox::White, CXListBox::Red ); + return false; + } + + dwRetEnd = ::GetTickCount(); + CString strTime; + strTime.Format("(%d ms)",dwRetEnd - dwRetStart); + + TraceMsg(n_strTitle+strTime, CXListBox::Red, CXListBox::Yellow, TRUE ); + + ////////////////////////////////////////////////////////////////////// + // Á¤º¸ ÀúÀå + g_strTitle = n_strTitle; + g_strJCode = n_strJCode; + g_strJName = n_strJName; + g_nSourceFrom = m_nSourceFrom; + + return true; +}