我试图在 C# 中使用 Shell32 确定视频文件的分辨率,但属性返回空字符串,尽管 Windows shell 显示信息很好。
请注意,我不能为此任务(DirectShow 或其他)合并任何第三方库。
对于不同的视频文件,此行为仍然存在。可悲的是,这里提供的答案都没有帮助。
我正在使用以下代码来提取信息:
Shell32.Shell shell = new Shell32.Shell();
Shell32.Folder objFolder;
objFolder = shell.NameSpace(Path.GetDirectoryName(videoFile.FullName));
FolderItem objFile = objFolder.ParseName(videoFile.Name);
List<string> arrHeaders = new List<string>();
for (int i = 0; i < 1000; i++) {
string header = objFolder.GetDetailsOf(null, i);
if (String.IsNullOrEmpty(header))
continue;
arrHeaders.Add(header);
}
var length = objFolder.GetDetailsOf(
objFile, arrHeaders.FindIndex(h => h == "Length"));
var resWidth = objFolder.GetDetailsOf(
objFile, arrHeaders.FindIndex(h => h == "Frame width"));
var resHeight = objFolder.GetDetailsOf(
objFile, arrHeaders.FindIndex(h => h == "Frame height"));
对于以下文件,我希望resWidth
拥有该值"1920"
并resHeight
拥有该值"1080"
,但它们都包含空字符串。这两个属性都存在于 中arrHeaders
,特别是在我的系统上的索引 301 和 303 中。
作为旁注,该Length
属性按预期工作。