检索应用程序的默认关联文件类型?

问题描述 投票:1回答:1

函数ShellFindExecutable允许查找与特定文件类型相关联的程序:

function ShellFindExecutable(const FileName, DefaultDir: string): string;
var
  Res: HINST;
  Buffer: array [0..MAX_PATH-1] of Char;
  I: Integer;
begin
  ResetMemory(Buffer, SizeOf(Buffer));
  Res := FindExecutable(PChar(FileName), PCharOrNil(DefaultDir), Buffer);
  if Res > 32 then
  begin
    // FindExecutable replaces #32 with #0
    for I := Low(Buffer) to High(Buffer) - 1 do
      if Buffer[I] = #0 then
        Buffer[I] := #32;
    Buffer[High(Buffer)] := #0;
    Result := Trim(Buffer);
  end
  else
    Result := '';
end;

例如:

DefProgram := ShellFindExecutable('R:\test.txt', '');
// DefProgram: C:\Program Files (x86)\Notepad++\notepad++.exe

但是,如何找到特定现有程序是默认关联应用程序的文件类型/扩展名?

Delphi 10.1柏林Windows 7 x64

shell delphi delphi-10.1-berlin
1个回答
1
投票

我不相信有专门的API函数来做到这一点。您将需要遍历每个已注册的扩展,例如通过枚举HKCR中的键,并检查哪个可执行文件与open动词相关联。

而不是使用FindAssociation我怀疑IQueryAssociations将更有效和强大。

此外,你声称FindAssociation用空值替换空格是不正确的。你可以用if替换Result := Buffer语句的正文。

© www.soinside.com 2019 - 2024. All rights reserved.