C# 如何使用C获取与文件扩展名关联的程序名?
在不使用Microsoft.Win32.RegistryKey的情况下,如何使用C获取与文件扩展名关联的程序名?使用WinApi函数 创建枚举和 创建一个助手方法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
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();
}