4

Windows Shell 的属性系统定义了一个称为System.Video.FrameRate在此处记录)的标准属性,该属性可用于大多数视频文件。周围的文档仅涵盖用于获取这些值的非托管 API。

如何在 C# 中访问此 Windows 属性?

4

1 回答 1

4

要访问 shell 属性(就是这样 - 这些“Windows”属性只是 Windows 预定义的 shell 属性,与特定于应用程序的属性不同)有两种常用方法:互操作或 Windows API 代码包.

Windows API 代码包可能是执行此操作的最简单方法。 要获得此属性,首先需要确定要使用的 shell 对象。(属性总是在某些特定对象上找到。所以这个属性不是告诉你系统帧速率的一些全局值 - 它通常出现在视频文件中,它告诉你该文件的帧速率。)这段代码获取外壳我碰巧在我的系统上拥有的视频的对象,检索属性并显示其值。

ShellObject obj = ShellObject.FromParsingName(@"D:\Video\IanAndDeborahTree.mp4");
ShellProperty<uint?> rateProp = obj.Properties.GetProperty<uint?>("System.Video.FrameRate");
Debug.WriteLine("{0:G3}FPS", rateProp.Value/1000.0);

请注意,该属性的值是一个可为空的 unsigned int。如果您请求 type 的属性int,它将失败,表明没有此类属性可用。所以你必须去uint?。你真的应该检查一下该物业是否真的存在——我不在这里打扰,因为我知道它会存在。

另一种方法是使用互操作直接与 shell API 对话(这是 API 代码包为您所做的)。但这需要做很多工作——为了实现这三行代码,您必须跳过的圈数非常庞大,因为您最终需要以 .NET 互操作可以的形式定义数量惊人的 COM 接口处理。

于 2013-07-24T14:57:11.147 回答