Windows シェルのプロパティ システムは、ほとんどのビデオ ファイルで使用できるSystem.Video.FrameRate
(ドキュメントはこちら)という標準プロパティを定義します。周囲のドキュメントでは、これらの値を取得するためのアンマネージ API のみがカバーされています。
C# でこの Windows プロパティにアクセスするにはどうすればよいですか?
Windows シェルのプロパティ システムは、ほとんどのビデオ ファイルで使用できるSystem.Video.FrameRate
(ドキュメントはこちら)という標準プロパティを定義します。周囲のドキュメントでは、これらの値を取得するためのアンマネージ API のみがカバーされています。
C# でこの Windows プロパティにアクセスするにはどうすればよいですか?
シェル プロパティにアクセスするには (つまり、これらの 'Windows' プロパティは、アプリケーション固有のプロパティとは異なり、Windows によって事前定義された単なるシェル プロパティです)、相互運用または Windows API コード パックの 2 つの通常の方法があります。 .
Windows API コード パックは、 これを行う最も簡単な方法である可能性があります。このプロパティを取得するには、まず、使用するシェル オブジェクトを決定する必要があります。(プロパティは常にいくつかの特定のオブジェクトで見つかります。したがって、このプロパティは、システム フレーム レートを示すグローバルな値ではありません。通常、ビデオ ファイルに存在し、そのファイルのフレーム レートを示します。) このコードは、シェルを取得します。システムにたまたまあるビデオのオブジェクトを作成し、プロパティを取得してその値を表示します。
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);
プロパティの値は、null 許容の unsigned int であることに注意してください。type のプロパティを要求するとint
失敗し、そのようなプロパティが利用できないことを示します。だからあなたは行かなければなりませんuint?
。プロパティが実際に存在していたかどうかも確認する必要があります。存在することはわかっているので、ここでは気にしません。
もう 1 つのアプローチは、interop を使用してシェル API と直接対話することです (これは、API コード パックが行うことです)。ただし、これは大変な作業です。.NET 相互運用が可能な形式で、驚くほど多数の COM インターフェイスを定義する必要があるため、これら 3 行が行うことを実現するためにジャンプしなければならないフープの数は膨大です。扱う。