在ShellLink中抑制Windows对话框解决ShellLink中缺少的目标?

时间:2015-03-16 12:02:39

标签: shell delphi delphi-xe7

在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错误对话框,告知链接目标已被删除等。这是德语对话框:

enter image description here

那我怎么能压制这个对话框呢?因为程序需要用另一个替换缺少的链接目标,而不是Windows。

Windows 7 x64 SP1

编辑:

BTW:当我点击Restore按钮(上面对话框屏幕截图中最左边的按钮)时,丢失的目标将从废纸篓中恢复 - 但成功恢复后对话框不会关闭或恢复后至少禁用“还原”按钮。微软糟糕的UI设计示例。

1 个答案:

答案 0 :(得分:2)

请尝试以下代码:

if (JclShell.ShellLinkResolve(AShellLinkFile, ThisShellLink, 
  SLR_ANY_MATCH or SLR_NO_UI) = S_OK) then