Files
SimpleRemoter/server/2015Remote/file/CFileManagerDlg.cpp

2488 lines
84 KiB
C++
Raw Normal View History

// FileManagerDlg.cpp : implementation file
#include "stdafx.h"
#include "2015Remote.h"
#include "CFileManagerDlg.h"
#include "CFileTransferModeDlg.h"
#include "InputDlg.h"
#include <windows.h>
#include <Shlwapi.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define MAKEINT64(low, high) ((unsigned __int64)(((DWORD)(low)) | ((unsigned __int64)((DWORD)(high))) << 32))
static UINT indicators[] = {
ID_SEPARATOR, // status line indicator
ID_SEPARATOR,
ID_SEPARATOR
};
/////////////////////////////////////////////////////////////////////////////
// CFileManagerDlg dialog
using namespace file;
CFileManagerDlg::CFileManagerDlg(CWnd* pParent, Server* pIOCPServer, ClientContext* pContext)
: DialogBase(CFileManagerDlg::IDD, pParent, pIOCPServer, pContext, IDI_File)
{
m_ProgressCtrl = nullptr;
m_SearchStr = _T("");
m_bSubFordle = FALSE;
id_search_result = 0;
// <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
m_bCanAdmin = (*m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)) == 0x01;
m_strDesktopPath = (TCHAR*)m_ContextObject->m_DeCompressionBuffer.GetBuffer(2);
memset(m_bRemoteDriveList, 0, sizeof(m_bRemoteDriveList));
memcpy(m_bRemoteDriveList, m_ContextObject->m_DeCompressionBuffer.GetBuffer(1 + 1 + (m_strDesktopPath.GetLength() + 1) * sizeof(TCHAR)),
m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1 - 1 - (m_strDesktopPath.GetLength() + 1) * sizeof(TCHAR));
m_bUseAdmin = false;
m_hFileSend = INVALID_HANDLE_VALUE;
m_hFileRecv = INVALID_HANDLE_VALUE;
m_nTransferMode = TRANSFER_MODE_NORMAL;
m_nOperatingFileLength = 0;
m_nCounter = 0;
m_bIsStop = false;
DRIVE_Sys = FALSE;
DRIVE_CAZ = FALSE;
Bf_nCounters = 0;// <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڱȽ<DAB1><C8BD><EFBFBD>
Bf_dwOffsetHighs = 0;
Bf_dwOffsetLows = 0;
m_bDragging = FALSE;
}
void CFileManagerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_REMOTE_PATH, m_Remote_Directory_ComboBox);
DDX_Control(pDX, IDC_LIST_REMOTE, m_list_remote);
DDX_Control(pDX, IDC_LIST_REMOTE_DRIVER, m_list_remote_driver);
DDX_Control(pDX, IDC_BTN_SEARCH, m_BtnSearch);
DDX_Text(pDX, IDC_EDT_SEARCHSTR, m_SearchStr);
DDX_Check(pDX, IDC_CK_SUBFORDLE, m_bSubFordle);
DDX_Control(pDX, IDC_LIST_REMOTE_SEARCH, m_list_remote_search);
}
BEGIN_MESSAGE_MAP(CFileManagerDlg, CDialog)
ON_WM_QUERYDRAGICON()
ON_WM_SIZE()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_TIMER()
ON_WM_CLOSE()
ON_NOTIFY(NM_DBLCLK, IDC_LIST_REMOTE_DRIVER, OnDblclkListRemotedriver) //<2F><>1 ˫<><CBAB>
ON_NOTIFY(NM_DBLCLK, IDC_LIST_REMOTE, OnDblclkListRemote) //<2F><> ˫<><CBAB>
ON_NOTIFY(NM_RCLICK, IDC_LIST_REMOTE_DRIVER, OnRclickListRemotedriver) //<2F><>1 <20>Ҽ<EFBFBD>
ON_NOTIFY(NM_RCLICK, IDC_LIST_REMOTE, OnRclickListRemote) //<2F><> <20>Ҽ<EFBFBD>
ON_NOTIFY(NM_RCLICK, IDC_LIST_REMOTE_SEARCH, OnRclickListSearch) //<2F><><EFBFBD><EFBFBD> <20>Ҽ<EFBFBD>
ON_NOTIFY(NM_CLICK, IDC_LIST_REMOTE_DRIVER, OnclkListRemotedriver) //<2F><>1 <20><><EFBFBD><EFBFBD>
ON_NOTIFY(NM_CLICK, IDC_LIST_REMOTE, OnclkListRemote) //<2F><> <20><><EFBFBD><EFBFBD>
ON_NOTIFY(NM_CLICK, IDC_LIST_REMOTE_SEARCH, OnclickListSearch) //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_REMOTE, OnEndLabelEditListRemote)
ON_NOTIFY(LVN_BEGINDRAG, IDC_LIST_REMOTE, OnBeginDragListRemote)
ON_COMMAND(IDT_REMOTE_VIEW, OnRemoteView) //<2F><>ʾ<EFBFBD><CABE>ʽ
ON_COMMAND(IDT_REMOTE_PREV, OnRemotePrev) //<2F><><EFBFBD><EFBFBD>
ON_COMMAND(IDT_REMOTE_STOP, OnRemoteStop) //ȡ<><C8A1>
ON_BN_CLICKED(IDC_BUTTON_GO, OnGo)
ON_COMMAND(IDM_RENAME, OnRename)
ON_COMMAND(IDM_DELETE, OnDelete)
ON_COMMAND(IDM_DELETE_ENFORCE, OnDeleteEnforce)
ON_COMMAND(IDM_NEWFOLDER, OnNewFolder)
ON_COMMAND(IDM_USE_ADMIN, OnUseAdmin)
ON_COMMAND(IDM_REMOTE_OPEN_SHOW, OnRemoteOpenShow)
ON_COMMAND(IDM_REMOTE_OPEN_HIDE, OnRemoteOpenHide)
ON_COMMAND(IDM_GET_FILEINFO, OnRemoteInfo)
ON_COMMAND(ID_FILEMANGER_Encryption, OnRemoteEncryption)
ON_COMMAND(ID_FILEMANGER_decrypt, OnRemoteDecrypt)
ON_COMMAND(ID_FILEMANGER_COPY, OnRemoteCopyFile)
ON_COMMAND(ID_FILEMANGER_PASTE, OnRemotePasteFile)
ON_COMMAND(ID_FILEMANGER_ZIP, OnRemotezip)
ON_COMMAND(ID_FILEMANGER_ZIP_STOP, OnRemotezipstop)
ON_COMMAND(IDM_COMPRESS, OnCompress)
ON_COMMAND(IDM_UNCOMPRESS, OnUncompress)
ON_COMMAND(IDM_REFRESH, OnRefresh)
ON_COMMAND(IDM_TRANSFER_S, OnTransferSend)
ON_COMMAND(IDM_TRANSFER_R, OnTransferRecv)
ON_CBN_SETFOCUS(IDC_REMOTE_PATH, OnSetfocusRemotePath)
ON_BN_CLICKED(IDC_BTN_SEARCH, OnBtnSearch)
ON_BN_CLICKED(ID_SEARCH_STOP, OnBnClickedSearchStop)
ON_BN_CLICKED(ID_SEARCH_RESULT, OnBnClickedSearchResult)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFileManagerDlg message handlers
BOOL CFileManagerDlg::MyShell_GetImageLists()
{
I_ImageList0.DeleteImageList();
I_ImageList0.Create(32, 32, ILC_COLOR32 | ILC_MASK, 2, 2);
I_ImageList0.SetBkColor(::GetSysColor(COLOR_BTNFACE));
I_ImageList0.Add(AfxGetApp()->LoadIcon(IDI_MGICON_A));
I_ImageList0.Add(AfxGetApp()->LoadIcon(IDI_MGICON_C));
I_ImageList0.Add(AfxGetApp()->LoadIcon(IDI_MGICON_D));
I_ImageList0.Add(AfxGetApp()->LoadIcon(IDI_MGICON_E));
I_ImageList0.Add(AfxGetApp()->LoadIcon(IDI_MGICON_F));
I_ImageList0.Add(AfxGetApp()->LoadIcon(IDI_MGICON_G));
I_ImageList1.DeleteImageList();
I_ImageList1.Create(16, 16, ILC_COLOR32 | ILC_MASK, 2, 2);
I_ImageList1.SetBkColor(::GetSysColor(COLOR_BTNFACE));
I_ImageList1.Add(AfxGetApp()->LoadIcon(IDI_MGICON_A));
I_ImageList1.Add(AfxGetApp()->LoadIcon(IDI_MGICON_C));
I_ImageList1.Add(AfxGetApp()->LoadIcon(IDI_MGICON_D));
I_ImageList1.Add(AfxGetApp()->LoadIcon(IDI_MGICON_E));
I_ImageList1.Add(AfxGetApp()->LoadIcon(IDI_MGICON_F));
I_ImageList1.Add(AfxGetApp()->LoadIcon(IDI_MGICON_G));
m_list_remote_driver.SetImageList(&I_ImageList0, LVSIL_NORMAL);
m_list_remote_driver.SetImageList(&I_ImageList1, LVSIL_SMALL);
return TRUE;
}
BOOL CFileManagerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
RECT rect;
GetClientRect(&rect);
// <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
CString str;
str.Format(_T("<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - %s"), m_ContextObject->PeerName.c_str()), SetWindowText(str);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
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
}
m_wndStatusBar.SetPaneInfo(0, m_wndStatusBar.GetItemID(0), SBPS_STRETCH, NULL);
m_wndStatusBar.SetPaneInfo(1, m_wndStatusBar.GetItemID(1), SBPS_NORMAL, 100);
m_wndStatusBar.SetPaneInfo(2, m_wndStatusBar.GetItemID(2), SBPS_NORMAL, 210);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); //<2F><>ʾ״̬<D7B4><CCAC>
m_wndStatusBar.GetItemRect(1, &rect);
m_ProgressCtrl = new CProgressCtrl;
m_ProgressCtrl->Create(PBS_SMOOTH | WS_VISIBLE, rect, &m_wndStatusBar, 1);
m_ProgressCtrl->SetRange(0, 100); //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
m_ProgressCtrl->SetPos(0); //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰλ<C7B0><CEBB>
SHAutoComplete(GetDlgItem(IDC_REMOTE_PATH)->GetWindow(GW_CHILD)->m_hWnd, SHACF_FILESYSTEM);
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
MyShell_GetImageLists();
m_list_remote_driver.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_SUBITEMIMAGES | LVS_EX_GRIDLINES | LVS_SHAREIMAGELISTS);
m_list_remote.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_SUBITEMIMAGES | LVS_EX_GRIDLINES | LVS_SHAREIMAGELISTS);
m_list_remote_search.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_SUBITEMIMAGES | LVS_EX_GRIDLINES | LVS_SHAREIMAGELISTS);
m_list_remote.SetImageList(&(THIS_APP->m_pImageList_Large), LVSIL_NORMAL);
m_list_remote.SetImageList(&(THIS_APP->m_pImageList_Small), LVSIL_SMALL);
m_list_remote_search.SetImageList(&(THIS_APP->m_pImageList_Large), LVSIL_NORMAL);
m_list_remote_search.SetImageList(&(THIS_APP->m_pImageList_Small), LVSIL_SMALL);
m_list_remote_driver.InsertColumn(0, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), LVCFMT_LEFT, 50);
m_list_remote_driver.InsertColumn(1, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), LVCFMT_LEFT, 38);
m_list_remote_driver.InsertColumn(2, _T("<EFBFBD>ܴ<EFBFBD>С"), LVCFMT_LEFT, 70);
m_list_remote_driver.InsertColumn(3, _T("<EFBFBD><EFBFBD><EFBFBD>ÿռ<EFBFBD>"), LVCFMT_LEFT, 70);
m_list_remote.InsertColumn(0, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), LVCFMT_LEFT, 250);
m_list_remote.InsertColumn(1, _T("<EFBFBD><EFBFBD>С"), LVCFMT_LEFT, 70);
m_list_remote.InsertColumn(2, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), LVCFMT_LEFT, 120);
m_list_remote.InsertColumn(3, _T("<EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), LVCFMT_LEFT, 115);
m_list_remote.SetParenDlg(this);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>list<73><74>ͷ
m_list_remote_search.ShowWindow(SW_HIDE);
m_list_remote_search.InsertColumn(0, _T("<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>"), LVCFMT_LEFT, 130);
m_list_remote_search.InsertColumn(1, _T("<EFBFBD><EFBFBD>С"), LVCFMT_LEFT, 100);
m_list_remote_search.InsertColumn(2, _T("<EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), LVCFMT_LEFT, 100);
m_list_remote_search.InsertColumn(3, _T("<EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>"), LVCFMT_LEFT, 450);
SetWindowPos(NULL, 0, 0, 830, 500, SWP_NOMOVE);
FixedRemoteDriveList();
return TRUE;
}
void CFileManagerDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
// ״̬<D7B4><CCAC><EFBFBD><EFBFBD>û<EFBFBD>д<EFBFBD><D0B4><EFBFBD>
if (m_wndStatusBar.m_hWnd == NULL)
return;
// <20><>λ״̬<D7B4><CCAC>
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RECT rect;
m_wndStatusBar.GetItemRect(1, &rect);
m_ProgressCtrl->MoveWindow(&rect);
}
void CFileManagerDlg::OnBeginDragListRemote(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
//We will call delete later (in LButtonUp) to clean this up
if (m_list_remote.GetSelectedCount() > 1) //ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>еij<D0B5><C4B3><EFBFBD> 1 <20><><EFBFBD><EFBFBD>Ŀ
m_hCursor = AfxGetApp()->LoadCursor(IDC_MUTI_DRAG);
else
m_hCursor = AfxGetApp()->LoadCursor(IDC_DRAG);
ASSERT(m_hCursor);
m_bDragging = TRUE;
SetCapture();
*pResult = 0;
}
void CFileManagerDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
if (m_bDragging) {
m_bDragging = FALSE;
BOOL bDownload = FALSE;
SetCursor(LoadCursor(NULL, IDC_NO));
TCHAR str[1024] = TEXT("c:\\");
HWND hwnd = NULL;
POINT pNow = { 0,0 };
if (GetCursorPos(&pNow)) // <20><>ȡ<EFBFBD><C8A1><EFBFBD>굱ǰλ<C7B0><CEBB>
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, pNow.x, pNow.y, 0, 0);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, pNow.x, pNow.y, 0, 0);
Sleep(150);
HWND hwndPointNow = NULL;
hwndPointNow = ::WindowFromPoint(pNow); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ڵľ<DAB5><C4BE><EFBFBD>
TCHAR szBuf_class[MAX_PATH];
TCHAR szBuf_title[MAX_PATH];
::GetWindowText(hwndPointNow, szBuf_title, MAX_PATH);
GetClassName(hwndPointNow, szBuf_class, MAX_PATH);
if ((lstrcmp(szBuf_class, _T("SysListView32")) == 0) && (lstrcmp(szBuf_title, _T("FolderView")) == 0)) {
TCHAR DeskTopPath[255];
SHGetSpecialFolderPath(0, DeskTopPath, CSIDL_DESKTOPDIRECTORY, 0);
strLpath = DeskTopPath;
bDownload = TRUE;
} else {
GetClassName(hwndPointNow, szBuf_class, MAX_PATH);
if ((lstrcmp(szBuf_class, _T("DirectUIHWND")) == 0)) {
hwnd = ::FindWindowEx(NULL, NULL, TEXT("CabinetWClass"), NULL);
hwnd = ::FindWindowEx(hwnd, NULL, TEXT("WorkerW"), NULL);
hwnd = ::FindWindowEx(hwnd, NULL, TEXT("ReBarWindow32"), NULL);
hwnd = ::FindWindowEx(hwnd, NULL, TEXT("ComboBoxEx32"), NULL); //XP
if (hwnd == NULL) {
hwnd = ::FindWindowEx(NULL, NULL, TEXT("CabinetWClass"), NULL);
hwnd = ::FindWindowEx(hwnd, NULL, TEXT("WorkerW"), NULL);
hwnd = ::FindWindowEx(hwnd, NULL, TEXT("ReBarWindow32"), NULL);
hwnd = ::FindWindowEx(hwnd, NULL, TEXT("Address Band Root"), NULL);
hwnd = ::FindWindowEx(hwnd, NULL, TEXT("msctls_progress32"), NULL);
hwnd = ::FindWindowEx(hwnd, NULL, TEXT("Breadcrumb Parent"), NULL);
hwnd = ::FindWindowEx(hwnd, NULL, TEXT("ToolbarWindow32"), NULL);
}
if (hwnd == NULL) {
::MessageBox(NULL, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ק<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD>"), TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), 0);
} else {
::SendMessage(hwnd, WM_GETTEXT, 1024, (LPARAM)str);
strLpath = str + 4;
bDownload = TRUE;
}
}
}
if (bDownload) {
m_bIsUpload = false;
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EnableControl(FALSE);
CString file;
m_Remote_Download_Job.RemoveAll();
POSITION pos = m_list_remote.GetFirstSelectedItemPosition();
while (pos) {
int nItem = m_list_remote.GetNextSelectedItem(pos);
file = m_Remote_Path + m_list_remote.GetItemText(nItem, 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
if (m_list_remote.GetItemData(nItem))
file += '\\';
m_Remote_Download_Job.AddTail(file);
}
if (file.IsEmpty()) {
EnableControl(TRUE);
::MessageBox(m_hWnd, _T("<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), MB_OK | MB_ICONWARNING);
return;
}
if (strLpath == _T("")) {
EnableControl(TRUE);
return;
}
if (strLpath.GetAt(strLpath.GetLength() - 1) != _T('\\'))
strLpath += _T("\\");
m_nTransferMode = TRANSFER_MODE_NORMAL;
// <20><><EFBFBD>͵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendDownloadJob();
}
}
CDialog::OnLButtonUp(nFlags, point);
}
BOOL CFileManagerDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN) {
if (pMsg->wParam == VK_ESCAPE)
return true;
if (pMsg->wParam == VK_RETURN) {
if (pMsg->hwnd == m_list_remote.m_hWnd ||
pMsg->hwnd == ((CEdit*)m_Remote_Directory_ComboBox.GetWindow(GW_CHILD))->m_hWnd) {
GetRemoteFileList();
}
return TRUE;
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD><CBB4>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
if (pMsg->message == WM_LBUTTONDOWN && pMsg->hwnd == m_hWnd) {
pMsg->message = WM_NCLBUTTONDOWN;
pMsg->wParam = HTCAPTION;
}
return CDialog::PreTranslateMessage(pMsg);
}
void CFileManagerDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
m_ProgressCtrl->StepIt();
CDialog::OnTimer(nIDEvent);
}
void CFileManagerDlg::FixedRemoteDriveList()
{
// <20><><EFBFBD><EFBFBD>ϵͳͳͼ<CDB3><CDBC><EFBFBD>б<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>б<EFBFBD>
//<2F><><EFBFBD><EFBFBD>ϵͳͼ<CDB3><CDBC>
DRIVE_Sys = FALSE;
BYTE* pDrive = NULL;
pDrive = (BYTE*)m_bRemoteDriveList;
int count = 0;
int AmntMB = 0; // <20>ܴ<EFBFBD>С
int FreeMB = 0; // ʣ<><CAA3><EFBFBD>ռ<EFBFBD>
/*
6 DRIVE_FLOPPY
7 DRIVE_REMOVABLE
8 DRIVE_FIXED
9 DRIVE_REMOTE
10 DRIVE_REMOTE_DISCONNECT
11 DRIVE_CDROM
*/
int nIconIndex = -1;
//<2F><>һ<EFBFBD><D2BB>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5>б<EFBFBD><D0B1><EFBFBD>
for (int i = 0; pDrive[i] != '\0';) {
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pDrive[i] == _T('A') || pDrive[i] == _T('B')) {
nIconIndex = 0;
} else {
switch (pDrive[i + 2]) {
case DRIVE_REMOVABLE:
nIconIndex = 3;
break;
case DRIVE_FIXED:
if (!DRIVE_Sys) {
DRIVE_Sys = TRUE;
nIconIndex = 1;
} else
nIconIndex = 2;
break;
case DRIVE_REMOTE:
nIconIndex = 4;
break;
case DRIVE_CDROM:
nIconIndex = 5;
break;
default:
nIconIndex = 2;
break;
}
}
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString str;
str.Format(_T("%c:\\"), pDrive[i]);
int nItem = m_list_remote_driver.InsertItem(i, str, nIconIndex);
m_list_remote_driver.SetItemData(nItem, 1);
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
memcpy(&AmntMB, pDrive + i + 4, 4);
memcpy(&FreeMB, pDrive + i + 8, 4);
str.Format(_T("%0.1f GB"), (float)AmntMB / 1024);
m_list_remote_driver.SetItemText(nItem, 2, str);
str.Format(_T("%0.1f GB"), (float)FreeMB / 1024);
m_list_remote_driver.SetItemText(nItem, 3, str);
i += 12;
TCHAR* lpFileSystemName = NULL;
TCHAR* lpTypeName = NULL;
lpTypeName = (TCHAR*)(pDrive + i);
i += (lstrlen(lpTypeName) + 1) * sizeof(TCHAR);
lpFileSystemName = (TCHAR*)(pDrive + i);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ϊ<>վ<EFBFBD><D5BE><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (lstrlen(lpFileSystemName) == 0) {
m_list_remote_driver.SetItemText(nItem, 1, lpTypeName);
} else {
m_list_remote_driver.SetItemText(nItem, 1, lpFileSystemName);
}
i += (lstrlen(lpFileSystemName) + 1) * sizeof(TCHAR);
count++;
}
m_list_remote_driver.InsertItem(0, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), nIconIndex);
m_list_remote_driver.InsertItem(0, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), nIconIndex);
count += 2;
// <20><><EFBFBD><EFBFBD>Զ<EFBFBD>̵<EFBFBD>ǰ·<C7B0><C2B7>
m_Remote_Path = "";
m_Remote_Directory_ComboBox.ResetContent();
DRIVE_CAZ = FALSE;
DWORD_PTR dwResult;
ShowMessage(_T("Զ<EFBFBD>̼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>"));
SendMessageTimeout(m_ProgressCtrl->GetSafeHwnd(), PBM_SETPOS, 0, 0, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, NULL, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
BYTE bPacket = COMMAND_FILE_GETNETHOOD;
m_ContextObject->Send2Client(&bPacket, 1);
}
void CFileManagerDlg::fixNetHood(BYTE* pbuffer, int buffersize)
{
CString str;
TCHAR* pszFileName = NULL;
int strsize;
DWORD dwOffset = 0; // λ<><CEBB>ָ<EFBFBD><D6B8>
for (int i = 0; dwOffset < buffersize - sizeof(int);) {
memcpy(&strsize, pbuffer + dwOffset, sizeof(int));
pszFileName = (TCHAR*)(pbuffer + dwOffset + sizeof(int));
str = pszFileName;
int nItem = m_list_remote_driver.InsertItem(m_list_remote_driver.GetItemCount(), str, DRIVE_REMOTE);
m_list_remote_driver.SetItemData(nItem, 1);
m_list_remote_driver.SetItemText(nItem, 1, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
m_list_remote_driver.SetItemText(nItem, 2, _T(""));
m_list_remote_driver.SetItemText(nItem, 3, _T(""));
dwOffset += (strsize + sizeof(int));
}
}
void CFileManagerDlg::OnClose()
{
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
DestroyCursor(m_hCursor);
if (m_hFileSend != INVALID_HANDLE_VALUE) {
CloseHandle(m_hFileSend);
m_hFileSend = INVALID_HANDLE_VALUE;
}
if (m_hFileRecv != INVALID_HANDLE_VALUE) {
CloseHandle(m_hFileRecv);
m_hFileRecv = INVALID_HANDLE_VALUE;
}
int iImageCount = I_ImageList0.GetImageCount();
for (int i = 0; i < iImageCount; i++) {
I_ImageList0.Remove(-1);
}
iImageCount = I_ImageList1.GetImageCount();
for (int i = 0; i < iImageCount; i++) {
I_ImageList1.Remove(-1);
}
m_wndStatusBar.DestroyWindow();
m_ProgressCtrl->DestroyWindow();
SAFE_DELETE(m_ProgressCtrl);
DialogBase::OnClose();
}
CString CFileManagerDlg::GetParentDirectory(CString strPath)
{
CString strCurPath = strPath;
int Index = strCurPath.ReverseFind(_T('\\'));
if (Index == -1) {
return strCurPath;
}
CString str = strCurPath.Left(Index);
Index = str.ReverseFind(_T('\\'));
if (Index == -1) {
strCurPath = _T("");
return strCurPath;
}
strCurPath = str.Left(Index);
if (strCurPath.Right(1) != _T("\\"))
strCurPath += _T("\\");
return strCurPath;
}
void CFileManagerDlg::OnReceiveComplete()
{
if (m_bIsClosed) return;
switch (m_ContextObject->m_DeCompressionBuffer.GetBuffer(0)[0]) {
case TOKEN_FILE_LIST: // <20>ļ<EFBFBD><C4BC>б<EFBFBD>
FixedRemoteFileList(m_ContextObject->m_DeCompressionBuffer.GetBuffer(0), m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1);
break;
case TOKEN_FILE_SIZE: // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
CreateLocalRecvFile();
break;
case TOKEN_FILE_DATA: // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
WriteLocalRecvFile();
break;
case TOKEN_TRANSFER_FINISH: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EndLocalRecvFile();
break;
case TOKEN_CREATEFOLDER_FINISH:
GetRemoteFileList(_T("."));
break;
case TOKEN_DELETE_FINISH:
EndRemoteDeleteFile();
break;
case TOKEN_GET_TRANSFER_MODE: //<2F>ļ<EFBFBD><C4BC>ϴ<EFBFBD>
SendTransferMode();
break;
case TOKEN_DATA_CONTINUE:
SendFileData(); //<2F>ļ<EFBFBD><C4BC>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>
break;
case TOKEN_RENAME_FINISH:
// ˢ<><CBA2>Զ<EFBFBD><D4B6><EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD>
GetRemoteFileList(_T("."));
break;
case TOKEN_SEARCH_FILE_LIST:
FixedRemoteSearchFileList
(
m_ContextObject->m_DeCompressionBuffer.GetBuffer(0),
m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1
);
break;
case TOKEN_SEARCH_FILE_FINISH:
SearchEnd();
break;
case TOKEN_COMPRESS_FINISH:
GetRemoteFileList(_T("."));
break;
case TOKEN_FILE_GETNETHOOD:
fixNetHood(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1), m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1);
break;
case TOKEN_FILE_RECENT: {
CString strRecent = (TCHAR*)m_ContextObject->m_DeCompressionBuffer.GetBuffer(1);
m_Remote_Directory_ComboBox.SetWindowText(strRecent);
m_list_remote.SetSelectionMark(-1);
GetRemoteFileList();
}
break;
case TOKEN_FILE_INFO: {
CString szInfo = (TCHAR*)m_ContextObject->m_DeCompressionBuffer.GetBuffer(1);
if (MessageBox(szInfo, _T("·<EFBFBD><EFBFBD> ȷ<>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>"), MB_ICONEXCLAMATION | MB_YESNO) == IDYES) {
CStringA a;
a = szInfo;
::OpenClipboard(::GetDesktopWindow());
::EmptyClipboard();
HGLOBAL hglbCopy = GlobalAlloc(GMEM_MOVEABLE, a.GetLength() + 1);
if (hglbCopy != NULL) {
// Lock the handle and copy the text to the buffer.
LPTSTR lptstrCopy = (LPTSTR)GlobalLock(hglbCopy);
memcpy(lptstrCopy, a.GetBuffer(), a.GetLength() + 1);
GlobalUnlock(hglbCopy); // Place the handle on the clipboard.
SetClipboardData(CF_TEXT, hglbCopy);
GlobalFree(hglbCopy);
}
CloseClipboard();
}
}
break;
case TOKEN_FILE_REFRESH: {
GetRemoteFileList(_T("."));
}
break;
case TOKEN_FILE_ZIPOK: {
GetRemoteFileList(_T("."));
ShowMessage(_T("ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
MessageBox(0, _T("ZIPѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
}
break;
case TOKEN_FILE_GETINFO: {
}
break;
case TOKEN_FILE_SEARCHPLUS_LIST:
ShowSearchPlugList();
break;
case TOKEN_FILE_SEARCHPLUS_NONTFS: {
DWORD_PTR dwResult;
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2,(LPARAM)_T(" <20><><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD>NTFS<46><53>ʽ"), SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
}
break;
case TOKEN_FILE_SEARCHPLUS_HANDLE: {
DWORD_PTR dwResult;
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, (LPARAM)_T("<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԱȨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
}
break;
case TOKEN_FILE_SEARCHPLUS_INITUSN: {
DWORD_PTR dwResult;
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, (LPARAM)_T("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>"), SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
}
break;
case TOKEN_FILE_SEARCHPLUS_GETUSN: {
DWORD_PTR dwResult;
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, (LPARAM)_T("<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>"), SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
}
break;
case TOKEN_FILE_SEARCHPLUS_NUMBER: {
DWORD_PTR dwResult;
int i;
memcpy(&i, m_ContextObject->m_DeCompressionBuffer.GetBuffer() + 1, sizeof(int));
CString strMsgShow;
strMsgShow.Format(_T("<EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><D9B4><EFBFBD><EFBFBD><EFBFBD>"), i);
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, (LPARAM)(strMsgShow.GetBuffer()), SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
}
break;
default:
SendException();
break;
}
}
void CFileManagerDlg::OnReceive()
{
}
void CFileManagerDlg::GetRemoteFileList(CString directory)
{
if (directory.GetLength() == 0) {
int nItem = m_list_remote.GetSelectionMark();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>еģ<D0B5><C4A3><EFBFBD>Ŀ¼
if (nItem != -1) {
if (m_list_remote.GetItemData(nItem) == 1) {
directory = m_list_remote.GetItemText(nItem, 0);
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>õ<EFBFBD>·<EFBFBD><C2B7>
else {
m_Remote_Directory_ComboBox.GetWindowText(m_Remote_Path);
}
}
// <20>õ<EFBFBD><C3B5><EFBFBD>Ŀ¼
if (directory == _T("..")) {
if (m_Remote_Path.GetLength() == 3) return;
m_Remote_Path = GetParentDirectory(m_Remote_Path);
} else if (directory != _T(".")) {
m_Remote_Path += directory;
if (m_Remote_Path.GetLength() > 0 && m_Remote_Path.Right(1) != _T("\\"))
m_Remote_Path += _T("\\");
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>Ŀ¼,<2C><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>б<EFBFBD>
if (m_Remote_Path.GetLength() == 0) {
return;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
int PacketSize = (m_Remote_Path.GetLength() + 1) * sizeof(TCHAR) + 1;
BYTE* bPacket = (BYTE*)LocalAlloc(LPTR, PacketSize);
bPacket[0] = COMMAND_LIST_FILES;
memcpy(bPacket + 1, m_Remote_Path.GetBuffer(0), PacketSize - 1);
m_ContextObject->Send2Client(bPacket, PacketSize);
LocalFree(bPacket);
m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path);
m_Remote_Directory_ComboBox.SetCurSel(0);
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_list_remote.EnableWindow(FALSE);
m_list_remote_driver.EnableWindow(FALSE);
DRIVE_CAZ = FALSE;
}
void CFileManagerDlg::OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult)
{
if (m_list_remote.GetSelectedCount() == 0 || m_list_remote.GetItemData(m_list_remote.GetSelectionMark()) != 1) {
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ϸ<EFBFBD><CFB8>Ϣ
POSITION pos = m_list_remote.GetFirstSelectedItemPosition();
if (pos != NULL) {
int nItem = m_list_remote.GetNextSelectedItem(pos);
CString filename = m_list_remote.GetItemText(nItem, 0);
filename = m_Remote_Path + filename;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
int PacketSize = (filename.GetLength() + 1) * sizeof(TCHAR) + 1;
BYTE* bPacket = (BYTE*)LocalAlloc(LPTR, PacketSize);
bPacket[0] = COMMAND_FILE_GETINFO;
memcpy(bPacket + 1, filename.GetBuffer(0), PacketSize - 1);
m_ContextObject->Send2Client(bPacket, PacketSize);
LocalFree(bPacket);
}
return;
}
GetRemoteFileList();
*pResult = 0;
}
void CFileManagerDlg::OnDblclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
{
if (m_list_remote_driver.GetSelectedCount() == 0)
return;
int nItem = m_list_remote_driver.GetSelectionMark();
CString directory = m_list_remote_driver.GetItemText(nItem, 0);
if (directory.Compare(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>")) == 0) {
m_Remote_Directory_ComboBox.SetWindowText(m_strDesktopPath);
m_list_remote.SetSelectionMark(-1);
GetRemoteFileList();
return;
}
if (directory.Compare(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>")) == 0) {
BYTE byToken = COMMAND_FILE_RECENT;
m_ContextObject->Send2Client(&byToken, 1);
return;
}
m_Remote_Path = directory;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
int PacketSize = (directory.GetLength() + 1) * sizeof(TCHAR) + 1;
BYTE* bPacket = (BYTE*)LocalAlloc(LPTR, PacketSize);
bPacket[0] = COMMAND_LIST_FILES;
memcpy(bPacket + 1, directory.GetBuffer(0), PacketSize - 1);
m_ContextObject->Send2Client(bPacket, PacketSize);
LocalFree(bPacket);
m_Remote_Directory_ComboBox.InsertString(0, directory);
m_Remote_Directory_ComboBox.SetCurSel(0);
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_list_remote.EnableWindow(FALSE);
m_list_remote_driver.EnableWindow(FALSE);
DRIVE_CAZ = FALSE;
*pResult = 0;
}
void CFileManagerDlg::OnclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
{
}
void CFileManagerDlg::OnclkListRemote(NMHDR* pNMHDR, LRESULT* pResult)
{
}
void CFileManagerDlg::OnclickListSearch(NMHDR* pNMHDR, LRESULT* pResult)
{
}
int GetIconIndex(LPCTSTR lpFileName, DWORD dwFileAttributes);
void CFileManagerDlg::FixedRemoteFileList(BYTE* pbBuffer, DWORD dwBufferLen)
{
// <20>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD>
m_list_remote.DeleteAllItems();
int nItemIndex = 0;
m_list_remote.SetItemData
(
m_list_remote.InsertItem(nItemIndex++, _T(".."), GetIconIndex(NULL, FILE_ATTRIBUTE_DIRECTORY)),
1
);
/*
ListView <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>SetRedraw(FALSE)
<EFBFBD><EFBFBD><EFBFBD>º<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SetRedraw(TRUE)
*/
m_list_remote.SetRedraw(FALSE);
if (dwBufferLen != 0) {
//
for (int i = 0; i < 2; i++) {
// <20><><EFBFBD><EFBFBD>Token<65><6E><EFBFBD><EFBFBD>5<EFBFBD>ֽ<EFBFBD>
byte* pList = (byte*)(pbBuffer + 1);
for (byte* pBase = pList; (unsigned long)(pList - pBase) < dwBufferLen - 1;) {
TCHAR* pszFileName = NULL;
DWORD dwFileSizeHigh = 0; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ֽڴ<D6BD>С
DWORD dwFileSizeLow = 0; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ֽڴ<D6BD>С
int nItem = 0;
bool bIsInsert = false;
FILETIME ftm_strReceiveLocalFileTime;
int nType = *pList ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL;
// i Ϊ 0 ʱ<><CAB1><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC>iΪ1ʱ<31><CAB1><EFBFBD>ļ<EFBFBD>
bIsInsert = !(nType == FILE_ATTRIBUTE_DIRECTORY) == i;
pszFileName = (TCHAR*)++pList;
if (bIsInsert) {
int iicon = GetIconIndex(pszFileName, nType);
nItem = m_list_remote.InsertItem(nItemIndex++, pszFileName, iicon);
m_list_remote.SetItemData(nItem, nType == FILE_ATTRIBUTE_DIRECTORY);
SHFILEINFO sfi = {};
SHGetFileInfo(pszFileName, FILE_ATTRIBUTE_NORMAL | nType, &sfi, sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
m_list_remote.SetItemText(nItem, 2, sfi.szTypeName);
}
// <20>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC><EFBFBD>С
pList += (lstrlen(pszFileName) + 1) * sizeof(TCHAR);
if (bIsInsert) {
CString strFileSize;
memcpy(&dwFileSizeHigh, pList, 4);
memcpy(&dwFileSizeLow, pList + 4, 4);
__int64 nFileSize = ((__int64)dwFileSizeHigh << 32) + dwFileSizeLow;
if (nFileSize >= 1024 * 1024 * 1024)
strFileSize.Format(_T("%0.2f GB"), (double)nFileSize / (1024 * 1024 * 1024));
else if (nFileSize >= 1024 * 1024)
strFileSize.Format(_T("%0.2f MB"), (double)nFileSize / (1024 * 1024));
else
strFileSize.Format(_T("%I64u KB"), nFileSize / 1024 + (nFileSize % 1024 ? 1 : 0));
m_list_remote.SetItemText(nItem, 1, strFileSize);
memcpy(&ftm_strReceiveLocalFileTime, pList + 8, sizeof(FILETIME));
CTime time(ftm_strReceiveLocalFileTime);
m_list_remote.SetItemText(nItem, 3, time.Format(_T("%Y-%m-%d %H:%M")));
}
pList += 16;
}
}
}
m_list_remote.SetRedraw(TRUE);
// <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
m_list_remote.EnableWindow(TRUE);
m_list_remote_driver.EnableWindow(TRUE);
if (DRIVE_CAZ == FALSE) {
DWORD_PTR dwResult;
ShowMessage(_T("Զ<EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD>%s"), m_Remote_Path);
SendMessageTimeout(m_ProgressCtrl->GetSafeHwnd(), PBM_SETPOS, 0, 0, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, NULL, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
}
}
void CFileManagerDlg::ShowMessage(TCHAR* lpFmt, ...)
{
TCHAR buff[1024];
va_list arglist;
va_start(arglist, lpFmt);
memset(buff, 0, sizeof(buff));
vsprintf_s(buff, lpFmt, arglist);
DWORD_PTR dwResult;
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 0, (LPARAM)buff, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
va_end(arglist);
}
void CFileManagerDlg::OnGo()
{
m_Remote_Directory_ComboBox.GetWindowText(m_Remote_Path);
m_Remote_Path += _T("\\");
GetRemoteFileList(_T(".."));
}
void CFileManagerDlg::OnRemotePrev()
{
GetRemoteFileList(_T(".."));
}
//////////////////////////////////<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>//////////////////////////////////////////
void CFileManagerDlg::OnRemoteView()
{
static int i = 0;
switch (i) {
case 0:
m_list_remote.ModifyStyle(LVS_TYPEMASK, LVS_LIST);
break;
case 1:
m_list_remote.ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON);
break;
case 2:
m_list_remote.ModifyStyle(LVS_TYPEMASK, LVS_ICON);
break;
case 3:
m_list_remote.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
break;
default:
break;
}
i++;
if (i > 3) i = 0;
}
void CFileManagerDlg::OnRemoteRecent()
{
BYTE byToken = COMMAND_FILE_RECENT;
m_ContextObject->Send2Client(&byToken, 1);
}
void CFileManagerDlg::OnRemoteDesktop()
{
m_Remote_Directory_ComboBox.SetWindowText(m_strDesktopPath);
m_list_remote.SetSelectionMark(-1);
GetRemoteFileList();
}
bool CFileManagerDlg::FixedUploadDirectory(LPCTSTR lpPathName)
{
TCHAR lpszFilter[MAX_PATH];
TCHAR* lpszSlash = NULL;
memset(lpszFilter, 0, sizeof(lpszFilter));
if (lpPathName[lstrlen(lpPathName) - 1] != _T('\\'))
lpszSlash = _T("\\");
else
lpszSlash = _T("");
wsprintf(lpszFilter, _T("%s%s*.*"), lpPathName, lpszSlash);
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(lpszFilter, &wfd);
if (hFind == INVALID_HANDLE_VALUE) // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
return FALSE;
do {
if (wfd.cFileName[0] == _T('.'))
continue; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
TCHAR strDirectory[MAX_PATH];
wsprintf(strDirectory, _T("%s%s%s"), lpPathName, lpszSlash, wfd.cFileName);
FixedUploadDirectory(strDirectory); // <20><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD>еݹ<D0B5>
} else {
CString file;
file.Format(_T("%s%s%s"), lpPathName, lpszSlash, wfd.cFileName);
m_Remote_Upload_Job.AddTail(file);
// <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
}
} while (FindNextFile(hFind, &wfd));
FindClose(hFind); // <20>رղ<D8B1><D5B2>Ҿ<EFBFBD><D2BE><EFBFBD>
return true;
}
void CFileManagerDlg::EnableControl(BOOL bEnable)
{
// m_list_local.EnableWindow(bEnable);
// m_Local_Directory_ComboBox.EnableWindow(bEnable);
m_list_remote.EnableWindow(bEnable);
m_Remote_Directory_ComboBox.EnableWindow(bEnable);
}
CString CFileManagerDlg::ExtractNameFromFullPath(CString szFullPath)
{
TCHAR path_buffer[_MAX_PATH];
TCHAR fname[_MAX_FNAME];
TCHAR ext[_MAX_EXT];
_tcscpy_s(path_buffer, szFullPath);
_tsplitpath_s(szFullPath, NULL, 0, NULL, 0, fname, fname ? _MAX_FNAME : 0, ext, ext ? _MAX_EXT : 0);
return CString(fname) + CString(ext);
}
void CFileManagerDlg::OnTransferSend()
{
m_bIsUpload = true;
// <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
m_Remote_Upload_Job.RemoveAll();
CString file = GetDirectoryPath(TRUE);
if (file == "") return;
m_Local_Path = file.Left(file.ReverseFind(_T('\\')) + 1);
if (GetFileAttributes(file) & FILE_ATTRIBUTE_DIRECTORY) {
if (file.GetAt(file.GetLength() - 1) != _T('\\'))
file += _T("\\");
FixedUploadDirectory(file.GetBuffer(0));
} else {
m_Remote_Upload_Job.AddTail(file);
}
if (m_Remote_Upload_Job.IsEmpty()) {
::MessageBox(m_hWnd, _T("<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), MB_OK | MB_ICONWARNING);
return;
}
EnableControl(FALSE);
SendUploadJob();
}
void CFileManagerDlg::TransferSend(CString file)
{
if (!m_list_remote.GetItemText(0, 0).Compare(_T("")))
return;
m_bIsUpload = true;
// <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
m_Remote_Upload_Job.RemoveAll();
if (file == "") return;
m_Local_Path = file.Left(file.ReverseFind(_T('\\')) + 1);
if (GetFileAttributes(file) & FILE_ATTRIBUTE_DIRECTORY) {
if (file.GetAt(file.GetLength() - 1) != _T('\\'))
file += _T("\\");
FixedUploadDirectory(file.GetBuffer(0));
} else {
m_Remote_Upload_Job.AddTail(file);
}
if (m_Remote_Upload_Job.IsEmpty()) {
::MessageBox(m_hWnd, _T("<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), MB_OK | MB_ICONWARNING);
return;
}
EnableControl(FALSE);
SendUploadJob();
}
// <20><>ȡѡ<C8A1><D1A1><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
CString CFileManagerDlg::GetDirectoryPath(BOOL bIncludeFiles)
{
CString szSavePath;
TCHAR szBrowsePath[MAX_PATH];
ZeroMemory(szBrowsePath, sizeof(szBrowsePath));
BROWSEINFO bi = { 0 }; //<2F><>Ϊ<EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>ʼ<EFBFBD><CABC>Ϊ0.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EEB2BB><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ֵ<EFBFBD><D6B5>
bi.hwndOwner = m_hWnd;
bi.pszDisplayName = szBrowsePath;
if (bIncludeFiles) {
bi.lpszTitle = _T("<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>·<EFBFBD><EFBFBD>: ");
bi.ulFlags = BIF_BROWSEINCLUDEFILES;
} else {
bi.lpszTitle = _T("<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>: ");
bi.ulFlags = BIF_RETURNONLYFSDIRS;
}
LPITEMIDLIST lpiml = { 0 };
lpiml = SHBrowseForFolder(&bi); //<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ѡ<EFBFBD><D1A1>Ŀ¼<C4BF><C2BC><EFBFBD>򷵻<EFBFBD>NULL
if (lpiml && SHGetPathFromIDList(lpiml, szBrowsePath))//<2F><>lpiml <20>л<EFBFBD>ȡ·<C8A1><C2B7><EFBFBD><EFBFBD>Ϣ
szSavePath = szBrowsePath;
else
return _T("");
return szSavePath;
}
//////////////// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ////////////////
// ֻ<>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5>ļ<EFBFBD>
// һ<><D2BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>صڶ<D8B5><DAB6><EFBFBD><EFBFBD>ļ<EFBFBD> ...
void CFileManagerDlg::OnRemoteCopy()
{
m_bIsUpload = false;
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EnableControl(FALSE);
CString file;
m_Remote_Download_Job.RemoveAll();
POSITION pos = m_list_remote.GetFirstSelectedItemPosition();
while (pos) {
int nItem = m_list_remote.GetNextSelectedItem(pos);
file = m_Remote_Path + m_list_remote.GetItemText(nItem, 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
if (m_list_remote.GetItemData(nItem))
file += '\\';
m_Remote_Download_Job.AddTail(file);
}
if (file.IsEmpty()) {
EnableControl(TRUE);
::MessageBox(m_hWnd, _T("<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), MB_OK | MB_ICONWARNING);
return;
}
strLpath = GetDirectoryPath(FALSE);
if (strLpath == _T("")) {
EnableControl(TRUE);
return;
}
if (strLpath.GetAt(strLpath.GetLength() - 1) != _T('\\'))
strLpath += _T("\\");
m_nTransferMode = TRANSFER_MODE_NORMAL;
// <20><><EFBFBD>͵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendDownloadJob();
}
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL CFileManagerDlg::SendDownloadJob()
{
if (m_Remote_Download_Job.IsEmpty())
return FALSE;
EnableControl(FALSE);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString file = m_Remote_Download_Job.GetHead();
int nPacketSize = (file.GetLength() + 1) * sizeof(TCHAR) + 1;
BYTE* bPacket = (BYTE*)LocalAlloc(LPTR, nPacketSize);
bPacket[0] = COMMAND_DOWN_FILES;
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
memcpy(bPacket + 1, file.GetBuffer(0), (file.GetLength() + 1) * sizeof(TCHAR));
m_ContextObject->Send2Client(bPacket, nPacketSize);
LocalFree(bPacket);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
m_Remote_Download_Job.RemoveHead();
return TRUE;
}
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>
BOOL CFileManagerDlg::SendUploadJob()
{
if (m_Remote_Upload_Job.IsEmpty())
return FALSE;
EnableControl(FALSE);
CString strDestDirectory = m_Remote_Path;
// <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>Ҳ<EFBFBD><D2B2>ѡ<EFBFBD>񣬵<EFBFBD><F1A3ACB5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
int nItem = m_list_remote.GetSelectionMark();
if (!m_hCopyDestFolder.IsEmpty()) {
strDestDirectory += m_hCopyDestFolder + _T("\\");
}
if (strDestDirectory.IsEmpty()) {
m_Local_Path = _T("");
m_Remote_Upload_Job.RemoveHead();
EnableControl(TRUE);
::MessageBox(m_hWnd, _T("<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), MB_OK | MB_ICONWARNING);
return 0;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_strOperatingFile = m_Remote_Upload_Job.GetHead();
DWORD dwSizeHigh;
DWORD dwSizeLow;
CString fileRemote = m_strOperatingFile; // Զ<><D4B6><EFBFBD>ļ<EFBFBD>
// <20>õ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><E6B5BD>Զ<EFBFBD>̵<EFBFBD><CCB5>ļ<EFBFBD>·<EFBFBD><C2B7>
fileRemote.Replace(m_Local_Path, strDestDirectory);
m_strFileName = m_strUploadRemoteFile = fileRemote;
if (m_hFileSend != INVALID_HANDLE_VALUE)
CloseHandle(m_hFileSend);
m_hFileSend = CreateFile(m_strOperatingFile.GetBuffer(0),
GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (m_hFileSend == INVALID_HANDLE_VALUE)
return FALSE;
dwSizeLow = GetFileSize(m_hFileSend, &dwSizeHigh);
m_nOperatingFileLength = ((__int64)dwSizeHigh << 32) + dwSizeLow;
//CloseHandle(m_hFileSend); // <20>˴<EFBFBD><CBB4><EFBFBD>Ҫ<EFBFBD>ر<EFBFBD>, <20>Ժ<EFBFBD><D4BA><EFBFBD>Ҫ<EFBFBD><D2AA>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>(1<>ֽ<EFBFBD>token, 8<>ֽڴ<D6BD>С, <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>, '\0')
int nPacketSize = (fileRemote.GetLength() + 1) * sizeof(TCHAR) + 9;
BYTE* bPacket = (BYTE*)LocalAlloc(LPTR, nPacketSize);
memset(bPacket, 0, nPacketSize);
bPacket[0] = COMMAND_FILE_SIZE;
memcpy(bPacket + 1, &dwSizeHigh, sizeof(DWORD));
memcpy(bPacket + 5, &dwSizeLow, sizeof(DWORD));
memcpy(bPacket + 9, fileRemote.GetBuffer(0), (fileRemote.GetLength() + 1) * sizeof(TCHAR));
m_ContextObject->Send2Client(bPacket, nPacketSize);
LocalFree(bPacket);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
m_Remote_Upload_Job.RemoveHead();
return TRUE;
}
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL CFileManagerDlg::SendDeleteJob()
{
if (m_Remote_Delete_Job.IsEmpty())
return FALSE;
EnableControl(FALSE);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString file = m_Remote_Delete_Job.GetHead();
int nPacketSize = (file.GetLength() + 1) * sizeof(TCHAR) + 1;
BYTE* bPacket = (BYTE*)LocalAlloc(LPTR, nPacketSize);
m_strFileName = file;
if (file.GetAt(file.GetLength() - 1) == '\\')
bPacket[0] = COMMAND_DELETE_DIRECTORY;
else
bPacket[0] = COMMAND_DELETE_FILE;
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1);
m_ContextObject->Send2Client(bPacket, nPacketSize);
LocalFree(bPacket);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
m_Remote_Delete_Job.RemoveHead();
DRIVE_CAZ = TRUE;
return TRUE;
}
void CFileManagerDlg::CreateLocalRecvFile()
{
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>
m_nCounter = 0;
FILESIZE* pFileSize = (FILESIZE*)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1));
DWORD dwSizeHigh = pFileSize->dwSizeHigh;
DWORD dwSizeLow = pFileSize->dwSizeLow;
if (pFileSize->error==FALSE) {
EnableControl(TRUE);
return;
}
m_nOperatingFileLength = ((__int64)dwSizeHigh << 32) + dwSizeLow;
// <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
m_strOperatingFile = (TCHAR*)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(9));
m_strReceiveLocalFile = m_strOperatingFile;
// <20>õ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ı<EFBFBD><C4B1>ص<EFBFBD><D8B5>ļ<EFBFBD>·<EFBFBD><C2B7>
m_strReceiveLocalFile.Replace(m_Remote_Path, strLpath);
m_strFileName = m_strReceiveLocalFile;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
MakeSureDirectoryPathExists(m_strReceiveLocalFile.GetBuffer(0));
WIN32_FIND_DATA FindFileData;
HANDLE hFind = FindFirstFile(m_strReceiveLocalFile.GetBuffer(0), &FindFileData);
if (hFind != INVALID_HANDLE_VALUE
&& m_nTransferMode != TRANSFER_MODE_OVERWRITE_ALL
&& m_nTransferMode != TRANSFER_MODE_ADDITION_ALL
&& m_nTransferMode != TRANSFER_MODE_JUMP_ALL
) {
CFileTransferModeDlg dlg(this);
dlg.m_strFileName = m_strReceiveLocalFile;
switch (dlg.DoModal()) {
case IDC_OVERWRITE:
m_nTransferMode = TRANSFER_MODE_OVERWRITE;
break;
case IDC_OVERWRITE_ALL:
m_nTransferMode = TRANSFER_MODE_OVERWRITE_ALL;
break;
case IDC_ADDITION:
m_nTransferMode = TRANSFER_MODE_ADDITION;
break;
case IDC_ADDITION_ALL:
m_nTransferMode = TRANSFER_MODE_ADDITION_ALL;
break;
case IDC_JUMP:
m_nTransferMode = TRANSFER_MODE_JUMP;
break;
case IDC_JUMP_ALL:
m_nTransferMode = TRANSFER_MODE_JUMP_ALL;
break;
case IDC_CANCEL:
m_nTransferMode = TRANSFER_MODE_CANCEL;
break;
}
}
if (m_nTransferMode == TRANSFER_MODE_CANCEL) {
// ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_bIsStop = true;
SendStop(TRUE);
FindClose(hFind);
return;
}
int nTransferMode;
switch (m_nTransferMode) {
case TRANSFER_MODE_OVERWRITE_ALL:
nTransferMode = TRANSFER_MODE_OVERWRITE;
break;
case TRANSFER_MODE_ADDITION_ALL:
nTransferMode = TRANSFER_MODE_ADDITION;
break;
case TRANSFER_MODE_JUMP_ALL:
nTransferMode = TRANSFER_MODE_JUMP;
break;
default:
nTransferMode = m_nTransferMode;
}
// 1<>ֽ<EFBFBD>Token,<2C><><EFBFBD>ֽ<EFBFBD>ƫ<EFBFBD>Ƹ<EFBFBD><C6B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>λ
BYTE bToken[9];
DWORD dwCreationDisposition; // <20>ļ<EFBFBD><C4BC>򿪷<EFBFBD>ʽ
memset(bToken, 0, sizeof(bToken));
bToken[0] = COMMAND_CONTINUE;
// <20>ļ<EFBFBD><C4BC>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>
if (hFind != INVALID_HANDLE_VALUE) {
// <20><>ʾ<EFBFBD><CABE>ʲô
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (nTransferMode == TRANSFER_MODE_ADDITION) {
memcpy(bToken + 1, &FindFileData.nFileSizeHigh, 4);
memcpy(bToken + 5, &FindFileData.nFileSizeLow, 4);
// <20><><EFBFBD>յij<D5B5><C4B3>ȵ<EFBFBD><C8B5><EFBFBD>
m_nCounter += (__int64)FindFileData.nFileSizeHigh << 32;
m_nCounter += FindFileData.nFileSizeLow;
dwCreationDisposition = OPEN_EXISTING;
}
// <20><><EFBFBD><EFBFBD>
else if (nTransferMode == TRANSFER_MODE_OVERWRITE) {
// ƫ<><C6AB><EFBFBD><EFBFBD>0
memset(bToken + 1, 0, 8);
// <20><><EFBFBD>´<EFBFBD><C2B4><EFBFBD>
dwCreationDisposition = CREATE_ALWAYS;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƶ<EFBFBD>-1
else if (nTransferMode == TRANSFER_MODE_JUMP) {
DWORD dwOffset = -1;
memcpy(bToken + 1, &dwOffset, 4);
memcpy(bToken + 5, &dwOffset, 4);
dwCreationDisposition = OPEN_EXISTING;
DWORD_PTR dwResult;
SendMessageTimeout(m_ProgressCtrl->GetSafeHwnd(), PBM_SETPOS, 100, 0, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
}
} else {
// ƫ<><C6AB><EFBFBD><EFBFBD>0
memset(bToken + 1, 0, 8);
// <20><><EFBFBD>´<EFBFBD><C2B4><EFBFBD>
dwCreationDisposition = CREATE_ALWAYS;
}
FindClose(hFind);
if (m_hFileRecv != INVALID_HANDLE_VALUE)
CloseHandle(m_hFileRecv);
m_hFileRecv = CreateFile(m_strReceiveLocalFile.GetBuffer(0),
GENERIC_WRITE, 0, NULL, dwCreationDisposition, FILE_ATTRIBUTE_NORMAL, 0);
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (m_hFileRecv == INVALID_HANDLE_VALUE) {
m_nOperatingFileLength = 0;
m_nCounter = 0;
::MessageBox(m_hWnd, m_strReceiveLocalFile + _T(" <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), MB_OK | MB_ICONWARNING);
return;
}
ShowProgress();
if (m_bIsStop)
SendStop(TRUE);
else {
// <20><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>token,<2C><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
m_ContextObject->Send2Client(bToken, sizeof(bToken));
}
}
// д<><D0B4><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
void CFileManagerDlg::WriteLocalRecvFile()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE* pData;
DWORD dwBytesToWrite;
DWORD dwBytesWrite = 0;
int nHeadLength = 9; // 1 + 4 + 4 <20><><EFBFBD>ݰ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ϊ<EFBFBD>̶<EFBFBD><CCB6><EFBFBD>9
FILESIZE* pFileSize;
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ݵ<EFBFBD>ƫ<EFBFBD><C6AB>
pData = m_ContextObject->m_DeCompressionBuffer.GetBuffer(nHeadLength);
pFileSize = (FILESIZE*)m_ContextObject->m_DeCompressionBuffer.GetBuffer(1);
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD>ƫ<EFBFBD><C6AB>, <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//m_nCounter = MAKEINT64(pFileSize->dwSizeLow, pFileSize->dwSizeHigh);
LONG dwOffsetHigh = pFileSize->dwSizeHigh;
LONG dwOffsetLow = pFileSize->dwSizeLow;
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD>ƫ<EFBFBD><C6AB>, <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_nCounter = MAKEINT64(dwOffsetLow, dwOffsetHigh);
if (m_nCounter < 0) { //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_nCounter = Bf_nCounters;
dwOffsetHigh = Bf_dwOffsetHighs;
dwOffsetLow = Bf_dwOffsetLows;
} else {
Bf_nCounters = m_nCounter;
Bf_dwOffsetHighs = dwOffsetHigh;
Bf_dwOffsetLows = dwOffsetLow;
dwBytesToWrite = m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - nHeadLength;
SetFilePointer(m_hFileRecv, dwOffsetLow, &dwOffsetHigh, FILE_BEGIN);
BOOL bResult = FALSE;
int i = 0;
for (i = 0; i < MAX_WRITE_RETRY; i++) {
// д<><D0B4><EFBFBD>ļ<EFBFBD>
bResult = WriteFile(m_hFileRecv, pData, dwBytesToWrite, &dwBytesWrite, NULL);
if (bResult)
break;
}
if (i == MAX_WRITE_RETRY && !bResult) {
::MessageBox(m_hWnd, m_strReceiveLocalFile + _T(" <20>ļ<EFBFBD>д<EFBFBD><D0B4>ʧ<EFBFBD><CAA7>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), MB_OK | MB_ICONWARNING);
}
dwOffsetLow = 0;
dwOffsetHigh = 0;
dwOffsetLow = SetFilePointer(m_hFileRecv, dwOffsetLow, &dwOffsetHigh, FILE_CURRENT);
// Ϊ<>˱Ƚϣ<C8BD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_nCounter += dwBytesWrite;
ShowProgress();
}
if (m_bIsStop)
SendStop(TRUE);
else {
BYTE bToken[9];
bToken[0] = COMMAND_CONTINUE;
memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow));
m_ContextObject->Send2Client(bToken, sizeof(bToken));
}
}
void CFileManagerDlg::EndLocalRecvFile()
{
m_nCounter = 0;
m_strOperatingFile = "";
m_nOperatingFileLength = 0;
if (m_hFileRecv != INVALID_HANDLE_VALUE) {
CloseHandle(m_hFileRecv);
m_hFileRecv = INVALID_HANDLE_VALUE;
}
if (m_Remote_Download_Job.IsEmpty() || m_bIsStop) {
m_Remote_Download_Job.RemoveAll();
// <20><><EFBFBD>ô<EFBFBD><C3B4>ʽ
m_nTransferMode = TRANSFER_MODE_NORMAL;
EnableControl(TRUE);
DWORD_PTR dwResult;
if (m_bIsStop) {
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2,
(LPARAM)_T(" ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
} else {
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2,
(LPARAM)_T(" ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
}
m_bIsStop = false;
} else {
// <20>ҿ<EFBFBD><D2BF><EFBFBD><EFBFBD><EFBFBD>sleep<65>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD>ûsend<6E><64>ȥ
Sleep(5);
SendDownloadJob();
}
return;
}
void CFileManagerDlg::EndLocalUploadFile()
{
m_nCounter = 0;
m_strOperatingFile = _T("");
m_nOperatingFileLength = 0;
if (m_hFileSend != INVALID_HANDLE_VALUE) {
CloseHandle(m_hFileSend);
m_hFileSend = INVALID_HANDLE_VALUE;
}
SendStop(FALSE); // <20><><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>, <20><><EFBFBD>ض˲Ż<CBB2><C5BB>رվ<D8B1><D5BE><EFBFBD>
if (m_Remote_Upload_Job.IsEmpty() || m_bIsStop) {
m_Remote_Upload_Job.RemoveAll();
EnableControl(TRUE);
GetRemoteFileList(_T("."));
DWORD_PTR dwResult;
if (m_bIsStop) {
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2,
(LPARAM)_T(" ȡ<><C8A1><EFBFBD>ϴ<EFBFBD>"), SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
} else {
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2,
(LPARAM)_T(" ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
}
m_bIsStop = false;
DRIVE_CAZ = TRUE;
} else {
Sleep(5);
SendUploadJob();
}
return;
}
void CFileManagerDlg::EndRemoteDeleteFile()
{
if (m_Remote_Delete_Job.IsEmpty() || m_bIsStop) {
m_bIsStop = false;
EnableControl(TRUE);
GetRemoteFileList(_T("."));
DWORD_PTR dwResult;
if (m_strFileName.GetAt(m_strFileName.GetLength() - 1) == '\\')
ShowMessage(_T("ɾ<EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD>%s (<28><><EFBFBD><EFBFBD>)"), m_strFileName);
else
ShowMessage(_T("ɾ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>%s (<28><><EFBFBD><EFBFBD>)"), m_strFileName);
SendMessageTimeout(m_ProgressCtrl->GetSafeHwnd(), PBM_SETPOS, 0, 0, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, NULL, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
DRIVE_CAZ = TRUE;
} else {
Sleep(5);
SendDeleteJob();
}
return;
}
void CFileManagerDlg::SendException()
{
BYTE bBuff = COMMAND_FILE_EXCEPTION;
m_ContextObject->Send2Client(&bBuff, 1);
}
void CFileManagerDlg::SendContinue()
{
BYTE bBuff = COMMAND_CONTINUE;
m_ContextObject->Send2Client(&bBuff, 1);
}
void CFileManagerDlg::SendStop(BOOL bIsDownload)
{
if (m_hFileRecv != INVALID_HANDLE_VALUE) {
CloseHandle(m_hFileRecv);
m_hFileRecv = INVALID_HANDLE_VALUE;
}
BYTE bBuff[2];
bBuff[0] = COMMAND_STOP;
bBuff[1] = bIsDownload;
m_ContextObject->Send2Client(bBuff, sizeof(bBuff));
}
void CFileManagerDlg::ShowProgress()
{
TCHAR* lpDirection = NULL;
if (m_bIsUpload)
lpDirection = _T("<EFBFBD>ļ<EFBFBD><EFBFBD>ϴ<EFBFBD>");
else
lpDirection = _T("<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
if (m_nCounter == -1) {
m_nCounter = m_nOperatingFileLength;
}
int progress = (int)((double)(m_nCounter * 100) / m_nOperatingFileLength);
CString str;
DWORD_PTR dwResult;
if (m_nCounter >= 1024 * 1024 * 1024)
str.Format(_T("%.2f GB (%d%%)"), (double)m_nCounter / (1024 * 1024 * 1024), progress);
else if (m_nCounter >= 1024 * 1024)
str.Format(_T("%.2f MB (%d%%)"), (double)m_nCounter / (1024 * 1024), progress);
else
str.Format(_T("%I64u KB (%d%%)"), m_nCounter / 1024 + (m_nCounter % 1024 ? 1 : 0), progress);
ShowMessage(_T("%s: %s"), lpDirection, m_strFileName);
SendMessageTimeout(m_ProgressCtrl->GetSafeHwnd(), PBM_SETPOS, (WPARAM)progress, 0, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, (LPARAM)str.GetBuffer(0), SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
if (m_nCounter == m_nOperatingFileLength) {
m_nCounter = m_nOperatingFileLength = 0;
// <20>ر<EFBFBD><D8B1>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
}
}
void CFileManagerDlg::OnRemoteDelete()
{
m_bIsUpload = false;
// TODO: Add your command handler code here
CString str;
if (m_list_remote.GetSelectedCount() > 1)
str.Format(_T("ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?"), m_list_remote.GetSelectedCount());
else {
CString file = m_list_remote.GetItemText(m_list_remote.GetSelectionMark(), 0);
if (m_list_remote.GetItemData(m_list_remote.GetSelectionMark()) == 1)
str.Format(_T("ȷʵҪɾ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>С<EFBFBD>%s<><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?"), file);
else
str.Format(_T("ȷʵҪ<EFBFBD>ѡ<EFBFBD>%s<><73>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?"), file);
}
if (::MessageBox(m_hWnd, str, _T("ȷ<EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>"), MB_YESNO | MB_ICONQUESTION) == IDNO)
return;
m_Remote_Delete_Job.RemoveAll();
POSITION pos = m_list_remote.GetFirstSelectedItemPosition(); //iterator for the CListCtrl
while (pos) { //so long as we have a valid POSITION, we keep iterating
int nItem = m_list_remote.GetNextSelectedItem(pos);
CString file = m_Remote_Path + m_list_remote.GetItemText(nItem, 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
if (m_list_remote.GetItemData(nItem))
file += _T('\\');
m_Remote_Delete_Job.AddTail(file);
}
EnableControl(FALSE);
// <20><><EFBFBD>͵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendDeleteJob();
}
void CFileManagerDlg::OnRemoteStop()
{
m_bIsStop = true;
}
void CFileManagerDlg::PostNcDestroy()
{
if (!m_bIsClosed)
OnClose();
CDialog::PostNcDestroy();
delete this;
}
void CFileManagerDlg::SendTransferMode()
{
CFileTransferModeDlg dlg(this);
dlg.m_strFileName = m_strUploadRemoteFile;
switch (dlg.DoModal()) {
case IDC_OVERWRITE:
m_nTransferMode = TRANSFER_MODE_OVERWRITE;
break;
case IDC_OVERWRITE_ALL:
m_nTransferMode = TRANSFER_MODE_OVERWRITE_ALL;
break;
case IDC_ADDITION:
m_nTransferMode = TRANSFER_MODE_ADDITION;
break;
case IDC_ADDITION_ALL:
m_nTransferMode = TRANSFER_MODE_ADDITION_ALL;
break;
case IDC_JUMP:
m_nTransferMode = TRANSFER_MODE_JUMP;
break;
case IDC_JUMP_ALL:
m_nTransferMode = TRANSFER_MODE_JUMP_ALL;
break;
case IDC_CANCEL:
m_nTransferMode = TRANSFER_MODE_CANCEL;
break;
}
if (m_nTransferMode == TRANSFER_MODE_CANCEL) {
m_bIsStop = true;
EndLocalUploadFile();
return;
}
BYTE bToken[5];
bToken[0] = COMMAND_SET_TRANSFER_MODE;
memcpy(bToken + 1, &m_nTransferMode, sizeof(m_nTransferMode));
m_ContextObject->Send2Client(bToken, sizeof(bToken));
}
void CFileManagerDlg::SendFileData()
{
FILESIZE* pFileSize = (FILESIZE*)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1));
LONG dwOffsetHigh = pFileSize->dwSizeHigh;
LONG dwOffsetLow = pFileSize->dwSizeLow;
m_nCounter = MAKEINT64(pFileSize->dwSizeLow, pFileSize->dwSizeHigh);
ShowProgress();
if (m_nCounter == m_nOperatingFileLength || (dwOffsetHigh == -1 && dwOffsetLow == -1) || m_bIsStop) {
EndLocalUploadFile();
return;
}
SetFilePointer(m_hFileSend, dwOffsetLow, &dwOffsetHigh, FILE_BEGIN);
int nHeadLength = 9; // 1 + 4 + 4 <20><><EFBFBD>ݰ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ϊ<EFBFBD>̶<EFBFBD><CCB6><EFBFBD>9
int dwDownFileSize = GetFileSize(m_hFileSend, NULL);
DWORD nNumberOfBytesToRead = MAX_SEND_BUFFER - nHeadLength;
DWORD nNumberOfBytesRead = 0;
BYTE* lpBuffer = (BYTE*)LocalAlloc(LPTR, MAX_SEND_BUFFER);
// Token, <20><>С<EFBFBD><D0A1>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>
lpBuffer[0] = COMMAND_FILE_DATA;
memcpy(lpBuffer + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
memcpy(lpBuffer + 5, &dwOffsetLow, sizeof(dwOffsetLow));
// <20><><EFBFBD><EFBFBD>ֵ
bool bRet = true;
ReadFile(m_hFileSend, lpBuffer + nHeadLength, nNumberOfBytesToRead, &nNumberOfBytesRead, NULL);
//CloseHandle(m_hFileSend); // <20>˴<EFBFBD><CBB4><EFBFBD>Ҫ<EFBFBD>ر<EFBFBD>, <20>Ժ<EFBFBD><D4BA><EFBFBD>Ҫ<EFBFBD><D2AA>
if (nNumberOfBytesRead > 0) {
int nPacketSize = nNumberOfBytesRead + nHeadLength;
m_ContextObject->Send2Client(lpBuffer, nPacketSize);
}
LocalFree(lpBuffer);
}
bool CFileManagerDlg::DeleteDirectory(LPCTSTR lpszDirectory)
{
WIN32_FIND_DATA wfd;
TCHAR lpszFilter[MAX_PATH];
wsprintf(lpszFilter, _T("%s\\*.*"), lpszDirectory);
HANDLE hFind = FindFirstFile(lpszFilter, &wfd);
if (hFind == INVALID_HANDLE_VALUE) // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
return FALSE;
do {
if (wfd.cFileName[0] != '.') {
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
TCHAR strDirectory[MAX_PATH];
wsprintf(strDirectory, _T("%s\\%s"), lpszDirectory, wfd.cFileName);
DeleteDirectory(strDirectory);
} else {
TCHAR strFile[MAX_PATH];
wsprintf(strFile, _T("%s\\%s"), lpszDirectory, wfd.cFileName);
DeleteFile(strFile);
}
}
} while (FindNextFile(hFind, &wfd));
FindClose(hFind); // <20>رղ<D8B1><D5B2>Ҿ<EFBFBD><D2BE><EFBFBD>
if (!RemoveDirectory(lpszDirectory)) {
return FALSE;
}
return true;
}
void CFileManagerDlg::OnRemoteNewFolder()
{
if (m_Remote_Path == _T(""))
return;
CInputDialog dlg(this);
dlg.Init(_T("<EFBFBD>½<EFBFBD>Ŀ¼"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:"));
if (dlg.DoModal() == IDOK && dlg.m_str.GetLength()) {
CString file = m_Remote_Path + dlg.m_str + _T("\\");
UINT nPacketSize = (file.GetLength() + 1) * sizeof(TCHAR) + 1;
LPBYTE lpBuffer = new BYTE[nPacketSize];
lpBuffer[0] = COMMAND_CREATE_FOLDER;
memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1);
m_ContextObject->Send2Client(lpBuffer, nPacketSize);
SAFE_DELETE_AR(lpBuffer);
}
}
void CFileManagerDlg::OnTransferRecv()
{
OnRemoteCopy(); //<2F><><EFBFBD><EFBFBD>
}
void CFileManagerDlg::OnRename()
{
m_list_remote.EditLabel(m_list_remote.GetSelectionMark());
}
void CFileManagerDlg::OnEndLabelEditListRemote(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here
CString str, strExistingFileName, strNewFileName;
m_list_remote.GetEditControl()->GetWindowText(str);
strExistingFileName = m_Remote_Path + m_list_remote.GetItemText(pDispInfo->item.iItem, 0);
strNewFileName = m_Remote_Path + str;
if (strExistingFileName != strNewFileName) {
UINT nPacketSize = (strExistingFileName.GetLength() + 1) * sizeof(TCHAR) + (strNewFileName.GetLength() + 1) * sizeof(TCHAR) + 1;
LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, nPacketSize);
lpBuffer[0] = COMMAND_RENAME_FILE;
memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), (strExistingFileName.GetLength() + 1) * sizeof(TCHAR));
memcpy(lpBuffer + 1 + (strExistingFileName.GetLength() + 1) * sizeof(TCHAR),
strNewFileName.GetBuffer(0), (strNewFileName.GetLength() + 1) * sizeof(TCHAR));
m_ContextObject->Send2Client(lpBuffer, nPacketSize);
LocalFree(lpBuffer);
}
*pResult = 1;
}
void CFileManagerDlg::OnDelete()
{
BYTE bBuff;
bBuff = COMMAND_FILE_NO_ENFORCE;
m_ContextObject->Send2Client(&bBuff, sizeof(bBuff));
OnRemoteDelete();
}
void CFileManagerDlg::OnDeleteEnforce()
{
BYTE bBuff;
bBuff = COMMAND_FILE_ENFOCE;
m_ContextObject->Send2Client(&bBuff, sizeof(bBuff));
OnRemoteDelete();
}
void CFileManagerDlg::OnNewFolder()
{
OnRemoteNewFolder();
}
void CFileManagerDlg::OnRefresh()
{
GetRemoteFileList(_T("."));
}
void CFileManagerDlg::OnUseAdmin()
{
if (!m_bUseAdmin)
m_bUseAdmin = true;
else
m_bUseAdmin = false;
}
void CFileManagerDlg::OnRemoteOpenShow()
{
// TODO: Add your command handler code here
CString str;
int nItem = m_list_remote.GetSelectionMark();
str = m_Remote_Path + m_list_remote.GetItemText(nItem, 0);
if (m_list_remote.GetItemData(nItem) == 1)
str += "\\";
int nPacketLength = (str.GetLength() + 1) * sizeof(TCHAR) + 2;
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_OPEN_FILE_SHOW;
lpPacket[1] = m_bUseAdmin;
memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2);
m_ContextObject->Send2Client(lpPacket, nPacketLength);
LocalFree(lpPacket);
}
void CFileManagerDlg::OnRemoteOpenHide()
{
// TODO: Add your command handler code here
CString str;
int nItem = m_list_remote.GetSelectionMark();
str = m_Remote_Path + m_list_remote.GetItemText(nItem, 0);
if (m_list_remote.GetItemData(nItem) == 1)
str += _T("\\");
int nPacketLength = (str.GetLength() + 1) * sizeof(TCHAR) + 2;
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_OPEN_FILE_HIDE;
lpPacket[1] = m_bUseAdmin;
memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2);
m_ContextObject->Send2Client(lpPacket, nPacketLength);
LocalFree(lpPacket);
}
void CFileManagerDlg::OnRemoteInfo()
{
// TODO: Add your command handler code here
CString str;
int nItem = m_list_remote.GetSelectionMark();
str = m_Remote_Path + m_list_remote.GetItemText(nItem, 0);
if (m_list_remote.GetItemData(nItem) == 1)
str += _T("\\");
int nPacketLength = (str.GetLength() + 1) * sizeof(TCHAR) + 2;
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_FILE_INFO;
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
m_ContextObject->Send2Client(lpPacket, nPacketLength);
LocalFree(lpPacket);
}
void CFileManagerDlg::OnRemoteEncryption()
{
// TODO: Add your command handler code here
CString str;
CStringA strA;
int nItem = m_list_remote.GetSelectionMark();
str = m_Remote_Path + m_list_remote.GetItemText(nItem, 0);
if (m_list_remote.GetItemData(nItem) == 1)
str += _T("\\");
strA = str;
int nPacketLength = strA.GetLength() + 1 + 1;
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_FILE_Encryption;
memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1);
m_ContextObject->Send2Client(lpPacket, nPacketLength);
LocalFree(lpPacket);
}
void CFileManagerDlg::OnRemoteDecrypt()
{
// TODO: Add your command handler code here
CString str;
CStringA strA;
int nItem = m_list_remote.GetSelectionMark();
str = m_Remote_Path + m_list_remote.GetItemText(nItem, 0);
if (m_list_remote.GetItemData(nItem) == 1)
str += _T("\\");
strA = str;
int nPacketLength = strA.GetLength() + 1 + 1;
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_FILE_Decrypt;
memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1);
m_ContextObject->Send2Client(lpPacket, nPacketLength);
LocalFree(lpPacket);
}
void CFileManagerDlg::OnRemoteCopyFile()
{
CString file;
// TODO: Add your command handler code here
POSITION pos = m_list_remote.GetFirstSelectedItemPosition(); //iterator for the CListCtrl
while (pos) { //so long as we have a valid POSITION, we keep iterating
int nItem = m_list_remote.GetNextSelectedItem(pos);
file += (m_Remote_Path + m_list_remote.GetItemText(nItem, 0));
file += "|";
}
int nPacketLength = file.GetLength() * 2 + 2 + 1;
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_FILE_CopyFile;
memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1);
m_ContextObject->Send2Client(lpPacket, nPacketLength);
LocalFree(lpPacket);
ShowMessage(_T("׼<EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>"));
}
void CFileManagerDlg::OnRemotePasteFile()
{
int nPacketLength = m_Remote_Path.GetLength() * 2 + 2 + 1;
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_FILE_PasteFile;
memcpy(lpPacket + 1, m_Remote_Path.GetBuffer(0), nPacketLength - 1);
m_ContextObject->Send2Client(lpPacket, nPacketLength);
LocalFree(lpPacket);
}
void CFileManagerDlg::OnRemotezip()
{
CString file;
file = m_Remote_Path;
file += "|";
// TODO: Add your command handler code here
POSITION pos = m_list_remote.GetFirstSelectedItemPosition(); //iterator for the CListCtrl
while (pos) { //so long as we have a valid POSITION, we keep iterating
int nItem = m_list_remote.GetNextSelectedItem(pos);
file += (m_Remote_Path + m_list_remote.GetItemText(nItem, 0));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
if (m_list_remote.GetItemData(nItem))
file += _T('\\');
file += "|";
}
int nPacketLength = file.GetLength() * 2 + 2 + 1;
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_FILE_zip;
memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1);
m_ContextObject->Send2Client(lpPacket, nPacketLength);
LocalFree(lpPacket);
ShowMessage(_T("<EFBFBD><EFBFBD>ʼѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>رմ<EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
}
void CFileManagerDlg::OnRemotezipstop()
{
BYTE lpPacket = COMMAND_FILE_zip_stop;
m_ContextObject->Send2Client(&lpPacket, 1);
}
void CFileManagerDlg::OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
{
CMenu mListmeau;
mListmeau.CreatePopupMenu();
mListmeau.AppendMenu(MF_STRING | MF_ENABLED, 100, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
POINT mousepos;
GetCursorPos(&mousepos);
int nMenuResult = ::TrackPopupMenu(mListmeau, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, mousepos.x, mousepos.y, 0, GetSafeHwnd(), NULL);
mListmeau.DestroyMenu();
if (!nMenuResult) return;
switch (nMenuResult) {
case 100: {
UpdateData();
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ϸ<EFBFBD><CFB8>Ϣ
POSITION pos = m_list_remote_driver.GetFirstSelectedItemPosition();
CString str_disk;
if (pos != NULL) {
int nItem = m_list_remote_driver.GetNextSelectedItem(pos);
str_disk = m_list_remote_driver.GetItemText(nItem, 0);
if (str_disk.Find(_T(":")) == -1) return;;
}
CInputDialog dlg(this);
dlg.Init(_T("ȷ<EFBFBD>Ϻ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺؼ<EFBFBD><EFBFBD><EFBFBD>"));
if (dlg.DoModal() != IDOK)return;
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_list_remote_search.DeleteAllItems();
m_ProgressCtrl->SetPos(0);
struct SEARCH {
TCHAR TC_disk[8];
TCHAR TC_search[MAX_PATH];
};
SEARCH S_search;
memset(&S_search, 0, sizeof(SEARCH));
memcpy(S_search.TC_disk, str_disk.GetBuffer(), str_disk.GetLength() * sizeof(TCHAR));
if (dlg.m_str.GetLength() > (MAX_PATH - 5)) {
MessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><EFBFBD>"), _T("ע<EFBFBD><EFBFBD>"));
return ;
}
memcpy(S_search.TC_search, dlg.m_str.GetBuffer(), dlg.m_str.GetLength() * sizeof(TCHAR));
BYTE* lpbuffer = new BYTE[sizeof(SEARCH) + 1];
lpbuffer[0] = COMMAND_FILE_SEARCHPLUS_LIST;
memcpy(lpbuffer + 1, &S_search, sizeof(SEARCH));
m_ContextObject->Send2Client((LPBYTE)lpbuffer, sizeof(SEARCH) + 1);
SAFE_DELETE_AR(lpbuffer);
SetWindowPos(NULL, 0, 0, 830, 830, SWP_NOMOVE);
}
break;
default:
break;
}
*pResult = 0;
}
void CFileManagerDlg::OnRclickListRemote(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int nRemoteOpenMenuIndex = 5;
CListCtrl* pListCtrl = &m_list_remote;
CMenu popup;
popup.LoadMenu(IDR_FILEMANAGER);
CMenu* pM = popup.GetSubMenu(0);
CPoint p;
GetCursorPos(&p);
// pM->DeleteMenu(IDM_LOCAL_OPEN, MF_BYCOMMAND);
if (pListCtrl->GetSelectedCount() == 0 || !m_Remote_Path.GetLength()) {
int count = pM->GetMenuItemCount();
for (int i = 0; i < count; i++) {
pM->EnableMenuItem(i, MF_BYPOSITION | MF_GRAYED);
}
if (m_Remote_Path.GetLength()) {
pM->EnableMenuItem(IDM_TRANSFER_S, MF_BYCOMMAND | MF_ENABLED);
pM->EnableMenuItem(IDM_NEWFOLDER, MF_BYCOMMAND | MF_ENABLED);
}
pM->EnableMenuItem(ID_FILEMANGER_ZIP, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(ID_FILEMANGER_COPY, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(IDM_DELETE_ENFORCE, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(ID_FILEMANGER_Encryption, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(ID_FILEMANGER_Encryption, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(IDM_COMPRESS, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(IDM_UNCOMPRESS, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(IDM_REMOTE_OPEN_HIDE, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(IDM_RENAME, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(ID_FILEMANGER_PASTE, MF_BYCOMMAND | MF_ENABLED);
}
if (pListCtrl->GetSelectedCount() == 1) {
// <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pListCtrl->GetItemData(pListCtrl->GetSelectionMark()) == 1) {
pM->EnableMenuItem(IDM_REMOTE_OPEN_HIDE, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(IDM_REMOTE_OPEN_SHOW, MF_BYCOMMAND | MF_GRAYED);
}
pM->EnableMenuItem(ID_FILEMANGER_COPY, MF_BYCOMMAND | MF_ENABLED);
pM->EnableMenuItem(ID_FILEMANGER_ZIP, MF_BYCOMMAND | MF_ENABLED);
pM->EnableMenuItem(IDM_COMPRESS, MF_BYCOMMAND | MF_ENABLED);
pM->EnableMenuItem(IDM_UNCOMPRESS, MF_BYCOMMAND | MF_ENABLED);
pM->EnableMenuItem(ID_FILEMANGER_PASTE, MF_BYCOMMAND | MF_ENABLED);
}
if (pListCtrl->GetSelectedCount() > 1) {
pM->EnableMenuItem(IDM_REMOTE_OPEN_SHOW, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(IDM_REMOTE_OPEN_HIDE, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(IDM_COMPRESS, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(IDM_UNCOMPRESS, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(IDM_RENAME, MF_BYCOMMAND | MF_GRAYED);
pM->EnableMenuItem(ID_FILEMANGER_COPY, MF_BYCOMMAND | MF_ENABLED);
pM->EnableMenuItem(ID_FILEMANGER_ZIP, MF_BYCOMMAND | MF_ENABLED);
pM->EnableMenuItem(ID_FILEMANGER_PASTE, MF_BYCOMMAND | MF_ENABLED);
}
if (m_bCanAdmin)
pM->EnableMenuItem(IDM_USE_ADMIN, MF_BYCOMMAND | MF_ENABLED);
else
pM->EnableMenuItem(IDM_USE_ADMIN, MF_BYCOMMAND | MF_GRAYED);
if (m_bUseAdmin)
pM->CheckMenuItem(IDM_USE_ADMIN, MF_BYCOMMAND | MF_CHECKED);
else
pM->CheckMenuItem(IDM_USE_ADMIN, MF_BYCOMMAND | MF_UNCHECKED);
pM->EnableMenuItem(IDM_REFRESH, MF_BYCOMMAND | MF_ENABLED);
pM->EnableMenuItem(ID_FILEMANGER_ZIP_STOP, MF_BYCOMMAND | MF_ENABLED);
::TrackPopupMenu(pM->GetSafeHmenu(), TPM_RIGHTBUTTON, p.x, p.y, 0, GetSafeHwnd(), NULL);
pM->DestroyMenu();
*pResult = 0;
}
void CFileManagerDlg::OnRclickListSearch(NMHDR* pNMHDR, LRESULT* pResult)
{
CMenu mListmeau;
mListmeau.CreatePopupMenu();
mListmeau.AppendMenu(MF_STRING | MF_ENABLED, 100, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>Ŀ¼<C4BF>ṹ)"));
mListmeau.AppendMenu(MF_STRING | MF_ENABLED, 200, _T("ɾ<EFBFBD><EFBFBD>"));
mListmeau.AppendMenu(MF_STRING | MF_ENABLED, 300, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>λ<EFBFBD><EFBFBD>"));
POINT mousepos;
GetCursorPos(&mousepos);
int nMenuResult = ::TrackPopupMenu(mListmeau, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, mousepos.x, mousepos.y, 0, GetSafeHwnd(), NULL);
mListmeau.DestroyMenu();
if (!nMenuResult) return;
switch (nMenuResult) {
case 100: {
m_bIsUpload = false;
EnableControl(FALSE);
CString file;
m_Remote_Download_Job.RemoveAll();
POSITION pos = m_list_remote_search.GetFirstSelectedItemPosition();
CString m_Search_Path;
while (pos) {
int nItem = m_list_remote_search.GetNextSelectedItem(pos);
m_Search_Path = m_list_remote_search.GetItemText(nItem, 3);
m_Search_Path += '\\';
file = m_Search_Path + m_list_remote_search.GetItemText(nItem, 0);
if (m_list_remote_search.GetItemData(nItem))
file += '\\';
m_Remote_Download_Job.AddTail(file);
}
if (file.IsEmpty()) {
EnableControl(TRUE);
::MessageBox(m_hWnd, _T("<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), MB_OK | MB_ICONWARNING);
return;
}
strLpath = GetDirectoryPath(FALSE);
if (strLpath == _T("")) {
EnableControl(TRUE);
return;
}
if (strLpath.GetAt(strLpath.GetLength() - 1) != _T('\\'))
strLpath += _T("\\");
m_nTransferMode = TRANSFER_MODE_NORMAL;
SendDownloadJob();
}
break;
case 200: {
m_bIsUpload = false;
// TODO: Add your command handler code here
CString str;
if (m_list_remote_search.GetSelectedCount() > 1)
str.Format(_T("ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?"), m_list_remote_search.GetSelectedCount());
else {
CString file = m_list_remote_search.GetItemText(m_list_remote_search.GetSelectionMark(), 0);
if (m_list_remote_search.GetItemData(m_list_remote_search.GetSelectionMark()) == 1)
str.Format(_T("ȷʵҪɾ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>С<EFBFBD>%s<><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?"), file);
else
str.Format(_T("ȷʵҪ<EFBFBD>ѡ<EFBFBD>%s<><73>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?"), file);
}
if (::MessageBox(m_hWnd, str, _T("ȷ<EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>"), MB_YESNO | MB_ICONQUESTION) == IDNO)
return;
m_Remote_Delete_Job.RemoveAll();
POSITION pos = m_list_remote_search.GetFirstSelectedItemPosition(); //iterator for the CListCtrl
CString m_Search_Path;
while (pos) { //so long as we have a valid POSITION, we keep iterating
int nItem = m_list_remote_search.GetNextSelectedItem(pos);
m_Search_Path = m_list_remote_search.GetItemText(nItem, 3);
m_Search_Path += '\\';
CString file = m_Search_Path + m_list_remote_search.GetItemText(nItem, 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
if (m_list_remote_search.GetItemData(nItem))
file += _T('\\');
m_Remote_Delete_Job.AddTail(file);
} //EO while(pos) -- at this point we have deleted the moving items and stored them in memory
EnableControl(FALSE);
// <20><><EFBFBD>͵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendDeleteJob();
}
break;
case 300: {
int Index = 0;
Index = m_list_remote_search.GetSelectionMark();
if (Index == -1)
return;
CString str = m_list_remote_search.GetItemText(Index, 3);
if (Index == -1)
return;
m_Remote_Path = _T("");
GetRemoteFileList(str);
}
break;
default:
break;
}
*pResult = 0;
}
bool CFileManagerDlg::MakeSureDirectoryPathExists(LPCTSTR pszDirPath)
{
LPTSTR p, pszDirCopy;
DWORD dwAttributes;
__try {
pszDirCopy = (LPTSTR)malloc(sizeof(TCHAR) * (lstrlen(pszDirPath) + 1));
if (pszDirCopy == NULL)
return FALSE;
lstrcpy(pszDirCopy, pszDirPath);
p = pszDirCopy;
if ((*p == TEXT('\\')) && (*(p + 1) == TEXT('\\'))) {
p++; // Skip over the first \ in the name.
p++; // Skip over the second \ in the name.
while (*p && *p != TEXT('\\')) {
p = CharNext(p);
}
if (*p) {
p++;
}
while (*p && *p != TEXT('\\')) {
p = CharNext(p);
}
if (*p) {
p++;
}
} else if (*(p + 1) == TEXT(':')) { // Not a UNC. See if it's <drive>:
p++;
p++;
if (*p && (*p == TEXT('\\'))) {
p++;
}
}
while (*p) {
if (*p == TEXT('\\')) {
*p = TEXT('\0');
dwAttributes = GetFileAttributes(pszDirCopy);
// Nothing exists with this name. Try to make the directory name and error if unable to.
if (dwAttributes == 0xffffffff) {
if (!CreateDirectory(pszDirCopy, NULL)) {
if (GetLastError() != ERROR_ALREADY_EXISTS) {
free(pszDirCopy);
return FALSE;
}
}
} else {
if ((dwAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) {
// Something exists with this name, but it's not a directory... Error
free(pszDirCopy);
return FALSE;
}
}
*p = TEXT('\\');
}
p = CharNext(p);
}
} __except (EXCEPTION_EXECUTE_HANDLER) {
free(pszDirCopy);
return FALSE;
}
free(pszDirCopy);
return TRUE;
}
//ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CFileManagerDlg::OnCompress()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//winrar a -r D:\123.she.rar d:\123.she //<2F><>ѹ
UpdateData(TRUE);
int i = m_list_remote.GetSelectionMark();
if (i < 0) {
return;
}
CString strMsg = _T("a -ep1 -ibck ");
CString strFullFileName = m_list_remote.GetItemText(i, 0);
if (m_list_remote.GetItemData(i)) { //<2F>ļ<EFBFBD><C4BC><EFBFBD>
strMsg += _T("-r ");
strMsg += (m_Remote_Path + strFullFileName);
} else {
strMsg += (m_Remote_Path + strFullFileName);
}
strMsg += _T(".rar");
strMsg += _T(" ");
strMsg += (m_Remote_Path + strFullFileName);
int nPacketLength = (strMsg.GetLength() + 1) * sizeof(TCHAR) + 1;
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM;
memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1);
m_ContextObject->Send2Client(lpPacket, nPacketLength);
LocalFree(lpPacket);
}
void CFileManagerDlg::OnUncompress()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// winrar x D:\11.she.rar D:\11.she\
UpdateData(TRUE);
int i = m_list_remote.GetSelectionMark();
if (i < 0) {
return;
}
CString strMsg = _T("x -ibck ");
CString strFullFileName = m_list_remote.GetItemText(i, 0);
CString strFullName = (m_Remote_Path + strFullFileName);
strMsg += strFullName;
//LFileName lFile(strFullName.GetBuffer(0));
strMsg += _T(" ");
strMsg += (m_Remote_Path/*+lFile.getNameA()*/);
//strMsg += "\\";
//COMMAND_UNCOMPRESS_FILE_PARAM
int nPacketLength = (strMsg.GetLength() + 1) * sizeof(TCHAR) + 1;
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM;
memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1);
m_ContextObject->Send2Client(lpPacket, nPacketLength);
LocalFree(lpPacket);
}
void CFileManagerDlg::OnSetfocusRemotePath()
{
// TODO: Add your control notification handler code here
m_list_remote.SetSelectionMark(-1);
}
void CFileManagerDlg::OnBtnSearch()
{
UpdateData();
// // <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_list_remote_search.DeleteAllItems();
m_ProgressCtrl->SetPos(0);
if (m_Remote_Path.IsEmpty()) return;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
FILESEARCH mFileSearchPacket;
lstrcpy(mFileSearchPacket.SearchPath, m_Remote_Path.GetBuffer(0));
lstrcpy(mFileSearchPacket.SearchFileName, m_SearchStr.GetBuffer(0));
if (m_bSubFordle)
mFileSearchPacket.bEnabledSubfolder = true;
else
mFileSearchPacket.bEnabledSubfolder = false;
int nPacketSize = sizeof(mFileSearchPacket) + 2;
LPBYTE lpBuffer = new BYTE[nPacketSize];
lpBuffer[0] = COMMAND_SEARCH_FILE;
memcpy(lpBuffer + 1, &mFileSearchPacket, sizeof(mFileSearchPacket));
m_ContextObject->Send2Client(lpBuffer, nPacketSize);
SAFE_DELETE_AR(lpBuffer);
// <20><><EFBFBD>ð<EFBFBD>ť״̬
m_BtnSearch.SetWindowText(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."));
m_list_remote_search.ShowWindow(SW_SHOW);
GetDlgItem(IDC_BTN_SEARCH)->EnableWindow(FALSE);
GetDlgItem(ID_SEARCH_STOP)->EnableWindow(TRUE);
SetWindowPos(NULL, 0, 0, 830, 830, SWP_NOMOVE);
}
void CFileManagerDlg::SearchEnd()
{
int len = m_list_remote_search.GetItemCount();
m_BtnSearch.SetWindowText(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
ShowMessage(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>%d <20><><EFBFBD>ļ<EFBFBD>"), len);
m_list_remote_search.EnableWindow(TRUE);
GetDlgItem(IDC_BTN_SEARCH)->EnableWindow(TRUE);
GetDlgItem(ID_SEARCH_STOP)->EnableWindow(FALSE);
}
void CFileManagerDlg::FixedRemoteSearchFileList(BYTE* pbBuffer, DWORD dwBufferLen)
{
byte* pList = pbBuffer + 1;
int nItemIndex = 0;
for (byte* pBase = pList; (int)(pList - pBase) < (int)(dwBufferLen - 1);) {
TCHAR* pszFileName = NULL;
DWORD dwFileSizeHigh = 0;
DWORD dwFileSizeLow = 0;
FILETIME ftm_strReceiveLocalFileTime;
int nItem = 0;
bool bIsInsert = false;
int nType = *pList ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL;
pszFileName = (TCHAR*) ++pList;
CString csFilePath, csFileFullName;
csFilePath.Format(_T("%s"), pszFileName);
int nPos = csFilePath.ReverseFind(_T('\\'));
csFileFullName = csFilePath.Right(csFilePath.GetLength() - nPos - 1);// <20><>ȡ<EFBFBD>ļ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9>
nItem = m_list_remote_search.InsertItem(nItemIndex++, csFileFullName, GetIconIndex(pszFileName, nType));
m_list_remote_search.SetItemData(nItem, nType == FILE_ATTRIBUTE_DIRECTORY);
pList += (lstrlen(pszFileName) + 1) * sizeof(TCHAR);
memcpy(&dwFileSizeHigh, pList, 4);
memcpy(&dwFileSizeLow, pList + 4, 4);
CString strSize;
strSize.Format(_T("%10d KB"), (dwFileSizeHigh * (MAXDWORD)) / 1024 + dwFileSizeLow / 1024 + (dwFileSizeLow % 1024 ? 1 : 0));
m_list_remote_search.SetItemText(nItem, 1, strSize);
memcpy(&ftm_strReceiveLocalFileTime, pList + 8, sizeof(FILETIME));
CTime time(ftm_strReceiveLocalFileTime);
m_list_remote_search.SetItemText(nItem, 2, time.Format(_T("%Y-%m-%d %H:%M")));
PathRemoveFileSpec(pszFileName); //ȥ<><C8A5><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
m_list_remote_search.SetItemText(nItem, 3, pszFileName);
pList += 16;
}
m_ProgressCtrl->StepIt();
}
//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ֹͣ
void CFileManagerDlg::OnBnClickedSearchStop()
{
GetDlgItem(ID_SEARCH_STOP)->EnableWindow(FALSE);
// TODO: Add your command handler code here
BYTE bToken = COMMAND_FILES_SEARCH_STOP;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
}
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CFileManagerDlg::OnBnClickedSearchResult()
{
m_list_remote_search.ShowWindow(m_list_remote_search.IsWindowVisible() ? SW_HIDE : SW_SHOW);
if (m_list_remote_search.IsWindowVisible()) {
SetWindowPos(NULL, 0, 0, 830, 830, SWP_NOMOVE);
} else {
SetWindowPos(NULL, 0, 0, 830, 500, SWP_NOMOVE);
}
}
void CFileManagerDlg::ShowSearchPlugList()
{
char* lpBuffer = (char*)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1));
char* Filename;
char* Pathname;
DWORD dwOffset = 0;
m_list_remote_search.DeleteAllItems();
int i = 0;
for (i = 0; dwOffset < (m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1); i++) {
Filename = lpBuffer + dwOffset;
Pathname = Filename + strlen(Filename) + 1;
CString CS_tem;
CS_tem = Filename;
m_list_remote_search.InsertItem(i, CS_tem, 0);
CS_tem = Pathname;
int index = CS_tem.ReverseFind('\\');
if (index >= 0)
CS_tem = CS_tem.Left(index);
m_list_remote_search.SetItemText(i,3, CS_tem);
dwOffset += strlen(Filename) + strlen(Pathname) + 2;
}
m_list_remote_search.EnableWindow(TRUE);
CString strMsgShow;
strMsgShow.Format(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><>"), i);
DWORD_PTR dwResult;
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, (LPARAM)(strMsgShow.GetBuffer()), SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, & dwResult);
m_list_remote_search.ShowWindow( SW_SHOW);
}