Я пытаюсь определить разрешение видеофайлов с помощью Shell32 в C #, но свойства возвращают пустые строки, хотя оболочка Windows отображает информацию просто отлично.
Обратите внимание, что я не могу включить какие-либо сторонние организациибиблиотеки для этой задачи (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
работает, как и ожидалось.