如何使用 .NET C/C++/C# 检测该视频是不是在播放器中打开?

Posted

技术标签:

【中文标题】如何使用 .NET C/C++/C# 检测该视频是不是在播放器中打开?【英文标题】:How to detect that video was opened in player with .NET C/C++/C#?如何使用 .NET C/C++/C# 检测该视频是否在播放器中打开? 【发布时间】:2012-01-21 12:58:16 【问题描述】:

假设我们有 Windows 操作系统和一些视频播放器(例如 VLC 媒体播放器或 GOM 播放器)。除了使用播放器API(大多数没有任何公共API)之外,还有什么方法可以在.NET中捕获播放的视频(例如:文件名或打开电影的路径)。

感谢您的建议。

【问题讨论】:

在这样的一般定义中没有可靠的方法来做到这一点。 【参考方案1】:

据我所知,这些程序中的大多数都不会通过一些标准的 Windows 库来显示视频 - 可能是 DirectShow 或 Media Foundation,但您不会通过这种方式获得 100% 的覆盖率。

如果您只是想要文件名或路径,您可以monitor files with HookAPI.dll 并检查常见视频格式(avi、mp4、mov、flv 等)的文件扩展名

【讨论】:

在 .NET 中,您只需为 HookAPI 创建 P/Invoke 绑定或使用现有绑定,如 EasyHook。这可能会与搜索索引混淆,但您可能会找到一种方法来区分用户打开的文件与搜索索引/后台进程。【参考方案2】:

嗯.. 我认为你可以更进一步,监控MainWindowTitle 中的video file formats 和/或查看电影播放器​​是否正在运行。

var videoFileFormats = new List<string>

  ".3gp",
   ".mp4" //etc.. 
;

var players = new List<string>

     "wmplayer" //etc..
;

 var processes = Process.GetProcesses();

 foreach (var proc in processes) 
       try 

         string appName = proc.ProcessName;
         string appFileName = proc.MainModule.FileName;
         string appExt = Path.GetExtension(appFileName);

         if (videoFileFormats.Contains(appExt) || players.Contains(appName)) 
               //do something..
               //found..
         

         catch (Exception E) 
              //it's because you can't get some process of system.
         

   

【讨论】:

以上是关于如何使用 .NET C/C++/C# 检测该视频是不是在播放器中打开?的主要内容,如果未能解决你的问题,请参考以下文章

如何在LLVM中检测const修饰符?

如何在 FFmpeg C/C++ 中寻找

WinCE C/C++ 运行时库下如何检测泄漏?

便宜出课!2018全套C语言C++C#零基础视频教程.Net从入门到精通编程开发我有原版

C/C++程序员是什么让你有如此优势?音视频开发该怎么学?

如何在 c / c++ 程序中检测可能/潜在的堆栈溢出问题?