在 C# 中访问媒体文件的 shell 属性 "Length"(又名持续时间)

Access a media file's shell property "Length" (aka Duration) in C#

我注意到在 windows 7 中每个媒体文件的 shell 属性中,视频文件的持续时间实际上称为 "length"。任何人都知道使用 shell?

访问长度 属性 的快速方法

所以我找到了一种访问媒体文件的 "Length" shell 属性 或任何 shell 属性 的非常简短快捷的方法这很重要,只要您知道 属性.

的等效索引号

首先,您需要在项目中添加对 shell32 的引用,如下所示:

  1. 右击项目

  2. 单击添加引用

  3. 单击“添加引用”中的 .COM 选项卡 window

  4. Select 微软 Shell 控制与自动化

  5. 点击确定

然后在代码隐藏中添加 using Shell32;。 现在您可以使用 GetDetailsOf() 方法在 foreach 循环中提取文件夹中每个媒体文件的长度 属性:

string[] supportedExtensions = new[] { ".mov", ".mp4", ".avi", ".mpeg", ".mpg", ".wmv", ".mkv", ".m4v", ".flv" };

var allFiles = Directory.GetFiles(SelectedFolderPath, "*.*", SearchOption.TopDirectoryOnly).Where(s => supportedExtensions.Contains(System.IO.Path.GetExtension(s).ToLower()));

foreach (string name in allFiles)

{
   Shell shell = new Shell();
   Folder rFolder = shell.NameSpace(@SelectedFolderPath);
   FolderItem rFiles = rFolder.ParseName(System.IO.Path.GetFileName(name));
   string videosLength = rFolder.GetDetailsOf(rFiles, 27).Trim();
}

其中,"SelectedFolderPath" 应该是您要扫描的文件夹,您在 GetDetailsOf 方法中作为参数看到的数字 27 是 "Length" Shell 的索引号属性,具体来说。

现在您在字符串 "videosLength" 中以 ##:##:## 格式获得了媒体文件的持续时间。

希望对您有所帮助! 干杯!

我试过上面的代码 Windows 10 21H1 build 19043.1165 和 VS 2012 with .Net 4.5 上面不会直接编译下面修改版本的代码就可以了。

Shell32.Shell sh = new Shell32.Shell();
Shell32.Folder rFolder = sh.NameSpace(SelectedFolderPath);
Shell32.FolderItem rFiles = rFolder.ParseName(System.IO.Path.GetFileName(name));
string videosLength = rFolder.GetDetailsOf(rFiles,208).Trim();

以上代码读取了Input Video文件的Media creation。