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

📄 explorerset.cpp

📁 visual c++ 实例编程
💻 CPP
字号:
// ExplorerSet.cpp :  我的电脑系统设置修改



#include "stdafx.h"
#include "WinSet.h"
#include "ExplorerSet.h"
#include "RegEdit.h"
#include "OpenBmpDlg.h"
#include "OpenicoDlg.h"
#include "WinSetDlg.h"

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


/////////////////////////////////////////////////////////////////////////////
// CExplorerSet property page

IMPLEMENT_DYNCREATE(CExplorerSet, CPropertyPage)

CExplorerSet::CExplorerSet() : CPropertyPage(CExplorerSet::IDD)
{
	m_psp.dwFlags &= ~(PSP_HASHELP);
	//m_psp.dwFlags |=PSP_USEHICON ;
	//m_psp.hIcon=AfxGetApp()->LoadIcon(IDI_MYCOMPUTER);

	Modify=FALSE;
	//{{AFX_DATA_INIT(CExplorerSet)
	m_bSmallBmp = m_bOldSmallbmp = FALSE;
	m_sBackBmp = _T("");
	m_sIconSize = _T("32");
	m_bHideFilemenu = FALSE;
	m_bNoSaveset = FALSE;
	iIconColor = 0;
	//}}AFX_DATA_INIT
}

CExplorerSet::~CExplorerSet()
{
}

void CExplorerSet::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CExplorerSet)
	DDX_Control(pDX, IDC_DRIVELIST, m_cDriveList);
	DDX_Control(pDX, IDC_DRIVE, m_cDrive);
	DDX_Control(pDX, IDC_DRIVEICON, m_cDriveIcon);
	DDX_Check(pDX, IDC_SMALLBMP, m_bSmallBmp);
	DDX_Text(pDX, IDC_BACKBMP, m_sBackBmp);
	DDX_Text(pDX, IDC_ICONSIZE, m_sIconSize);
	DDX_Check(pDX, IDC_HIDEFILEMENU, m_bHideFilemenu);
	DDX_Check(pDX, IDC_NOSAVESET, m_bNoSaveset);
	DDX_CBIndex(pDX, IDC_ICONCOLOR, iIconColor);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CExplorerSet, CPropertyPage)
//{{AFX_MSG_MAP(CExplorerSet)
	ON_BN_CLICKED(IDC_BROWSEBACK, OnBrowseback)
	ON_BN_CLICKED(IDC_AUTORUNBROWSE, OnAutorunbrowse)
	ON_BN_CLICKED(IDC_BROWSEICON, OnBrowseicon)
	ON_BN_CLICKED(IDC_AUTORUNCANCEL, OnAutoruncancel)
	ON_CBN_SELCHANGE(IDC_DRIVE, OnSelchangeDrive)
	ON_BN_CLICKED(IDC_SAVESET, OnLChange)
	ON_CONTROL( CLBN_CHKCHANGE, IDC_DRIVELIST, OnChange )
	ON_WM_CTLCOLOR()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_SETCURSOR()
	ON_WM_MOUSEMOVE()
	ON_EN_CHANGE(IDC_ICONCOLOR, OnChange)
	ON_EN_CHANGE(IDC_ICONSIZE, OnChange)
	ON_BN_CLICKED(IDC_FILEMENU, OnChange)
	ON_BN_CLICKED(IDC_SMALLBMP, OnChange)
	ON_EN_CHANGE(IDC_BACKBMP, OnLChange)
	ON_CBN_SELCHANGE(IDC_ICONCOLOR, OnChange)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CExplorerSet message handlers

