无忧启动论坛

标题: 桌面转移USER\Software\Micrsoft\Windows\CurrentVersion\Explorer\User ShellFolders [打印本页]

作者: sairen139    时间: 2019-1-26 21:40
标题: 桌面转移USER\Software\Micrsoft\Windows\CurrentVersion\Explorer\User ShellFolders
本帖最后由 sairen139 于 2019-9-18 23:12 编辑

桌面、收藏夹等在ramos系统转移到非系统盘只需修改注册表[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]里面的这一处DoskTop的路径为F:\Desktop即可!
【超棒的技巧:某次制作uefi的ramos时忘记先改桌面和收藏夹到D盘去。补救办法就是直接在当前的Ramos中挂载系统大vdf里的用户名文件夹下的ntuser.dat。这个文件也可以离线挂载的修改以下对应的内容即可:
[******自己输入的挂载名称\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]里面的这一处DeskTop的路径为D:\Desktop即可!】


这是我自己测试的结果,只要改User Shell Folders注册表项这一个地方就能成功。但是网上的一些方法说要改下面两个地方:


HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders和另外一个[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]下的desktop的值把这两个都改成f:\Desktop文件夹。

请网友们讨论和测试一下只改一个地方和改两个地方究竟有什么差别?(经过网友讨论和我自己的验证已经可以确认对于ramos系统只需改一个地方即可!)


【这里分享一下把Ramos几乎当成正常系统一样来使用的方法,除了改上面说的User Shell Folders注册表里面的桌面和收藏夹的注册表路径外,更为关键的是下面这个转移用户名文件夹里面的NTuser.dat的技巧,要用mklink建立符号链接(软链接):
mklink支持这种跨分区的符号链接,转移ntuser.dat可以在pe或者别的系统或者ramos下直接把挂载出来的VHD盘里的NTuser.dat剪切到其他盘的System Volume Information文件夹下。(可以在剪切走之前把它拖入cmd窗口下输入mklink 后面,就出现全路径名,再空一格后把剪切后ntuser.dat再拖入cmd窗口,然后新的全路径也产生了,回车就会创建到c盘原来位置的联接了)你在c盘原位置会发现一个为0kb大小的ntuser.dat链接文件。重启进入ramos后System Volume Information文件夹里会产生另外三个配置文件,(经测试这三个文件哪怕粉碎机粉碎了下次再进系统还是会自动产生的!),所以不用管这三个文件。但是可以把原来正常vhd里用户名文件夹下的同名的这三个文件删除了)。

这样设置的桌面,你在ramos里可以按照自己的意愿摆放图标和文件夹的位置和顺序,下次再进ramos依然可以保持住你想要保持的任意状态!因为NTuser.dat文件已经在ramos的系统盘外读写了!唯一要注意的一点是:当你在ramos中锁定一个图标在任务栏时,需要把
C:\Users\用户名\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar这个目录下放的就是任务栏中的新产生的快捷方式剪切到挂载出来的原vhd的这个相同路径的TaskBar文件夹下,这样重启进入ramos就能正常使用任务栏上锁定的图标了!当然你也可以按照修改注册表的方法把User  Shell Floders下面的Raoming文件夹也转移到非系统盘去】


PS(一):关于桌面背景壁纸保存位置(可以用primoramdisk交接点的功能设置到非系统盘D盘的某个文件夹下去!当然也可以用本篇的注册表修改法在user shell Folders下面直接添加这个文件夹的条目把路径改到非系统盘某个文件夹下):C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Themes 就是当前桌面背景壁纸图片的保存位置。

PS(二):关于wifi无线的保存设定:win7下wifi保存在C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces。注册表位置在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wlansvc\Interfaces。另外一个方法就是批处理关机导出配置开机加载配置。

B073F0DD-D1DF-438E-BC75-B7E8D5D27D09.jpeg (915.88 KB, 下载次数: 182)

B073F0DD-D1DF-438E-BC75-B7E8D5D27D09.jpeg

34D57665-6E65-449B-BC58-DA4B8EF80905.jpeg (45.42 KB, 下载次数: 185)

34D57665-6E65-449B-BC58-DA4B8EF80905.jpeg

作者: magicgenius    时间: 2019-1-26 22:18
最好不要用注册表或者工具修改位置。
只需剪切到目标文件夹就好了。
作者: magicgenius    时间: 2019-1-26 22:19
剪切、粘贴之前先关闭所有程序,尤其是安全软件。
作者: sairen139    时间: 2019-1-26 22:21
本帖最后由 sairen139 于 2019-3-17 11:36 编辑
magicgenius 发表于 2019-1-26 22:18
最好不要用注册表或者工具修改位置。
只需剪切到目标文件夹就好了。


