Hola!
No se si ya pudiste resolver el problema, pero en Delphi podés usar la siguiente función:
Código Delphi
[-]function MyShellFindExecutable(const aFileName: string): string;
var
Buffer: array[0..MAX_PATH] of Char;
begin
Result := '';
FillChar(Buffer, SizeOf(Buffer), #0);
if (SHELLAPI.FindExecutable(PChar(aFileName), nil, Buffer) > 32) then
Result := Buffer;
end;
Si le pasas un nombre de archivo válido, te devuelve el archivo asociado. Si buscás por un .DOC y lo tenés ascociado a LibreOffice, te va a devolver la ubicación del exe que abre los .DOC.
Hay que agregar ShellAPI a la lista de unidades del uses.
¡Espero te sirva!