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主版本号副版本号
Windows95140
Windows981410
WindowsMe1490
WindowsNT3.5230
WindowsNT4.0240
Windows2000250
WindowsXP251
Windows2003252
WindowsVista260
Windows7261

于是一行代码识别系统版本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不可用,暂未找到好的解决方法,望有成功的提供方法。)

转载于:https://www.cnblogs.com/ITBread/archive/2012/05/14/2500411.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值