我想在第一次进系统之前就转移走桌面等文件夹,好像只有挂载注册表修改注册表路径的方法。

附录行者无疆整理的可能有用的文件夹地址和其他设置:
系统篇:

关闭superfetch服务

关闭字体缓存服务

桌面、收藏夹、图片、音乐、文档、视频、下载这些目录请用个人资料转移工具,QQ微信的聊天数据默认在文档中了已经

环境变量在电脑高级属性中可以查看,用primo改至非C内存盘

IE浏览器缓存IE中修改

任务栏快速启动快捷方式路径 C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar

开始菜单快捷方式 C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu

桌面背景 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Themes

用户桌面资源管理器注册表文件 C:\Users\Administrator\NTUSER.dat

经测试可保存文件的打开方式 C:\Users\Administrator\AppData\Local\Microsoft\Windows\usrclass.dat

开机启动 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

体积巨大的驱动缓存 C:\Windows\System32\DriverStore

无线密码注册表 C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces
        路径 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wlansvc\Interfaces
        
无线密码P处理保存命令 netsh wlan export profile folder=无线网络配置文件 key=clear
             恢复命令 for %%i in (无线网络配置文件\*.xml) do (netsh wlan add profile filename="%%i")           

N卡设置 C:\ProgramData\NVIDIA Corporation\Drs

软件类:

火绒用户设置 C:\ProgramData\Huorong

QQ音乐自动登录 C:\Users\Administrator\AppData\Roaming\Tencent\QQMusic\WebkitCache\5000\Local Storage
      设置 C:\Users\Administrator\AppData\Roaming\Tencent\QQMusic\ConfigInfoXML1.dat

类似的网易云音乐的自动登录 C:\Users\Administrator\AppData\Roaming\Netease\CloudMusic\webapp\Local Storage

sogou拼音字典 C:\Users\Administrator\AppData\LocalLow\SogouPY
              C:\Users\Administrator\AppData\LocalLow\SogouPY.users

迅雷用户数据 C:\Program Files (x86)\Thunder Network\Thunder\Profiles
    自动登录 C:\Program Files (x86)\Thunder Network\Thunder\Profiles\Community\userdata.dat

WPS用户数据可保留最近记录以及备份 C:\Users\Administrator\AppData\Roaming\Kingsoft\office6

pandownload自动登录 软件目录PanDownload\PanData

绿色版Chrome参数 自定义用户数据目录到当前目录下,如果是安装版用户,清空此选项,并且取消便携化即可使用原有数据
                 --user-data-dir=O:\RamOS_8.1\chrome
                 --disk-cache-dir=Z:\ChromeCache
                 --start-maximized
                 分别对应用户数据、缓存数据、启动最大化

作者: sairen139    时间: 2019-1-26 23:36
本帖最后由 sairen139 于 2019-1-26 23:39 编辑

只改一个地方我刚才找到依据了参见这个网页的内容:

https://blog.csdn.net/flynetcn/article/details/2346323

flynetcn关注 访问量 106万+ 原创 211博主更多文章>
原  更改windows默认的User Shell Folders
flynetcn阅读数:105242008-04-30
在注册表中当前用户的配置信息如下:
-----------------------------------------------------------------------------
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders]
"AppData"="C://Documents and Settings//Administrator//Application Data"
"Cookies"="C://Documents and Settings//Administrator//Cookies"
"Desktop"="C://Documents and Settings//Administrator//桌面"
"Favorites"="C://Documents and Settings//Administrator//Favorites"
"NetHood"="C://Documents and Settings//Administrator//NetHood"
"Personal"="C://Documents and Settings//Administrator//My Documents"
"PrintHood"="C://Documents and Settings//Administrator//PrintHood"
"Recent"="C://Documents and Settings//Administrator//Recent"
"SendTo"="C://Documents and Settings//Administrator//SendTo"
"Start Menu"="C://Documents and Settings//Administrator//「开始」菜单"
"Templates"="C://Documents and Settings//Administrator//Templates"
"Programs"="C://Documents and Settings//Administrator//「开始」菜单//程序"
"Startup"="C://Documents and Settings//Administrator//「开始」菜单//程序//启动"
"Local Settings"="C://Documents and Settings//Administrator//Local Settings"
"Local AppData"="C://Documents and Settings//Administrator//Local Settings//Application Data"
"Cache"="C://Documents and Settings//Administrator//Local Settings//Temporary Internet Files"
"History"="C://Documents and Settings//Administrator//Local Settings//History"
"My Pictures"="C://Documents and Settings//Administrator//My Documents//My Pictures"
"Fonts"="C://WINDOWS//Fonts"
"My Music"="C://Documents and Settings//Administrator//My Documents//My Music"
"My Video"="C://Documents and Settings//Administrator//My Documents//My Videos"
"CD Burning"="C://Documents and Settings//Administrator//Local Settings//Application Data//Microsoft//CD Burning"
"Administrative Tools"="C://Documents and Settings//Administrator//「开始」菜单//程序//管理工具"
-----------------------------------------------------------------------------

