如何通过程序名称查找快捷方式名称?
How find shortcut name by program name?
有什么方法可以通过关联的程序名称找到快捷方式的名称(存在于桌面上)?
例如:
文件名:
- C:\Program Files\Mozilla Firefox\firefox.exe
结果:
- C:\Users\Public\Desktop\Firefox.lnk
我找到了something near to this,但是是相反的方式(returns通过快捷方式名称关联的程序名称)。
应用程序不知道为指向它而创建的快捷方式,因此这是不可能的。您必须遍历用户桌面文件夹中的每个文件以查找快捷方式文件,使用 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;
有什么方法可以通过关联的程序名称找到快捷方式的名称(存在于桌面上)?
例如:
文件名:
- C:\Program Files\Mozilla Firefox\firefox.exe
结果:
- C:\Users\Public\Desktop\Firefox.lnk
我找到了something near to this,但是是相反的方式(returns通过快捷方式名称关联的程序名称)。
应用程序不知道为指向它而创建的快捷方式,因此这是不可能的。您必须遍历用户桌面文件夹中的每个文件以查找快捷方式文件,使用 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;