【发布时间】:2011-02-11 14:22:17
【问题描述】:
我正在尝试创建一个包含长参数字符串 (> MAX_PATH) 的快捷方式(在桌面上)。
MSDN documentation 明确指出,对于 Unicode 字符串,该字符串可以比 MAX_PATH 长。
生成的快捷方式恰好在 MAX_PATH 字符之后被剪切(即Path + Arguments)。
我的实现有问题还是这是 Windows 的限制?
procedure CreateShortcut(APath: WideString;
AWorkingDirectory: WideString; AArguments: WideString; ADescription: WideString;
ALinkFileName: WideString);
var
IObject : IUnknown;
ISLink : IShellLinkW;
IPFile : IPersistFile;
begin
IObject := CreateComObject(CLSID_ShellLink);
ISLink := IObject as IShellLinkW;
ISLink.SetPath( PWideChar(APath));
ISLink.SetWorkingDirectory(PWideChar(AWorkingDirectory));
ISLink.SetArguments( PWideChar(AArguments));
ISLink.SetDescription( PWideChar(ADescription));
IPFile := IObject as IPersistFile;
IPFile.Save(PWideChar(ALinkFileName), False);
end;
PS:操作系统是 Windows XP(及以上)。
【问题讨论】:
-
您是否尝试过使用 \\?\ 前缀来启用长文件名?例如,\\?\D:\very\long\path - 参见msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx
-
@David:是的,这会导致 Explorer 挂起几秒钟,但限制仍然存在。
-
是什么被截断了参数、路径或工作目录?我感觉你需要使用 SetIDList 而不是 SetPath。
-
@David:当你组合路径和参数时得到的字符串(在资源管理器对话框中被称为“目标”)被削减到 260 个字符。
-
我认为这是 shell 对话框中的一个限制,而不是支持它的 shell 链接中的底层内容。执行快捷方式时会发生什么?它的行为是否正确?
标签: windows delphi delphi-2007 shortcut maxlength