Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C获取与文件扩展名关联的程序名?_C# - Fatal编程技术网

C# 如何使用C获取与文件扩展名关联的程序名?

C# 如何使用C获取与文件扩展名关联的程序名?,c#,C#,在不使用Microsoft.Win32.RegistryKey的情况下,如何使用C获取与文件扩展名关联的程序名?使用WinApi函数 创建枚举和 创建一个助手方法 static string AssocQueryString(AssocStr association, string extension) { const int S_OK = 0; const int S_FALSE = 1; uint length = 0; uint ret = Ass

在不使用Microsoft.Win32.RegistryKey的情况下,如何使用C获取与文件扩展名关联的程序名?

使用WinApi函数

创建枚举和

创建一个助手方法

static string AssocQueryString(AssocStr association, string extension) {
     const int S_OK = 0;
     const int S_FALSE = 1;

     uint length = 0;
     uint ret = AssocQueryString(AssocF.ASSOCF_NONE, association, extension, null, null, ref length);
     if (ret != S_FALSE) {
         throw new InvalidOperationException("Could not determine associated string");
     }

     var sb = new StringBuilder((int)length);
     ret = AssocQueryString(AssocF.ASSOCF_NONE, association, extension, null, sb, ref length);
     if (ret != S_OK) {
        throw new InvalidOperationException("Could not determine associated string");
     }

     return sb.ToString();
}

你可以用这种方式

 static void Main(string[] args) {
           Console.WriteLine(AssocQueryString(AssocStr.ASSOCSTR_FRIENDLYAPPNAME, ".pdf"));
            Console.Read();
 }

您建议的方法在内部查询注册表,因此这不是真正的答案。简单的回答是:它不会起作用。尽管我同意@HimBromBeere;我很喜欢这个选项。@Stefan好吧,毫无疑问,这是一个很好的方法。然而,它实际上并没有回答OP提供的问题。@HimBromBeere:奇怪的是,OP写下了这个答案。或许OP的意思只是不必直接摆弄Microsoft.Win32.RegistryKey?
static string AssocQueryString(AssocStr association, string extension) {
     const int S_OK = 0;
     const int S_FALSE = 1;

     uint length = 0;
     uint ret = AssocQueryString(AssocF.ASSOCF_NONE, association, extension, null, null, ref length);
     if (ret != S_FALSE) {
         throw new InvalidOperationException("Could not determine associated string");
     }

     var sb = new StringBuilder((int)length);
     ret = AssocQueryString(AssocF.ASSOCF_NONE, association, extension, null, sb, ref length);
     if (ret != S_OK) {
        throw new InvalidOperationException("Could not determine associated string");
     }

     return sb.ToString();
 static void Main(string[] args) {
           Console.WriteLine(AssocQueryString(AssocStr.ASSOCSTR_FRIENDLYAPPNAME, ".pdf"));
            Console.Read();
 }