现在有一个文件,可能要用不同的方式打开,怎样获取本地机上所有的文件打开方式。
就像我们平时打开文件时右击时选择打开方式选择其中一个来打开文件
忘高手赐教

解决方案 »

  1.   

    注册表...总之很烦.除了文件类型本身还要查*的.
    LZ去翻下MSDN的Shell编程里有讲文件关联的.大概
    就是查OpenWithList下的键.
      

  2.   


    涉及windows系统文件调用。注册表相关键值的遍历。以及API调用。。
      

  3.   

    查看对应后缀的注册表信息HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\OpenWithList
    再结合HKEY_CLASSES_ROOT\Applications获得相关exe程序的信息
      

  4.   

    System.Dialogtistic.Process.Start("你的文件")
    它自己会去调用系统的打开功能,如果没有默认关联,它也会弹出框让你去选择一个程序来打开。
      

  5.   

    这个不是windows自带的功能吗?
      

  6.   

    这个我知道,我现在就是想把windows自带的这个文件打开方式对话框调出来,然后选择不同的打开方式来打开文件,望哪位高手不吝赐教!万分感谢!
      

  7.   

    RegistryKey 类 :表示 Windows 注册表中的项级节点。此类是注册表封装。
    注册表充当计算机上操作系统和应用程序的中央信息储存库。注册表根据存储在其中的元素的逻辑顺序,以分层形式组织(有关该层次结构中的基级项,请参见 Registry)。在注册表中存储信息时,请根据存储的信息类型选择适当的位置。一定要避免损坏由其他应用程序创建的信息,原因是这样会导致那些应用程序出现意外的行为,并且还会对您自己的应用程序带来不利影响。注册表项是注册表中的基本组织单位,好比是 Windows 资源管理器中的文件夹。每个具体的注册表项都可以有子项,就像文件夹下可以有子文件夹一样。只要用户具有相应的权限,且注册表项不是基项或基项的下一级项,就可以删除该注册表项。每个注册表项也可带有与其相关联的多个值(一个值就好比是一个文件),它们用于存储信息,例如,有关计算机上安装的应用程序的信息。每个值存储特定的信息,可按需要对其进行检索或更新。例如,可以为您的公司创建一个 RegistryKey(在项 HKEY_LOCAL_MACHINE\Software 下),然后为您的公司创建的每个应用程序创建一个子项。每个子项保存特定于该应用程序的信息,如颜色设置、屏幕位置和大小或者可识别的文件扩展名。
      

  8.   

    下面的代码示例演示如何在 HKEY_CURRENT_USER 下创建一个子项,处理相应的内容,然后删除该子项。using System;
    using System.Security.Permissions;
    using Microsoft.Win32;[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum,
        ViewAndModify = "HKEY_CURRENT_USER")]class RegKey
    {
        static void Main()
        {
            // Create a subkey named Test9999 under HKEY_CURRENT_USER.
            RegistryKey test9999 = 
                Registry.CurrentUser.CreateSubKey("Test9999");
            // Create two subkeys under HKEY_CURRENT_USER\Test9999. The
            // keys are disposed when execution exits the using statement.
            using(RegistryKey 
                testName = test9999.CreateSubKey("TestName"),
                testSettings = test9999.CreateSubKey("TestSettings"))
            {
                // Create data for the TestSettings subkey.
                testSettings.SetValue("Language", "French");
                testSettings.SetValue("Level", "Intermediate");
                testSettings.SetValue("ID", 123);
            }        // Print the information from the Test9999 subkey.
            Console.WriteLine("There are {0} subkeys under {1}.", 
                test9999.SubKeyCount.ToString(), test9999.Name);
            foreach(string subKeyName in test9999.GetSubKeyNames())
            {
                using(RegistryKey 
                    tempKey = test9999.OpenSubKey(subKeyName))
                {
                    Console.WriteLine("\nThere are {0} values for {1}.", 
                        tempKey.ValueCount.ToString(), tempKey.Name);
                    foreach(string valueName in tempKey.GetValueNames())
                    {
                        Console.WriteLine("{0,-8}: {1}", valueName, 
                            tempKey.GetValue(valueName).ToString());
                    }
                }
            }        using(RegistryKey 
                testSettings = test9999.OpenSubKey("TestSettings", true))
            {
                // Delete the ID value.
                testSettings.DeleteValue("id");            // Verify the deletion.
                Console.WriteLine((string)testSettings.GetValue(
                    "id", "ID not found."));
            }        // Delete or close the new subkey.
            Console.Write("\nDelete newly created registry key? (Y/N) ");
            if(Char.ToUpper(Convert.ToChar(Console.Read())) == 'Y')
            {
                Registry.CurrentUser.DeleteSubKeyTree("Test9999");
                Console.WriteLine("\nRegistry key {0} deleted.", 
                    test9999.Name);
            }
            else
            {
                Console.WriteLine("\nRegistry key {0} closed.", 
                    test9999.ToString());
                test9999.Close();
            }
        }
    }
    读注册表、写注册表、删除注册表的数据的用法都有了。
      

  9.   

    原来你只是想打开选择打开程序的那个系统对话框啊?
    那个要调用一条Shell的函数SHOpenWithDialog
      

  10.   

    这个是 典型的 shell 编程 建议楼主去看这方面的知识
      

  11.   

    回复18楼
    我不仅想打开该系统的对话框,我还想当选择哪个打开程序时就能把我的要打开的文件用该程序打开,望高手指点,小弟没有接触过SHELL方面的编程,望给予点详细的介绍,或该看什么书,万分感激!
      

  12.   

    先搜索HKEY_CLASS_ROOT下的所有以.开头的键的默认值,再在HKEY_CLASS_ROOT下查找
    比如.bat文件,默认值为batfile,在HKEY_CLASS_ROOT\batfile\shell\open\command下就是这种类型文件的打开方式