函数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
答案 0 :(得分:1)
我不相信有专门的API函数可以做到这一点。您将需要遍历每个已注册的扩展,例如通过枚举HKCR中的键,并检查哪个可执行文件与open动词相关联。
而不是使用FindAssociation
我怀疑IQueryAssociations
将更有效和更强大。
此外,您声称FindAssociation
用空值替换空格的说法根本不正确。您可以使用if
替换Result := Buffer
语句的正文。