更改并不是在这里,而是在同级的项:User Shell Folders 中,User Shell Folders默认配置如下:


如果没有你需要的,可以在右边窗口空白处单击鼠标右键,选择“新建”菜单中的“可扩充字符串值”,对应Shell Folders项中的名称,添加一个用于User Shell Folders项的字符串名称,设置相应的数据为你需要的路径即可。

FB711E22-8B4C-45FD-B13D-8233DFE3E985.jpeg (67.25 KB, 下载次数: 163)

User Shell Folders

User Shell Folders

作者: sairen139    时间: 2019-1-27 00:27
sairen139 发表于 2019-1-26 23:36
只改一个地方我刚才找到依据了参见这个网页的内容:

https://blog.csdn.net/flynetcn/article/details/2 ...


还有这篇改一个地方User Shell Folders就成功的!
https://www.kafan.cn/mip/edu/1051501.html
怎样可以把桌面文件的存放目录转移到D盘?
电脑默认的桌面目录是在C盘,怎样可以把桌面目录转移到D盘,最好把 Documents and Settings 这个文档转移到D盘。
这样做系统桌面的东西就不会丢失了。
在正常模式下把桌面改到d盘中去,具体如下:
先在d盘建一个文件夹,然后点开始---〉运行---〉 regedit,点击HKEY_CURRENT_USER--〉Software--〉Microsoft--〉Windows--〉 CurrentVersion--〉Explorer--〉user Shell Folders
双击右边的dosktop,弹出一个对话框,在数据数值里写上你想存到那个文件夹的路径(就是打开文件夹,上面地址栏里的那行字),确定,关闭。注销系统就ok了。以后桌面上的东西就都在d盘里了
Documentsand Settings 这个是移动不了的,很多程序或软件需要读写这个文件夹,用户临时文件也在这个文件夹内读写。
作者: ge    时间: 2019-1-27 04:44
magicgenius 发表于 2019-1-26 22:18
最好不要用注册表或者工具修改位置。
只需剪切到目标文件夹就好了。

没有明白!桌面位置在x:\user\administrator\desktop,把它剪切到x:\桌面就改到x:\desktop了吗?
作者: junyee    时间: 2019-1-27 11:04
还是用目录链接的方法比较好.


作者: sairen139    时间: 2019-1-27 11:18
junyee 发表于 2019-1-27 11:04
还是用目录链接的方法比较好.

mklink方法不错
作者: 朱玛12345678    时间: 2019-1-27 11:43
可以只改一个就生效,类似于优先级的问题,一个是针对所有用户设置,一个是针对当前用户设置。
如果需要应用于多用户的话这两个路径建议都改,另外微软这么设计也是为了兼容性考虑。
作者: sairen139    时间: 2019-1-27 11:45
朱玛12345678 发表于 2019-1-27 11:43
可以只改一个就生效,类似于优先级的问题,一个是针对所有用户设置,一个是针对当前用户设置。
如果需要应 ...

昨天测试,只改shell floders下是不成功的,只改user shell folders下能成功。
作者: 朱玛12345678    时间: 2019-1-27 12:03
本帖最后由 朱玛12345678 于 2019-1-27 12:07 编辑
junyee 发表于 2019-1-27 11:04
还是用目录链接的方法比较好.


不建议使用链接的方式重定向目录,WIN10 v1809刚发布的时候就是因为使用了这个才导致的用户数据丢失。

这个问题的详细解析可以自己去看一下:http://weibo.com/3139784387/GDeev6vWu

因为目录符号链接的问题在历史上发生过类似的BUG不是一次两次了,而且目录符号链接还有一个限制就是需要NTFS文件系统的支持,也就是说如果在exFAT文件系统上是用不了的,所以这个方法并不如直接改注册表键值那样能够通用。
作者: sairen139    时间: 2019-1-27 12:19
12345678  2019-1-27 12:03
WIN10 v1809
...

NTuser.datmklinkиNTuser.datλλ
作者: sairen139    时间: 2019-1-27 12:25
本帖最后由 sairen139 于 2019-1-27 12:29 编辑
朱玛12345678 发表于 2019-1-27 12:03
不建议使用链接的方式重定向目录,WIN10 v1809刚发布的时候就是因为使用了这个才导致的用户数据丢失。
...


