📄 peerregedittreeview.cpp
字号:
strcpy(strType,"REG_SZ");
break;
case REG_EXPAND_SZ:
strcpy(strType,"REG_EXPAND_SZ");
break;
case REG_MULTI_SZ:
strcpy(strType,"REG_MULTI_SZ");
break;
case REG_RESOURCE_LIST:
strcpy(strType,"REG_RESOURCE_LIST");
break;
case REG_NONE:
strcpy(strType,"REG_NONE");
break;
case REG_LINK:
strcpy(strType,"REG_LINK");
break;
case REG_FULL_RESOURCE_DESCRIPTOR:
strcpy(strType,"REG_FULL_RESOURCE_DESCRIPTOR");
break;
default:
strcpy(strType,"不能识别");
break;
}
}
void CPeerRegeditTreeView::MakeRegInfo(CTreeCtrl& tree,HTREEITEM item,REGEDIT ®)
{
HTREEITEM parent;
char value[512],tmp[512];
value[0]=0;tmp[0]=0;
strcpy(value,tree.GetItemText(item));
if(strcmp(value,"HKEY_CLASSES_ROOT")==0||
strcmp(value,"HKEY_CURRENT_USER")==0||
strcmp(value,"HKEY_LOCAL_MACHINE")==0||
strcmp(value,"HKEY_USERS")==0||
strcmp(value,"HKEY_CURRENT_CONFIG")==0)
{
strcpy(reg.key,value);
reg.sunkey[0]=0;
return;
}
parent=item;
while((parent=tree.GetParentItem(parent)))
{
strcpy(tmp,tree.GetItemText(parent));
if(strcmp(tmp,"HKEY_CLASSES_ROOT")==0||
strcmp(tmp,"HKEY_CURRENT_USER")==0||
strcmp(tmp,"HKEY_LOCAL_MACHINE")==0||
strcmp(tmp,"HKEY_USERS")==0||
strcmp(tmp,"HKEY_CURRENT_CONFIG")==0)
{
strcpy(reg.key,tmp);
strcpy(reg.sunkey,value);
return;
}
else
{
strcat(tmp,"\\");
strcat(tmp,value);
strcpy(value,tmp);
}
}
}
void CPeerRegeditTreeView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CPoint point;
::GetCursorPos(&point);
ScreenToClient(&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)
{
tree.SelectItem(item);
ClientToScreen(&point);
CMenu menu;
VERIFY(menu.LoadMenu(IDR_REGEDIT_TREE));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CWnd* pWndPopupOwner = this;
while (pWndPopupOwner->GetStyle() & WS_CHILD)
pWndPopupOwner = pWndPopupOwner->GetParent();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
pWndPopupOwner);
}
*pResult = 0;
}
void CPeerRegeditTreeView::OnRegeditKeyAdd()
{
// TODO: Add your command handler code here
CTreeCtrl& tree=GetTreeCtrl();
HTREEITEM item;
if(!(item=tree.GetSelectedItem())||item==tree.GetRootItem())
return;
REGEDIT reg;
MakeRegInfo(tree,item,reg);
CRegeditAddKeyDlg dlg;
if(dlg.DoModal()==IDOK)
{
strcat(reg.sunkey,"\\");
strcat(reg.sunkey,dlg.m_key);
HTREEITEM hSearch;
if((hSearch=tree.GetChildItem(item)))
{
if(strcmp(tree.GetItemText(hSearch),dlg.m_key)==0)
{
MessageBox("已经有此键了,选择另外一个","窥视-客户端",MB_ICONWARNING|MB_OK);
return;
}
else
{
HTREEITEM hChild;
while((hChild=tree.GetNextItem(hSearch,TVGN_NEXT)))
{
if(strcmp(tree.GetItemText(hChild),dlg.m_key)==0)
{
MessageBox("已经有此键了,选择另外一个","窥视-客户端",MB_ICONWARNING|MB_OK);
return;
}
hSearch=hChild;
}
}
}
SOCKET s;
DWORD ret;
char meskey[32];
char messunkey[512];
strcpy(meskey,reg.key);
strcpy(messunkey,reg.sunkey);
if(!PeerCreateSocket(&s,PEER_STREAM))
{
return;
}
WSAEVENT hevent=WSACreateEvent();
if(PeerConnectSocket(s,ADDRESS,7788))
{
COMMAND cmd;
memset(&cmd,0,sizeof(cmd));
cmd.CommandID=PEER_REGEDIT_CREATEKEY;
if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent))
{
RegMess(meskey,messunkey,0,"失败");
goto MYERROR ;
}
if(!PeerSendDataS(s,(char*)®,sizeof(reg),&ret,hevent))
{
RegMess(meskey,messunkey,1,"失败");
goto MYERROR ;
}
else
{
COMMAND cmd;
if(!PeerRecvDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent)||ret!=sizeof(cmd))
{
RegMess(meskey,messunkey,1,"失败");
goto MYERROR ;
}
tree.InsertItem(dlg.m_key,1,2,item);
TVITEM tvitem;
tvitem.mask=TVIF_CHILDREN;
tvitem.hItem=item;
tvitem.cChildren=1;
tree.SetItem(&tvitem);
tree.Expand(item,TVE_EXPAND);
tree.SortChildren(item);
}
}
RegMess(meskey,messunkey,1,"成功");
MYERROR:
PeerCloseSocket(s);
WSACloseEvent(hevent);
}
}
void CPeerRegeditTreeView::OnRegeditKeyDel()
{
// TODO: Add your command handler code here
CTreeCtrl& tree=GetTreeCtrl();
HTREEITEM item;
if(!(item=tree.GetSelectedItem())||item==tree.GetRootItem())
return;
REGEDIT reg;
MakeRegInfo(tree,item,reg);
if(strlen(reg.sunkey)==0)
{
MessageBox("你不能删除五个主键!!!","窥视-客户端",MB_ICONSTOP|MB_OK);
return;
}
if(MessageBox("确定删除吗?","窥视-客户端",MB_ICONWARNING|MB_OKCANCEL)!=1)
return;
SOCKET s;
DWORD ret;
char meskey[32];
char messunkey[512];
strcpy(meskey,reg.key);
strcpy(messunkey,reg.sunkey);
if(!PeerCreateSocket(&s,PEER_STREAM))
{
return;
}
WSAEVENT hevent=WSACreateEvent();
if(PeerConnectSocket(s,ADDRESS,7788))
{
COMMAND cmd;
memset(&cmd,0,sizeof(cmd));
cmd.CommandID=PEER_REGEDIT_DELETEKEY;
if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent))
{
RegMess(meskey,messunkey,0,"失败");
goto MYERROR ;
}
if(!PeerSendDataS(s,(char*)®,sizeof(reg),&ret,hevent))
{
RegMess(meskey,messunkey,0,"失败");
goto MYERROR ;
}
else
{
if(!PeerRecvDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent)||ret!=sizeof(cmd))
{
RegMess(meskey,messunkey,0,"失败");
goto MYERROR ;
}
HTREEITEM parentitem;
parentitem=tree.GetParentItem(item);
tree.DeleteItem(item);
if(parentitem&&!tree.GetChildItem(parentitem))
{
TVITEM parent;
parent.mask=TVIF_CHILDREN;
parent.hItem=parentitem;
parent.cChildren=0;
tree.SetItem(&parent);
}
}
}
RegMess(meskey,messunkey,0,"成功");
MYERROR:
PeerCloseSocket(s);
WSACloseEvent(hevent);
}
void CPeerRegeditTreeView::RegMess(char *key, char *sunkey, int flag,char* stat)
{
CMainFrame* pMainWnd=(CMainFrame*)AfxGetApp()->GetMainWnd();
CListCtrl& mess=pMainWnd->m_pListMessage->GetListCtrl();
CString a;
if(flag)
a="添加键:\" ";
else
a="删除键:\" ";
CTime t = CTime::GetCurrentTime();
int messcount=mess.GetItemCount();
if(messcount>200)
mess.DeleteAllItems();
int insertindex;
insertindex=mess.InsertItem(0,stat);
a+=key;a+="\\";a+=sunkey;a+="\"";
mess.SetItem(insertindex,1,LVIF_TEXT,a,0,0,0,NULL);
mess.SetItem(insertindex,2,LVIF_TEXT,ADDRESS,0,0,0,NULL);
a=t.Format("%Y-%m-%d %H:%M:%S");
mess.SetItem(insertindex,3,LVIF_TEXT,a,0,0,0,NULL);
}
void CPeerRegeditTreeView::MESS(char* key,char* childkey, char *ifok,bool flag)
{
CMainFrame* pMainWnd=(CMainFrame*)AfxGetApp()->GetMainWnd();
CListCtrl& mess=pMainWnd->m_pListMessage->GetListCtrl();
int messcount=mess.GetItemCount();
if(messcount>200)
mess.DeleteAllItems();
else
{
CString a="枚举注册表键: \"";
a+=key;
if(strlen(childkey)!=0)
{
a+="\\";a+=childkey;
}
a+="\"";
if(flag)
a+=" 的所有子键";
else
a+=" 的所有值";
int insertindex;
insertindex=mess.InsertItem(0,ifok);
mess.SetItem(insertindex,1,LVIF_TEXT,a,0,0,0,NULL);
mess.SetItem(insertindex,2,LVIF_TEXT,ADDRESS,0,0,0,NULL);
CTime t = CTime::GetCurrentTime();
a=t.Format("%Y-%m-%d %H:%M:%S");
mess.SetItem(insertindex,3,LVIF_TEXT,a,0,0,0,NULL);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -