如何使用.NET C/C++/C#?
假设我们有Windows操作系统和一些视频播放器(如VLC媒体播放器或GOM播放器)。除了使用播放器API(大多数都没有任何公共API)之外,还有什么方法可以在.NET中捕获播放的视频(例如:打开的电影的文件名或路径)如何使用.NET C/C++/C#?,c#,c++,.net,windows,video,C#,C++,.net,Windows,Video,假设我们有Windows操作系统和一些视频播放器(如VLC媒体播放器或GOM播放器)。除了使用播放器API(大多数都没有任何公共API)之外,还有什么方法可以在.NET中捕获播放的视频(例如:打开的电影的文件名或路径) 谢谢你的建议。 据我所知,这些程序大部分都不会通过一些标准的Windows库来显示视频——可能是DirectShow或MediaFoundation,但是你不会得到100%的覆盖率。 如果您只想知道文件名或路径,您可以检查文件扩展名以了解常见的视频格式(avi、mp4、mov、f
谢谢你的建议。
据我所知,这些程序大部分都不会通过一些标准的Windows库来显示视频——可能是DirectShow或MediaFoundation,但是你不会得到100%的覆盖率。如果您只想知道文件名或路径,您可以检查文件扩展名以了解常见的视频格式(avi、mp4、mov、flv等)好的。。我认为你可以更近一步,就是监控电影播放器的输入和/或看电影播放器是否正在运行
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.
}
}
var videoFileFormats=新列表
{
{.3gp},
{.mp4}//等。。
};
var players=新列表
{
{“wmplayer”}//等。。
};
var processs=Process.getprocesss();
foreach(过程中的var过程){
试一试{
字符串appName=proc.ProcessName;
字符串appFileName=proc.MainModule.FileName;
字符串appExt=Path.GetExtension(appFileName);
if(videoFileFormats.Contains(appExt)| | players.Contains(appName)){
//做点什么。。
//找到。。
}
}捕获(例外E){
//这是因为你不能得到一些系统的过程。
}
}
在这样的一般定义中,没有可靠的方法可以做到这一点。在.NET中,您只需为HookAPI创建P/Invoke绑定或使用现有绑定,如。这可能会与搜索索引混淆,但您可能会找到一种方法来区分用户打开的文件与搜索索引/后台进程。