用户名下面的NTuser.dat(作用之一是保持桌面图标和文件的位置和顺序)除了用mklink转移到非系统盘外,请教你能找到用户名下面的NTuser.dat的注册表的具体位置吗?可以单独修改注册表指定用户名下面的NTuser.dat到非系统盘上某个文件夹里吗?只有把用户名文件夹改路径这个方法吗?
作者: 朱玛12345678    时间: 2019-1-27 12:37
sairen139 发表于 2019-1-27 12:25
用户名下面的NTuser.dat(作用之一是保持桌面图标和文件的位置和顺序)除了用mklink转移到非系统盘外, ...

没单独改过这个文件的路径,不过我倒是把整个系统的路径全给改了可以实现。
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=412683


刚在注册表搜到了个键值,不知道是不是你自己去看看吧:


作者: sairen139    时间: 2019-1-27 12:39
朱玛12345678 发表于 2019-1-27 12:37
没单独改过这个文件的路径,不过我倒是把整个系统的路径全给改了可以实现。
http://bbs.wuyou.net/forum ...

好的我现在在外面手机上网,回去后试试。
作者: junyee    时间: 2019-1-27 13:01
目录链接 我用好多年了,倒是没碰过啥问题.
也不能拿 微软的BUG来说事,,, BUG 干的事能按常理解释么,.

推荐大家安装  LinkShellExtension 这款软件,可以很方便的创建及查看 软/硬链接.

作者: sairen139    时间: 2019-1-27 14:08
朱玛12345678 发表于 2019-1-27 12:37
没单独改过这个文件的路径,不过我倒是把整个系统的路径全给改了可以实现。
http://bbs.wuyou.net/forum ...

这个NTuser.dat的注册表位置和值确实是正确的,但是我在正常启动的vhd里把NTuser.dat拷贝到F盘system volume informatin文件夹下,然后修改这个值为f盘这个文件路径。然后重启进入R驱启动的ramos的这个vhd,结果发现r驱ramos里面的这个注册表的值被自动替换成R驱内存盘\用户名\NTuser.dat的路径了,r驱ramos系统使用的NTuser.dat自然也就不是f盘那个了!实验至此直接修改法是对R驱的ramos来说是不成功。
作者: sairen139    时间: 2019-1-27 14:12
sairen139 发表于 2019-1-27 14:08
这个NTuser.dat的注册表位置和值确实是正确的,但是我在正常启动的vhd里把NTuser.dat拷贝到F盘system vol ...

目前来说对于NTuser.dat这个小文件的转移还是mklink这种方法能行,也比较简单。
作者: sairen139    时间: 2019-1-27 14:15
sairen139 发表于 2019-1-27 14:12
目前来说对于NTuser.dat这个小文件的转移还是mklink这种方法能行,也比较简单。

当然直接把用户名文件夹整体通过修改注册表转移到非系统盘也是可行的另外一种方法!
作者: sairen139    时间: 2019-1-27 18:28
朱玛12345678 发表于 2019-1-27 12:37
没单独改过这个文件的路径,不过我倒是把整个系统的路径全给改了可以实现。
http://bbs.wuyou.net/forum ...

NTUSER.DAT、ntuser.ini、ntuser.dat.LOG三个文件是注册表部分文件,它会作用于单个用户。存储了“资源管理器”、任务栏、网络打印机、在控制面板中用户设置、附件设置(包括计算器、时钟、记事本、超级终端等)应用程序设置。
作者: 朱玛12345678    时间: 2019-1-27 20:03
sairen139 发表于 2019-1-27 14:12
目前来说对于NTuser.dat这个小文件的转移还是mklink这种方法能行,也比较简单。

可以这样重定向,只要注意备份好数据就行。
作者: magicgenius    时间: 2019-1-27 21:45
ge 发表于 2019-1-27 04:44
没有明白!桌面位置在x:%user\administrator\desktop,把它剪切到x:\桌面就改到x:\desktop了吗?

比如桌面,默认位置是C:\Users\Administrator文件夹下的Desktop,显示为“桌面”,把“桌面”剪切并粘贴到D盘Users文件夹下,那么位置就变成D:\Users\Desktop。
作者: sairen139    时间: 2019-1-27 21:52
frg521 发表于 2019-1-27 20:30
...

感谢大神悉心指点,我勉强明白七成。另外想请教一下vhd系统用户名文件夹下的NTuser.dat可以通过修改注册表的方法来转移位置到非系统盘,然后在r驱启动这个vhd的ramos里面也能使用这个非系统盘的NTuser.dat吗?具体应该怎么来操作?
作者: sairen139    时间: 2019-1-27 22:12
frg521 发表于 2019-1-27 22:00
...

好的,我改天实验一下。非常感谢大神!
作者: sairen139    时间: 2019-1-27 22:15
frg521 发表于 2019-1-27 22:00
...

主要我是学文科的,搞ramos也是2018年才开始的。
作者: sairen139    时间: 2019-1-27 23:14
frg521 发表于 2019-1-27 22:18
...

好的,我已经保存了
作者: sairen139    时间: 2019-1-27 23:52

                                            这是 frg521 大神的指点,为防止忘记我在这里贴一份保存一下以免万一:                                                                                                      
                                                                                                                                                  
                                                                                                                                                  
很简单的方法楼上有提到,直接从桌面上级剪切桌面或者我的文档到d盘,注册表就会跟随修改了,如果失败,可以用文档转移的方法来自己提取原理,


新建一个测试用户test登录进入再注销2次,用其他用户复制注册表xx.dat然后登陆进去,我的文档右键属性,指定新位置d盘新路径,所有提示都选择是,完事后注销2次,在复制注册表一份,



最后分别挂载这俩个注册表,用注册表工厂对比差异,可以看见你修改的新路径与就路径变化规则,其他路径参考修改,同样在线修改不行就换另一个用户离线修改。

12小时内该消息失效,如果有需要请即可保存复制文字到手机或者电脑
作者: ge    时间: 2019-1-28 04:43
magicgenius 发表于 2019-1-27 21:45
比如桌面,默认位置是C:%users\Administrator文件夹下的Desktop,显示为“桌面”,把“桌面”剪切并粘贴 ...

就这么简单?那操作过程条件是什么?
作者: magicgenius    时间: 2019-1-28 08:04
ge 发表于 2019-1-28 04:43
就这么简单?那操作过程条件是什么?

上面说过了,先关闭所有程序,尤其是安全软件,以免被占用。
作者: sairen139    时间: 2019-1-28 10:27
sairen139 发表于 2019-1-27 23:52
这是 frg521 大神的指点,为防止忘记我在这里贴一份保存一 ...

Win10系统下编辑其他用户注册表的技巧

2018-09-10
您是否考虑过如何修改Win10中其他用户的注册表设置?好吧,Window用户只能编辑和更改当前登录的用户帐户的注册表设置,例如当用户尝试打开注册表编辑器时,Windows显示注册表配置单元仅显示当前登录的帐户。如果您的系统有多个用户帐户,并且您希望修改另一个用户的注册表,则需要登录到所需的帐户以修改其注册表设置。但是,凭借足够的凭据,可以修改其他用户的注册表设置,而无需每次都登录到每个帐户。

为了编辑其他用户的Windows注册表,必须首先确定该特定用户的注册表配置单元的存储位置。每个用户的信息都存储在HKEY_CURRENT _USER注册表配置单元中,这对每个用户都是唯一的,并且在所有新版本的Window中,一旦用户登录系统,就会加载文件NTUSER.DAT。要修改其他用户的注册表设置,必须首先标识要修改的其他用户的用户目录文件。

在本文中,我们将介绍如何在Win10中修改其他用户注册表。在修改注册表设置之前,建议备份注册表。

在Win10中编辑其他用户的注册表

按照以下步骤加载另一个用户的注册表并更改其他注册表设置。

加载另一个用户的注册表配置单元

要编辑其他用户的注册表,必须首先加载其注册表,该注册表存储在用户目录文件NTUSER.DAT C: Users <用户名> ntuser.dat中。要加载用户的ntuser.dat文件,请使用reg.exe中的命令提示符或Power Shell。

在“开始”菜单中键入命令提示符并以管理员身份运行

键入以下命令,指定用户的密钥,NTUSER.DAT的文件和路径,以加载另一个用户的NTUSER.DAT文件 -

reg load HKU<username> C:Users<username>ntuser.dat

确保将<username>替换为要编辑注册表的用户文件夹的名称。

加载成功完成后,打开“运行”。

键入regedit,然后单击“确定”。

导航到以下路径Computer HKEY_USERS并选择在命令提示符中指定的用户名。

Win10系统下编辑其他用户注册表的技巧.jpg

完成后,用户可以访问所有注册表项并更改其他用户的注册表项,而不会损坏主用户的帐户。
作者: sairen139    时间: 2019-1-28 11:05
sairen139 发表于 2019-1-28 10:27
Win10系统下编辑其他用户注册表的技巧

2018-09-10

原 删除任务栏锁定,任务栏图标的位置,查找可行性文件的方式

这几天改bug,遇到一个删除任务栏快捷图标的问题。本来想着应该挺简单的,估计是在注册表或者C盘的某个位置放置着一个链接,一删除就可以搞定。没想到没那么简单。

C:\Users\LeoLi\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar这个目录下放的就是任务栏中的快捷方式。我之前以为只要把这个地方的lnk删除了,就相当于去掉了任务栏快捷图标,但是结果还是存在,只是你点击的时候系统提示该链接已失效。看来这个方法是行不通的。

