在Delphi XE7中,我想使用以下代码替换shell链接文件(.lnk)的链接目标:
uses
JclShell;
...
procedure ShellLinkReplaceLinkTarget(const AShellLinkFile, ANewTarget: string);
var
ThisShellLink: JclShell.TShellLink;
begin
if (JclShell.ShellLinkResolve(AShellLinkFile, ThisShellLink) = S_OK) then // Windows error dialog
begin
ThisShellLink.Target := ANewTarget;
JclShell.ShellLinkCreate(ThisShellLink, AShellLinkFile);
end
else CodeSite.Send('ShellLinkResolve Failed!');
end;
但是,当链接目标不再存在时,则在ShellLinkResolve
出现众所周知的Link problem
Windows错误对话框,告知链接目标已被删除等。这是德语对话框:
那我怎么能压制这个对话框呢?因为程序需要用另一个替换缺少的链接目标,而不是Windows。
Windows 7 x64 SP1
编辑:
BTW:当我点击Restore
按钮(上面对话框屏幕截图中最左边的按钮)时,丢失的目标将从废纸篓中恢复 - 但成功恢复后对话框不会关闭或恢复后至少禁用“还原”按钮。微软糟糕的UI设计示例。
答案 0 :(得分:2)
请尝试以下代码:
if (JclShell.ShellLinkResolve(AShellLinkFile, ThisShellLink,
SLR_ANY_MATCH or SLR_NO_UI) = S_OK) then