⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 peerregedittreeview.cpp

📁 一个不错的远程控制软件源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// PeerRegeditTreeView.cpp : implementation file
//

#include "stdafx.h"
#include "PeerYouC.h"
#include "PeerRegeditTreeView.h"
#include "peerregeditlistview.h"
#include "peermessagelistview.h"
#include "regeditaddkeydlg.h"
#include "MainFrm.h"
#include "command.h"
#include "peersocket.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPeerRegeditTreeView

IMPLEMENT_DYNCREATE(CPeerRegeditTreeView, CTreeView)

CPeerRegeditTreeView::CPeerRegeditTreeView()
{
}

CPeerRegeditTreeView::~CPeerRegeditTreeView()
{
}


BEGIN_MESSAGE_MAP(CPeerRegeditTreeView, CTreeView)
	//{{AFX_MSG_MAP(CPeerRegeditTreeView)
	ON_WM_CREATE()
	ON_WM_LBUTTONDOWN()
	ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
	ON_COMMAND(ID_REGEDIT_KEY_ADD, OnRegeditKeyAdd)
	ON_COMMAND(ID_REGEDIT_KEY_DEL, OnRegeditKeyDel)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPeerRegeditTreeView drawing

void CPeerRegeditTreeView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CPeerRegeditTreeView diagnostics

#ifdef _DEBUG
void CPeerRegeditTreeView::AssertValid() const
{
	CTreeView::AssertValid();
}

void CPeerRegeditTreeView::Dump(CDumpContext& dc) const
{
	CTreeView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CPeerRegeditTreeView message handlers

int CPeerRegeditTreeView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CTreeView::OnCreate(lpCreateStruct) == -1)
		return -1;
	// TODO: Add your specialized creation code here
	CTreeCtrl& tree=GetTreeCtrl();
	tree.ModifyStyle(0,TVS_HASLINES|TVS_LINESATROOT|TVS_SHOWSELALWAYS|
		TVS_HASBUTTONS);
	if(!m_imagelist.Create( 16,16,ILC_MASK,3,1))
		return -1;
	m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_REGCOMPUTER));
	m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_REGDIRCLOSE));	
	m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_REGDIROPEN));
	tree.SetImageList(&m_imagelist,TVSIL_NORMAL);
	return 0;
}