网上去搜资料,发现有篇介绍任务栏列表的文章:http://www.codeproject.com/Artic ... ies-in-C-Jump-Lists。这篇文章不是介绍如何删除任务栏锁定,而且介绍了为什么我们在任务栏的图标上右键的时候,会看到很多额外的信息,都是程序自己加上去的。所以可以适当的了解下。然后其实了解了这块内容,删除任务栏锁定就不是什么难题了。代码如下:

bool UnLockWinTaskBarLink( const String runPath )

    HINSTANCE hModule = ::LoadLibrary(_T("Shell32.dll")) ;

    typedef HRESULT (__stdcall* SHCreateItemFromParsingName)(PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv) ;

    SHCreateItemFromParsingName mySHCreateItemFromParsingName = (SHCreateItemFromParsingName)GetProcAddress(hModule, "SHCreateItemFr        omParsingName") ;

    if (mySHCreateItemFromParsingName == NULL)

        CComPtr<IShellItem> spItem ;

        HRESULT hr = mySHCreateItemFromParsingName(

        runPath.c_str(), NULL, IID_PPV_ARGS(&spItem)) ;

            result = false ;

        CComPtr<IStartMenuPinnedList> spStartMenuPinnedList ;

        hr = CoCreateInstance(CLSID_StartMenuPin, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&spStartMenuPinnedList)) ;

            result = false ;

        hr = spStartMenuPinnedList->RemoveFromList(spItem) ;

            result = false ;

    FreeLibrary(hModule) ;

代码的逻辑应该是不用多说,就是利用Shell32.dll的导出函数SHCreateItemFromParsingName,系统对每个任务栏锁定都相应的记录,通过这个程序的可执行文件的位置,我们可以得到一个操作这个程序的“标识”,便于去删除。
其实我多次看到Shell.dll的调用,这是一个很有用的dll,提供了很多操作系统的方法,我网上找了下这方面的总结,比较少,等以后用的多的再继续更新。

现在的问题似乎解决了,但是不要忘记,这个函数需要一个参数,也就是被删除任务栏锁定的可执行文件的位置。这儿可能很多人都说,直接获取当前路径不就完了吗?有现成的API。但问题是,如果要你删除的不是你自己的程序呢,随便给一个程序,让你解除任务栏绑定,你怎么去找到这个程序的exe的位置呢?

我之前的思路是系统肯定知道所有exe的位置,那注册表里有记录,可以直接找了半天没什么收获(其实确实有的,稍后说)。那最直接的办法就是全盘搜索,耗时巨大。一般来说程序的安装目录不会有太多层,我们遍历个7,8层应该都是可以检索出来的。而且还可以优先遍历某几个很有可能的文件夹,这样的设计显然不好。于是就想了个歪点子,我们能找到快捷链接的位置,右击快捷方式不是可以看到目标位置吗?那有没有办法获取到快捷方式的信息呢?答案是:有的。代码如下:

BOOL GetIEQuickLaunchPath(TCHAR *pszIEQueickLaunchPath)

    if (SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &ppidl) == S_OK)

        BOOL flag = SHGetPathFromIDList(ppidl, pszIEQueickLaunchPath);

        ::wcscat_s(pszIEQueickLaunchPath, MAX_PATH, _T("\\Microsoft\\Internet Explorer\\Quick Launch"));

        CoTaskMemFree(ppidl);

bool SearchExePathByLnk(String StrTargetFile, WCHAR* szDesEXEPath)

    ::CoInitialize(NULL); //初始化COM接口  

    IShellLink *psl = NULL;

    HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID *)&psl);

        IPersistFile *ppf;

        hr = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);

        if (SUCCEEDED(hr))

            hr = ppf->Load(StrTargetFile.c_str(), STGM_READ);    //加载文件  

            if (SUCCEEDED(hr))

                WIN32_FIND_DATA wfd;

                psl->GetPath(szDesEXEPath, MAX_PATH, (WIN32_FIND_DATA*)&wfd, SLGP_SHORTPATH);  //获取目标路径  

                return true;

            ppf->Release();

        psl->Release();  //释放对象  

    ::CoUninitialize();   //释放COM接口  

    String StrTargetFile;

    PIDLIST_ABSOLUTE pid;

    TCHAR szDocument[MAX_PATH + 1] = { 0 };

    WCHAR szDesEXEPath[MAX_PATH] = L"";

    GetIEQuickLaunchPath(szDocument);

    StrTargetFile.append(szDocument);

    StrTargetFile.append(_T("\\User Pinned\\TaskBar\\"));

    StrTargetFile.append(_T("酷我音乐.lnk"));
    SearchExePathByLnk(StrTargetFile, szDesEXEPath);

    UnLockWinTaskBarLink(RCString(szDesEXEPath));

    DeleteFile(StrTargetFile.c_str());


