Die Funktion ShellFindExecutable
ermöglicht das Programm zu finden, die mit einem bestimmten Dateityp verknüpft ist:Abrufen der standardmäßigen zugeordneten Dateitypen einer Anwendung?
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;
Zum Beispiel:
DefProgram := ShellFindExecutable('R:\test.txt', '');
// DefProgram: C:\Program Files (x86)\Notepad++\notepad++.exe
Aber wie kann ich den Dateityp (n)/Erweiterung finden (s) für welche ein bestimmtes existierendes Programm die standardmäßig zugeordnete Anwendung ist?
Delphi 10.1 Berlin Windows 7 x64
Iterieren Sie durch jede registrierte Erweiterung und prüfen Sie, ob die zugehörige Anwendung Ihr Ziel ist. Auch das Jonglieren mit Space-Charakteren sieht völlig falsch aus. –
"Iterate durch jede registrierte Erweiterung" scheint logisch. Ich habe mich nur gefragt, ob es eine explizite Funktion dafür gibt. - Welche Alternative würdest du für "Jonglieren mit Space Characters" vorschlagen? – user1580348
Ich glaube nicht, dass FindExecutable das tut, was Sie behaupten. Wie auch immer, für eine wichtige Aufgabe wie diese würde ich erwarten, dass IQueryAssociations der effizienteste Mechanismus sein wird. –