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

📄 regeditview.cpp

📁 基于EVC环境下的注册表编辑功能的完整源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		hChildItem=hNextItem;
	 }
	}
	return count;

}

void CRegEditView::GetItemPath(HKEY &hRoot, CString &SubKey, HTREEITEM hItem)
{	
	CTreeCtrl & m_Ctrl=GetTreeCtrl();
	CString ItemText;

	 SubKey=m_Ctrl.GetItemText(hItem);
	 ItemText=SubKey;
	HTREEITEM hParentTemp;

  // MessageBox(SubKey);

	while(1)
	{
		if(ItemText.Left(5)=="HKEY_")
		 break;	
		hParentTemp=m_Ctrl.GetParentItem(hItem);
		ItemText=m_Ctrl.GetItemText(hParentTemp);
		
 
	 	if(ItemText.Left(5)!="HKEY_")
		  SubKey=ItemText+"\\"+SubKey;
		
		 hItem=hParentTemp;
	}

	if(ItemText=="HKEY_CLASSES_ROOT")

		hRoot=HKEY_CLASSES_ROOT;

	 
	if(ItemText== "HKEY_CURRENT_USER")

		hRoot=HKEY_CURRENT_USER;

	if(ItemText=="HKEY_LOCAL_MACHINE")

		hRoot=HKEY_LOCAL_MACHINE;

	if(ItemText=="HKEY_USERS")

		hRoot=HKEY_USERS;


/*	{
		char buffer[256];
		strcpy(buffer,(LPCTSTR)SubKey);
		((MyListView*)((CMainFrame*)AfxGetMainWnd())->m_Splitter.GetPane (0,1))->AddItem (buffer);
		}
 */

}

void CRegEditView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	CTreeCtrl& m_Ctrl=GetTreeCtrl();
	HTREEITEM hRoot=m_Ctrl.GetRootItem();
	HTREEITEM hTreeCurrent=m_Ctrl.GetSelectedItem();
	if(hTreeCurrent==NULL) return;

    m_hHitItem=hTreeCurrent;

	HKEY h_RootKey;
	if(hTreeCurrent==hRoot) return ;
 	GetItemPath(h_RootKey,strSubKey,hTreeCurrent);
	if(m_Ctrl.GetParentItem(hTreeCurrent)==hRoot)
	{
	h_CurrentKey=h_RootKey;
	((CMyListView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.GetPane (0,1))->DispValue (h_RootKey);
	}else if(RegOpenKeyEx(h_RootKey,(LPCTSTR)strSubKey,NULL,KEY_ALL_ACCESS/*KEY_ENUMERATE_SUB_KEYS| KEY_QUERY_VALUE|KEY_SET_VALUE|KEY_CREATE_SUB_KEY|KEY_READ|KEY_WRITE*/,&h_CurrentKey)==ERROR_SUCCESS)
	{
		((CMyListView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.GetPane (0,1))->DispValue (h_CurrentKey);
	    // RegCloseKey(hKey);
	}
	*pResult = 0;
}


void CRegEditView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CTreeCtrl& m_Ctrl=GetTreeCtrl();
	//UINT        uFlags;
	CPoint pt;
	GetCursorPos(&pt);
	ScreenToClient(&pt);
	////////////////////////////////
	HTREEITEM hItemRoot = m_Ctrl.GetRootItem();
    HTREEITEM hTreeItem= m_Ctrl.HitTest(pt, NULL); 

	/////////////////////////////////////////////////////////////////
	//如果没点中任何结点则退出,如果点中的是根结点则返出
	if(hTreeItem==NULL)
		return;
	if(hTreeItem==hItemRoot)
	{
		MessageBox(_T("NULL"),NULL,MB_OK);
		return;
	}
	m_hHitItem=hTreeItem;
	
   CString str=m_Ctrl.GetItemText (m_hHitItem);
   CMenu menu_bar;// = AfxGetMainWnd()->GetMenu();
   menu_bar.LoadMenu (IDR_MENU1);
   CMenu* file_menu = menu_bar.GetSubMenu(0);    
   ASSERT(file_menu);
   if(file_menu==NULL)
   {
	   MessageBox(_T("Error"),NULL,MB_OK);
	   return;
   }

   
     UINT nStateMask;
     nStateMask=m_Ctrl.GetItemState(m_hHitItem,TVIS_EXPANDED);

	 if((nStateMask&TVIS_EXPANDED)!=0)
		// MessageBox("折叠",NULL,MB_OK);
       file_menu->ModifyMenu(ID_EXPAND,MF_BYCOMMAND|MF_STRING,ID_EXPAND,_T("折叠"));
     else
		 //MessageBox("展开",NULL,MB_OK);
       file_menu->ModifyMenu(ID_EXPAND,MF_BYCOMMAND|MF_STRING,ID_EXPAND,_T("展开"));
    
	 
	 BOOL flag=m_Ctrl.ItemHasChildren (m_hHitItem);	
 	if(flag)
	  EnableMenuItem(file_menu->m_hMenu,0,MF_ENABLED |MF_BYPOSITION);
 	else	 
      EnableMenuItem(file_menu->m_hMenu,0,MF_GRAYED|MF_BYPOSITION);
  

   if(str.Left(5)==_T("HKEY_"))
   {
    EnableMenuItem(file_menu->m_hMenu,2,MF_GRAYED|MF_BYPOSITION);
    EnableMenuItem(file_menu->m_hMenu,3,MF_GRAYED|MF_BYPOSITION);
   }
   else
   {
	EnableMenuItem(file_menu->m_hMenu,2,MF_ENABLED |MF_BYPOSITION);
    EnableMenuItem(file_menu->m_hMenu,3,MF_ENABLED |MF_BYPOSITION);
   }

   file_menu->TrackPopupMenu(TPM_RIGHTALIGN, pt.x,pt.y, this);
	*pResult = 0;
}


void CRegEditView::DeleteKey(HKEY hKey, CString SubKey)
{
	DWORD dwLength,index;
	TCHAR buffer[512];
	HKEY hSubKey;
	LONG iRet;

	if(RegOpenKeyEx(hKey,(LPCTSTR)SubKey,NULL,KEY_ALL_ACCESS,&hSubKey)!=ERROR_SUCCESS)
		return;

	iRet=ERROR_SUCCESS;

	index=0;
	while(iRet!=ERROR_NO_MORE_ITEMS)
	{
	 dwLength=sizeof(buffer)/sizeof(TCHAR);
	 iRet=RegEnumKeyEx(hSubKey,index++,buffer,&dwLength,NULL,NULL,NULL,NULL);
	 
	if(iRet==ERROR_SUCCESS)   
	   DeleteKey(hSubKey,CString(buffer)); 
	}
	RegCloseKey(hSubKey);
	RegDeleteKey(hKey,SubKey);

}

/*
void CRegEditView::OnDel() 
{

}
*/

void CRegEditView::OnExpand() 
{
	// TODO: Add your command handler code here
	CPoint        pt;
	CTreeCtrl& m_Ctrl=GetTreeCtrl();
	/////////////////////////////////////////////////////////////
    GetCursorPos(&pt);
    ScreenToClient(&pt);

	if(m_hHitItem==NULL)
	  return;
	m_Ctrl.Expand (m_hHitItem,TVE_TOGGLE);
}

void CRegEditView::OnRefresh() 
{
	// TODO: Add your command handler code here
	CTreeCtrl& m_Ctrl=GetTreeCtrl();

	HTREEITEM hNextItem,hChildItem;
	hChildItem=m_Ctrl.GetChildItem(m_hHitItem);

	while(hChildItem!=NULL)
	{
		hNextItem=m_Ctrl.GetNextItem (hChildItem,TVGN_NEXT);
		m_Ctrl.DeleteItem (hChildItem);
		hChildItem=hNextItem;
	}

	FindRegSubKey(h_CurrentKey,m_hHitItem);
}

void CRegEditView::OnNewKey() 
{
	// TODO: Add your command handler code here
	CTreeCtrl & m_Ctrl=GetTreeCtrl();
	CDialogNewKey dlg;
	dlg.DoModal ();
	CString strKeyName;
	strKeyName=dlg.m_KeyName ;

 	CString SubKey;
	HKEY hKey,hOpenKey;
	DWORD dwDescription;
 	GetItemPath(hKey,SubKey,m_hHitItem);
	SubKey=SubKey+"\\"+strKeyName;

	if(RegCreateKeyEx(hKey,(LPCTSTR)SubKey,NULL,NULL,REG_OPTION_NON_VOLATILE,
		          KEY_ALL_ACCESS,NULL,&hOpenKey,&dwDescription)==ERROR_SUCCESS)
	{
	 if(dwDescription==REG_CREATED_NEW_KEY)
	 {
		HTREEITEM hSelectedItem;
		
		hSelectedItem=m_Ctrl.GetSelectedItem ();
		if(hSelectedItem==NULL)
			return;
		CString str=m_Ctrl.GetItemText (hSelectedItem);
		
		TV_INSERTSTRUCT hTreeItem;
			
		hTreeItem.hParent=hSelectedItem;
		hTreeItem.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
		hTreeItem.hInsertAfter=TVI_SORT;
		hTreeItem.item.iImage=ImageUnSelected;
		hTreeItem.item.iSelectedImage=ImageSelected;
	

		TCHAR buffer[512];
		wcscpy(buffer,(LPCTSTR)strKeyName);
		hTreeItem.item.pszText=buffer;

 	    HTREEITEM hItem=m_Ctrl.InsertItem(&hTreeItem);
		if(hItem==NULL)
			MessageBox(_T("请刷新,以显示新建的键。"),_T("新建"),MB_OK);
		m_Ctrl.Expand (hSelectedItem,TVE_EXPAND);
		Invalidate(TRUE);
	 }
	 else
		 MessageBox(_T("该键已存在"),_T("新键"),MB_OK);
	}
	else
		MessageBox(_T("新建键失败"),_T("新建"),MB_OK);

	
}

void CRegEditView::OnNewSz() 
{
	// TODO: Add your command handler code here
	CNewSZValue dlg;
	dlg.Disp (h_CurrentKey,_T("新建字符串"),_T("字符值"));	
   ((CMyListView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.GetPane (0,1))->DispValue (h_CurrentKey);
}

void CRegEditView::OnNewDword() 
{
	// TODO: Add your command handler code here
	CNewValueDWORD dlg;
	dlg.Disp (h_CurrentKey,_T("新建DWORD值"),_T("0x0000000"));
	((CMyListView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.GetPane (0,1))->DispValue (h_CurrentKey);
}

void CRegEditView::OnDel() 
{
	// TODO: Add your command handler code here
	CTreeCtrl & m_Ctrl=GetTreeCtrl();
	CString SubKey;
	HKEY hKey;
	CString str;
	str=m_Ctrl.GetItemText(m_hHitItem);
	if(str.Left(5)==_T("HKEY_"))
	{
		MessageBox(_T("不能删除根键!"),NULL,MB_OK);
		return;
	}

	GetItemPath(hKey,SubKey,m_hHitItem);
 /*
    CWnd* m_Wnd=((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.GetActivePane ();
	if(m_Wnd=NULL) 
	{
		MessageBox(_T("NULL"),NULL,MB_OK);
		return;
	}
	if(m_Wnd->m_hWnd!=this->m_hWnd)
	{
		MessageBox(_T("is not eq"),NULL,MB_OK);
		return;
	} */

	//删除当前键下所有的子键
	//此处最好定义一个函数DI归调用删除所有子键
    DeleteKey(hKey,SubKey);
	m_Ctrl.DeleteItem(m_hHitItem);
}

void CRegEditView::OnDelValue() 
{
	// TODO: Add your command handler code here
	((CMyListView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.GetPane (0,1))->OnDell();
}


⌨️ 快捷键说明

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