上面的代码中,通过lnk查找可执行文件的位置是参考的是另一位博友的博客:点击打开链接 http://blog.csdn.net/yoie01/article/details/8688686 。只要任务栏有锁定,那么%AppData%Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar中就一定有这个快捷方式,那这样的话,问题就解决了。
当然这不是什么好方法,后来我找到了注册表里关于信息的记录。在一个项名为Uninstall的下面,这个项有两个地方,不固定某一个,所以需要都检索一下,具体位置是:

HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall  ;

HKEY_LOCAL_MACHINE, _T("Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall  。

找到这个地方,剩下的就是读取注册表了,这个应该就非常简单了吧?
作者: sairen139    时间: 2019-1-28 11:15
什么是Windows中的NTUSER.DAT文件?

文件资源管理器窗口显示NTUSER.DAT文件

每个用户配置文件中隐藏的是名为NTUSER.DAT的文件。 此文件包含每个用户的设置和首选项,因此您不应删除它,也不应编辑它。 Windows会自动为您加载,更改和保存文件。

NTUSER.DAT包含您的用户配置文件设置

每次更改Windows和已安装程序的外观和行为时,无论是您的桌面背景,显示器分辨率,还是默认的打印机,Windows都需要在下次加载时记住您的首选项。

Windows通过首先将该信息存储到HKEY_CURRENT_USER配置单元中的注册表来实现此目的。 然后,当您注销或关闭时,Windows会将该信息保存到NTUSER.DAT文件中。 下次登录时,Windows会将NTUSER.DAT加载到内存,并且所有首选项都会再次加载到注册表。 此过程允许您对用户配置文件特有的个人设置,例如您选择的桌面背景。

名称NTUSER.DAT是Windows NT的延迟,最初是在Windows 3.1中引入的。 Microsoft将DAT扩展名与任何包含数据的文件一起使用。

每个用户都有一个NTUSER.DAT文件

Windows并不总是完全支持用户配置文件。 在早期版本中,当您启动Windows时,计算机的每个用户都会看到相同的桌面,文件和程序。 现在Windows更好地支持同一台机器上的多个用户,它通过在每个用户的配置文件中放置一个NTUSER.DAT文件来实现。 您可以通过打开文件资源管理器并浏览到:

C:\用户\ *。* YourUserName

文件资源管理器窗口显示用户文件夹

或输入:

  %用户资料%
进入File Explorer的地址栏,然后按Enter键。

如果您还没有看到NTUSER.DAT,请不要担心。 Microsoft不打算您编辑或删除此文件,因此它们会隐藏它。 您可以打开“ 显示隐藏文件”选项以使文件可见。

你可能会注意到除了NTUSER.DAT文件之外,还有一个或多个ntuser.dat.LOG文件。 每次进行更改时,Windows都会将新的首选项保存到NTUSER.DAT文件中。 但首先,它会复制并将其重命名为ntuser.dat.LOG(加上递增的数字)以备份以前的设置。 即使微软知道你应该总是备份你的设置和文件 。

不要删除NTUSER.DAT文件

您不应该删除您的NTUSER.DAT文件。 由于Windows依赖于它来加载您的设置和首选项,因此删除它会破坏您的用户配置文件。 当您下次登录时,您会看到Windows无法登录您的帐户的提示。

错误消息指出您无法登录自己的帐户

尽管建议退出然后重新登录可能会解决问题,但您会再次看到相同的消息。 如果您尝试创建一个简单的NTUSER.DAT文件来替换丢失的实例,您将在首次设置对话框中遇到循环,Windows将永远不会完成登录。

循环动画GIF显示“嗨,我们正在为你准备好消息”一遍又一遍

NTUSER.DAT文件通常不是一个大文件,在我们的一台新计算机上介于3兆字节之间,在我们使用了几年的PC上介于17兆字节之间。 删除它通常不会重获太多空间,但结果可能是灾难性的。 如果不需要用户配置文件,最好通过Windows 删除用户帐户 。

您可能也不应该编辑它。 有些管理员可能会这样做以对许多用户进行快速更改,但如果您不小心,则可能会导致难以修复的问题。

最好的办法是使用regedit对注册表进行更改。 在注册表中工作也应该谨慎行事,但很有可能找到一份指南,指导您完成必要的步骤。 在您下次注销或关闭时编辑注册表后,您的新设置将保存到NTUSER.DAT文件中。
作者: sairen139    时间: 2019-1-28 11:42
朱玛12345678 发表于 2019-1-27 12:03
不建议使用链接的方式重定向目录,WIN10 v1809刚发布的时候就是因为使用了这个才导致的用户数据丢失。
...

https://blog.csdn.net/cfqcfqcfqcfqcfq/article/details/79555034
作者: ge    时间: 2019-1-28 13:03
magicgenius 发表于 2019-1-28 08:04
上面说过了,先关闭所有程序,尤其是安全软件,以免被占用。

哦!就是在系统启动完成就可以?
作者: sairen139    时间: 2019-1-30 20:05
本帖最后由 sairen139 于 2019-1-30 20:09 编辑

修改注册表更换桌面壁纸的方法:

https://jingyan.baidu.com/article/046a7b3e9ea0f8f9c27fa9a7.html

按下win+R快捷键,打开运行对话框,输入regedit点击确定,打开注册表编辑器。

2/6
在注册表编辑器中依次展开 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\
并且在该注册表项下建一个名为 System 的项(如果在Policies下已经存在System项,则不需要进行此步)

3/6
在 System 项下右键新建两个“字符串值“,名为 Wallpaper 和 WallpaperStyle

4/6
右键单击Wallpaper打开”编辑字符串“对话框,在”数值数据“栏输入桌面壁纸图片的路径,如图所示,然后点击确定即可。

5/6
也可以通过此方法修改WallpaperStyle中”数值数据“的值,WallpaperStyle 有三个可以定义的值:
0=居中 ,1=平铺 ,2=拉伸,

6/6
修改完成后重启电脑就能看到新换的桌面壁纸了!

注意事项
如果 Wallpaper 字串符值为空,则桌面背景固定为添加该字串符值前所设的图片,且在个性化设置选项卡中的“背景”框中呈不可操作状态。
若要恢复初始状态,删除Wallpaper和WallpaperStyle即可,或者直接删除HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\下的System项即可!
作者: sairen139    时间: 2019-1-31 11:37
sairen139 发表于 2019-1-28 11:05
原 删除任务栏锁定,任务栏图标的位置,查找可行性文件的方式

这几天改bug,遇到一个删除任务栏快捷图 ...

快速让你解决Win10注册表解决“固定到任务栏”的应用程序快捷方式

时间:2016-06-03     来源:http://www.Ghost123.com/     游览量: 2320 次
从Windows7开始,微软引入了把常用的应用程序固定到任务栏这种设计,到了Windows10中则更为灵活方便,为我们的日常操作带来了极大的方便。例如把常用的IE浏览器、记事本、截图软件固定到了任务栏中。
还可以拓展与大家分享了《把“控制面板、这台电脑、回收站、网络、用户文件夹”固定到Win10任务栏》和《把文件夹固定到Win10任务栏》的技巧。可问题是,一旦重装系统之后,这些固定到任务栏的快捷方式会全部消失,我们还要重新一个一个地设置“固定到任务栏”。那么今天Microsoft酋长就与你分享一下可以备份/还原这些固定到任务栏的应用程序快捷方式的方法。


Win10注册表解决“固定到任务栏”的应用程序快捷方式操作如下:
1:按 Win + R 组合快捷键调出“运行”对话框,输入以下路径:
%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
2:确定,打开“固定到任务栏”的快捷方式所在的文件夹。
3:把这些快捷方式复制到非系统盘的某个位置备份。
4:备份“固定到任务栏”的注册表信息
5:同时我们还要备份一下相应的注册表信息。
6:首先打开Win10任务管理器备用,然后打开注册表编辑器,定位至(快速定位到注册表编辑器某一项的技巧)
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband
然后在Taskband项上点击右键,选择“导出”。
7:把Taskband项的注册信息导出为reg格式的注册表备份文件。建议把reg文件和刚才的8:备份的快捷方式放到同一目录下,以方便之后恢复。
9:还原“固定到任务栏”信息。
重装系统之后,我们首先把之前备份的快捷方式重新复制回原来的路径。然后再把备份的注册表信息重新导入注册表即可
作者: sairen139    时间: 2019-2-9 23:24
1、win7桌面背景保存位置:C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Themes    可以在这里找到当前桌面背景图片的保存位置。  2、系统自带的壁纸在C:\WINDOWS\Web\Wallpaper文件夹下。    这里存储的是系统自带的壁纸,可以根据个人需要将下载的壁纸放入这个文件夹。  然后返回Win7“桌面背景”界面,这里会显示所有的壁纸。
作者: cii09    时间: 2023-6-8 14:15
很早以前在win7里试过,和程序相关的强制做硬链接会有很多问题,只改外壳会好一点.
pin ,sendto,jumplist,startmenu,quicklaunch这些
作者: cntvic    时间: 2023-12-22 21:10
感谢分享




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3