使用扩展 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
在您背后填写尽可能多的信息。
我想使用目标路径在 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
在您背后填写尽可能多的信息。