如何使用 .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# 检测该视频是不是在播放器中打开?的主要内容,如果未能解决你的问题,请参考以下文章