C# 獲取視頻文件播放時長


以前是用xp (32位)系統,獲取視頻文件長度是通過調用Shell32.dll來讀取文件信息得到的,最近換win7(32位)系統,編譯以前的項目代碼發現無法讀取了,代碼沒有改動,拿到在xp下運行也不行了,可將代碼在xp環境下編譯卻可以成功運行。附上代碼

/// <summary>
/// 獲取媒體文件播放時長
/// </summary>
/// <param name="path">媒體文件路徑</param>
/// <returns></returns>
public string GetMediaTimeLen(string path) {
    try
    {
 
        Shell32.Shell shell = new Shell32.ShellClass();
        //文件路徑
        Shell32.Folder folder = shell.NameSpace(path.Substring(0, path.LastIndexOf("\\")));
        //文件名稱
        Shell32.FolderItem folderitem = folder.ParseName(path.Substring(path.LastIndexOf("\\") + 1));
 
        return folder.GetDetailsOf(folderitem, 21);             
 
    }
    catch(Exception ex)
    {
        return null;
    }
   
}

網上搜索查到xp 與win7的Shell32.dll是不一樣的,要將參數設27,可以讀取視頻播放長度,但拿到xp下卻不可以,在xp引用的就不能再win7下讀取,通過visual studio引用后變成Interop.Shell32.dll,我在xp下引用的是windows目錄下的System32目錄的Shell32.dll,在win7下編譯目錄還是windows目錄下的System32目錄的Shell32.dll,2者版本不一致,於是拷貝xp下Shell32.dll到win7 項目下,並引用,編譯,可以成功讀取(但xp下GetDetailsOf的參數是21,win7下的是27)。於是先判斷下系統版本

Windows操作系統的版本號一覽

操作系統 PlatformID 主版本號 副版本號
Windows95 1 4 0
Windows98 1 4 10
WindowsMe 1 4 90
WindowsNT3.5 2 3 0
WindowsNT4.0 2 4 0
Windows2000 2 5 0
WindowsXP 2 5 1
Windows2003 2 5 2
WindowsVista 2 6 0
Windows7 2 6 1

於是一行代碼識別系統版本Environment.OSVersion.Version.Major >= 6,vista、win7 用參數27,xp、2003用21

public string GetMediaTimeLen(string path) {
            try
            {
 
                Shell32.Shell shell = new Shell32.ShellClass();
                //文件路徑
                Shell32.Folder folder = shell.NameSpace(path.Substring(0, path.LastIndexOf("\\")));
                //文件名稱
                Shell32.FolderItem folderitem = folder.ParseName(path.Substring(path.LastIndexOf("\\") + 1));
                if(Environment.OSVersion.Version.Major >= 6)
                {
                    return folder.GetDetailsOf(folderitem, 27);
                }
                else
                {
                    return folder.GetDetailsOf(folderitem, 21);
                }
               
 
            }
            catch(Exception ex)
            {
                return null;
            }
           
        }

現在既可以在xp下運行,也可以在win7下運行。(注意:64位系統win7不可用,暫未找到好的解決方法,望有成功的提供方法。)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM