Как найти имя ярлыка по имени программы?

Есть ли способ найти имя ярлыка (присутствующего на рабочем столе) по имени связанной программы?

Ex:

Имя файла:

  • C:\Program Files\Mozilla Firefox\firefox.exe

и в результате:

  • C:\Users\Public\Desktop\Firefox.lnk

Я нашел что-то близкое к этому, но делается наоборот (возвращает ассоциированное имя программы по имени ярлыка).


person Davison    schedule 17.07.2020    source источник


Ответы (1)


Приложение ничего не знает о ярлыках, созданных для указания на него, поэтому это невозможно. Вам придется перебирать каждый файл в папке пользователя на рабочем столе в поисках файлов ярлыков, открывать их с помощью IShellLink и смотреть, запустили ли они приложение, которое вы ищете. Вот пример того, как это сделать. Вам нужно будет добавить ShellAPI к пункту uses. FileName — это полное имя файла ярлыка.

function GetLinkPath(const FileName: WideString): String;
var
  ShellLink: IShellLink;
  Path: array[0..MAX_PATH] of Char;
begin
  Result := '';
  ShellLink := CreateComObject(CLSID_ShellLink) as IShellLink;
  if (ShellLink as IPersistFile).Load(PWideChar(FileName), STGM_READ) = 0 then
  begin
    if ShellLink.GetPath(Path, MAX_PATH, nil, SLGP_SHORTPATH) = 0 then
      Result := Path;
  end;
end;
person Ken White    schedule 17.07.2020
comment
open them, я не понял. Как это? ты хотел сказать: казнить их? Дайте лучшее объяснение об этом, пожалуйста. - person Davison; 18.07.2020