www.pudn.com > mini_remote.zip > FileMgrDlg.cpp
// FileMgrDlg.cpp : implementation file
//
#include "stdafx.h"
#include "MainCtrl.h"
#include "FileMgrDlg.h"
#include "UpLoadFileDlg.h"
#include "DownLoadDlg.h"
#include "RemoteRunDlg.h"
void ShowDriveList(void *m_Dlg)
{
CFileMgrDlg *dlg = (CFileMgrDlg *)m_Dlg;
SOCKET hSocket = dlg->m_hConnectSocket;
COMMAND_MSG msg;
memset(&msg,0,sizeof(COMMAND_MSG));
msg.msg_id = CMD_GETDRIVE;
while(1)
{
int nRet=send(hSocket,(char *)&msg,sizeof(msg),NULL);
if(nRet==SOCKET_ERROR)
{
if(WSAGetLastError()==WSAEWOULDBLOCK)
{
Sleep(50);
continue;
}
else
{
return;
}
}
else
break;
}
dlg->m_list.DeleteAllItems();
while(1)
{
DRIVE_INFO info;
memset(&info,0,sizeof(DRIVE_INFO));
dlg->SetDlgItemText(IDC_SHOW_DIR,"接收驱动器列表");
int nRet=recv(hSocket,(char *)&info,sizeof(DRIVE_INFO),NULL);
if(nRet==SOCKET_ERROR)
{
if(WSAGetLastError()==WSAEWOULDBLOCK)
{
Sleep(50);
continue; //阻塞,继续
}
else
return;
}
else
{
if (info.isEnd)
return;
int i,nCount = 0;
switch (info.nType)
{
case DRIVE_FIXED:
i = dlg->m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_HARDDRIVE));
dlg->m_list.InsertItem(nCount,info.DriveName,i);
dlg->m_list.SetItemData(nCount,0xFFFFFFFF);
break;
/*
case DRIVE_CDROM:
i = dlg->m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_CDROM));
dlg->m_list.InsertItem(nCount,info.DriveName,i);
dlg->m_list.SetItemData(nCount,0xFFFFFFFF);
break;
*/
case DRIVE_REMOVABLE:
i = dlg->m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_REMOVABLE));
dlg->m_list.InsertItem(nCount,info.DriveName,i);
dlg->m_list.SetItemData(nCount,0xFFFFFFFF);
break;
}//end of switch
}
}//end of while
}
void ShowFileList(void *m_Dlg)
{
CFileMgrDlg *dlg = (CFileMgrDlg *)m_Dlg;
SOCKET hSocket = dlg->m_hConnectSocket;
COMMAND_MSG msg;
memset(&msg,0,sizeof(COMMAND_MSG));
msg.msg_id = CMD_SHOWFILELIST;
strcpy(msg.wParam,dlg->strCurPath.GetBuffer(0));
while(1)
{
int nRet=send(hSocket,(char *)&msg,sizeof(msg),NULL);
if(nRet==SOCKET_ERROR)
{
if(WSAGetLastError()==WSAEWOULDBLOCK)
{
Sleep(50);
continue;
}
else
{
return;
}
}
else break;
}
//接收数据的大小
DWORD dwDataSize=0;
while(1)
{
int nRet=recv(hSocket,(char *)&dwDataSize,sizeof(DWORD),NULL);
if(nRet==SOCKET_ERROR)
{
if(WSAGetLastError()==WSAEWOULDBLOCK)
{
Sleep(50);
continue;
}
else
{
return;
}
}
else break;
}
dlg->m_list.DeleteAllItems();
if (dwDataSize==0)
return;
//接收数据
CByteArray m_ArrayBuffer;
m_ArrayBuffer.SetSize(dwDataSize);
DWORD dwLeft=dwDataSize;
DWORD dwPoint=0;
while(dwLeft>0)
{
int nRet=recv(hSocket,(char*)m_ArrayBuffer.GetData()+dwPoint,dwLeft,NULL);
if(nRet==SOCKET_ERROR)
{
if(WSAGetLastError()==WSAEWOULDBLOCK)
{
Sleep(50);
continue;
}
else
break;
}
dwPoint+=nRet;
dwLeft-=nRet;
}
//分解数据
dwPoint=0;
DWORD nCount = 0;
int i;
while(dwPointm_ImageList.Add(AfxGetApp()->LoadIcon(IDI_FOLDER));
dlg->m_list.InsertItem(nCount,info.FileName,i);
dlg->m_list.SetItemData(nCount,0xFFFFFFFF);
}
else
{
SHFILEINFO shFileInfo;
SHGetFileInfo(info.FileName,FILE_ATTRIBUTE_NORMAL,&shFileInfo,sizeof(SHFILEINFO),
SHGFI_USEFILEATTRIBUTES|SHGFI_DISPLAYNAME|SHGFI_ICON|SHGFI_SMALLICON|SHGFI_TYPENAME);
i = dlg->m_ImageList.Add(shFileInfo.hIcon);
dlg->m_list.InsertItem(nCount,info.FileName,i);
}
nCount++;
dwPoint+=sizeof(FILE_INFO);
}
}
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFileMgrDlg dialog
CFileMgrDlg::CFileMgrDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFileMgrDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFileMgrDlg)
//}}AFX_DATA_INIT
}
void CFileMgrDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFileMgrDlg)
DDX_Control(pDX, IDC_UPLOADFILE, m_btn_6);
DDX_Control(pDX, IDC_REMOTERUN, m_btn_5);
DDX_Control(pDX, IDC_REFLASHFILE, m_btn_4);
DDX_Control(pDX, IDC_FILEDEL, m_btn_3);
DDX_Control(pDX, IDC_DOWNFILE, m_btn_2);
DDX_Control(pDX, IDC_BACKUP, m_btn_1);
DDX_Control(pDX, IDC_LIST1, m_list);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFileMgrDlg, CDialog)
//{{AFX_MSG_MAP(CFileMgrDlg)
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList)
ON_BN_CLICKED(IDC_BACKUP, OnBackup)
ON_NOTIFY(LVN_KEYDOWN, IDC_LIST1, OnKeydownList)
ON_BN_CLICKED(IDC_UPLOADFILE, OnUploadfile)
ON_BN_CLICKED(IDC_REFLASHFILE, OnReflashfile)
ON_BN_CLICKED(IDC_DOWNFILE, OnDownfile)
ON_BN_CLICKED(IDC_REMOTERUN, OnRemoterun)
ON_BN_CLICKED(IDC_FILEDEL, OnFiledel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFileMgrDlg message handlers
BOOL CFileMgrDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_btn_1.LoadBitmaps(IDB_BITMAP1,5, 5, 5, 5, 4);
m_btn_1.SetFontColor(RGB(100,50,280));
m_btn_2.LoadBitmaps(IDB_BITMAP1,5, 5, 5, 5, 4);
m_btn_2.SetFontColor(RGB(100,50,280));
m_btn_3.LoadBitmaps(IDB_BITMAP1,5, 5, 5, 5, 4);
m_btn_3.SetFontColor(RGB(100,50,280));
m_btn_4.LoadBitmaps(IDB_BITMAP1,5, 5, 5, 5, 4);
m_btn_4.SetFontColor(RGB(100,50,280));
m_btn_5.LoadBitmaps(IDB_BITMAP1,5, 5, 5, 5, 4);
m_btn_5.SetFontColor(RGB(100,50,280));
m_btn_6.LoadBitmaps(IDB_BITMAP1,5, 5, 5, 5, 4);
m_btn_6.SetFontColor(RGB(100,50,280));
CString str = "在远程主机: "+strIP+" 上";
SetWindowText(str);
m_ImageList.Create(16,16,ILC_COLOR8|ILC_MASK,2,1);
//m_ImageList.Create(32,32,ILC_COLOR32,10,30);
m_list.SetImageList(&m_ImageList,LVSIL_SMALL);
LONG lStyle = m_list.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE);
lStyle |= LVS_EX_FULLROWSELECT;
m_list.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0,(LPARAM)lStyle);
LV_COLUMN lvc;
lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH;
lvc.iSubItem = 0;
lvc.pszText = (char *)"文件名";
lvc.cx = 300;
m_list.InsertColumn(0,&lvc);
strCurPath = "";
AfxBeginThread((AFX_THREADPROC) ShowDriveList,this);
return TRUE;
}
void CFileMgrDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if (m_list.GetItemData(pNMListView->iItem) != 0xFFFFFFFF)
return;
strCurPath += m_list.GetItemText(pNMListView->iItem,pNMListView->iSubItem);
strCurPath += "\\";
SetDlgItemText(IDC_SHOW_DIR,strCurPath);
AfxBeginThread((AFX_THREADPROC) ShowFileList,this);
*pResult = 0;
}
void CFileMgrDlg::OnBackup()
{
int Index = strCurPath.ReverseFind('\\');
if (Index == -1)
{
return;
}
CString str = strCurPath.Left(Index);
Index = str.ReverseFind('\\');
if (Index == -1)
{
AfxBeginThread((AFX_THREADPROC) ShowDriveList,this);
strCurPath="";
return;
}
strCurPath = str.Left(Index);
if(strCurPath.Right(1) != "\\")
strCurPath += "\\";
AfxBeginThread((AFX_THREADPROC) ShowFileList,this);
SetDlgItemText(IDC_SHOW_DIR,strCurPath);
}
void CFileMgrDlg::OnKeydownList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
*pResult = 0;
UINT nChar=pLVKeyDow->wVKey;
switch(nChar)
{
case VK_BACK:
{
OnBackup();//调用TreeView的响应函数
break;
}
}
}
void CFileMgrDlg::OnUploadfile()
{
if (strCurPath.IsEmpty())
return;
CUpLoadFileDlg dlg;
dlg.m_remotefile=strCurPath;
dlg.m_hConnectSocket = m_hConnectSocket;
dlg.DoModal();
}
void CFileMgrDlg::OnReflashfile()
{
if (strCurPath.IsEmpty())
return;
AfxBeginThread((AFX_THREADPROC) ShowFileList,this);
}
void CFileMgrDlg::OnDownfile()
{
POSITION pos;
pos = m_list.GetFirstSelectedItemPosition();
if (pos == NULL)
{
return;
}
int Index = m_list.GetNextSelectedItem(pos);
if (m_list.GetItemData(Index) == 0xFFFFFFFF)
return;
CDownLoadDlg dlg;
dlg.m_hConnectSocket=m_hConnectSocket;
dlg.m_remotefile = strCurPath+m_list.GetItemText(Index,0);
dlg.DoModal();
}
void CFileMgrDlg::OnRemoterun()
{
POSITION pos;
pos = m_list.GetFirstSelectedItemPosition();
if (pos == NULL)
{
return;
}
int Index = m_list.GetNextSelectedItem(pos);
if (m_list.GetItemData(Index) == 0xFFFFFFFF)
return;
CRemoteRunDlg dlg;
dlg.m_hConnectSocket=m_hConnectSocket;
dlg.m_cmd = strCurPath+m_list.GetItemText(Index,0);
dlg.DoModal();
}
void CFileMgrDlg::OnFiledel()
{
POSITION pos;
pos = m_list.GetFirstSelectedItemPosition();
if (pos == NULL)
return;
int Index = m_list.GetNextSelectedItem(pos);
if (m_list.GetItemData(Index) == 0xFFFFFFFF)
return;
CString filename = strCurPath+m_list.GetItemText(Index,0);
COMMAND_MSG msg;
memset(&msg,0,sizeof(COMMAND_MSG));
msg.msg_id = CMD_FILEDEL;
strcpy(msg.wParam,filename.GetBuffer(0));
while(1)
{
int nRet=send(m_hConnectSocket,(char *)&msg,sizeof(msg),NULL);
if(nRet==SOCKET_ERROR)
{
if(WSAGetLastError()==WSAEWOULDBLOCK)
{
Sleep(50);
continue;
}
else
return;
}
else
return;
}
}