using System; using Microsoft.Win32; namespace RegFileTypes { /// /// Summary description for Class1. /// class RegFileTypes { public RegFileTypes() { } public void Run() { RegistryKey root = Registry.ClassesRoot; PrintFileTypes( root ); } public void PrintFileTypes( RegistryKey root ) { if( root == null ) return; string[] subkeys = root.GetSubKeyNames(); foreach( string subname in subkeys ) { // For each key, if it starts with . then it's a file type. // Otherwise, ignore it. if( subname == null ) continue; if( !subname.StartsWith(".") ) continue; // Open the key and find its default value. // If no default, skip this key, since it effectively // doesn't have an assigned type. RegistryKey subkey = root.OpenSubKey( subname ); if( subkey == null ) continue; string typename = (string) subkey.GetValue( "" ); if( typename == null ) continue; // No default value // If it has a value "Content Type", that's the mime type. string mimetype = null; mimetype = (string) subkey.GetValue( "Content Type" ); // Find the descriptor type. RegistryKey typekey = root.OpenSubKey( typename ); if( typekey == null ) continue; string displayName = (string) typekey.GetValue( "" ); // Find the default icon. RegistryKey iconkey = typekey.OpenSubKey( "DefaultIcon" ); if( iconkey == null ) continue; string iconname = (string) iconkey.GetValue( "" ); // Split the icon descriptor to get the path and the resource ID. char[] separators = new char[1]; separators[0] = ','; string[] iconparts = null; if( iconname != null ) iconparts = iconname.Split( separators ); string iconfile = ""; string iconres = ""; if( iconparts != null && iconparts.Length <= 2 ) { iconfile = iconparts[0]; if( iconparts.Length == 2 ) iconres = iconparts[1]; } Console.WriteLine( "Extension: "+subname ); Console.WriteLine( " Type: "+typename ); Console.WriteLine( " MimeType: "+mimetype ); Console.WriteLine( " DisplayName: "+displayName ); Console.WriteLine( " IconDesc: "+iconname ); // Needs checking. //Console.WriteLine( " Icon: "+iconfile ); //Console.WriteLine( " IconResource: "+iconres ); Console.WriteLine( "" ); } } /// /// The main entry point for the application. /// [STAThread] static void Main(string[] args) { try { RegFileTypes types = new RegFileTypes(); types.Run(); } catch( Exception e ) { Console.WriteLine( ""+e.GetType().Name+": "+e.Message ); Console.WriteLine( e.StackTrace ); } } } }