Files
HLStock/HookMsg/HookMsgDlg.h
2013-07-20 23:23:08 +00:00

309 lines
8.9 KiB
C++

// HookMsgDlg.h : header file
//
#if !defined(AFX_HOOKMSGDLG_H__C6A5153E_1FD5_46AD_955E_DADD41BD7DAD__INCLUDED_)
#define AFX_HOOKMSGDLG_H__C6A5153E_1FD5_46AD_955E_DADD41BD7DAD__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CHookMsgDlg dialog
#include <afxpriv.h>
#include "LockControlDlg.h"
#include "./UtilClass/TrayIcon.h"
#include "TickerSocket.h"
#define WM_ICON_NOTIFY WM_USER+10
#define WM_SVRSEND_COMMAND WM_USER+200
#define WM_START_COMMAND WM_USER+9000
#define WM_STOP_COMMAND WM_USER+9001
#define WM_REJECTLISTUPDATE_COMMAND WM_USER+9010
#define TIMEID_TRAYICON 1
#define TIMEID_7121DBCLICK 2
#define UM_SRC_INFOTICKER 0x4444
class CClientSocket;
class CTickerSocket;
class CHookMsgDlg : public CDialog, public CThinThread
{
friend class CLockControlDlg;
BOOL m_bInitSuccess; // 초기화 완료여부.
private:
HANDLE hFile;
public:
void StartWork(); // override to do startup
void DoWork(UINT ThreadType); // override to do work
void EndWork(); // override to do shutdown
void _WorkThreadProc(UINT ThreadType); // 매수판단 Processing 함수.
BOOL _ExtractJCode( int nSrcType, CString &_strTitle, CString & strJCode, CString & strJName );
char m_szHotKey_JCode[20];
// IDibPtr m_pCpConclusion;
// CCpDibEvent * m_pCpConclusionEvent;
long m_nSrcJumoon_Number; // 매수(매도)원 주문번호.
long m_nAutoMedoMoney; // 자동매도시 주문금액.
BOOL m_bUsingStockCheckThread; // 코스닥 현재가 쓰레드 적용여부.
// Construction
public:
CHookMsgDlg(CWnd* pParent = NULL); // standard constructor
virtual ~CHookMsgDlg();
void PlaySound( CString strWaveFile );
void TraceMsg( CString strMsg, CXListBox::Color tc=CXListBox::Black, CXListBox::Color bc=CXListBox::White, BOOL bWriteFile=FALSE );
void SetDlgCtrlPosition(int cx, int cy);
DWORD m_dwTickStart; // 작업쓰레드의 시작시각 기록.
DWORD m_dwCallTimeLast; // 30초간의 주문호출 회수제한을 위한 이전 시각기록.
DWORD m_dwMonitorPauseTime; // 잠김상태 전환시 시각기록.
CTrayIcon m_TrayIcon;
UINT m_nTrayIconTimer;
BOOL m_bMonitorStatus;
char m_szTitle[MAX_RECEIVE_LEN]; // 뉴스 메시지 원문.
int m_nSourceFrom; // 후킹된 메시지의 원천.
//////////////////////////////////////////////////////////////////////
// 통신용 데이터.
public:
CString m_strSendCommand;
CString m_strName;
CString m_strSvrIP;
UINT m_nSvrPort;
CClientSocket * m_pClientSocket;
CTickerSocket * m_pTickerSocket; // 거래소 InfoTicker 서버에 접속.
public:
void ClientClosed();
void AddClientsCom( CString strFrom, CString strMessage );
private:
bool RetrieveNewsData();
void InstallHotKey();
void EmulateHotkey( WORD wVk, WORD wModifier );
BOOL InputCodeTypeStatus( int & nSrcType );
void HookInstallTargetWnd();
void AutoInputJongmokCode(int nSrcFrom, CString strCode );
void AutoScreenSwitch();
void HLStockWindowShow( CString strJCode, CString strExtraData = "" );
void ShowHideLockControlDlg( BOOL bShow );
CLockControlDlg * m_pLCDlg;
CFont m_LockUnlockBtnFont;
//~!
char m_szWnd3_Time[10];
char m_szWnd3_Title[MAX_RECEIVE_LEN],m_szWnd3_Name[100];
CString g_strTitle;
CString g_strJCode;
CString g_strJName;
int g_nSourceFrom;
public:
// Dialog Data
//{{AFX_DATA(CHookMsgDlg)
enum { IDD = IDD_HOOKMSG_DIALOG };
CStatic m_hCPValue;
CXListBox m_hTraceListBox;
BOOL m_bInputCode1;
BOOL m_bInputCode2;
BOOL m_bInputCode3;
BOOL m_bSvrConnect;
BOOL m_bInfoTickerConnect;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CHookMsgDlg)
public:
virtual BOOL DestroyWindow();
protected:
virtual BOOL OnInitDialog();
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
virtual void OnCancel();
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CHookMsgDlg)
afx_msg void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu);
afx_msg void OnClose();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnTimer(UINT nIDEvent);
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
afx_msg LRESULT OnNcHitTest(CPoint point);
afx_msg void OnMonitorStart();
afx_msg void OnUpdateMonitorStart(CCmdUI* pCmdUI);
afx_msg void OnMonitorPause();
afx_msg void OnUpdateMonitorPause(CCmdUI* pCmdUI);
afx_msg void OnTargetWndBtn();
afx_msg void OnUpdateTargetWndBtn(CCmdUI* pCmdUI);
afx_msg void OnHookOnOffCheck();
afx_msg void OnConfigEnvBtn();
afx_msg void OnConfigRejectlistBtn();
afx_msg void OnConfigPassListBtn();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
afx_msg void OnHookmsgMedoBtn();
afx_msg void OnHookmsgStockpriceCheck();
afx_msg void OnConfigRejectlistBtn2();
afx_msg void OnHookmsgHookstateCheck1();
afx_msg void OnHookmsgHookstateCheck2();
afx_msg void OnHookmsgHookstateCheck3();
afx_msg void OnConfigSpecialList();
afx_msg void OnConfigManualList();
afx_msg void OnSvrconnectCheck();
afx_msg void OnInfotickerCheck();
//}}AFX_MSG
afx_msg LONG OnReceived(WPARAM wParam, LPARAM lParam); // 추가한 것임
afx_msg LRESULT OnHotKey(WPARAM wParam, LPARAM lParam);
afx_msg LONG OnTrayNotification(UINT wParam, LONG lParam);
afx_msg LRESULT OnUpdateMarketInfo( WPARAM wParam, LPARAM lParam );
afx_msg LRESULT OnTargetAppDestoryed( WPARAM wParam, LPARAM lParam );
afx_msg LRESULT OnStartCommand(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnStopCommand(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnUpdateRejectListCommand(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnSvrSendCommand(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnTickerSocketClose(WPARAM wParam, LPARAM lClient); // Client 소켓 해제
afx_msg LRESULT OnTickerSocketReceive(WPARAM wParam, LPARAM lClient); // Client 소켓으로 부터 수신되는 데이터
DECLARE_MESSAGE_MAP()
};
inline void CHookMsgDlg::ShowHideLockControlDlg( BOOL bShow )
{
if( bShow )
{
if (m_pLCDlg != NULL)
{
m_pLCDlg->SetFocus ();
}
else
{
m_pLCDlg = new CLockControlDlg;
if(m_pLCDlg)
m_pLCDlg->Create( IDD_CONTROL_DLG, this );
}
g_theApp.m_bShowLockContorlDlg = TRUE;
}
else
{
if( m_pLCDlg )
m_pLCDlg->SendMessage(WM_CLOSE);
g_theApp.m_bShowLockContorlDlg = FALSE;
}
}
inline BOOL CHookMsgDlg::InputCodeTypeStatus( int & nSrcType )
{
if( nSrcType == UM_HOOKOK_WND1 )
return m_bInputCode1;
else if( nSrcType == UM_HOOKOK_WND2 )
return m_bInputCode2;
else if( nSrcType == UM_HOOKOK_WND3 )
return m_bInputCode3;
else if( nSrcType == UM_SRC_INFOTICKER )
return m_bInfoTickerConnect;
return FALSE;
}
inline void CHookMsgDlg::HLStockWindowShow( CString strJCode, CString strExtraData )
{
if( g_AppEnv.bLowmoneyInfoDlg == FALSE )
return;
try {
memset( &g_HLStockWindowData, NULL, sizeof(HLSTOCKWINDOWDATA) );
g_HLStockWindowData.wParam = 0;
g_HLStockWindowData.lParam = 0;
sprintf( g_HLStockWindowData.szJCode, "%s", strJCode );
strcpy( (char*)g_HLStockWindowData.ExtraData, strExtraData);
g_HLStockWindowData_CDS.dwData = TYPEOF_HLStockWindow;
HWND hTagretWnd = ::FindWindow( "HLStockWindow_Dialog", NULL );
if( ::IsWindow( hTagretWnd ) )
{
::SendMessage(hTagretWnd, WM_COPYDATA, (WPARAM)m_hWnd, (LPARAM)&g_HLStockWindowData_CDS);
}
else
{
TCHAR szFilePath[_MAX_PATH]={0,};
::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 = NULL;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
for(int i=0; i<10; i++)
{
HWND hTagretWnd = ::FindWindow( "HLStockWindow_Dialog", NULL );
if( ::IsWindow( hTagretWnd ) )
{
::SendMessage(hTagretWnd, WM_COPYDATA, (WPARAM)m_hWnd, (LPARAM)&g_HLStockWindowData_CDS);
break;
}
Sleep(100);
}
}
}
catch(...)
{
TRACE("HLStockWindowShow exception !!!");
}
}
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_HOOKMSGDLG_H__C6A5153E_1FD5_46AD_955E_DADD41BD7DAD__INCLUDED_)