如何使用Shell32(Windows 10)在C#中缺少视频文件的“帧高度”和“帧宽度”属性?

时间:2019-04-29 11:26:09

标签: c# windows windows-10 shell32 extended-properties

我正在尝试使用C#中的Shell32确定视频文件的分辨率,但是尽管Windows Shell可以很好地显示信息,但是属性返回空字符串。

请注意,我不能为此任务合并任何第三方库(DirectShow或其他)。

对于其他视频文件,此行为仍然存在。遗憾的是,here中提供的答案都没有帮助。

我正在使用以下代码提取信息:

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中。

Hearthstone.mp4 file properties

请注意,Length属性可以正常工作。

1 个答案:

答案 0 :(得分:0)

哇,对此感到抱歉。我似乎完全跳过了以下事实:由于我跳过了空标题,因此我不正确地枚举了索引。问题解决了!