[FONT=Courier New]HINSTANCE FindExecutable([/FONT]
[FONT=Courier New] LPCTSTR lpFile, // путь к файлу
LPCTSTR lpDirectory, // директория по умолчанию
LPTSTR lpResult // строковый буффер для возвращаемой строки
);[/FONT]
ассоциации и расширения файлов
Как в шарпе узнать с каким расширением файлов какая программа просмоторщик ассоциирована?
С помощью "чистого" .NET Framework никак, так как среда должна быть независимой от аппаратной и (частично) программной платформы. Ведь в Linux'е нет ассоциаций, а .NET-приложения там запускаются (при наличии Mono). Можно узнать то что ты хочешь при помощи WinAPI. Нам нужна функция FindExecutable из shell32.dll. Её прототип выглядит так:
Код:
Переписываем её на C#:
Код:
[SIZE=2][FONT=Courier New][[/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]DllImport[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#800000]"shell32.dll"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New])][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]static[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#0000ff]extern[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#008080]IntPtr[/COLOR][/SIZE][SIZE=2] FindExecutable([/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2] lpFile, [/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] lpDirectory,[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]out[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#008080]StringBuilder[/COLOR][/SIZE][SIZE=2] lpResult);
[/SIZE][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]static[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#0000ff]extern[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#008080]IntPtr[/COLOR][/SIZE][SIZE=2] FindExecutable([/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2] lpFile, [/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] lpDirectory,[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]out[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#008080]StringBuilder[/COLOR][/SIZE][SIZE=2] lpResult);
[/SIZE][/FONT]
Пример её вызова:
Код:
[SIZE=2][COLOR=#008080][FONT=Courier New]StringBuilder[/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2] targetExe = [/SIZE][SIZE=2][COLOR=#0000ff]new[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#008080]StringBuilder[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]();[/FONT]
[FONT=Courier New]FindExecutable([/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#800000]"D:\\Icons\\Setup.bmp"[/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#800000]"D:\\Icons\\"[/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff]out[/COLOR][/SIZE][SIZE=2] targetExe);
[/SIZE][/FONT]
[FONT=Courier New]FindExecutable([/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#800000]"D:\\Icons\\Setup.bmp"[/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#800000]"D:\\Icons\\"[/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff]out[/COLOR][/SIZE][SIZE=2] targetExe);
[/SIZE][/FONT]