BOOL CExplorerSet::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	CString String;
	RegEdit Reg;
	DWORD wordbuf;
	int i;
	
	//资源管理器背景图画
    Reg.GetStringValue(HKEY_CURRENT_USER,"Software\\Microsoft\\Internet Explorer\\Toolbar","BackBitmap",m_sBackBmp);
	//图标大小,颜色
	Reg.RootKey=HKEY_CURRENT_USER;
	if (Reg.OpenKey("Control Panel\\desktop\\WindowMetrics"))
	{
		if (Reg.ReadString("Shell Icon Size",String))
			m_sIconSize=String;
		if (Reg.ReadString("Shell Icon BPP",String))
		{
			char *sIconColors[]={"4","8","16","24","32"};
			String.TrimLeft();
			String.TrimRight();
			for (int i=0;i<5;i++)
			{
				if (String==sIconColors[i])
					iIconColor=i;
			}
		}
	}
	
	if (Reg.OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"))
	{
		//无文件菜单
		if (Reg.ReadBinary("NoFileMenu",wordbuf))
			m_bHideFilemenu=wordbuf;
		//不保存设置
		if (Reg.ReadBinary("NoSaveSettings",wordbuf))
			m_bNoSaveset=wordbuf;
	}
	//读位图小图片方式 
	if (Reg.GetStringValue(HKEY_CLASSES_ROOT,".bmp","",String))
	{
		String+="\\Defaulticon";
		if (Reg.GetStringValue(HKEY_CLASSES_ROOT,String,"",String))
		{
			String.TrimLeft();
			String.TrimRight(); 
			m_bSmallBmp=m_bOldSmallbmp=(String=="%1");
			BmpDefaulticon=String;
		}						  
	}
	//驱动器图标,自动执行文件
	char Drive[]="A:\\";
	char DriveStr[]="A:";
	AutorunInfo AutorunFile;
	
	for (i=2;i<26;i++)
	{
		*Drive=*DriveStr='A'+i;
		if (::GetDriveType(Drive)==DRIVE_FIXED)
		{
			FILE *fp;
			char Str[1024],InfFile[256];
			CString String;
			
			m_cDrive.AddString(DriveStr);
			AutorunFile.Drive=i;
			AutorunFile.IconIndex=0;
			AutorunFile.Icon.Empty();
			AutorunFile.ExeFile.Empty();
			strcpy(InfFile,Drive);
			strcat(InfFile,"AutoRun.inf");
			fp=fopen(InfFile,"rb+");
			if (fp==NULL)
				fp=fopen(InfFile,"wb+");
			while(!feof(fp))
			{
				fgets(Str,1024,fp);
				String=Str;
				String.MakeUpper();
				int Index=String.Find("ICON");
				if (Index!=-1)
				{
					String=String.Right(String.GetLength()-Index-4);
					int len=String.GetLength();
					for (int l=0;l<len;l++)
					{
						if (String[l]=='=')
						{
							String=String.Right(String.GetLength()-l-1);
							break;
						}
					}
					if (l<len)
					{
						String.TrimLeft();
						String.TrimRight();
						Index=String.Find(',');
						if (Index==-1)
							AutorunFile.Icon=String;
						else
						{
							AutorunFile.Icon=String.Left(Index);
							String=String.Right(String.GetLength()-Index-1);
							String.TrimLeft();
							AutorunFile.IconIndex=atoi(String);
						}
						if (AutorunFile.Icon.Find('\\')==-1)
							AutorunFile.Icon=Drive+AutorunFile.Icon;
					}
				}
				else
				{
					Index=String.Find("OPEN");
					if (Index!=-1)
					{
						String=String.Right(String.GetLength()-Index-4);
						int len=String.GetLength();
						for (int l=0;l<len;l++)
						{
							if (String[l]=='=')
							{
								String=String.Right(String.GetLength()-l-1);
								break;
							}
						}
						if (l<len)
						{
							String.TrimLeft();
							String.TrimRight();
							AutorunFile.ExeFile=String;
							if (AutorunFile.ExeFile.Find('\\')==-1)
							  AutorunFile.ExeFile=Drive+AutorunFile.ExeFile;

						}
					}								
				}
			}
			fclose(fp);
			DriveAuto.Add(AutorunFile);
		}
	}
	m_cDrive.SetCurSel(0);
	CurDrive=0;
	if (DriveAuto[0].Icon.IsEmpty())
	{
		SHFILEINFO fi;
		*Drive=DriveAuto[0].Drive+'A';
		SHGetFileInfo(Drive,0,&fi,sizeof(fi),SHGFI_ICON|SHGFI_LARGEICON);
		m_cDriveIcon.SetIcon(fi.hIcon);
	}
	else
	{
		m_cDriveIcon.SetIcon(::ExtractIcon(AfxGetInstanceHandle(),DriveAuto[0].Icon,DriveAuto[0].IconIndex));
	}
	GetDlgItem(IDC_AUTORUNFILE)->SetWindowText(DriveAuto[0].ExeFile);

	//显示驱动器设置
	DWORD NoDrives;
	Reg.RootKey=HKEY_CURRENT_USER;
	if (Reg.OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"))
	{
	  if (Reg.ReadBinary("NoDrives",NoDrives)==0)
		  NoDrives=0;
	}
	for (i=0;i<26;i++)
	{	
		char Str[]={"X:"};
		Str[0]='A'+i;
		
		DWORD State=NoDrives>>i;
		State&=1;
		m_cDriveList.AddString(Str);
		m_cDriveList.SetCheck(i,State);
	}		
	UpdateData(FALSE);
	return TRUE;
}

void CExplorerSet::OnOK() 
{
	if (Modify)
	{
		CString String;
		RegEdit Reg;
		int i;
		
		//设置背景位置
		GetDlgItem(IDC_BACKBMP)->GetWindowText(String);
		Reg.SetStringValue(HKEY_CURRENT_USER,"Software\\Microsoft\\Internet Explorer\\Toolbar","BackBitmap",String);
		//设置图标大小,颜色
		Reg.RootKey=HKEY_CURRENT_USER;
		if (Reg.OpenKey("Control Panel\\desktop\\WindowMetrics"))
		{
			GetDlgItem(IDC_ICONSIZE)->GetWindowText(String);
			Reg.WriteString("Shell Icon Size",String);
			char *sIconColors[]={"4","8","16","24","32"};
			String.TrimLeft();
			String.TrimRight();
			Reg.WriteString("Shell Icon BPP",sIconColors[iIconColor]);		
		}
		if (Reg.OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"))
		{
			//是否显示文件菜单
			Reg.WriteBinary("NoFileMenu",(DWORD)m_bHideFilemenu);
			//是否保存资源管理器设置
			Reg.WriteBinary("NoSaveSettings",(DWORD)m_bNoSaveset);
		}
		//是否显示位图为小图片方式
		if (m_bSmallBmp!=m_bOldSmallbmp)
		{
			CString StrKey;
			
			StrKey="%1";
			
			Reg.RootKey=HKEY_CURRENT_USER;
			if (Reg.OpenKey("Software"))
				if (Reg.CreateKey("XKSoft\\WinSet"))
				{
					if (!m_bOldSmallbmp)
						Reg.WriteString("BmpDefaulticon",BmpDefaulticon);
				}
				if (Reg.GetStringValue(HKEY_CLASSES_ROOT,".bmp","",String))
				{
					String+="\\Defaulticon";
					if (!m_bSmallBmp)
						Reg.GetStringValue(HKEY_CURRENT_USER,"SoftWare\\XKSoft\\WinSet","BmpDefaulticon",StrKey);
					Reg.SetStringValue(HKEY_CLASSES_ROOT,String,"",StrKey);
				}
				
		}
		//保存驱动器图标,自动执行文件
		GetDlgItem(IDC_AUTORUNFILE)->GetWindowText(String);
		DriveAuto[CurDrive].ExeFile=String;
		for (i=0;i<DriveAuto.GetSize();i++)
		{
			char fn[]="A:\\AutoRun.inf";
			*fn=DriveAuto[i].Drive+'A';
			FILE *fp;
			if ((fp=fopen(fn,"wb"))==NULL)
				continue;
			fprintf(fp,"[AutoRun]\r\n");
			fprintf(fp,"Icon=%s,%d\r\n",DriveAuto[i].Icon,DriveAuto[i].IconIndex);
			if (!DriveAuto[i].ExeFile.IsEmpty())
				fprintf(fp,"Open=%s",DriveAuto[i].ExeFile);
			fclose(fp);
		}
		DWORD NoDrives=0,State;
		for (i=0;i<26;i++)
		{
			//获得列表视图检查框状态
			State=m_cDriveList.GetCheck(i);
			State=State<<i;
			NoDrives|=State;
		}
		Reg.RootKey=HKEY_CURRENT_USER;
		if (Reg.OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"))
		{
			Reg.WriteBinary("NoDrives",NoDrives);
		}				
	}
	CPropertyPage::OnOK();
}

//选择浏览器背景位图文件
void CExplorerSet::OnBrowseback() 
{
	CString FileName;
	
	COpenBmpDialog dlgOpenFile;
	
	GetDlgItem(IDC_BACKBMP)->GetWindowText(FileName);
	if (!FileName.IsEmpty())
	{
		int i=FileName.ReverseFind('\\');
		if (i>0)
		{
			CString Dir=FileName.Left(i);
			dlgOpenFile.m_ofn.lpstrInitialDir=Dir; 
		}
	}
	int iRet=dlgOpenFile.DoModal();
	if (iRet!=IDOK)
		return;
	FileName=dlgOpenFile.GetPathName();
	GetDlgItem(IDC_BACKBMP)->SetWindowText(FileName);
}

void CExplorerSet::OnChange() 
{
	((CWinSetApp *)AfxGetApp())->SetModifyflag();
	SetModified(TRUE);
	Modify=TRUE;
}

void CExplorerSet::OnLChange() 
{
	SetModified(TRUE);
	Modify=TRUE;	
}

//选择驱动器自动执行文件
void CExplorerSet::OnAutorunbrowse() 
{
	CString Filter="可执行文件(*.exe) |*.exe||";
	CString FileName;
	
	CFileDialog dlgOpenFile(TRUE,0,0,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,(LPCTSTR)Filter);
	
	dlgOpenFile.m_ofn.lpstrTitle=_T("选择自动运行程序...");
	int iRet=dlgOpenFile.DoModal();
	if (iRet!=IDOK)
		return;
	FileName=dlgOpenFile.GetPathName();
	GetDlgItem(IDC_AUTORUNFILE)->SetWindowText(FileName);
	OnChange();	
}

//选择驱动图标
void CExplorerSet::OnBrowseicon() 
{
	CString FileName=DriveAuto[CurDrive].Icon;
	
	COpenIcoDlg dlgOpenFile;
	
	dlgOpenFile.m_ofn.lpstrTitle=_T("选择驱动器图标...");
	if (!FileName.IsEmpty())
	{
		int Index=FileName.ReverseFind('\\');
		if (Index!=-1)
		{
			FileName=FileName.Left(Index);
			dlgOpenFile.m_ofn.lpstrInitialDir=FileName;
		}
	}
	int iRet=dlgOpenFile.DoModal();
	if (iRet!=IDOK)
		return;
	FileName=dlgOpenFile.GetPathName();
	int IconIndex=dlgOpenFile.IconIndex;
	DriveAuto[CurDrive].Icon=FileName;
	DriveAuto[CurDrive].IconIndex=IconIndex;
	m_cDriveIcon.SetIcon(::ExtractIcon(AfxGetInstanceHandle(),FileName,IconIndex));
	OnChange();
}

//取消自动运行程序
void CExplorerSet::OnAutoruncancel() 
{
	GetDlgItem(IDC_AUTORUNFILE)->SetWindowText("");
}

//改变驱动器
void CExplorerSet::OnSelchangeDrive() 
{
	CString String;
	
	GetDlgItem(IDC_AUTORUNFILE)->GetWindowText(String);
	DriveAuto[CurDrive].ExeFile=String;
	CurDrive=m_cDrive.GetCurSel();
	GetDlgItem(IDC_AUTORUNFILE)->SetWindowText(DriveAuto[CurDrive].ExeFile);
	if (DriveAuto[CurDrive].Icon.IsEmpty())
	{
		SHFILEINFO fi;
		char *Drive="A:\\";
		*Drive=DriveAuto[CurDrive].Drive+'A';
		SHGetFileInfo(Drive,0,&fi,sizeof(fi),SHGFI_ICON|SHGFI_LARGEICON);
		m_cDriveIcon.SetIcon(fi.hIcon);
	}
	else
	{
		m_cDriveIcon.SetIcon(::ExtractIcon(AfxGetInstanceHandle(),DriveAuto[CurDrive].Icon,DriveAuto[CurDrive].IconIndex));
	}
	
}

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

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

BOOL CExplorerSet::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	int IDs[]={    IDC_DRIVELIST,IDC_BROWSEBACK,	 IDC_BACKBMP,	IDC_DRIVE,		IDC_BROWSEICON,IDC_HIDEFILEMENU,IDC_SMALLBMP,	 IDC_NOSAVESET,IDC_AUTORUNBROWSE,
				   IDC_AUTORUNCANCEL,IDC_AUTORUNFILE};
	UINT StrIDs[]={IDS_HIDEDRIVEST,IDS_BROWSEBACKBMP,IDS_BACKBMPED,	IDS_SELECTDRIVE,IDS_BROWSEICON,IDS_HIDEFILEMENU,IDS_SMALLBMPSHOW,IDS_NOSAVESET,IDS_AUTORUNBROWSE,
				   IDS_AUTORUNCANCEL,IDS_DRIVEAUTORUNFILE};
	
	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 CExplorerSet::OnMouseMove(UINT nFlags, CPoint point) 
{
	int IDs[]={	  IDC_HIDEDRIVEST,IDC_DRIVEICON};
	int StrIDs[]={IDS_HIDEDRIVEST,IDS_DRIVEICON};
	
	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 + -