311 lines
8.9 KiB
C++
311 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;
|
|
|
|
ICpCybosPtr m_pCpCybos;
|
|
|
|
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_)
|