Получение имени (пути) файла который открывает данные документы - C#
Формулировка задачи:
Допустим я беру текстовый документ с расширением .txt и он имеет определенную иконку (блокнота по дефолту)
Какая иконка зависит от того - какое приложение выбрано по стандарту для открытия данного типа файлов.
В общем. Как узнать что это за приложение средствами C#.
Т.Е на входе есть например C:/..../read.txt
И получить должен я %windir%/system32/notepad.exe
Решение задачи: «Получение имени (пути) файла который открывает данные документы»
textual
Листинг программы
[Flags] private enum ASSOCF { NONE = 0x00000000, INIT_NOREMAPCLSID = 0x00000001, INIT_BYEXENAME = 0x00000002, OPEN_BYEXENAME = 0x00000002, INIT_DEFAULTTOSTAR = 0x00000004, INIT_DEFAULTTOFOLDER = 0x00000008, NOUSERSETTINGS = 0x00000010, NOTRUNCATE = 0x00000020, VERIFY = 0x00000040, REMAPRUNDLL = 0x00000080, NOFIXUPS = 0x00000100, IGNOREBASECLASS = 0x00000200, INIT_IGNOREUNKNOWN = 0x00000400, INIT_FIXED_PROGID = 0x00000800, IS_PROTOCOL = 0x00001000 } private enum ASSOCSTR { COMMAND = 1, EXECUTABLE, FRIENDLYDOCNAME, FRIENDLYAPPNAME, NOOPEN, SHELLNEWVALUE, DDECOMMAND, DDEIFEXEC, DDEAPPLICATION, DDETOPIC, INFOTIP, QUICKTIP, TILEINFO, CONTENTTYPE, DEFAULTICON, SHELLEXTENSION, DROPTARGET, DELEGATEEXECUTE, SUPPORTED_URI_PROTOCOLS, MAX } [DllImport( "Shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode )] private static extern int AssocQueryString ( ASSOCF flags, ASSOCSTR str, string pszAssoc, string pszExtra, StringBuilder pszOut, ref int pcchOut ); static void Main ( ) { var buff = new StringBuilder( 255 ); var length = buff.Capacity; if ( 0 != AssocQueryString( ASSOCF.NONE, ASSOCSTR.EXECUTABLE, ".rtf", "open", buff, ref length ) ) { Console.WriteLine( "Error: " + Marshal.GetLastWin32Error() ); return; } Console.WriteLine( buff.ToString() ); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д