void CPeerRegeditTreeView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CTreeView::OnLButtonDown(nFlags, point);
	CTreeCtrl& tree=GetTreeCtrl();
	HTREEITEM item,root;
	UINT flag=TVHT_ONITEM|TVHT_ONITEMBUTTON ;
	if(!(item=tree.HitTest(point,&flag)))
		return;
	if(!(root=tree.GetRootItem()))
	{
		return;
	}
	if(item!=root)
	{
		char masterkey[32];
		char childkey[512];
		WSAEVENT hevent=WSACreateEvent();
		if(!hevent)
		{
			return;
		}
		SOCKET s;
		COMMAND com;
		REGEDIT reg;
		DWORD ret;
		if(!PeerCreateSocket(&s,PEER_STREAM))
		{
			return;
		}
		AfxGetApp()->DoWaitCursor(1);
		CSplitterWnd* regsplitterwnd=(CSplitterWnd*)GetParent();
		CPeerRegeditListView* listview=(CPeerRegeditListView*)regsplitterwnd->GetPane(0,1);
		CListCtrl& list=listview->GetListCtrl();
		if(flag&TVHT_ONITEM)
		{
			list.DeleteAllItems();
			if(PeerConnectSocket(s,ADDRESS,7788))
			{
				memset(&com,0,sizeof(com));
				com.CommandID=PEER_REGEDIT_ENUMVALUE;
				com.DataSize=sizeof(reg);
				memset(&reg,0,sizeof(reg));
				MakeRegInfo(tree,item,reg);
				if(strcmp(reg.sunkey,"SECURITY")==0)
				{
					WSACloseEvent(hevent);
					closesocket(s);
					AfxGetApp()->DoWaitCursor(0);
					return;
				}

				strcpy(masterkey,reg.key);
				strcpy(childkey,reg.sunkey);
				LVITEM litem;
				char regtype[100];
				char regvalue[512];
				if(PeerSendDataS(s,(char*)&com,sizeof(com),&ret,hevent))
				{
					WSAResetEvent(hevent);
					if(!PeerSendDataS(s,(char*)&reg,sizeof(reg),&ret,hevent))
					{
						WSACloseEvent(hevent);
						closesocket(s);
						AfxGetApp()->DoWaitCursor(0);
						MESS(masterkey,childkey,"失败",0);
						return;
					}
					while(PeerRecvDataS(s,(char*)&reg,sizeof(reg),&ret,hevent)&&ret==sizeof(reg))
					{
						WSAResetEvent(hevent);
						int index=list.GetItemCount();
						litem.cchTextMax=512;
						int image;
						if(reg.type==REG_BINARY||
							reg.type==REG_DWORD||
							reg.type==REG_RESOURCE_LIST||
							reg.type==REG_LINK||
							reg.type==REG_DWORD_BIG_ENDIAN||
							reg.type==REG_FULL_RESOURCE_DESCRIPTOR
							)
						{
							image=1;
						}
						else if(reg.type==REG_SZ||
							reg.type==REG_EXPAND_SZ||
							reg.type==REG_NONE||
							REG_MULTI_SZ)
						{
							image=0;
						}
						else
							image=3;
						list.InsertItem(index,reg.value,image);
						litem.mask=TVIF_TEXT|TVIF_IMAGE ;
						litem.iItem=index;
						litem.iSubItem=1;
						litem.cchTextMax=512;
						GetType(reg.type,regtype);
						litem.pszText=regtype;
						list.SetItem(&litem);
						litem.iSubItem=2;
						regvalue[0]=0;
						if(reg.datalen>0)
							memcpy((char*)regvalue,(char*)reg.data,reg.datalen);
						SetType(reg.type,regvalue,reg.datalen);
						litem.pszText=regvalue;
						list.SetItem(&litem);
					}
				}
				MESS(masterkey,childkey,"成功",0);
			}
		}
		if(flag&TVHT_ONITEMBUTTON)
		{
			if(tree.GetItemState(item,TVIS_EXPANDED)&TVIS_EXPANDEDONCE)
				return;
			HTREEITEM delitem;
			while((delitem=tree.GetChildItem(item)))
			{
				tree.DeleteItem(delitem);
			}
			if(PeerConnectSocket(s,ADDRESS,7788))
			{
				memset(&com,0,sizeof(com));
				com.CommandID=PEER_REGEDIT_ENUMKEY;
				com.DataSize=sizeof(reg);
				memset(&reg,0,sizeof(reg));
				MakeRegInfo(tree,item,reg);
				if(strcmp(reg.sunkey,"SECURITY")==0)
				{
					WSACloseEvent(hevent);
					closesocket(s);
					AfxGetApp()->DoWaitCursor(0);
					return;
				}
				strcpy(masterkey,reg.key);
				strcpy(childkey,reg.sunkey);
				if(PeerSendDataS(s,(char*)&com,sizeof(com),&ret,hevent))
				{
					WSAResetEvent(hevent);
					if(!PeerSendDataS(s,(char*)&reg,sizeof(reg),&ret,hevent)||ret!=sizeof(reg))
					{
						WSACloseEvent(hevent);
						closesocket(s);
						AfxGetApp()->DoWaitCursor(0);
						MESS(masterkey,childkey,"失败",0);
						return;
					}
					HTREEITEM insertitem;
					while(PeerRecvDataS(s,(char*)&reg,sizeof(reg),&ret,hevent)&&ret==sizeof(reg))
					{
						WSAResetEvent(hevent);
						insertitem=tree.InsertItem(reg.sunkey,1,2,item);
						if(reg.havechild==1)
						{
							TVITEM	childflag;
							childflag.mask=TVIF_CHILDREN ;
							childflag.cChildren=1;
							childflag.hItem=insertitem;
							tree.SetItem(&childflag);
						}
					}
					tree.SortChildren(item);
					tree.Expand(item,TVE_EXPAND);
				}
				MESS(masterkey,childkey,"成功",1);
			}
		}
		AfxGetApp()->DoWaitCursor(0);
		WSACloseEvent(hevent);
		closesocket(s);
	}
}
void CPeerRegeditTreeView::SetType(DWORD type, char *strType,DWORD len)
{
	switch(type)
	{
		case REG_BINARY:
		case REG_RESOURCE_LIST:
		case REG_FULL_RESOURCE_DESCRIPTOR:
		case REG_LINK:
			char tmp[512];
			char ch[3];
			DWORD i;
			tmp[0]=0;
			if(len>170)
				len=170;
			for(i=0;i<len;i++)
			{
				BYTE ch1,ch2;
				ch1=(BYTE)(strType[i])>>4;
				ch2=(BYTE)(strType[i])&0x0f;
				sprintf(ch,"%x%x ",ch1,ch2);
				strcat(tmp,ch);
			}
			strcpy(strType,tmp);
			break;
		case REG_DWORD:
		case REG_DWORD_BIG_ENDIAN:
			DWORD word;
			word=*(DWORD*)strType;
			sprintf(strType,"0x%x(%u)",word,word);
			break;
		case REG_SZ:
		case REG_EXPAND_SZ:
		case REG_MULTI_SZ:
		case REG_NONE:
			break;
		default:
			strcpy(strType,"不能识别");
			break;
	}
}
void CPeerRegeditTreeView::GetType(DWORD type, char *strType)
{
	switch(type)
	{
		case REG_BINARY:
			strcpy(strType,"REG_BINARY");
			break;
		case REG_DWORD:
			strcpy(strType,"REG_DWORD");
			break;
		case REG_DWORD_BIG_ENDIAN:
			strcpy(strType,"REG_DWORD_BIG_ENDIAN");
			break;
		case REG_SZ:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -