📄 peerhosttreeview.cpp
字号:
// PeerHostTreeView.cpp : implementation file
//
#include "stdafx.h"
#include "PeerYouC.h"
#include "PeerHostTreeView.h"
#include "mainfrm.h"
#include "peerregeditlistview.h"
#include "peerregedittreeview.h"
#include "peerfilelistview.h"
#include "peerfileremotelistview.h"
#include "command.h"
#include "peersocket.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPeerHostTreeView
IMPLEMENT_DYNCREATE(CPeerHostTreeView, CTreeView)
CPeerHostTreeView::CPeerHostTreeView()
{
}
CPeerHostTreeView::~CPeerHostTreeView()
{
}
BEGIN_MESSAGE_MAP(CPeerHostTreeView, CTreeView)
//{{AFX_MSG_MAP(CPeerHostTreeView)
ON_WM_CREATE()
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPeerHostTreeView drawing
void CPeerHostTreeView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CPeerHostTreeView diagnostics
#ifdef _DEBUG
void CPeerHostTreeView::AssertValid() const
{
CTreeView::AssertValid();
}
void CPeerHostTreeView::Dump(CDumpContext& dc) const
{
CTreeView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPeerHostTreeView message handlers
int CPeerHostTreeView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CTreeView::OnCreate(lpCreateStruct) == -1)
return -1;
m_imagelist.Create(16,16,ILC_MASK,6,1);
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_SERVER));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_HOST));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_COMPUTER));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_USER));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_OS));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_PROCESS));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_MEM));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_DISK));
// TODO: Add your specialized creation code here
CTreeCtrl &tree=this->GetTreeCtrl();
tree.ModifyStyle(0,TVS_HASLINES|TVS_LINESATROOT|TVS_SHOWSELALWAYS|
TVS_HASBUTTONS);
tree.SetImageList(&m_imagelist,TVSIL_NORMAL);
return 0;
}
void CPeerHostTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CTreeCtrl& tree=GetTreeCtrl();
HTREEITEM item;
item=tree.GetSelectedItem();
TVITEM tvitem;
tvitem.mask=TVIF_TEXT;
tvitem.hItem=item;
tvitem.pszText=ADDRESS;
tvitem.cchTextMax=16;
if(tree.GetItem(&tvitem)&&inet_addr(tvitem.pszText)!=INADDR_NONE)
{
strcpy(ADDRESS,tvitem.pszText);
}
if(tree.GetParentItem(item)==tree.GetRootItem())
{
CMainFrame* pMainFrame=(CMainFrame*)AfxGetApp()->GetMainWnd();
CPeerOperatorTabCtrl* operatortab=&(pMainFrame->m_wndOperatorTab);
///////////////初始化注册表操作
CSplitterWnd* regeditsplitter=&(operatortab->m_splitterwndregedit);
CPeerRegeditTreeView* regedittree=(CPeerRegeditTreeView*)regeditsplitter->GetPane(0,0);
CPeerRegeditListView* regeditlist=(CPeerRegeditListView*)regeditsplitter->GetPane(0,1);
CTreeCtrl& regtree=regedittree->GetTreeCtrl();
regtree.DeleteAllItems();
CListCtrl& reglist=regeditlist->GetListCtrl();
reglist.DeleteAllItems();
HTREEITEM root,item;
TVITEM childflag;
childflag.mask=TVIF_CHILDREN ;
childflag.cChildren=1;
root=regtree.InsertItem(ADDRESS,0,0);
////////////////
item=regtree.InsertItem("HKEY_CLASSES_ROOT",1,2,root);
childflag.hItem=item;
regtree.SetItem(&childflag);
////////////////
item=regtree.InsertItem("HKEY_CURRENT_USER",1,2,root);
childflag.hItem=item;
regtree.SetItem(&childflag);
/////////////////
item=regtree.InsertItem("HKEY_LOCAL_MACHINE",1,2,root);
childflag.hItem=item;
regtree.SetItem(&childflag);
/////////////////
item=regtree.InsertItem("HKEY_USERS",1,2,root);
childflag.hItem=item;
regtree.SetItem(&childflag);
//////////////////
item=regtree.InsertItem("HKEY_CURRENT_CONFIG",1,2,root);
childflag.hItem=item;
regtree.SetItem(&childflag);
///////////////////////////////////////////////////
/////////////文件操作初始化
CSplitterWnd* filesplitter=&(operatortab->m_splitterwndfile);
CPeerFileListView* localfile=(CPeerFileListView*)filesplitter->GetPane(0,0);
CPeerFileRemoteListView* remotefile=(CPeerFileRemoteListView*)filesplitter->GetPane(0,1);
remotefile->m_wndToolBar.m_title.SetWindowText(ADDRESS);
CString driver;
CComboBoxEx* combox;
CComboBoxEx* rcombox;
combox=(CComboBoxEx*)&localfile->m_wndToolBar.m_driver;
rcombox=(CComboBoxEx*)&remotefile->m_wndToolBar.m_driver;
//adding string to the combo box
COMBOBOXEXITEM comitem;
comitem.mask=CBEIF_TEXT|CBEIF_IMAGE|CBEIF_SELECTEDIMAGE;
comitem.cchTextMax=16;
DWORD maskdriver;
DWORD drivertype;
char sdriver[10];
int count=0;
while(CB_ERR!=combox->DeleteItem(0));
if(!(maskdriver=GetLogicalDrives()))
return ;
for(int i=0;i<26;i++)
{
if(!(maskdriver>>i))
break;
if(maskdriver>>i&1)
{
sdriver[0]=i+'A';
sdriver[1]=':';
sdriver[2]=0;
drivertype=GetDriveType(sdriver);
if(drivertype==DRIVE_REMOVABLE)
{
comitem.iImage=0;
comitem.iSelectedImage=0;
}
if(drivertype==DRIVE_FIXED)
{
comitem.iImage=1;
comitem.iSelectedImage=1;
}
if(drivertype==DRIVE_CDROM)
{
comitem.iImage=2;
comitem.iSelectedImage=2;
}
if(drivertype==DRIVE_REMOTE)
{
comitem.iImage=3;
comitem.iSelectedImage=3;
}
comitem.iItem=count;
count++;
comitem.pszText=sdriver;
combox->InsertItem(&comitem);
if(strcmp(comitem.pszText,"C:")==0)
{
combox->SetCurSel(comitem.iItem);
localfile->path="C:";
}
}
}
count=0;
////得到远程服务器的驱动器////////////////
while(CB_ERR!=rcombox->DeleteItem(0));
WSAEVENT hevent=WSACreateEvent();
if(!hevent)
{
WSACloseEvent(hevent);
return;
}
SOCKET s;
COMMAND com;
DRIVER remotedriver;
DWORD ret;
if(!PeerCreateSocket(&s,PEER_STREAM))
{
WSACloseEvent(hevent);
return;
}
if(!PeerConnectSocket(s,ADDRESS,7788))
{
WSACloseEvent(hevent);
closesocket(s);
return;
}
memset(&remotedriver,0,sizeof(remotedriver));
com.CommandID=PEER_FILE_GETDRIVER;
if(!PeerSendDataS(s,(char*)&com,sizeof(com),&ret,hevent))
{
WSACloseEvent(hevent);
closesocket(s);
return;
}
while(PeerRecvDataS(s,(char*)&remotedriver,sizeof(remotedriver),&ret,hevent))
{
if(remotedriver.drivertype==DRIVE_REMOVABLE)
{
comitem.iImage=0;
comitem.iSelectedImage=0;
}
if(remotedriver.drivertype==DRIVE_FIXED)
{
comitem.iImage=1;
comitem.iSelectedImage=1;
}
if(remotedriver.drivertype==DRIVE_CDROM)
{
comitem.iImage=2;
comitem.iSelectedImage=2;
}
if(remotedriver.drivertype==DRIVE_REMOTE)
{
comitem.iImage=3;
comitem.iSelectedImage=3;
}
comitem.iItem=count;
count++;
comitem.pszText=remotedriver.driver;
rcombox->InsertItem(&comitem);
if(strcmp(comitem.pszText,"C:")==0)
{
rcombox->SetCurSel(comitem.iItem);
remotefile->path="C:";
}
}
// WSACloseEvent(hevent);
closesocket(s);
///////列出文件//////////////////////////
localfile->list.DeleteAllItems();
remotefile->list.DeleteAllItems();
int index=0;
////本地//////
HANDLE hlocalfile;
WIN32_FIND_DATA findd;
CString nowdriver;
combox->GetLBText(combox->GetCurSel(),nowdriver);
nowdriver+="\\*";
memset(&findd,0,sizeof(findd));
int imagecount;
imagecount=localfile->imagelists.GetImageCount();
for(int j=1;j<imagecount;j++)
{
localfile->imagelists.Remove(j);
localfile->imagelistb.Remove(j);
}
CImageList* pSmallImage,* pBigImage;
pSmallImage=localfile->list.GetImageList(LVSIL_SMALL);
pBigImage=localfile->list.GetImageList(LVSIL_NORMAL);
if((hlocalfile=FindFirstFile( nowdriver,&findd))==INVALID_HANDLE_VALUE)
{
WSACloseEvent(hevent);
return ;
}
SHFILEINFO shfi;
memset(&shfi,0,sizeof(shfi));
SHGetFileInfo(findd.cFileName,
FILE_ATTRIBUTE_NORMAL,
&shfi, sizeof(shfi),
SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME );
int indeximage;
indeximage=pSmallImage->Add(shfi.hIcon);
pBigImage->Add(shfi.hIcon);
DWORD len;
CTime time;
char slen[30];
CString stime;
index=localfile->list.GetItemCount();
localfile->list.InsertItem(index,".",0);
localfile->list.SetItem(index,1,LVIF_TEXT,"文件夹",0,0,0,NULL);
index=localfile->list.GetItemCount();
localfile->list.InsertItem(index,"..",0);
localfile->list.SetItem(index,1,LVIF_TEXT,"文件夹",0,0,0,NULL);
index=localfile->list.GetItemCount();
if(strcmp(findd.cFileName,".")!=0&&
strcmp(findd.cFileName,"..")!=0)
{
localfile->list.InsertItem(index,findd.cFileName,
findd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY?0:indeximage);
localfile->list.SetItem(index,1,LVIF_TEXT,findd.dwFileAttributes&
FILE_ATTRIBUTE_DIRECTORY?"文件夹":shfi.szTypeName,0,0,0,NULL);
len=(findd.nFileSizeHigh*MAXDWORD+findd.nFileSizeLow)/1024;
sprintf(slen,"%dK",len);
localfile->list.SetItem(index,2,LVIF_TEXT,findd.dwFileAttributes&
FILE_ATTRIBUTE_DIRECTORY?"":slen,0,0,0,NULL);
time=findd.ftLastWriteTime;
CString stime=time.Format("%Y-%m-%d %H:%M:%S");
localfile->list.SetItem(index,3,LVIF_TEXT,stime,0,0,0,NULL);
}
while(hlocalfile)
{
if(FindNextFile(hlocalfile,&findd))
{
if(strcmp(findd.cFileName,".")==0||
strcmp(findd.cFileName,"..")==0)
continue;
memset(&shfi,0,sizeof(shfi));
SHGetFileInfo(findd.cFileName,
FILE_ATTRIBUTE_NORMAL,
&shfi, sizeof(shfi),
SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME );
indeximage=pSmallImage->Add(shfi.hIcon);
pBigImage->Add(shfi.hIcon);
index=localfile->list.GetItemCount();
localfile->list.InsertItem(index,findd.cFileName,
findd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY?0:indeximage);
localfile->list.SetItem(index,1,LVIF_TEXT,findd.dwFileAttributes&
FILE_ATTRIBUTE_DIRECTORY?"文件夹":shfi.szTypeName,0,0,0,NULL);
len=(findd.nFileSizeHigh*MAXDWORD+findd.nFileSizeLow)/1024;
sprintf(slen,"%dK",len);
localfile->list.SetItem(index,2,LVIF_TEXT,findd.dwFileAttributes&
FILE_ATTRIBUTE_DIRECTORY?"":slen,0,0,0,NULL);
time=findd.ftLastWriteTime;
stime=time.Format("%Y-%m-%d %H:%M:%S");
localfile->list.SetItem(index,3,LVIF_TEXT,stime,0,0,0,NULL);
}
else
{
if(GetLastError()==ERROR_NO_MORE_FILES)
break;
}
}
FindClose(hlocalfile);
/////远程//////////////////
CString Mess;
Mess="返回目录:\"" +remotefile->path+"\" 的所有文件信息!";
if(!PeerCreateSocket(&s,PEER_STREAM))
{
Message(Mess.GetBuffer(Mess.GetLength()),"失败");
WSACloseEvent(hevent);
return;
}
if(!PeerConnectSocket(s,ADDRESS,7788))
{
Message(Mess.GetBuffer(Mess.GetLength()),"失败");
WSACloseEvent(hevent);
closesocket(s);
return;
}
pSmallImage=remotefile->list.GetImageList(LVSIL_SMALL);
pBigImage=remotefile->list.GetImageList(LVSIL_NORMAL);
com.CommandID=PEER_FILE_GETATTRIB;
if(!PeerSendDataS(s,(char*)&com,sizeof(com),&ret,hevent))
{
Message(Mess.GetBuffer(Mess.GetLength()),"失败");
WSACloseEvent(hevent);
closesocket(s);
return;
}
FILEATTRIB fileattrib;
rcombox->GetLBText(rcombox->GetCurSel(),nowdriver);
nowdriver+="\\*";
strcpy(fileattrib.filename,nowdriver);
if(!PeerSendDataS(s,(char*)&fileattrib,sizeof(fileattrib),&ret,hevent))
{
Message(Mess.GetBuffer(Mess.GetLength()),"失败");
WSACloseEvent(hevent);
closesocket(s);
return;
}
index=remotefile->list.GetItemCount();
remotefile->list.InsertItem(index,".",0);
remotefile->list.SetItem(index,1,LVIF_TEXT,"文件夹",0,0,0,NULL);
index=remotefile->list.GetItemCount();
remotefile->list.InsertItem(index,"..",0);
remotefile->list.SetItem(index,1,LVIF_TEXT,"文件夹",0,0,0,NULL);
index=remotefile->list.GetItemCount();
while(PeerRecvDataS(s,(char*)&fileattrib,sizeof(fileattrib),&ret,hevent))
{
SHGetFileInfo(fileattrib.filename,
FILE_ATTRIBUTE_NORMAL,
&shfi, sizeof(shfi),
SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME );
indeximage=pSmallImage->Add(shfi.hIcon);
pBigImage->Add(shfi.hIcon);
index=remotefile->list.GetItemCount();
remotefile->list.InsertItem(index,fileattrib.filename,
strcmp(fileattrib.attrib,"文件夹")==0?0:indeximage);
remotefile->list.SetItem(index,1,LVIF_TEXT,fileattrib.attrib,0,0,0,NULL);
remotefile->list.SetItem(index,2,LVIF_TEXT,fileattrib.len,0,0,0,NULL);
remotefile->list.SetItem(index,3,LVIF_TEXT,fileattrib.time,0,0,0,NULL);
}
Message(Mess.GetBuffer(Mess.GetLength()),"成功");
WSACloseEvent(hevent);
closesocket(s);
}
*pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -