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

📄 startmenu.cpp

📁 visual c++ 实例编程
💻 CPP
字号:
// StartMenu.cpp : 开始菜单设置
//侠客系统修改器 1.0b



#include "stdafx.h"
#include "WinSet.h"
#include "StartMenu.h"
#include "RegEdit.h"
#include "WinSetDlg.h"

#include <shlobj.h>
#include <io.h>
#include <direct.h>

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

/////////////////////////////////////////////////////////////////////////////
// CStartMenu property page

IMPLEMENT_DYNCREATE(CStartMenu, CPropertyPage)

CStartMenu::CStartMenu() : CPropertyPage(CStartMenu::IDD)
{
	m_psp.dwFlags &= ~(PSP_HASHELP);
	Modify=FALSE;
	//m_psp.dwFlags |=PSP_USEHICON ;
	//m_psp.hIcon=AfxGetApp()->LoadIcon(IDI_STARTMENU);

	//{{AFX_DATA_INIT(CStartMenu)
	m_bRunMenu = FALSE;
	m_bDocMenu = FALSE;
	m_bFavoritesMenu = FALSE;
	m_bCloseSystem = FALSE;
	m_bFindMenu = FALSE;
	m_bLogoffMenu = FALSE;
	m_bExitToDos = FALSE;
	m_bDisableDocrun = FALSE;
	m_bNoConPrn = FALSE;
	m_bCleanDochist = FALSE;
	m_bCleanRunhist = FALSE;
	//}}AFX_DATA_INIT
}

CStartMenu::~CStartMenu()
{
}

void CStartMenu::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CStartMenu)
	DDX_Control(pDX, IDC_ADDMENULIST, m_cAddmenuList);
	DDX_Control(pDX, IDC_MENUSPEED, m_cMenuSpeed);
	DDX_Check(pDX, IDC_RUNMENU, m_bRunMenu);
	DDX_Check(pDX, IDC_DOCMENU, m_bDocMenu);
	DDX_Check(pDX, IDC_FAVORITESMENU, m_bFavoritesMenu);
	DDX_Check(pDX, IDC_CLOSESYSTEM, m_bCloseSystem);
	DDX_Check(pDX, IDC_FINDMENU, m_bFindMenu);
	DDX_Check(pDX, IDC_LOGOFF, m_bLogoffMenu);
	DDX_Check(pDX, IDC_EXITANDTODOS, m_bExitToDos);
	DDX_Check(pDX, IDC_DISABLEDOCMENU, m_bDisableDocrun);
	DDX_Check(pDX, IDC_NOCONPRN, m_bNoConPrn);
	DDX_Check(pDX, IDC_CLEANDOCHIST, m_bCleanDochist);
	DDX_Check(pDX, IDC_CLEANRUNHIST, m_bCleanRunhist);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CStartMenu, CPropertyPage)
//{{AFX_MSG_MAP(CStartMenu)
ON_BN_CLICKED(IDC_CLOSESYSTEM, OnChange)
ON_WM_HSCROLL()
ON_CONTROL( CLBN_CHKCHANGE, IDC_ADDMENULIST, OnLChange )
	ON_WM_CTLCOLOR()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_SETCURSOR()
ON_BN_CLICKED(IDC_CLEANDOCHIST, OnLChange)
ON_BN_CLICKED(IDC_DOCMENU, OnChange)
ON_BN_CLICKED(IDC_FAVORITESMENU, OnChange)
ON_BN_CLICKED(IDC_RUNMENU, OnChange)
ON_BN_CLICKED(IDC_LOGOFF, OnChange)
ON_BN_CLICKED(IDC_FINDMENU, OnChange)
ON_BN_CLICKED(IDC_EXITANDTODOS, OnChange)
ON_BN_CLICKED(IDC_DISABLEDOCMENU, OnChange)
ON_BN_CLICKED(IDC_CLEANRUNHIST, OnChange)
	ON_BN_CLICKED(IDC_NOCONPRN, OnChange)
	ON_WM_MOUSEMOVE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CStartMenu message handlers

BOOL CStartMenu::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	DWORD wordbuf;
	CString buf;
	RegEdit Reg;
	
	m_cMenuSpeed.SetRange(0,5000);
	m_cMenuSpeed.SetPageSize(500);
	m_cMenuSpeed.SetTicFreq(500);
	m_cMenuSpeed.SetLineSize(250);
	
	Reg.RootKey=HKEY_CURRENT_USER;
	if (Reg.OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"))
	{
		if (Reg.ReadDword("NoRun",wordbuf))
			m_bRunMenu=wordbuf;
		if (Reg.ReadDword("NoRecentDocsmenu",wordbuf))
			m_bDocMenu=wordbuf;
		if (Reg.ReadDword("NoFavoritesMenu",wordbuf))
			m_bFavoritesMenu=wordbuf;
		if (Reg.ReadDword("NoClose",wordbuf))
			m_bCloseSystem=wordbuf;
		if (Reg.ReadBinary("NoFind",wordbuf))
			m_bFindMenu=wordbuf;
		if (Reg.ReadBinary("NoLogOff",wordbuf))
			m_bLogoffMenu=wordbuf;
	}
	//隐藏“设置”菜单中控制面板和打印机
	if (Reg.GetDwordValue(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoSetFolders",wordbuf))
		m_bNoConPrn=wordbuf;
	//<关闭系统>中退出WINDOWS返回MS-DOS项
	if (Reg.GetDwordValue(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\WinOldApp","NoRealMode",wordbuf))
		m_bExitToDos=wordbuf;
	//禁止文档菜单记载记录
	if (Reg.GetBinaryValue(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoRecentDocsHistory",wordbuf))
		m_bDisableDocrun=wordbuf;
	
	//开始菜单弹出速度  
	MenuSpeed=400;
	if (Reg.GetStringValue(HKEY_CURRENT_USER,"control panel\\desktop","MenuShowDelay",buf))
	{
		MenuSpeed=atoi(buf);
		if (MenuSpeed<0)
			MenuSpeed=400;
		else if (MenuSpeed>5000)
			MenuSpeed=5000;
	}
	m_cMenuSpeed.SetPos(MenuSpeed);
	m_cAddmenuList.AddString("控制面板");
	m_cAddmenuList.AddString("打印机");
	m_cAddmenuList.AddString("回收站");
	m_cAddmenuList.AddString("网页历史记录夹");
	m_cAddmenuList.AddString("网上邻居");
	m_cAddmenuList.AddString("我的公文包");

	ITEMIDLIST Dir1;
	char Ddir[512];
	LPITEMIDLIST Dir=&Dir1;
	
	::SHGetSpecialFolderLocation(m_hWnd,CSIDL_STARTMENU,&Dir);
	::SHGetPathFromIDList(Dir,Ddir);
	CString MenuDir=Ddir;
	CString DestDir;
	
	int i=0;
	DestDir=MenuDir+"\\"+"控制面板.{21EC2020-3AEA-1069-A2DD-08002B30309D}";
	m_cAddmenuList.SetCheck(i++,!_chdir(DestDir));
	DestDir=MenuDir+"\\"+"打印机.{2227A280-3AEA-1069-A2DE-08002B30309D}";
	m_cAddmenuList.SetCheck(i++,!_chdir(DestDir));
	DestDir=MenuDir+"\\"+"回收站.{645FF040-5081-101B-9F08-00AA002F954E}";
	m_cAddmenuList.SetCheck(i++,!_chdir(DestDir));
	DestDir=MenuDir+"\\"+"网页历史记录文件夹.{FF393560-C2A7-11CF-BFF4-444553540000}";
	m_cAddmenuList.SetCheck(i++,!_chdir(DestDir));
	DestDir=MenuDir+"\\"+"网络邻居.{208D2C60-3AEA-1069-A2D7-08002B30309D}";
	m_cAddmenuList.SetCheck(i++,!_chdir(DestDir));
	DestDir=MenuDir+"\\"+"我的公文包.{85BBD920-42A0-1069-A2E4-08002B30309D}";
	m_cAddmenuList.SetCheck(i++,!_chdir(DestDir));
	
	UpdateData(FALSE);
	return TRUE; 
}

void CStartMenu::OnOK() 
{
	RegEdit Reg;
	
	if (Modify)
	{
		ITEMIDLIST Dir1;
		char Ddir[512];
		LPITEMIDLIST Dir=&Dir1;
		
		Reg.RootKey=HKEY_CURRENT_USER;
		if (Reg.CreateKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"))
		{
			Reg.WriteDword("NoRun",(DWORD)(m_bRunMenu));
			Reg.WriteDword("NoRecentDocsmenu",(DWORD)(m_bDocMenu));
			Reg.WriteDword("NoFavoritesMenu",(DWORD)(m_bFavoritesMenu));
			Reg.WriteDword("NoClose",(DWORD)(m_bCloseSystem));
			Reg.WriteBinary("NoFind",(DWORD)(m_bFindMenu));
			Reg.WriteBinary("NoLogOff",(DWORD)(m_bLogoffMenu));
		}
		Reg.SetDwordValue(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoSetFolders",m_bNoConPrn);	
		Reg.SetDwordValue(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\WinOldApp","NoRealMode",(DWORD)m_bExitToDos);
		Reg.SetBinaryValue(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoRecentDocsHistory",(DWORD)m_bDisableDocrun);
		CWinSetApp* pApp=(CWinSetApp*)AfxGetApp();
		Reg.SetStringValue(HKEY_CURRENT_USER,"control panel\\desktop","MenuShowDelay",pApp->NumToString(m_cMenuSpeed.GetPos()));
		if (m_bCleanDochist)
		{
			//清除文档菜单
			::SHGetSpecialFolderLocation(m_hWnd,CSIDL_RECENT,&Dir);
			::SHGetPathFromIDList(Dir,Ddir);
			CString DocDir=Ddir;
			DocDir+="\\";
			CString Fn;
			strcat(Ddir,"\\*.*");		
			
			long hfile;
			struct _finddata_t ffblk;
			if ( (hfile=_findfirst(Ddir, &ffblk)) !=-1)
			{
				do
				{
					Fn=DocDir+ffblk.name;
					_unlink(Fn);
				}while(_findnext(hfile,&ffblk)==0);
			}
			
			
		}
		if (m_bCleanRunhist)
		{
			//清除运行菜单
			Reg.SetKey(HKEY_CURRENT_USER);
			if (Reg.DeleteKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\runMRU"))
			{
				Reg.CreateKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\runMRU");
				Reg.WriteString("","");
			}
		}
		::SHGetSpecialFolderLocation(m_hWnd,CSIDL_STARTMENU,&Dir);
		::SHGetPathFromIDList(Dir,Ddir);
		CString MenuDir=Ddir;
		CString DestDir;
		char *DirName[]={"控制面板.{21EC2020-3AEA-1069-A2DD-08002B30309D}",
			"打印机.{2227A280-3AEA-1069-A2DE-08002B30309D}",
			"回收站.{645FF040-5081-101B-9F08-00AA002F954E}",
			"网页历史记录文件夹.{FF393560-C2A7-11CF-BFF4-444553540000}",
			"网络邻居.{208D2C60-3AEA-1069-A2D7-08002B30309D}",
			"我的公文包.{85BBD920-42A0-1069-A2E4-08002B30309D}"
		};
		for (int i=0;i<6;i++)
		{
			DestDir=MenuDir+"\\"+DirName[i];
			if (m_cAddmenuList.GetCheck(i))
				_mkdir(DestDir);
			else
				_rmdir(DestDir);			
		}
		m_bCleanDochist = FALSE;
		m_bCleanRunhist = FALSE;
		UpdateData(FALSE);		
	}
	CPropertyPage::OnOK();
}




void CStartMenu::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	OnChange();
	CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar);
}

//改变选择,使应用钮用效,退出提示可能需重新启动计算机
void CStartMenu::OnChange() 
{
	((CWinSetApp *)AfxGetApp())->SetModifyflag();
	SetModified(TRUE);	
	Modify=TRUE;
}

//改变选择,使应用钮用效,
void CStartMenu::OnLChange() 
{
	SetModified(TRUE);	
	Modify=TRUE;	
}

//设置颜色
HBRUSH CStartMenu::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor);
	
	int	FrmIDs[]={IDC_HIDEMENUITEMFRM,IDC_ADDMENUFRM};
	for (int i=0;i<sizeof(FrmIDs)/sizeof(int);i++)
	{
	 if (*GetDlgItem(FrmIDs[i])==*(pWnd))
	 {
		pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHT));
		break;
	 }
	}
	return hbr;
}

void CStartMenu::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	//显示隐藏状态条
	((CWinSetDlg*)AfxGetMainWnd())->ShowStatusBar();
	
	CPropertyPage::OnLButtonDblClk(nFlags, point);
}

BOOL CStartMenu::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	int IDs[]={    IDC_MENUSPEED,	IDC_ADDMENULIST};
	UINT StrIDs[]={IDS_MENUSPEEDST, IDS_ADDMENULIST};
	
	CRect rc;
	CString Str;
	bool Prompt=FALSE;
	for (int i=0;i<sizeof(IDs)/sizeof(int);i++)
	{
		if (*GetDlgItem(IDs[i])==*pWnd)
		{
			Str.LoadString(StrIDs[i]);
			((CWinSetDlg*)AfxGetMainWnd())->SetStatusText(Str);
			Prompt=TRUE;
			break;
		}
	}

	return CPropertyPage::OnSetCursor(pWnd, nHitTest, message);
}

void CStartMenu::OnMouseMove(UINT nFlags, CPoint point) 
{
	int IDs[]={	  IDC_HIDEMENUITEMFRM,IDC_MENUSPEEDST};
	int StrIDs[]={IDS_HIDEMENUITEMFRM,IDS_MENUSPEEDST};
	
	CRect rc;
	CString Str;
	bool Prompt=FALSE;
	for (int i=0;i<sizeof(IDs)/sizeof(int);i++)
	{
		GetDlgItem(IDs[i])->GetWindowRect(&rc);
		ScreenToClient(&rc);
		if (rc.PtInRect(point))
		{
			Str.LoadString(StrIDs[i]);
			((CWinSetDlg*)AfxGetMainWnd())->SetStatusText(Str);
			Prompt=TRUE;
			break;
		}
	}
	if (!Prompt)
	{
		Str.LoadString(IDS_READY);
		((CWinSetDlg*)AfxGetMainWnd())->SetStatusText(Str);
	}
	
	CPropertyPage::OnMouseMove(nFlags, point);
}

⌨️ 快捷键说明

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