使用扩展 shell 路径在 Windows 10 中创建通用快捷方式

Create generic shortcuts in Windows 10 using extended shell path

我想使用目标路径在 Windows10 中创建通用快捷方式 shell 路径的扩展,类似于

%windir%\explorer.exe shell:AppData ..\Local\Temp

%windir%\explorer.exe shell:AppData 自己工作,带我去漫游用户文件。

我可以用

%windir%\explorer.exe shell:UsersFilesFolder

这会带我到 %UserProfile% 并从那里追加(如果我能找到方法的话)只有在可能的情况下才能更上一层楼才方便。

我无法锻炼

使它起作用的语法是什么?

首先,%Temp% 可能与 %LOCALAPPDATA%\Temp 不同!

创建 %Temp% 的完美快捷方式的方法并不那么容易,理想情况下 .lnk 应该只包含 EXP_SZ_LINK:EXP_SZ_LINK_SIG 块和 %Temp%细绳。您必须手动删除 ItemIdList 块才能获得这样的 .lnk 文件。 %Temp% 更加复杂,因为它没有可以与 shell: 协议一起使用的特殊文件夹规范名称。

我不相信 shell:协议支持 .. 也不支持 . 路径组件。

shell:AppData ..\Local 也是错误的,因为本地 appdata 文件夹可能在其他地方(< Windows Vista 使用了不同的名称),更好的命令是 %windir%\explorer.exe "shell:LocalAppData"(然后 %windir%\explorer.exe "shell:Local AppData\Temp") 但所有这些命令都有其他问题。

首先,Explorer 可能不是用户 shell 并且您有不遵守用户偏好的风险。

另一个问题是 .lnk 文件包含其目标的属性,因为 link 实际上指向一个 .exe 文件,所以您的 .lnk 文件不会设置 FILE_ATTRIBUTE_DIRECTORY 位它的目标属性和 shell 不会理解它指向一个文件夹。指向文件夹的 .lnk 有时会在浏览 shell 时在同一个 window 中打开,而不是打开新的文件浏览器 window.

.lnk 二进制格式是 documented and by breaking the rules a little bit I have been able to create a link that points to a file/folder inside a special shell folder by combining a EXP_SPECIAL_FOLDER 带有操纵 ItemIdList 的块,但无论出于何种原因,此技巧不适用于更深的路径。

一个 EXP_SPECIAL_FOLDER 块和一个空的 ItemIdList 是创建特殊文件夹快捷方式的唯一方法,它保证在所有系统上都能工作,但你必须手动创建它,IShellLink 实现添加如果您尝试在另一个系统上使用 link,可能会破坏系统特定的块。

.lnk 格式自 Windows 95 以来没有太大变化,并且没有简单的方法来创建与特殊文件夹相关的快捷方式,这些快捷方式在复制到其他系统时也可以使用。 .lnk 中的相对路径字符串是相对于 .lnk 文件本身的,在这种情况下没有帮助。

我建议您只需在 installer/application 的目标系统上创建 .lnk,然后让 IShellLink 在您背后填写尽可能多的信息。