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

时间:2017-12-30 12:49:28

标签: shell delphi delphi-10.1-berlin

函数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

1 个答案:

答案 0 :(得分:1)

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

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

此外,您声称FindAssociation用空值替换空格的说法根本不正确。您可以使用if替换Result := Buffer语句的正文。