C# 是否可以通过编程确定是否正在播放视频?

C# 是否可以通过编程确定是否正在播放视频?,c#,.net,video,directx,C#,.net,Video,Directx,是否可以(最好使用.NET)确定当前是否正在播放视频?即使仅限于硬件加速播放,也总比没有好 如果我能确定在多显示器系统中播放的是什么显示器,我会得到额外的分数。我认为这在全球范围内是不可能的,因为视频可以通过DirectX、OpenGL甚至GDI播放。我认为您最好的选择是有一个用于播放和轮询正在运行的进程的应用程序的白名单。一旦你有了这个过程,你就可以试着找到它的窗口/控件,或者试着获取HDC,并使用合适的(最有可能是DirectShow)API来查询或操作设备 当您有一个窗口时,对System

是否可以(最好使用.NET)确定当前是否正在播放视频?即使仅限于硬件加速播放,也总比没有好


如果我能确定在多显示器系统中播放的是什么显示器,我会得到额外的分数。

我认为这在全球范围内是不可能的,因为视频可以通过DirectX、OpenGL甚至GDI播放。我认为您最好的选择是有一个用于播放和轮询正在运行的进程的应用程序的白名单。一旦你有了这个过程,你就可以试着找到它的窗口/控件,或者试着获取HDC,并使用合适的(最有可能是DirectShow)API来查询或操作设备

当您有一个窗口时,对System.Windows.Forms.Screen的简单调用将告诉您哪个屏幕显示这些坐标。

从alax.info进行调查。这将允许您“监视”正在运行的DirectShow图形。与类似的工具结合使用非常有用

<>我是一个C++开发人员,编写DirectShow应用程序,并且一直使用这两种工具,它们是必不可少的调试工具。 用谷歌搜索运行对象表的主题。DirectShow图形(通常)添加到正在运行的对象表中,因此您可以枚举ROT以确定系统上正在运行的图形

您的视频卡将使用DirectShow渲染器过滤器在DirectShow图形中播放视频。渲染器通常由解码器过滤器提供。解码器滤波器负责解码视频,必须指示解码器使用DXVA加速

例如,您可能在播放图中有一个H.264解码器过滤器,您必须指示它使用DXVA加速

根据我的经验,解码器过滤器将有一个选项,允许您打开/关闭DXVA加速视频解码,但这将特定于所讨论的解码器,因此它将更难被普遍检测

例如,您可以编写代码,通过查询正在解码H.264流的运行图中的解码器过滤器来检测是否启用了DXVA,但查询VP8图的解码器过滤器的代码很可能具有不同的代码

支持我的经验,DXVA加速通过解码器过滤器切换;可能有一些方法可以查询图形卡,但我认为这将是特定于gfx卡供应商的


抱歉,答案没有更具体,但我希望它能为您指明正确的方向…

您是说检测它是否在网站上播放吗?或者只是一般?只是一般。媒体播放器、VLC等使用视频卡加速(如果有覆盖层等)。我正在尝试捕捉是否发生这种情况。类似问题和一些可能的解决方案: