📄 view.h
字号:
#if !defined(AFX_COLLAPSIBLETESTVIEW_H__2B5D4682_F2E0_4514_8C8B_9823859F866A__INCLUDED_)
#define AFX_COLLAPSIBLETESTVIEW_H__2B5D4682_F2E0_4514_8C8B_9823859F866A__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include <atlctrls.h>
#include "atlgdix.h"
#include "CollapsiblePanel.h"
#include "XAviPlay.h"
#include "gap_b3.h"
#include "util.h"
#include "src/buttonst.h"
#include "atltime.h"
#include "resource.h"
#include "UseShGetFileInfo.h"
#define HAVE_REMOTE
#include <pcap.h>
#pragma comment(lib,"Packet.lib")
#pragma comment(lib,"wpcap.lib")
#define MAX_PROCESS_COUNT 256
#define WM_RESETSIZE WM_USER+1023
#define WM_ERROR WM_USER+1024
#define WM_OK WM_USER+1025
#define WM_SET_PANEL_ACTIVE WM_USER+1026
#define TA_FAILED 0
#define TA_SUCCESS_CLEAN 1
#define TA_SUCCESS_KILL 2
#define TA_SUCCESS_16 3
HWND g_hWndTabView=NULL;
HWND g_hRecvWnd=NULL;
pcap_t *fp;
char g_netchardsource[1024];
BOOL g_bThreadStart=FALSE;
typedef struct tagPacketHeader{
DWORD dwFlag;
DWORD dwID;
//TCHAR szFileName[MAX_PATH];
BOOL bEnd;
DWORD dwAllSize;
DWORD dwCurrentBlockCheckSum;
DWORD dwCurrentPos;
DWORD dwCurrentSize;
}PACKETHEADER,*PPACKETHEADER;
typedef struct tagPacket{
PACKETHEADER ph;
BYTE data[1500-sizeof(PACKETHEADER)];
}PACKET,*PPACKET;
class CPacketPanel : public CDialogImpl<CPacketPanel>
{
public:
enum { IDD = IDD_PACKETPANEL };
CBrush m_brBack;
CButtonST m_btnSendPacket;
CButtonST m_btnRecvPacket;
BEGIN_MSG_MAP(CPacketPanel)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_DESTROY,OnDestroy)
MESSAGE_HANDLER(WM_CTLCOLORDLG, OnCtlColorDlg)
MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtlColorDlg)
COMMAND_HANDLER(IDC_SENDPACKET, BN_CLICKED, OnClickedSendPacket)
COMMAND_HANDLER(IDC_RECVPACKET, BN_CLICKED, OnClickedRecvPacket)
REFLECT_NOTIFICATIONS()
END_MSG_MAP()
LRESULT OnClickedSendPacket(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
if(::IsWindow(g_hWndTabView))::SendMessage(g_hWndTabView,WM_SET_PANEL_ACTIVE,0,0);
else
{
::SendMessage(GetActiveWindow(),WM_COMMAND, MAKEWPARAM(ID_FILE_NEW, 0), 0);
::SendMessage(g_hWndTabView,WM_SET_PANEL_ACTIVE,0,0);
}
return S_OK;
}
LRESULT OnClickedRecvPacket(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
if(::IsWindow(g_hWndTabView))::SendMessage(g_hWndTabView,WM_SET_PANEL_ACTIVE,0,1);
else
{
::SendMessage(GetActiveWindow(),WM_COMMAND, MAKEWPARAM(ID_FILE_NEW, 0), 0);
::SendMessage(g_hWndTabView,WM_SET_PANEL_ACTIVE,0,1);
}
return S_OK;
}
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
m_brBack.Detach();
return 0;
}
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
m_brBack.CreateSolidBrush(RGB(240,241,245));
m_btnSendPacket.SubclassWindow(GetDlgItem(IDC_SENDPACKET));
m_btnSendPacket.SetIcon(IDI_SEND1
,IDI_SEND2);
m_btnSendPacket.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(0, 0, 255));
m_btnSendPacket.SetColor(CButtonST::BTNST_COLOR_FG_OUT, RGB(0, 0, 0));
m_btnSendPacket.SetColor(CButtonST::BTNST_COLOR_BK_IN, RGB(240,241,245));
m_btnSendPacket.SetColor(CButtonST::BTNST_COLOR_BK_OUT, RGB(240,241,245));
m_btnSendPacket.DrawBorder(FALSE);
// m_btnSendPacket.SetAlign(CButtonST::ST_ALIGN_VERT);
m_btnRecvPacket.SubclassWindow(GetDlgItem(IDC_RECVPACKET));
m_btnRecvPacket.SetIcon(IDI_RECV1,IDI_RECV2);
m_btnRecvPacket.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(0, 0,255));
m_btnRecvPacket.SetColor(CButtonST::BTNST_COLOR_FG_OUT, RGB(0, 0, 0));
m_btnRecvPacket.SetColor(CButtonST::BTNST_COLOR_BK_IN, RGB(240,241,245));
m_btnRecvPacket.SetColor(CButtonST::BTNST_COLOR_BK_OUT, RGB(240,241,245));
m_btnRecvPacket.DrawBorder(false);
return 0;
}
LRESULT OnCtlColorDlg(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{ CDCHandle dc = (HDC) wParam;
dc.SetBkMode(TRANSPARENT);
return (LRESULT) (HBRUSH) m_brBack;
}
};
class CVerView : public CCollapsiblePanelImpl<CVerView>
{
public:
DECLARE_WND_CLASS(_T("WTL_CollapsiblePanel"))
typedef CCollapsiblePanelImpl<CVerView> parentClass;
CImageList m_Images;
CPacketPanel m_view1;
//CPanel1 m_view3;
BOOL PreTranslateMessage(MSG* pMsg)
{
pMsg;
return FALSE;
}
BEGIN_MSG_MAP(CCollapsibleTestView)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
CHAIN_MSG_MAP( parentClass )
END_MSG_MAP()
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
PostMessage(WM_DESTROY,0,0);
bHandled=FALSE;
m_Images.Detach();
return 0;
}
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
LRESULT lRes = parentClass::OnCreate(uMsg, wParam, lParam, bHandled);
m_Images.CreateFromImage(MAKEINTRESOURCE(IDB_HEADERS), 32, 0, RGB(0,128,128), IMAGE_BITMAP, LR_CREATEDIBSECTION);
SetImageList(m_Images, LVSIL_NORMAL);
m_view1.Create(m_hWnd);
SetExpandBitmaps(IDI_EXPAND, IDI_COLLAPSE);
InsertItem(m_view1, _T("原始包处理"),0);
SetItemExpanded(0, true);
return lRes;
}
};
class CRecvPacketDlg : public CDialogImpl<CRecvPacketDlg>
{
public:
enum { IDD = IDD_NETSTATDLG };
CBrush m_brBack;
TCHAR m_szFileName[MAX_PATH] ;
BEGIN_MSG_MAP(CRecvPacketDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_SHOWWINDOW,OnShowWindow)
MESSAGE_HANDLER(WM_RESETSIZE,OnResetSize)
MESSAGE_HANDLER(WM_ERROR,OnError)
MESSAGE_HANDLER(WM_OK,OnCheckOK)
MESSAGE_HANDLER(WM_CTLCOLORDLG, OnCtlColorDlg)
MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtlColorDlg)
COMMAND_HANDLER(IDC_BROWSER, BN_CLICKED,OnBrowse)
COMMAND_HANDLER(IDC_RECV, BN_CLICKED,OnRecv)
END_MSG_MAP()
LRESULT OnShowWindow(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if ((BOOL)wParam) {
}
return 0;
}
LRESULT OnError(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return 0;
}
LRESULT OnResetSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return 0;
}
LRESULT OnCheckOK(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return 0;
}
LRESULT OnBrowse(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
OPENFILENAME ofn; // common dialog box structure
TCHAR szFile[260]; // buffer for file name
// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = m_hWnd;
ofn.lpstrFile = szFile;
//
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not
// use the contents of szFile to initialize itself.
//
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = _T("All Files\0*.*\0");
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST ;
// Display the Open dialog box.
if (GetSaveFileName(&ofn)==TRUE) {
_tcscpy(m_szFileName,(TCHAR*)ofn.lpstrFile);
SetDlgItemText(IDC_FILENAME,m_szFileName);
}
return 0;
}
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
m_brBack.CreateSolidBrush(RGB(240,241,245));
*m_szFileName=NULL;
g_hRecvWnd=m_hWnd;
g_bThreadStart=FALSE;
return 0;
}
LRESULT OnCtlColorDlg(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return (LRESULT) (HBRUSH) m_brBack;
}
static DWORD lpListenProc(LPVOID lpParam)
{
CoInitialize(NULL);
TCHAR *szFileName=(TCHAR*)lpParam;
struct pcap_pkthdr *header;
u_char *pkt_data;
char errbuf[PCAP_ERRBUF_SIZE];
int res;
CSHProgressWnd dlg;
BOOL bCreate=FALSE;
HANDLE hFile=NULL;
BYTE cResult[46];
ZeroMemory(cResult,sizeof cResult);
cResult[45]=1;
DWORD dwID=0;
while((res = pcap_next_ex( fp, &header,(const BYTE**) &pkt_data)) >= 0)
{
if(res == 0)
/* Timeout elapsed */
continue;
if ( header->len!=1500)continue;
PPACKET pPacket=(PPACKET)pkt_data;
if (pPacket->ph.dwFlag!=0x12345678)continue;
if(pPacket->ph.dwID==dwID){
pcap_sendpacket(fp, (u_char *)cResult, sizeof cResult);
dwID++;
}
else if(pPacket->ph.dwID<dwID)
pcap_sendpacket(fp, (u_char *)cResult, sizeof cResult);
else
continue;
if(dlg.HasUserCanceled())break;
if (!bCreate) {
dlg.SetTitle ( _T("正在接收") );
dlg.SetAnimation ( IDR_FILECOPY );
dlg.SetCancelMessage ( _T("正在处理取消操作") );
dlg.SetLineText ( 1, _T("正在接收...") );
dlg.SetAllowMinimize ( true );
dlg.SetShowProgressBar ( true );
dlg.SetCalculateTime ( true );
dlg.ShowModeless(g_hWndTabView);
dlg.UpdateProgress ( 1500, pPacket->ph.dwAllSize );
dlg.ResetTimer();
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile(szFileName, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
hFile=CreateFile(szFileName,
GENERIC_WRITE|GENERIC_READ,
FILE_SHARE_WRITE|FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
DWORD dwWritten;
char* pbTemp=new char[pPacket->ph.dwAllSize];
memset(pbTemp,0,pPacket->ph.dwAllSize );
WriteFile(hFile,pbTemp,pPacket->ph.dwAllSize,&dwWritten,0);
delete[] pbTemp;
//CloseHandle(hFile);
bCreate=TRUE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -