// 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; m_pCpCybos = 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 ); _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); } */ m_pCpCybos.CreateInstance(CLSID_CpCybos); 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"); m_pCpCybos.Release(); 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 ); } if(m_pCpCybos->GetIsConnect() == 0) MessageBox("¿¬°áÀÌ Á¾·áµÇ¾ú½À´Ï´Ù. ´Ù½Ã Á¢¼ÓÇØÁֽñ⠹ٶø´Ï´Ù."); 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); m_szWnd3_Title[0] = NULL; m_szWnd3_Name[0] = NULL; break; // ŸÀÌÆ² case 2: memcpy(m_szWnd3_Title, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1); TRACE("[2]%s(%s)\n", m_szWnd3_Title, m_szWnd3_Name); break; // Á¾¸ñ¸í case 3: memcpy(m_szWnd3_Name, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1); TRACE("[3]%s(%s)\n", m_szWnd3_Title, m_szWnd3_Name); 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 ); // Á¦¸ñ¿¡¼­ ÄÚµå ã±â { CString Name = ""; CString Code = ""; CString strTitleTmp = m_szWnd3_Title; int iCommaPos = strTitleTmp.Find(","); if(iCommaPos >= 0) { Name = GetLastWord(strTitleTmp.Left(iCommaPos)); } else { int iSpacePos = strTitleTmp.Find(" "); Name = strTitleTmp.Left(iSpacePos); } ICpStockCodePtr objStockCode; objStockCode.CreateInstance( CLSID_CpStockCode ); Code = (LPCSTR)objStockCode->NameToCode((bstr_t)(LPCSTR)Name); if(Code[0] != NULL) { strJCode = Code; strJName = Name; } else if(g_Condition.m_SynonymList[Name.GetString()] != "") { Name = g_Condition.m_SynonymList[Name.GetString()].data(); Code = (LPCSTR)objStockCode->NameToCode((bstr_t)Name.GetString()); if(Code[0] != NULL) { strJCode = Code; strJName = Name; } } objStockCode.Release(); } 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( 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(); } } 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 if( ConditionType == HM_CONDITION_TYPE_MANUAL ) { nTotalBattingMoney = g_AppEnv.Money3; // ´º½ºÇ÷¯½º °Å·¡±Ý¾×(ÀϹÝ). nCallLevel = g_AppEnv.Level3-1; // ´º½ºÇ÷¯½º ¸Å¼ö·¹º§(ÀϹÝ). // *** SetForegroundWindow(); CString Message; Message.Format("%s(%s)\n\n¼öµ¿ Á¾¸ñÀÔ´Ï´Ù. ¸Å¼ö ÁøÇàÇϽðڽÀ´Ï±î?", (LPCSTR)g_strJName, (LPCSTR)g_strJCode); if(MessageBox(Message, "¼öµ¿ Á¾¸ñ", MB_YESNO) != IDYES) goto _LAST_JOB_; // ÆË¾÷À» ±â´Ù¸®´Â µ¿¾ÈÀÇ ½Ã°£À» Ãë¼Ò ´ë±â ½Ã°£¿¡¼­ Á¦¿Ü m_dwTickStart = ::GetTickCount(); 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 == 0 || cbStockType == 1 || cbStockType == 5 ) // °Å·¡¼Ò or ÄÚ½º´Ú. -> StockMstm¿¡ ±¸ºÐ »ç¶óÁü *** { objCpTd03115.CreateInstance( CLSID_CpTd0311 ); // °Å·¡¼Ò ¸Å¸Åó¸®. } 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" ); // ¸Å¸Å±¸ºÐ, 00:º¸Åë(»èÁ¦¿¹Á¤) objCpTd03115->SetInputValue( 8, (LPCSTR)"01" ); // ÁÖ¹®È£°¡±¸ºÐÄÚµå, 01:º¸Åë 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 == 0 || cbStockType == 1 || cbStockType == 5 ) // °Å·¡¼Ò or KOSDAQ -> StockMstm¿¡ ±¸ºÐ »ç¶óÁü *** { hr = objCpTd03147.CreateInstance( CLSID_CpTd0314 ); // °Å·¡¼Ò Ãë¼ÒÁÖ¹®°´Ã¼. or 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 ); 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; } CString CHookMsgDlg::GetLastWord(const CString& strSource) const { CString strTmp = strSource; int iPos = 0; CString strRes1 = ""; CString strRes2 = ""; CString szToken = "\"\')]\t "; strRes2 = strTmp.Tokenize(szToken, iPos); while (strRes2 != "") { strRes1 = strRes2; strRes2 = strTmp.Tokenize(szToken, iPos); } return strRes1; } 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) //{ // CString Name; // CString strTitleTmp = m_szWnd3_Title; // // int iCommaPos = strTitleTmp.Find(","); // if(iCommaPos >= 0) // { // Name = GetLastWord(strTitleTmp.Left(iCommaPos)); // } // else // { // int iSpacePos = strTitleTmp.Find(" "); // Name = strTitleTmp.Left(iSpacePos); // } // ICpStockCodePtr objStockCode; // objStockCode.CreateInstance( CLSID_CpStockCode ); // CString Code = (LPCSTR)objStockCode->NameToCode((bstr_t)(LPCSTR)Name); // objStockCode.Release(); // if(Code[0] == NULL) // return false; // strcpy(m_szWnd3_Name, Name.GetString()); // n_strJCode = Code; //} //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; } if(n_strJCode[0] == NULL) 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; }