修改桌面位置
功能展示
桌面上的文件系统默认都是保存在系统盘内也就是在C盘里,系统一旦无法运行,那桌面上的文件将很危险,保存也会很麻烦,我们当前例程就实现更改桌面位置功能,效果如图,点击<获取当前桌面位置>可将当前桌面路径显示出来,点击<设置下面目录为桌面位置>可将桌面的路径设置为编辑框内输入的路径,设置的生效在注销或重启系统执行;生效后原先桌面的文件可手动打开原先桌面的文件夹如C:\Users\baikhgmv\Desktop
要点提示
当前例程也是通过注册表的修改来实现桌面路径的更改,主要修改两处注册表位置
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
这两个键的右侧都有一个名称为Desktop,类型为REG_SZ的键值项,其值就为桌面的路径;
默认情况下 Shell Folders键下Desktop的值为 C:\Users\baikhgmv\Desktop。
User Shell Folders键下Desktop的值为 %USERPROFILE%\Desktop 。 %USERPROFILE%\为系统环境变量其值就是C:\Users\baikhgmv。想修改其值只要新建环境变量%USERPROFILE%填写想的的值便可;
另外这两个键下还有很多常用的键值项Favorites,My Music,My Pictures,My Video,Personal等等,顾名思义,分别对应系统的 收藏夹,我的音乐,我的图片,我的视频,我的文档,我们也可依照例程举一反三,一一设置这些路径
实现功能
1.新建基于对话框的应用程序
2.添加两编辑框IDC_EDIT1, IDC_EDIT2,两按钮<获取当前桌面位置><设置下面目录为桌面位置>关联点击函数
void CGkbc8Dlg::OnGet()
{
HKEY key;
CString sSubKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",sValueName="Desktop";
if(RegOpenKeyEx(HKEY_CURRENT_USER,sSubKey,0,KEY_ALL_ACCESS,&key) == ERROR_SUCCESS)
{
DWORD Type = REG_SZ;
char cData[_MAX_PATH];
DWORD wDataLen = _MAX_PATH*sizeof(char)+1;
RegQueryValueEx(key,//一个已打开项的句柄,或者指定一个标准项名
sValueName, // 要获取值的名字
NULL, // 未用,设为零
&Type, // 用于装载取回数据类型的一个变量
(LPBYTE)cData, // 用于装载指定值的一个缓冲区
&wDataLen //用于装载lpData缓冲区长度的一个变量。一旦返回,它会设为实际装载到缓冲区的字节数
);
SetDlgItemText(IDC_EDIT1,cData);
}
else
MessageBox("注册表打开失败");
RegCloseKey(key);
}
void CGkbc8Dlg::OnSet()
{
HKEY key;
CString sSubKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
CString sValueName ="Desktop";
CString sValueData;
GetDlgItemText(IDC_EDIT2,sValueData);
if(sValueData.IsEmpty()) return;
//<>
DWORD Type = REG_SZ;
DWORD wDataLen = _MAX_PATH*sizeof(char)+1;
if(RegOpenKeyEx(HKEY_CURRENT_USER,sSubKey,0,KEY_ALL_ACCESS,&key) == ERROR_SUCCESS)
{
if(RegSetValueEx(key,sValueName,0,REG_SZ,(const unsigned char *)sValueData.GetBuffer(0),wDataLen)!=ERROR_SUCCESS)
{
MessageBox("注册表设置失败");
return;
}
}
else
MessageBox("注册表打开失败");
RegCloseKey(key);
//<>
sSubKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders";
if(RegOpenKeyEx(HKEY_CURRENT_USER,sSubKey,0,KEY_ALL_ACCESS,&key) == ERROR_SUCCESS)
{
if(RegSetValueEx(key,sValueName,0,REG_SZ,(const unsigned char *)sValueData.GetBuffer(0),wDataLen)!=ERROR_SUCCESS)
{
MessageBox("注册表设置失败");
return;
}
}
else
MessageBox("注册表打开失败");
RegCloseKey(key);
}
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|