По указанному расширению, получаем путь к ассоциированному с ним приложению.
1 2 3 4 5 6 7 8 9 10 11 |
Uses Winapi.ShLwApi; ... var fileExt, assocExePath: WideString; begin fileExt:= '.html'; assocExePath:= shellFindExeByExt(fileExt); ShowMessage(assocExePath); end; |
Параметры
fileExt - расширение файла
Результат
Путь к ассоциированному приложению или пустая строка в случае неудачи.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
function shellFindExeByExt(fileExt: string): string; const ASSOCF_INIT_NOREMAPCLSID = $00000001; ASSOCF_INIT_BYEXENAME = $00000002; ASSOCF_OPEN_BYEXENAME = $00000002; ASSOCF_INIT_DEFAULTTOSTAR = $00000004; ASSOCF_INIT_DEFAULTTOFOLDER = $00000008; ASSOCF_NOUSERSETTINGS = $00000010; ASSOCF_NOTRUNCATE = $00000020; ASSOCF_VERIFY = $00000040; ASSOCF_REMAPRUNDLL = $00000080; ASSOCF_NOFIXUPS = $00000100; ASSOCF_IGNOREBASECLASS = $00000200; var Buffer: array [0..1024] of Char; BufSize: DWord; Res: HResult; begin BufSize := Length(Buffer); Res := AssocQueryString(ASSOCF_REMAPRUNDLL or ASSOCF_NOTRUNCATE, ASSOCSTR_EXECUTABLE, PChar(fileExt), nil, Buffer, @BufSize); If Res = S_OK then Result:= Buffer else Result:= ''; end; |